@proofhound/core 0.1.11 → 0.1.13

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 (89) hide show
  1. package/dist/server/common/contracts/local-fs-object-storage.provider.d.ts.map +1 -1
  2. package/dist/server/common/contracts/local-fs-object-storage.provider.js +2 -0
  3. package/dist/server/common/contracts/local-fs-object-storage.provider.js.map +1 -1
  4. package/dist/server/common/contracts/object-storage.provider.d.ts +32 -1
  5. package/dist/server/common/contracts/object-storage.provider.d.ts.map +1 -1
  6. package/dist/server/common/contracts/object-storage.provider.js +27 -2
  7. package/dist/server/common/contracts/object-storage.provider.js.map +1 -1
  8. package/dist/server/modules/annotation/annotation.controller.d.ts +3 -3
  9. package/dist/server/modules/annotation/annotation.module.d.ts.map +1 -1
  10. package/dist/server/modules/annotation/annotation.module.js +2 -1
  11. package/dist/server/modules/annotation/annotation.module.js.map +1 -1
  12. package/dist/server/modules/annotation/annotation.repository.d.ts +4 -1
  13. package/dist/server/modules/annotation/annotation.repository.d.ts.map +1 -1
  14. package/dist/server/modules/annotation/annotation.repository.js +31 -6
  15. package/dist/server/modules/annotation/annotation.repository.js.map +1 -1
  16. package/dist/server/modules/canary-release/canary-release.module.d.ts.map +1 -1
  17. package/dist/server/modules/canary-release/canary-release.module.js +2 -1
  18. package/dist/server/modules/canary-release/canary-release.module.js.map +1 -1
  19. package/dist/server/modules/canary-release/canary-release.repository.d.ts +4 -1
  20. package/dist/server/modules/canary-release/canary-release.repository.d.ts.map +1 -1
  21. package/dist/server/modules/canary-release/canary-release.repository.js +29 -4
  22. package/dist/server/modules/canary-release/canary-release.repository.js.map +1 -1
  23. package/dist/server/modules/dataset/dataset-import.repository.d.ts +3 -1
  24. package/dist/server/modules/dataset/dataset-import.repository.d.ts.map +1 -1
  25. package/dist/server/modules/dataset/dataset-import.repository.js +44 -9
  26. package/dist/server/modules/dataset/dataset-import.repository.js.map +1 -1
  27. package/dist/server/modules/dataset/dataset-sample-offload.d.ts +36 -0
  28. package/dist/server/modules/dataset/dataset-sample-offload.d.ts.map +1 -0
  29. package/dist/server/modules/dataset/dataset-sample-offload.js +41 -0
  30. package/dist/server/modules/dataset/dataset-sample-offload.js.map +1 -0
  31. package/dist/server/modules/dataset/dataset-sample-payload.d.ts +21 -0
  32. package/dist/server/modules/dataset/dataset-sample-payload.d.ts.map +1 -0
  33. package/dist/server/modules/dataset/dataset-sample-payload.js +72 -0
  34. package/dist/server/modules/dataset/dataset-sample-payload.js.map +1 -0
  35. package/dist/server/modules/dataset/dataset-sample-projection.d.ts +11 -0
  36. package/dist/server/modules/dataset/dataset-sample-projection.d.ts.map +1 -0
  37. package/dist/server/modules/dataset/dataset-sample-projection.js +49 -0
  38. package/dist/server/modules/dataset/dataset-sample-projection.js.map +1 -0
  39. package/dist/server/modules/dataset/dataset.module.d.ts.map +1 -1
  40. package/dist/server/modules/dataset/dataset.module.js +2 -0
  41. package/dist/server/modules/dataset/dataset.module.js.map +1 -1
  42. package/dist/server/modules/dataset/dataset.repository.d.ts +6 -1
  43. package/dist/server/modules/dataset/dataset.repository.d.ts.map +1 -1
  44. package/dist/server/modules/dataset/dataset.repository.js +59 -12
  45. package/dist/server/modules/dataset/dataset.repository.js.map +1 -1
  46. package/dist/server/modules/experiment/experiment.module.d.ts.map +1 -1
  47. package/dist/server/modules/experiment/experiment.module.js +2 -0
  48. package/dist/server/modules/experiment/experiment.module.js.map +1 -1
  49. package/dist/server/modules/experiment/experiment.workflow.d.ts +7 -1
  50. package/dist/server/modules/experiment/experiment.workflow.d.ts.map +1 -1
  51. package/dist/server/modules/experiment/experiment.workflow.js +33 -4
  52. package/dist/server/modules/experiment/experiment.workflow.js.map +1 -1
  53. package/dist/server/modules/optimization/optimization.module.d.ts.map +1 -1
  54. package/dist/server/modules/optimization/optimization.module.js +2 -0
  55. package/dist/server/modules/optimization/optimization.module.js.map +1 -1
  56. package/dist/server/modules/optimization/optimization.repository.d.ts +5 -1
  57. package/dist/server/modules/optimization/optimization.repository.d.ts.map +1 -1
  58. package/dist/server/modules/optimization/optimization.repository.js +30 -8
  59. package/dist/server/modules/optimization/optimization.repository.js.map +1 -1
  60. package/dist/server/modules/run-result/run-result-compaction-sweeper.d.ts +15 -0
  61. package/dist/server/modules/run-result/run-result-compaction-sweeper.d.ts.map +1 -0
  62. package/dist/server/modules/run-result/run-result-compaction-sweeper.js +74 -0
  63. package/dist/server/modules/run-result/run-result-compaction-sweeper.js.map +1 -0
  64. package/dist/server/modules/run-result/run-result-compaction.d.ts +38 -0
  65. package/dist/server/modules/run-result/run-result-compaction.d.ts.map +1 -0
  66. package/dist/server/modules/run-result/run-result-compaction.js +74 -0
  67. package/dist/server/modules/run-result/run-result-compaction.js.map +1 -0
  68. package/dist/server/modules/run-result/run-result-compactor.d.ts +58 -0
  69. package/dist/server/modules/run-result/run-result-compactor.d.ts.map +1 -0
  70. package/dist/server/modules/run-result/run-result-compactor.js +188 -0
  71. package/dist/server/modules/run-result/run-result-compactor.js.map +1 -0
  72. package/dist/server/modules/run-result/run-result-payload.d.ts +30 -0
  73. package/dist/server/modules/run-result/run-result-payload.d.ts.map +1 -0
  74. package/dist/server/modules/run-result/run-result-payload.js +82 -0
  75. package/dist/server/modules/run-result/run-result-payload.js.map +1 -0
  76. package/dist/server/modules/run-result/run-result-payload.reader.d.ts +20 -0
  77. package/dist/server/modules/run-result/run-result-payload.reader.d.ts.map +1 -0
  78. package/dist/server/modules/run-result/run-result-payload.reader.js +99 -0
  79. package/dist/server/modules/run-result/run-result-payload.reader.js.map +1 -0
  80. package/dist/server/modules/run-result/run-result.controller.d.ts +4 -0
  81. package/dist/server/modules/run-result/run-result.controller.d.ts.map +1 -1
  82. package/dist/server/modules/run-result/run-result.module.d.ts.map +1 -1
  83. package/dist/server/modules/run-result/run-result.module.js +14 -2
  84. package/dist/server/modules/run-result/run-result.module.js.map +1 -1
  85. package/dist/server/modules/run-result/run-result.repository.d.ts +3 -1
  86. package/dist/server/modules/run-result/run-result.repository.d.ts.map +1 -1
  87. package/dist/server/modules/run-result/run-result.repository.js +63 -4
  88. package/dist/server/modules/run-result/run-result.repository.js.map +1 -1
  89. package/package.json +12 -12
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.DrizzleRunResultCompactionStore = exports.RunResultCompactor = exports.RUN_RESULT_COMPACTION_STORE = void 0;
16
+ // RunResultCompactor — tiers a finished run's large fields into object-storage shards (SPEC 30 §9.3).
17
+ //
18
+ // Protocol (object stores have no atomic rename, so payload_ref is committed only after the shard is
19
+ // confirmed written; there is no post-commit promote):
20
+ // 1. load the run's not-yet-compacted terminal rows
21
+ // 2. write each shard to a generation-exclusive key …/run_result_shard/{sourceId}/gen{G}/shard-{seq}
22
+ // 3. single-transaction UPDATE: set payload_ref + compaction_generation + previews, clear inline
23
+ // A re-run rewrites the not-yet-referenced gen{G} key region; it never overwrites a committed
24
+ // generation. When object storage is disabled this is a no-op, so OSS behaviour is unchanged.
25
+ const common_1 = require("@nestjs/common");
26
+ const drizzle_orm_1 = require("drizzle-orm");
27
+ const database_constants_1 = require("../../../shared/database/database.constants");
28
+ const object_storage_provider_1 = require("../../common/contracts/object-storage.provider");
29
+ const run_result_compaction_1 = require("./run-result-compaction");
30
+ const run_result_payload_1 = require("./run-result-payload");
31
+ const CODEC = 'gzip';
32
+ const SHARD_EXT = '.jsonl.gz';
33
+ const DEFAULT_MAX_ROWS_PER_SHARD = 2000;
34
+ exports.RUN_RESULT_COMPACTION_STORE = Symbol('RUN_RESULT_COMPACTION_STORE');
35
+ let RunResultCompactor = class RunResultCompactor {
36
+ constructor(store, storage) {
37
+ this.store = store;
38
+ this.storage = storage;
39
+ this.maxRowsPerShard = DEFAULT_MAX_ROWS_PER_SHARD;
40
+ }
41
+ async compact(target) {
42
+ if (!this.storage.isEnabled())
43
+ return { compactedRows: 0, shards: 0, generation: null };
44
+ const rows = await this.store.loadUncompacted(target);
45
+ if (rows.length === 0)
46
+ return { compactedRows: 0, shards: 0, generation: null };
47
+ const generation = await this.store.nextGeneration(target.sourceId);
48
+ const plan = (0, run_result_compaction_1.planCompaction)(rows, (0, run_result_compaction_1.offloadFieldsForSource)(target.source), this.maxRowsPerShard);
49
+ const shardRefs = [];
50
+ for (const shard of plan.shards) {
51
+ const body = await (0, run_result_payload_1.encodeShard)(shard.lines, CODEC);
52
+ const ref = await this.storage.putObject({
53
+ project: { projectId: target.projectId, source: 'local' },
54
+ resourceType: 'run_result_shard',
55
+ resourceId: target.sourceId,
56
+ name: shardName(generation, shard.seq),
57
+ }, body, { codec: CODEC });
58
+ shardRefs[shard.seq] = { ...ref, version: generation };
59
+ }
60
+ await this.store.commit({
61
+ assignments: plan.assignments,
62
+ shardRefs,
63
+ generation,
64
+ clearedFields: plan.clearedFields,
65
+ });
66
+ return { compactedRows: plan.assignments.length, shards: plan.shards.length, generation };
67
+ }
68
+ /**
69
+ * Periodic compaction for sources with no finalize step (e.g. `online`): finds (project, source,
70
+ * sourceId) groups with rows still inline and compacts each. SPEC 30 §9.3. A no-op when storage is
71
+ * disabled. Callers schedule this; it compacts at most `maxGroups` groups per run so a sweep is bounded.
72
+ */
73
+ async compactPending(sources, maxGroups = 50) {
74
+ if (!this.storage.isEnabled() || sources.length === 0)
75
+ return { groups: 0, compactedRows: 0 };
76
+ const groups = await this.store.findPendingGroups(sources, maxGroups);
77
+ let compactedRows = 0;
78
+ for (const group of groups) {
79
+ const result = await this.compact(group);
80
+ compactedRows += result.compactedRows;
81
+ }
82
+ return { groups: groups.length, compactedRows };
83
+ }
84
+ };
85
+ exports.RunResultCompactor = RunResultCompactor;
86
+ exports.RunResultCompactor = RunResultCompactor = __decorate([
87
+ (0, common_1.Injectable)(),
88
+ __param(0, (0, common_1.Inject)(exports.RUN_RESULT_COMPACTION_STORE)),
89
+ __metadata("design:paramtypes", [Object, object_storage_provider_1.ObjectStorageProvider])
90
+ ], RunResultCompactor);
91
+ function shardName(generation, seq) {
92
+ return `gen${generation}/shard-${String(seq).padStart(5, '0')}${SHARD_EXT}`;
93
+ }
94
+ const CLEAR_COLUMN_SQL = {
95
+ renderedPrompt: (0, drizzle_orm_1.sql) `rendered_prompt = NULL`,
96
+ inputVariables: (0, drizzle_orm_1.sql) `input_variables = NULL`,
97
+ rawResponse: (0, drizzle_orm_1.sql) `raw_response = NULL`,
98
+ parsedOutput: (0, drizzle_orm_1.sql) `parsed_output = NULL`,
99
+ };
100
+ let DrizzleRunResultCompactionStore = class DrizzleRunResultCompactionStore {
101
+ constructor(db) {
102
+ this.db = db;
103
+ }
104
+ async nextGeneration(sourceId) {
105
+ const result = await this.db.execute((0, drizzle_orm_1.sql) `
106
+ SELECT COALESCE(MAX(compaction_generation), 0) + 1 AS next
107
+ FROM ph_runs.run_results
108
+ WHERE source_id = ${sourceId}::uuid
109
+ `);
110
+ const next = unwrapRows(result)[0]?.next;
111
+ return next == null ? 1 : Number(next);
112
+ }
113
+ async findPendingGroups(sources, limit) {
114
+ if (sources.length === 0)
115
+ return [];
116
+ const result = await this.db.execute((0, drizzle_orm_1.sql) `
117
+ SELECT DISTINCT project_id, source, source_id
118
+ FROM ph_runs.run_results
119
+ WHERE source IN (${drizzle_orm_1.sql.join(sources.map((s) => (0, drizzle_orm_1.sql) `${s}`), (0, drizzle_orm_1.sql) `, `)})
120
+ AND payload_ref IS NULL
121
+ AND status IN ('success', 'failed')
122
+ LIMIT ${limit}
123
+ `);
124
+ return unwrapRows(result).map((r) => ({
125
+ projectId: r.project_id,
126
+ source: r.source,
127
+ sourceId: r.source_id,
128
+ }));
129
+ }
130
+ async loadUncompacted(target) {
131
+ const result = await this.db.execute((0, drizzle_orm_1.sql) `
132
+ SELECT id, created_at, rendered_prompt, input_variables, raw_response, parsed_output, decision_output
133
+ FROM ph_runs.run_results
134
+ WHERE source = ${target.source}
135
+ AND source_id = ${target.sourceId}::uuid
136
+ AND payload_ref IS NULL
137
+ AND status IN ('success', 'failed')
138
+ ORDER BY created_at ASC, id ASC
139
+ `);
140
+ return unwrapRows(result).map((r) => ({
141
+ id: r.id,
142
+ createdAt: r.created_at,
143
+ renderedPrompt: r.rendered_prompt,
144
+ inputVariables: r.input_variables,
145
+ rawResponse: r.raw_response,
146
+ parsedOutput: r.parsed_output,
147
+ decisionOutput: r.decision_output,
148
+ }));
149
+ }
150
+ async commit({ assignments, shardRefs, generation, clearedFields }) {
151
+ if (assignments.length === 0)
152
+ return;
153
+ const valueRows = assignments.map((a) => {
154
+ const payloadRef = JSON.stringify({ shard: shardRefs[a.shardSeq], rowIndex: a.rowIndex });
155
+ return (0, drizzle_orm_1.sql) `(${a.id}::uuid, ${toIso(a.createdAt)}::timestamptz, ${payloadRef}::jsonb, ${a.inputPreview}::text, ${a.outputPreview}::text)`;
156
+ });
157
+ const clears = clearedFields.map((f) => CLEAR_COLUMN_SQL[f]);
158
+ const clearClause = clears.length > 0 ? (0, drizzle_orm_1.sql) `, ${drizzle_orm_1.sql.join(clears, (0, drizzle_orm_1.sql) `, `)}` : (0, drizzle_orm_1.sql) ``;
159
+ // Single statement = atomic: at commit, every payload_ref points at an already-written shard.
160
+ await this.db.execute((0, drizzle_orm_1.sql) `
161
+ UPDATE ph_runs.run_results AS rr
162
+ SET payload_ref = v.payload_ref,
163
+ compaction_generation = ${generation},
164
+ input_preview = v.input_preview,
165
+ output_preview = v.output_preview${clearClause}
166
+ FROM (VALUES ${drizzle_orm_1.sql.join(valueRows, (0, drizzle_orm_1.sql) `, `)}) AS v(id, created_at, payload_ref, input_preview, output_preview)
167
+ WHERE rr.id = v.id AND rr.created_at = v.created_at
168
+ `);
169
+ }
170
+ };
171
+ exports.DrizzleRunResultCompactionStore = DrizzleRunResultCompactionStore;
172
+ exports.DrizzleRunResultCompactionStore = DrizzleRunResultCompactionStore = __decorate([
173
+ (0, common_1.Injectable)(),
174
+ __param(0, (0, common_1.Inject)(database_constants_1.DATABASE_CLIENT)),
175
+ __metadata("design:paramtypes", [Object])
176
+ ], DrizzleRunResultCompactionStore);
177
+ function toIso(value) {
178
+ return value instanceof Date ? value.toISOString() : new Date(value).toISOString();
179
+ }
180
+ function unwrapRows(result) {
181
+ if (Array.isArray(result))
182
+ return result;
183
+ if (result && typeof result === 'object' && 'rows' in result) {
184
+ return result.rows ?? [];
185
+ }
186
+ return [];
187
+ }
188
+ //# sourceMappingURL=run-result-compactor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-result-compactor.js","sourceRoot":"","sources":["../../../../src/server/modules/run-result/run-result-compactor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { Buffer } from 'node:buffer';
2
+ import type { ObjectCodec, StoredObjectRef } from '../../common/contracts/object-storage.provider';
3
+ /** The four large fields that tier out of `run_results`. `null` = absent / genuinely empty. */
4
+ export interface RunResultPayloadFields {
5
+ renderedPrompt: unknown;
6
+ inputVariables: unknown;
7
+ rawResponse: string | null;
8
+ parsedOutput: unknown;
9
+ }
10
+ /** One JSONL line in a shard. A source only offloads some fields (SPEC 30 §9.4), so all optional. */
11
+ export type RunResultShardLine = Partial<RunResultPayloadFields>;
12
+ /** Stored in `run_results.payload_ref`: the shard holding this row + which line it is. */
13
+ export interface RunResultPayloadRef {
14
+ shard: StoredObjectRef;
15
+ rowIndex: number;
16
+ }
17
+ /** Minimal row shape the reader consumes: the inline (possibly-null) fields + the pointer. */
18
+ export interface RunResultPayloadRow extends RunResultPayloadFields {
19
+ payloadRef: RunResultPayloadRef | null;
20
+ }
21
+ /** Pick only the offloadable fields off a wider row, defaulting missing ones to null. */
22
+ export declare function pickPayloadFields(row: Partial<RunResultPayloadFields>): RunResultPayloadFields;
23
+ /** Keep only the fields a source actually offloads; drops the rest so they are not double-stored. */
24
+ export declare function shardLineForFields(fields: RunResultPayloadFields, offload: ReadonlyArray<keyof RunResultPayloadFields>): RunResultShardLine;
25
+ /** Encode shard lines into compressed JSONL bytes (the object body a compactor writes). Generic so
26
+ * dataset-sample shards (one data object per line) reuse the same codec as run-result shards. */
27
+ export declare function encodeShard<T>(lines: T[], codec: ObjectCodec): Promise<Buffer>;
28
+ /** Decode a shard body back into its lines (used by the readers). */
29
+ export declare function decodeShard<T = RunResultShardLine>(body: Buffer, codec: ObjectCodec | undefined): Promise<T[]>;
30
+ //# sourceMappingURL=run-result-payload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-result-payload.d.ts","sourceRoot":"","sources":["../../../../src/server/modules/run-result/run-result-payload.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AAOnG,+FAA+F;AAC/F,MAAM,WAAW,sBAAsB;IACrC,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,qGAAqG;AACrG,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAEjE,0FAA0F;AAC1F,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,eAAe,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,8FAA8F;AAC9F,MAAM,WAAW,mBAAoB,SAAQ,sBAAsB;IACjE,UAAU,EAAE,mBAAmB,GAAG,IAAI,CAAC;CACxC;AASD,yFAAyF;AACzF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,sBAAsB,CAAC,GAAG,sBAAsB,CAO9F;AAED,qGAAqG;AACrG,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,sBAAsB,EAC9B,OAAO,EAAE,aAAa,CAAC,MAAM,sBAAsB,CAAC,GACnD,kBAAkB,CAQpB;AA4BD;kGACkG;AAClG,wBAAsB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAGpF;AAED,qEAAqE;AACrE,wBAAsB,WAAW,CAAC,CAAC,GAAG,kBAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAIpH"}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pickPayloadFields = pickPayloadFields;
4
+ exports.shardLineForFields = shardLineForFields;
5
+ exports.encodeShard = encodeShard;
6
+ exports.decodeShard = decodeShard;
7
+ // Run-result large-payload tiering — shared shard format + codec (SPEC 30 §9).
8
+ //
9
+ // When object storage is configured, a run's four large fields are compacted into a compressed
10
+ // JSONL shard: one line per row, each line the offloaded fields of that row. The row keeps a
11
+ // `payload_ref` ({ shard, rowIndex }) so any reader can resolve a field back. The reader
12
+ // (run-result-payload.reader.ts) and the compactor (run-result-compactor.ts) both speak this format.
13
+ const node_buffer_1 = require("node:buffer");
14
+ const node_util_1 = require("node:util");
15
+ const node_zlib_1 = require("node:zlib");
16
+ const gzipAsync = (0, node_util_1.promisify)(node_zlib_1.gzip);
17
+ const gunzipAsync = (0, node_util_1.promisify)(node_zlib_1.gunzip);
18
+ const brotliCompressAsync = (0, node_util_1.promisify)(node_zlib_1.brotliCompress);
19
+ const brotliDecompressAsync = (0, node_util_1.promisify)(node_zlib_1.brotliDecompress);
20
+ const PAYLOAD_FIELDS = [
21
+ 'renderedPrompt',
22
+ 'inputVariables',
23
+ 'rawResponse',
24
+ 'parsedOutput',
25
+ ];
26
+ /** Pick only the offloadable fields off a wider row, defaulting missing ones to null. */
27
+ function pickPayloadFields(row) {
28
+ return {
29
+ renderedPrompt: row.renderedPrompt ?? null,
30
+ inputVariables: row.inputVariables ?? null,
31
+ rawResponse: row.rawResponse ?? null,
32
+ parsedOutput: row.parsedOutput ?? null,
33
+ };
34
+ }
35
+ /** Keep only the fields a source actually offloads; drops the rest so they are not double-stored. */
36
+ function shardLineForFields(fields, offload) {
37
+ const line = {};
38
+ for (const key of PAYLOAD_FIELDS) {
39
+ if (offload.includes(key)) {
40
+ line[key] = fields[key] ?? null;
41
+ }
42
+ }
43
+ return line;
44
+ }
45
+ async function compress(buf, codec) {
46
+ switch (codec) {
47
+ case 'gzip':
48
+ return gzipAsync(buf);
49
+ case 'br':
50
+ return brotliCompressAsync(buf);
51
+ case 'identity':
52
+ return buf;
53
+ default:
54
+ throw new Error(`unsupported shard codec for write: ${codec}`);
55
+ }
56
+ }
57
+ async function decompress(buf, codec) {
58
+ switch (codec ?? 'identity') {
59
+ case 'gzip':
60
+ return gunzipAsync(buf);
61
+ case 'br':
62
+ return brotliDecompressAsync(buf);
63
+ case 'identity':
64
+ return buf;
65
+ default:
66
+ throw new Error(`unsupported shard codec for read: ${codec}`);
67
+ }
68
+ }
69
+ /** Encode shard lines into compressed JSONL bytes (the object body a compactor writes). Generic so
70
+ * dataset-sample shards (one data object per line) reuse the same codec as run-result shards. */
71
+ async function encodeShard(lines, codec) {
72
+ const jsonl = lines.map((line) => JSON.stringify(line)).join('\n');
73
+ return compress(node_buffer_1.Buffer.from(jsonl, 'utf8'), codec);
74
+ }
75
+ /** Decode a shard body back into its lines (used by the readers). */
76
+ async function decodeShard(body, codec) {
77
+ const text = (await decompress(body, codec)).toString('utf8');
78
+ if (text.length === 0)
79
+ return [];
80
+ return text.split('\n').map((line) => (line.length === 0 ? {} : JSON.parse(line)));
81
+ }
82
+ //# sourceMappingURL=run-result-payload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-result-payload.js","sourceRoot":"","sources":["../../../../src/server/modules/run-result/run-result-payload.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { ObjectStorageProvider } from '../../common/contracts/object-storage.provider';
2
+ import { type RunResultPayloadFields, type RunResultPayloadRow } from './run-result-payload';
3
+ export declare class RunResultPayloadReader {
4
+ private readonly storage;
5
+ constructor(storage: ObjectStorageProvider);
6
+ /** Resolve all four fields for one row, fetching its shard at most once. */
7
+ hydrate(row: RunResultPayloadRow): Promise<RunResultPayloadFields>;
8
+ /**
9
+ * Batch variant: groups rows by shard object so each shard is fetched exactly once. The dominant
10
+ * pattern (a page / batch of rows from one run) shares a shard, so this is one GET, not one per row.
11
+ */
12
+ hydrateMany(rows: RunResultPayloadRow[]): Promise<RunResultPayloadFields[]>;
13
+ readRenderedPrompt(row: RunResultPayloadRow): Promise<unknown>;
14
+ readInputVariables(row: RunResultPayloadRow): Promise<unknown>;
15
+ readRawResponse(row: RunResultPayloadRow): Promise<string | null>;
16
+ readParsedOutput(row: RunResultPayloadRow): Promise<unknown>;
17
+ private needsShard;
18
+ private loadShardLine;
19
+ }
20
+ //# sourceMappingURL=run-result-payload.reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-result-payload.reader.d.ts","sourceRoot":"","sources":["../../../../src/server/modules/run-result/run-result-payload.reader.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,qBAAqB,EAAwB,MAAM,gDAAgD,CAAC;AAC7G,OAAO,EACL,KAAK,sBAAsB,EAE3B,KAAK,mBAAmB,EAIzB,MAAM,sBAAsB,CAAC;AAE9B,qBACa,sBAAsB;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,qBAAqB;IAE3D,4EAA4E;IACtE,OAAO,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAMxE;;;OAGG;IACG,WAAW,CAAC,IAAI,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAwB3E,kBAAkB,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IAI9D,kBAAkB,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IAI9D,eAAe,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAIjE,gBAAgB,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IAIlE,OAAO,CAAC,UAAU;YAIJ,aAAa;CAI5B"}
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.RunResultPayloadReader = void 0;
13
+ // RunResultPayloadReader — the single read seam for run-result large fields (SPEC 30 §9.2).
14
+ //
15
+ // Every detail / background read of rendered_prompt / input_variables / raw_response / parsed_output
16
+ // goes through here. It returns the inline value when present (a fresh row, a not-offloaded field, or
17
+ // a small-row cache) and otherwise reads the row's shard. When object storage is disabled or the row
18
+ // has no payload_ref, it is a pure pass-through of the inline fields, so behaviour is unchanged on an
19
+ // OSS deployment with no storage configured.
20
+ const common_1 = require("@nestjs/common");
21
+ const object_storage_provider_1 = require("../../common/contracts/object-storage.provider");
22
+ const run_result_payload_1 = require("./run-result-payload");
23
+ let RunResultPayloadReader = class RunResultPayloadReader {
24
+ constructor(storage) {
25
+ this.storage = storage;
26
+ }
27
+ /** Resolve all four fields for one row, fetching its shard at most once. */
28
+ async hydrate(row) {
29
+ if (!this.needsShard(row))
30
+ return (0, run_result_payload_1.pickPayloadFields)(row);
31
+ const line = await this.loadShardLine(row.payloadRef);
32
+ return mergeInlineOverShard(row, line);
33
+ }
34
+ /**
35
+ * Batch variant: groups rows by shard object so each shard is fetched exactly once. The dominant
36
+ * pattern (a page / batch of rows from one run) shares a shard, so this is one GET, not one per row.
37
+ */
38
+ async hydrateMany(rows) {
39
+ const out = rows.map((row) => (0, run_result_payload_1.pickPayloadFields)(row));
40
+ const byShard = new Map();
41
+ rows.forEach((row, index) => {
42
+ if (!this.needsShard(row))
43
+ return;
44
+ const pref = row.payloadRef;
45
+ const key = shardKey(pref.shard);
46
+ const group = byShard.get(key);
47
+ if (group)
48
+ group.entries.push({ index, rowIndex: pref.rowIndex });
49
+ else
50
+ byShard.set(key, { shard: pref.shard, entries: [{ index, rowIndex: pref.rowIndex }] });
51
+ });
52
+ await Promise.all([...byShard.values()].map(async ({ shard, entries }) => {
53
+ const lines = await (0, run_result_payload_1.decodeShard)(await this.storage.getObject(shard), shard.codec);
54
+ for (const { index, rowIndex } of entries) {
55
+ const row = rows[index];
56
+ if (row)
57
+ out[index] = mergeInlineOverShard(row, lines[rowIndex] ?? {});
58
+ }
59
+ }));
60
+ return out;
61
+ }
62
+ async readRenderedPrompt(row) {
63
+ return (await this.hydrate(row)).renderedPrompt;
64
+ }
65
+ async readInputVariables(row) {
66
+ return (await this.hydrate(row)).inputVariables;
67
+ }
68
+ async readRawResponse(row) {
69
+ return (await this.hydrate(row)).rawResponse;
70
+ }
71
+ async readParsedOutput(row) {
72
+ return (await this.hydrate(row)).parsedOutput;
73
+ }
74
+ needsShard(row) {
75
+ return row.payloadRef != null && this.storage.isEnabled();
76
+ }
77
+ async loadShardLine(ref) {
78
+ const lines = await (0, run_result_payload_1.decodeShard)(await this.storage.getObject(ref.shard), ref.shard.codec);
79
+ return lines[ref.rowIndex] ?? {};
80
+ }
81
+ };
82
+ exports.RunResultPayloadReader = RunResultPayloadReader;
83
+ exports.RunResultPayloadReader = RunResultPayloadReader = __decorate([
84
+ (0, common_1.Injectable)(),
85
+ __metadata("design:paramtypes", [object_storage_provider_1.ObjectStorageProvider])
86
+ ], RunResultPayloadReader);
87
+ function shardKey(ref) {
88
+ return `${ref.provider}:${ref.bucket ?? ''}:${ref.key}`;
89
+ }
90
+ /** Inline value wins when present (not-offloaded field or small-row cache); else the shard's. */
91
+ function mergeInlineOverShard(row, line) {
92
+ return {
93
+ renderedPrompt: row.renderedPrompt ?? line.renderedPrompt ?? null,
94
+ inputVariables: row.inputVariables ?? line.inputVariables ?? null,
95
+ rawResponse: row.rawResponse ?? line.rawResponse ?? null,
96
+ parsedOutput: row.parsedOutput ?? line.parsedOutput ?? null,
97
+ };
98
+ }
99
+ //# sourceMappingURL=run-result-payload.reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-result-payload.reader.js","sourceRoot":"","sources":["../../../../src/server/modules/run-result/run-result-payload.reader.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,8 @@ export declare class RunResultController {
26
26
  role: "image" | "expected_output" | "text" | "image_url" | "image_base64" | "metadata";
27
27
  value: unknown;
28
28
  }[];
29
+ inputPreview: string | null;
30
+ outputPreview: string | null;
29
31
  inputVariables: unknown;
30
32
  rawResponse: string | null;
31
33
  parsedOutput: unknown;
@@ -63,6 +65,8 @@ export declare class RunResultController {
63
65
  role: "image" | "expected_output" | "text" | "image_url" | "image_base64" | "metadata";
64
66
  value: unknown;
65
67
  }[];
68
+ inputPreview: string | null;
69
+ outputPreview: string | null;
66
70
  errorClass: string | null;
67
71
  errorMessage: string | null;
68
72
  latencyMs: number | null;
@@ -1 +1 @@
1
- {"version":3,"file":"run-result.controller.d.ts","sourceRoot":"","sources":["../../../../src/server/modules/run-result/run-result.controller.ts"],"names":[],"mappings":"AAGA,OAAO,EAAe,KAAK,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AAGtG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAIxD,qBAEa,mBAAmB;IAClB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAAhB,gBAAgB,EAAE,gBAAgB;IAGzD,iBAAiB,CACE,YAAY,EAAE,MAAM,EAClC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3B,KAAK,EAAE,kBAAkB,EACtB,OAAO,EAAE,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAgBrC,MAAM,CACa,YAAY,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EAC1B,KAAK,EAAE,kBAAkB,EACtB,OAAO,EAAE,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAe3C,OAAO,CAAC,iBAAiB;CAO1B;AAED,qBAEa,0BAA0B;IACzB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAAhB,gBAAgB,EAAE,gBAAgB;IAGzD,cAAc,CACT,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3B,KAAK,EAAE,kBAAkB,EACtB,OAAO,EAAE,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAS5C"}
1
+ {"version":3,"file":"run-result.controller.d.ts","sourceRoot":"","sources":["../../../../src/server/modules/run-result/run-result.controller.ts"],"names":[],"mappings":"AAGA,OAAO,EAAe,KAAK,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AAGtG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAIxD,qBAEa,mBAAmB;IAClB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAAhB,gBAAgB,EAAE,gBAAgB;IAGzD,iBAAiB,CACE,YAAY,EAAE,MAAM,EAClC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3B,KAAK,EAAE,kBAAkB,EACtB,OAAO,EAAE,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAgBrC,MAAM,CACa,YAAY,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EAC1B,KAAK,EAAE,kBAAkB,EACtB,OAAO,EAAE,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAe3C,OAAO,CAAC,iBAAiB;CAO1B;AAED,qBAEa,0BAA0B;IACzB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAAhB,gBAAgB,EAAE,gBAAgB;IAGzD,cAAc,CACT,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3B,KAAK,EAAE,kBAAkB,EACtB,OAAO,EAAE,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAS5C"}
@@ -1 +1 @@
1
- {"version":3,"file":"run-result.module.d.ts","sourceRoot":"","sources":["../../../../src/server/modules/run-result/run-result.module.ts"],"names":[],"mappings":"AAMA,qBAMa,eAAe;CAAG"}
1
+ {"version":3,"file":"run-result.module.d.ts","sourceRoot":"","sources":["../../../../src/server/modules/run-result/run-result.module.ts"],"names":[],"mappings":"AASA,qBAea,eAAe;CAAG"}
@@ -9,6 +9,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.RunResultModule = void 0;
10
10
  const common_1 = require("@nestjs/common");
11
11
  const database_module_1 = require("../../../shared/database/database.module");
12
+ const run_result_compaction_sweeper_1 = require("./run-result-compaction-sweeper");
13
+ const run_result_compactor_1 = require("./run-result-compactor");
14
+ const run_result_payload_reader_1 = require("./run-result-payload.reader");
12
15
  const run_result_controller_1 = require("./run-result.controller");
13
16
  const run_result_repository_1 = require("./run-result.repository");
14
17
  const run_result_service_1 = require("./run-result.service");
@@ -19,8 +22,17 @@ exports.RunResultModule = RunResultModule = __decorate([
19
22
  (0, common_1.Module)({
20
23
  imports: [database_module_1.DatabaseModule],
21
24
  controllers: [run_result_controller_1.RunResultController, run_result_controller_1.ReleaseRunResultController],
22
- providers: [run_result_repository_1.RunResultRepository, run_result_service_1.RunResultService],
23
- exports: [run_result_service_1.RunResultService],
25
+ providers: [
26
+ run_result_repository_1.RunResultRepository,
27
+ run_result_service_1.RunResultService,
28
+ run_result_payload_reader_1.RunResultPayloadReader,
29
+ run_result_compactor_1.RunResultCompactor,
30
+ run_result_compaction_sweeper_1.RunResultCompactionSweeper,
31
+ { provide: run_result_compactor_1.RUN_RESULT_COMPACTION_STORE, useClass: run_result_compactor_1.DrizzleRunResultCompactionStore },
32
+ ],
33
+ // RunResultPayloadReader / RunResultCompactor are exported so other modules (experiment / optimization
34
+ // workflows, annotation, canary) can hydrate or compact without re-wiring the object-storage seam.
35
+ exports: [run_result_service_1.RunResultService, run_result_payload_reader_1.RunResultPayloadReader, run_result_compactor_1.RunResultCompactor],
24
36
  })
25
37
  ], RunResultModule);
26
38
  //# sourceMappingURL=run-result.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-result.module.js","sourceRoot":"","sources":["../../../../src/server/modules/run-result/run-result.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,8EAA0E;AAC1E,mEAA0F;AAC1F,mEAA8D;AAC9D,6DAAwD;AAQjD,IAAM,eAAe,GAArB,MAAM,eAAe;CAAG,CAAA;AAAlB,0CAAe;0BAAf,eAAe;IAN3B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,gCAAc,CAAC;QACzB,WAAW,EAAE,CAAC,2CAAmB,EAAE,kDAA0B,CAAC;QAC9D,SAAS,EAAE,CAAC,2CAAmB,EAAE,qCAAgB,CAAC;QAClD,OAAO,EAAE,CAAC,qCAAgB,CAAC;KAC5B,CAAC;GACW,eAAe,CAAG"}
1
+ {"version":3,"file":"run-result.module.js","sourceRoot":"","sources":["../../../../src/server/modules/run-result/run-result.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,8EAA0E;AAC1E,mFAA6E;AAC7E,iEAA0H;AAC1H,2EAAqE;AACrE,mEAA0F;AAC1F,mEAA8D;AAC9D,6DAAwD;AAiBjD,IAAM,eAAe,GAArB,MAAM,eAAe;CAAG,CAAA;AAAlB,0CAAe;0BAAf,eAAe;IAf3B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,gCAAc,CAAC;QACzB,WAAW,EAAE,CAAC,2CAAmB,EAAE,kDAA0B,CAAC;QAC9D,SAAS,EAAE;YACT,2CAAmB;YACnB,qCAAgB;YAChB,kDAAsB;YACtB,yCAAkB;YAClB,0DAA0B;YAC1B,EAAE,OAAO,EAAE,kDAA2B,EAAE,QAAQ,EAAE,sDAA+B,EAAE;SACpF;QACD,uGAAuG;QACvG,mGAAmG;QACnG,OAAO,EAAE,CAAC,qCAAgB,EAAE,kDAAsB,EAAE,yCAAkB,CAAC;KACxE,CAAC;GACW,eAAe,CAAG"}
@@ -1,6 +1,7 @@
1
1
  import type { DbClient } from '@proofhound/db';
2
2
  import type { ClassificationAggregateRow } from '@proofhound/metrics';
3
3
  import type { RunResultDetailDto, RunResultListQueryDto, RunResultListResponseDto, RunResultReleaseListQueryDto, ReleaseRunResultListResponseDto } from '@proofhound/shared';
4
+ import { RunResultPayloadReader } from './run-result-payload.reader';
4
5
  export interface BatchTerminalCounts {
5
6
  terminalCount: number;
6
7
  failedCount: number;
@@ -11,7 +12,8 @@ export interface ExperimentAccessRow {
11
12
  }
12
13
  export declare class RunResultRepository {
13
14
  private readonly db;
14
- constructor(db: DbClient);
15
+ private readonly payloadReader;
16
+ constructor(db: DbClient, payloadReader: RunResultPayloadReader);
15
17
  aggregateExperimentLatency(experimentId: string): Promise<{
16
18
  averageMs: number | null;
17
19
  p50Ms: number | null;
@@ -1 +1 @@
1
- {"version":3,"file":"run-result.repository.d.ts","sourceRoot":"","sources":["../../../../src/server/modules/run-result/run-result.repository.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,0BAA0B,EAA6B,MAAM,qBAAqB,CAAC;AACjG,OAAO,KAAK,EAGV,kBAAkB,EAGlB,qBAAqB,EACrB,wBAAwB,EACxB,4BAA4B,EAI5B,+BAA+B,EAChC,MAAM,oBAAoB,CAAC;AAI5B,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBACa,mBAAmB;IACO,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ;IAE5D,0BAA0B,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;QAC9D,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;KACtB,CAAC;IA6BI,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,0BAA0B,EAAE,CAAC;IAyChF,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA8B9F,wBAAwB,CAC5B,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,OAAO,GACrB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IA2BhC,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IA0GvG,aAAa,CACjB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,4BAA4B,GAClC,OAAO,CAAC,+BAA+B,CAAC;IAwJrC,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;CA+CnG"}
1
+ {"version":3,"file":"run-result.repository.d.ts","sourceRoot":"","sources":["../../../../src/server/modules/run-result/run-result.repository.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,0BAA0B,EAA6B,MAAM,qBAAqB,CAAC;AACjG,OAAO,KAAK,EAGV,kBAAkB,EAGlB,qBAAqB,EACrB,wBAAwB,EACxB,4BAA4B,EAI5B,+BAA+B,EAChC,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBACa,mBAAmB;IAEH,OAAO,CAAC,QAAQ,CAAC,EAAE;IAC5C,OAAO,CAAC,QAAQ,CAAC,aAAa;gBADY,EAAE,EAAE,QAAQ,EACrC,aAAa,EAAE,sBAAsB;IAGlD,0BAA0B,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;QAC9D,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;KACtB,CAAC;IA6BI,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,0BAA0B,EAAE,CAAC;IAyChF,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA8B9F,wBAAwB,CAC5B,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,OAAO,GACrB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IA2BhC,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IA+GvG,aAAa,CACjB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,4BAA4B,GAClC,OAAO,CAAC,+BAA+B,CAAC;IAiLrC,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;CA+DnG"}