@elie-laloum/outpost 5.0.0 → 7.0.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 (647) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/README.md +11 -11
  3. package/SECURITY.md +10 -0
  4. package/dist/adapters/agents/antigravity-adapter.d.ts +3 -0
  5. package/dist/adapters/agents/antigravity-adapter.js +41 -0
  6. package/dist/adapters/agents/antigravity-adapter.js.map +1 -0
  7. package/dist/adapters/agents/antigravity-authentication.d.ts +2 -0
  8. package/dist/adapters/agents/antigravity-authentication.js +27 -0
  9. package/dist/adapters/agents/antigravity-authentication.js.map +1 -0
  10. package/dist/adapters/agents/antigravity-diagnostics.d.ts +1 -0
  11. package/dist/adapters/agents/antigravity-diagnostics.js +6 -0
  12. package/dist/adapters/agents/antigravity-diagnostics.js.map +1 -0
  13. package/dist/adapters/agents/antigravity-events.d.ts +2 -0
  14. package/dist/adapters/agents/antigravity-events.js +75 -0
  15. package/dist/adapters/agents/antigravity-events.js.map +1 -0
  16. package/dist/adapters/agents/antigravity-request.d.ts +5 -0
  17. package/dist/adapters/agents/antigravity-request.js +37 -0
  18. package/dist/adapters/agents/antigravity-request.js.map +1 -0
  19. package/dist/adapters/agents/antigravity.constants.d.ts +3 -0
  20. package/dist/adapters/agents/antigravity.constants.js +4 -0
  21. package/dist/adapters/agents/antigravity.constants.js.map +1 -0
  22. package/dist/adapters/agents/{gemini.types.d.ts → antigravity.types.d.ts} +2 -2
  23. package/dist/adapters/agents/antigravity.types.js +2 -0
  24. package/dist/adapters/agents/antigravity.types.js.map +1 -0
  25. package/dist/adapters/agents/authentication.constants.d.ts +19 -9
  26. package/dist/adapters/agents/authentication.constants.js +12 -9
  27. package/dist/adapters/agents/authentication.constants.js.map +1 -1
  28. package/dist/adapters/agents/authentication.d.ts +11 -2
  29. package/dist/adapters/agents/authentication.js +70 -47
  30. package/dist/adapters/agents/authentication.js.map +1 -1
  31. package/dist/adapters/agents/authentication.types.d.ts +20 -0
  32. package/dist/adapters/agents/authentication.types.js +2 -0
  33. package/dist/adapters/agents/authentication.types.js.map +1 -0
  34. package/dist/adapters/agents/claude-adapter.js +4 -2
  35. package/dist/adapters/agents/claude-adapter.js.map +1 -1
  36. package/dist/adapters/agents/claude-authentication.d.ts +2 -0
  37. package/dist/adapters/agents/claude-authentication.js +34 -0
  38. package/dist/adapters/agents/claude-authentication.js.map +1 -0
  39. package/dist/adapters/agents/claude-events.js +52 -9
  40. package/dist/adapters/agents/claude-events.js.map +1 -1
  41. package/dist/adapters/agents/claude-request.js +2 -0
  42. package/dist/adapters/agents/claude-request.js.map +1 -1
  43. package/dist/adapters/agents/cli-diagnostics.constants.d.ts +6 -6
  44. package/dist/adapters/agents/cli-diagnostics.constants.js +6 -6
  45. package/dist/adapters/agents/cli-diagnostics.constants.js.map +1 -1
  46. package/dist/adapters/agents/cli-diagnostics.d.ts +1 -0
  47. package/dist/adapters/agents/cli-diagnostics.js +18 -0
  48. package/dist/adapters/agents/cli-diagnostics.js.map +1 -1
  49. package/dist/adapters/agents/codex-adapter.js +4 -2
  50. package/dist/adapters/agents/codex-adapter.js.map +1 -1
  51. package/dist/adapters/agents/codex-authentication.d.ts +3 -0
  52. package/dist/adapters/agents/codex-authentication.js +47 -0
  53. package/dist/adapters/agents/codex-authentication.js.map +1 -0
  54. package/dist/adapters/agents/codex-events.js +28 -2
  55. package/dist/adapters/agents/codex-events.js.map +1 -1
  56. package/dist/adapters/agents/copilot-adapter.d.ts +3 -0
  57. package/dist/adapters/agents/copilot-adapter.js +45 -0
  58. package/dist/adapters/agents/copilot-adapter.js.map +1 -0
  59. package/dist/adapters/agents/copilot-authentication.d.ts +2 -0
  60. package/dist/adapters/agents/copilot-authentication.js +46 -0
  61. package/dist/adapters/agents/copilot-authentication.js.map +1 -0
  62. package/dist/adapters/agents/copilot-diagnostics.d.ts +1 -0
  63. package/dist/adapters/agents/copilot-diagnostics.js +6 -0
  64. package/dist/adapters/agents/copilot-diagnostics.js.map +1 -0
  65. package/dist/adapters/agents/copilot-events.d.ts +2 -0
  66. package/dist/adapters/agents/copilot-events.js +66 -0
  67. package/dist/adapters/agents/copilot-events.js.map +1 -0
  68. package/dist/adapters/agents/copilot-request.d.ts +5 -0
  69. package/dist/adapters/agents/copilot-request.js +24 -0
  70. package/dist/adapters/agents/copilot-request.js.map +1 -0
  71. package/dist/adapters/agents/copilot-usage.d.ts +3 -0
  72. package/dist/adapters/agents/copilot-usage.js +19 -0
  73. package/dist/adapters/agents/copilot-usage.js.map +1 -0
  74. package/dist/adapters/agents/copilot.types.d.ts +6 -0
  75. package/dist/adapters/agents/copilot.types.js +2 -0
  76. package/dist/adapters/agents/copilot.types.js.map +1 -0
  77. package/dist/adapters/agents/event-decoder.d.ts +2 -2
  78. package/dist/adapters/agents/event-decoder.js +6 -5
  79. package/dist/adapters/agents/event-decoder.js.map +1 -1
  80. package/dist/adapters/agents/kimi-adapter.d.ts +3 -0
  81. package/dist/adapters/agents/kimi-adapter.js +51 -0
  82. package/dist/adapters/agents/kimi-adapter.js.map +1 -0
  83. package/dist/adapters/agents/kimi-authentication.d.ts +3 -0
  84. package/dist/adapters/agents/kimi-authentication.js +63 -0
  85. package/dist/adapters/agents/kimi-authentication.js.map +1 -0
  86. package/dist/adapters/agents/kimi-diagnostics.d.ts +2 -0
  87. package/dist/adapters/agents/kimi-diagnostics.js +14 -0
  88. package/dist/adapters/agents/kimi-diagnostics.js.map +1 -0
  89. package/dist/adapters/agents/kimi-events.d.ts +2 -0
  90. package/dist/adapters/agents/kimi-events.js +55 -0
  91. package/dist/adapters/agents/kimi-events.js.map +1 -0
  92. package/dist/adapters/agents/kimi-fork.d.ts +2 -0
  93. package/dist/adapters/agents/kimi-fork.js +11 -0
  94. package/dist/adapters/agents/kimi-fork.js.map +1 -0
  95. package/dist/adapters/agents/{gemini-request.d.ts → kimi-request.d.ts} +2 -2
  96. package/dist/adapters/agents/kimi-request.js +33 -0
  97. package/dist/adapters/agents/kimi-request.js.map +1 -0
  98. package/dist/adapters/agents/kimi-usage.d.ts +2 -0
  99. package/dist/adapters/agents/kimi-usage.js +7 -0
  100. package/dist/adapters/agents/kimi-usage.js.map +1 -0
  101. package/dist/adapters/agents/kimi.constants.d.ts +13 -0
  102. package/dist/adapters/agents/kimi.constants.js +14 -0
  103. package/dist/adapters/agents/kimi.constants.js.map +1 -0
  104. package/dist/adapters/agents/kimi.types.d.ts +7 -0
  105. package/dist/adapters/agents/kimi.types.js +2 -0
  106. package/dist/adapters/agents/kimi.types.js.map +1 -0
  107. package/dist/adapters/agents/model-support.constants.d.ts +3 -1
  108. package/dist/adapters/agents/model-support.constants.js +12 -2
  109. package/dist/adapters/agents/model-support.constants.js.map +1 -1
  110. package/dist/adapters/agents/protocol-fixtures.constants.d.ts +2 -2
  111. package/dist/adapters/agents/protocol-fixtures.constants.js +131 -9
  112. package/dist/adapters/agents/protocol-fixtures.constants.js.map +1 -1
  113. package/dist/adapters/agents/protocol-fixtures.types.d.ts +1 -0
  114. package/dist/adapters/agents/protocol-fixtures.types.js.map +1 -1
  115. package/dist/adapters/agents/protocol.d.ts +1 -0
  116. package/dist/adapters/agents/protocol.js +9 -0
  117. package/dist/adapters/agents/protocol.js.map +1 -1
  118. package/dist/adapters/agents/session-usage.constants.d.ts +10 -0
  119. package/dist/adapters/agents/session-usage.constants.js +110 -0
  120. package/dist/adapters/agents/session-usage.constants.js.map +1 -0
  121. package/dist/adapters/agents/session-usage.d.ts +5 -0
  122. package/dist/adapters/agents/session-usage.js +45 -0
  123. package/dist/adapters/agents/session-usage.js.map +1 -0
  124. package/dist/adapters/agents/settings.types.d.ts +1 -0
  125. package/dist/adapters/agents/settings.types.js.map +1 -1
  126. package/dist/adapters/agents/tool-result.d.ts +2 -0
  127. package/dist/adapters/agents/tool-result.js +17 -0
  128. package/dist/adapters/agents/tool-result.js.map +1 -0
  129. package/dist/adapters/models/anthropic-response.js +3 -0
  130. package/dist/adapters/models/anthropic-response.js.map +1 -1
  131. package/dist/adapters/models/http-provider.js +6 -1
  132. package/dist/adapters/models/http-provider.js.map +1 -1
  133. package/dist/adapters/models/openai-responses.js +10 -0
  134. package/dist/adapters/models/openai-responses.js.map +1 -1
  135. package/dist/adapters/models/retry-after.d.ts +1 -0
  136. package/dist/adapters/models/retry-after.js +16 -0
  137. package/dist/adapters/models/retry-after.js.map +1 -0
  138. package/dist/application/activity-watchdog.js +1 -2
  139. package/dist/application/activity-watchdog.js.map +1 -1
  140. package/dist/application/agent-authentication.d.ts +4 -0
  141. package/dist/application/agent-authentication.js +32 -0
  142. package/dist/application/agent-authentication.js.map +1 -0
  143. package/dist/application/agent-bootstrap.constants.d.ts +2 -5
  144. package/dist/application/agent-bootstrap.constants.js +27 -4
  145. package/dist/application/agent-bootstrap.constants.js.map +1 -1
  146. package/dist/application/agent-bootstrap.js +39 -12
  147. package/dist/application/agent-bootstrap.js.map +1 -1
  148. package/dist/application/agent-bootstrap.types.d.ts +19 -0
  149. package/dist/application/agent-bootstrap.types.js +2 -0
  150. package/dist/application/agent-bootstrap.types.js.map +1 -0
  151. package/dist/application/agent-output.js +74 -8
  152. package/dist/application/agent-output.js.map +1 -1
  153. package/dist/application/agent-request.d.ts +3 -0
  154. package/dist/application/agent-request.js +11 -0
  155. package/dist/application/agent-request.js.map +1 -0
  156. package/dist/application/agent-turn.js +74 -6
  157. package/dist/application/agent-turn.js.map +1 -1
  158. package/dist/application/agent-usage.d.ts +6 -0
  159. package/dist/application/agent-usage.js +57 -0
  160. package/dist/application/agent-usage.js.map +1 -0
  161. package/dist/application/attach.js +2 -0
  162. package/dist/application/attach.js.map +1 -1
  163. package/dist/application/credential-installer.constants.d.ts +1 -0
  164. package/dist/application/credential-installer.constants.js +22 -0
  165. package/dist/application/credential-installer.constants.js.map +1 -0
  166. package/dist/application/custom-turn.js +44 -49
  167. package/dist/application/custom-turn.js.map +1 -1
  168. package/dist/application/dispatch-observation.d.ts +1 -1
  169. package/dist/application/dispatch-observation.js +141 -21
  170. package/dist/application/dispatch-observation.js.map +1 -1
  171. package/dist/application/dispatch-observation.types.d.ts +2 -0
  172. package/dist/application/dispatch-observation.types.js.map +1 -1
  173. package/dist/application/dispatch-validation.js +2 -0
  174. package/dist/application/dispatch-validation.js.map +1 -1
  175. package/dist/application/dispatch.js +1 -1
  176. package/dist/application/dispatch.js.map +1 -1
  177. package/dist/application/doctor-agent.constants.d.ts +2 -8
  178. package/dist/application/doctor-agent.constants.js +43 -6
  179. package/dist/application/doctor-agent.constants.js.map +1 -1
  180. package/dist/application/doctor-agent.d.ts +2 -1
  181. package/dist/application/doctor-agent.js +15 -3
  182. package/dist/application/doctor-agent.js.map +1 -1
  183. package/dist/application/doctor-image.js +4 -6
  184. package/dist/application/doctor-image.js.map +1 -1
  185. package/dist/application/doctor-protocol.js +6 -11
  186. package/dist/application/doctor-protocol.js.map +1 -1
  187. package/dist/application/doctor-protocol.types.d.ts +1 -1
  188. package/dist/application/doctor-protocol.types.js.map +1 -1
  189. package/dist/application/doctor-sandbox.js +2 -5
  190. package/dist/application/doctor-sandbox.js.map +1 -1
  191. package/dist/application/doctor.js +28 -10
  192. package/dist/application/doctor.js.map +1 -1
  193. package/dist/application/doctor.types.d.ts +10 -1
  194. package/dist/application/doctor.types.js.map +1 -1
  195. package/dist/application/execution.constants.d.ts +2 -0
  196. package/dist/application/execution.constants.js +2 -0
  197. package/dist/application/execution.constants.js.map +1 -1
  198. package/dist/application/execution.types.d.ts +8 -0
  199. package/dist/application/execution.types.js.map +1 -1
  200. package/dist/application/harness-budget.d.ts +3 -0
  201. package/dist/application/harness-budget.js +42 -0
  202. package/dist/application/harness-budget.js.map +1 -0
  203. package/dist/application/harness-budget.types.d.ts +5 -0
  204. package/dist/application/harness-budget.types.js +2 -0
  205. package/dist/application/harness-budget.types.js.map +1 -0
  206. package/dist/application/harness-hooks.js +34 -3
  207. package/dist/application/harness-hooks.js.map +1 -1
  208. package/dist/application/harness-loop.js +52 -24
  209. package/dist/application/harness-loop.js.map +1 -1
  210. package/dist/application/harness-model-provider.d.ts +3 -0
  211. package/dist/application/harness-model-provider.js +49 -0
  212. package/dist/application/harness-model-provider.js.map +1 -0
  213. package/dist/application/harness-model-provider.types.d.ts +10 -0
  214. package/dist/application/harness-model-provider.types.js +2 -0
  215. package/dist/application/harness-model-provider.types.js.map +1 -0
  216. package/dist/application/harness-subagent.d.ts +4 -0
  217. package/dist/application/harness-subagent.js +110 -0
  218. package/dist/application/harness-subagent.js.map +1 -0
  219. package/dist/application/harness.types.d.ts +11 -0
  220. package/dist/application/harness.types.js.map +1 -1
  221. package/dist/application/lifecycle-hooks.d.ts +1 -1
  222. package/dist/application/lifecycle-hooks.js +5 -4
  223. package/dist/application/lifecycle-hooks.js.map +1 -1
  224. package/dist/application/observed-lease.d.ts +3 -0
  225. package/dist/application/observed-lease.js +26 -0
  226. package/dist/application/observed-lease.js.map +1 -0
  227. package/dist/application/outpost.types.d.ts +3 -1
  228. package/dist/application/outpost.types.js.map +1 -1
  229. package/dist/application/output-lines.d.ts +4 -0
  230. package/dist/application/output-lines.js +28 -0
  231. package/dist/application/output-lines.js.map +1 -0
  232. package/dist/application/queue-worker.js +1 -1
  233. package/dist/application/queue-worker.js.map +1 -1
  234. package/dist/application/queue-worker.types.d.ts +1 -0
  235. package/dist/application/queue-worker.types.js.map +1 -1
  236. package/dist/application/queued-task.js +24 -5
  237. package/dist/application/queued-task.js.map +1 -1
  238. package/dist/application/recovery-archive.d.ts +3 -2
  239. package/dist/application/recovery-archive.js +9 -2
  240. package/dist/application/recovery-archive.js.map +1 -1
  241. package/dist/application/recovery-restore.d.ts +3 -2
  242. package/dist/application/recovery-restore.js +9 -2
  243. package/dist/application/recovery-restore.js.map +1 -1
  244. package/dist/application/recovery-retention.d.ts +3 -2
  245. package/dist/application/recovery-retention.js +74 -26
  246. package/dist/application/recovery-retention.js.map +1 -1
  247. package/dist/application/remote-workspace.js +5 -4
  248. package/dist/application/remote-workspace.js.map +1 -1
  249. package/dist/application/remote-workspace.types.d.ts +1 -0
  250. package/dist/application/remote-workspace.types.js.map +1 -1
  251. package/dist/application/sandbox-agents.js +19 -19
  252. package/dist/application/sandbox-agents.js.map +1 -1
  253. package/dist/application/sandbox-attach.js +12 -3
  254. package/dist/application/sandbox-attach.js.map +1 -1
  255. package/dist/application/sandbox-dispatch.js +13 -27
  256. package/dist/application/sandbox-dispatch.js.map +1 -1
  257. package/dist/application/sandbox-provision.js +15 -9
  258. package/dist/application/sandbox-provision.js.map +1 -1
  259. package/dist/application/sandbox-session.types.d.ts +7 -2
  260. package/dist/application/sandbox-session.types.js.map +1 -1
  261. package/dist/application/sandbox.js +13 -6
  262. package/dist/application/sandbox.js.map +1 -1
  263. package/dist/application/speculation-checkpoint.d.ts +6 -0
  264. package/dist/application/speculation-checkpoint.js +206 -0
  265. package/dist/application/speculation-checkpoint.js.map +1 -0
  266. package/dist/application/speculation-checkpoint.types.d.ts +24 -0
  267. package/dist/application/speculation-checkpoint.types.js +2 -0
  268. package/dist/application/speculation-checkpoint.types.js.map +1 -0
  269. package/dist/application/speculation-integration.constants.d.ts +4 -0
  270. package/dist/application/speculation-integration.constants.js +5 -0
  271. package/dist/application/speculation-integration.constants.js.map +1 -0
  272. package/dist/application/speculation-integration.d.ts +2 -0
  273. package/dist/application/speculation-integration.js +67 -0
  274. package/dist/application/speculation-integration.js.map +1 -0
  275. package/dist/application/speculation-resume.d.ts +4 -0
  276. package/dist/application/speculation-resume.js +71 -0
  277. package/dist/application/speculation-resume.js.map +1 -0
  278. package/dist/application/speculation-run.d.ts +4 -0
  279. package/dist/application/speculation-run.js +320 -0
  280. package/dist/application/speculation-run.js.map +1 -0
  281. package/dist/application/speculation-timeout.d.ts +1 -0
  282. package/dist/application/speculation-timeout.js +15 -0
  283. package/dist/application/speculation-timeout.js.map +1 -0
  284. package/dist/application/speculation.constants.d.ts +1 -0
  285. package/dist/application/speculation.constants.js +5 -1
  286. package/dist/application/speculation.constants.js.map +1 -1
  287. package/dist/application/speculation.js +41 -149
  288. package/dist/application/speculation.js.map +1 -1
  289. package/dist/application/speculation.types.d.ts +23 -0
  290. package/dist/application/speculation.types.js.map +1 -1
  291. package/dist/application/startup-recovery.js +14 -1
  292. package/dist/application/startup-recovery.js.map +1 -1
  293. package/dist/application/startup-recovery.types.d.ts +1 -0
  294. package/dist/application/startup-recovery.types.js.map +1 -1
  295. package/dist/application/stop-reason.d.ts +2 -0
  296. package/dist/application/stop-reason.js +21 -0
  297. package/dist/application/stop-reason.js.map +1 -0
  298. package/dist/application/stop-reason.types.d.ts +4 -0
  299. package/dist/application/stop-reason.types.js +2 -0
  300. package/dist/application/stop-reason.types.js.map +1 -0
  301. package/dist/application/storage-reservation.js +9 -2
  302. package/dist/application/storage-reservation.js.map +1 -1
  303. package/dist/application/task-observation.d.ts +3 -0
  304. package/dist/application/task-observation.js +22 -0
  305. package/dist/application/task-observation.js.map +1 -0
  306. package/dist/application/task-usage.js +5 -12
  307. package/dist/application/task-usage.js.map +1 -1
  308. package/dist/application/tasks.js +41 -16
  309. package/dist/application/tasks.js.map +1 -1
  310. package/dist/application/tool-execution.js +42 -19
  311. package/dist/application/tool-execution.js.map +1 -1
  312. package/dist/application/workspace.js +6 -4
  313. package/dist/application/workspace.js.map +1 -1
  314. package/dist/cli/doctor-command.js +6 -2
  315. package/dist/cli/doctor-command.js.map +1 -1
  316. package/dist/cli/init-authentication.d.ts +4 -1
  317. package/dist/cli/init-authentication.js +28 -33
  318. package/dist/cli/init-authentication.js.map +1 -1
  319. package/dist/cli/init-command.js +3 -3
  320. package/dist/cli/init-command.js.map +1 -1
  321. package/dist/cli/main.constants.d.ts +50 -13
  322. package/dist/cli/main.constants.js +70 -8
  323. package/dist/cli/main.constants.js.map +1 -1
  324. package/dist/cli/main.js +2 -1
  325. package/dist/cli/main.js.map +1 -1
  326. package/dist/cli/scaffold-files.js +1 -1
  327. package/dist/cli/scaffold-files.js.map +1 -1
  328. package/dist/cli/scaffold-validation.js +29 -22
  329. package/dist/cli/scaffold-validation.js.map +1 -1
  330. package/dist/cli/scaffold.constants.d.ts +0 -1
  331. package/dist/cli/scaffold.constants.js +6 -2
  332. package/dist/cli/scaffold.constants.js.map +1 -1
  333. package/dist/cli/scaffold.types.d.ts +8 -2
  334. package/dist/cli/scaffold.types.js.map +1 -1
  335. package/dist/cli/starters.js +1 -3
  336. package/dist/cli/starters.js.map +1 -1
  337. package/dist/domain/agent-observation.d.ts +4 -0
  338. package/dist/domain/agent-observation.js +27 -0
  339. package/dist/domain/agent-observation.js.map +1 -0
  340. package/dist/domain/agent.types.d.ts +122 -14
  341. package/dist/domain/agent.types.js.map +1 -1
  342. package/dist/domain/authentication.constants.d.ts +3 -0
  343. package/dist/domain/authentication.constants.js +11 -0
  344. package/dist/domain/authentication.constants.js.map +1 -0
  345. package/dist/domain/authentication.d.ts +3 -0
  346. package/dist/domain/authentication.js +22 -0
  347. package/dist/domain/authentication.js.map +1 -0
  348. package/dist/domain/authentication.types.d.ts +5 -0
  349. package/dist/domain/authentication.types.js +2 -0
  350. package/dist/domain/authentication.types.js.map +1 -0
  351. package/dist/domain/harness.d.ts +2 -2
  352. package/dist/domain/harness.js +6 -0
  353. package/dist/domain/harness.js.map +1 -1
  354. package/dist/domain/harness.types.d.ts +4 -3
  355. package/dist/domain/harness.types.js.map +1 -1
  356. package/dist/domain/model.types.d.ts +8 -0
  357. package/dist/domain/model.types.js.map +1 -1
  358. package/dist/domain/observation.constants.d.ts +8 -0
  359. package/dist/domain/observation.constants.js +9 -0
  360. package/dist/domain/observation.constants.js.map +1 -0
  361. package/dist/domain/observation.d.ts +2 -0
  362. package/dist/domain/observation.js +190 -0
  363. package/dist/domain/observation.js.map +1 -0
  364. package/dist/domain/observation.types.d.ts +84 -0
  365. package/dist/domain/observation.types.js +2 -0
  366. package/dist/domain/observation.types.js.map +1 -0
  367. package/dist/domain/observed-operation.d.ts +2 -0
  368. package/dist/domain/observed-operation.js +30 -0
  369. package/dist/domain/observed-operation.js.map +1 -0
  370. package/dist/domain/sandbox.types.d.ts +2 -0
  371. package/dist/domain/sandbox.types.js.map +1 -1
  372. package/dist/domain/subagent.constants.d.ts +13 -0
  373. package/dist/domain/subagent.constants.js +9 -0
  374. package/dist/domain/subagent.constants.js.map +1 -0
  375. package/dist/domain/subagent.d.ts +4 -0
  376. package/dist/domain/subagent.js +28 -0
  377. package/dist/domain/subagent.js.map +1 -0
  378. package/dist/domain/subagent.types.d.ts +13 -0
  379. package/dist/domain/subagent.types.js +2 -0
  380. package/dist/domain/subagent.types.js.map +1 -0
  381. package/dist/domain/transcript.types.d.ts +2 -0
  382. package/dist/domain/transcript.types.js.map +1 -1
  383. package/dist/domain/usage.d.ts +1 -0
  384. package/dist/domain/usage.js +16 -0
  385. package/dist/domain/usage.js.map +1 -1
  386. package/dist/domain/workflow/budget.d.ts +7 -3
  387. package/dist/domain/workflow/budget.js +26 -0
  388. package/dist/domain/workflow/budget.js.map +1 -1
  389. package/dist/domain/workflow/budget.types.d.ts +1 -1
  390. package/dist/domain/workflow/budget.types.js.map +1 -1
  391. package/dist/domain/workflow/checkpoint-validation.js +7 -1
  392. package/dist/domain/workflow/checkpoint-validation.js.map +1 -1
  393. package/dist/domain/workflow/checkpoint.js +3 -0
  394. package/dist/domain/workflow/checkpoint.js.map +1 -1
  395. package/dist/domain/workflow/gate-validation.js +14 -1
  396. package/dist/domain/workflow/gate-validation.js.map +1 -1
  397. package/dist/domain/workflow/gates.d.ts +1 -1
  398. package/dist/domain/workflow/gates.js +52 -4
  399. package/dist/domain/workflow/gates.js.map +1 -1
  400. package/dist/domain/workflow/gates.types.d.ts +15 -1
  401. package/dist/domain/workflow/gates.types.js.map +1 -1
  402. package/dist/domain/workflow/idempotency.d.ts +1 -0
  403. package/dist/domain/workflow/idempotency.js +7 -0
  404. package/dist/domain/workflow/idempotency.js.map +1 -0
  405. package/dist/domain/workflow/retry.constants.d.ts +2 -0
  406. package/dist/domain/workflow/retry.constants.js +3 -0
  407. package/dist/domain/workflow/retry.constants.js.map +1 -0
  408. package/dist/domain/workflow/retry.d.ts +4 -0
  409. package/dist/domain/workflow/retry.js +49 -0
  410. package/dist/domain/workflow/retry.js.map +1 -0
  411. package/dist/domain/workflow/task-runner.js +9 -5
  412. package/dist/domain/workflow/task-runner.js.map +1 -1
  413. package/dist/domain/workflow/task.js +6 -6
  414. package/dist/domain/workflow/task.js.map +1 -1
  415. package/dist/domain/workflow/workflow-scheduler.js +110 -72
  416. package/dist/domain/workflow/workflow-scheduler.js.map +1 -1
  417. package/dist/domain/workflow/workflow-state.js +28 -12
  418. package/dist/domain/workflow/workflow-state.js.map +1 -1
  419. package/dist/domain/workflow.d.ts +1 -1
  420. package/dist/domain/workflow.js +1 -1
  421. package/dist/domain/workflow.js.map +1 -1
  422. package/dist/domain/workflow.types.d.ts +13 -2
  423. package/dist/domain/workflow.types.js.map +1 -1
  424. package/dist/index.d.ts +16 -11
  425. package/dist/index.js +7 -4
  426. package/dist/index.js.map +1 -1
  427. package/dist/infrastructure/conversations/capture.js +10 -0
  428. package/dist/infrastructure/conversations/capture.js.map +1 -1
  429. package/dist/infrastructure/conversations/harness-transcript.js +6 -0
  430. package/dist/infrastructure/conversations/harness-transcript.js.map +1 -1
  431. package/dist/infrastructure/conversations/harness-transcript.types.d.ts +2 -0
  432. package/dist/infrastructure/conversations/harness-transcript.types.js.map +1 -1
  433. package/dist/infrastructure/conversations/layout.js +2 -0
  434. package/dist/infrastructure/conversations/layout.js.map +1 -1
  435. package/dist/infrastructure/conversations/locate.js +7 -1
  436. package/dist/infrastructure/conversations/locate.js.map +1 -1
  437. package/dist/infrastructure/conversations/native-store.js +8 -1
  438. package/dist/infrastructure/conversations/native-store.js.map +1 -1
  439. package/dist/infrastructure/conversations/paths.js +3 -0
  440. package/dist/infrastructure/conversations/paths.js.map +1 -1
  441. package/dist/infrastructure/conversations/restore.js +7 -0
  442. package/dist/infrastructure/conversations/restore.js.map +1 -1
  443. package/dist/infrastructure/conversations/session-bundle.constants.d.ts +5 -0
  444. package/dist/infrastructure/conversations/session-bundle.constants.js +173 -0
  445. package/dist/infrastructure/conversations/session-bundle.constants.js.map +1 -0
  446. package/dist/infrastructure/conversations/session-bundle.d.ts +6 -0
  447. package/dist/infrastructure/conversations/session-bundle.js +98 -0
  448. package/dist/infrastructure/conversations/session-bundle.js.map +1 -0
  449. package/dist/infrastructure/conversations/session-bundle.types.d.ts +1 -0
  450. package/dist/infrastructure/conversations/session-bundle.types.js +2 -0
  451. package/dist/infrastructure/conversations/session-bundle.types.js.map +1 -0
  452. package/dist/infrastructure/conversations.js +4 -2
  453. package/dist/infrastructure/conversations.js.map +1 -1
  454. package/dist/infrastructure/conversations.types.d.ts +1 -1
  455. package/dist/infrastructure/conversations.types.js.map +1 -1
  456. package/dist/infrastructure/custom-reporter.js +32 -24
  457. package/dist/infrastructure/custom-reporter.js.map +1 -1
  458. package/dist/infrastructure/custom-reporter.types.d.ts +2 -0
  459. package/dist/infrastructure/custom-reporter.types.js.map +1 -1
  460. package/dist/infrastructure/git/git.constants.d.ts +1 -1
  461. package/dist/infrastructure/git/git.constants.js +1 -0
  462. package/dist/infrastructure/git/git.constants.js.map +1 -1
  463. package/dist/infrastructure/git/workspace-lease.js +4 -3
  464. package/dist/infrastructure/git/workspace-lease.js.map +1 -1
  465. package/dist/infrastructure/git/workspace.js +7 -6
  466. package/dist/infrastructure/git/workspace.js.map +1 -1
  467. package/dist/infrastructure/git/workspace.types.d.ts +1 -0
  468. package/dist/infrastructure/git/workspace.types.js.map +1 -1
  469. package/dist/infrastructure/host-credentials.constants.d.ts +1 -0
  470. package/dist/infrastructure/host-credentials.constants.js +2 -0
  471. package/dist/infrastructure/host-credentials.constants.js.map +1 -0
  472. package/dist/infrastructure/host-credentials.d.ts +4 -0
  473. package/dist/infrastructure/host-credentials.js +89 -0
  474. package/dist/infrastructure/host-credentials.js.map +1 -0
  475. package/dist/infrastructure/inspection-path.js +4 -3
  476. package/dist/infrastructure/inspection-path.js.map +1 -1
  477. package/dist/infrastructure/journal.constants.js +10 -1
  478. package/dist/infrastructure/journal.constants.js.map +1 -1
  479. package/dist/infrastructure/journal.d.ts +1 -1
  480. package/dist/infrastructure/journal.js +8 -75
  481. package/dist/infrastructure/journal.js.map +1 -1
  482. package/dist/infrastructure/journal.types.d.ts +2 -4
  483. package/dist/infrastructure/journal.types.js.map +1 -1
  484. package/dist/infrastructure/local-transport.js +9 -4
  485. package/dist/infrastructure/local-transport.js.map +1 -1
  486. package/dist/infrastructure/opentelemetry-dispatch.d.ts +3 -3
  487. package/dist/infrastructure/opentelemetry-dispatch.js +5 -4
  488. package/dist/infrastructure/opentelemetry-dispatch.js.map +1 -1
  489. package/dist/infrastructure/opentelemetry-observation.d.ts +5 -0
  490. package/dist/infrastructure/opentelemetry-observation.js +59 -0
  491. package/dist/infrastructure/opentelemetry-observation.js.map +1 -0
  492. package/dist/infrastructure/opentelemetry.js +15 -1
  493. package/dist/infrastructure/opentelemetry.js.map +1 -1
  494. package/dist/infrastructure/opentelemetry.types.d.ts +9 -1
  495. package/dist/infrastructure/opentelemetry.types.js.map +1 -1
  496. package/dist/infrastructure/reporter.d.ts +2 -2
  497. package/dist/infrastructure/reporter.js +5 -1
  498. package/dist/infrastructure/reporter.js.map +1 -1
  499. package/dist/infrastructure/repository-transport.constants.d.ts +1 -0
  500. package/dist/infrastructure/repository-transport.constants.js +2 -0
  501. package/dist/infrastructure/repository-transport.constants.js.map +1 -0
  502. package/dist/infrastructure/repository-transport.d.ts +2 -0
  503. package/dist/infrastructure/repository-transport.js +9 -0
  504. package/dist/infrastructure/repository-transport.js.map +1 -0
  505. package/dist/infrastructure/resource-activity-inspection.js +19 -24
  506. package/dist/infrastructure/resource-activity-inspection.js.map +1 -1
  507. package/dist/infrastructure/resource-activity.constants.d.ts +0 -1
  508. package/dist/infrastructure/resource-activity.constants.js +0 -1
  509. package/dist/infrastructure/resource-activity.constants.js.map +1 -1
  510. package/dist/infrastructure/resource-activity.js +20 -83
  511. package/dist/infrastructure/resource-activity.js.map +1 -1
  512. package/dist/infrastructure/s3-transport.constants.d.ts +2 -0
  513. package/dist/infrastructure/s3-transport.constants.js +3 -0
  514. package/dist/infrastructure/s3-transport.constants.js.map +1 -0
  515. package/dist/infrastructure/s3-transport.js +57 -3
  516. package/dist/infrastructure/s3-transport.js.map +1 -1
  517. package/dist/infrastructure/s3-transport.types.d.ts +1 -0
  518. package/dist/infrastructure/s3-transport.types.js.map +1 -1
  519. package/dist/infrastructure/speculation-store.constants.d.ts +3 -0
  520. package/dist/infrastructure/speculation-store.constants.js +2 -0
  521. package/dist/infrastructure/speculation-store.constants.js.map +1 -0
  522. package/dist/infrastructure/speculation-store.d.ts +4 -0
  523. package/dist/infrastructure/speculation-store.js +73 -0
  524. package/dist/infrastructure/speculation-store.js.map +1 -0
  525. package/dist/infrastructure/speculation-store.types.d.ts +12 -0
  526. package/dist/infrastructure/speculation-store.types.js +2 -0
  527. package/dist/infrastructure/speculation-store.types.js.map +1 -0
  528. package/dist/infrastructure/storage-inventory.constants.js +1 -0
  529. package/dist/infrastructure/storage-inventory.constants.js.map +1 -1
  530. package/dist/infrastructure/storage-inventory.types.d.ts +1 -1
  531. package/dist/infrastructure/storage-inventory.types.js.map +1 -1
  532. package/dist/infrastructure/storage-reservations.types.d.ts +0 -8
  533. package/dist/infrastructure/storage-reservations.types.js.map +1 -1
  534. package/dist/infrastructure/task-queue-bullmq-resources.js +3 -0
  535. package/dist/infrastructure/task-queue-bullmq-resources.js.map +1 -1
  536. package/dist/infrastructure/task-queue-http.js +29 -4
  537. package/dist/infrastructure/task-queue-http.js.map +1 -1
  538. package/dist/infrastructure/task-queue-http.types.d.ts +2 -2
  539. package/dist/infrastructure/task-queue-http.types.js.map +1 -1
  540. package/dist/infrastructure/transport-conversations.js +2 -0
  541. package/dist/infrastructure/transport-conversations.js.map +1 -1
  542. package/dist/infrastructure/transport-journal.d.ts +1 -1
  543. package/dist/infrastructure/transport-journal.js +8 -2
  544. package/dist/infrastructure/transport-journal.js.map +1 -1
  545. package/dist/infrastructure/transport-reservations.d.ts +1 -1
  546. package/dist/infrastructure/transport-reservations.js +14 -8
  547. package/dist/infrastructure/transport-reservations.js.map +1 -1
  548. package/dist/infrastructure/workflow-decision-signature.constants.d.ts +4 -0
  549. package/dist/infrastructure/workflow-decision-signature.constants.js +5 -0
  550. package/dist/infrastructure/workflow-decision-signature.constants.js.map +1 -0
  551. package/dist/infrastructure/workflow-decision-signature.d.ts +4 -0
  552. package/dist/infrastructure/workflow-decision-signature.js +83 -0
  553. package/dist/infrastructure/workflow-decision-signature.js.map +1 -0
  554. package/dist/infrastructure/workflow-decision-signature.types.d.ts +16 -0
  555. package/dist/infrastructure/workflow-decision-signature.types.js +2 -0
  556. package/dist/infrastructure/workflow-decision-signature.types.js.map +1 -0
  557. package/dist/providers/agents.d.ts +7 -2
  558. package/dist/providers/agents.js +4 -1
  559. package/dist/providers/agents.js.map +1 -1
  560. package/dist/providers/antigravity-install.constants.d.ts +2 -0
  561. package/dist/providers/antigravity-install.constants.js +28 -0
  562. package/dist/providers/antigravity-install.constants.js.map +1 -0
  563. package/dist/providers/antigravity-install.d.ts +2 -0
  564. package/dist/providers/antigravity-install.js +29 -0
  565. package/dist/providers/antigravity-install.js.map +1 -0
  566. package/dist/providers/antigravity-install.types.d.ts +4 -0
  567. package/dist/providers/antigravity-install.types.js +2 -0
  568. package/dist/providers/antigravity-install.types.js.map +1 -0
  569. package/dist/providers/container-recovery.d.ts +4 -0
  570. package/dist/providers/container-recovery.js +28 -0
  571. package/dist/providers/container-recovery.js.map +1 -0
  572. package/dist/providers/container.js +8 -0
  573. package/dist/providers/container.js.map +1 -1
  574. package/dist/providers/daytona-network.constants.d.ts +5 -0
  575. package/dist/providers/daytona-network.constants.js +8 -0
  576. package/dist/providers/daytona-network.constants.js.map +1 -0
  577. package/dist/providers/daytona-network.d.ts +4 -0
  578. package/dist/providers/daytona-network.js +33 -0
  579. package/dist/providers/daytona-network.js.map +1 -0
  580. package/dist/providers/daytona.d.ts +1 -0
  581. package/dist/providers/daytona.js +9 -3
  582. package/dist/providers/daytona.js.map +1 -1
  583. package/dist/providers/daytona.types.d.ts +2 -0
  584. package/dist/providers/daytona.types.js.map +1 -1
  585. package/dist/providers/firecracker-command.js +1 -1
  586. package/dist/providers/firecracker-command.js.map +1 -1
  587. package/dist/providers/firecracker-jailer.constants.d.ts +9 -0
  588. package/dist/providers/firecracker-jailer.constants.js +10 -0
  589. package/dist/providers/firecracker-jailer.constants.js.map +1 -0
  590. package/dist/providers/firecracker-jailer.d.ts +4 -0
  591. package/dist/providers/firecracker-jailer.js +171 -0
  592. package/dist/providers/firecracker-jailer.js.map +1 -0
  593. package/dist/providers/firecracker-machine.js +30 -8
  594. package/dist/providers/firecracker-machine.js.map +1 -1
  595. package/dist/providers/firecracker.types.d.ts +16 -0
  596. package/dist/providers/firecracker.types.js.map +1 -1
  597. package/dist/providers/vercel-network.js +1 -1
  598. package/dist/providers/vercel-network.js.map +1 -1
  599. package/dist/providers/vercel.js +6 -3
  600. package/dist/providers/vercel.js.map +1 -1
  601. package/dist/providers/versions.constants.d.ts +3 -1
  602. package/dist/providers/versions.constants.js +3 -1
  603. package/dist/providers/versions.constants.js.map +1 -1
  604. package/package.json +3 -3
  605. package/dist/adapters/agents/gemini-adapter.d.ts +0 -3
  606. package/dist/adapters/agents/gemini-adapter.js +0 -34
  607. package/dist/adapters/agents/gemini-adapter.js.map +0 -1
  608. package/dist/adapters/agents/gemini-diagnostics.d.ts +0 -2
  609. package/dist/adapters/agents/gemini-diagnostics.js +0 -15
  610. package/dist/adapters/agents/gemini-diagnostics.js.map +0 -1
  611. package/dist/adapters/agents/gemini-events.d.ts +0 -2
  612. package/dist/adapters/agents/gemini-events.js +0 -50
  613. package/dist/adapters/agents/gemini-events.js.map +0 -1
  614. package/dist/adapters/agents/gemini-request.js +0 -23
  615. package/dist/adapters/agents/gemini-request.js.map +0 -1
  616. package/dist/adapters/agents/gemini.types.js +0 -2
  617. package/dist/adapters/agents/gemini.types.js.map +0 -1
  618. package/dist/infrastructure/artifact-store.d.ts +0 -3
  619. package/dist/infrastructure/artifact-store.js +0 -110
  620. package/dist/infrastructure/artifact-store.js.map +0 -1
  621. package/dist/infrastructure/artifact-store.types.d.ts +0 -6
  622. package/dist/infrastructure/artifact-store.types.js +0 -2
  623. package/dist/infrastructure/artifact-store.types.js.map +0 -1
  624. package/dist/infrastructure/journal-retention.constants.d.ts +0 -4
  625. package/dist/infrastructure/journal-retention.constants.js +0 -5
  626. package/dist/infrastructure/journal-retention.constants.js.map +0 -1
  627. package/dist/infrastructure/journal-retention.d.ts +0 -2
  628. package/dist/infrastructure/journal-retention.js +0 -51
  629. package/dist/infrastructure/journal-retention.js.map +0 -1
  630. package/dist/infrastructure/storage-mutation-lock.constants.d.ts +0 -5
  631. package/dist/infrastructure/storage-mutation-lock.constants.js +0 -6
  632. package/dist/infrastructure/storage-mutation-lock.constants.js.map +0 -1
  633. package/dist/infrastructure/storage-mutation-lock.d.ts +0 -1
  634. package/dist/infrastructure/storage-mutation-lock.js +0 -21
  635. package/dist/infrastructure/storage-mutation-lock.js.map +0 -1
  636. package/dist/infrastructure/storage-reservations.constants.d.ts +0 -4
  637. package/dist/infrastructure/storage-reservations.constants.js +0 -5
  638. package/dist/infrastructure/storage-reservations.constants.js.map +0 -1
  639. package/dist/infrastructure/storage-reservations.d.ts +0 -2
  640. package/dist/infrastructure/storage-reservations.js +0 -150
  641. package/dist/infrastructure/storage-reservations.js.map +0 -1
  642. package/dist/infrastructure/workflow-checkpoint.d.ts +0 -3
  643. package/dist/infrastructure/workflow-checkpoint.js +0 -84
  644. package/dist/infrastructure/workflow-checkpoint.js.map +0 -1
  645. package/dist/infrastructure/workflow-checkpoint.types.d.ts +0 -6
  646. package/dist/infrastructure/workflow-checkpoint.types.js +0 -2
  647. package/dist/infrastructure/workflow-checkpoint.types.js.map +0 -1
@@ -1,14 +1,73 @@
1
- import type { CustomHarness } from "./harness.types.ts";
1
+ import type { Harness } from "./harness.types.ts";
2
2
  import type { AgentModel, ModelSpec } from "./model.types.ts";
3
- import type { Command, Variables } from "./command.types.ts";
3
+ import type { Command, CommandResult, Variables } from "./command.types.ts";
4
4
  import type { ConversationStore } from "./conversation.types.ts";
5
5
  export interface Usage {
6
+ readonly complete?: boolean;
6
7
  readonly input: number;
7
8
  readonly cached: number;
8
9
  readonly cacheCreated?: number;
9
10
  readonly output: number;
10
11
  }
11
- export type AgentEvent = {
12
+ export type AgentEvent = AgentEventDetails & {
13
+ readonly subagentId?: string;
14
+ };
15
+ export type AgentEventDetails = {
16
+ readonly kind: "subagent";
17
+ readonly id: string;
18
+ readonly callId: string;
19
+ readonly name: string;
20
+ readonly status: "started" | "finished" | "failed";
21
+ readonly conversation?: string;
22
+ } | {
23
+ readonly kind: "message-usage";
24
+ readonly tokens: Usage;
25
+ readonly messageId?: string;
26
+ readonly parentCallId?: string;
27
+ } | {
28
+ readonly kind: "stderr";
29
+ readonly text: string;
30
+ readonly truncated?: boolean;
31
+ } | {
32
+ readonly kind: "stopped";
33
+ readonly reason: "completion" | "idle-timeout" | "deadline" | "aborted" | "oversized-event";
34
+ } | {
35
+ readonly kind: "reasoning";
36
+ readonly text: string;
37
+ readonly parentCallId?: string;
38
+ } | {
39
+ readonly kind: "file-change";
40
+ readonly changes: unknown;
41
+ readonly callId?: string;
42
+ } | {
43
+ readonly kind: "model-request";
44
+ readonly request: unknown;
45
+ } | {
46
+ readonly kind: "model-response";
47
+ readonly response: unknown;
48
+ } | {
49
+ readonly kind: "model-retry";
50
+ readonly attempt: number;
51
+ readonly message?: string;
52
+ } | {
53
+ readonly kind: "model-error";
54
+ readonly message: string;
55
+ } | {
56
+ readonly kind: "hook";
57
+ readonly phase: string;
58
+ readonly changed: boolean;
59
+ } | {
60
+ readonly kind: "instructions-loaded";
61
+ readonly count: number;
62
+ } | {
63
+ readonly kind: "skills-loaded";
64
+ readonly names: readonly string[];
65
+ } | {
66
+ readonly kind: "tool-output";
67
+ readonly callId: string;
68
+ readonly channel: "stdout" | "stderr";
69
+ readonly text: string;
70
+ } | {
12
71
  readonly kind: "phase";
13
72
  readonly name: string;
14
73
  readonly agent?: string;
@@ -39,6 +98,7 @@ export type AgentEvent = {
39
98
  readonly name: string;
40
99
  readonly input: unknown;
41
100
  readonly callId?: string;
101
+ readonly parentCallId?: string;
42
102
  } | {
43
103
  readonly kind: "tool-result";
44
104
  readonly callId: string;
@@ -46,6 +106,7 @@ export type AgentEvent = {
46
106
  readonly isError: boolean;
47
107
  readonly preview: string;
48
108
  readonly characters: number;
109
+ readonly parentCallId?: string;
49
110
  } | {
50
111
  readonly kind: "step";
51
112
  readonly index: number;
@@ -67,6 +128,7 @@ export type AgentEvent = {
67
128
  } | {
68
129
  readonly kind: "usage";
69
130
  readonly tokens: Usage;
131
+ readonly cumulative?: boolean;
70
132
  } | {
71
133
  readonly kind: "failure";
72
134
  readonly message: string;
@@ -75,10 +137,15 @@ export type AgentEvent = {
75
137
  } | {
76
138
  readonly kind: "raw";
77
139
  readonly value: unknown;
140
+ readonly bytes?: number;
141
+ readonly truncated?: boolean;
78
142
  };
79
143
  export type AgentObservation = AgentEvent & {
80
144
  readonly pass: number;
81
145
  readonly at: string;
146
+ readonly seq?: number;
147
+ readonly source?: import("./observation.types.ts").ObservationSource;
148
+ readonly scope?: import("./observation.types.ts").ObservationScope;
82
149
  };
83
150
  export type AgentEventHandlers = {
84
151
  readonly [Kind in AgentEvent["kind"]]?: (event: Extract<AgentEvent, {
@@ -97,17 +164,22 @@ export interface AgentFeatures {
97
164
  readonly name: string;
98
165
  readonly bootstrap?: string;
99
166
  readonly requiresFinishedEvent?: boolean;
167
+ readonly usage?: "events" | "session" | "unavailable";
100
168
  readonly variables?: Variables;
101
- readonly conversations?: "claude" | "codex";
169
+ readonly conversations?: "claude" | "codex" | "copilot" | "kimi";
102
170
  readonly storage?: ConversationStore;
103
171
  readonly capture?: boolean;
104
172
  readonly resumable?: boolean;
173
+ readonly forkable?: boolean;
105
174
  transcriptUsage?(text: string): Usage | undefined;
106
175
  }
107
176
  export interface AgentAdapter extends AgentFeatures {
108
- authenticate?(variables: Readonly<Record<string, string>>): Command | undefined;
177
+ fork?(id: string, invoke: (command: Command) => Promise<CommandResult>): Promise<string>;
178
+ credentials?(variables: Variables): CredentialPlan;
109
179
  request(input: AgentInput): Command;
110
180
  events(line: string): readonly AgentEvent[];
181
+ usageCommand?(conversation: string): Command | undefined;
182
+ usageResult?(text: string): Usage | undefined;
111
183
  }
112
184
  export interface RequiredAgent {
113
185
  readonly agent: Agent;
@@ -116,7 +188,7 @@ export interface CliHarness {
116
188
  readonly kind: "cli";
117
189
  bind(model?: AgentModel): AgentAdapter;
118
190
  }
119
- export type Harness = CliHarness | CustomHarness;
191
+ export type AgentHarness = CliHarness | Harness;
120
192
  export interface CliAgent extends AgentAdapter {
121
193
  readonly kind: "cli";
122
194
  readonly harness: CliHarness;
@@ -126,7 +198,7 @@ export interface CustomAgent extends AgentFeatures {
126
198
  readonly resumable: boolean;
127
199
  readonly capture: boolean;
128
200
  readonly kind: "custom";
129
- readonly harness: CustomHarness;
201
+ readonly harness: Harness;
130
202
  readonly model: AgentModel;
131
203
  }
132
204
  export type Agent = CliAgent | CustomAgent;
@@ -135,16 +207,52 @@ export interface CliAgentOptions {
135
207
  readonly model?: ModelSpec;
136
208
  }
137
209
  export interface CustomAgentOptions {
138
- readonly harness: CustomHarness;
210
+ readonly harness: Harness;
139
211
  readonly model: ModelSpec;
140
212
  }
141
213
  export type AgentOptions = CliAgentOptions | CustomAgentOptions;
142
- export type AgentAuthentication = {
143
- readonly mode: "api-key";
144
- readonly environment?: string;
214
+ export type AccountCredential = {
215
+ readonly file: string;
145
216
  } | {
146
- readonly mode: "oauth-token";
217
+ readonly key: string;
218
+ } | {
219
+ readonly variable: string;
220
+ };
221
+ export type UsageCredential = {
222
+ readonly key: string;
147
223
  } | {
148
- readonly mode: "login";
149
- readonly credentials?: string;
224
+ readonly variable: string;
150
225
  };
226
+ export type AgentAuthentication = "account" | "usage" | {
227
+ readonly account: AccountCredential;
228
+ } | {
229
+ readonly usage: UsageCredential;
230
+ };
231
+ export interface HostCredentialPath {
232
+ readonly path: string;
233
+ readonly home?: {
234
+ readonly variable: string;
235
+ readonly path: string;
236
+ };
237
+ }
238
+ export interface HostCredential {
239
+ readonly source: HostCredentialPath;
240
+ readonly destination: {
241
+ readonly file: string;
242
+ } | {
243
+ readonly variable: string;
244
+ };
245
+ readonly login: string;
246
+ readonly alternative?: string;
247
+ select?(content: string): string;
248
+ }
249
+ export interface GeneratedCredential {
250
+ readonly path: string;
251
+ readonly content: string;
252
+ }
253
+ export interface CredentialPlan {
254
+ readonly variables: Variables;
255
+ readonly host: readonly HostCredential[];
256
+ readonly files: readonly GeneratedCredential[];
257
+ readonly commands: readonly Command[];
258
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"agent.types.js","sourceRoot":"","sources":["../../src/domain/agent.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { CustomHarness } from \"./harness.types.ts\";\nimport type { AgentModel, ModelSpec } from \"./model.types.ts\";\nimport type { Command, Variables } from \"./command.types.ts\";\nimport type { ConversationStore } from \"./conversation.types.ts\";\n\nexport interface Usage {\n readonly input: number;\n readonly cached: number;\n readonly cacheCreated?: number;\n readonly output: number;\n}\n\nexport type AgentEvent =\n | {\n readonly kind: \"phase\";\n readonly name: string;\n readonly agent?: string;\n readonly branch?: string;\n readonly directory?: string;\n }\n | {\n readonly kind: \"summary\";\n readonly durationMs: number;\n readonly status: number;\n readonly tokens: Usage;\n }\n | { readonly kind: \"warning\"; readonly message: string }\n | { readonly kind: \"text\"; readonly text: string }\n | { readonly kind: \"text-delta\"; readonly text: string }\n | { readonly kind: \"result\"; readonly text: string }\n | { readonly kind: \"prompt\"; readonly text: string }\n | {\n readonly kind: \"tool\";\n readonly name: string;\n readonly input: unknown;\n readonly callId?: string;\n }\n | {\n readonly kind: \"tool-result\";\n readonly callId: string;\n readonly name: string;\n readonly isError: boolean;\n readonly preview: string;\n readonly characters: number;\n }\n | { readonly kind: \"step\"; readonly index: number }\n | {\n readonly kind: \"tool-denied\";\n readonly callId: string;\n readonly name: string;\n readonly reason: string;\n }\n | { readonly kind: \"stop-prevented\"; readonly message: string }\n | {\n readonly kind: \"compaction\";\n readonly strategy: string;\n readonly messages: number;\n }\n | { readonly kind: \"conversation\"; readonly id: string }\n | { readonly kind: \"usage\"; readonly tokens: Usage }\n | { readonly kind: \"failure\"; readonly message: string }\n | { readonly kind: \"finished\" }\n | { readonly kind: \"raw\"; readonly value: unknown };\n\nexport type AgentObservation = AgentEvent & {\n readonly pass: number;\n readonly at: string;\n};\n\nexport type AgentEventHandlers = {\n readonly [Kind in AgentEvent[\"kind\"]]?: (\n event: Extract<AgentEvent, { kind: Kind }>,\n ) => void;\n};\n\nexport interface AgentInput {\n readonly text?: string;\n readonly interactive?: boolean;\n readonly continuation?: { readonly id: string; readonly fork?: boolean };\n}\n\nexport interface AgentFeatures {\n readonly name: string;\n readonly bootstrap?: string;\n readonly requiresFinishedEvent?: boolean;\n readonly variables?: Variables;\n readonly conversations?: \"claude\" | \"codex\";\n readonly storage?: ConversationStore;\n readonly capture?: boolean;\n readonly resumable?: boolean;\n transcriptUsage?(text: string): Usage | undefined;\n}\n\nexport interface AgentAdapter extends AgentFeatures {\n authenticate?(\n variables: Readonly<Record<string, string>>,\n ): Command | undefined;\n request(input: AgentInput): Command;\n events(line: string): readonly AgentEvent[];\n}\n\nexport interface RequiredAgent {\n readonly agent: Agent;\n}\n\nexport interface CliHarness {\n readonly kind: \"cli\";\n bind(model?: AgentModel): AgentAdapter;\n}\n\nexport type Harness = CliHarness | CustomHarness;\n\nexport interface CliAgent extends AgentAdapter {\n readonly kind: \"cli\";\n readonly harness: CliHarness;\n readonly model?: AgentModel;\n}\n\nexport interface CustomAgent extends AgentFeatures {\n readonly resumable: boolean;\n readonly capture: boolean;\n readonly kind: \"custom\";\n readonly harness: CustomHarness;\n readonly model: AgentModel;\n}\n\nexport type Agent = CliAgent | CustomAgent;\n\nexport interface CliAgentOptions {\n readonly harness: CliHarness;\n readonly model?: ModelSpec;\n}\nexport interface CustomAgentOptions {\n readonly harness: CustomHarness;\n readonly model: ModelSpec;\n}\nexport type AgentOptions = CliAgentOptions | CustomAgentOptions;\n\nexport type AgentAuthentication =\n | { readonly mode: \"api-key\"; readonly environment?: string }\n | { readonly mode: \"oauth-token\" }\n | { readonly mode: \"login\"; readonly credentials?: string };\n"]}
1
+ {"version":3,"file":"agent.types.js","sourceRoot":"","sources":["../../src/domain/agent.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Harness } from \"./harness.types.ts\";\nimport type { AgentModel, ModelSpec } from \"./model.types.ts\";\nimport type { Command, CommandResult, Variables } from \"./command.types.ts\";\nimport type { ConversationStore } from \"./conversation.types.ts\";\n\nexport interface Usage {\n readonly complete?: boolean;\n readonly input: number;\n readonly cached: number;\n readonly cacheCreated?: number;\n readonly output: number;\n}\n\nexport type AgentEvent = AgentEventDetails & {\n readonly subagentId?: string;\n};\n\nexport type AgentEventDetails =\n | {\n readonly kind: \"subagent\";\n readonly id: string;\n readonly callId: string;\n readonly name: string;\n readonly status: \"started\" | \"finished\" | \"failed\";\n readonly conversation?: string;\n }\n | {\n readonly kind: \"message-usage\";\n readonly tokens: Usage;\n readonly messageId?: string;\n readonly parentCallId?: string;\n }\n | {\n readonly kind: \"stderr\";\n readonly text: string;\n readonly truncated?: boolean;\n }\n | {\n readonly kind: \"stopped\";\n readonly reason:\n | \"completion\"\n | \"idle-timeout\"\n | \"deadline\"\n | \"aborted\"\n | \"oversized-event\";\n }\n | {\n readonly kind: \"reasoning\";\n readonly text: string;\n readonly parentCallId?: string;\n }\n | {\n readonly kind: \"file-change\";\n readonly changes: unknown;\n readonly callId?: string;\n }\n | { readonly kind: \"model-request\"; readonly request: unknown }\n | { readonly kind: \"model-response\"; readonly response: unknown }\n | {\n readonly kind: \"model-retry\";\n readonly attempt: number;\n readonly message?: string;\n }\n | { readonly kind: \"model-error\"; readonly message: string }\n | { readonly kind: \"hook\"; readonly phase: string; readonly changed: boolean }\n | { readonly kind: \"instructions-loaded\"; readonly count: number }\n | { readonly kind: \"skills-loaded\"; readonly names: readonly string[] }\n | {\n readonly kind: \"tool-output\";\n readonly callId: string;\n readonly channel: \"stdout\" | \"stderr\";\n readonly text: string;\n }\n | {\n readonly kind: \"phase\";\n readonly name: string;\n readonly agent?: string;\n readonly branch?: string;\n readonly directory?: string;\n }\n | {\n readonly kind: \"summary\";\n readonly durationMs: number;\n readonly status: number;\n readonly tokens: Usage;\n }\n | { readonly kind: \"warning\"; readonly message: string }\n | { readonly kind: \"text\"; readonly text: string }\n | { readonly kind: \"text-delta\"; readonly text: string }\n | { readonly kind: \"result\"; readonly text: string }\n | { readonly kind: \"prompt\"; readonly text: string }\n | {\n readonly kind: \"tool\";\n readonly name: string;\n readonly input: unknown;\n readonly callId?: string;\n readonly parentCallId?: string;\n }\n | {\n readonly kind: \"tool-result\";\n readonly callId: string;\n readonly name: string;\n readonly isError: boolean;\n readonly preview: string;\n readonly characters: number;\n readonly parentCallId?: string;\n }\n | { readonly kind: \"step\"; readonly index: number }\n | {\n readonly kind: \"tool-denied\";\n readonly callId: string;\n readonly name: string;\n readonly reason: string;\n }\n | { readonly kind: \"stop-prevented\"; readonly message: string }\n | {\n readonly kind: \"compaction\";\n readonly strategy: string;\n readonly messages: number;\n }\n | { readonly kind: \"conversation\"; readonly id: string }\n | {\n readonly kind: \"usage\";\n readonly tokens: Usage;\n readonly cumulative?: boolean;\n }\n | { readonly kind: \"failure\"; readonly message: string }\n | { readonly kind: \"finished\" }\n | {\n readonly kind: \"raw\";\n readonly value: unknown;\n readonly bytes?: number;\n readonly truncated?: boolean;\n };\n\nexport type AgentObservation = AgentEvent & {\n readonly pass: number;\n readonly at: string;\n readonly seq?: number;\n readonly source?: import(\"./observation.types.ts\").ObservationSource;\n readonly scope?: import(\"./observation.types.ts\").ObservationScope;\n};\n\nexport type AgentEventHandlers = {\n readonly [Kind in AgentEvent[\"kind\"]]?: (\n event: Extract<AgentEvent, { kind: Kind }>,\n ) => void;\n};\n\nexport interface AgentInput {\n readonly text?: string;\n readonly interactive?: boolean;\n readonly continuation?: { readonly id: string; readonly fork?: boolean };\n}\n\nexport interface AgentFeatures {\n readonly name: string;\n readonly bootstrap?: string;\n readonly requiresFinishedEvent?: boolean;\n readonly usage?: \"events\" | \"session\" | \"unavailable\";\n readonly variables?: Variables;\n readonly conversations?: \"claude\" | \"codex\" | \"copilot\" | \"kimi\";\n readonly storage?: ConversationStore;\n readonly capture?: boolean;\n readonly resumable?: boolean;\n readonly forkable?: boolean;\n transcriptUsage?(text: string): Usage | undefined;\n}\n\nexport interface AgentAdapter extends AgentFeatures {\n fork?(\n id: string,\n invoke: (command: Command) => Promise<CommandResult>,\n ): Promise<string>;\n credentials?(variables: Variables): CredentialPlan;\n request(input: AgentInput): Command;\n events(line: string): readonly AgentEvent[];\n usageCommand?(conversation: string): Command | undefined;\n usageResult?(text: string): Usage | undefined;\n}\n\nexport interface RequiredAgent {\n readonly agent: Agent;\n}\n\nexport interface CliHarness {\n readonly kind: \"cli\";\n bind(model?: AgentModel): AgentAdapter;\n}\n\nexport type AgentHarness = CliHarness | Harness;\n\nexport interface CliAgent extends AgentAdapter {\n readonly kind: \"cli\";\n readonly harness: CliHarness;\n readonly model?: AgentModel;\n}\n\nexport interface CustomAgent extends AgentFeatures {\n readonly resumable: boolean;\n readonly capture: boolean;\n readonly kind: \"custom\";\n readonly harness: Harness;\n readonly model: AgentModel;\n}\n\nexport type Agent = CliAgent | CustomAgent;\n\nexport interface CliAgentOptions {\n readonly harness: CliHarness;\n readonly model?: ModelSpec;\n}\nexport interface CustomAgentOptions {\n readonly harness: Harness;\n readonly model: ModelSpec;\n}\nexport type AgentOptions = CliAgentOptions | CustomAgentOptions;\n\nexport type AccountCredential =\n | { readonly file: string }\n | { readonly key: string }\n | { readonly variable: string };\n\nexport type UsageCredential =\n { readonly key: string } | { readonly variable: string };\n\nexport type AgentAuthentication =\n | \"account\"\n | \"usage\"\n | { readonly account: AccountCredential }\n | { readonly usage: UsageCredential };\n\nexport interface HostCredentialPath {\n readonly path: string;\n readonly home?: { readonly variable: string; readonly path: string };\n}\n\nexport interface HostCredential {\n readonly source: HostCredentialPath;\n readonly destination:\n { readonly file: string } | { readonly variable: string };\n readonly login: string;\n readonly alternative?: string;\n select?(content: string): string;\n}\n\nexport interface GeneratedCredential {\n readonly path: string;\n readonly content: string;\n}\n\nexport interface CredentialPlan {\n readonly variables: Variables;\n readonly host: readonly HostCredential[];\n readonly files: readonly GeneratedCredential[];\n readonly commands: readonly Command[];\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { AuthenticationForm } from "./authentication.types.ts";
2
+ export declare const authenticationForms: readonly AuthenticationForm[];
3
+ export declare const VARIABLE_NAME: RegExp;
@@ -0,0 +1,11 @@
1
+ export const authenticationForms = [
2
+ "account",
3
+ "account.file",
4
+ "account.key",
5
+ "account.variable",
6
+ "usage",
7
+ "usage.key",
8
+ "usage.variable",
9
+ ];
10
+ export const VARIABLE_NAME = /^[A-Za-z_][A-Za-z0-9_]*$/;
11
+ //# sourceMappingURL=authentication.constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authentication.constants.js","sourceRoot":"","sources":["../../src/domain/authentication.constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAAkC;IAChE,SAAS;IACT,cAAc;IACd,aAAa;IACb,kBAAkB;IAClB,OAAO;IACP,WAAW;IACX,gBAAgB;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,0BAA0B,CAAC","sourcesContent":["import type { AuthenticationForm } from \"./authentication.types.ts\";\n\nexport const authenticationForms: readonly AuthenticationForm[] = [\n \"account\",\n \"account.file\",\n \"account.key\",\n \"account.variable\",\n \"usage\",\n \"usage.key\",\n \"usage.variable\",\n];\n\nexport const VARIABLE_NAME = /^[A-Za-z_][A-Za-z0-9_]*$/;\n"]}
@@ -0,0 +1,3 @@
1
+ import type { AgentAuthentication } from "./agent.types.ts";
2
+ import type { AuthenticationSelection } from "./authentication.types.ts";
3
+ export declare function authenticationForm(value: AgentAuthentication): AuthenticationSelection;
@@ -0,0 +1,22 @@
1
+ import { VARIABLE_NAME, authenticationForms, } from "./authentication.constants.js";
2
+ import { invariant } from "./errors.js";
3
+ const expected = 'Use "account", "usage", { account: { file | key | variable } } or { usage: { key | variable } }';
4
+ function singleEntry(value, label) {
5
+ invariant(value !== null && typeof value === "object" && !Array.isArray(value), `${label} must be "account", "usage" or an object. ${expected}`);
6
+ const entries = Object.entries(value);
7
+ invariant(entries.length === 1, `${label} must have exactly one key. ${expected}`);
8
+ return entries[0];
9
+ }
10
+ export function authenticationForm(value) {
11
+ if (value === "account" || value === "usage")
12
+ return { form: value };
13
+ const [kind, credential] = singleEntry(value, "Authentication");
14
+ invariant(kind === "account" || kind === "usage", `Unknown authentication "${kind}". ${expected}`);
15
+ const [source, text] = singleEntry(credential, `Authentication ${kind}`);
16
+ const form = authenticationForms.find((candidate) => candidate === `${kind}.${source}`);
17
+ invariant(form, `${kind} authentication does not accept "${source}". ${expected}`);
18
+ invariant(typeof text === "string" && text.trim() !== "", `${form} must be a nonempty string`);
19
+ invariant(source !== "variable" || VARIABLE_NAME.test(text), `Invalid authentication environment variable: ${text}`);
20
+ return { form, value: text };
21
+ }
22
+ //# sourceMappingURL=authentication.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authentication.js","sourceRoot":"","sources":["../../src/domain/authentication.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,mBAAmB,GACpB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,QAAQ,GACZ,iGAAiG,CAAC;AAEpG,SAAS,WAAW,CAAC,KAAc,EAAE,KAAa;IAChD,SAAS,CACP,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EACpE,GAAG,KAAK,6CAA6C,QAAQ,EAAE,CAChE,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACtC,SAAS,CACP,OAAO,CAAC,MAAM,KAAK,CAAC,EACpB,GAAG,KAAK,+BAA+B,QAAQ,EAAE,CAClD,CAAC;IACF,OAAO,OAAO,CAAC,CAAC,CAAE,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,KAA0B;IAE1B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACrE,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,WAAW,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IAChE,SAAS,CACP,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,OAAO,EACtC,2BAA2B,IAAI,MAAM,QAAQ,EAAE,CAChD,CAAC;IACF,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,WAAW,CAAC,UAAU,EAAE,kBAAkB,IAAI,EAAE,CAAC,CAAC;IACzE,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,CACnC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,GAAG,IAAI,IAAI,MAAM,EAAE,CACjD,CAAC;IACF,SAAS,CACP,IAAI,EACJ,GAAG,IAAI,oCAAoC,MAAM,MAAM,QAAQ,EAAE,CAClE,CAAC;IACF,SAAS,CACP,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAC9C,GAAG,IAAI,4BAA4B,CACpC,CAAC;IACF,SAAS,CACP,MAAM,KAAK,UAAU,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EACjD,gDAAgD,IAAI,EAAE,CACvD,CAAC;IACF,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC/B,CAAC","sourcesContent":["import type { AgentAuthentication } from \"./agent.types.ts\";\nimport {\n VARIABLE_NAME,\n authenticationForms,\n} from \"./authentication.constants.ts\";\nimport type { AuthenticationSelection } from \"./authentication.types.ts\";\nimport { invariant } from \"./errors.ts\";\n\nconst expected =\n 'Use \"account\", \"usage\", { account: { file | key | variable } } or { usage: { key | variable } }';\n\nfunction singleEntry(value: unknown, label: string): [string, unknown] {\n invariant(\n value !== null && typeof value === \"object\" && !Array.isArray(value),\n `${label} must be \"account\", \"usage\" or an object. ${expected}`,\n );\n const entries = Object.entries(value);\n invariant(\n entries.length === 1,\n `${label} must have exactly one key. ${expected}`,\n );\n return entries[0]!;\n}\n\nexport function authenticationForm(\n value: AgentAuthentication,\n): AuthenticationSelection {\n if (value === \"account\" || value === \"usage\") return { form: value };\n const [kind, credential] = singleEntry(value, \"Authentication\");\n invariant(\n kind === \"account\" || kind === \"usage\",\n `Unknown authentication \"${kind}\". ${expected}`,\n );\n const [source, text] = singleEntry(credential, `Authentication ${kind}`);\n const form = authenticationForms.find(\n (candidate) => candidate === `${kind}.${source}`,\n );\n invariant(\n form,\n `${kind} authentication does not accept \"${source}\". ${expected}`,\n );\n invariant(\n typeof text === \"string\" && text.trim() !== \"\",\n `${form} must be a nonempty string`,\n );\n invariant(\n source !== \"variable\" || VARIABLE_NAME.test(text),\n `Invalid authentication environment variable: ${text}`,\n );\n return { form, value: text };\n}\n"]}
@@ -0,0 +1,5 @@
1
+ export type AuthenticationForm = "account" | "account.file" | "account.key" | "account.variable" | "usage" | "usage.key" | "usage.variable";
2
+ export interface AuthenticationSelection {
3
+ readonly form: AuthenticationForm;
4
+ readonly value?: string;
5
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=authentication.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authentication.types.js","sourceRoot":"","sources":["../../src/domain/authentication.types.ts"],"names":[],"mappings":"","sourcesContent":["export type AuthenticationForm =\n | \"account\"\n | \"account.file\"\n | \"account.key\"\n | \"account.variable\"\n | \"usage\"\n | \"usage.key\"\n | \"usage.variable\";\n\nexport interface AuthenticationSelection {\n readonly form: AuthenticationForm;\n readonly value?: string;\n}\n"]}
@@ -1,2 +1,2 @@
1
- import type { CustomHarness, CustomHarnessOptions } from "./harness.types.ts";
2
- export declare function harness(options: CustomHarnessOptions): CustomHarness;
1
+ import type { Harness, HarnessOptions } from "./harness.types.ts";
2
+ export declare function harness(options: HarnessOptions): Harness;
@@ -48,6 +48,9 @@ export function harness(options) {
48
48
  }
49
49
  function limits(value) {
50
50
  invariant(value !== null && typeof value === "object", "Harness limits must be an object");
51
+ if (value.maxDelegationDepth !== undefined)
52
+ invariant(Number.isSafeInteger(value.maxDelegationDepth) &&
53
+ value.maxDelegationDepth >= 0, "Harness maxDelegationDepth must be a nonnegative integer");
51
54
  const maxSteps = positive(value.maxSteps ?? HARNESS_DEFAULTS.maxSteps, "Harness maxSteps");
52
55
  if (value.maxToolCalls !== undefined)
53
56
  positive(value.maxToolCalls, "Harness maxToolCalls");
@@ -60,6 +63,9 @@ function limits(value) {
60
63
  }
61
64
  return Object.freeze({
62
65
  maxSteps,
66
+ ...(value.maxDelegationDepth === undefined
67
+ ? {}
68
+ : { maxDelegationDepth: value.maxDelegationDepth }),
63
69
  ...(value.maxToolCalls === undefined
64
70
  ? {}
65
71
  : { maxToolCalls: value.maxToolCalls }),
@@ -1 +1 @@
1
- {"version":3,"file":"harness.js","sourceRoot":"","sources":["../../src/domain/harness.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ConversationStore } from \"./conversation.types.ts\";\nimport { invariant, positive } from \"./errors.ts\";\nimport {\n HARNESS_DEFAULTS,\n HARNESS_FIELDS,\n USAGE_FIELDS,\n} from \"./harness.constants.ts\";\nimport type {\n CustomHarness,\n CustomHarnessOptions,\n HarnessLimits,\n HarnessToolExecution,\n ResolvedHarnessLimits,\n} from \"./harness.types.ts\";\nimport { harnessHooks } from \"./hook.ts\";\nimport {\n defineHarnessInstructions,\n harnessInstructions,\n} from \"./instructions.ts\";\nimport { harnessSkills, skillCatalog, skillLoader } from \"./skill.ts\";\nimport { harnessTools } from \"./tool.ts\";\n\nexport function harness(options: CustomHarnessOptions): CustomHarness {\n invariant(\n options !== null && typeof options === \"object\",\n \"Harness options must be an object\",\n );\n invariant(\n !(\"run\" in options),\n \"harness() no longer accepts run; declare tools, instructions and limits\",\n );\n const unsupported = Object.keys(options).filter(\n (key) => !HARNESS_FIELDS.has(key),\n );\n invariant(\n unsupported.length === 0,\n `Unsupported harness option: ${unsupported.join(\", \")}`,\n );\n invariant(\n typeof options.modelProvider?.request === \"function\",\n \"Custom harness requires a model provider\",\n );\n invariant(\n options.modelProvider.validate === undefined ||\n typeof options.modelProvider.validate === \"function\",\n \"Model provider validate must be a function\",\n );\n invariant(\n options.cache === undefined || typeof options.cache === \"boolean\",\n \"Harness cache must be boolean\",\n );\n invariant(\n options.permissions === undefined ||\n options.permissions?.kind === \"permissions\",\n \"Declare permissions with defineHarnessPermissions\",\n );\n invariant(\n options.context === undefined || options.context?.kind === \"context\",\n \"Declare context strategies with defineHarnessContextStrategy\",\n );\n invariant(\n options.conversations === undefined ||\n options.conversations === false ||\n conversationStore(options.conversations),\n \"Harness conversations must be a conversation store or false\",\n );\n const skills = harnessSkills(options.skills);\n return Object.freeze({\n kind: \"custom\",\n modelProvider: options.modelProvider,\n instructions: Object.freeze([\n ...harnessInstructions(options.instructions),\n ...(skills.length\n ? [defineHarnessInstructions(skillCatalog(skills))]\n : []),\n ]),\n tools: harnessTools([\n ...(options.tools ?? []),\n ...skills.flatMap((skill) => skill.tools),\n ...(skills.length ? [skillLoader(skills)] : []),\n ]),\n skills,\n limits: limits(options.limits ?? {}),\n toolExecution: toolExecution(options.toolExecution ?? {}),\n hooks: harnessHooks(options.hooks),\n ...(options.permissions ? { permissions: options.permissions } : {}),\n ...(options.context ? { context: options.context } : {}),\n ...(options.conversations === undefined\n ? {}\n : { conversations: options.conversations }),\n cache: options.cache ?? HARNESS_DEFAULTS.cache,\n });\n}\n\nfunction limits(value: HarnessLimits): ResolvedHarnessLimits {\n invariant(\n value !== null && typeof value === \"object\",\n \"Harness limits must be an object\",\n );\n const maxSteps = positive(\n value.maxSteps ?? HARNESS_DEFAULTS.maxSteps,\n \"Harness maxSteps\",\n );\n if (value.maxToolCalls !== undefined)\n positive(value.maxToolCalls, \"Harness maxToolCalls\");\n if (value.usage !== undefined) {\n invariant(\n value.usage !== null &&\n typeof value.usage === \"object\" &&\n Object.keys(value.usage).every((key) => USAGE_FIELDS.includes(key)),\n \"Harness usage limits accept input, cached, cacheCreated and output\",\n );\n for (const limit of Object.values(value.usage))\n invariant(\n Number.isSafeInteger(limit) && limit >= 0,\n \"Harness usage limits must be nonnegative integers\",\n );\n }\n return Object.freeze({\n maxSteps,\n ...(value.maxToolCalls === undefined\n ? {}\n : { maxToolCalls: value.maxToolCalls }),\n ...(value.usage === undefined\n ? {}\n : { usage: Object.freeze({ ...value.usage }) }),\n });\n}\n\nfunction toolExecution(\n value: HarnessToolExecution,\n): Required<HarnessToolExecution> {\n invariant(\n value !== null && typeof value === \"object\",\n \"Harness toolExecution must be an object\",\n );\n invariant(\n value.onError === undefined ||\n value.onError === \"return-to-model\" ||\n value.onError === \"fail\",\n 'Tool onError must be \"return-to-model\" or \"fail\"',\n );\n return Object.freeze({\n concurrency: positive(\n value.concurrency ?? HARNESS_DEFAULTS.concurrency,\n \"Tool concurrency\",\n ),\n deadlineMs: positive(\n value.deadlineMs ?? HARNESS_DEFAULTS.toolDeadlineMs,\n \"Tool deadlineMs\",\n ),\n onError: value.onError ?? HARNESS_DEFAULTS.onError,\n });\n}\n\nfunction conversationStore(value: ConversationStore): boolean {\n return (\n value !== null &&\n typeof value === \"object\" &&\n typeof value.locate === \"function\" &&\n typeof value.capture === \"function\" &&\n typeof value.restore === \"function\"\n );\n}\n"]}
1
+ {"version":3,"file":"harness.js","sourceRoot":"","sources":["../../src/domain/harness.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ConversationStore } from \"./conversation.types.ts\";\nimport { invariant, positive } from \"./errors.ts\";\nimport {\n HARNESS_DEFAULTS,\n HARNESS_FIELDS,\n USAGE_FIELDS,\n} from \"./harness.constants.ts\";\nimport type {\n Harness,\n HarnessOptions,\n HarnessLimits,\n HarnessToolExecution,\n ResolvedHarnessLimits,\n} from \"./harness.types.ts\";\nimport { harnessHooks } from \"./hook.ts\";\nimport {\n defineHarnessInstructions,\n harnessInstructions,\n} from \"./instructions.ts\";\nimport { harnessSkills, skillCatalog, skillLoader } from \"./skill.ts\";\nimport { harnessTools } from \"./tool.ts\";\n\nexport function harness(options: HarnessOptions): Harness {\n invariant(\n options !== null && typeof options === \"object\",\n \"Harness options must be an object\",\n );\n invariant(\n !(\"run\" in options),\n \"harness() no longer accepts run; declare tools, instructions and limits\",\n );\n const unsupported = Object.keys(options).filter(\n (key) => !HARNESS_FIELDS.has(key),\n );\n invariant(\n unsupported.length === 0,\n `Unsupported harness option: ${unsupported.join(\", \")}`,\n );\n invariant(\n typeof options.modelProvider?.request === \"function\",\n \"Custom harness requires a model provider\",\n );\n invariant(\n options.modelProvider.validate === undefined ||\n typeof options.modelProvider.validate === \"function\",\n \"Model provider validate must be a function\",\n );\n invariant(\n options.cache === undefined || typeof options.cache === \"boolean\",\n \"Harness cache must be boolean\",\n );\n invariant(\n options.permissions === undefined ||\n options.permissions?.kind === \"permissions\",\n \"Declare permissions with defineHarnessPermissions\",\n );\n invariant(\n options.context === undefined || options.context?.kind === \"context\",\n \"Declare context strategies with defineHarnessContextStrategy\",\n );\n invariant(\n options.conversations === undefined ||\n options.conversations === false ||\n conversationStore(options.conversations),\n \"Harness conversations must be a conversation store or false\",\n );\n const skills = harnessSkills(options.skills);\n return Object.freeze({\n kind: \"custom\",\n modelProvider: options.modelProvider,\n instructions: Object.freeze([\n ...harnessInstructions(options.instructions),\n ...(skills.length\n ? [defineHarnessInstructions(skillCatalog(skills))]\n : []),\n ]),\n tools: harnessTools([\n ...(options.tools ?? []),\n ...skills.flatMap((skill) => skill.tools),\n ...(skills.length ? [skillLoader(skills)] : []),\n ]),\n skills,\n limits: limits(options.limits ?? {}),\n toolExecution: toolExecution(options.toolExecution ?? {}),\n hooks: harnessHooks(options.hooks),\n ...(options.permissions ? { permissions: options.permissions } : {}),\n ...(options.context ? { context: options.context } : {}),\n ...(options.conversations === undefined\n ? {}\n : { conversations: options.conversations }),\n cache: options.cache ?? HARNESS_DEFAULTS.cache,\n });\n}\n\nfunction limits(value: HarnessLimits): ResolvedHarnessLimits {\n invariant(\n value !== null && typeof value === \"object\",\n \"Harness limits must be an object\",\n );\n if (value.maxDelegationDepth !== undefined)\n invariant(\n Number.isSafeInteger(value.maxDelegationDepth) &&\n value.maxDelegationDepth >= 0,\n \"Harness maxDelegationDepth must be a nonnegative integer\",\n );\n const maxSteps = positive(\n value.maxSteps ?? HARNESS_DEFAULTS.maxSteps,\n \"Harness maxSteps\",\n );\n if (value.maxToolCalls !== undefined)\n positive(value.maxToolCalls, \"Harness maxToolCalls\");\n if (value.usage !== undefined) {\n invariant(\n value.usage !== null &&\n typeof value.usage === \"object\" &&\n Object.keys(value.usage).every((key) => USAGE_FIELDS.includes(key)),\n \"Harness usage limits accept input, cached, cacheCreated and output\",\n );\n for (const limit of Object.values(value.usage))\n invariant(\n Number.isSafeInteger(limit) && limit >= 0,\n \"Harness usage limits must be nonnegative integers\",\n );\n }\n return Object.freeze({\n maxSteps,\n ...(value.maxDelegationDepth === undefined\n ? {}\n : { maxDelegationDepth: value.maxDelegationDepth }),\n ...(value.maxToolCalls === undefined\n ? {}\n : { maxToolCalls: value.maxToolCalls }),\n ...(value.usage === undefined\n ? {}\n : { usage: Object.freeze({ ...value.usage }) }),\n });\n}\n\nfunction toolExecution(\n value: HarnessToolExecution,\n): Required<HarnessToolExecution> {\n invariant(\n value !== null && typeof value === \"object\",\n \"Harness toolExecution must be an object\",\n );\n invariant(\n value.onError === undefined ||\n value.onError === \"return-to-model\" ||\n value.onError === \"fail\",\n 'Tool onError must be \"return-to-model\" or \"fail\"',\n );\n return Object.freeze({\n concurrency: positive(\n value.concurrency ?? HARNESS_DEFAULTS.concurrency,\n \"Tool concurrency\",\n ),\n deadlineMs: positive(\n value.deadlineMs ?? HARNESS_DEFAULTS.toolDeadlineMs,\n \"Tool deadlineMs\",\n ),\n onError: value.onError ?? HARNESS_DEFAULTS.onError,\n });\n}\n\nfunction conversationStore(value: ConversationStore): boolean {\n return (\n value !== null &&\n typeof value === \"object\" &&\n typeof value.locate === \"function\" &&\n typeof value.capture === \"function\" &&\n typeof value.restore === \"function\"\n );\n}\n"]}
@@ -20,8 +20,9 @@ export interface HarnessInstructions {
20
20
  export type HarnessInstructionsOption = string | HarnessInstructions | readonly (string | HarnessInstructions)[];
21
21
  export interface HarnessLimits {
22
22
  readonly maxSteps?: number;
23
+ readonly maxDelegationDepth?: number;
23
24
  readonly maxToolCalls?: number;
24
- readonly usage?: Partial<Usage>;
25
+ readonly usage?: Partial<Omit<Usage, "complete">>;
25
26
  }
26
27
  export interface ResolvedHarnessLimits extends HarnessLimits {
27
28
  readonly maxSteps: number;
@@ -31,7 +32,7 @@ export interface HarnessToolExecution {
31
32
  readonly deadlineMs?: number;
32
33
  readonly onError?: "return-to-model" | "fail";
33
34
  }
34
- export interface CustomHarnessOptions {
35
+ export interface HarnessOptions {
35
36
  readonly modelProvider: ModelProvider;
36
37
  readonly instructions?: HarnessInstructionsOption;
37
38
  readonly tools?: readonly (HarnessTool | HarnessToolset)[];
@@ -44,7 +45,7 @@ export interface CustomHarnessOptions {
44
45
  readonly skills?: readonly HarnessSkill[];
45
46
  readonly cache?: boolean;
46
47
  }
47
- export interface CustomHarness {
48
+ export interface Harness {
48
49
  readonly kind: "custom";
49
50
  readonly modelProvider: ModelProvider;
50
51
  readonly instructions: readonly HarnessInstructions[];
@@ -1 +1 @@
1
- {"version":3,"file":"harness.types.js","sourceRoot":"","sources":["../../src/domain/harness.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Usage } from \"./agent.types.ts\";\nimport type { HarnessContextStrategy } from \"./context.types.ts\";\nimport type { ConversationStore } from \"./conversation.types.ts\";\nimport type { HarnessHook } from \"./hook.types.ts\";\nimport type { AgentModel, ModelProvider } from \"./model.types.ts\";\nimport type { HarnessPermissions } from \"./permissions.types.ts\";\nimport type { HarnessSkill } from \"./skill.types.ts\";\nimport type { SandboxLease } from \"./sandbox.types.ts\";\nimport type { HarnessTool, HarnessToolset } from \"./tool.types.ts\";\n\nexport interface HarnessInstructionContext {\n readonly sandbox: SandboxLease;\n readonly signal: AbortSignal;\n readonly model: AgentModel;\n}\n\nexport type HarnessInstructionSource =\n string | ((context: HarnessInstructionContext) => string | Promise<string>);\n\nexport interface HarnessInstructions {\n readonly kind: \"instructions\";\n resolve(context: HarnessInstructionContext): Promise<string>;\n}\n\nexport type HarnessInstructionsOption =\n string | HarnessInstructions | readonly (string | HarnessInstructions)[];\n\nexport interface HarnessLimits {\n readonly maxSteps?: number;\n readonly maxToolCalls?: number;\n readonly usage?: Partial<Usage>;\n}\n\nexport interface ResolvedHarnessLimits extends HarnessLimits {\n readonly maxSteps: number;\n}\n\nexport interface HarnessToolExecution {\n readonly concurrency?: number;\n readonly deadlineMs?: number;\n readonly onError?: \"return-to-model\" | \"fail\";\n}\n\nexport interface CustomHarnessOptions {\n readonly modelProvider: ModelProvider;\n readonly instructions?: HarnessInstructionsOption;\n readonly tools?: readonly (HarnessTool | HarnessToolset)[];\n readonly limits?: HarnessLimits;\n readonly toolExecution?: HarnessToolExecution;\n readonly hooks?: readonly HarnessHook[];\n readonly permissions?: HarnessPermissions;\n readonly context?: HarnessContextStrategy;\n readonly conversations?: ConversationStore | false;\n readonly skills?: readonly HarnessSkill[];\n readonly cache?: boolean;\n}\n\nexport interface CustomHarness {\n readonly kind: \"custom\";\n readonly modelProvider: ModelProvider;\n readonly instructions: readonly HarnessInstructions[];\n readonly tools: readonly HarnessTool[];\n readonly limits: ResolvedHarnessLimits;\n readonly toolExecution: Required<HarnessToolExecution>;\n readonly hooks: readonly HarnessHook[];\n readonly permissions?: HarnessPermissions;\n readonly context?: HarnessContextStrategy;\n readonly conversations?: ConversationStore | false;\n readonly skills: readonly HarnessSkill[];\n readonly cache: boolean;\n}\n"]}
1
+ {"version":3,"file":"harness.types.js","sourceRoot":"","sources":["../../src/domain/harness.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Usage } from \"./agent.types.ts\";\nimport type { HarnessContextStrategy } from \"./context.types.ts\";\nimport type { ConversationStore } from \"./conversation.types.ts\";\nimport type { HarnessHook } from \"./hook.types.ts\";\nimport type { AgentModel, ModelProvider } from \"./model.types.ts\";\nimport type { HarnessPermissions } from \"./permissions.types.ts\";\nimport type { HarnessSkill } from \"./skill.types.ts\";\nimport type { SandboxLease } from \"./sandbox.types.ts\";\nimport type { HarnessTool, HarnessToolset } from \"./tool.types.ts\";\n\nexport interface HarnessInstructionContext {\n readonly sandbox: SandboxLease;\n readonly signal: AbortSignal;\n readonly model: AgentModel;\n}\n\nexport type HarnessInstructionSource =\n string | ((context: HarnessInstructionContext) => string | Promise<string>);\n\nexport interface HarnessInstructions {\n readonly kind: \"instructions\";\n resolve(context: HarnessInstructionContext): Promise<string>;\n}\n\nexport type HarnessInstructionsOption =\n string | HarnessInstructions | readonly (string | HarnessInstructions)[];\n\nexport interface HarnessLimits {\n readonly maxSteps?: number;\n readonly maxDelegationDepth?: number;\n readonly maxToolCalls?: number;\n readonly usage?: Partial<Omit<Usage, \"complete\">>;\n}\n\nexport interface ResolvedHarnessLimits extends HarnessLimits {\n readonly maxSteps: number;\n}\n\nexport interface HarnessToolExecution {\n readonly concurrency?: number;\n readonly deadlineMs?: number;\n readonly onError?: \"return-to-model\" | \"fail\";\n}\n\nexport interface HarnessOptions {\n readonly modelProvider: ModelProvider;\n readonly instructions?: HarnessInstructionsOption;\n readonly tools?: readonly (HarnessTool | HarnessToolset)[];\n readonly limits?: HarnessLimits;\n readonly toolExecution?: HarnessToolExecution;\n readonly hooks?: readonly HarnessHook[];\n readonly permissions?: HarnessPermissions;\n readonly context?: HarnessContextStrategy;\n readonly conversations?: ConversationStore | false;\n readonly skills?: readonly HarnessSkill[];\n readonly cache?: boolean;\n}\n\nexport interface Harness {\n readonly kind: \"custom\";\n readonly modelProvider: ModelProvider;\n readonly instructions: readonly HarnessInstructions[];\n readonly tools: readonly HarnessTool[];\n readonly limits: ResolvedHarnessLimits;\n readonly toolExecution: Required<HarnessToolExecution>;\n readonly hooks: readonly HarnessHook[];\n readonly permissions?: HarnessPermissions;\n readonly context?: HarnessContextStrategy;\n readonly conversations?: ConversationStore | false;\n readonly skills: readonly HarnessSkill[];\n readonly cache: boolean;\n}\n"]}
@@ -23,6 +23,7 @@ export interface ModelToolResultBlock {
23
23
  readonly isError?: boolean;
24
24
  }
25
25
  export interface ModelReasoningBlock {
26
+ readonly text?: string;
26
27
  readonly type: "reasoning";
27
28
  readonly provider: string;
28
29
  readonly model: string;
@@ -57,6 +58,13 @@ export interface ModelResult {
57
58
  readonly usage?: Usage;
58
59
  }
59
60
  export type ModelStreamEvent = {
61
+ readonly type: "reasoning";
62
+ readonly text: string;
63
+ } | {
64
+ readonly type: "retry";
65
+ readonly attempt: number;
66
+ readonly message?: string;
67
+ } | {
60
68
  readonly type: "text-delta";
61
69
  readonly text: string;
62
70
  } | {
@@ -1 +1 @@
1
- {"version":3,"file":"model.types.js","sourceRoot":"","sources":["../../src/domain/model.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Usage } from \"./agent.types.ts\";\n\nexport type ModelReasoning =\n \"none\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\";\n\nexport interface AgentModel {\n readonly name: string;\n readonly reasoning?: ModelReasoning;\n readonly maxOutputTokens?: number;\n}\n\nexport type ModelSpec = string | AgentModel;\n\nexport interface ModelTextBlock {\n readonly type: \"text\";\n readonly text: string;\n}\n\nexport interface ModelToolCallBlock {\n readonly type: \"tool-call\";\n readonly id: string;\n readonly name: string;\n readonly input: unknown;\n}\n\nexport interface ModelToolResultBlock {\n readonly type: \"tool-result\";\n readonly callId: string;\n readonly content: string;\n readonly isError?: boolean;\n}\n\nexport interface ModelReasoningBlock {\n readonly type: \"reasoning\";\n readonly provider: string;\n readonly model: string;\n readonly data: unknown;\n}\n\nexport type ModelContentBlock =\n | ModelTextBlock\n | ModelToolCallBlock\n | ModelToolResultBlock\n | ModelReasoningBlock;\n\nexport interface ModelMessage {\n readonly role: \"user\" | \"assistant\";\n readonly content: readonly ModelContentBlock[];\n}\n\nexport interface ModelToolSpec {\n readonly name: string;\n readonly description: string;\n readonly inputSchema: Readonly<Record<string, unknown>>;\n}\n\nexport type ModelStopReason = \"end\" | \"tool-calls\" | \"max-tokens\" | \"refusal\";\n\nexport interface ModelRequest {\n readonly model: string;\n readonly prompt?: string;\n readonly messages?: readonly ModelMessage[];\n readonly system?: string;\n readonly tools?: readonly ModelToolSpec[];\n readonly maxOutputTokens?: number;\n readonly reasoning?: ModelReasoning;\n readonly cache?: boolean;\n readonly signal?: AbortSignal;\n}\n\nexport interface ModelResult {\n readonly text: string;\n readonly content?: readonly ModelContentBlock[];\n readonly stopReason?: ModelStopReason;\n readonly usage?: Usage;\n}\n\nexport type ModelStreamEvent =\n | { readonly type: \"text-delta\"; readonly text: string }\n | { readonly type: \"result\"; readonly result: ModelResult };\n\nexport interface ModelProvider {\n readonly name: string;\n readonly identity?: string;\n validate?(model: AgentModel): void;\n request(request: ModelRequest): Promise<ModelResult>;\n stream?(request: ModelRequest): AsyncIterable<ModelStreamEvent>;\n}\n"]}
1
+ {"version":3,"file":"model.types.js","sourceRoot":"","sources":["../../src/domain/model.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Usage } from \"./agent.types.ts\";\n\nexport type ModelReasoning =\n \"none\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\";\n\nexport interface AgentModel {\n readonly name: string;\n readonly reasoning?: ModelReasoning;\n readonly maxOutputTokens?: number;\n}\n\nexport type ModelSpec = string | AgentModel;\n\nexport interface ModelTextBlock {\n readonly type: \"text\";\n readonly text: string;\n}\n\nexport interface ModelToolCallBlock {\n readonly type: \"tool-call\";\n readonly id: string;\n readonly name: string;\n readonly input: unknown;\n}\n\nexport interface ModelToolResultBlock {\n readonly type: \"tool-result\";\n readonly callId: string;\n readonly content: string;\n readonly isError?: boolean;\n}\n\nexport interface ModelReasoningBlock {\n readonly text?: string;\n readonly type: \"reasoning\";\n readonly provider: string;\n readonly model: string;\n readonly data: unknown;\n}\n\nexport type ModelContentBlock =\n | ModelTextBlock\n | ModelToolCallBlock\n | ModelToolResultBlock\n | ModelReasoningBlock;\n\nexport interface ModelMessage {\n readonly role: \"user\" | \"assistant\";\n readonly content: readonly ModelContentBlock[];\n}\n\nexport interface ModelToolSpec {\n readonly name: string;\n readonly description: string;\n readonly inputSchema: Readonly<Record<string, unknown>>;\n}\n\nexport type ModelStopReason = \"end\" | \"tool-calls\" | \"max-tokens\" | \"refusal\";\n\nexport interface ModelRequest {\n readonly model: string;\n readonly prompt?: string;\n readonly messages?: readonly ModelMessage[];\n readonly system?: string;\n readonly tools?: readonly ModelToolSpec[];\n readonly maxOutputTokens?: number;\n readonly reasoning?: ModelReasoning;\n readonly cache?: boolean;\n readonly signal?: AbortSignal;\n}\n\nexport interface ModelResult {\n readonly text: string;\n readonly content?: readonly ModelContentBlock[];\n readonly stopReason?: ModelStopReason;\n readonly usage?: Usage;\n}\n\nexport type ModelStreamEvent =\n | { readonly type: \"reasoning\"; readonly text: string }\n | {\n readonly type: \"retry\";\n readonly attempt: number;\n readonly message?: string;\n }\n | { readonly type: \"text-delta\"; readonly text: string }\n | { readonly type: \"result\"; readonly result: ModelResult };\n\nexport interface ModelProvider {\n readonly name: string;\n readonly identity?: string;\n validate?(model: AgentModel): void;\n request(request: ModelRequest): Promise<ModelResult>;\n stream?(request: ModelRequest): AsyncIterable<ModelStreamEvent>;\n}\n"]}
@@ -0,0 +1,8 @@
1
+ export declare const observationDefaults: {
2
+ readonly capacity: 1024;
3
+ readonly deliveryTimeoutMs: 5000;
4
+ readonly errorLimit: 100;
5
+ readonly outputCharacters: 8192;
6
+ readonly previewCharacters: 2000;
7
+ readonly toolCallLimit: 1024;
8
+ };
@@ -0,0 +1,9 @@
1
+ export const observationDefaults = {
2
+ capacity: 1024,
3
+ deliveryTimeoutMs: 5000,
4
+ errorLimit: 100,
5
+ outputCharacters: 8192,
6
+ previewCharacters: 2000,
7
+ toolCallLimit: 1024,
8
+ };
9
+ //# sourceMappingURL=observation.constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observation.constants.js","sourceRoot":"","sources":["../../src/domain/observation.constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,QAAQ,EAAE,IAAI;IACd,iBAAiB,EAAE,IAAI;IACvB,UAAU,EAAE,GAAG;IACf,gBAAgB,EAAE,IAAI;IACtB,iBAAiB,EAAE,IAAI;IACvB,aAAa,EAAE,IAAI;CACX,CAAC","sourcesContent":["export const observationDefaults = {\n capacity: 1024,\n deliveryTimeoutMs: 5000,\n errorLimit: 100,\n outputCharacters: 8192,\n previewCharacters: 2000,\n toolCallLimit: 1024,\n} as const;\n"]}
@@ -0,0 +1,2 @@
1
+ import type { ObservationHub, ObservationHubOptions } from "./observation.types.ts";
2
+ export declare function createObservationHub(options?: ObservationHubOptions): ObservationHub;