groundswell 0.0.3 → 1.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 (292) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +26 -9
  3. package/dist/cache/cache-key.d.ts +20 -0
  4. package/dist/cache/cache-key.d.ts.map +1 -1
  5. package/dist/cache/cache-key.js +9 -0
  6. package/dist/cache/cache-key.js.map +1 -1
  7. package/dist/core/agent.d.ts +120 -29
  8. package/dist/core/agent.d.ts.map +1 -1
  9. package/dist/core/agent.js +584 -177
  10. package/dist/core/agent.js.map +1 -1
  11. package/dist/core/mcp-handler.d.ts +63 -5
  12. package/dist/core/mcp-handler.d.ts.map +1 -1
  13. package/dist/core/mcp-handler.js +184 -4
  14. package/dist/core/mcp-handler.js.map +1 -1
  15. package/dist/core/workflow-context.d.ts +6 -2
  16. package/dist/core/workflow-context.d.ts.map +1 -1
  17. package/dist/core/workflow-context.js +99 -4
  18. package/dist/core/workflow-context.js.map +1 -1
  19. package/dist/core/workflow.d.ts +315 -13
  20. package/dist/core/workflow.d.ts.map +1 -1
  21. package/dist/core/workflow.js +552 -30
  22. package/dist/core/workflow.js.map +1 -1
  23. package/dist/debugger/event-replayer.d.ts +422 -0
  24. package/dist/debugger/event-replayer.d.ts.map +1 -0
  25. package/dist/debugger/event-replayer.js +639 -0
  26. package/dist/debugger/event-replayer.js.map +1 -0
  27. package/dist/debugger/tree-debugger.d.ts +170 -1
  28. package/dist/debugger/tree-debugger.d.ts.map +1 -1
  29. package/dist/debugger/tree-debugger.js +423 -1
  30. package/dist/debugger/tree-debugger.js.map +1 -1
  31. package/dist/decorators/step.d.ts.map +1 -1
  32. package/dist/decorators/step.js +129 -47
  33. package/dist/decorators/step.js.map +1 -1
  34. package/dist/harnesses/claude-code-harness.d.ts +391 -0
  35. package/dist/harnesses/claude-code-harness.d.ts.map +1 -0
  36. package/dist/harnesses/claude-code-harness.js +1076 -0
  37. package/dist/harnesses/claude-code-harness.js.map +1 -0
  38. package/dist/harnesses/harness-registry.d.ts +440 -0
  39. package/dist/harnesses/harness-registry.d.ts.map +1 -0
  40. package/dist/harnesses/harness-registry.js +543 -0
  41. package/dist/harnesses/harness-registry.js.map +1 -0
  42. package/dist/harnesses/index.d.ts +12 -0
  43. package/dist/harnesses/index.d.ts.map +1 -0
  44. package/dist/harnesses/index.js +11 -0
  45. package/dist/harnesses/index.js.map +1 -0
  46. package/dist/harnesses/pi-harness.d.ts +219 -0
  47. package/dist/harnesses/pi-harness.d.ts.map +1 -0
  48. package/dist/harnesses/pi-harness.js +676 -0
  49. package/dist/harnesses/pi-harness.js.map +1 -0
  50. package/dist/harnesses/pi-schema-converter.d.ts +24 -0
  51. package/dist/harnesses/pi-schema-converter.d.ts.map +1 -0
  52. package/dist/harnesses/pi-schema-converter.js +81 -0
  53. package/dist/harnesses/pi-schema-converter.js.map +1 -0
  54. package/dist/harnesses/register-defaults.d.ts +24 -0
  55. package/dist/harnesses/register-defaults.d.ts.map +1 -0
  56. package/dist/harnesses/register-defaults.js +40 -0
  57. package/dist/harnesses/register-defaults.js.map +1 -0
  58. package/dist/harnesses/session-store.d.ts +201 -0
  59. package/dist/harnesses/session-store.d.ts.map +1 -0
  60. package/dist/harnesses/session-store.js +254 -0
  61. package/dist/harnesses/session-store.js.map +1 -0
  62. package/dist/index.d.ts +12 -2
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +17 -0
  65. package/dist/index.js.map +1 -1
  66. package/dist/reflection/reflection.d.ts.map +1 -1
  67. package/dist/reflection/reflection.js +19 -4
  68. package/dist/reflection/reflection.js.map +1 -1
  69. package/dist/types/agent.d.ts +1253 -2
  70. package/dist/types/agent.d.ts.map +1 -1
  71. package/dist/types/agent.js +418 -1
  72. package/dist/types/agent.js.map +1 -1
  73. package/dist/types/decorators.d.ts +10 -1
  74. package/dist/types/decorators.d.ts.map +1 -1
  75. package/dist/types/events.d.ts +26 -0
  76. package/dist/types/events.d.ts.map +1 -1
  77. package/dist/types/harnesses.d.ts +474 -0
  78. package/dist/types/harnesses.d.ts.map +1 -0
  79. package/dist/types/harnesses.js +2 -0
  80. package/dist/types/harnesses.js.map +1 -0
  81. package/dist/types/index.d.ts +9 -1
  82. package/dist/types/index.d.ts.map +1 -1
  83. package/dist/types/index.js +6 -0
  84. package/dist/types/index.js.map +1 -1
  85. package/dist/types/providers.d.ts +691 -0
  86. package/dist/types/providers.d.ts.map +1 -0
  87. package/dist/types/providers.js +14 -0
  88. package/dist/types/providers.js.map +1 -0
  89. package/dist/types/restart.d.ts +132 -0
  90. package/dist/types/restart.d.ts.map +1 -0
  91. package/dist/types/restart.js +2 -0
  92. package/dist/types/restart.js.map +1 -0
  93. package/dist/types/streaming.d.ts +194 -0
  94. package/dist/types/streaming.d.ts.map +1 -0
  95. package/dist/types/streaming.js +67 -0
  96. package/dist/types/streaming.js.map +1 -0
  97. package/dist/types/workflow-context.d.ts +137 -1
  98. package/dist/types/workflow-context.d.ts.map +1 -1
  99. package/dist/utils/agent-validation.d.ts +88 -0
  100. package/dist/utils/agent-validation.d.ts.map +1 -0
  101. package/dist/utils/agent-validation.js +87 -0
  102. package/dist/utils/agent-validation.js.map +1 -0
  103. package/dist/utils/delay.d.ts +7 -0
  104. package/dist/utils/delay.d.ts.map +1 -0
  105. package/dist/utils/delay.js +9 -0
  106. package/dist/utils/delay.js.map +1 -0
  107. package/dist/utils/harness-config.d.ts +180 -0
  108. package/dist/utils/harness-config.d.ts.map +1 -0
  109. package/dist/utils/harness-config.js +311 -0
  110. package/dist/utils/harness-config.js.map +1 -0
  111. package/dist/utils/index.d.ts +9 -1
  112. package/dist/utils/index.d.ts.map +1 -1
  113. package/dist/utils/index.js +8 -1
  114. package/dist/utils/index.js.map +1 -1
  115. package/dist/utils/model-spec.d.ts +110 -0
  116. package/dist/utils/model-spec.d.ts.map +1 -0
  117. package/dist/utils/model-spec.js +149 -0
  118. package/dist/utils/model-spec.js.map +1 -0
  119. package/dist/utils/provider-config.d.ts +10 -0
  120. package/dist/utils/provider-config.d.ts.map +1 -0
  121. package/dist/utils/provider-config.js +10 -0
  122. package/dist/utils/provider-config.js.map +1 -0
  123. package/dist/utils/restart-analysis.d.ts +202 -0
  124. package/dist/utils/restart-analysis.d.ts.map +1 -0
  125. package/dist/utils/restart-analysis.js +426 -0
  126. package/dist/utils/restart-analysis.js.map +1 -0
  127. package/dist/utils/session-serialization.d.ts +118 -0
  128. package/dist/utils/session-serialization.d.ts.map +1 -0
  129. package/dist/utils/session-serialization.js +217 -0
  130. package/dist/utils/session-serialization.js.map +1 -0
  131. package/package.json +31 -5
  132. package/CHANGELOG.md +0 -188
  133. package/dist/__tests__/adversarial/attachChild-performance.test.d.ts +0 -16
  134. package/dist/__tests__/adversarial/attachChild-performance.test.d.ts.map +0 -1
  135. package/dist/__tests__/adversarial/attachChild-performance.test.js +0 -187
  136. package/dist/__tests__/adversarial/attachChild-performance.test.js.map +0 -1
  137. package/dist/__tests__/adversarial/circular-reference.test.d.ts +0 -13
  138. package/dist/__tests__/adversarial/circular-reference.test.d.ts.map +0 -1
  139. package/dist/__tests__/adversarial/circular-reference.test.js +0 -92
  140. package/dist/__tests__/adversarial/circular-reference.test.js.map +0 -1
  141. package/dist/__tests__/adversarial/complex-circular-reference.test.d.ts +0 -16
  142. package/dist/__tests__/adversarial/complex-circular-reference.test.d.ts.map +0 -1
  143. package/dist/__tests__/adversarial/complex-circular-reference.test.js +0 -127
  144. package/dist/__tests__/adversarial/complex-circular-reference.test.js.map +0 -1
  145. package/dist/__tests__/adversarial/concurrent-task-failures.test.d.ts +0 -21
  146. package/dist/__tests__/adversarial/concurrent-task-failures.test.d.ts.map +0 -1
  147. package/dist/__tests__/adversarial/concurrent-task-failures.test.js +0 -667
  148. package/dist/__tests__/adversarial/concurrent-task-failures.test.js.map +0 -1
  149. package/dist/__tests__/adversarial/deep-analysis.test.d.ts +0 -6
  150. package/dist/__tests__/adversarial/deep-analysis.test.d.ts.map +0 -1
  151. package/dist/__tests__/adversarial/deep-analysis.test.js +0 -877
  152. package/dist/__tests__/adversarial/deep-analysis.test.js.map +0 -1
  153. package/dist/__tests__/adversarial/deep-hierarchy-stress.test.d.ts +0 -13
  154. package/dist/__tests__/adversarial/deep-hierarchy-stress.test.d.ts.map +0 -1
  155. package/dist/__tests__/adversarial/deep-hierarchy-stress.test.js +0 -186
  156. package/dist/__tests__/adversarial/deep-hierarchy-stress.test.js.map +0 -1
  157. package/dist/__tests__/adversarial/e2e-prd-validation.test.d.ts +0 -6
  158. package/dist/__tests__/adversarial/e2e-prd-validation.test.d.ts.map +0 -1
  159. package/dist/__tests__/adversarial/e2e-prd-validation.test.js +0 -626
  160. package/dist/__tests__/adversarial/e2e-prd-validation.test.js.map +0 -1
  161. package/dist/__tests__/adversarial/edge-case.test.d.ts +0 -6
  162. package/dist/__tests__/adversarial/edge-case.test.d.ts.map +0 -1
  163. package/dist/__tests__/adversarial/edge-case.test.js +0 -857
  164. package/dist/__tests__/adversarial/edge-case.test.js.map +0 -1
  165. package/dist/__tests__/adversarial/error-merge-strategy.test.d.ts +0 -20
  166. package/dist/__tests__/adversarial/error-merge-strategy.test.d.ts.map +0 -1
  167. package/dist/__tests__/adversarial/error-merge-strategy.test.js +0 -907
  168. package/dist/__tests__/adversarial/error-merge-strategy.test.js.map +0 -1
  169. package/dist/__tests__/adversarial/incremental-performance.test.d.ts +0 -2
  170. package/dist/__tests__/adversarial/incremental-performance.test.d.ts.map +0 -1
  171. package/dist/__tests__/adversarial/incremental-performance.test.js +0 -113
  172. package/dist/__tests__/adversarial/incremental-performance.test.js.map +0 -1
  173. package/dist/__tests__/adversarial/node-map-update-benchmarks.test.d.ts +0 -22
  174. package/dist/__tests__/adversarial/node-map-update-benchmarks.test.d.ts.map +0 -1
  175. package/dist/__tests__/adversarial/node-map-update-benchmarks.test.js +0 -383
  176. package/dist/__tests__/adversarial/node-map-update-benchmarks.test.js.map +0 -1
  177. package/dist/__tests__/adversarial/observer-propagation.test.d.ts +0 -21
  178. package/dist/__tests__/adversarial/observer-propagation.test.d.ts.map +0 -1
  179. package/dist/__tests__/adversarial/observer-propagation.test.js +0 -404
  180. package/dist/__tests__/adversarial/observer-propagation.test.js.map +0 -1
  181. package/dist/__tests__/adversarial/parent-validation.test.d.ts +0 -13
  182. package/dist/__tests__/adversarial/parent-validation.test.d.ts.map +0 -1
  183. package/dist/__tests__/adversarial/parent-validation.test.js +0 -128
  184. package/dist/__tests__/adversarial/parent-validation.test.js.map +0 -1
  185. package/dist/__tests__/adversarial/prd-12-2-compliance.test.d.ts +0 -20
  186. package/dist/__tests__/adversarial/prd-12-2-compliance.test.d.ts.map +0 -1
  187. package/dist/__tests__/adversarial/prd-12-2-compliance.test.js +0 -482
  188. package/dist/__tests__/adversarial/prd-12-2-compliance.test.js.map +0 -1
  189. package/dist/__tests__/adversarial/prd-compliance.test.d.ts +0 -6
  190. package/dist/__tests__/adversarial/prd-compliance.test.d.ts.map +0 -1
  191. package/dist/__tests__/adversarial/prd-compliance.test.js +0 -886
  192. package/dist/__tests__/adversarial/prd-compliance.test.js.map +0 -1
  193. package/dist/__tests__/compatibility/backward-compatibility.test.d.ts +0 -22
  194. package/dist/__tests__/compatibility/backward-compatibility.test.d.ts.map +0 -1
  195. package/dist/__tests__/compatibility/backward-compatibility.test.js +0 -1843
  196. package/dist/__tests__/compatibility/backward-compatibility.test.js.map +0 -1
  197. package/dist/__tests__/helpers/index.d.ts +0 -10
  198. package/dist/__tests__/helpers/index.d.ts.map +0 -1
  199. package/dist/__tests__/helpers/index.js +0 -10
  200. package/dist/__tests__/helpers/index.js.map +0 -1
  201. package/dist/__tests__/helpers/tree-verification.d.ts +0 -90
  202. package/dist/__tests__/helpers/tree-verification.d.ts.map +0 -1
  203. package/dist/__tests__/helpers/tree-verification.js +0 -202
  204. package/dist/__tests__/helpers/tree-verification.js.map +0 -1
  205. package/dist/__tests__/integration/agent-workflow.test.d.ts +0 -2
  206. package/dist/__tests__/integration/agent-workflow.test.d.ts.map +0 -1
  207. package/dist/__tests__/integration/agent-workflow.test.js +0 -256
  208. package/dist/__tests__/integration/agent-workflow.test.js.map +0 -1
  209. package/dist/__tests__/integration/bidirectional-consistency.test.d.ts +0 -14
  210. package/dist/__tests__/integration/bidirectional-consistency.test.d.ts.map +0 -1
  211. package/dist/__tests__/integration/bidirectional-consistency.test.js +0 -668
  212. package/dist/__tests__/integration/bidirectional-consistency.test.js.map +0 -1
  213. package/dist/__tests__/integration/observer-logging.test.d.ts +0 -2
  214. package/dist/__tests__/integration/observer-logging.test.d.ts.map +0 -1
  215. package/dist/__tests__/integration/observer-logging.test.js +0 -517
  216. package/dist/__tests__/integration/observer-logging.test.js.map +0 -1
  217. package/dist/__tests__/integration/tree-mirroring.test.d.ts +0 -2
  218. package/dist/__tests__/integration/tree-mirroring.test.d.ts.map +0 -1
  219. package/dist/__tests__/integration/tree-mirroring.test.js +0 -117
  220. package/dist/__tests__/integration/tree-mirroring.test.js.map +0 -1
  221. package/dist/__tests__/integration/workflow-reparenting.test.d.ts +0 -12
  222. package/dist/__tests__/integration/workflow-reparenting.test.d.ts.map +0 -1
  223. package/dist/__tests__/integration/workflow-reparenting.test.js +0 -239
  224. package/dist/__tests__/integration/workflow-reparenting.test.js.map +0 -1
  225. package/dist/__tests__/unit/agent.test.d.ts +0 -2
  226. package/dist/__tests__/unit/agent.test.d.ts.map +0 -1
  227. package/dist/__tests__/unit/agent.test.js +0 -143
  228. package/dist/__tests__/unit/agent.test.js.map +0 -1
  229. package/dist/__tests__/unit/cache-key.test.d.ts +0 -5
  230. package/dist/__tests__/unit/cache-key.test.d.ts.map +0 -1
  231. package/dist/__tests__/unit/cache-key.test.js +0 -145
  232. package/dist/__tests__/unit/cache-key.test.js.map +0 -1
  233. package/dist/__tests__/unit/cache.test.d.ts +0 -5
  234. package/dist/__tests__/unit/cache.test.d.ts.map +0 -1
  235. package/dist/__tests__/unit/cache.test.js +0 -132
  236. package/dist/__tests__/unit/cache.test.js.map +0 -1
  237. package/dist/__tests__/unit/context.test.d.ts +0 -2
  238. package/dist/__tests__/unit/context.test.d.ts.map +0 -1
  239. package/dist/__tests__/unit/context.test.js +0 -220
  240. package/dist/__tests__/unit/context.test.js.map +0 -1
  241. package/dist/__tests__/unit/decorators.test.d.ts +0 -2
  242. package/dist/__tests__/unit/decorators.test.d.ts.map +0 -1
  243. package/dist/__tests__/unit/decorators.test.js +0 -162
  244. package/dist/__tests__/unit/decorators.test.js.map +0 -1
  245. package/dist/__tests__/unit/introspection-tools.test.d.ts +0 -5
  246. package/dist/__tests__/unit/introspection-tools.test.d.ts.map +0 -1
  247. package/dist/__tests__/unit/introspection-tools.test.js +0 -191
  248. package/dist/__tests__/unit/introspection-tools.test.js.map +0 -1
  249. package/dist/__tests__/unit/logger.test.d.ts +0 -2
  250. package/dist/__tests__/unit/logger.test.d.ts.map +0 -1
  251. package/dist/__tests__/unit/logger.test.js +0 -241
  252. package/dist/__tests__/unit/logger.test.js.map +0 -1
  253. package/dist/__tests__/unit/observable.test.d.ts +0 -2
  254. package/dist/__tests__/unit/observable.test.d.ts.map +0 -1
  255. package/dist/__tests__/unit/observable.test.js +0 -251
  256. package/dist/__tests__/unit/observable.test.js.map +0 -1
  257. package/dist/__tests__/unit/prompt.test.d.ts +0 -2
  258. package/dist/__tests__/unit/prompt.test.d.ts.map +0 -1
  259. package/dist/__tests__/unit/prompt.test.js +0 -113
  260. package/dist/__tests__/unit/prompt.test.js.map +0 -1
  261. package/dist/__tests__/unit/reflection.test.d.ts +0 -5
  262. package/dist/__tests__/unit/reflection.test.d.ts.map +0 -1
  263. package/dist/__tests__/unit/reflection.test.js +0 -160
  264. package/dist/__tests__/unit/reflection.test.js.map +0 -1
  265. package/dist/__tests__/unit/tree-debugger-incremental.test.d.ts +0 -2
  266. package/dist/__tests__/unit/tree-debugger-incremental.test.d.ts.map +0 -1
  267. package/dist/__tests__/unit/tree-debugger-incremental.test.js +0 -136
  268. package/dist/__tests__/unit/tree-debugger-incremental.test.js.map +0 -1
  269. package/dist/__tests__/unit/tree-debugger.test.d.ts +0 -2
  270. package/dist/__tests__/unit/tree-debugger.test.d.ts.map +0 -1
  271. package/dist/__tests__/unit/tree-debugger.test.js +0 -69
  272. package/dist/__tests__/unit/tree-debugger.test.js.map +0 -1
  273. package/dist/__tests__/unit/utils/workflow-error-utils.test.d.ts +0 -2
  274. package/dist/__tests__/unit/utils/workflow-error-utils.test.d.ts.map +0 -1
  275. package/dist/__tests__/unit/utils/workflow-error-utils.test.js +0 -154
  276. package/dist/__tests__/unit/utils/workflow-error-utils.test.js.map +0 -1
  277. package/dist/__tests__/unit/workflow-detachChild.test.d.ts +0 -2
  278. package/dist/__tests__/unit/workflow-detachChild.test.d.ts.map +0 -1
  279. package/dist/__tests__/unit/workflow-detachChild.test.js +0 -76
  280. package/dist/__tests__/unit/workflow-detachChild.test.js.map +0 -1
  281. package/dist/__tests__/unit/workflow-emitEvent-childDetached.test.d.ts +0 -2
  282. package/dist/__tests__/unit/workflow-emitEvent-childDetached.test.d.ts.map +0 -1
  283. package/dist/__tests__/unit/workflow-emitEvent-childDetached.test.js +0 -122
  284. package/dist/__tests__/unit/workflow-emitEvent-childDetached.test.js.map +0 -1
  285. package/dist/__tests__/unit/workflow-isDescendantOf.test.d.ts +0 -2
  286. package/dist/__tests__/unit/workflow-isDescendantOf.test.d.ts.map +0 -1
  287. package/dist/__tests__/unit/workflow-isDescendantOf.test.js +0 -140
  288. package/dist/__tests__/unit/workflow-isDescendantOf.test.js.map +0 -1
  289. package/dist/__tests__/unit/workflow.test.d.ts +0 -2
  290. package/dist/__tests__/unit/workflow.test.d.ts.map +0 -1
  291. package/dist/__tests__/unit/workflow.test.js +0 -330
  292. package/dist/__tests__/unit/workflow.test.js.map +0 -1
@@ -2,7 +2,10 @@
2
2
  * Agent configuration and override types
3
3
  * All properties map 1:1 to Anthropic SDK
4
4
  */
5
- import type { Tool, MCPServer, Skill, AgentHooks } from './sdk-primitives.js';
5
+ import type { Tool, MCPServer, Skill, AgentHooks, TokenUsage } from './sdk-primitives.js';
6
+ import type { ProviderId, ProviderOptions } from './providers.js';
7
+ import type { HarnessId, HarnessOptions } from './harnesses.js';
8
+ import { z } from 'zod';
6
9
  /**
7
10
  * Configuration for creating an Agent instance
8
11
  * All Anthropic SDK properties pass through unchanged
@@ -26,12 +29,109 @@ export interface AgentConfig {
26
29
  enableReflection?: boolean;
27
30
  /** Enable caching of prompt responses */
28
31
  enableCache?: boolean;
29
- /** Model to use (defaults to claude-sonnet-4-20250514) */
32
+ /**
33
+ * Model identifier for LLM inference
34
+ *
35
+ * Supports two formats:
36
+ * - **Plain format**: `"claude-sonnet-4-20250514"` - Uses default provider
37
+ * - **Qualified format**: `"anthropic/claude-sonnet-4-20250514"` - Explicit provider
38
+ *
39
+ * When a plain model name is used (no provider prefix), the provider
40
+ * is determined by the configuration cascade: prompt override →
41
+ * agent provider → global default.
42
+ *
43
+ * ## Model Specification (PRD 7.8)
44
+ *
45
+ * The `parseModelSpec()` utility parses model strings into:
46
+ * - `provider`: Provider ID (anthropic, claude-code, etc.)
47
+ * - `model`: Base model name without prefix
48
+ * - `raw`: Original input string
49
+ *
50
+ * @example <caption>Plain format (uses default provider)</caption>
51
+ * ```ts
52
+ * const config: AgentConfig = {
53
+ * model: 'claude-sonnet-4-20250514'
54
+ * // Uses provider from cascade
55
+ * };
56
+ * ```
57
+ *
58
+ * @example <caption>Qualified format (explicit provider)</caption>
59
+ * ```ts
60
+ * const config: AgentConfig = {
61
+ * model: 'anthropic/claude-sonnet-4-20250514'
62
+ * // Explicitly uses Anthropic provider
63
+ * };
64
+ * ```
65
+ *
66
+ * @example <caption>Qualified format with Claude Code provider</caption>
67
+ * ```ts
68
+ * const config: AgentConfig = {
69
+ * model: 'anthropic/claude-sonnet-4'
70
+ * // Explicitly uses Anthropic provider
71
+ * };
72
+ * ```
73
+ *
74
+ * @default "claude-sonnet-4-20250514"
75
+ * @see {@link parseModelSpec} for model specification parsing
76
+ * @see {@link ModelSpec} for parsed model structure
77
+ */
30
78
  model?: string;
31
79
  /** Maximum tokens for responses */
32
80
  maxTokens?: number;
33
81
  /** Temperature for response generation */
34
82
  temperature?: number;
83
+ /** Harness to use (inherits from global; default 'pi'). PRD §7.9. */
84
+ harness?: HarnessId;
85
+ /** Harness-specific options. PRD §7.9. */
86
+ harnessOptions?: HarnessOptions;
87
+ /**
88
+ * Provider to use for this agent
89
+ *
90
+ * @deprecated Since v1.2. Use {@link AgentConfig.harness} (and
91
+ * {@link AgentConfig.harnessOptions} for options) instead. The runtime/harness
92
+ * axis (`'pi'` | `'claude-code'`) is now independent of the LLM provider/model
93
+ * (PRD §7): the harness is chosen separately, and the model string is never
94
+ * harness-qualified. Retained for backward compatibility during the v1.2 migration
95
+ * and removed when the legacy adapters are renamed/deleted (P2.M1 / P4.M1).
96
+ *
97
+ * ```typescript
98
+ * // BEFORE (v1.x)
99
+ * const config: AgentConfig = { provider: 'anthropic' };
100
+ * // AFTER (v1.2)
101
+ * const config: AgentConfig = {
102
+ * harness: 'claude-code',
103
+ * model: 'anthropic/claude-sonnet-4-20250514',
104
+ * };
105
+ * ```
106
+ */
107
+ provider?: ProviderId;
108
+ /**
109
+ * Provider-specific options for this agent
110
+ *
111
+ * @deprecated Since v1.2. Use {@link AgentConfig.harnessOptions} instead.
112
+ *
113
+ * Note: {@link HarnessOptions} is SLIMMED relative to this type — it omits
114
+ * `sessionStore`, `sessionPersistence`, `sessionTtl`, and `sessionPath` (those are
115
+ * now harness-adapter internals; see `src/types/providers.ts` → `ProviderOptions`
116
+ * @deprecated note). Migrating callers that relied on session-persistence config
117
+ * must move it to the concrete harness adapter.
118
+ *
119
+ * The v1.x provider-options merge cascade is superseded by the PRD §7.7 **harness**
120
+ * cascade (GlobalHarnessConfig.defaultHarness → AgentConfig.harness/harnessOptions →
121
+ * PromptOverrides.harness/harnessOptions), resolved via null-coalescing.
122
+ *
123
+ * ```typescript
124
+ * // BEFORE (v1.x)
125
+ * const config: AgentConfig = {
126
+ * providerOptions: { endpoint: 'https://api.example.com', sessionPersistence: 'file' },
127
+ * };
128
+ * // AFTER (v1.2)
129
+ * const config: AgentConfig = {
130
+ * harnessOptions: { endpoint: 'https://api.example.com', apiKey: process.env.ANTHROPIC_API_KEY },
131
+ * };
132
+ * ```
133
+ */
134
+ providerOptions?: ProviderOptions;
35
135
  }
36
136
  /**
37
137
  * Overrides that can be applied at the prompt level
@@ -62,5 +162,1156 @@ export interface PromptOverrides {
62
162
  enableReflection?: boolean;
63
163
  /** Override model for this prompt */
64
164
  model?: string;
165
+ /** Override harness for this prompt (PRD §7.7, §7.9). Highest priority in the harness cascade. */
166
+ harness?: HarnessId;
167
+ /** Override harness options for this prompt (PRD §7.7). Merged via last-write-wins. */
168
+ harnessOptions?: HarnessOptions;
169
+ /**
170
+ * Override provider for this prompt
171
+ *
172
+ * @deprecated Since v1.2. Use {@link PromptOverrides.harness} (and
173
+ * {@link PromptOverrides.harnessOptions} for options) instead. The runtime/harness
174
+ * axis (`'pi'` | `'claude-code'`) is now independent of the LLM provider/model
175
+ * (PRD §7): the harness is chosen separately, and the model string is never
176
+ * harness-qualified. This field is the highest-priority node in the PRD §7.7
177
+ * **harness** cascade (GlobalHarnessConfig.defaultHarness → AgentConfig.harness →
178
+ * PromptOverrides.harness). Retained for backward compatibility during the v1.2
179
+ * migration; the Agent runtime reads it in lockstep with `harness`
180
+ * (`overrides?.harness ?? overrides?.provider` in src/core/agent.ts).
181
+ *
182
+ * ```typescript
183
+ * // BEFORE (v1.x)
184
+ * const response = await agent.prompt(myPrompt, { provider: 'anthropic' });
185
+ * // AFTER (v1.2)
186
+ * const response = await agent.prompt(myPrompt, {
187
+ * harness: 'claude-code',
188
+ * model: 'anthropic/claude-sonnet-4-20250514',
189
+ * });
190
+ * ```
191
+ */
192
+ provider?: ProviderId;
193
+ /**
194
+ * Override provider options for this prompt
195
+ *
196
+ * @deprecated Since v1.2. Use {@link PromptOverrides.harnessOptions} instead.
197
+ *
198
+ * Note: {@link HarnessOptions} is SLIMMED relative to this type — it omits
199
+ * `sessionStore`, `sessionPersistence`, `sessionTtl`, and `sessionPath` (those are
200
+ * now harness-adapter internals; see `src/types/providers.ts` → `ProviderOptions`
201
+ * @deprecated note). Migrating callers that relied on session-persistence config
202
+ * must move it to the concrete harness adapter.
203
+ *
204
+ * The v1.x provider-options merge cascade is superseded by the PRD §7.7 **harness**
205
+ * cascade (GlobalHarnessConfig.defaultHarness → AgentConfig.harness/harnessOptions →
206
+ * PromptOverrides.harness/harnessOptions), resolved via null-coalescing.
207
+ *
208
+ * ```typescript
209
+ * // BEFORE (v1.x)
210
+ * const response = await agent.prompt(myPrompt, {
211
+ * providerOptions: { endpoint: 'https://api.example.com', sessionPersistence: 'file' },
212
+ * });
213
+ * // AFTER (v1.2)
214
+ * const response = await agent.prompt(myPrompt, {
215
+ * harnessOptions: { endpoint: 'https://api.example.com', apiKey: process.env.ANTHROPIC_API_KEY },
216
+ * });
217
+ * ```
218
+ */
219
+ providerOptions?: ProviderOptions;
65
220
  }
221
+ /**
222
+ * Status of an agent response
223
+ * Used as discriminant for type narrowing
224
+ */
225
+ export type AgentResponseStatus = 'success' | 'error' | 'partial';
226
+ /**
227
+ * Response wrapper for agent execution results (discriminated union)
228
+ *
229
+ * ## PRD 6.4 Response Requirements
230
+ *
231
+ * All AgentResponse instances MUST satisfy:
232
+ *
233
+ * 1. **Strict JSON** (PRD 6.4.1): Must be parseable by `JSON.parse()`
234
+ * 2. **No Prose Wrapping** (PRD 6.4.2): No markdown code blocks or text
235
+ * 3. **Consistent Structure** (PRD 6.4.3): Must conform to this interface
236
+ * 4. **Null over Undefined** (PRD 6.4.4): Use `null` for absent values
237
+ * 5. **Error Responses** (PRD 6.4.5): Failed operations return valid JSON
238
+ *
239
+ * ## Discriminated Union Type Safety
240
+ *
241
+ * **This is a discriminated union type** - the `status` field determines the
242
+ * shape of `data` and `error` at compile-time. TypeScript will prevent invalid
243
+ * combinations like `status='success'` with `error!=null`.
244
+ *
245
+ * The three variants are:
246
+ * - **Success**: `status: 'success'`, `data: T`, `error: null`
247
+ * - **Error**: `status: 'error'`, `data: null`, `error: AgentErrorDetails`
248
+ * - **Partial**: `status: 'partial'`, `data: T`, `error: null`
249
+ *
250
+ * ## Type Narrowing
251
+ *
252
+ * Use the `status` field directly or type guards for type narrowing:
253
+ * - `isSuccess(response)` → `SuccessResponse<T>` (data is T, error is null)
254
+ * - `isError(response)` → `ErrorResponse` (data is null, error exists)
255
+ * - `isPartial(response)` → `PartialResponse<T>` (data is T, error is null)
256
+ *
257
+ * @template T - The type of data returned on success (unknown by default)
258
+ * @see {@link SuccessResponse}, {@link ErrorResponse}, {@link PartialResponse}
259
+ *
260
+ * @example <caption>Success response (PRD 6.5)</caption>
261
+ * ```ts
262
+ * const response: AgentResponse<{ result: string; artifacts: string[] }> = {
263
+ * status: 'success',
264
+ * data: { result: 'Task completed', artifacts: ['file1.ts', 'file2.ts'] },
265
+ * error: null, // Must be null for success - enforced by TypeScript
266
+ * metadata: { agentId: 'agent-abc123', timestamp: 1706140800000, duration: 1523 }
267
+ * };
268
+ * ```
269
+ *
270
+ * @example <caption>Type narrowing with status field</caption>
271
+ * ```ts
272
+ * function handleResponse<T>(response: AgentResponse<T>) {
273
+ * switch (response.status) {
274
+ * case 'success':
275
+ * // TypeScript knows: response.data is T, response.error is null
276
+ * return response.data;
277
+ * case 'error':
278
+ * // TypeScript knows: response.data is null, response.error is AgentErrorDetails
279
+ * throw new Error(response.error.message);
280
+ * case 'partial':
281
+ * // TypeScript knows: response.data is T, response.error is null
282
+ * return response.data;
283
+ * default:
284
+ * // Exhaustiveness check - unreachable
285
+ * const _exhaustive: never = response;
286
+ * return _exhaustive;
287
+ * }
288
+ * }
289
+ * ```
290
+ *
291
+ * @example <caption>Invalid combinations are compile-time errors</caption>
292
+ * ```ts
293
+ * // ❌ TYPE ERROR: status='success' with error!=null
294
+ * const invalid1: AgentResponse<string> = {
295
+ * status: 'success',
296
+ * data: 'hello',
297
+ * error: { code: 'ERROR', message: 'oops', recoverable: false }, // Type error!
298
+ * metadata: { agentId: 'test', timestamp: Date.now() }
299
+ * };
300
+ * // TypeScript error: Type '{ code: string; message: string; recoverable: boolean; }' is not assignable to type 'null'.
301
+ *
302
+ * // ❌ TYPE ERROR: status='error' with data!=null
303
+ * const invalid2: AgentResponse<string> = {
304
+ * status: 'error',
305
+ * data: 'hello', // Type error!
306
+ * error: { code: 'ERROR', message: 'oops', recoverable: false },
307
+ * metadata: { agentId: 'test', timestamp: Date.now() }
308
+ * };
309
+ * // TypeScript error: Type 'string' is not assignable to type 'null'.
310
+ * ```
311
+ */
312
+ export type AgentResponse<T = unknown> = {
313
+ status: 'success';
314
+ data: T;
315
+ error: null;
316
+ metadata: AgentResponseMetadata;
317
+ } | {
318
+ status: 'error';
319
+ data: null;
320
+ error: AgentErrorDetails;
321
+ metadata: AgentResponseMetadata;
322
+ } | {
323
+ status: 'partial';
324
+ data: T;
325
+ error: null;
326
+ metadata: AgentResponseMetadata;
327
+ };
328
+ /**
329
+ * Error details for agent error responses
330
+ *
331
+ * Per PRD 6.2: Error responses include machine-readable codes,
332
+ * human-readable messages, and a recoverable flag for retry logic.
333
+ *
334
+ * The `code` field uses SCREAMING_SNAKE_CASE convention and should
335
+ * be one of the standard codes from {@link AGENT_ERROR_CODES}.
336
+ *
337
+ * @see {@link AGENT_ERROR_CODES} for standard error codes
338
+ * @see {@link createErrorResponse} for factory function
339
+ *
340
+ * @example <caption>Error response (PRD 6.5)</caption>
341
+ * ```ts
342
+ * const error: AgentErrorDetails = {
343
+ * code: 'EXECUTION_FAILED',
344
+ * message: 'Failed to compile TypeScript files',
345
+ * details: {
346
+ * failedFiles: ['src/index.ts'],
347
+ * compilerErrors: ['TS2307: Cannot find module \\'foo\\'']
348
+ * },
349
+ * recoverable: true
350
+ * };
351
+ * ```
352
+ */
353
+ export interface AgentErrorDetails {
354
+ /**
355
+ * Machine-readable error code (SCREAMING_SNAKE_CASE convention)
356
+ *
357
+ * Use standard codes from {@link AGENT_ERROR_CODES} when applicable.
358
+ * Custom codes should follow the same naming convention.
359
+ */
360
+ code: string;
361
+ /** Human-readable error description suitable for display or logging */
362
+ message: string;
363
+ /**
364
+ * Additional error context - null if no details available
365
+ *
366
+ * May include field names, values, stack traces, or other diagnostic info.
367
+ * Per PRD 6.4.4: Use null instead of undefined for absent values.
368
+ */
369
+ details?: Record<string, unknown> | null;
370
+ /**
371
+ * Whether the error is recoverable (can retry)
372
+ *
373
+ * Set to true for transient errors (rate limits, network issues).
374
+ * Set to false for permanent errors (validation, invalid format).
375
+ *
376
+ * Per PRD 6.2: This is a hint for parent workflow retry logic.
377
+ */
378
+ recoverable: boolean;
379
+ }
380
+ /**
381
+ * Metadata for agent responses
382
+ *
383
+ * Per PRD 6.3: Response metadata includes agent identification,
384
+ * timing information, and optional correlation/tracing data.
385
+ *
386
+ * The timestamp is a Unix timestamp in milliseconds (not seconds).
387
+ * Use Date.now() or similar to generate valid timestamps.
388
+ *
389
+ * @see {@link TokenUsage} for token usage structure
390
+ *
391
+ * @example <caption>Metadata from PRD 6.5</caption>
392
+ * ```ts
393
+ * const metadata: AgentResponseMetadata = {
394
+ * agentId: 'agent-abc123',
395
+ * timestamp: 1706140800000,
396
+ * duration: 1523
397
+ * };
398
+ * ```
399
+ *
400
+ * @example <caption>Full metadata with optional fields</caption>
401
+ * ```ts
402
+ * const metadata: AgentResponseMetadata = {
403
+ * agentId: 'agent-abc123',
404
+ * timestamp: Date.now(),
405
+ * duration: 1523,
406
+ * requestId: 'req-abc123',
407
+ * usage: { inputTokens: 100, outputTokens: 50, cacheReadTokens: 0, cacheWriteTokens: 25 },
408
+ * toolCalls: 3
409
+ * };
410
+ * ```
411
+ */
412
+ export interface AgentResponseMetadata {
413
+ /**
414
+ * Agent identifier (required)
415
+ *
416
+ * Uniquely identifies the agent or workflow that generated this response.
417
+ * Should be stable across multiple invocations of the same agent.
418
+ */
419
+ agentId: string;
420
+ /**
421
+ * Unix timestamp in milliseconds (required)
422
+ *
423
+ * The time when the response was generated, as a Unix timestamp in
424
+ * milliseconds since the epoch (January 1, 1970). Use Date.now() to
425
+ * generate current timestamps.
426
+ *
427
+ * @example
428
+ * ```ts
429
+ * timestamp: Date.now() // Current time in milliseconds
430
+ * timestamp: 1706140800000 // Fixed timestamp
431
+ * ```
432
+ */
433
+ timestamp: number;
434
+ /**
435
+ * Execution duration in milliseconds (optional)
436
+ *
437
+ * The time taken to execute the agent prompt, from start to completion.
438
+ * Useful for performance monitoring and debugging.
439
+ */
440
+ duration?: number | null;
441
+ /**
442
+ * Request correlation ID (optional)
443
+ *
444
+ * Used for tracing requests across distributed systems. Correlates
445
+ * this response with the original request and any downstream calls.
446
+ */
447
+ requestId?: string | null;
448
+ /**
449
+ * Token usage from the API (optional, for backward compatibility)
450
+ *
451
+ * Breakdown of token usage including input, output, and cache tokens.
452
+ * Only present when the API returns token usage information.
453
+ */
454
+ usage?: TokenUsage;
455
+ /**
456
+ * Number of tool invocations (optional, for backward compatibility)
457
+ *
458
+ * The count of tool/function calls made during agent execution.
459
+ * Useful for tracking agent behavior and cost analysis.
460
+ */
461
+ toolCalls?: number;
462
+ }
463
+ /**
464
+ * Success response type - data is T (not null), error is null
465
+ *
466
+ * Use this type with type guards for type-safe access to response data.
467
+ * When a response has status 'success', data is guaranteed to be T (not null).
468
+ *
469
+ * Per PRD 6.4.3: Consistent Structure - all success responses conform
470
+ * to the AgentResponse interface with status 'success'.
471
+ *
472
+ * @template T - The type of data returned on success
473
+ * @see {@link isSuccess} for the type guard that narrows to this type
474
+ *
475
+ * @example
476
+ * ```ts
477
+ * // Type narrowing with type guard
478
+ * if (isSuccess(response)) {
479
+ * console.log(response.data); // TypeScript knows data is T
480
+ * console.log(response.error); // TypeScript knows error is null
481
+ * }
482
+ * ```
483
+ */
484
+ export type SuccessResponse<T> = AgentResponse<T> & {
485
+ status: 'success';
486
+ };
487
+ /**
488
+ * Error response type - data is null, error is AgentErrorDetails (not null)
489
+ *
490
+ * Use this type with type guards for type-safe access to error details.
491
+ * When a response has status 'error', error is guaranteed to be AgentErrorDetails (not null).
492
+ *
493
+ * Per PRD 6.4.5: Error Responses - failed operations must still return
494
+ * valid JSON with status 'error' and populated error field.
495
+ *
496
+ * @see {@link isError} for the type guard that narrows to this type
497
+ * @see {@link AgentErrorDetails} for error details structure
498
+ *
499
+ * @example
500
+ * ```ts
501
+ * // Type narrowing with type guard
502
+ * if (isError(response)) {
503
+ * console.log(response.error.code); // TypeScript knows error exists
504
+ * console.log(response.data); // TypeScript knows data is null
505
+ * }
506
+ * ```
507
+ */
508
+ export type ErrorResponse = AgentResponse<null> & {
509
+ status: 'error';
510
+ };
511
+ /**
512
+ * Partial response type - data is T, error is null
513
+ *
514
+ * Used for streaming or incremental results where the agent has not
515
+ * yet completed the full request. Partial responses contain intermediate
516
+ * progress data that may be updated in subsequent responses.
517
+ *
518
+ * Per PRD 6.4.3: Consistent Structure - all partial responses conform
519
+ * to the AgentResponse interface with status 'partial'.
520
+ *
521
+ * @template T - The type of partial data returned
522
+ * @see {@link isPartial} for the type guard that narrows to this type
523
+ *
524
+ * @example
525
+ * ```ts
526
+ * // Type narrowing with type guard
527
+ * if (isPartial(response)) {
528
+ * console.log('Progress:', response.data.completedSteps);
529
+ * // TypeScript knows data is T and error is null
530
+ * }
531
+ * ```
532
+ */
533
+ export type PartialResponse<T> = AgentResponse<T> & {
534
+ status: 'partial';
535
+ };
536
+ /**
537
+ * Standard error codes for agent responses
538
+ *
539
+ * All error codes use SCREAMING_SNAKE_CASE convention.
540
+ *
541
+ * Per PRD 6.6: Use `INVALID_RESPONSE_FORMAT` for responses that
542
+ * don't conform to the AgentResponse schema. Validation failures
543
+ * should be treated as errors with this code.
544
+ *
545
+ * @see {@link AgentErrorDetails} for error details structure
546
+ * @see {@link createErrorResponse} for factory function
547
+ *
548
+ * @example
549
+ * ```ts
550
+ * import { AGENT_ERROR_CODES, createErrorResponse } from 'groundswell';
551
+ *
552
+ * const error = createErrorResponse(
553
+ * AGENT_ERROR_CODES.VALIDATION_FAILED,
554
+ * 'Invalid input',
555
+ * { field: 'email', value: 'not-an-email' }
556
+ * );
557
+ * ```
558
+ */
559
+ export declare const AGENT_ERROR_CODES: {
560
+ /**
561
+ * Response not valid JSON or doesn't match AgentResponse schema
562
+ *
563
+ * Per PRD 6.6: Invalid responses must be treated as errors with this code.
564
+ * Use when response validation fails during parsing or schema checking.
565
+ */
566
+ readonly INVALID_RESPONSE_FORMAT: "INVALID_RESPONSE_FORMAT";
567
+ /**
568
+ * Input validation failed
569
+ *
570
+ * Use when the provided inputs fail validation checks (e.g., wrong type,
571
+ * missing required fields, out-of-range values).
572
+ */
573
+ readonly VALIDATION_FAILED: "VALIDATION_FAILED";
574
+ /**
575
+ * Agent execution failed
576
+ *
577
+ * Use when the agent execution fails for reasons unrelated to validation
578
+ * or API requests (e.g., compilation errors, runtime exceptions).
579
+ */
580
+ readonly EXECUTION_FAILED: "EXECUTION_FAILED";
581
+ /**
582
+ * API request to LLM provider failed
583
+ *
584
+ * Use when the HTTP request to the LLM provider fails (e.g., network errors,
585
+ * timeout, rate limiting, provider-side errors).
586
+ */
587
+ readonly API_REQUEST_FAILED: "API_REQUEST_FAILED";
588
+ /**
589
+ * Tool execution failed
590
+ *
591
+ * Use when a tool/function invocation fails during agent execution
592
+ * (e.g., tool not found, tool returned error, tool timeout).
593
+ */
594
+ readonly TOOL_EXECUTION_FAILED: "TOOL_EXECUTION_FAILED";
595
+ /**
596
+ * Internal validation or system error
597
+ *
598
+ * Use when an internal validation fails or a system error occurs.
599
+ * This indicates a bug in the code (e.g., factory helper produced invalid response).
600
+ * Non-recoverable because retrying with the same inputs will produce the same error.
601
+ *
602
+ * Per PRD 6.6: Internal validation failures should return this error code.
603
+ */
604
+ readonly INTERNAL_ERROR: "INTERNAL_ERROR";
605
+ /**
606
+ * Invalid harness/provider configuration
607
+ *
608
+ * Use when a harness receives a configuration it cannot honour — e.g. a model
609
+ * provider it cannot run (ClaudeCodeHarness only runs anthropic/* per PRD §7.8).
610
+ * Non-recoverable: the caller must select a different harness or model, not retry.
611
+ */
612
+ readonly CONFIG_ERROR: "CONFIG_ERROR";
613
+ };
614
+ /**
615
+ * Creates a success response with data and metadata.
616
+ *
617
+ * ## PRD 6.4 Compliance
618
+ *
619
+ * The returned response satisfies all PRD 6.4 requirements:
620
+ * - Strict JSON parseable by `JSON.parse()` (PRD 6.4.1)
621
+ * - No prose wrapping - pure JSON structure (PRD 6.4.2)
622
+ * - Consistent with AgentResponse interface (PRD 6.4.3)
623
+ * - Uses null instead of undefined (PRD 6.4.4)
624
+ *
625
+ * @template T - The type of the response data
626
+ * @param data - The response data to return
627
+ * @param metadata - Response metadata including agentId and timestamp
628
+ * @returns A success AgentResponse with status 'success', provided data, null error
629
+ *
630
+ * @example <caption>Basic success response (PRD 6.5)</caption>
631
+ * ```ts
632
+ * const response = createSuccessResponse(
633
+ * { result: 'Task completed', artifacts: ['file1.ts', 'file2.ts'] },
634
+ * { agentId: 'agent-abc123', timestamp: 1706140800000, duration: 1523 }
635
+ * );
636
+ *
637
+ * // Guaranteed to be valid JSON (PRD 6.4.1)
638
+ * const jsonString = JSON.stringify(response);
639
+ * const parsed = JSON.parse(jsonString); // Always valid
640
+ * ```
641
+ *
642
+ * @example <caption>Success response with execution metadata</caption>
643
+ * ```ts
644
+ * const response = createSuccessResponse(
645
+ * { items: [1, 2, 3] },
646
+ * {
647
+ * agentId: 'agent-123',
648
+ * timestamp: Date.now(),
649
+ * duration: 1523,
650
+ * requestId: 'req-abc123'
651
+ * }
652
+ * );
653
+ * ```
654
+ */
655
+ export declare function createSuccessResponse<T>(data: T, metadata: AgentResponseMetadata): AgentResponse<T>;
656
+ /**
657
+ * Creates an error response with error details.
658
+ *
659
+ * ## PRD 6.4 Compliance
660
+ *
661
+ * Per PRD 6.4.5: Failed operations must still return valid JSON with
662
+ * status 'error' and populated error field. This function ensures all
663
+ * error responses conform to the AgentResponse schema.
664
+ *
665
+ * The error code should use SCREAMING_SNAKE_CASE convention and ideally
666
+ * be one of the standard codes from {@link AGENT_ERROR_CODES}.
667
+ *
668
+ * @param code - Machine-readable error code (SCREAMING_SNAKE_CASE)
669
+ * @param message - Human-readable error message
670
+ * @param details - Optional additional error context (use null instead of undefined per PRD 6.4.4)
671
+ * @param recoverable - Whether the error is recoverable (default: false)
672
+ * @returns An error AgentResponse with null data, populated error field
673
+ *
674
+ * @example <caption>Error response (PRD 6.5)</caption>
675
+ * ```ts
676
+ * const response = createErrorResponse(
677
+ * 'EXECUTION_FAILED',
678
+ * 'Failed to compile TypeScript files',
679
+ * {
680
+ * failedFiles: ['src/index.ts'],
681
+ * compilerErrors: ['TS2307: Cannot find module \\'foo\\'']
682
+ * },
683
+ * true
684
+ * );
685
+ * ```
686
+ *
687
+ * @example <caption>Using standard error codes</caption>
688
+ * ```ts
689
+ * import { AGENT_ERROR_CODES, createErrorResponse } from 'groundswell';
690
+ *
691
+ * const response = createErrorResponse(
692
+ * AGENT_ERROR_CODES.VALIDATION_FAILED,
693
+ * 'Invalid input',
694
+ * { field: 'email', value: 'not-an-email' },
695
+ * false
696
+ * );
697
+ * ```
698
+ */
699
+ export declare function createErrorResponse(code: string, message: string, details?: Record<string, unknown>, recoverable?: boolean): AgentResponse<null>;
700
+ /**
701
+ * Creates a partial response for streaming/incremental results.
702
+ *
703
+ * ## PRD 6.4 Compliance
704
+ *
705
+ * Per PRD 6.4.3: Consistent Structure - partial responses conform to
706
+ * the AgentResponse interface with status 'partial'.
707
+ *
708
+ * Partial responses are used for streaming or incremental results where
709
+ * the agent has not yet completed the full request. They contain intermediate
710
+ * progress data that may be updated in subsequent responses.
711
+ *
712
+ * @template T - The type of the partial response data
713
+ * @param data - The partial response data with progress information
714
+ * @returns A partial AgentResponse with status 'partial', data, null error
715
+ *
716
+ * @example <caption>Partial response (PRD 6.5)</caption>
717
+ * ```ts
718
+ * const response = createPartialResponse({
719
+ * completedSteps: 3,
720
+ * totalSteps: 5,
721
+ * intermediateResult: { progress: 'processing file2.ts' }
722
+ * });
723
+ *
724
+ * // Later, send another partial response with updated progress
725
+ * const updatedResponse = createPartialResponse({
726
+ * completedSteps: 4,
727
+ * totalSteps: 5,
728
+ * intermediateResult: { progress: 'processing file3.ts' }
729
+ * });
730
+ * ```
731
+ *
732
+ * @example <caption>Streaming data chunks</caption>
733
+ * ```ts
734
+ * const chunk = createPartialResponse({
735
+ * chunk: 'Hello',
736
+ * isComplete: false
737
+ * });
738
+ * ```
739
+ */
740
+ export declare function createPartialResponse<T>(data: T): AgentResponse<T>;
741
+ /**
742
+ * Type guard for success responses.
743
+ * Narrows the type to SuccessResponse<T> where data is T (not null).
744
+ *
745
+ * @param response - The response to check
746
+ * @returns True if the response status is 'success'
747
+ *
748
+ * @example
749
+ * ```ts
750
+ * if (isSuccess(response)) {
751
+ * console.log(response.data); // TypeScript knows data is T
752
+ * }
753
+ * ```
754
+ */
755
+ export declare function isSuccess<T>(response: AgentResponse<T>): response is SuccessResponse<T>;
756
+ /**
757
+ * Type guard for error responses.
758
+ * Narrows the type to ErrorResponse where error is AgentErrorDetails (not null).
759
+ *
760
+ * @param response - The response to check
761
+ * @returns True if the response status is 'error'
762
+ *
763
+ * @example
764
+ * ```ts
765
+ * if (isError(response)) {
766
+ * console.log(response.error.code); // TypeScript knows error exists
767
+ * }
768
+ * ```
769
+ */
770
+ export declare function isError<T>(response: AgentResponse<T>): response is ErrorResponse;
771
+ /**
772
+ * Type guard for partial responses.
773
+ * Narrows the type to PartialResponse<T>.
774
+ *
775
+ * @param response - The response to check
776
+ * @returns True if the response status is 'partial'
777
+ *
778
+ * @example
779
+ * ```ts
780
+ * if (isPartial(response)) {
781
+ * console.log('Partial result:', response.data);
782
+ * }
783
+ * ```
784
+ */
785
+ export declare function isPartial<T>(response: AgentResponse<T>): response is PartialResponse<T>;
786
+ /**
787
+ * Zod schema for AgentResponseStatus enum
788
+ * Validates status values: 'success' | 'error' | 'partial'
789
+ *
790
+ * @example
791
+ * ```ts
792
+ * AgentResponseStatusSchema.parse('success'); // ✓
793
+ * AgentResponseStatusSchema.parse('invalid'); // ✗ ZodError
794
+ * ```
795
+ */
796
+ export declare const AgentResponseStatusSchema: z.ZodEnum<["success", "error", "partial"]>;
797
+ /**
798
+ * Zod schema for AgentErrorDetails interface
799
+ * Validates error details with null-over-undefined handling
800
+ *
801
+ * Per PRD 6.4.4: Use null for absent values, not undefined
802
+ */
803
+ export declare const AgentErrorDetailsSchema: z.ZodObject<{
804
+ /** Machine-readable error code (SCREAMING_SNAKE_CASE) */
805
+ code: z.ZodString;
806
+ /** Human-readable error description */
807
+ message: z.ZodString;
808
+ /** Additional error context - null if no details (PRD 6.4.4) */
809
+ details: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
810
+ /** Whether the error is recoverable (can retry) */
811
+ recoverable: z.ZodBoolean;
812
+ }, "strip", z.ZodTypeAny, {
813
+ code: string;
814
+ message: string;
815
+ details: Record<string, unknown> | null;
816
+ recoverable: boolean;
817
+ }, {
818
+ code: string;
819
+ message: string;
820
+ details: Record<string, unknown> | null;
821
+ recoverable: boolean;
822
+ }>;
823
+ /**
824
+ * Zod schema for AgentResponseMetadata interface
825
+ * Validates response metadata including agent ID and timestamp
826
+ */
827
+ export declare const AgentResponseMetadataSchema: z.ZodObject<{
828
+ /** Agent identifier */
829
+ agentId: z.ZodString;
830
+ /** Unix timestamp in milliseconds */
831
+ timestamp: z.ZodNumber;
832
+ /** Execution duration in milliseconds (optional) */
833
+ duration: z.ZodOptional<z.ZodNumber>;
834
+ /** Request correlation ID (optional) */
835
+ requestId: z.ZodOptional<z.ZodString>;
836
+ /** Token usage from API (optional - passthrough for complex type) */
837
+ usage: z.ZodOptional<z.ZodUnknown>;
838
+ /** Number of tool invocations (optional) */
839
+ toolCalls: z.ZodOptional<z.ZodNumber>;
840
+ }, "strip", z.ZodTypeAny, {
841
+ agentId: string;
842
+ timestamp: number;
843
+ usage?: unknown;
844
+ duration?: number | undefined;
845
+ requestId?: string | undefined;
846
+ toolCalls?: number | undefined;
847
+ }, {
848
+ agentId: string;
849
+ timestamp: number;
850
+ usage?: unknown;
851
+ duration?: number | undefined;
852
+ requestId?: string | undefined;
853
+ toolCalls?: number | undefined;
854
+ }>;
855
+ /**
856
+ * Zod schema factory for AgentResponse<T> discriminated union
857
+ * Creates a schema that validates responses based on status discriminator
858
+ *
859
+ * @template T - The Zod schema for the data type
860
+ * @param dataSchema - Zod schema for the response data
861
+ * @returns A discriminated union schema for AgentResponse
862
+ *
863
+ * @example
864
+ * ```ts
865
+ * // Create schema for string responses
866
+ * const StringResponseSchema = AgentResponseSchema(z.object({ result: z.string() }));
867
+ *
868
+ * // Validate a success response
869
+ * const result = StringResponseSchema.safeParse({
870
+ * status: 'success',
871
+ * data: { result: 'hello' },
872
+ * error: null,
873
+ * metadata: { agentId: 'test', timestamp: Date.now() }
874
+ * });
875
+ * ```
876
+ */
877
+ export declare function AgentResponseSchema<T extends z.ZodTypeAny>(dataSchema: T): z.ZodEffects<z.ZodDiscriminatedUnion<"status", [z.ZodObject<{
878
+ status: z.ZodLiteral<"success">;
879
+ data: T;
880
+ error: z.ZodNull;
881
+ metadata: z.ZodOptional<z.ZodObject<{
882
+ /** Agent identifier */
883
+ agentId: z.ZodString;
884
+ /** Unix timestamp in milliseconds */
885
+ timestamp: z.ZodNumber;
886
+ /** Execution duration in milliseconds (optional) */
887
+ duration: z.ZodOptional<z.ZodNumber>;
888
+ /** Request correlation ID (optional) */
889
+ requestId: z.ZodOptional<z.ZodString>;
890
+ /** Token usage from API (optional - passthrough for complex type) */
891
+ usage: z.ZodOptional<z.ZodUnknown>;
892
+ /** Number of tool invocations (optional) */
893
+ toolCalls: z.ZodOptional<z.ZodNumber>;
894
+ }, "strip", z.ZodTypeAny, {
895
+ agentId: string;
896
+ timestamp: number;
897
+ usage?: unknown;
898
+ duration?: number | undefined;
899
+ requestId?: string | undefined;
900
+ toolCalls?: number | undefined;
901
+ }, {
902
+ agentId: string;
903
+ timestamp: number;
904
+ usage?: unknown;
905
+ duration?: number | undefined;
906
+ requestId?: string | undefined;
907
+ toolCalls?: number | undefined;
908
+ }>>;
909
+ }, "strip", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
910
+ status: z.ZodLiteral<"success">;
911
+ data: T;
912
+ error: z.ZodNull;
913
+ metadata: z.ZodOptional<z.ZodObject<{
914
+ /** Agent identifier */
915
+ agentId: z.ZodString;
916
+ /** Unix timestamp in milliseconds */
917
+ timestamp: z.ZodNumber;
918
+ /** Execution duration in milliseconds (optional) */
919
+ duration: z.ZodOptional<z.ZodNumber>;
920
+ /** Request correlation ID (optional) */
921
+ requestId: z.ZodOptional<z.ZodString>;
922
+ /** Token usage from API (optional - passthrough for complex type) */
923
+ usage: z.ZodOptional<z.ZodUnknown>;
924
+ /** Number of tool invocations (optional) */
925
+ toolCalls: z.ZodOptional<z.ZodNumber>;
926
+ }, "strip", z.ZodTypeAny, {
927
+ agentId: string;
928
+ timestamp: number;
929
+ usage?: unknown;
930
+ duration?: number | undefined;
931
+ requestId?: string | undefined;
932
+ toolCalls?: number | undefined;
933
+ }, {
934
+ agentId: string;
935
+ timestamp: number;
936
+ usage?: unknown;
937
+ duration?: number | undefined;
938
+ requestId?: string | undefined;
939
+ toolCalls?: number | undefined;
940
+ }>>;
941
+ }>, any> extends infer T_1 ? { [k in keyof T_1]: T_1[k]; } : never, z.baseObjectInputType<{
942
+ status: z.ZodLiteral<"success">;
943
+ data: T;
944
+ error: z.ZodNull;
945
+ metadata: z.ZodOptional<z.ZodObject<{
946
+ /** Agent identifier */
947
+ agentId: z.ZodString;
948
+ /** Unix timestamp in milliseconds */
949
+ timestamp: z.ZodNumber;
950
+ /** Execution duration in milliseconds (optional) */
951
+ duration: z.ZodOptional<z.ZodNumber>;
952
+ /** Request correlation ID (optional) */
953
+ requestId: z.ZodOptional<z.ZodString>;
954
+ /** Token usage from API (optional - passthrough for complex type) */
955
+ usage: z.ZodOptional<z.ZodUnknown>;
956
+ /** Number of tool invocations (optional) */
957
+ toolCalls: z.ZodOptional<z.ZodNumber>;
958
+ }, "strip", z.ZodTypeAny, {
959
+ agentId: string;
960
+ timestamp: number;
961
+ usage?: unknown;
962
+ duration?: number | undefined;
963
+ requestId?: string | undefined;
964
+ toolCalls?: number | undefined;
965
+ }, {
966
+ agentId: string;
967
+ timestamp: number;
968
+ usage?: unknown;
969
+ duration?: number | undefined;
970
+ requestId?: string | undefined;
971
+ toolCalls?: number | undefined;
972
+ }>>;
973
+ }> extends infer T_2 ? { [k_1 in keyof T_2]: T_2[k_1]; } : never>, z.ZodObject<{
974
+ status: z.ZodLiteral<"error">;
975
+ data: z.ZodNull;
976
+ error: z.ZodObject<{
977
+ /** Machine-readable error code (SCREAMING_SNAKE_CASE) */
978
+ code: z.ZodString;
979
+ /** Human-readable error description */
980
+ message: z.ZodString;
981
+ /** Additional error context - null if no details (PRD 6.4.4) */
982
+ details: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
983
+ /** Whether the error is recoverable (can retry) */
984
+ recoverable: z.ZodBoolean;
985
+ }, "strip", z.ZodTypeAny, {
986
+ code: string;
987
+ message: string;
988
+ details: Record<string, unknown> | null;
989
+ recoverable: boolean;
990
+ }, {
991
+ code: string;
992
+ message: string;
993
+ details: Record<string, unknown> | null;
994
+ recoverable: boolean;
995
+ }>;
996
+ metadata: z.ZodOptional<z.ZodObject<{
997
+ /** Agent identifier */
998
+ agentId: z.ZodString;
999
+ /** Unix timestamp in milliseconds */
1000
+ timestamp: z.ZodNumber;
1001
+ /** Execution duration in milliseconds (optional) */
1002
+ duration: z.ZodOptional<z.ZodNumber>;
1003
+ /** Request correlation ID (optional) */
1004
+ requestId: z.ZodOptional<z.ZodString>;
1005
+ /** Token usage from API (optional - passthrough for complex type) */
1006
+ usage: z.ZodOptional<z.ZodUnknown>;
1007
+ /** Number of tool invocations (optional) */
1008
+ toolCalls: z.ZodOptional<z.ZodNumber>;
1009
+ }, "strip", z.ZodTypeAny, {
1010
+ agentId: string;
1011
+ timestamp: number;
1012
+ usage?: unknown;
1013
+ duration?: number | undefined;
1014
+ requestId?: string | undefined;
1015
+ toolCalls?: number | undefined;
1016
+ }, {
1017
+ agentId: string;
1018
+ timestamp: number;
1019
+ usage?: unknown;
1020
+ duration?: number | undefined;
1021
+ requestId?: string | undefined;
1022
+ toolCalls?: number | undefined;
1023
+ }>>;
1024
+ }, "strip", z.ZodTypeAny, {
1025
+ error: {
1026
+ code: string;
1027
+ message: string;
1028
+ details: Record<string, unknown> | null;
1029
+ recoverable: boolean;
1030
+ };
1031
+ status: "error";
1032
+ data: null;
1033
+ metadata?: {
1034
+ agentId: string;
1035
+ timestamp: number;
1036
+ usage?: unknown;
1037
+ duration?: number | undefined;
1038
+ requestId?: string | undefined;
1039
+ toolCalls?: number | undefined;
1040
+ } | undefined;
1041
+ }, {
1042
+ error: {
1043
+ code: string;
1044
+ message: string;
1045
+ details: Record<string, unknown> | null;
1046
+ recoverable: boolean;
1047
+ };
1048
+ status: "error";
1049
+ data: null;
1050
+ metadata?: {
1051
+ agentId: string;
1052
+ timestamp: number;
1053
+ usage?: unknown;
1054
+ duration?: number | undefined;
1055
+ requestId?: string | undefined;
1056
+ toolCalls?: number | undefined;
1057
+ } | undefined;
1058
+ }>, z.ZodObject<{
1059
+ status: z.ZodLiteral<"partial">;
1060
+ data: T;
1061
+ error: z.ZodNull;
1062
+ metadata: z.ZodOptional<z.ZodObject<{
1063
+ /** Agent identifier */
1064
+ agentId: z.ZodString;
1065
+ /** Unix timestamp in milliseconds */
1066
+ timestamp: z.ZodNumber;
1067
+ /** Execution duration in milliseconds (optional) */
1068
+ duration: z.ZodOptional<z.ZodNumber>;
1069
+ /** Request correlation ID (optional) */
1070
+ requestId: z.ZodOptional<z.ZodString>;
1071
+ /** Token usage from API (optional - passthrough for complex type) */
1072
+ usage: z.ZodOptional<z.ZodUnknown>;
1073
+ /** Number of tool invocations (optional) */
1074
+ toolCalls: z.ZodOptional<z.ZodNumber>;
1075
+ }, "strip", z.ZodTypeAny, {
1076
+ agentId: string;
1077
+ timestamp: number;
1078
+ usage?: unknown;
1079
+ duration?: number | undefined;
1080
+ requestId?: string | undefined;
1081
+ toolCalls?: number | undefined;
1082
+ }, {
1083
+ agentId: string;
1084
+ timestamp: number;
1085
+ usage?: unknown;
1086
+ duration?: number | undefined;
1087
+ requestId?: string | undefined;
1088
+ toolCalls?: number | undefined;
1089
+ }>>;
1090
+ }, "strip", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
1091
+ status: z.ZodLiteral<"partial">;
1092
+ data: T;
1093
+ error: z.ZodNull;
1094
+ metadata: z.ZodOptional<z.ZodObject<{
1095
+ /** Agent identifier */
1096
+ agentId: z.ZodString;
1097
+ /** Unix timestamp in milliseconds */
1098
+ timestamp: z.ZodNumber;
1099
+ /** Execution duration in milliseconds (optional) */
1100
+ duration: z.ZodOptional<z.ZodNumber>;
1101
+ /** Request correlation ID (optional) */
1102
+ requestId: z.ZodOptional<z.ZodString>;
1103
+ /** Token usage from API (optional - passthrough for complex type) */
1104
+ usage: z.ZodOptional<z.ZodUnknown>;
1105
+ /** Number of tool invocations (optional) */
1106
+ toolCalls: z.ZodOptional<z.ZodNumber>;
1107
+ }, "strip", z.ZodTypeAny, {
1108
+ agentId: string;
1109
+ timestamp: number;
1110
+ usage?: unknown;
1111
+ duration?: number | undefined;
1112
+ requestId?: string | undefined;
1113
+ toolCalls?: number | undefined;
1114
+ }, {
1115
+ agentId: string;
1116
+ timestamp: number;
1117
+ usage?: unknown;
1118
+ duration?: number | undefined;
1119
+ requestId?: string | undefined;
1120
+ toolCalls?: number | undefined;
1121
+ }>>;
1122
+ }>, any> extends infer T_3 ? { [k_2 in keyof T_3]: T_3[k_2]; } : never, z.baseObjectInputType<{
1123
+ status: z.ZodLiteral<"partial">;
1124
+ data: T;
1125
+ error: z.ZodNull;
1126
+ metadata: z.ZodOptional<z.ZodObject<{
1127
+ /** Agent identifier */
1128
+ agentId: z.ZodString;
1129
+ /** Unix timestamp in milliseconds */
1130
+ timestamp: z.ZodNumber;
1131
+ /** Execution duration in milliseconds (optional) */
1132
+ duration: z.ZodOptional<z.ZodNumber>;
1133
+ /** Request correlation ID (optional) */
1134
+ requestId: z.ZodOptional<z.ZodString>;
1135
+ /** Token usage from API (optional - passthrough for complex type) */
1136
+ usage: z.ZodOptional<z.ZodUnknown>;
1137
+ /** Number of tool invocations (optional) */
1138
+ toolCalls: z.ZodOptional<z.ZodNumber>;
1139
+ }, "strip", z.ZodTypeAny, {
1140
+ agentId: string;
1141
+ timestamp: number;
1142
+ usage?: unknown;
1143
+ duration?: number | undefined;
1144
+ requestId?: string | undefined;
1145
+ toolCalls?: number | undefined;
1146
+ }, {
1147
+ agentId: string;
1148
+ timestamp: number;
1149
+ usage?: unknown;
1150
+ duration?: number | undefined;
1151
+ requestId?: string | undefined;
1152
+ toolCalls?: number | undefined;
1153
+ }>>;
1154
+ }> extends infer T_4 ? { [k_3 in keyof T_4]: T_4[k_3]; } : never>]>, (z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
1155
+ status: z.ZodLiteral<"success">;
1156
+ data: T;
1157
+ error: z.ZodNull;
1158
+ metadata: z.ZodOptional<z.ZodObject<{
1159
+ /** Agent identifier */
1160
+ agentId: z.ZodString;
1161
+ /** Unix timestamp in milliseconds */
1162
+ timestamp: z.ZodNumber;
1163
+ /** Execution duration in milliseconds (optional) */
1164
+ duration: z.ZodOptional<z.ZodNumber>;
1165
+ /** Request correlation ID (optional) */
1166
+ requestId: z.ZodOptional<z.ZodString>;
1167
+ /** Token usage from API (optional - passthrough for complex type) */
1168
+ usage: z.ZodOptional<z.ZodUnknown>;
1169
+ /** Number of tool invocations (optional) */
1170
+ toolCalls: z.ZodOptional<z.ZodNumber>;
1171
+ }, "strip", z.ZodTypeAny, {
1172
+ agentId: string;
1173
+ timestamp: number;
1174
+ usage?: unknown;
1175
+ duration?: number | undefined;
1176
+ requestId?: string | undefined;
1177
+ toolCalls?: number | undefined;
1178
+ }, {
1179
+ agentId: string;
1180
+ timestamp: number;
1181
+ usage?: unknown;
1182
+ duration?: number | undefined;
1183
+ requestId?: string | undefined;
1184
+ toolCalls?: number | undefined;
1185
+ }>>;
1186
+ }>, any> extends infer T_5 ? { [k in keyof T_5]: T_5[k]; } : never) | {
1187
+ error: {
1188
+ code: string;
1189
+ message: string;
1190
+ details: Record<string, unknown> | null;
1191
+ recoverable: boolean;
1192
+ };
1193
+ status: "error";
1194
+ data: null;
1195
+ metadata?: {
1196
+ agentId: string;
1197
+ timestamp: number;
1198
+ usage?: unknown;
1199
+ duration?: number | undefined;
1200
+ requestId?: string | undefined;
1201
+ toolCalls?: number | undefined;
1202
+ } | undefined;
1203
+ } | (z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
1204
+ status: z.ZodLiteral<"partial">;
1205
+ data: T;
1206
+ error: z.ZodNull;
1207
+ metadata: z.ZodOptional<z.ZodObject<{
1208
+ /** Agent identifier */
1209
+ agentId: z.ZodString;
1210
+ /** Unix timestamp in milliseconds */
1211
+ timestamp: z.ZodNumber;
1212
+ /** Execution duration in milliseconds (optional) */
1213
+ duration: z.ZodOptional<z.ZodNumber>;
1214
+ /** Request correlation ID (optional) */
1215
+ requestId: z.ZodOptional<z.ZodString>;
1216
+ /** Token usage from API (optional - passthrough for complex type) */
1217
+ usage: z.ZodOptional<z.ZodUnknown>;
1218
+ /** Number of tool invocations (optional) */
1219
+ toolCalls: z.ZodOptional<z.ZodNumber>;
1220
+ }, "strip", z.ZodTypeAny, {
1221
+ agentId: string;
1222
+ timestamp: number;
1223
+ usage?: unknown;
1224
+ duration?: number | undefined;
1225
+ requestId?: string | undefined;
1226
+ toolCalls?: number | undefined;
1227
+ }, {
1228
+ agentId: string;
1229
+ timestamp: number;
1230
+ usage?: unknown;
1231
+ duration?: number | undefined;
1232
+ requestId?: string | undefined;
1233
+ toolCalls?: number | undefined;
1234
+ }>>;
1235
+ }>, any> extends infer T_6 ? { [k_2 in keyof T_6]: T_6[k_2]; } : never), (z.baseObjectInputType<{
1236
+ status: z.ZodLiteral<"success">;
1237
+ data: T;
1238
+ error: z.ZodNull;
1239
+ metadata: z.ZodOptional<z.ZodObject<{
1240
+ /** Agent identifier */
1241
+ agentId: z.ZodString;
1242
+ /** Unix timestamp in milliseconds */
1243
+ timestamp: z.ZodNumber;
1244
+ /** Execution duration in milliseconds (optional) */
1245
+ duration: z.ZodOptional<z.ZodNumber>;
1246
+ /** Request correlation ID (optional) */
1247
+ requestId: z.ZodOptional<z.ZodString>;
1248
+ /** Token usage from API (optional - passthrough for complex type) */
1249
+ usage: z.ZodOptional<z.ZodUnknown>;
1250
+ /** Number of tool invocations (optional) */
1251
+ toolCalls: z.ZodOptional<z.ZodNumber>;
1252
+ }, "strip", z.ZodTypeAny, {
1253
+ agentId: string;
1254
+ timestamp: number;
1255
+ usage?: unknown;
1256
+ duration?: number | undefined;
1257
+ requestId?: string | undefined;
1258
+ toolCalls?: number | undefined;
1259
+ }, {
1260
+ agentId: string;
1261
+ timestamp: number;
1262
+ usage?: unknown;
1263
+ duration?: number | undefined;
1264
+ requestId?: string | undefined;
1265
+ toolCalls?: number | undefined;
1266
+ }>>;
1267
+ }> extends infer T_7 ? { [k_1 in keyof T_7]: T_7[k_1]; } : never) | {
1268
+ error: {
1269
+ code: string;
1270
+ message: string;
1271
+ details: Record<string, unknown> | null;
1272
+ recoverable: boolean;
1273
+ };
1274
+ status: "error";
1275
+ data: null;
1276
+ metadata?: {
1277
+ agentId: string;
1278
+ timestamp: number;
1279
+ usage?: unknown;
1280
+ duration?: number | undefined;
1281
+ requestId?: string | undefined;
1282
+ toolCalls?: number | undefined;
1283
+ } | undefined;
1284
+ } | (z.baseObjectInputType<{
1285
+ status: z.ZodLiteral<"partial">;
1286
+ data: T;
1287
+ error: z.ZodNull;
1288
+ metadata: z.ZodOptional<z.ZodObject<{
1289
+ /** Agent identifier */
1290
+ agentId: z.ZodString;
1291
+ /** Unix timestamp in milliseconds */
1292
+ timestamp: z.ZodNumber;
1293
+ /** Execution duration in milliseconds (optional) */
1294
+ duration: z.ZodOptional<z.ZodNumber>;
1295
+ /** Request correlation ID (optional) */
1296
+ requestId: z.ZodOptional<z.ZodString>;
1297
+ /** Token usage from API (optional - passthrough for complex type) */
1298
+ usage: z.ZodOptional<z.ZodUnknown>;
1299
+ /** Number of tool invocations (optional) */
1300
+ toolCalls: z.ZodOptional<z.ZodNumber>;
1301
+ }, "strip", z.ZodTypeAny, {
1302
+ agentId: string;
1303
+ timestamp: number;
1304
+ usage?: unknown;
1305
+ duration?: number | undefined;
1306
+ requestId?: string | undefined;
1307
+ toolCalls?: number | undefined;
1308
+ }, {
1309
+ agentId: string;
1310
+ timestamp: number;
1311
+ usage?: unknown;
1312
+ duration?: number | undefined;
1313
+ requestId?: string | undefined;
1314
+ toolCalls?: number | undefined;
1315
+ }>>;
1316
+ }> extends infer T_8 ? { [k_3 in keyof T_8]: T_8[k_3]; } : never)>;
66
1317
  //# sourceMappingURL=agent.d.ts.map