@adhd/agent-mcp 2.0.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (299) hide show
  1. package/AGENTS.md +236 -0
  2. package/CHANGELOG.md +115 -0
  3. package/LICENSE +21 -0
  4. package/README.md +201 -0
  5. package/docs/architecture-and-security.md +405 -0
  6. package/docs/marketing/.catalog/capabilities.md +143 -0
  7. package/docs/marketing/.catalog/consumer.md +111 -0
  8. package/docs/marketing/.catalog/distribution.md +223 -0
  9. package/docs/marketing/.catalog/doc-conformance.md +237 -0
  10. package/docs/marketing/.catalog/doc-ops.md +98 -0
  11. package/docs/marketing/.catalog/metrics.md +119 -0
  12. package/docs/marketing/.catalog/required-tooling.md +224 -0
  13. package/docs/marketing/.catalog/review.md +164 -0
  14. package/docs/provider-call-audit.md +254 -0
  15. package/llms.txt +133 -0
  16. package/package.json +30 -51
  17. package/src/__tests__/integration/harness.d.ts +871 -39
  18. package/src/__tests__/integration/harness.d.ts.map +1 -1
  19. package/src/__tests__/integration/harness.js +93 -87
  20. package/src/__tests__/integration/harness.js.map +1 -1
  21. package/src/__tests__/integration/scripted-provider.d.ts +1 -2
  22. package/src/__tests__/integration/scripted-provider.d.ts.map +1 -1
  23. package/src/__tests__/integration/scripted-provider.js +1 -3
  24. package/src/__tests__/integration/scripted-provider.js.map +1 -1
  25. package/src/config.d.ts +6 -69
  26. package/src/config.d.ts.map +1 -1
  27. package/src/config.js +1 -50
  28. package/src/config.js.map +1 -1
  29. package/src/db/client.d.ts +1516 -2
  30. package/src/db/client.d.ts.map +1 -1
  31. package/src/db/client.js +4 -2
  32. package/src/db/client.js.map +1 -1
  33. package/src/db/migrate-runner.d.ts +0 -28
  34. package/src/db/migrate-runner.d.ts.map +1 -1
  35. package/src/db/migrate-runner.js +0 -24
  36. package/src/db/migrate-runner.js.map +1 -1
  37. package/src/db/migrate.d.ts +0 -7
  38. package/src/db/migrate.d.ts.map +1 -1
  39. package/src/db/migrate.js +0 -7
  40. package/src/db/migrate.js.map +1 -1
  41. package/src/db/schema.d.ts +0 -1260
  42. package/src/db/schema.d.ts.map +1 -1
  43. package/src/db/schema.js +2 -179
  44. package/src/db/schema.js.map +1 -1
  45. package/src/index.d.ts +3 -42
  46. package/src/index.d.ts.map +1 -1
  47. package/src/index.js +32 -123
  48. package/src/index.js.map +1 -1
  49. package/src/logger.d.ts +0 -8
  50. package/src/logger.d.ts.map +1 -1
  51. package/src/logger.js +1 -12
  52. package/src/logger.js.map +1 -1
  53. package/src/scripts/agent-mcp-tail.d.ts +3 -0
  54. package/src/scripts/agent-mcp-tail.d.ts.map +1 -0
  55. package/src/scripts/agent-mcp-tail.js +227 -0
  56. package/src/scripts/agent-mcp-tail.js.map +1 -0
  57. package/src/server.d.ts +13 -34
  58. package/src/server.d.ts.map +1 -1
  59. package/src/server.js +234 -326
  60. package/src/server.js.map +1 -1
  61. package/src/store/agent-store.d.ts +3 -16
  62. package/src/store/agent-store.d.ts.map +1 -1
  63. package/src/store/agent-store.js +38 -41
  64. package/src/store/agent-store.js.map +1 -1
  65. package/src/streaming/chat-gateway.d.ts +17 -0
  66. package/src/streaming/chat-gateway.d.ts.map +1 -0
  67. package/src/streaming/chat-gateway.js +336 -0
  68. package/src/streaming/chat-gateway.js.map +1 -0
  69. package/src/streaming/event-bus.d.ts +4 -0
  70. package/src/streaming/event-bus.d.ts.map +1 -1
  71. package/src/streaming/event-bus.js +14 -1
  72. package/src/streaming/event-bus.js.map +1 -1
  73. package/src/streaming/sse-server.d.ts +3 -14
  74. package/src/streaming/sse-server.d.ts.map +1 -1
  75. package/src/streaming/sse-server.js +37 -37
  76. package/src/streaming/sse-server.js.map +1 -1
  77. package/src/utils/load-env.d.ts +0 -14
  78. package/src/utils/load-env.d.ts.map +1 -1
  79. package/src/utils/load-env.js +0 -18
  80. package/src/utils/load-env.js.map +1 -1
  81. package/drizzle/0000_nifty_sasquatch.sql +0 -55
  82. package/drizzle/0001_task_usage.sql +0 -16
  83. package/drizzle/0002_lumpy_silver_centurion.sql +0 -2
  84. package/drizzle/0003_nifty_shriek.sql +0 -2
  85. package/drizzle/0004_brief_shocker.sql +0 -4
  86. package/drizzle/0005_clear_lenny_balinger.sql +0 -25
  87. package/drizzle/0006_composed_prompts_cache.sql +0 -24
  88. package/drizzle/meta/0000_snapshot.json +0 -387
  89. package/drizzle/meta/0001_snapshot.json +0 -495
  90. package/drizzle/meta/0002_snapshot.json +0 -509
  91. package/drizzle/meta/0003_snapshot.json +0 -523
  92. package/drizzle/meta/0004_snapshot.json +0 -551
  93. package/drizzle/meta/0005_snapshot.json +0 -545
  94. package/drizzle/meta/0006_snapshot.json +0 -651
  95. package/drizzle/meta/_journal.json +0 -55
  96. package/src/clients/http-client.d.ts +0 -24
  97. package/src/clients/http-client.d.ts.map +0 -1
  98. package/src/clients/http-client.js +0 -98
  99. package/src/clients/http-client.js.map +0 -1
  100. package/src/clients/in-process.d.ts +0 -27
  101. package/src/clients/in-process.d.ts.map +0 -1
  102. package/src/clients/in-process.js +0 -37
  103. package/src/clients/in-process.js.map +0 -1
  104. package/src/clients/index.d.ts +0 -7
  105. package/src/clients/index.d.ts.map +0 -1
  106. package/src/clients/index.js +0 -5
  107. package/src/clients/index.js.map +0 -1
  108. package/src/clients/registry.d.ts +0 -54
  109. package/src/clients/registry.d.ts.map +0 -1
  110. package/src/clients/registry.js +0 -164
  111. package/src/clients/registry.js.map +0 -1
  112. package/src/clients/stdio-client.d.ts +0 -16
  113. package/src/clients/stdio-client.d.ts.map +0 -1
  114. package/src/clients/stdio-client.js +0 -97
  115. package/src/clients/stdio-client.js.map +0 -1
  116. package/src/clients/tool-naming.d.ts +0 -44
  117. package/src/clients/tool-naming.d.ts.map +0 -1
  118. package/src/clients/tool-naming.js +0 -65
  119. package/src/clients/tool-naming.js.map +0 -1
  120. package/src/clients/types.d.ts +0 -18
  121. package/src/clients/types.d.ts.map +0 -1
  122. package/src/clients/types.js +0 -2
  123. package/src/clients/types.js.map +0 -1
  124. package/src/engine/dag-engine.d.ts +0 -62
  125. package/src/engine/dag-engine.d.ts.map +0 -1
  126. package/src/engine/dag-engine.js +0 -158
  127. package/src/engine/dag-engine.js.map +0 -1
  128. package/src/engine/hooks.d.ts +0 -24
  129. package/src/engine/hooks.d.ts.map +0 -1
  130. package/src/engine/hooks.js +0 -50
  131. package/src/engine/hooks.js.map +0 -1
  132. package/src/engine/orchestrator.d.ts +0 -40
  133. package/src/engine/orchestrator.d.ts.map +0 -1
  134. package/src/engine/orchestrator.js +0 -507
  135. package/src/engine/orchestrator.js.map +0 -1
  136. package/src/engine/policy.d.ts +0 -66
  137. package/src/engine/policy.d.ts.map +0 -1
  138. package/src/engine/policy.js +0 -112
  139. package/src/engine/policy.js.map +0 -1
  140. package/src/engine/prompt-resolver.d.ts +0 -89
  141. package/src/engine/prompt-resolver.d.ts.map +0 -1
  142. package/src/engine/prompt-resolver.js +0 -96
  143. package/src/engine/prompt-resolver.js.map +0 -1
  144. package/src/engine/queue.d.ts +0 -29
  145. package/src/engine/queue.d.ts.map +0 -1
  146. package/src/engine/queue.js +0 -56
  147. package/src/engine/queue.js.map +0 -1
  148. package/src/plugins/index.d.ts +0 -2
  149. package/src/plugins/index.d.ts.map +0 -1
  150. package/src/plugins/index.js +0 -2
  151. package/src/plugins/index.js.map +0 -1
  152. package/src/plugins/loader.d.ts +0 -65
  153. package/src/plugins/loader.d.ts.map +0 -1
  154. package/src/plugins/loader.js +0 -222
  155. package/src/plugins/loader.js.map +0 -1
  156. package/src/plugins/usage-plugin.d.ts +0 -27
  157. package/src/plugins/usage-plugin.d.ts.map +0 -1
  158. package/src/plugins/usage-plugin.js +0 -148
  159. package/src/plugins/usage-plugin.js.map +0 -1
  160. package/src/providers/anthropic.d.ts +0 -13
  161. package/src/providers/anthropic.d.ts.map +0 -1
  162. package/src/providers/anthropic.js +0 -260
  163. package/src/providers/anthropic.js.map +0 -1
  164. package/src/providers/claudecli.d.ts +0 -153
  165. package/src/providers/claudecli.d.ts.map +0 -1
  166. package/src/providers/claudecli.js +0 -510
  167. package/src/providers/claudecli.js.map +0 -1
  168. package/src/providers/factory.d.ts +0 -10
  169. package/src/providers/factory.d.ts.map +0 -1
  170. package/src/providers/factory.js +0 -24
  171. package/src/providers/factory.js.map +0 -1
  172. package/src/providers/index.d.ts +0 -6
  173. package/src/providers/index.d.ts.map +0 -1
  174. package/src/providers/index.js +0 -5
  175. package/src/providers/index.js.map +0 -1
  176. package/src/providers/openai.d.ts +0 -14
  177. package/src/providers/openai.d.ts.map +0 -1
  178. package/src/providers/openai.js +0 -162
  179. package/src/providers/openai.js.map +0 -1
  180. package/src/providers/types.d.ts +0 -36
  181. package/src/providers/types.d.ts.map +0 -1
  182. package/src/providers/types.js +0 -2
  183. package/src/providers/types.js.map +0 -1
  184. package/src/store/composed-prompt-store.d.ts +0 -24
  185. package/src/store/composed-prompt-store.d.ts.map +0 -1
  186. package/src/store/composed-prompt-store.js +0 -75
  187. package/src/store/composed-prompt-store.js.map +0 -1
  188. package/src/store/index.d.ts +0 -5
  189. package/src/store/index.d.ts.map +0 -1
  190. package/src/store/index.js +0 -5
  191. package/src/store/index.js.map +0 -1
  192. package/src/store/session-store.d.ts +0 -45
  193. package/src/store/session-store.d.ts.map +0 -1
  194. package/src/store/session-store.js +0 -197
  195. package/src/store/session-store.js.map +0 -1
  196. package/src/store/task-store.d.ts +0 -55
  197. package/src/store/task-store.d.ts.map +0 -1
  198. package/src/store/task-store.js +0 -186
  199. package/src/store/task-store.js.map +0 -1
  200. package/src/tools/agent-crud.d.ts +0 -15
  201. package/src/tools/agent-crud.d.ts.map +0 -1
  202. package/src/tools/agent-crud.js +0 -32
  203. package/src/tools/agent-crud.js.map +0 -1
  204. package/src/tools/session.d.ts +0 -33
  205. package/src/tools/session.d.ts.map +0 -1
  206. package/src/tools/session.js +0 -73
  207. package/src/tools/session.js.map +0 -1
  208. package/src/tools/task.d.ts +0 -86
  209. package/src/tools/task.d.ts.map +0 -1
  210. package/src/tools/task.js +0 -406
  211. package/src/tools/task.js.map +0 -1
  212. package/src/tools/usage.d.ts +0 -60
  213. package/src/tools/usage.d.ts.map +0 -1
  214. package/src/tools/usage.js +0 -174
  215. package/src/tools/usage.js.map +0 -1
  216. package/src/types/agent.d.ts +0 -2
  217. package/src/types/agent.d.ts.map +0 -1
  218. package/src/types/agent.js +0 -3
  219. package/src/types/agent.js.map +0 -1
  220. package/src/types/execution.d.ts +0 -2
  221. package/src/types/execution.d.ts.map +0 -1
  222. package/src/types/execution.js +0 -3
  223. package/src/types/execution.js.map +0 -1
  224. package/src/types/index.d.ts +0 -2
  225. package/src/types/index.d.ts.map +0 -1
  226. package/src/types/index.js +0 -2
  227. package/src/types/index.js.map +0 -1
  228. package/src/types/mcp.d.ts +0 -2
  229. package/src/types/mcp.d.ts.map +0 -1
  230. package/src/types/mcp.js +0 -3
  231. package/src/types/mcp.js.map +0 -1
  232. package/src/types/message.d.ts +0 -2
  233. package/src/types/message.d.ts.map +0 -1
  234. package/src/types/message.js +0 -3
  235. package/src/types/message.js.map +0 -1
  236. package/src/types/session.d.ts +0 -2
  237. package/src/types/session.d.ts.map +0 -1
  238. package/src/types/session.js +0 -3
  239. package/src/types/session.js.map +0 -1
  240. package/src/types/task.d.ts +0 -2
  241. package/src/types/task.d.ts.map +0 -1
  242. package/src/types/task.js +0 -3
  243. package/src/types/task.js.map +0 -1
  244. package/src/utils/ids.d.ts +0 -2
  245. package/src/utils/ids.d.ts.map +0 -1
  246. package/src/utils/ids.js +0 -5
  247. package/src/utils/ids.js.map +0 -1
  248. package/src/utils/logger.d.ts +0 -2
  249. package/src/utils/logger.d.ts.map +0 -1
  250. package/src/utils/logger.js +0 -5
  251. package/src/utils/logger.js.map +0 -1
  252. package/src/utils/timestamps.d.ts +0 -2
  253. package/src/utils/timestamps.d.ts.map +0 -1
  254. package/src/utils/timestamps.js +0 -4
  255. package/src/utils/timestamps.js.map +0 -1
  256. package/src/validation/agent.d.ts +0 -400
  257. package/src/validation/agent.d.ts.map +0 -1
  258. package/src/validation/agent.js +0 -251
  259. package/src/validation/agent.js.map +0 -1
  260. package/src/validation/agents.d.ts +0 -2
  261. package/src/validation/agents.d.ts.map +0 -1
  262. package/src/validation/agents.js +0 -3
  263. package/src/validation/agents.js.map +0 -1
  264. package/src/validation/errors.d.ts +0 -32
  265. package/src/validation/errors.d.ts.map +0 -1
  266. package/src/validation/errors.js +0 -42
  267. package/src/validation/errors.js.map +0 -1
  268. package/src/validation/execution.d.ts +0 -86
  269. package/src/validation/execution.d.ts.map +0 -1
  270. package/src/validation/execution.js +0 -28
  271. package/src/validation/execution.js.map +0 -1
  272. package/src/validation/index.d.ts +0 -9
  273. package/src/validation/index.d.ts.map +0 -1
  274. package/src/validation/index.js +0 -9
  275. package/src/validation/index.js.map +0 -1
  276. package/src/validation/mcp.d.ts +0 -42
  277. package/src/validation/mcp.d.ts.map +0 -1
  278. package/src/validation/mcp.js +0 -28
  279. package/src/validation/mcp.js.map +0 -1
  280. package/src/validation/message.d.ts +0 -43
  281. package/src/validation/message.d.ts.map +0 -1
  282. package/src/validation/message.js +0 -23
  283. package/src/validation/message.js.map +0 -1
  284. package/src/validation/session.d.ts +0 -49
  285. package/src/validation/session.d.ts.map +0 -1
  286. package/src/validation/session.js +0 -34
  287. package/src/validation/session.js.map +0 -1
  288. package/src/validation/task.d.ts +0 -146
  289. package/src/validation/task.d.ts.map +0 -1
  290. package/src/validation/task.js +0 -95
  291. package/src/validation/task.js.map +0 -1
  292. package/src/validation/tasks.d.ts +0 -2
  293. package/src/validation/tasks.d.ts.map +0 -1
  294. package/src/validation/tasks.js +0 -3
  295. package/src/validation/tasks.js.map +0 -1
  296. package/src/validation/usage.d.ts +0 -89
  297. package/src/validation/usage.d.ts.map +0 -1
  298. package/src/validation/usage.js +0 -98
  299. package/src/validation/usage.js.map +0 -1
@@ -13,20 +13,858 @@
13
13
  import http from "node:http";
14
14
  import Database from "better-sqlite3";
15
15
  import { drizzle } from "drizzle-orm/better-sqlite3";
16
- import * as schema from "../../db/schema.js";
16
+ import { SessionStore, TaskStore } from "@adhd/agent-store-runtime";
17
+ import { BackgroundQueue, DagEngine, Orchestrator, HookRegistry, PolicyEngine, taskTool, taskCancel, taskResume, type TaskDeps, type LLMProvider } from "@adhd/agent-engine-orchestrator";
17
18
  import { AgentStore } from "../../store/agent-store.js";
18
- import { SessionStore } from "../../store/session-store.js";
19
- import { TaskStore } from "../../store/task-store.js";
20
- import { BackgroundQueue } from "../../engine/queue.js";
21
- import { DagEngine } from "../../engine/dag-engine.js";
22
- import { Orchestrator } from "../../engine/orchestrator.js";
23
- import { HookRegistry } from "../../engine/hooks.js";
24
- import { PolicyEngine } from "../../engine/policy.js";
25
- import { taskTool, taskCancel, taskResume } from "../../tools/task.js";
26
- import type { TaskDeps } from "../../tools/task.js";
27
- import type { AgentCreateInput } from "../../validation/index.js";
28
- import type { LLMProvider } from "../../providers/types.js";
29
- export type TestDb = ReturnType<typeof drizzle<typeof schema>>;
19
+ import type { AgentCreateInput } from "@adhd/agent-engine-orchestrator";
20
+ /** Combined drizzle schema for harness-level direct table access */
21
+ declare const combinedSchema: {
22
+ sessionsTable: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
23
+ name: "sessions";
24
+ schema: undefined;
25
+ columns: {
26
+ id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
27
+ name: "id";
28
+ tableName: "sessions";
29
+ dataType: "string";
30
+ columnType: "SQLiteText";
31
+ data: string;
32
+ driverParam: string;
33
+ notNull: true;
34
+ hasDefault: false;
35
+ isPrimaryKey: true;
36
+ isAutoincrement: false;
37
+ hasRuntimeDefault: false;
38
+ enumValues: [string, ...string[]];
39
+ baseColumn: never;
40
+ identity: undefined;
41
+ generated: undefined;
42
+ }, {}, {
43
+ length: number | undefined;
44
+ }>;
45
+ agentName: import("drizzle-orm/sqlite-core").SQLiteColumn<{
46
+ name: "agent_name";
47
+ tableName: "sessions";
48
+ dataType: "string";
49
+ columnType: "SQLiteText";
50
+ data: string;
51
+ driverParam: string;
52
+ notNull: true;
53
+ hasDefault: false;
54
+ isPrimaryKey: false;
55
+ isAutoincrement: false;
56
+ hasRuntimeDefault: false;
57
+ enumValues: [string, ...string[]];
58
+ baseColumn: never;
59
+ identity: undefined;
60
+ generated: undefined;
61
+ }, {}, {
62
+ length: number | undefined;
63
+ }>;
64
+ agentVersion: import("drizzle-orm/sqlite-core").SQLiteColumn<{
65
+ name: "agent_version";
66
+ tableName: "sessions";
67
+ dataType: "number";
68
+ columnType: "SQLiteInteger";
69
+ data: number;
70
+ driverParam: number;
71
+ notNull: true;
72
+ hasDefault: false;
73
+ isPrimaryKey: false;
74
+ isAutoincrement: false;
75
+ hasRuntimeDefault: false;
76
+ enumValues: undefined;
77
+ baseColumn: never;
78
+ identity: undefined;
79
+ generated: undefined;
80
+ }, {}, {}>;
81
+ agentData: import("drizzle-orm/sqlite-core").SQLiteColumn<{
82
+ name: "agent_data";
83
+ tableName: "sessions";
84
+ dataType: "string";
85
+ columnType: "SQLiteText";
86
+ data: string;
87
+ driverParam: string;
88
+ notNull: true;
89
+ hasDefault: false;
90
+ isPrimaryKey: false;
91
+ isAutoincrement: false;
92
+ hasRuntimeDefault: false;
93
+ enumValues: [string, ...string[]];
94
+ baseColumn: never;
95
+ identity: undefined;
96
+ generated: undefined;
97
+ }, {}, {
98
+ length: number | undefined;
99
+ }>;
100
+ status: import("drizzle-orm/sqlite-core").SQLiteColumn<{
101
+ name: "status";
102
+ tableName: "sessions";
103
+ dataType: "string";
104
+ columnType: "SQLiteText";
105
+ data: "active" | "closed";
106
+ driverParam: string;
107
+ notNull: true;
108
+ hasDefault: true;
109
+ isPrimaryKey: false;
110
+ isAutoincrement: false;
111
+ hasRuntimeDefault: false;
112
+ enumValues: ["active", "closed"];
113
+ baseColumn: never;
114
+ identity: undefined;
115
+ generated: undefined;
116
+ }, {}, {
117
+ length: number | undefined;
118
+ }>;
119
+ createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
120
+ name: "created_at";
121
+ tableName: "sessions";
122
+ dataType: "string";
123
+ columnType: "SQLiteText";
124
+ data: string;
125
+ driverParam: string;
126
+ notNull: true;
127
+ hasDefault: false;
128
+ isPrimaryKey: false;
129
+ isAutoincrement: false;
130
+ hasRuntimeDefault: false;
131
+ enumValues: [string, ...string[]];
132
+ baseColumn: never;
133
+ identity: undefined;
134
+ generated: undefined;
135
+ }, {}, {
136
+ length: number | undefined;
137
+ }>;
138
+ updatedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
139
+ name: "updated_at";
140
+ tableName: "sessions";
141
+ dataType: "string";
142
+ columnType: "SQLiteText";
143
+ data: string;
144
+ driverParam: string;
145
+ notNull: true;
146
+ hasDefault: false;
147
+ isPrimaryKey: false;
148
+ isAutoincrement: false;
149
+ hasRuntimeDefault: false;
150
+ enumValues: [string, ...string[]];
151
+ baseColumn: never;
152
+ identity: undefined;
153
+ generated: undefined;
154
+ }, {}, {
155
+ length: number | undefined;
156
+ }>;
157
+ closedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
158
+ name: "closed_at";
159
+ tableName: "sessions";
160
+ dataType: "string";
161
+ columnType: "SQLiteText";
162
+ data: string;
163
+ driverParam: string;
164
+ notNull: false;
165
+ hasDefault: false;
166
+ isPrimaryKey: false;
167
+ isAutoincrement: false;
168
+ hasRuntimeDefault: false;
169
+ enumValues: [string, ...string[]];
170
+ baseColumn: never;
171
+ identity: undefined;
172
+ generated: undefined;
173
+ }, {}, {
174
+ length: number | undefined;
175
+ }>;
176
+ composedPromptId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
177
+ name: "composed_prompt_id";
178
+ tableName: "sessions";
179
+ dataType: "string";
180
+ columnType: "SQLiteText";
181
+ data: string;
182
+ driverParam: string;
183
+ notNull: false;
184
+ hasDefault: false;
185
+ isPrimaryKey: false;
186
+ isAutoincrement: false;
187
+ hasRuntimeDefault: false;
188
+ enumValues: [string, ...string[]];
189
+ baseColumn: never;
190
+ identity: undefined;
191
+ generated: undefined;
192
+ }, {}, {
193
+ length: number | undefined;
194
+ }>;
195
+ };
196
+ dialect: "sqlite";
197
+ }>;
198
+ messagesTable: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
199
+ name: "messages";
200
+ schema: undefined;
201
+ columns: {
202
+ id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
203
+ name: "id";
204
+ tableName: "messages";
205
+ dataType: "string";
206
+ columnType: "SQLiteText";
207
+ data: string;
208
+ driverParam: string;
209
+ notNull: true;
210
+ hasDefault: false;
211
+ isPrimaryKey: true;
212
+ isAutoincrement: false;
213
+ hasRuntimeDefault: false;
214
+ enumValues: [string, ...string[]];
215
+ baseColumn: never;
216
+ identity: undefined;
217
+ generated: undefined;
218
+ }, {}, {
219
+ length: number | undefined;
220
+ }>;
221
+ sessionId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
222
+ name: "session_id";
223
+ tableName: "messages";
224
+ dataType: "string";
225
+ columnType: "SQLiteText";
226
+ data: string;
227
+ driverParam: string;
228
+ notNull: true;
229
+ hasDefault: false;
230
+ isPrimaryKey: false;
231
+ isAutoincrement: false;
232
+ hasRuntimeDefault: false;
233
+ enumValues: [string, ...string[]];
234
+ baseColumn: never;
235
+ identity: undefined;
236
+ generated: undefined;
237
+ }, {}, {
238
+ length: number | undefined;
239
+ }>;
240
+ role: import("drizzle-orm/sqlite-core").SQLiteColumn<{
241
+ name: "role";
242
+ tableName: "messages";
243
+ dataType: "string";
244
+ columnType: "SQLiteText";
245
+ data: "system" | "user" | "assistant" | "tool";
246
+ driverParam: string;
247
+ notNull: true;
248
+ hasDefault: false;
249
+ isPrimaryKey: false;
250
+ isAutoincrement: false;
251
+ hasRuntimeDefault: false;
252
+ enumValues: ["system", "user", "assistant", "tool"];
253
+ baseColumn: never;
254
+ identity: undefined;
255
+ generated: undefined;
256
+ }, {}, {
257
+ length: number | undefined;
258
+ }>;
259
+ content: import("drizzle-orm/sqlite-core").SQLiteColumn<{
260
+ name: "content";
261
+ tableName: "messages";
262
+ dataType: "string";
263
+ columnType: "SQLiteText";
264
+ data: string;
265
+ driverParam: string;
266
+ notNull: false;
267
+ hasDefault: false;
268
+ isPrimaryKey: false;
269
+ isAutoincrement: false;
270
+ hasRuntimeDefault: false;
271
+ enumValues: [string, ...string[]];
272
+ baseColumn: never;
273
+ identity: undefined;
274
+ generated: undefined;
275
+ }, {}, {
276
+ length: number | undefined;
277
+ }>;
278
+ toolCalls: import("drizzle-orm/sqlite-core").SQLiteColumn<{
279
+ name: "tool_calls";
280
+ tableName: "messages";
281
+ dataType: "string";
282
+ columnType: "SQLiteText";
283
+ data: string;
284
+ driverParam: string;
285
+ notNull: false;
286
+ hasDefault: false;
287
+ isPrimaryKey: false;
288
+ isAutoincrement: false;
289
+ hasRuntimeDefault: false;
290
+ enumValues: [string, ...string[]];
291
+ baseColumn: never;
292
+ identity: undefined;
293
+ generated: undefined;
294
+ }, {}, {
295
+ length: number | undefined;
296
+ }>;
297
+ toolResults: import("drizzle-orm/sqlite-core").SQLiteColumn<{
298
+ name: "tool_results";
299
+ tableName: "messages";
300
+ dataType: "string";
301
+ columnType: "SQLiteText";
302
+ data: string;
303
+ driverParam: string;
304
+ notNull: false;
305
+ hasDefault: false;
306
+ isPrimaryKey: false;
307
+ isAutoincrement: false;
308
+ hasRuntimeDefault: false;
309
+ enumValues: [string, ...string[]];
310
+ baseColumn: never;
311
+ identity: undefined;
312
+ generated: undefined;
313
+ }, {}, {
314
+ length: number | undefined;
315
+ }>;
316
+ createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
317
+ name: "created_at";
318
+ tableName: "messages";
319
+ dataType: "string";
320
+ columnType: "SQLiteText";
321
+ data: string;
322
+ driverParam: string;
323
+ notNull: true;
324
+ hasDefault: false;
325
+ isPrimaryKey: false;
326
+ isAutoincrement: false;
327
+ hasRuntimeDefault: false;
328
+ enumValues: [string, ...string[]];
329
+ baseColumn: never;
330
+ identity: undefined;
331
+ generated: undefined;
332
+ }, {}, {
333
+ length: number | undefined;
334
+ }>;
335
+ };
336
+ dialect: "sqlite";
337
+ }>;
338
+ tasksTable: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
339
+ name: "tasks";
340
+ schema: undefined;
341
+ columns: {
342
+ id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
343
+ name: "id";
344
+ tableName: "tasks";
345
+ dataType: "string";
346
+ columnType: "SQLiteText";
347
+ data: string;
348
+ driverParam: string;
349
+ notNull: true;
350
+ hasDefault: false;
351
+ isPrimaryKey: true;
352
+ isAutoincrement: false;
353
+ hasRuntimeDefault: false;
354
+ enumValues: [string, ...string[]];
355
+ baseColumn: never;
356
+ identity: undefined;
357
+ generated: undefined;
358
+ }, {}, {
359
+ length: number | undefined;
360
+ }>;
361
+ sessionId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
362
+ name: "session_id";
363
+ tableName: "tasks";
364
+ dataType: "string";
365
+ columnType: "SQLiteText";
366
+ data: string;
367
+ driverParam: string;
368
+ notNull: false;
369
+ hasDefault: false;
370
+ isPrimaryKey: false;
371
+ isAutoincrement: false;
372
+ hasRuntimeDefault: false;
373
+ enumValues: [string, ...string[]];
374
+ baseColumn: never;
375
+ identity: undefined;
376
+ generated: undefined;
377
+ }, {}, {
378
+ length: number | undefined;
379
+ }>;
380
+ parentTaskId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
381
+ name: "parent_task_id";
382
+ tableName: "tasks";
383
+ dataType: "string";
384
+ columnType: "SQLiteText";
385
+ data: string;
386
+ driverParam: string;
387
+ notNull: false;
388
+ hasDefault: false;
389
+ isPrimaryKey: false;
390
+ isAutoincrement: false;
391
+ hasRuntimeDefault: false;
392
+ enumValues: [string, ...string[]];
393
+ baseColumn: never;
394
+ identity: undefined;
395
+ generated: undefined;
396
+ }, {}, {
397
+ length: number | undefined;
398
+ }>;
399
+ isEphemeral: import("drizzle-orm/sqlite-core").SQLiteColumn<{
400
+ name: "is_ephemeral";
401
+ tableName: "tasks";
402
+ dataType: "number";
403
+ columnType: "SQLiteInteger";
404
+ data: number;
405
+ driverParam: number;
406
+ notNull: true;
407
+ hasDefault: true;
408
+ isPrimaryKey: false;
409
+ isAutoincrement: false;
410
+ hasRuntimeDefault: false;
411
+ enumValues: undefined;
412
+ baseColumn: never;
413
+ identity: undefined;
414
+ generated: undefined;
415
+ }, {}, {}>;
416
+ recursionDepth: import("drizzle-orm/sqlite-core").SQLiteColumn<{
417
+ name: "recursion_depth";
418
+ tableName: "tasks";
419
+ dataType: "number";
420
+ columnType: "SQLiteInteger";
421
+ data: number;
422
+ driverParam: number;
423
+ notNull: true;
424
+ hasDefault: true;
425
+ isPrimaryKey: false;
426
+ isAutoincrement: false;
427
+ hasRuntimeDefault: false;
428
+ enumValues: undefined;
429
+ baseColumn: never;
430
+ identity: undefined;
431
+ generated: undefined;
432
+ }, {}, {}>;
433
+ status: import("drizzle-orm/sqlite-core").SQLiteColumn<{
434
+ name: "status";
435
+ tableName: "tasks";
436
+ dataType: "string";
437
+ columnType: "SQLiteText";
438
+ data: "pending" | "running" | "completed" | "failed" | "cancelled" | "waiting" | "awaiting_input";
439
+ driverParam: string;
440
+ notNull: true;
441
+ hasDefault: true;
442
+ isPrimaryKey: false;
443
+ isAutoincrement: false;
444
+ hasRuntimeDefault: false;
445
+ enumValues: ["pending", "running", "completed", "failed", "cancelled", "waiting", "awaiting_input"];
446
+ baseColumn: never;
447
+ identity: undefined;
448
+ generated: undefined;
449
+ }, {}, {
450
+ length: number | undefined;
451
+ }>;
452
+ prompt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
453
+ name: "prompt";
454
+ tableName: "tasks";
455
+ dataType: "string";
456
+ columnType: "SQLiteText";
457
+ data: string;
458
+ driverParam: string;
459
+ notNull: true;
460
+ hasDefault: false;
461
+ isPrimaryKey: false;
462
+ isAutoincrement: false;
463
+ hasRuntimeDefault: false;
464
+ enumValues: [string, ...string[]];
465
+ baseColumn: never;
466
+ identity: undefined;
467
+ generated: undefined;
468
+ }, {}, {
469
+ length: number | undefined;
470
+ }>;
471
+ result: import("drizzle-orm/sqlite-core").SQLiteColumn<{
472
+ name: "result";
473
+ tableName: "tasks";
474
+ dataType: "string";
475
+ columnType: "SQLiteText";
476
+ data: string;
477
+ driverParam: string;
478
+ notNull: false;
479
+ hasDefault: false;
480
+ isPrimaryKey: false;
481
+ isAutoincrement: false;
482
+ hasRuntimeDefault: false;
483
+ enumValues: [string, ...string[]];
484
+ baseColumn: never;
485
+ identity: undefined;
486
+ generated: undefined;
487
+ }, {}, {
488
+ length: number | undefined;
489
+ }>;
490
+ error: import("drizzle-orm/sqlite-core").SQLiteColumn<{
491
+ name: "error";
492
+ tableName: "tasks";
493
+ dataType: "string";
494
+ columnType: "SQLiteText";
495
+ data: string;
496
+ driverParam: string;
497
+ notNull: false;
498
+ hasDefault: false;
499
+ isPrimaryKey: false;
500
+ isAutoincrement: false;
501
+ hasRuntimeDefault: false;
502
+ enumValues: [string, ...string[]];
503
+ baseColumn: never;
504
+ identity: undefined;
505
+ generated: undefined;
506
+ }, {}, {
507
+ length: number | undefined;
508
+ }>;
509
+ createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
510
+ name: "created_at";
511
+ tableName: "tasks";
512
+ dataType: "string";
513
+ columnType: "SQLiteText";
514
+ data: string;
515
+ driverParam: string;
516
+ notNull: true;
517
+ hasDefault: false;
518
+ isPrimaryKey: false;
519
+ isAutoincrement: false;
520
+ hasRuntimeDefault: false;
521
+ enumValues: [string, ...string[]];
522
+ baseColumn: never;
523
+ identity: undefined;
524
+ generated: undefined;
525
+ }, {}, {
526
+ length: number | undefined;
527
+ }>;
528
+ updatedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
529
+ name: "updated_at";
530
+ tableName: "tasks";
531
+ dataType: "string";
532
+ columnType: "SQLiteText";
533
+ data: string;
534
+ driverParam: string;
535
+ notNull: true;
536
+ hasDefault: false;
537
+ isPrimaryKey: false;
538
+ isAutoincrement: false;
539
+ hasRuntimeDefault: false;
540
+ enumValues: [string, ...string[]];
541
+ baseColumn: never;
542
+ identity: undefined;
543
+ generated: undefined;
544
+ }, {}, {
545
+ length: number | undefined;
546
+ }>;
547
+ completedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
548
+ name: "completed_at";
549
+ tableName: "tasks";
550
+ dataType: "string";
551
+ columnType: "SQLiteText";
552
+ data: string;
553
+ driverParam: string;
554
+ notNull: false;
555
+ hasDefault: false;
556
+ isPrimaryKey: false;
557
+ isAutoincrement: false;
558
+ hasRuntimeDefault: false;
559
+ enumValues: [string, ...string[]];
560
+ baseColumn: never;
561
+ identity: undefined;
562
+ generated: undefined;
563
+ }, {}, {
564
+ length: number | undefined;
565
+ }>;
566
+ cancelledAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
567
+ name: "cancelled_at";
568
+ tableName: "tasks";
569
+ dataType: "string";
570
+ columnType: "SQLiteText";
571
+ data: string;
572
+ driverParam: string;
573
+ notNull: false;
574
+ hasDefault: false;
575
+ isPrimaryKey: false;
576
+ isAutoincrement: false;
577
+ hasRuntimeDefault: false;
578
+ enumValues: [string, ...string[]];
579
+ baseColumn: never;
580
+ identity: undefined;
581
+ generated: undefined;
582
+ }, {}, {
583
+ length: number | undefined;
584
+ }>;
585
+ depends_on: import("drizzle-orm/sqlite-core").SQLiteColumn<{
586
+ name: "depends_on";
587
+ tableName: "tasks";
588
+ dataType: "string";
589
+ columnType: "SQLiteText";
590
+ data: string;
591
+ driverParam: string;
592
+ notNull: false;
593
+ hasDefault: false;
594
+ isPrimaryKey: false;
595
+ isAutoincrement: false;
596
+ hasRuntimeDefault: false;
597
+ enumValues: [string, ...string[]];
598
+ baseColumn: never;
599
+ identity: undefined;
600
+ generated: undefined;
601
+ }, {}, {
602
+ length: number | undefined;
603
+ }>;
604
+ on_upstream_failure: import("drizzle-orm/sqlite-core").SQLiteColumn<{
605
+ name: "on_upstream_failure";
606
+ tableName: "tasks";
607
+ dataType: "string";
608
+ columnType: "SQLiteText";
609
+ data: string;
610
+ driverParam: string;
611
+ notNull: false;
612
+ hasDefault: false;
613
+ isPrimaryKey: false;
614
+ isAutoincrement: false;
615
+ hasRuntimeDefault: false;
616
+ enumValues: [string, ...string[]];
617
+ baseColumn: never;
618
+ identity: undefined;
619
+ generated: undefined;
620
+ }, {}, {
621
+ length: number | undefined;
622
+ }>;
623
+ inputs: import("drizzle-orm/sqlite-core").SQLiteColumn<{
624
+ name: "inputs";
625
+ tableName: "tasks";
626
+ dataType: "string";
627
+ columnType: "SQLiteText";
628
+ data: string;
629
+ driverParam: string;
630
+ notNull: false;
631
+ hasDefault: false;
632
+ isPrimaryKey: false;
633
+ isAutoincrement: false;
634
+ hasRuntimeDefault: false;
635
+ enumValues: [string, ...string[]];
636
+ baseColumn: never;
637
+ identity: undefined;
638
+ generated: undefined;
639
+ }, {}, {
640
+ length: number | undefined;
641
+ }>;
642
+ resume_token: import("drizzle-orm/sqlite-core").SQLiteColumn<{
643
+ name: "resume_token";
644
+ tableName: "tasks";
645
+ dataType: "string";
646
+ columnType: "SQLiteText";
647
+ data: string;
648
+ driverParam: string;
649
+ notNull: false;
650
+ hasDefault: false;
651
+ isPrimaryKey: false;
652
+ isAutoincrement: false;
653
+ hasRuntimeDefault: false;
654
+ enumValues: [string, ...string[]];
655
+ baseColumn: never;
656
+ identity: undefined;
657
+ generated: undefined;
658
+ }, {}, {
659
+ length: number | undefined;
660
+ }>;
661
+ };
662
+ dialect: "sqlite";
663
+ }>;
664
+ taskEventsTable: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
665
+ name: "task_events";
666
+ schema: undefined;
667
+ columns: {
668
+ id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
669
+ name: "id";
670
+ tableName: "task_events";
671
+ dataType: "string";
672
+ columnType: "SQLiteText";
673
+ data: string;
674
+ driverParam: string;
675
+ notNull: true;
676
+ hasDefault: false;
677
+ isPrimaryKey: true;
678
+ isAutoincrement: false;
679
+ hasRuntimeDefault: false;
680
+ enumValues: [string, ...string[]];
681
+ baseColumn: never;
682
+ identity: undefined;
683
+ generated: undefined;
684
+ }, {}, {
685
+ length: number | undefined;
686
+ }>;
687
+ taskId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
688
+ name: "task_id";
689
+ tableName: "task_events";
690
+ dataType: "string";
691
+ columnType: "SQLiteText";
692
+ data: string;
693
+ driverParam: string;
694
+ notNull: true;
695
+ hasDefault: false;
696
+ isPrimaryKey: false;
697
+ isAutoincrement: false;
698
+ hasRuntimeDefault: false;
699
+ enumValues: [string, ...string[]];
700
+ baseColumn: never;
701
+ identity: undefined;
702
+ generated: undefined;
703
+ }, {}, {
704
+ length: number | undefined;
705
+ }>;
706
+ type: import("drizzle-orm/sqlite-core").SQLiteColumn<{
707
+ name: "type";
708
+ tableName: "task_events";
709
+ dataType: "string";
710
+ columnType: "SQLiteText";
711
+ data: "MODEL_REQUEST" | "MODEL_RESPONSE" | "TOOL_CALL" | "TOOL_RESULT" | "TASK_COMPLETED" | "TASK_FAILED" | "TASK_CANCELLED";
712
+ driverParam: string;
713
+ notNull: true;
714
+ hasDefault: false;
715
+ isPrimaryKey: false;
716
+ isAutoincrement: false;
717
+ hasRuntimeDefault: false;
718
+ enumValues: ["MODEL_REQUEST", "MODEL_RESPONSE", "TOOL_CALL", "TOOL_RESULT", "TASK_COMPLETED", "TASK_FAILED", "TASK_CANCELLED"];
719
+ baseColumn: never;
720
+ identity: undefined;
721
+ generated: undefined;
722
+ }, {}, {
723
+ length: number | undefined;
724
+ }>;
725
+ payload: import("drizzle-orm/sqlite-core").SQLiteColumn<{
726
+ name: "payload";
727
+ tableName: "task_events";
728
+ dataType: "string";
729
+ columnType: "SQLiteText";
730
+ data: string;
731
+ driverParam: string;
732
+ notNull: false;
733
+ hasDefault: false;
734
+ isPrimaryKey: false;
735
+ isAutoincrement: false;
736
+ hasRuntimeDefault: false;
737
+ enumValues: [string, ...string[]];
738
+ baseColumn: never;
739
+ identity: undefined;
740
+ generated: undefined;
741
+ }, {}, {
742
+ length: number | undefined;
743
+ }>;
744
+ createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
745
+ name: "created_at";
746
+ tableName: "task_events";
747
+ dataType: "string";
748
+ columnType: "SQLiteText";
749
+ data: string;
750
+ driverParam: string;
751
+ notNull: true;
752
+ hasDefault: false;
753
+ isPrimaryKey: false;
754
+ isAutoincrement: false;
755
+ hasRuntimeDefault: false;
756
+ enumValues: [string, ...string[]];
757
+ baseColumn: never;
758
+ identity: undefined;
759
+ generated: undefined;
760
+ }, {}, {
761
+ length: number | undefined;
762
+ }>;
763
+ };
764
+ dialect: "sqlite";
765
+ }>;
766
+ agentsTable: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
767
+ name: "agents";
768
+ schema: undefined;
769
+ columns: {
770
+ name: import("drizzle-orm/sqlite-core").SQLiteColumn<{
771
+ name: "name";
772
+ tableName: "agents";
773
+ dataType: "string";
774
+ columnType: "SQLiteText";
775
+ data: string;
776
+ driverParam: string;
777
+ notNull: true;
778
+ hasDefault: false;
779
+ isPrimaryKey: true;
780
+ isAutoincrement: false;
781
+ hasRuntimeDefault: false;
782
+ enumValues: [string, ...string[]];
783
+ baseColumn: never;
784
+ identity: undefined;
785
+ generated: undefined;
786
+ }, {}, {
787
+ length: number | undefined;
788
+ }>;
789
+ version: import("drizzle-orm/sqlite-core").SQLiteColumn<{
790
+ name: "version";
791
+ tableName: "agents";
792
+ dataType: "number";
793
+ columnType: "SQLiteInteger";
794
+ data: number;
795
+ driverParam: number;
796
+ notNull: true;
797
+ hasDefault: true;
798
+ isPrimaryKey: false;
799
+ isAutoincrement: false;
800
+ hasRuntimeDefault: false;
801
+ enumValues: undefined;
802
+ baseColumn: never;
803
+ identity: undefined;
804
+ generated: undefined;
805
+ }, {}, {}>;
806
+ data: import("drizzle-orm/sqlite-core").SQLiteColumn<{
807
+ name: "data";
808
+ tableName: "agents";
809
+ dataType: "string";
810
+ columnType: "SQLiteText";
811
+ data: string;
812
+ driverParam: string;
813
+ notNull: true;
814
+ hasDefault: false;
815
+ isPrimaryKey: false;
816
+ isAutoincrement: false;
817
+ hasRuntimeDefault: false;
818
+ enumValues: [string, ...string[]];
819
+ baseColumn: never;
820
+ identity: undefined;
821
+ generated: undefined;
822
+ }, {}, {
823
+ length: number | undefined;
824
+ }>;
825
+ createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
826
+ name: "created_at";
827
+ tableName: "agents";
828
+ dataType: "string";
829
+ columnType: "SQLiteText";
830
+ data: string;
831
+ driverParam: string;
832
+ notNull: true;
833
+ hasDefault: false;
834
+ isPrimaryKey: false;
835
+ isAutoincrement: false;
836
+ hasRuntimeDefault: false;
837
+ enumValues: [string, ...string[]];
838
+ baseColumn: never;
839
+ identity: undefined;
840
+ generated: undefined;
841
+ }, {}, {
842
+ length: number | undefined;
843
+ }>;
844
+ updatedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
845
+ name: "updated_at";
846
+ tableName: "agents";
847
+ dataType: "string";
848
+ columnType: "SQLiteText";
849
+ data: string;
850
+ driverParam: string;
851
+ notNull: true;
852
+ hasDefault: false;
853
+ isPrimaryKey: false;
854
+ isAutoincrement: false;
855
+ hasRuntimeDefault: false;
856
+ enumValues: [string, ...string[]];
857
+ baseColumn: never;
858
+ identity: undefined;
859
+ generated: undefined;
860
+ }, {}, {
861
+ length: number | undefined;
862
+ }>;
863
+ };
864
+ dialect: "sqlite";
865
+ }>;
866
+ };
867
+ export type TestDb = ReturnType<typeof drizzle<typeof combinedSchema>>;
30
868
  export interface Harness {
31
869
  db: TestDb;
32
870
  rawSqlite: InstanceType<typeof Database>;
@@ -65,11 +903,6 @@ export interface HarnessOptions {
65
903
  * Inject a scripted LLMProvider into the harness orchestrator so every
66
904
  * task dispatched through taskDeps (including the startup orphan scan)
67
905
  * uses it instead of the real provider built from agentDefinition.provider.
68
- *
69
- * This mirrors the pattern used for per-task provider injection but applies
70
- * it at harness construction time — so the orphan scan that fires during
71
- * buildHarness already has the right provider, with no race against a
72
- * parallel bad-provider run.
73
906
  */
74
907
  defaultProvider?: LLMProvider;
75
908
  }
@@ -79,14 +912,10 @@ export interface HarnessOptions {
79
912
  export declare function buildHarness(opts?: HarnessOptions): Promise<Harness>;
80
913
  /**
81
914
  * Rebuild a harness against the SAME DB file (for restart/persistence tests).
82
- * Does NOT re-run migrations (they're already applied).
83
- * DOES run the orphan scan.
84
915
  */
85
916
  export declare function rebuildHarness(dbPath: string, opts?: Omit<HarnessOptions, "dbPath">): Promise<Harness>;
86
917
  /**
87
918
  * Wait for the queue to drain (all enqueued tasks finished).
88
- * Uses p-queue's onIdle() with a bounded deadline, which is more reliable
89
- * than polling pending+size (which can momentarily read zero between batches).
90
919
  */
91
920
  export declare function drainQueue(queue: BackgroundQueue, timeoutMs?: number): Promise<void>;
92
921
  /**
@@ -99,11 +928,6 @@ export declare function createSessionAndAgent(harness: Harness, provider: LLMPro
99
928
  /**
100
929
  * Run a task synchronously via the real taskTool, injecting the given provider
101
930
  * into the orchestrator for this task only.
102
- *
103
- * We achieve provider injection by temporarily monkey-patching the registry
104
- * to use the scripted provider — the cleanest approach without modifying
105
- * production source. The provider is captured in a closure inside the harness
106
- * task runner below.
107
931
  */
108
932
  export declare function runTaskViaToolWithProvider(harness: Harness, sessionId: string, prompt: string, provider: LLMProvider, extraInput?: Record<string, unknown>): Promise<{
109
933
  task_id: string;
@@ -117,6 +941,11 @@ export declare function runTaskViaToolWithProvider(harness: Harness, sessionId:
117
941
  modelCalls: number;
118
942
  toolCallCount: number;
119
943
  latencyMs: number;
944
+ uncachedInputTokens: number;
945
+ cacheReadTokens: number;
946
+ cacheCreationTokens: number;
947
+ reasoningTokens: number;
948
+ peakContextTokens: number;
120
949
  stopReason?: string | undefined;
121
950
  };
122
951
  subtree: {
@@ -125,6 +954,11 @@ export declare function runTaskViaToolWithProvider(harness: Harness, sessionId:
125
954
  modelCalls: number;
126
955
  toolCallCount: number;
127
956
  latencyMs: number;
957
+ uncachedInputTokens: number;
958
+ cacheReadTokens: number;
959
+ cacheCreationTokens: number;
960
+ reasoningTokens: number;
961
+ peakContextTokens: number;
128
962
  stopReason?: string | undefined;
129
963
  };
130
964
  taskCount: number;
@@ -145,6 +979,11 @@ export declare function enqueueTaskWithProvider(harness: Harness, sessionId: str
145
979
  modelCalls: number;
146
980
  toolCallCount: number;
147
981
  latencyMs: number;
982
+ uncachedInputTokens: number;
983
+ cacheReadTokens: number;
984
+ cacheCreationTokens: number;
985
+ reasoningTokens: number;
986
+ peakContextTokens: number;
148
987
  stopReason?: string | undefined;
149
988
  };
150
989
  subtree: {
@@ -153,6 +992,11 @@ export declare function enqueueTaskWithProvider(harness: Harness, sessionId: str
153
992
  modelCalls: number;
154
993
  toolCallCount: number;
155
994
  latencyMs: number;
995
+ uncachedInputTokens: number;
996
+ cacheReadTokens: number;
997
+ cacheCreationTokens: number;
998
+ reasoningTokens: number;
999
+ peakContextTokens: number;
156
1000
  stopReason?: string | undefined;
157
1001
  };
158
1002
  taskCount: number;
@@ -160,7 +1004,6 @@ export declare function enqueueTaskWithProvider(harness: Harness, sessionId: str
160
1004
  }>;
161
1005
  /**
162
1006
  * A binary latch. One side waits; the other releases.
163
- * Used for proving concurrency without sleeps.
164
1007
  */
165
1008
  export declare class Latch {
166
1009
  private _resolve;
@@ -169,7 +1012,6 @@ export declare class Latch {
169
1012
  constructor();
170
1013
  release(): void;
171
1014
  fail(err: Error): void;
172
- /** Await with a bounded deadline. Rejects if deadline exceeded. */
173
1015
  wait(timeoutMs?: number): Promise<void>;
174
1016
  }
175
1017
  export interface SseFrame {
@@ -178,16 +1020,6 @@ export interface SseFrame {
178
1020
  }
179
1021
  /**
180
1022
  * Connect to the real SSE server and collect frames until "done" or timeout.
181
- * Returns collected frames in order.
182
- *
183
- * @param port - Ephemeral port from harness.ssePort
184
- * @param taskId - Task UUID
185
- * @param timeoutMs - Bounded deadline (default 8s)
186
- * @param onConnected - Optional callback fired when the HTTP 200 response
187
- * headers are received (i.e. the SSE connection is established and the
188
- * server has accepted the request). Use this to release a latch that
189
- * unblocks a background task, guaranteeing the SSE subscription is active
190
- * before any events are emitted.
191
1023
  */
192
1024
  export declare function collectSseFrames(port: number, taskId: string, timeoutMs?: number, onConnected?: () => void): Promise<SseFrame[]>;
193
1025
  export { taskTool, taskCancel, taskResume };