@vitest-agent/sdk 3.1.2 → 5.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 (67) hide show
  1. package/README.md +23 -19
  2. package/dispatch.d.ts +25 -6
  3. package/formatters/markdown.js +1 -0
  4. package/formatters/terminal.js +4 -3
  5. package/index.d.ts +454 -2343
  6. package/index.js +10 -68
  7. package/internal-inject-env.js +5 -7
  8. package/package.json +3 -19
  9. package/schemas/{run-report-file-1.0.0.json → 5.0/run.json} +1 -1
  10. package/schemas/RunReportFile.js +6 -2
  11. package/sidecar-dispatch.js +7 -5
  12. package/utils/format-console.js +9 -10
  13. package/utils/format-terminal.js +7 -7
  14. package/utils/posix-path.js +52 -0
  15. package/utils/test-location.js +11 -5
  16. package/version.js +17 -0
  17. package/layers/ConfigLive.js +0 -46
  18. package/layers/DataReaderLive.js +0 -1923
  19. package/layers/DataStoreLive.js +0 -1287
  20. package/layers/DetailResolverLive.js +0 -9
  21. package/layers/DiscoveryRegistryLive.js +0 -70
  22. package/layers/EnvironmentDetectorLive.js +0 -21
  23. package/layers/EnvironmentDetectorTest.js +0 -13
  24. package/layers/ExecutorResolverLive.js +0 -9
  25. package/layers/FormatSelectorLive.js +0 -20
  26. package/layers/HistoryTrackerLive.js +0 -49
  27. package/layers/HistoryTrackerTest.js +0 -25
  28. package/layers/LoggerLive.js +0 -64
  29. package/layers/OutputPipelineLive.js +0 -13
  30. package/layers/OutputRendererLive.js +0 -28
  31. package/layers/PathResolutionLive.js +0 -40
  32. package/layers/PerClientSessionMapLive.js +0 -145
  33. package/layers/ProjectDiscoveryLive.js +0 -68
  34. package/layers/ProjectDiscoveryTest.js +0 -12
  35. package/layers/ProjectIdentityLive.js +0 -96
  36. package/layers/RunContextLive.js +0 -81
  37. package/lib/format-triage.js +0 -103
  38. package/lib/format-wrapup.js +0 -67
  39. package/migrations/0001_initial.js +0 -824
  40. package/migrations/0002_test_artifacts.js +0 -30
  41. package/migrations/index.js +0 -26
  42. package/migrations/registry_0001_initial.js +0 -39
  43. package/migrations/session_map_0001_initial.js +0 -38
  44. package/services/Config.js +0 -15
  45. package/services/DataReader.js +0 -8
  46. package/services/DataStore.js +0 -15
  47. package/services/DetailResolver.js +0 -8
  48. package/services/DiscoveryRegistry.js +0 -8
  49. package/services/EnvironmentDetector.js +0 -8
  50. package/services/ExecutorResolver.js +0 -8
  51. package/services/FormatSelector.js +0 -8
  52. package/services/HistoryTracker.js +0 -20
  53. package/services/OutputRenderer.js +0 -8
  54. package/services/PerClientSessionMap.js +0 -22
  55. package/services/ProjectDiscovery.js +0 -8
  56. package/services/ProjectIdentity.js +0 -63
  57. package/services/RunContext.js +0 -53
  58. package/services/idempotency.js +0 -58
  59. package/sql/assemblers.js +0 -69
  60. package/testing/layers.js +0 -21
  61. package/testing.d.ts +0 -1862
  62. package/testing.js +0 -254
  63. package/utils/ensure-migrated.js +0 -52
  64. package/utils/failure-signature.js +0 -34
  65. package/utils/resolve-data-path.js +0 -65
  66. package/utils/resolve-project-key-from-cwd.js +0 -53
  67. package/utils/resolve-workspace-key.js +0 -41
package/testing.d.ts DELETED
@@ -1,1862 +0,0 @@
1
- import { Context, Effect, Layer, Option, Schema } from "effect";
2
- import * as NodeServices from "@effect/platform-node/NodeServices";
3
- import * as SqliteMigrator from "@effect/sql-sqlite-node/SqliteMigrator";
4
- //#region src/errors/DataStoreError.d.ts
5
- declare const DataStoreError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
6
- readonly _tag: "DataStoreError";
7
- } & Readonly<A>;
8
- /**
9
- * Error raised when a SQLite operation fails at read, write, or migration time.
10
- * @public
11
- */
12
- export declare class DataStoreError extends DataStoreError_base<{
13
- readonly operation: "read" | "write" | "migrate";
14
- readonly table: string;
15
- readonly reason: string;
16
- }> {
17
- constructor(args: {
18
- readonly operation: "read" | "write" | "migrate";
19
- readonly table: string;
20
- readonly reason: string;
21
- });
22
- }
23
- //#endregion
24
- //#region src/schemas/AgentReport.d.ts
25
- /**
26
- * Complete per-project test report written to disk as JSON.
27
- * @public
28
- */
29
- export declare const AgentReport: Schema.Struct<{
30
- readonly timestamp: Schema.String;
31
- readonly project: Schema.optional<Schema.String>;
32
- readonly reason: Schema.Literals<readonly ["passed", "failed", "interrupted"]>;
33
- readonly summary: Schema.Struct<{
34
- readonly total: Schema.Number;
35
- readonly passed: Schema.Number;
36
- readonly failed: Schema.Number;
37
- readonly skipped: Schema.Number;
38
- readonly duration: Schema.Number;
39
- /**
40
- * Count of every collected module, passing modules included.
41
- * `AgentReport.failed` only carries failing modules, so a green run
42
- * has no other way to know how many files actually ran — without
43
- * this a fully-passing replay reads as "0 modules all-passed"
44
- * (issue #204). Optional to keep existing fixtures/reports valid.
45
- */
46
- readonly modules: Schema.optional<Schema.Number>;
47
- }>;
48
- readonly failed: Schema.$Array<Schema.Struct<{
49
- readonly file: Schema.String;
50
- readonly state: Schema.Literals<readonly ["passed", "failed", "skipped", "pending"]>;
51
- readonly duration: Schema.optional<Schema.Number>;
52
- readonly errors: Schema.optional<Schema.$Array<Schema.Struct<{
53
- readonly message: Schema.String;
54
- readonly stack: Schema.optional<Schema.String>;
55
- readonly diff: Schema.optional<Schema.String>;
56
- readonly expected: Schema.optional<Schema.String>;
57
- readonly received: Schema.optional<Schema.String>;
58
- }>>>;
59
- readonly tests: Schema.$Array<Schema.Struct<{
60
- readonly name: Schema.String;
61
- readonly fullName: Schema.String;
62
- readonly state: Schema.Literals<readonly ["passed", "failed", "skipped", "pending"]>;
63
- readonly duration: Schema.optional<Schema.Number>;
64
- readonly flaky: Schema.optional<Schema.Boolean>;
65
- readonly slow: Schema.optional<Schema.Boolean>;
66
- readonly errors: Schema.optional<Schema.$Array<Schema.Struct<{
67
- readonly message: Schema.String;
68
- readonly stack: Schema.optional<Schema.String>;
69
- readonly diff: Schema.optional<Schema.String>;
70
- readonly expected: Schema.optional<Schema.String>;
71
- readonly received: Schema.optional<Schema.String>;
72
- }>>>;
73
- readonly classification: Schema.optional<Schema.Literals<readonly ["stable", "new-failure", "persistent", "flaky", "recovered"]>>;
74
- }>>;
75
- }>>;
76
- readonly unhandledErrors: Schema.$Array<Schema.Struct<{
77
- readonly message: Schema.String;
78
- readonly stack: Schema.optional<Schema.String>;
79
- readonly diff: Schema.optional<Schema.String>;
80
- readonly expected: Schema.optional<Schema.String>;
81
- readonly received: Schema.optional<Schema.String>;
82
- }>>;
83
- readonly failedFiles: Schema.$Array<Schema.String>;
84
- readonly coverage: Schema.optional<Schema.Struct<{
85
- readonly totals: Schema.Struct<{
86
- readonly statements: Schema.Number;
87
- readonly branches: Schema.Number;
88
- readonly functions: Schema.Number;
89
- readonly lines: Schema.Number;
90
- }>;
91
- readonly thresholds: Schema.Struct<{
92
- readonly global: Schema.Struct<{
93
- readonly lines: Schema.optional<Schema.Number>;
94
- readonly functions: Schema.optional<Schema.Number>;
95
- readonly branches: Schema.optional<Schema.Number>;
96
- readonly statements: Schema.optional<Schema.Number>;
97
- }>;
98
- readonly patterns: Schema.withDecodingDefaultKey<Schema.$Array<Schema.Tuple<readonly [Schema.String, Schema.Struct<{
99
- readonly lines: Schema.optional<Schema.Number>;
100
- readonly functions: Schema.optional<Schema.Number>;
101
- readonly branches: Schema.optional<Schema.Number>;
102
- readonly statements: Schema.optional<Schema.Number>;
103
- readonly perFile: Schema.optionalKey<Schema.Union<readonly [Schema.Boolean, Schema.Struct<{
104
- readonly lines: Schema.optional<Schema.Number>;
105
- readonly functions: Schema.optional<Schema.Number>;
106
- readonly branches: Schema.optional<Schema.Number>;
107
- readonly statements: Schema.optional<Schema.Number>;
108
- }>]>>;
109
- }>]>>, never>;
110
- }>;
111
- readonly targets: Schema.optional<Schema.Struct<{
112
- readonly global: Schema.Struct<{
113
- readonly lines: Schema.optional<Schema.Number>;
114
- readonly functions: Schema.optional<Schema.Number>;
115
- readonly branches: Schema.optional<Schema.Number>;
116
- readonly statements: Schema.optional<Schema.Number>;
117
- }>;
118
- readonly patterns: Schema.withDecodingDefaultKey<Schema.$Array<Schema.Tuple<readonly [Schema.String, Schema.Struct<{
119
- readonly lines: Schema.optional<Schema.Number>;
120
- readonly functions: Schema.optional<Schema.Number>;
121
- readonly branches: Schema.optional<Schema.Number>;
122
- readonly statements: Schema.optional<Schema.Number>;
123
- readonly perFile: Schema.optionalKey<Schema.Union<readonly [Schema.Boolean, Schema.Struct<{
124
- readonly lines: Schema.optional<Schema.Number>;
125
- readonly functions: Schema.optional<Schema.Number>;
126
- readonly branches: Schema.optional<Schema.Number>;
127
- readonly statements: Schema.optional<Schema.Number>;
128
- }>]>>;
129
- }>]>>, never>;
130
- }>>;
131
- readonly baselines: Schema.optional<Schema.Struct<{
132
- readonly global: Schema.Struct<{
133
- readonly lines: Schema.optional<Schema.Number>;
134
- readonly functions: Schema.optional<Schema.Number>;
135
- readonly branches: Schema.optional<Schema.Number>;
136
- readonly statements: Schema.optional<Schema.Number>;
137
- }>;
138
- readonly patterns: Schema.withDecodingDefaultKey<Schema.$Array<Schema.Tuple<readonly [Schema.String, Schema.Struct<{
139
- readonly lines: Schema.optional<Schema.Number>;
140
- readonly functions: Schema.optional<Schema.Number>;
141
- readonly branches: Schema.optional<Schema.Number>;
142
- readonly statements: Schema.optional<Schema.Number>;
143
- readonly perFile: Schema.optionalKey<Schema.Union<readonly [Schema.Boolean, Schema.Struct<{
144
- readonly lines: Schema.optional<Schema.Number>;
145
- readonly functions: Schema.optional<Schema.Number>;
146
- readonly branches: Schema.optional<Schema.Number>;
147
- readonly statements: Schema.optional<Schema.Number>;
148
- }>]>>;
149
- }>]>>, never>;
150
- }>>;
151
- readonly scoped: Schema.withDecodingDefaultKey<Schema.Boolean, never>;
152
- readonly scopedFiles: Schema.optional<Schema.$Array<Schema.String>>;
153
- readonly totalFiles: Schema.optional<Schema.Number>;
154
- readonly lowCoverage: Schema.$Array<Schema.Struct<{
155
- readonly file: Schema.String;
156
- readonly summary: Schema.Struct<{
157
- readonly statements: Schema.Number;
158
- readonly branches: Schema.Number;
159
- readonly functions: Schema.Number;
160
- readonly lines: Schema.Number;
161
- }>;
162
- readonly uncoveredLines: Schema.String;
163
- }>>;
164
- readonly lowCoverageFiles: Schema.$Array<Schema.String>;
165
- readonly belowTarget: Schema.optional<Schema.$Array<Schema.Struct<{
166
- readonly file: Schema.String;
167
- readonly summary: Schema.Struct<{
168
- readonly statements: Schema.Number;
169
- readonly branches: Schema.Number;
170
- readonly functions: Schema.Number;
171
- readonly lines: Schema.Number;
172
- }>;
173
- readonly uncoveredLines: Schema.String;
174
- }>>>;
175
- readonly belowTargetFiles: Schema.optional<Schema.$Array<Schema.String>>;
176
- }>>;
177
- readonly tagCounts: Schema.optional<Schema.$Record<Schema.String, Schema.Struct<{
178
- readonly passed: Schema.optional<Schema.Number>;
179
- readonly failed: Schema.optional<Schema.Number>;
180
- readonly skipped: Schema.optional<Schema.Number>;
181
- }>>>;
182
- readonly consoleLeaks: Schema.optional<Schema.Struct<{
183
- readonly total: Schema.Number;
184
- readonly byFile: Schema.$Array<Schema.Struct<{
185
- readonly file: Schema.String;
186
- readonly stdout: Schema.Number;
187
- readonly stderr: Schema.Number;
188
- readonly tests: Schema.optional<Schema.$Array<Schema.String>>;
189
- readonly sample: Schema.optional<Schema.String>;
190
- }>>;
191
- readonly truncated: Schema.optional<Schema.Boolean>;
192
- readonly fromFailingTests: Schema.optional<Schema.Struct<{
193
- readonly total: Schema.Number;
194
- readonly files: Schema.Number;
195
- }>>;
196
- }>>;
197
- }>;
198
- /** @public */
199
- export type AgentReport = typeof AgentReport.Type;
200
- //#endregion
201
- //#region src/schemas/Baselines.d.ts
202
- /**
203
- * Coverage baselines -- the auto-ratcheting high-water mark.
204
- * @public
205
- */
206
- export declare const CoverageBaselines: Schema.Struct<{
207
- readonly updatedAt: Schema.String;
208
- readonly global: Schema.Struct<{
209
- readonly lines: Schema.optional<Schema.Number>;
210
- readonly functions: Schema.optional<Schema.Number>;
211
- readonly branches: Schema.optional<Schema.Number>;
212
- readonly statements: Schema.optional<Schema.Number>;
213
- }>;
214
- readonly patterns: Schema.withDecodingDefaultKey<Schema.$Array<Schema.Tuple<readonly [Schema.String, Schema.Struct<{
215
- readonly lines: Schema.optional<Schema.Number>;
216
- readonly functions: Schema.optional<Schema.Number>;
217
- readonly branches: Schema.optional<Schema.Number>;
218
- readonly statements: Schema.optional<Schema.Number>;
219
- readonly perFile: Schema.optionalKey<Schema.Union<readonly [Schema.Boolean, Schema.Struct<{
220
- readonly lines: Schema.optional<Schema.Number>;
221
- readonly functions: Schema.optional<Schema.Number>;
222
- readonly branches: Schema.optional<Schema.Number>;
223
- readonly statements: Schema.optional<Schema.Number>;
224
- }>]>>;
225
- }>]>>, never>;
226
- }>;
227
- /** @public */
228
- export type CoverageBaselines = typeof CoverageBaselines.Type;
229
- //#endregion
230
- //#region src/schemas/CacheManifest.d.ts
231
- /**
232
- * Root manifest file that indexes all project reports.
233
- * @public
234
- */
235
- export declare const CacheManifest: Schema.Struct<{
236
- readonly updatedAt: Schema.String;
237
- readonly cacheDir: Schema.String;
238
- readonly projects: Schema.$Array<Schema.Struct<{
239
- readonly project: Schema.String;
240
- readonly reportFile: Schema.String;
241
- readonly historyFile: Schema.optional<Schema.String>;
242
- readonly lastRun: Schema.NullOr<Schema.String>;
243
- readonly lastResult: Schema.NullOr<Schema.Literals<readonly ["passed", "failed", "interrupted"]>>;
244
- }>>;
245
- }>;
246
- /** @public */
247
- export type CacheManifest = typeof CacheManifest.Type;
248
- //#endregion
249
- //#region src/schemas/Coverage.d.ts
250
- /**
251
- * Per-file coverage data including uncovered line ranges.
252
- * @public
253
- */
254
- export declare const FileCoverageReport: Schema.Struct<{
255
- readonly file: Schema.String;
256
- readonly summary: Schema.Struct<{
257
- readonly statements: Schema.Number;
258
- readonly branches: Schema.Number;
259
- readonly functions: Schema.Number;
260
- readonly lines: Schema.Number;
261
- }>;
262
- readonly uncoveredLines: Schema.String;
263
- }>;
264
- /** @public */
265
- export type FileCoverageReport = typeof FileCoverageReport.Type;
266
- /**
267
- * Complete coverage report attached to an AgentReport.
268
- * @public
269
- */
270
- export declare const CoverageReport: Schema.Struct<{
271
- readonly totals: Schema.Struct<{
272
- readonly statements: Schema.Number;
273
- readonly branches: Schema.Number;
274
- readonly functions: Schema.Number;
275
- readonly lines: Schema.Number;
276
- }>;
277
- readonly thresholds: Schema.Struct<{
278
- readonly global: Schema.Struct<{
279
- readonly lines: Schema.optional<Schema.Number>;
280
- readonly functions: Schema.optional<Schema.Number>;
281
- readonly branches: Schema.optional<Schema.Number>;
282
- readonly statements: Schema.optional<Schema.Number>;
283
- }>;
284
- readonly patterns: Schema.withDecodingDefaultKey<Schema.$Array<Schema.Tuple<readonly [Schema.String, Schema.Struct<{
285
- readonly lines: Schema.optional<Schema.Number>;
286
- readonly functions: Schema.optional<Schema.Number>;
287
- readonly branches: Schema.optional<Schema.Number>;
288
- readonly statements: Schema.optional<Schema.Number>;
289
- readonly perFile: Schema.optionalKey<Schema.Union<readonly [Schema.Boolean, Schema.Struct<{
290
- readonly lines: Schema.optional<Schema.Number>;
291
- readonly functions: Schema.optional<Schema.Number>;
292
- readonly branches: Schema.optional<Schema.Number>;
293
- readonly statements: Schema.optional<Schema.Number>;
294
- }>]>>;
295
- }>]>>, never>;
296
- }>;
297
- readonly targets: Schema.optional<Schema.Struct<{
298
- readonly global: Schema.Struct<{
299
- readonly lines: Schema.optional<Schema.Number>;
300
- readonly functions: Schema.optional<Schema.Number>;
301
- readonly branches: Schema.optional<Schema.Number>;
302
- readonly statements: Schema.optional<Schema.Number>;
303
- }>;
304
- readonly patterns: Schema.withDecodingDefaultKey<Schema.$Array<Schema.Tuple<readonly [Schema.String, Schema.Struct<{
305
- readonly lines: Schema.optional<Schema.Number>;
306
- readonly functions: Schema.optional<Schema.Number>;
307
- readonly branches: Schema.optional<Schema.Number>;
308
- readonly statements: Schema.optional<Schema.Number>;
309
- readonly perFile: Schema.optionalKey<Schema.Union<readonly [Schema.Boolean, Schema.Struct<{
310
- readonly lines: Schema.optional<Schema.Number>;
311
- readonly functions: Schema.optional<Schema.Number>;
312
- readonly branches: Schema.optional<Schema.Number>;
313
- readonly statements: Schema.optional<Schema.Number>;
314
- }>]>>;
315
- }>]>>, never>;
316
- }>>;
317
- readonly baselines: Schema.optional<Schema.Struct<{
318
- readonly global: Schema.Struct<{
319
- readonly lines: Schema.optional<Schema.Number>;
320
- readonly functions: Schema.optional<Schema.Number>;
321
- readonly branches: Schema.optional<Schema.Number>;
322
- readonly statements: Schema.optional<Schema.Number>;
323
- }>;
324
- readonly patterns: Schema.withDecodingDefaultKey<Schema.$Array<Schema.Tuple<readonly [Schema.String, Schema.Struct<{
325
- readonly lines: Schema.optional<Schema.Number>;
326
- readonly functions: Schema.optional<Schema.Number>;
327
- readonly branches: Schema.optional<Schema.Number>;
328
- readonly statements: Schema.optional<Schema.Number>;
329
- readonly perFile: Schema.optionalKey<Schema.Union<readonly [Schema.Boolean, Schema.Struct<{
330
- readonly lines: Schema.optional<Schema.Number>;
331
- readonly functions: Schema.optional<Schema.Number>;
332
- readonly branches: Schema.optional<Schema.Number>;
333
- readonly statements: Schema.optional<Schema.Number>;
334
- }>]>>;
335
- }>]>>, never>;
336
- }>>;
337
- readonly scoped: Schema.withDecodingDefaultKey<Schema.Boolean, never>;
338
- readonly scopedFiles: Schema.optional<Schema.$Array<Schema.String>>;
339
- readonly totalFiles: Schema.optional<Schema.Number>;
340
- readonly lowCoverage: Schema.$Array<Schema.Struct<{
341
- readonly file: Schema.String;
342
- readonly summary: Schema.Struct<{
343
- readonly statements: Schema.Number;
344
- readonly branches: Schema.Number;
345
- readonly functions: Schema.Number;
346
- readonly lines: Schema.Number;
347
- }>;
348
- readonly uncoveredLines: Schema.String;
349
- }>>;
350
- readonly lowCoverageFiles: Schema.$Array<Schema.String>;
351
- readonly belowTarget: Schema.optional<Schema.$Array<Schema.Struct<{
352
- readonly file: Schema.String;
353
- readonly summary: Schema.Struct<{
354
- readonly statements: Schema.Number;
355
- readonly branches: Schema.Number;
356
- readonly functions: Schema.Number;
357
- readonly lines: Schema.Number;
358
- }>;
359
- readonly uncoveredLines: Schema.String;
360
- }>>>;
361
- readonly belowTargetFiles: Schema.optional<Schema.$Array<Schema.String>>;
362
- }>;
363
- /** @public */
364
- export type CoverageReport = typeof CoverageReport.Type;
365
- //#endregion
366
- //#region src/schemas/History.d.ts
367
- /**
368
- * Per-project history record containing all tracked tests.
369
- * @public
370
- */
371
- export declare const HistoryRecord: Schema.Struct<{
372
- readonly project: Schema.String;
373
- readonly updatedAt: Schema.String;
374
- readonly tests: Schema.$Array<Schema.Struct<{
375
- readonly modulePath: Schema.String;
376
- readonly fullName: Schema.String;
377
- readonly runs: Schema.$Array<Schema.Struct<{
378
- readonly timestamp: Schema.String;
379
- readonly state: Schema.Literals<readonly ["passed", "failed"]>;
380
- }>>;
381
- }>>;
382
- }>;
383
- /** @public */
384
- export type HistoryRecord = typeof HistoryRecord.Type;
385
- //#endregion
386
- //#region src/schemas/Tdd.d.ts
387
- /** @public */
388
- export declare const GoalStatus: Schema.Literals<readonly ["pending", "in_progress", "done", "abandoned"]>;
389
- /** @public */
390
- export type GoalStatus = typeof GoalStatus.Type;
391
- /** @public */
392
- export declare const BehaviorStatus: Schema.Literals<readonly ["pending", "in_progress", "done", "abandoned"]>;
393
- /** @public */
394
- export type BehaviorStatus = typeof BehaviorStatus.Type;
395
- /** @public */
396
- export declare const GoalRow: Schema.Struct<{
397
- readonly id: Schema.Number;
398
- readonly sessionId: Schema.Number;
399
- readonly ordinal: Schema.Number;
400
- readonly goal: Schema.String;
401
- readonly status: Schema.Literals<readonly ["pending", "in_progress", "done", "abandoned"]>;
402
- readonly createdAt: Schema.String;
403
- }>;
404
- /** @public */
405
- export type GoalRow = typeof GoalRow.Type;
406
- /** @public */
407
- export declare const BehaviorRow: Schema.Struct<{
408
- readonly id: Schema.Number;
409
- readonly goalId: Schema.Number;
410
- readonly ordinal: Schema.Number;
411
- readonly behavior: Schema.String;
412
- readonly suggestedTestName: Schema.NullOr<Schema.String>;
413
- readonly status: Schema.Literals<readonly ["pending", "in_progress", "done", "abandoned"]>;
414
- readonly createdAt: Schema.String;
415
- }>;
416
- /** @public */
417
- export type BehaviorRow = typeof BehaviorRow.Type;
418
- /** @public */
419
- export declare const GoalDetail: Schema.Struct<{
420
- readonly id: Schema.Number;
421
- readonly sessionId: Schema.Number;
422
- readonly ordinal: Schema.Number;
423
- readonly goal: Schema.String;
424
- readonly status: Schema.Literals<readonly ["pending", "in_progress", "done", "abandoned"]>;
425
- readonly createdAt: Schema.String;
426
- readonly behaviors: Schema.$Array<Schema.Struct<{
427
- readonly id: Schema.Number;
428
- readonly goalId: Schema.Number;
429
- readonly ordinal: Schema.Number;
430
- readonly behavior: Schema.String;
431
- readonly suggestedTestName: Schema.NullOr<Schema.String>;
432
- readonly status: Schema.Literals<readonly ["pending", "in_progress", "done", "abandoned"]>;
433
- readonly createdAt: Schema.String;
434
- }>>;
435
- }>;
436
- /** @public */
437
- export type GoalDetail = typeof GoalDetail.Type;
438
- /** @public */
439
- export declare const BehaviorDetail: Schema.Struct<{
440
- readonly id: Schema.Number;
441
- readonly goalId: Schema.Number;
442
- readonly ordinal: Schema.Number;
443
- readonly behavior: Schema.String;
444
- readonly suggestedTestName: Schema.NullOr<Schema.String>;
445
- readonly status: Schema.Literals<readonly ["pending", "in_progress", "done", "abandoned"]>;
446
- readonly createdAt: Schema.String;
447
- readonly parentGoal: Schema.Struct<{
448
- readonly id: Schema.Number;
449
- readonly goal: Schema.String;
450
- readonly status: Schema.Literals<readonly ["pending", "in_progress", "done", "abandoned"]>;
451
- }>;
452
- readonly dependencies: Schema.$Array<Schema.Struct<{
453
- readonly id: Schema.Number;
454
- readonly goalId: Schema.Number;
455
- readonly ordinal: Schema.Number;
456
- readonly behavior: Schema.String;
457
- readonly suggestedTestName: Schema.NullOr<Schema.String>;
458
- readonly status: Schema.Literals<readonly ["pending", "in_progress", "done", "abandoned"]>;
459
- readonly createdAt: Schema.String;
460
- }>>;
461
- }>;
462
- /** @public */
463
- export type BehaviorDetail = typeof BehaviorDetail.Type;
464
- //#endregion
465
- //#region src/schemas/Trends.d.ts
466
- /**
467
- * A single coverage trend data point recorded on a full test run.
468
- * @public
469
- */
470
- export declare const TrendEntry: Schema.Struct<{
471
- readonly timestamp: Schema.String;
472
- readonly coverage: Schema.Struct<{
473
- readonly statements: Schema.Number;
474
- readonly branches: Schema.Number;
475
- readonly functions: Schema.Number;
476
- readonly lines: Schema.Number;
477
- }>;
478
- readonly delta: Schema.Struct<{
479
- readonly statements: Schema.Number;
480
- readonly branches: Schema.Number;
481
- readonly functions: Schema.Number;
482
- readonly lines: Schema.Number;
483
- }>;
484
- readonly direction: Schema.Literals<readonly ["improving", "regressing", "stable"]>;
485
- readonly targetsHash: Schema.optional<Schema.String>;
486
- }>;
487
- /** @public */
488
- export type TrendEntry = typeof TrendEntry.Type;
489
- /**
490
- * Per-project trend record with sliding window of entries.
491
- * @public
492
- */
493
- export declare const TrendRecord: Schema.Struct<{
494
- readonly entries: Schema.$Array<Schema.Struct<{
495
- readonly timestamp: Schema.String;
496
- readonly coverage: Schema.Struct<{
497
- readonly statements: Schema.Number;
498
- readonly branches: Schema.Number;
499
- readonly functions: Schema.Number;
500
- readonly lines: Schema.Number;
501
- }>;
502
- readonly delta: Schema.Struct<{
503
- readonly statements: Schema.Number;
504
- readonly branches: Schema.Number;
505
- readonly functions: Schema.Number;
506
- readonly lines: Schema.Number;
507
- }>;
508
- readonly direction: Schema.Literals<readonly ["improving", "regressing", "stable"]>;
509
- readonly targetsHash: Schema.optional<Schema.String>;
510
- }>>;
511
- }>;
512
- /** @public */
513
- export type TrendRecord = typeof TrendRecord.Type;
514
- //#endregion
515
- //#region src/utils/validate-phase-transition.d.ts
516
- /** @public */
517
- type Phase = "spike" | "red" | "red.triangulate" | "green" | "green.fake-it" | "refactor" | "extended-red" | "green-without-red";
518
- /** @public */
519
- type ArtifactKind = "test_written" | "test_failed_run" | "code_written" | "test_passed_run" | "refactor" | "test_weakened";
520
- /**
521
- * Explicit test-runner marker on a `tdd_artifacts` row (issue #363). `vitest`
522
- * artifacts always carry a `test_case_id` when they anchor a specific test;
523
- * `bats` artifacts never do (there is no `test_cases` row for a bats test),
524
- * so the D2 binding-rule validator branches on this to accept a bats
525
- * run-level artifact without weakening the vitest guard.
526
- * @public
527
- */
528
- type ArtifactSuite = "vitest" | "bats";
529
- /** @public */
530
- interface CitedArtifact {
531
- readonly id: number;
532
- /**
533
- * `tdd_phases.id` of the phase this artifact was actually recorded in — the
534
- * artifact's own phase binding. This is the honest anchor for D2 binding
535
- * rule 1's window check (issue #245): a test_case's first-ever creation
536
- * turn can predate the current phase (e.g. authored during spike, then
537
- * re-run inside red) without the evidence itself being stale, so the
538
- * window check compares this against `PhaseTransitionContext.current_phase_id`
539
- * rather than `test_case_created_turn_at`.
540
- */
541
- readonly phase_id: number;
542
- readonly artifact_kind: ArtifactKind;
543
- readonly test_case_id: number | null;
544
- readonly test_case_created_turn_at: string | null;
545
- readonly test_case_authored_in_session: boolean;
546
- readonly test_run_id: number | null;
547
- readonly test_first_failure_run_id: number | null;
548
- readonly behavior_id: number | null;
549
- /**
550
- * Issue #363: explicit suite marker distinguishing vitest from bats runs.
551
- * Optional on the pure type so hand-built contexts default to `vitest`;
552
- * the DB row always carries the persisted value.
553
- */
554
- readonly suite?: ArtifactSuite;
555
- }
556
- //#endregion
557
- //#region src/schemas/Identity.d.ts
558
- /**
559
- * Canonical UUID for an LLM agent invocation. Generated server-side at
560
- * `register_agent` time. Stable across transport reconnects within an
561
- * agent's lifetime.
562
- * @public
563
- */
564
- export declare const AgentId: Schema.brand<Schema.String, "AgentId">;
565
- /** @public */
566
- export type AgentId = Schema.Schema.Type<typeof AgentId>;
567
- /**
568
- * The agent host process's chat id (Claude Code's per-process chat
569
- * UUID, etc.). Shorter-lived than a conversation; one conversation can
570
- * have multiple chats across `--resume` invocations. Distinct from
571
- * `sessions.id` (the SQLite agent-run PK).
572
- * @public
573
- */
574
- export declare const ChatId: Schema.brand<Schema.String, "ChatId">;
575
- /** @public */
576
- export type ChatId = Schema.Schema.Type<typeof ChatId>;
577
- //#endregion
578
- //#region src/errors/AgentErrors.d.ts
579
- declare const AgentNotFoundError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
580
- readonly _tag: "AgentNotFoundError";
581
- } & Readonly<A>;
582
- /**
583
- * `agent_id` does not exist for the given chat. Surface to the
584
- * caller; the typical resolution is to call `register_agent` for
585
- * this agent first.
586
- * @public
587
- */
588
- export declare class AgentNotFoundError extends AgentNotFoundError_base<{
589
- readonly agentId: AgentId;
590
- readonly chatId?: ChatId;
591
- }> {}
592
- declare const RegistrationConflictError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
593
- readonly _tag: "RegistrationConflictError";
594
- } & Readonly<A>;
595
- /**
596
- * True conflict — e.g., the `parentAgentId` supplied to
597
- * `register_agent` refers to a different session than the one the
598
- * caller named. Distinct from `IdempotencyHit`, which is a success.
599
- * @public
600
- */
601
- export declare class RegistrationConflictError extends RegistrationConflictError_base<{
602
- readonly reason: string;
603
- }> {
604
- constructor(args: {
605
- readonly reason: string;
606
- });
607
- }
608
- //#endregion
609
- //#region src/errors/TddErrors.d.ts
610
- declare const GoalNotFoundError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
611
- readonly _tag: "GoalNotFoundError";
612
- } & Readonly<A>;
613
- /** @public */
614
- export declare class GoalNotFoundError extends GoalNotFoundError_base<{
615
- readonly id: number;
616
- readonly reason: string;
617
- }> {
618
- constructor(args: {
619
- readonly id: number;
620
- readonly reason: string;
621
- });
622
- }
623
- declare const BehaviorNotFoundError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
624
- readonly _tag: "BehaviorNotFoundError";
625
- } & Readonly<A>;
626
- /** @public */
627
- export declare class BehaviorNotFoundError extends BehaviorNotFoundError_base<{
628
- readonly id: number;
629
- readonly reason: string;
630
- }> {
631
- constructor(args: {
632
- readonly id: number;
633
- readonly reason: string;
634
- });
635
- }
636
- declare const TddTaskNotFoundError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
637
- readonly _tag: "TddTaskNotFoundError";
638
- } & Readonly<A>;
639
- /** @public */
640
- export declare class TddTaskNotFoundError extends TddTaskNotFoundError_base<{
641
- readonly id: number;
642
- readonly reason: string;
643
- }> {
644
- constructor(args: {
645
- readonly id: number;
646
- readonly reason: string;
647
- });
648
- }
649
- /** @public */
650
- type TddTaskEndOutcome = "succeeded" | "blocked" | "abandoned";
651
- declare const TddTaskAlreadyEndedError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
652
- readonly _tag: "TddTaskAlreadyEndedError";
653
- } & Readonly<A>;
654
- /** @public */
655
- export declare class TddTaskAlreadyEndedError extends TddTaskAlreadyEndedError_base<{
656
- readonly id: number;
657
- readonly endedAt: string;
658
- readonly outcome: TddTaskEndOutcome;
659
- }> {
660
- constructor(args: {
661
- readonly id: number;
662
- readonly endedAt: string;
663
- readonly outcome: TddTaskEndOutcome;
664
- });
665
- }
666
- /** @public */
667
- type IllegalStatusTransitionEntity = "goal" | "behavior" | "task";
668
- declare const IllegalStatusTransitionError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
669
- readonly _tag: "IllegalStatusTransitionError";
670
- } & Readonly<A>;
671
- /** @public */
672
- export declare class IllegalStatusTransitionError extends IllegalStatusTransitionError_base<{
673
- readonly entity: IllegalStatusTransitionEntity;
674
- readonly id: number;
675
- readonly from: string;
676
- readonly to: string;
677
- readonly reason: string;
678
- }> {
679
- constructor(args: {
680
- readonly entity: IllegalStatusTransitionEntity;
681
- readonly id: number;
682
- readonly from: string;
683
- readonly to: string;
684
- readonly reason: string;
685
- });
686
- }
687
- //#endregion
688
- //#region src/schemas/Agent.d.ts
689
- declare const Agent_base: Schema.Class<Agent, Schema.TaggedStruct<"Agent", {
690
- readonly agentId: Schema.brand<Schema.String, "AgentId">;
691
- readonly sessionId: Schema.Number;
692
- readonly parentAgentId: Schema.NullOr<Schema.brand<Schema.String, "AgentId">>;
693
- readonly conversationId: Schema.NullOr<Schema.brand<Schema.String, "ConversationId">>;
694
- readonly agentType: Schema.String;
695
- readonly startedAt: Schema.Number;
696
- readonly endedAt: Schema.NullOr<Schema.Number>;
697
- readonly startGitBranch: Schema.NullOr<Schema.String>;
698
- readonly startGitCommitSha: Schema.NullOr<Schema.String>;
699
- readonly startWorktreeDir: Schema.NullOr<Schema.String>;
700
- readonly idempotencyKey: Schema.String;
701
- }>, {}>;
702
- /**
703
- * Successful registration row. The fields mirror the `agents` SQLite
704
- * table 1:1 in camelCase.
705
- *
706
- * `startGitBranch`, `startGitCommitSha`, `startWorktreeDir` capture
707
- * *what the agent inherited at registration time* — distinct from the
708
- * per-run git context recorded on `runs`. A divergence between the
709
- * two reveals a mid-session branch switch, which is itself signal.
710
- * @public
711
- */
712
- export declare class Agent extends Agent_base {}
713
- declare const IdempotencyHit_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => Readonly<A> & {
714
- readonly _tag: "IdempotencyHit";
715
- } & import("effect/Pipeable").Pipeable;
716
- /**
717
- * Returned by `DataStore.registerAgent` when the
718
- * `(session_id, idempotency_key)` UNIQUE constraint already has a
719
- * row. Not an error — the caller treats it as a successful recovery
720
- * of the existing `agentId`.
721
- *
722
- * Modeled as a `Data.TaggedClass` so the success channel of
723
- * `registerAgent` is `Effect<Agent | IdempotencyHit, ...>` and
724
- * downstream code uses `Match.tag` to branch.
725
- * @public
726
- */
727
- export declare class IdempotencyHit extends IdempotencyHit_base<{
728
- readonly existingAgentId: typeof AgentId.Type;
729
- }> {}
730
- //#endregion
731
- //#region src/schemas/Thresholds.d.ts
732
- /**
733
- * Fully resolved thresholds ready for evaluation.
734
- * @public
735
- */
736
- declare const ResolvedThresholds: Schema.Struct<{
737
- readonly global: Schema.Struct<{
738
- readonly lines: Schema.optional<Schema.Number>;
739
- readonly functions: Schema.optional<Schema.Number>;
740
- readonly branches: Schema.optional<Schema.Number>;
741
- readonly statements: Schema.optional<Schema.Number>;
742
- }>;
743
- readonly perFile: Schema.withDecodingDefaultKey<Schema.Union<readonly [Schema.Boolean, Schema.Struct<{
744
- readonly lines: Schema.optional<Schema.Number>;
745
- readonly functions: Schema.optional<Schema.Number>;
746
- readonly branches: Schema.optional<Schema.Number>;
747
- readonly statements: Schema.optional<Schema.Number>;
748
- }>]>, never>;
749
- readonly patterns: Schema.withDecodingDefaultKey<Schema.$Array<Schema.Tuple<readonly [Schema.String, Schema.Struct<{
750
- readonly lines: Schema.optional<Schema.Number>;
751
- readonly functions: Schema.optional<Schema.Number>;
752
- readonly branches: Schema.optional<Schema.Number>;
753
- readonly statements: Schema.optional<Schema.Number>;
754
- readonly perFile: Schema.optionalKey<Schema.Union<readonly [Schema.Boolean, Schema.Struct<{
755
- readonly lines: Schema.optional<Schema.Number>;
756
- readonly functions: Schema.optional<Schema.Number>;
757
- readonly branches: Schema.optional<Schema.Number>;
758
- readonly statements: Schema.optional<Schema.Number>;
759
- }>]>>;
760
- }>]>>, never>;
761
- }>;
762
- /** @public */
763
- type ResolvedThresholds = typeof ResolvedThresholds.Type;
764
- //#endregion
765
- //#region src/services/DataStore.d.ts
766
- /** @public */
767
- interface CreateGoalInput {
768
- readonly tddTaskId: number;
769
- readonly goal: string;
770
- }
771
- /** @public */
772
- interface UpdateGoalInput {
773
- readonly id: number;
774
- readonly goal?: string;
775
- readonly status?: GoalStatus;
776
- }
777
- /** @public */
778
- interface CreateBehaviorInput {
779
- readonly goalId: number;
780
- readonly behavior: string;
781
- readonly suggestedTestName?: string;
782
- readonly dependsOnBehaviorIds?: ReadonlyArray<number>;
783
- }
784
- /** @public */
785
- interface UpdateBehaviorInput {
786
- readonly id: number;
787
- readonly behavior?: string;
788
- readonly suggestedTestName?: string | null;
789
- readonly status?: BehaviorStatus;
790
- readonly dependsOnBehaviorIds?: ReadonlyArray<number>;
791
- }
792
- /** @public */
793
- interface SettingsInput {
794
- readonly vitestVersion: string;
795
- readonly pool?: string;
796
- readonly environment?: string;
797
- readonly testTimeout?: number;
798
- readonly hookTimeout?: number;
799
- readonly slowTestThreshold?: number;
800
- readonly maxConcurrency?: number;
801
- readonly maxWorkers?: number;
802
- readonly isolate?: boolean;
803
- readonly bail?: number;
804
- readonly globals?: boolean;
805
- readonly fileParallelism?: boolean;
806
- readonly sequenceSeed?: number;
807
- readonly coverageProvider?: string;
808
- }
809
- /** @public */
810
- interface TestRunInput {
811
- readonly invocationId: string;
812
- readonly project: string;
813
- readonly settingsHash: string;
814
- readonly timestamp: string;
815
- readonly commitSha: string | null;
816
- readonly branch: string | null;
817
- readonly reason: "passed" | "failed" | "interrupted";
818
- readonly duration: number;
819
- readonly total: number;
820
- readonly passed: number;
821
- readonly failed: number;
822
- readonly skipped: number;
823
- readonly scoped: boolean;
824
- readonly snapshotAdded?: number;
825
- readonly snapshotMatched?: number;
826
- readonly snapshotUnmatched?: number;
827
- readonly snapshotUpdated?: number;
828
- readonly snapshotUnchecked?: number;
829
- readonly snapshotTotal?: number;
830
- readonly snapshotFailure?: boolean;
831
- readonly snapshotDidUpdate?: boolean;
832
- readonly snapshotFilesAdded?: number;
833
- readonly snapshotFilesRemoved?: number;
834
- readonly snapshotFilesUnmatched?: number;
835
- readonly snapshotFilesUpdated?: number;
836
- /**
837
- * Attribution columns added by the agent-agnostic taxonomy work. The
838
- * reporter walks env vars / session map to populate these; un-attributed
839
- * runs default to actor_type='system' and NULL agent/conversation ids.
840
- */
841
- readonly actorType?: "agent" | "user" | "system";
842
- readonly agentId?: string | null;
843
- readonly conversationId?: string | null;
844
- /**
845
- * Git context the run executed against. NULL for non-git workspaces.
846
- */
847
- readonly gitBranch?: string | null;
848
- readonly gitCommitSha?: string | null;
849
- readonly gitDirty?: boolean | null;
850
- readonly gitUpstream?: string | null;
851
- readonly gitWorktreeDir?: string | null;
852
- /**
853
- * Host metadata probe result (terminal pane, CI runner). NULL when no
854
- * probe in the priority chain matched.
855
- * @public
856
- */
857
- readonly hostSource?: string | null;
858
- readonly hostValue?: string | null;
859
- readonly hostMetadata?: Record<string, unknown> | null;
860
- }
861
- /** @public */
862
- interface ModuleInput {
863
- readonly fileId: number;
864
- readonly relativeModuleId: string;
865
- readonly state: string;
866
- readonly duration?: number;
867
- readonly environmentSetupDuration?: number;
868
- readonly prepareDuration?: number;
869
- readonly collectDuration?: number;
870
- readonly setupDuration?: number;
871
- readonly heap?: number;
872
- }
873
- /** @public */
874
- interface TestCaseInput {
875
- readonly suiteId?: number;
876
- readonly vitestId?: string;
877
- readonly name: string;
878
- readonly fullName: string;
879
- readonly state: string;
880
- readonly classification?: string;
881
- readonly duration?: number;
882
- readonly startTime?: number;
883
- readonly flaky?: boolean;
884
- readonly slow?: boolean;
885
- readonly retryCount?: number;
886
- readonly repeatCount?: number;
887
- readonly heap?: number;
888
- readonly mode?: string;
889
- readonly each?: boolean;
890
- readonly fails?: boolean;
891
- readonly concurrent?: boolean;
892
- readonly shuffle?: boolean;
893
- readonly timeout?: number;
894
- readonly skipNote?: string;
895
- readonly locationLine?: number;
896
- readonly locationColumn?: number;
897
- readonly tags?: readonly string[];
898
- /**
899
- * FK to `turns(id)`. Set by the reporter when the test case row was
900
- * authored within a recorded turn (D2 binding rule 1).
901
- * @public
902
- */
903
- readonly createdTurnId?: number;
904
- }
905
- /** @public */
906
- interface StackFrameInput {
907
- readonly ordinal: number;
908
- readonly method: string | null;
909
- readonly filePath: string;
910
- readonly line: number;
911
- readonly col: number;
912
- readonly sourceMappedLine?: number;
913
- readonly functionBoundaryLine?: number;
914
- }
915
- /** @public */
916
- interface TestErrorInput {
917
- readonly testCaseId?: number;
918
- readonly testSuiteId?: number;
919
- readonly moduleId?: number;
920
- readonly scope: "test" | "suite" | "module" | "unhandled";
921
- readonly name?: string;
922
- readonly message: string;
923
- readonly diff?: string;
924
- readonly actual?: string;
925
- readonly expected?: string;
926
- readonly stack?: string;
927
- readonly causeErrorId?: number;
928
- readonly signatureHash?: string;
929
- readonly frames?: ReadonlyArray<StackFrameInput>;
930
- readonly ordinal?: number;
931
- }
932
- /** @public */
933
- interface TestAttachmentInput {
934
- readonly contentType?: string;
935
- /** Post-resolution path under `.vitest/attachments/`, or an http(s) URL. */
936
- readonly path?: string;
937
- /** Inline body; persisted only when `byteSize` is under the 64 KiB cap. */
938
- readonly body?: string;
939
- /** How to read `body`. Vitest treats a string body as base64 unless `"utf-8"`. */
940
- readonly bodyEncoding?: "base64" | "utf-8";
941
- readonly byteSize: number;
942
- }
943
- /** @public */
944
- interface TestAnnotationInput {
945
- readonly testCaseId: number;
946
- /** Arbitrary Vitest annotation type -- not an enum. */
947
- readonly type: string;
948
- readonly message: string;
949
- readonly locationFile?: string;
950
- readonly locationLine?: number;
951
- readonly locationColumn?: number;
952
- readonly attachments?: ReadonlyArray<TestAttachmentInput>;
953
- }
954
- /** @public */
955
- interface TestArtifactInput {
956
- readonly testCaseId: number;
957
- /** `pkg:name`; `internal:` types are Vitest's own and are never written. */
958
- readonly type: string;
959
- readonly message?: string;
960
- /** JSON of the artifact's custom fields, minus attachments and location. */
961
- readonly data?: string;
962
- readonly locationFile?: string;
963
- readonly locationLine?: number;
964
- readonly locationColumn?: number;
965
- readonly attachments?: ReadonlyArray<TestAttachmentInput>;
966
- }
967
- /** @public */
968
- interface FileCoverageInput {
969
- readonly fileId: number;
970
- readonly statements: number;
971
- readonly branches: number;
972
- readonly functions: number;
973
- readonly lines: number;
974
- readonly uncoveredLines?: string;
975
- /**
976
- * Coverage tier this row represents. `'below_threshold'` is the
977
- * build-failing tier (file falls below the configured minimum
978
- * coverage thresholds). `'below_target'` is the warning tier (file
979
- * is above thresholds but below the aspirational target).
980
- *
981
- * Defaults to `'below_threshold'` when omitted, matching the only
982
- * tier that existed before migration 0005.
983
- * @public
984
- */
985
- readonly tier?: "below_threshold" | "below_target";
986
- }
987
- /** @public */
988
- interface SuiteInput {
989
- readonly parentSuiteId?: number;
990
- readonly name: string;
991
- readonly fullName: string;
992
- readonly state: "pending" | "passed" | "failed" | "skipped";
993
- readonly mode?: "run" | "only" | "skip" | "todo";
994
- readonly concurrent?: boolean;
995
- readonly shuffle?: boolean;
996
- readonly retry?: number;
997
- readonly repeats?: number;
998
- readonly locationLine?: number;
999
- readonly locationColumn?: number;
1000
- }
1001
- /** @public */
1002
- interface NoteInput {
1003
- readonly title: string;
1004
- readonly content: string;
1005
- readonly scope: "global" | "project" | "module" | "suite" | "test" | "note";
1006
- readonly project?: string;
1007
- readonly testFullName?: string;
1008
- readonly modulePath?: string;
1009
- readonly parentNoteId?: number;
1010
- readonly createdBy?: string;
1011
- readonly expiresAt?: string;
1012
- readonly pinned?: boolean;
1013
- }
1014
- /** @public */
1015
- interface SessionInput {
1016
- readonly chatId: string;
1017
- readonly project: string;
1018
- readonly cwd: string;
1019
- readonly agentKind: "main" | "subagent";
1020
- readonly agentType?: string;
1021
- readonly parentSessionId?: number;
1022
- readonly triageWasNonEmpty?: boolean;
1023
- readonly startedAt: string;
1024
- /**
1025
- * Canonical conversation UUID this session belongs to (issue #144).
1026
- * Set once at INSERT time — `sessions.conversation_id` is immutable
1027
- * thereafter (see the `trg_sessions_conv_id_immutable` trigger), so
1028
- * omit it here rather than trying to backfill via an update.
1029
- */
1030
- readonly conversationId?: string;
1031
- }
1032
- /** @public */
1033
- interface TurnInput {
1034
- readonly sessionId: number;
1035
- /** When omitted, writeTurn computes MAX(turnNo) + 1 for the session. */
1036
- readonly turnNo?: number;
1037
- readonly type: "user_prompt" | "tool_call" | "tool_result" | "file_edit" | "hook_fire" | "note" | "hypothesis";
1038
- readonly payload: string;
1039
- readonly occurredAt: string;
1040
- }
1041
- /** @public */
1042
- interface FailureSignatureWriteInput {
1043
- readonly signatureHash: string;
1044
- readonly runId: number;
1045
- readonly seenAt: string;
1046
- }
1047
- /** @public */
1048
- interface HypothesisInput {
1049
- readonly sessionId: number;
1050
- readonly content: string;
1051
- readonly createdTurnId?: number;
1052
- readonly citedTestErrorId?: number;
1053
- readonly citedStackFrameId?: number;
1054
- }
1055
- /** @public */
1056
- interface ValidateHypothesisInput {
1057
- readonly id: number;
1058
- readonly outcome: "confirmed" | "refuted" | "abandoned";
1059
- readonly validatedTurnId?: number;
1060
- readonly validatedAt: string;
1061
- }
1062
- /** @public */
1063
- interface IdempotentResponseInput {
1064
- readonly procedurePath: string;
1065
- readonly key: string;
1066
- readonly resultJson: string;
1067
- readonly createdAt: string;
1068
- }
1069
- /** @public */
1070
- interface TddTaskInput {
1071
- readonly sessionId: number;
1072
- readonly goal: string;
1073
- readonly startedAt: string;
1074
- readonly parentTddTaskId?: number;
1075
- readonly runId?: string;
1076
- }
1077
- /** @public */
1078
- interface EndTddTaskInput {
1079
- readonly id: number;
1080
- readonly endedAt: string;
1081
- readonly outcome: "succeeded" | "blocked" | "abandoned";
1082
- readonly summaryNoteId?: number;
1083
- }
1084
- /** @public */
1085
- interface WriteTddPhaseInput {
1086
- readonly tddTaskId: number;
1087
- readonly behaviorId?: number;
1088
- readonly phase: Phase;
1089
- readonly startedAt: string;
1090
- readonly transitionReason?: string;
1091
- readonly parentPhaseId?: number;
1092
- }
1093
- /** @public */
1094
- interface WriteTddPhaseOutput {
1095
- readonly id: number;
1096
- readonly previousPhaseId: number | null;
1097
- }
1098
- /** @public */
1099
- interface WriteTddArtifactInput {
1100
- readonly phaseId: number;
1101
- readonly artifactKind: ArtifactKind;
1102
- readonly fileId?: number;
1103
- readonly testCaseId?: number;
1104
- readonly testRunId?: number;
1105
- readonly testFirstFailureRunId?: number;
1106
- readonly diffExcerpt?: string;
1107
- readonly recordedAt: string;
1108
- /** Issue #363: explicit suite marker. Defaults to `"vitest"` when omitted. */
1109
- readonly suite?: ArtifactSuite;
1110
- }
1111
- /** @public */
1112
- interface WriteCommitInput {
1113
- readonly sha: string;
1114
- readonly parentSha?: string;
1115
- readonly message?: string;
1116
- readonly author?: string;
1117
- readonly committedAt?: string;
1118
- readonly branch?: string;
1119
- }
1120
- /** @public */
1121
- type ChangeKind = "added" | "modified" | "deleted" | "renamed" | "untracked-modified";
1122
- /** @public */
1123
- interface RunChangedFile {
1124
- readonly filePath: string;
1125
- readonly changeKind: ChangeKind;
1126
- readonly commitSha?: string;
1127
- }
1128
- /** @public */
1129
- interface WriteRunChangedFilesInput {
1130
- readonly runId: number;
1131
- readonly files: ReadonlyArray<RunChangedFile>;
1132
- }
1133
- /** @public */
1134
- type RunInvocationMethod = "bash" | "mcp" | "cli";
1135
- /**
1136
- * Input to `DataStore.registerAgent`.
1137
- *
1138
- * `sessionId` is the FK to `sessions.id` (integer PK), NOT the host's
1139
- * chat UUID string. Callers that hold only the chat UUID must resolve
1140
- * it through `getSessionByChatId` first.
1141
- *
1142
- * `idempotencyKey` is pre-derived by the caller via
1143
- * `deriveIdempotencyKey(...)` — both the sidecar CLI and the MCP
1144
- * server compute it the same way so a hook retry collapses to the
1145
- * same row.
1146
- * @public
1147
- */
1148
- interface RegisterAgentInput {
1149
- readonly sessionId: number;
1150
- readonly agentType: string;
1151
- readonly parentAgentId: string | null;
1152
- readonly conversationId: string | null;
1153
- readonly startedAt: number;
1154
- readonly startGitBranch?: string;
1155
- readonly startGitCommitSha?: string;
1156
- readonly startWorktreeDir?: string;
1157
- readonly idempotencyKey: string;
1158
- /**
1159
- * Pre-allocated `agents.agent_id` UUID. The sidecar passes
1160
- * `PerClientSessionMapWriter.mapSession()`'s `main_agent_id` here so
1161
- * the per-project `agents` row and the per-client session_map row
1162
- * agree on a single canonical id — the same value the SessionStart
1163
- * hook exports as `VITEST_AGENT_MAIN_AGENT_ID` / `_AGENT_ID`. When
1164
- * omitted, the implementation generates a fresh UUID (used by tests
1165
- * and any caller without a session map).
1166
- */
1167
- readonly agentId?: string;
1168
- }
1169
- /** @public */
1170
- interface AssociateRunSessionInput {
1171
- readonly chatId: string;
1172
- readonly invocationMethod: RunInvocationMethod;
1173
- }
1174
- declare const DataStore_base: Context.ServiceClass<DataStore, "vitest-agent/DataStore", {
1175
- readonly writeSettings: (hash: string, settings: SettingsInput, envVars: Record<string, string>) => Effect.Effect<void, DataStoreError>;
1176
- readonly writeRun: (input: TestRunInput) => Effect.Effect<number, DataStoreError>;
1177
- readonly writeModules: (runId: number, modules: ReadonlyArray<ModuleInput>) => Effect.Effect<ReadonlyArray<number>, DataStoreError>;
1178
- readonly writeSuites: (moduleId: number, suites: ReadonlyArray<SuiteInput>) => Effect.Effect<ReadonlyArray<number>, DataStoreError>;
1179
- readonly writeTestCases: (moduleId: number, tests: ReadonlyArray<TestCaseInput>) => Effect.Effect<ReadonlyArray<number>, DataStoreError>;
1180
- readonly writeErrors: (runId: number, errors: ReadonlyArray<TestErrorInput>) => Effect.Effect<void, DataStoreError>;
1181
- /**
1182
- * Persist `context.annotate` notes and their attachment descriptors.
1183
- * `runId` is carried for log correlation only -- `test_annotations`
1184
- * rows are reachable through `test_cases`.
1185
- */
1186
- readonly writeAnnotations: (runId: number, annotations: ReadonlyArray<TestAnnotationInput>) => Effect.Effect<void, DataStoreError>;
1187
- /**
1188
- * Persist `recordArtifact` payloads and their attachment
1189
- * descriptors. `runId` is carried for log correlation only.
1190
- */
1191
- readonly writeArtifacts: (runId: number, artifacts: ReadonlyArray<TestArtifactInput>) => Effect.Effect<void, DataStoreError>;
1192
- readonly writeCoverage: (runId: number, coverage: ReadonlyArray<FileCoverageInput>) => Effect.Effect<void, DataStoreError>;
1193
- readonly writeHistory: (project: string, fullName: string, modulePath: string, runId: number, timestamp: string, state: string, duration: number | null, flaky: boolean, retryCount: number, errorMessage: string | null) => Effect.Effect<void, DataStoreError>;
1194
- readonly writeBaselines: (baselines: CoverageBaselines) => Effect.Effect<void, DataStoreError>;
1195
- /**
1196
- * Persist the resolved (enforced) Vitest `coverage.thresholds` for the
1197
- * current run, distinct from the ratcheted `coverage_baselines` rows.
1198
- * Stored under `kind='threshold'`. See issue #237.
1199
- */
1200
- readonly writeThresholds: (thresholds: ResolvedThresholds) => Effect.Effect<void, DataStoreError>;
1201
- /**
1202
- * Persist the resolved aspirational `coverageTargets` for the current
1203
- * run, distinct from the ratcheted `coverage_baselines` rows. Stored
1204
- * under `kind='target'`. See issue #237.
1205
- */
1206
- readonly writeTargets: (targets: ResolvedThresholds) => Effect.Effect<void, DataStoreError>;
1207
- readonly writeTrends: (project: string, runId: number, entry: TrendEntry) => Effect.Effect<void, DataStoreError>;
1208
- readonly writeSourceMap: (sourceFilePath: string, testModuleId: number, mappingType: string) => Effect.Effect<void, DataStoreError>;
1209
- readonly ensureFile: (filePath: string) => Effect.Effect<number, DataStoreError>;
1210
- readonly writeNote: (note: NoteInput) => Effect.Effect<number, DataStoreError>;
1211
- readonly updateNote: (id: number, fields: Partial<NoteInput>) => Effect.Effect<void, DataStoreError>;
1212
- readonly deleteNote: (id: number) => Effect.Effect<void, DataStoreError>;
1213
- readonly writeSession: (input: SessionInput) => Effect.Effect<number, DataStoreError>;
1214
- /**
1215
- * Idempotent variant of `writeSession`: if a row with this
1216
- * `chat_id` already exists, return its id and leave the stored
1217
- * fields untouched; otherwise insert a new row. Used by
1218
- * hook-triggered recording paths (artifacts, turns) that fire
1219
- * for sessions whose original `SessionStart` may have missed —
1220
- * e.g. when Claude Code rotates `chat_id` mid-window after a
1221
- * continuation or compaction. Race-safe via
1222
- * `INSERT ... ON CONFLICT DO NOTHING`.
1223
- */
1224
- readonly upsertSession: (input: SessionInput) => Effect.Effect<number, DataStoreError>;
1225
- /**
1226
- * Backfill `sessions.conversation_id` for a row that was inserted
1227
- * before the canonical conversation id was known (issue #144) —
1228
- * `record session-start` always precedes `register-agent`, so the
1229
- * session row exists first. Race-safe and idempotent: the UPDATE's
1230
- * `WHERE conversation_id IS NULL` guard means a session that
1231
- * already carries a value is left untouched (zero rows affected),
1232
- * matching the trigger's null→value-only relaxation rather than
1233
- * risking an immutability-violation error on a redundant call.
1234
- */
1235
- readonly setSessionConversationIdIfNull: (input: {
1236
- readonly sessionId: number;
1237
- readonly conversationId: string;
1238
- }) => Effect.Effect<void, DataStoreError>;
1239
- readonly writeTurn: (input: TurnInput) => Effect.Effect<number, DataStoreError>;
1240
- readonly writeFailureSignature: (input: FailureSignatureWriteInput) => Effect.Effect<void, DataStoreError>;
1241
- readonly endSession: (chatId: string, endedAt: string, endReason: string | null) => Effect.Effect<void, DataStoreError>;
1242
- readonly writeHypothesis: (input: HypothesisInput) => Effect.Effect<number, DataStoreError>;
1243
- readonly validateHypothesis: (input: ValidateHypothesisInput) => Effect.Effect<void, DataStoreError>;
1244
- readonly writeTddTask: (input: TddTaskInput) => Effect.Effect<number, DataStoreError>;
1245
- readonly endTddTask: (input: EndTddTaskInput) => Effect.Effect<void, DataStoreError>;
1246
- readonly createGoal: (input: CreateGoalInput) => Effect.Effect<GoalRow, DataStoreError | TddTaskNotFoundError | TddTaskAlreadyEndedError>;
1247
- readonly getGoal: (id: number) => Effect.Effect<Option.Option<GoalRow>, DataStoreError>;
1248
- readonly updateGoal: (input: UpdateGoalInput) => Effect.Effect<GoalRow, DataStoreError | GoalNotFoundError | TddTaskAlreadyEndedError | IllegalStatusTransitionError>;
1249
- readonly deleteGoal: (id: number) => Effect.Effect<void, DataStoreError | GoalNotFoundError>;
1250
- readonly listGoalsByTddTask: (tddTaskId: number) => Effect.Effect<ReadonlyArray<GoalRow>, DataStoreError | TddTaskNotFoundError>;
1251
- readonly createBehavior: (input: CreateBehaviorInput) => Effect.Effect<BehaviorRow, DataStoreError | GoalNotFoundError | BehaviorNotFoundError | TddTaskAlreadyEndedError | IllegalStatusTransitionError>;
1252
- readonly getBehavior: (id: number) => Effect.Effect<Option.Option<BehaviorRow>, DataStoreError>;
1253
- readonly updateBehavior: (input: UpdateBehaviorInput) => Effect.Effect<BehaviorRow, DataStoreError | BehaviorNotFoundError | TddTaskAlreadyEndedError | IllegalStatusTransitionError>;
1254
- readonly deleteBehavior: (id: number) => Effect.Effect<void, DataStoreError | BehaviorNotFoundError>;
1255
- readonly listBehaviorsByGoal: (goalId: number) => Effect.Effect<ReadonlyArray<BehaviorRow>, DataStoreError | GoalNotFoundError>;
1256
- readonly listBehaviorsByTddTask: (tddTaskId: number) => Effect.Effect<ReadonlyArray<BehaviorRow>, DataStoreError | TddTaskNotFoundError>;
1257
- readonly writeTddPhase: (input: WriteTddPhaseInput) => Effect.Effect<WriteTddPhaseOutput, DataStoreError>;
1258
- readonly writeTddArtifact: (input: WriteTddArtifactInput) => Effect.Effect<number, DataStoreError>;
1259
- readonly writeCommit: (input: WriteCommitInput) => Effect.Effect<void, DataStoreError>;
1260
- readonly writeRunChangedFiles: (input: WriteRunChangedFilesInput) => Effect.Effect<void, DataStoreError>;
1261
- readonly recordIdempotentResponse: (input: IdempotentResponseInput) => Effect.Effect<void, DataStoreError>;
1262
- readonly pruneSessions: (keepRecent: number) => Effect.Effect<{
1263
- readonly affectedSessions: number;
1264
- readonly prunedTurns: number;
1265
- }, DataStoreError>;
1266
- readonly associateLatestRunWithSession: (input: AssociateRunSessionInput) => Effect.Effect<void, DataStoreError>;
1267
- readonly backfillTestCaseTurns: (chatId: string) => Effect.Effect<number, DataStoreError>;
1268
- /**
1269
- * Idempotently insert an `agents` row.
1270
- *
1271
- * Returns `Agent` on a fresh insert, or `IdempotencyHit` carrying
1272
- * the existing `agentId` when the `(session_id, idempotency_key)`
1273
- * UNIQUE constraint already has a row. The caller treats the latter
1274
- * as a successful recovery (same logical agent), not an error.
1275
- *
1276
- * Fails with `RegistrationConflictError` when the supplied
1277
- * `parentAgentId` references an agent in a different session, or
1278
- * when no such agent exists. Surface to the caller for true
1279
- * mis-configuration cases; idempotency hits never produce this.
1280
- */
1281
- readonly registerAgent: (input: RegisterAgentInput) => Effect.Effect<Agent | IdempotencyHit, RegistrationConflictError | DataStoreError>;
1282
- /**
1283
- * Mark an agent as ended. Sets `agents.ended_at` to the supplied
1284
- * timestamp. Fails with `AgentNotFoundError` when no row exists.
1285
- */
1286
- readonly endAgent: (agentId: string, endedAt: number) => Effect.Effect<void, AgentNotFoundError | DataStoreError>;
1287
- }>;
1288
- /** @public */
1289
- export declare class DataStore extends DataStore_base {}
1290
- //#endregion
1291
- //#region src/services/DataReader.d.ts
1292
- /** @public */
1293
- interface ProjectRunSummary {
1294
- readonly project: string;
1295
- readonly lastRun: string | null;
1296
- readonly lastResult: "passed" | "failed" | "interrupted" | null;
1297
- readonly total: number;
1298
- readonly passed: number;
1299
- readonly failed: number;
1300
- readonly skipped: number;
1301
- }
1302
- /** @public */
1303
- interface FlakyTest {
1304
- readonly fullName: string;
1305
- readonly modulePath: string;
1306
- readonly project: string;
1307
- readonly passCount: number;
1308
- readonly failCount: number;
1309
- readonly lastState: "passed" | "failed";
1310
- readonly lastTimestamp: string;
1311
- }
1312
- /** @public */
1313
- interface PersistentFailure {
1314
- readonly fullName: string;
1315
- readonly modulePath: string;
1316
- readonly project: string;
1317
- readonly consecutiveFailures: number;
1318
- readonly firstFailedAt: string;
1319
- readonly lastFailedAt: string;
1320
- readonly lastErrorMessage: string | null;
1321
- }
1322
- /** @public */
1323
- interface TestError {
1324
- /** `test_errors.id` — required by `hypothesis (action: record).citedTestErrorId`. */
1325
- readonly id: number;
1326
- /**
1327
- * `stack_frames.id` for the top frame of this error (ordinal 0), or
1328
- * `null` if no frames were captured. Required by
1329
- * `hypothesis (action: record).citedStackFrameId`.
1330
- */
1331
- readonly topStackFrameId: number | null;
1332
- readonly name: string | null;
1333
- readonly message: string;
1334
- readonly diff: string | null;
1335
- readonly actual: string | null;
1336
- readonly expected: string | null;
1337
- readonly stack: string | null;
1338
- readonly scope: "test" | "suite" | "module" | "unhandled";
1339
- readonly testFullName: string | null;
1340
- readonly moduleFile: string | null;
1341
- }
1342
- /** @public */
1343
- interface NoteRow {
1344
- readonly id: number;
1345
- readonly title: string;
1346
- readonly content: string;
1347
- readonly scope: "global" | "project" | "module" | "suite" | "test" | "note";
1348
- readonly project: string | null;
1349
- readonly testFullName: string | null;
1350
- readonly modulePath: string | null;
1351
- readonly parentNoteId: number | null;
1352
- readonly createdBy: string | null;
1353
- readonly expiresAt: string | null;
1354
- readonly pinned: boolean;
1355
- readonly createdAt: string;
1356
- readonly updatedAt: string;
1357
- }
1358
- /** @public */
1359
- interface SettingsRow {
1360
- readonly hash: string;
1361
- readonly reporters: string | null;
1362
- readonly coverageEnabled: boolean;
1363
- readonly coverageProvider: string | null;
1364
- readonly coverageThresholds: string | null;
1365
- readonly coverageTargets: string | null;
1366
- readonly pool: string | null;
1367
- readonly shard: string | null;
1368
- readonly project: string | null;
1369
- readonly environment: string | null;
1370
- readonly envVars: Record<string, string>;
1371
- readonly capturedAt: string;
1372
- }
1373
- /** @public */
1374
- interface TestListEntry {
1375
- readonly id: number;
1376
- readonly fullName: string;
1377
- readonly state: string;
1378
- readonly duration: number | null;
1379
- readonly module: string;
1380
- readonly classification: string | null;
1381
- }
1382
- /** @public */
1383
- interface ModuleListEntry {
1384
- readonly id: number;
1385
- readonly file: string;
1386
- readonly state: string;
1387
- readonly testCount: number;
1388
- readonly duration: number | null;
1389
- }
1390
- /** @public */
1391
- interface SuiteListEntry {
1392
- readonly id: number;
1393
- readonly name: string;
1394
- readonly module: string;
1395
- readonly state: string;
1396
- readonly testCount: number;
1397
- }
1398
- /** @public */
1399
- interface SettingsListEntry {
1400
- readonly hash: string;
1401
- readonly capturedAt: string;
1402
- }
1403
- /** @public */
1404
- interface SessionDetail {
1405
- readonly id: number;
1406
- readonly chatId: string;
1407
- readonly project: string;
1408
- readonly cwd: string;
1409
- readonly agentKind: "main" | "subagent";
1410
- readonly agentType: string | null;
1411
- readonly parentSessionId: number | null;
1412
- readonly triageWasNonEmpty: boolean;
1413
- readonly startedAt: string;
1414
- readonly endedAt: string | null;
1415
- readonly endReason: string | null;
1416
- /** Canonical conversation UUID this session belongs to (issue #144), null when unset. */
1417
- readonly conversationId: string | null;
1418
- }
1419
- /** @public */
1420
- interface TurnSummary {
1421
- readonly id: number;
1422
- readonly sessionId: number;
1423
- readonly turnNo: number;
1424
- readonly type: string;
1425
- readonly payload: string;
1426
- readonly occurredAt: string;
1427
- }
1428
- /** @public */
1429
- interface HistoryQueryOptions {
1430
- /** Exact `full_name` match — narrows to a single test's history. */
1431
- readonly testName?: string;
1432
- /** Exact `module_path` match — narrows to tests in one file. */
1433
- readonly modulePath?: string;
1434
- /** Max runs kept per (module_path, full_name) pair, most-recent-first. Default 20. */
1435
- readonly limit?: number;
1436
- }
1437
- /**
1438
- * Narrowing options shared by the classification reads
1439
- * (`DataReader.getFlaky` / `getPersistentFailures`). Mirrors the
1440
- * `testName` / `modulePath` half of {@link HistoryQueryOptions} so a
1441
- * caller that scoped `getHistory` to one test can scope the derived
1442
- * classifications to the same test instead of receiving the whole
1443
- * project's rows.
1444
- *
1445
- * @public
1446
- */
1447
- interface ClassificationQueryOptions {
1448
- /** Exact `full_name` match — narrows to a single test's classification. */
1449
- readonly testName?: string;
1450
- /** Exact `module_path` match — narrows to tests in one file. */
1451
- readonly modulePath?: string;
1452
- }
1453
- /**
1454
- * Narrowing options for `DataReader.getTestByFullName`. A
1455
- * `full_name` is not file-qualified (Decision D20), so the same name can
1456
- * exist in more than one module; `modulePath` disambiguates.
1457
- *
1458
- * @public
1459
- */
1460
- interface TestLookupOptions {
1461
- /** Exact `module_path` match — picks one variant of an ambiguous `full_name`. */
1462
- readonly modulePath?: string;
1463
- }
1464
- /** @public */
1465
- interface TurnSearchOptions {
1466
- readonly sessionId?: number;
1467
- readonly type?: string;
1468
- readonly since?: string;
1469
- readonly limit?: number;
1470
- }
1471
- /** @public */
1472
- interface AcceptanceMetrics {
1473
- readonly phaseEvidenceIntegrity: {
1474
- total: number;
1475
- compliant: number;
1476
- ratio: number;
1477
- };
1478
- readonly complianceHookResponsiveness: {
1479
- total: number;
1480
- withFollowup: number;
1481
- ratio: number;
1482
- };
1483
- readonly orientationUsefulness: {
1484
- total: number;
1485
- referencedCount: number;
1486
- ratio: number;
1487
- };
1488
- readonly antiPatternDetectionRate: {
1489
- total: number;
1490
- cleanSessions: number;
1491
- ratio: number;
1492
- };
1493
- }
1494
- /** @public */
1495
- interface FailureSignatureDetail {
1496
- readonly signatureHash: string;
1497
- readonly firstSeenRunId: number | null;
1498
- readonly firstSeenAt: string;
1499
- readonly lastSeenAt: string | null;
1500
- readonly occurrenceCount: number;
1501
- readonly recentErrors: ReadonlyArray<{
1502
- readonly runId: number;
1503
- readonly message: string;
1504
- readonly errorName: string | null;
1505
- }>;
1506
- }
1507
- /** @public */
1508
- interface TddPhaseDetail {
1509
- readonly id: number;
1510
- readonly behaviorId: number | null;
1511
- readonly phase: string;
1512
- readonly startedAt: string;
1513
- readonly endedAt: string | null;
1514
- readonly transitionReason: string | null;
1515
- }
1516
- /** @public */
1517
- interface TddArtifactDetail {
1518
- readonly id: number;
1519
- readonly phaseId: number;
1520
- readonly artifactKind: string;
1521
- readonly testCaseId: number | null;
1522
- readonly testRunId: number | null;
1523
- readonly recordedAt: string;
1524
- }
1525
- /** @public */
1526
- interface TddTaskDetail {
1527
- readonly id: number;
1528
- readonly sessionId: number;
1529
- readonly goal: string;
1530
- readonly startedAt: string;
1531
- readonly endedAt: string | null;
1532
- readonly outcome: string | null;
1533
- readonly runId: string | null;
1534
- readonly goals: ReadonlyArray<GoalDetail>;
1535
- readonly phases: ReadonlyArray<TddPhaseDetail>;
1536
- readonly artifacts: ReadonlyArray<TddArtifactDetail>;
1537
- }
1538
- /** @public */
1539
- interface CurrentTddPhase {
1540
- readonly id: number;
1541
- readonly phase: Phase;
1542
- readonly startedAt: string;
1543
- readonly behaviorId: number | null;
1544
- }
1545
- /** @public */
1546
- interface CitedArtifactRow extends CitedArtifact {
1547
- readonly phase_id: number;
1548
- }
1549
- /** @public */
1550
- interface CommitChangesEntry {
1551
- readonly sha: string;
1552
- readonly parentSha: string | null;
1553
- readonly message: string | null;
1554
- readonly author: string | null;
1555
- readonly committedAt: string | null;
1556
- readonly branch: string | null;
1557
- readonly files: ReadonlyArray<{
1558
- readonly filePath: string;
1559
- readonly changeKind: ChangeKind;
1560
- }>;
1561
- }
1562
- /** @public */
1563
- interface HypothesisDetail {
1564
- readonly id: number;
1565
- readonly sessionId: number;
1566
- readonly content: string;
1567
- readonly citedTestErrorId: number | null;
1568
- readonly citedStackFrameId: number | null;
1569
- readonly validationOutcome: "confirmed" | "refuted" | "abandoned" | null;
1570
- readonly validatedAt: string | null;
1571
- }
1572
- /** @public */
1573
- interface TddTaskSummary {
1574
- readonly id: number;
1575
- readonly sessionId: number;
1576
- readonly goal: string;
1577
- readonly startedAt: string;
1578
- readonly endedAt: string | null;
1579
- readonly outcome: "succeeded" | "blocked" | "abandoned" | null;
1580
- }
1581
- /**
1582
- * Row shape returned by `listTddArtifactsForTask`. Carries every
1583
- * field an agent typically needs to cite an artifact in a subsequent
1584
- * `tdd_phase_transition_request` call without further lookups.
1585
- *
1586
- * @public
1587
- */
1588
- interface TddArtifactRow {
1589
- readonly id: number;
1590
- readonly tddTaskId: number;
1591
- readonly phaseId: number;
1592
- readonly phaseName: Phase;
1593
- readonly artifactKind: ArtifactKind;
1594
- readonly behaviorId: number | null;
1595
- readonly testCaseId: number | null;
1596
- readonly testRunId: number | null;
1597
- readonly testFirstFailureRunId: number | null;
1598
- readonly recordedAt: string;
1599
- readonly suite: ArtifactSuite;
1600
- }
1601
- /** @public */
1602
- interface TagInventoryRow {
1603
- /** The tag name (e.g. `"int"`, `"e2e"`, `"unit"`). */
1604
- readonly tag: string;
1605
- /** The Vitest project this tag was observed in. */
1606
- readonly project: string;
1607
- /**
1608
- * Number of distinct test modules in the project's latest run that contain
1609
- * at least one test case carrying this tag.
1610
- */
1611
- readonly moduleCount: number;
1612
- /**
1613
- * Number of test cases in the project's latest run that carry this tag.
1614
- */
1615
- readonly testCount: number;
1616
- }
1617
- /** @public */
1618
- interface TestArtifactQueryOptions {
1619
- /** Disambiguates a fullName that exists in more than one module. */
1620
- readonly modulePath?: string;
1621
- }
1622
- /** @public */
1623
- interface PersistedAttachment {
1624
- readonly contentType?: string;
1625
- readonly path?: string;
1626
- readonly body?: string;
1627
- /** How to read `body`. Absent when nothing was stored inline. */
1628
- readonly bodyEncoding?: "base64" | "utf-8";
1629
- readonly byteSize: number | null;
1630
- }
1631
- /** @public */
1632
- interface TestAnnotationRow {
1633
- readonly id: number;
1634
- readonly type: string;
1635
- readonly message: string;
1636
- readonly location?: {
1637
- readonly file: string;
1638
- readonly line: number;
1639
- readonly column: number;
1640
- };
1641
- readonly attachments: ReadonlyArray<PersistedAttachment>;
1642
- }
1643
- /** @public */
1644
- interface TestArtifactRow {
1645
- readonly id: number;
1646
- readonly type: string;
1647
- readonly message: string | null;
1648
- readonly data: string | null;
1649
- readonly location?: {
1650
- readonly file: string;
1651
- readonly line: number;
1652
- readonly column: number;
1653
- };
1654
- readonly attachments: ReadonlyArray<PersistedAttachment>;
1655
- }
1656
- declare const DataReader_base: Context.ServiceClass<DataReader, "vitest-agent/DataReader", {
1657
- readonly getLatestRun: (project: string) => Effect.Effect<Option.Option<AgentReport>, DataStoreError>;
1658
- readonly getRunsByProject: () => Effect.Effect<ReadonlyArray<ProjectRunSummary>, DataStoreError>;
1659
- readonly getHistory: (project: string, options?: HistoryQueryOptions) => Effect.Effect<HistoryRecord, DataStoreError>;
1660
- readonly getBaselines: (project: string) => Effect.Effect<Option.Option<CoverageBaselines>, DataStoreError>;
1661
- readonly getTrends: (project: string, limit?: number) => Effect.Effect<Option.Option<TrendRecord>, DataStoreError>;
1662
- readonly getFlaky: (project: string, options?: ClassificationQueryOptions) => Effect.Effect<ReadonlyArray<FlakyTest>, DataStoreError>;
1663
- readonly getPersistentFailures: (project: string, options?: ClassificationQueryOptions) => Effect.Effect<ReadonlyArray<PersistentFailure>, DataStoreError>;
1664
- readonly getFileCoverage: (runId: number) => Effect.Effect<ReadonlyArray<FileCoverageReport>, DataStoreError>;
1665
- readonly getCoverage: (project: string) => Effect.Effect<Option.Option<CoverageReport>, DataStoreError>;
1666
- readonly getTestsForFile: (filePath: string) => Effect.Effect<ReadonlyArray<string>, DataStoreError>;
1667
- readonly getErrors: (project: string, errorName?: string) => Effect.Effect<ReadonlyArray<TestError>, DataStoreError>;
1668
- /** Annotations recorded for a test in the project's latest run. */
1669
- readonly getAnnotationsForTest: (project: string, fullName: string, options?: TestArtifactQueryOptions) => Effect.Effect<ReadonlyArray<TestAnnotationRow>, DataStoreError>;
1670
- /** Artifacts recorded for a test in the project's latest run. */
1671
- readonly getArtifactsForTest: (project: string, fullName: string, options?: TestArtifactQueryOptions) => Effect.Effect<ReadonlyArray<TestArtifactRow>, DataStoreError>;
1672
- readonly getNotes: (scope?: string, project?: string, testFullName?: string) => Effect.Effect<ReadonlyArray<NoteRow>, DataStoreError>;
1673
- readonly getNoteById: (id: number) => Effect.Effect<Option.Option<NoteRow>, DataStoreError>;
1674
- readonly searchNotes: (query: string) => Effect.Effect<ReadonlyArray<NoteRow>, DataStoreError>;
1675
- readonly getManifest: () => Effect.Effect<Option.Option<CacheManifest>, DataStoreError>;
1676
- readonly getSettings: (hash: string) => Effect.Effect<Option.Option<SettingsRow>, DataStoreError>;
1677
- readonly getLatestSettings: () => Effect.Effect<Option.Option<SettingsRow>, DataStoreError>;
1678
- readonly getTestByFullName: (project: string, fullName: string, options?: TestLookupOptions) => Effect.Effect<Option.Option<TestListEntry>, DataStoreError>;
1679
- /**
1680
- * Every module path in the project's latest run that carries a test
1681
- * case with this exact `full_name`, ordered ascending. Length > 1
1682
- * means the name is ambiguous and callers must disambiguate with
1683
- * {@link TestLookupOptions.modulePath} rather than guess.
1684
- */
1685
- readonly getTestModulesByFullName: (project: string, fullName: string) => Effect.Effect<ReadonlyArray<string>, DataStoreError>;
1686
- readonly listTests: (project: string, options?: {
1687
- state?: string;
1688
- module?: string;
1689
- limit?: number;
1690
- }) => Effect.Effect<ReadonlyArray<TestListEntry>, DataStoreError>;
1691
- readonly listModules: (project: string) => Effect.Effect<ReadonlyArray<ModuleListEntry>, DataStoreError>;
1692
- readonly listSuites: (project: string, options?: {
1693
- module?: string;
1694
- }) => Effect.Effect<ReadonlyArray<SuiteListEntry>, DataStoreError>;
1695
- readonly listSettings: () => Effect.Effect<ReadonlyArray<SettingsListEntry>, DataStoreError>;
1696
- readonly getSessionById: (id: number) => Effect.Effect<Option.Option<SessionDetail>, DataStoreError>;
1697
- readonly getSessionByChatId: (chatId: string) => Effect.Effect<Option.Option<SessionDetail>, DataStoreError>;
1698
- /**
1699
- * Find every session row whose `chat_id` begins with `prefix`.
1700
- * Used to recover the synthetic subagent row created by the
1701
- * SubagentStart hook (`<parentChatId>-subagent-<ts>-<pid>`)
1702
- * when subsequent PostToolUse hooks fire under the bare
1703
- * parent chat_id. Returns most recent first.
1704
- */
1705
- readonly findSessionsByChatPrefix: (prefix: string) => Effect.Effect<ReadonlyArray<SessionDetail>, DataStoreError>;
1706
- /**
1707
- * Find the most-recently-started subagent session whose
1708
- * `parent_session_id` is `parentSessionId` and that has not ended
1709
- * (`ended_at IS NULL`). Used to attribute orchestrator (subagent)
1710
- * MCP writes — e.g. `hypothesis record` — to the running subagent's
1711
- * own session row instead of the parent main session, since the MCP
1712
- * server's recovered context only ever names the main agent.
1713
- */
1714
- readonly findActiveSubagentSession: (parentSessionId: number) => Effect.Effect<Option.Option<SessionDetail>, DataStoreError>;
1715
- /**
1716
- * Resolve the session a TDD task was opened under: the `sessions`
1717
- * row whose `id` equals `tdd_tasks.session_id` for `tddTaskId`.
1718
- * Returns `Option.none` when the task — or its session — does not
1719
- * exist. Lets `hypothesis (action: record)` bind a hypothesis
1720
- * deterministically from the orchestrator's unambiguous
1721
- * `tddTaskId` (returned by `tdd_task (action: start)`) instead of
1722
- * the fragile recovered host context or a caller-guessed
1723
- * `sessionId`.
1724
- */
1725
- readonly getSessionByTddTaskId: (tddTaskId: number) => Effect.Effect<Option.Option<SessionDetail>, DataStoreError>;
1726
- readonly listSessions: (options: {
1727
- readonly project?: string;
1728
- readonly agentKind?: "main" | "subagent";
1729
- readonly limit?: number;
1730
- }) => Effect.Effect<ReadonlyArray<SessionDetail>, DataStoreError>;
1731
- readonly searchTurns: (options: TurnSearchOptions) => Effect.Effect<ReadonlyArray<TurnSummary>, DataStoreError>;
1732
- readonly computeAcceptanceMetrics: () => Effect.Effect<AcceptanceMetrics, DataStoreError>;
1733
- readonly getFailureSignatureByHash: (hash: string) => Effect.Effect<Option.Option<FailureSignatureDetail>, DataStoreError>;
1734
- readonly getTddTaskById: (id: number) => Effect.Effect<Option.Option<TddTaskDetail>, DataStoreError>;
1735
- readonly getGoalById: (id: number) => Effect.Effect<Option.Option<GoalDetail>, DataStoreError>;
1736
- readonly getGoalsByTddTask: (tddTaskId: number) => Effect.Effect<ReadonlyArray<GoalDetail>, DataStoreError>;
1737
- readonly getBehaviorById: (id: number) => Effect.Effect<Option.Option<BehaviorDetail>, DataStoreError>;
1738
- readonly getBehaviorsByGoal: (goalId: number) => Effect.Effect<ReadonlyArray<BehaviorRow>, DataStoreError>;
1739
- readonly getBehaviorsByTddTask: (tddTaskId: number) => Effect.Effect<ReadonlyArray<BehaviorRow>, DataStoreError>;
1740
- readonly getBehaviorDependencies: (behaviorId: number) => Effect.Effect<ReadonlyArray<BehaviorRow>, DataStoreError>;
1741
- readonly resolveGoalIdForBehavior: (behaviorId: number) => Effect.Effect<Option.Option<number>, DataStoreError>;
1742
- readonly getCurrentTddPhase: (tddTaskId: number) => Effect.Effect<Option.Option<CurrentTddPhase>, DataStoreError>;
1743
- readonly getTddArtifactWithContext: (artifactId: number) => Effect.Effect<Option.Option<CitedArtifactRow>, DataStoreError>;
1744
- readonly getCommitChanges: (sha?: string) => Effect.Effect<ReadonlyArray<CommitChangesEntry>, DataStoreError>;
1745
- readonly listTddTasksForSession: (sessionId: number, options?: {
1746
- /**
1747
- * When true, also return tdd_tasks belonging to any
1748
- * ancestor of `sessionId` via `parent_session_id`. Used
1749
- * by hook-driven artifact recording where the
1750
- * orchestrator opened the tdd task under the parent
1751
- * main row but the subagent's own session row is the
1752
- * one carrying the calling chat_id. Default `false`
1753
- * preserves the prior single-session contract.
1754
- */
1755
- readonly walkParents?: boolean;
1756
- /**
1757
- * When true AND `sessionId`'s session has a non-null
1758
- * `conversation_id`, also return tdd_tasks belonging to
1759
- * any OTHER session sharing that `conversation_id` — the
1760
- * detached-session fallback (issue #144). A session with
1761
- * a null `conversation_id` never triggers this fallback.
1762
- * Rows are ordered so a task owned by an `agent_kind =
1763
- * 'main'` session sorts first, then by `started_at DESC`.
1764
- * Default `false` preserves the prior contract.
1765
- */
1766
- readonly walkConversation?: boolean;
1767
- }) => Effect.Effect<ReadonlyArray<TddTaskSummary>, DataStoreError>;
1768
- /**
1769
- * Diagnostic for the `missing_artifact_evidence` phase-transition
1770
- * denial (issue #144): counts `tdd_artifacts` rows recorded at or
1771
- * after `sinceIso` under sessions OTHER than the one that opened
1772
- * `tddTaskId`, but sharing that session's `conversation_id`. Used
1773
- * to tell an agent "your hooks may be attributing to a detached
1774
- * session" rather than a bare "no artifact found". Returns 0 when
1775
- * `tddTaskId` is unknown or its session's `conversation_id` is
1776
- * null — the diagnostic never fabricates a signal it cannot back.
1777
- */
1778
- readonly countRecentArtifactsInOtherSessionsOfConversation: (input: {
1779
- readonly tddTaskId: number;
1780
- readonly sinceIso: string;
1781
- }) => Effect.Effect<number, DataStoreError>;
1782
- /**
1783
- * List artifacts recorded for a TDD task, optionally filtered
1784
- * by `artifactKind`, `phaseId`, or `behaviorId`. Returns rows in
1785
- * recorded_at DESC order so the most recently captured artifact
1786
- * (the typical citation target for a phase transition) appears
1787
- * first. `limit` defaults to 50.
1788
- */
1789
- readonly listTddArtifactsForTask: (input: {
1790
- readonly tddTaskId: number;
1791
- readonly artifactKind?: ArtifactKind;
1792
- readonly phaseId?: number;
1793
- readonly behaviorId?: number;
1794
- readonly limit?: number;
1795
- }) => Effect.Effect<ReadonlyArray<TddArtifactRow>, DataStoreError>;
1796
- readonly listHypotheses: (options: {
1797
- readonly sessionId?: number;
1798
- readonly outcome?: "confirmed" | "refuted" | "abandoned" | "open";
1799
- readonly limit?: number;
1800
- }) => Effect.Effect<ReadonlyArray<HypothesisDetail>, DataStoreError>;
1801
- readonly findIdempotentResponse: (procedurePath: string, key: string) => Effect.Effect<Option.Option<string>, DataStoreError>;
1802
- readonly getLatestTestCaseForSession: (chatId: string) => Effect.Effect<Option.Option<number>, DataStoreError>;
1803
- /**
1804
- * Returns one `TagInventoryRow` per `(tag, project)` pair observed in
1805
- * each project's latest test run. When `project` is supplied, results
1806
- * are restricted to that project's latest run.
1807
- */
1808
- readonly listTagInventory: (options?: {
1809
- readonly project?: string;
1810
- }) => Effect.Effect<ReadonlyArray<TagInventoryRow>, DataStoreError>;
1811
- /**
1812
- * Returns every `TestListEntry` from the latest run of each project
1813
- * (or the specified project) whose test case carries `tag`.
1814
- */
1815
- readonly listTestsForTag: (tag: string, options?: {
1816
- readonly project?: string;
1817
- }) => Effect.Effect<ReadonlyArray<TestListEntry>, DataStoreError>;
1818
- }>;
1819
- /** @public */
1820
- export declare class DataReader extends DataReader_base {}
1821
- //#endregion
1822
- //#region src/migrations/index.d.ts
1823
- /**
1824
- * Every migration that must run against a per-project `data.db`, keyed by
1825
- * migration id in application order.
1826
- *
1827
- * This is the single source of truth for the project database's migration
1828
- * set: `ensureMigrated`, the sdk testing layer, `ReporterLive`, `McpLive`,
1829
- * `CliLive` and `SidecarLive` all pass it straight to
1830
- * `SqliteMigrator.fromRecord`, so adding a migration file and registering it
1831
- * here is enough to reach every process that opens a project database.
1832
- *
1833
- * The session-map and discovery-registry databases are separate schemas with
1834
- * their own migrations and are deliberately not listed here.
1835
- *
1836
- * @public
1837
- */
1838
- export declare const PROJECT_MIGRATIONS: {
1839
- readonly "0001_initial": import("effect/Effect").Effect<void, import("effect/unstable/sql/SqlError").SqlError, import("effect/unstable/sql/SqlClient").SqlClient>;
1840
- readonly "0002_test_artifacts": import("effect/Effect").Effect<void, import("effect/unstable/sql/SqlError").SqlError, import("effect/unstable/sql/SqlClient").SqlClient>;
1841
- };
1842
- //#endregion
1843
- //#region src/testing/layers.d.ts
1844
- /** @public */
1845
- export declare function makeTestLayer(filename: string): Layer.Layer<DataReader | DataStore | import("effect/unstable/sql/SqlClient").SqlClient | import("@effect/sql-sqlite-node/SqliteClient").SqliteClient | NodeServices.NodeServices, SqliteMigrator.MigrationError | import("effect/unstable/sql/SqlError").SqlError, never>;
1846
- /** @public */
1847
- export declare const DataStoreTestLayer: Layer.Layer<DataReader | DataStore | import("effect/unstable/sql/SqlClient").SqlClient | import("@effect/sql-sqlite-node/SqliteClient").SqliteClient | NodeServices.NodeServices, SqliteMigrator.MigrationError | import("effect/unstable/sql/SqlError").SqlError, never>;
1848
- //#endregion
1849
- //#region src/testing/index.d.ts
1850
- /** @public */
1851
- export declare function empty(filename: string): Layer.Layer<DataReader | DataStore | import("effect/unstable/sql/SqlClient").SqlClient | import("@effect/sql-sqlite-node/SqliteClient").SqliteClient | import("@effect/platform-node/NodeServices").NodeServices, import("@effect/sql-sqlite-node/SqliteMigrator").MigrationError | import("effect/unstable/sql/SqlError").SqlError, never>;
1852
- /** @public */
1853
- export declare function singlePassingRun(filename: string): Layer.Layer<DataReader | DataStore | import("effect/unstable/sql/SqlClient").SqlClient | import("@effect/sql-sqlite-node/SqliteClient").SqliteClient | import("@effect/platform-node/NodeServices").NodeServices, DataStoreError | import("@effect/sql-sqlite-node/SqliteMigrator").MigrationError | import("effect/unstable/sql/SqlError").SqlError, never>;
1854
- /** @public */
1855
- export declare function withFailures(filename: string): Layer.Layer<DataReader | DataStore | import("effect/unstable/sql/SqlClient").SqlClient | import("@effect/sql-sqlite-node/SqliteClient").SqliteClient | import("@effect/platform-node/NodeServices").NodeServices, DataStoreError | import("@effect/sql-sqlite-node/SqliteMigrator").MigrationError | import("effect/unstable/sql/SqlError").SqlError, never>;
1856
- /** @public */
1857
- export declare function flaky(filename: string): Layer.Layer<DataReader | DataStore | import("effect/unstable/sql/SqlClient").SqlClient | import("@effect/sql-sqlite-node/SqliteClient").SqliteClient | import("@effect/platform-node/NodeServices").NodeServices, DataStoreError | import("@effect/sql-sqlite-node/SqliteMigrator").MigrationError | import("effect/unstable/sql/SqlError").SqlError, never>;
1858
- /** @public */
1859
- export declare function withTddTask(filename: string): Layer.Layer<DataReader | DataStore | import("effect/unstable/sql/SqlClient").SqlClient | import("@effect/sql-sqlite-node/SqliteClient").SqliteClient | import("@effect/platform-node/NodeServices").NodeServices, BehaviorNotFoundError | DataStoreError | GoalNotFoundError | IllegalStatusTransitionError | import("@effect/sql-sqlite-node/SqliteMigrator").MigrationError | import("effect/unstable/sql/SqlError").SqlError | TddTaskAlreadyEndedError | TddTaskNotFoundError, never>;
1860
- //#endregion
1861
- export type { AcceptanceMetrics, ArtifactKind, ArtifactSuite, AssociateRunSessionInput, ChangeKind, CitedArtifact, CitedArtifactRow, ClassificationQueryOptions, CommitChangesEntry, CreateBehaviorInput, CreateGoalInput, CurrentTddPhase, EndTddTaskInput, FailureSignatureDetail, FailureSignatureWriteInput, FileCoverageInput, FlakyTest, HistoryQueryOptions, HypothesisDetail, HypothesisInput, IdempotentResponseInput, IllegalStatusTransitionEntity, ModuleInput, ModuleListEntry, NoteInput, NoteRow, PersistedAttachment, PersistentFailure, Phase, ProjectRunSummary, RegisterAgentInput, ResolvedThresholds, RunChangedFile, RunInvocationMethod, SessionDetail, SessionInput, SettingsInput, SettingsListEntry, SettingsRow, StackFrameInput, SuiteInput, SuiteListEntry, TagInventoryRow, TddArtifactDetail, TddArtifactRow, TddPhaseDetail, TddTaskDetail, TddTaskEndOutcome, TddTaskInput, TddTaskSummary, TestAnnotationInput, TestAnnotationRow, TestArtifactInput, TestArtifactQueryOptions, TestArtifactRow, TestAttachmentInput, TestCaseInput, TestError, TestErrorInput, TestListEntry, TestLookupOptions, TestRunInput, TurnInput, TurnSearchOptions, TurnSummary, UpdateBehaviorInput, UpdateGoalInput, ValidateHypothesisInput, WriteCommitInput, WriteRunChangedFilesInput, WriteTddArtifactInput, WriteTddPhaseInput, WriteTddPhaseOutput };
1862
- //# sourceMappingURL=testing.d.ts.map