@proofhound/core 0.1.13 → 0.1.15

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 (55) hide show
  1. package/dist/server/channels/mcp/dataset-import.tools.d.ts.map +1 -1
  2. package/dist/server/channels/mcp/dataset-import.tools.js +54 -5
  3. package/dist/server/channels/mcp/dataset-import.tools.js.map +1 -1
  4. package/dist/server/common/contracts/object-storage.provider.d.ts +2 -0
  5. package/dist/server/common/contracts/object-storage.provider.d.ts.map +1 -1
  6. package/dist/server/common/contracts/object-storage.provider.js +4 -0
  7. package/dist/server/common/contracts/object-storage.provider.js.map +1 -1
  8. package/dist/server/common/contracts/quota-policy.hook.d.ts +1 -1
  9. package/dist/server/common/contracts/quota-policy.hook.d.ts.map +1 -1
  10. package/dist/server/common/contracts/quota-policy.hook.js.map +1 -1
  11. package/dist/server/infrastructure/orchestration/bullmq.module.js +1 -1
  12. package/dist/server/infrastructure/orchestration/bullmq.module.js.map +1 -1
  13. package/dist/server/infrastructure/orchestration/bullmq.service.d.ts +4 -2
  14. package/dist/server/infrastructure/orchestration/bullmq.service.d.ts.map +1 -1
  15. package/dist/server/infrastructure/orchestration/bullmq.service.js +9 -2
  16. package/dist/server/infrastructure/orchestration/bullmq.service.js.map +1 -1
  17. package/dist/server/modules/dataset/dataset-import-raw-parser.d.ts +9 -0
  18. package/dist/server/modules/dataset/dataset-import-raw-parser.d.ts.map +1 -0
  19. package/dist/server/modules/dataset/dataset-import-raw-parser.js +344 -0
  20. package/dist/server/modules/dataset/dataset-import-raw-parser.js.map +1 -0
  21. package/dist/server/modules/dataset/dataset-import.controller.d.ts +140 -37
  22. package/dist/server/modules/dataset/dataset-import.controller.d.ts.map +1 -1
  23. package/dist/server/modules/dataset/dataset-import.controller.js +39 -0
  24. package/dist/server/modules/dataset/dataset-import.controller.js.map +1 -1
  25. package/dist/server/modules/dataset/dataset-import.repository.d.ts +29 -2
  26. package/dist/server/modules/dataset/dataset-import.repository.d.ts.map +1 -1
  27. package/dist/server/modules/dataset/dataset-import.repository.js +88 -6
  28. package/dist/server/modules/dataset/dataset-import.repository.js.map +1 -1
  29. package/dist/server/modules/dataset/dataset-import.service.d.ts +20 -5
  30. package/dist/server/modules/dataset/dataset-import.service.d.ts.map +1 -1
  31. package/dist/server/modules/dataset/dataset-import.service.js +268 -41
  32. package/dist/server/modules/dataset/dataset-import.service.js.map +1 -1
  33. package/dist/server/modules/dataset/dataset.module.d.ts.map +1 -1
  34. package/dist/server/modules/dataset/dataset.module.js +2 -1
  35. package/dist/server/modules/dataset/dataset.module.js.map +1 -1
  36. package/dist/server/modules/dataset/dataset.repository.d.ts +7 -3
  37. package/dist/server/modules/dataset/dataset.repository.d.ts.map +1 -1
  38. package/dist/server/modules/dataset/dataset.repository.js +127 -8
  39. package/dist/server/modules/dataset/dataset.repository.js.map +1 -1
  40. package/dist/server/modules/dataset/dataset.service.d.ts +3 -0
  41. package/dist/server/modules/dataset/dataset.service.d.ts.map +1 -1
  42. package/dist/server/modules/dataset/dataset.service.js +31 -7
  43. package/dist/server/modules/dataset/dataset.service.js.map +1 -1
  44. package/dist/worker/consumers/dataset-raw-import.consumer.d.ts +18 -0
  45. package/dist/worker/consumers/dataset-raw-import.consumer.d.ts.map +1 -0
  46. package/dist/worker/consumers/dataset-raw-import.consumer.js +52 -0
  47. package/dist/worker/consumers/dataset-raw-import.consumer.js.map +1 -0
  48. package/dist/worker/proofhound-worker.module.d.ts.map +1 -1
  49. package/dist/worker/proofhound-worker.module.js +10 -2
  50. package/dist/worker/proofhound-worker.module.js.map +1 -1
  51. package/dist/worker/runners/dataset-raw-import-runner.d.ts +25 -0
  52. package/dist/worker/runners/dataset-raw-import-runner.d.ts.map +1 -0
  53. package/dist/worker/runners/dataset-raw-import-runner.js +238 -0
  54. package/dist/worker/runners/dataset-raw-import-runner.js.map +1 -0
  55. package/package.json +14 -12
@@ -1 +1 @@
1
- {"version":3,"file":"dataset-import.tools.d.ts","sourceRoot":"","sources":["../../../../src/server/channels/mcp/dataset-import.tools.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AACzF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,wBAAgB,wBAAwB,CAAC,oBAAoB,EAAE,oBAAoB,GAAG,iBAAiB,EAAE,CA+FxG"}
1
+ {"version":3,"file":"dataset-import.tools.d.ts","sourceRoot":"","sources":["../../../../src/server/channels/mcp/dataset-import.tools.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AACzF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,wBAAgB,wBAAwB,CAAC,oBAAoB,EAAE,oBAAoB,GAAG,iBAAiB,EAAE,CAgJxG"}
@@ -2,9 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createDatasetImportTools = createDatasetImportTools;
4
4
  /**
5
- * MCP tool definitions for large-file dataset import (streaming batch ingestion).
5
+ * MCP tool definitions for dataset import (raw upload plus legacy streaming batch ingestion).
6
6
  * Delegates to DatasetImportService, matching the REST surface 1:1.
7
- * See docs/specs/22-datasets.md §3.1.2 and docs/specs/00-overview.md §5 (three-channel parity).
7
+ * See docs/specs/22-datasets.md §3.1 and docs/specs/00-overview.md §5 (three-channel parity).
8
8
  */
9
9
  const shared_1 = require("@proofhound/shared");
10
10
  const mcp_context_1 = require("./mcp-context");
@@ -21,7 +21,7 @@ function createDatasetImportTools(datasetImportService) {
21
21
  description: { type: 'string' },
22
22
  fieldMappings: { type: 'array' },
23
23
  sourceFile: { type: 'object' },
24
- sourceFormat: { type: 'string', enum: ['jsonl', 'csv', 'tsv'] },
24
+ sourceFormat: { type: 'string', enum: ['jsonl', 'csv', 'tsv', 'json', 'zip'] },
25
25
  declaredTotalRows: { type: 'integer' },
26
26
  },
27
27
  },
@@ -31,6 +31,39 @@ function createDatasetImportTools(datasetImportService) {
31
31
  return datasetImportService.createImport(projectId, dto, (0, mcp_context_1.getMcpActor)(ctx));
32
32
  },
33
33
  },
34
+ {
35
+ name: 'dataset_import_raw_capabilities',
36
+ description: '读取当前部署是否支持浏览器直传 raw dataset import',
37
+ inputSchema: {
38
+ type: 'object',
39
+ properties: {},
40
+ },
41
+ handler: async (_input, ctx) => {
42
+ const { projectId } = (0, mcp_context_1.resolveMcpProjectContext)(ctx);
43
+ return datasetImportService.getRawImportCapabilities(projectId, (0, mcp_context_1.getMcpActor)(ctx));
44
+ },
45
+ },
46
+ {
47
+ name: 'dataset_import_create_raw',
48
+ description: '创建 raw object-backed 数据集导入会话并返回浏览器直传 upload session',
49
+ inputSchema: {
50
+ type: 'object',
51
+ required: ['name', 'fieldMappings', 'sourceFile', 'sourceFormat'],
52
+ properties: {
53
+ name: { type: 'string' },
54
+ description: { type: 'string' },
55
+ fieldMappings: { type: 'array' },
56
+ sourceFile: { type: 'object' },
57
+ sourceFormat: { type: 'string', enum: ['jsonl', 'csv', 'tsv', 'json', 'zip'] },
58
+ declaredTotalRows: { type: 'integer' },
59
+ },
60
+ },
61
+ handler: async (input, ctx) => {
62
+ const { projectId } = (0, mcp_context_1.resolveMcpProjectContext)(ctx);
63
+ const dto = shared_1.createRawDatasetImportSchema.parse(input);
64
+ return datasetImportService.createRawImport(projectId, dto, (0, mcp_context_1.getMcpActor)(ctx));
65
+ },
66
+ },
34
67
  {
35
68
  name: 'dataset_import_get',
36
69
  description: '读取导入会话状态与进度',
@@ -71,7 +104,7 @@ function createDatasetImportTools(datasetImportService) {
71
104
  },
72
105
  {
73
106
  name: 'dataset_import_complete',
74
- description: '完成导入:单事务原子提升暂存样本为正式数据集',
107
+ description: '完成导入:raw import 入队后台解析,batch import 提升暂存样本为正式数据集',
75
108
  inputSchema: {
76
109
  type: 'object',
77
110
  required: ['importId'],
@@ -85,9 +118,25 @@ function createDatasetImportTools(datasetImportService) {
85
118
  return datasetImportService.complete(projectId, importId, (0, mcp_context_1.getMcpActor)(ctx));
86
119
  },
87
120
  },
121
+ {
122
+ name: 'dataset_import_upload_complete',
123
+ description: '完成 raw upload 校验并把会话推进到 uploaded 状态',
124
+ inputSchema: {
125
+ type: 'object',
126
+ required: ['importId'],
127
+ properties: {
128
+ importId: { type: 'string', format: 'uuid' },
129
+ },
130
+ },
131
+ handler: async (input, ctx) => {
132
+ const { projectId } = (0, mcp_context_1.resolveMcpProjectContext)(ctx);
133
+ const importId = shared_1.datasetIdParamSchema.parse(input.importId);
134
+ return datasetImportService.completeRawUpload(projectId, importId, (0, mcp_context_1.getMcpActor)(ctx));
135
+ },
136
+ },
88
137
  {
89
138
  name: 'dataset_import_abort',
90
- description: '取消导入会话并清除已暂存样本(中断即删干净)',
139
+ description: '取消导入会话并清除已暂存样本和临时 raw object',
91
140
  inputSchema: {
92
141
  type: 'object',
93
142
  required: ['importId'],
@@ -1 +1 @@
1
- {"version":3,"file":"dataset-import.tools.js","sourceRoot":"","sources":["../../../../src/server/channels/mcp/dataset-import.tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dataset-import.tools.js","sourceRoot":"","sources":["../../../../src/server/channels/mcp/dataset-import.tools.ts"],"names":[],"mappings":"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"}
@@ -98,6 +98,8 @@ export declare abstract class ObjectStorageProvider {
98
98
  abstract createSignedDownloadUrl(ref: StoredObjectRef, opts?: {
99
99
  expiresInSeconds?: number;
100
100
  }): Promise<SignedDownloadUrl | null>;
101
+ /** Whether this provider can mint browser-reachable upload sessions. Default: unsupported. */
102
+ supportsClientUploadSessions(): boolean;
101
103
  /** Open a pending upload and return a URL the client PUTs to. Default: unsupported (null). */
102
104
  createUploadSession(_loc: ResourceLocator, _opts?: CreateUploadSessionOptions): Promise<UploadSession | null>;
103
105
  /** Verify (HeadObject: size/sha256/contentType) + ownership, then finalize. Default: unsupported. */
@@ -1 +1 @@
1
- {"version":3,"file":"object-storage.provider.d.ts","sourceRoot":"","sources":["../../../../src/server/common/contracts/object-storage.provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"object-storage.provider.d.ts","sourceRoot":"","sources":["../../../../src/server/common/contracts/object-storage.provider.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,10 @@ class ObjectStorageProvider {
21
21
  // "unsupported" default (not abstract) so adding them is non-breaking: an existing subclass that
22
22
  // hasn't implemented them keeps compiling and inherits the default. A provider that can mint
23
23
  // browser-reachable upload URLs (e.g. R2) overrides them; LocalFs keeps the default.
24
+ /** Whether this provider can mint browser-reachable upload sessions. Default: unsupported. */
25
+ supportsClientUploadSessions() {
26
+ return false;
27
+ }
24
28
  /** Open a pending upload and return a URL the client PUTs to. Default: unsupported (null). */
25
29
  async createUploadSession(_loc, _opts) {
26
30
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"object-storage.provider.js","sourceRoot":"","sources":["../../../../src/server/common/contracts/object-storage.provider.ts"],"names":[],"mappings":";AAAA,+FAA+F;AAC/F,oEAAoE;AACpE,EAAE;AACF,kGAAkG;AAClG,sGAAsG;AACtG,wGAAwG;AACxG,yEAAyE;AACzE,EAAE;AACF,6FAA6F;AAC7F,+FAA+F;AAC/F,mGAAmG;AACnG,6FAA6F;;;AAiG7F,MAAsB,qBAAqB;IAsBzC,2DAA2D;IAC3D,EAAE;IACF,iGAAiG;IACjG,iGAAiG;IACjG,iGAAiG;IACjG,6FAA6F;IAC7F,qFAAqF;IAErF,8FAA8F;IAC9F,KAAK,CAAC,mBAAmB,CAAC,IAAqB,EAAE,KAAkC;QACjF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,qGAAqG;IACrG,KAAK,CAAC,cAAc,CAAC,MAA2B;QAC9C,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;IAC5F,CAAC;IACD,yEAAyE;IACzE,KAAK,CAAC,WAAW,CAAC,UAAkB;QAClC,iCAAiC;IACnC,CAAC;IACD,mGAAmG;IACnG,KAAK,CAAC,mBAAmB,CAAC,UAAkB;QAC1C,OAAO,CAAC,CAAC;IACX,CAAC;CACF;AA9CD,sDA8CC"}
1
+ {"version":3,"file":"object-storage.provider.js","sourceRoot":"","sources":["../../../../src/server/common/contracts/object-storage.provider.ts"],"names":[],"mappings":";AAAA,+FAA+F;AAC/F,oEAAoE;AACpE,EAAE;AACF,kGAAkG;AAClG,sGAAsG;AACtG,wGAAwG;AACxG,yEAAyE;AACzE,EAAE;AACF,6FAA6F;AAC7F,+FAA+F;AAC/F,mGAAmG;AACnG,6FAA6F;;;AAiG7F,MAAsB,qBAAqB;IAsBzC,2DAA2D;IAC3D,EAAE;IACF,iGAAiG;IACjG,iGAAiG;IACjG,iGAAiG;IACjG,6FAA6F;IAC7F,qFAAqF;IAErF,8FAA8F;IAC9F,4BAA4B;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,8FAA8F;IAC9F,KAAK,CAAC,mBAAmB,CAAC,IAAqB,EAAE,KAAkC;QACjF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,qGAAqG;IACrG,KAAK,CAAC,cAAc,CAAC,MAA2B;QAC9C,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;IAC5F,CAAC;IACD,yEAAyE;IACzE,KAAK,CAAC,WAAW,CAAC,UAAkB;QAClC,iCAAiC;IACnC,CAAC;IACD,mGAAmG;IACnG,KAAK,CAAC,mBAAmB,CAAC,UAAkB;QAC1C,OAAO,CAAC,CAAC;IACX,CAAC;CACF;AAnDD,sDAmDC"}
@@ -1,5 +1,5 @@
1
1
  import type { ActorContext, ProjectContext } from '../actor-context';
2
- export type StorageQuotaSource = 'dataset_upload' | 'dataset_import' | 'dataset_import_batch' | 'run_result';
2
+ export type StorageQuotaSource = 'dataset_upload' | 'dataset_import' | 'dataset_import_batch' | 'dataset_raw_import' | 'dataset_raw_import_batch' | 'dataset_import_complete' | 'run_result';
3
3
  export interface StorageQuotaInput {
4
4
  project: ProjectContext;
5
5
  source: StorageQuotaSource;
@@ -1 +1 @@
1
- {"version":3,"file":"quota-policy.hook.d.ts","sourceRoot":"","sources":["../../../../src/server/common/contracts/quota-policy.hook.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAErE,MAAM,MAAM,kBAAkB,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,sBAAsB,GAAG,YAAY,CAAC;AAE7G,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,8BAAsB,eAAe;IACnC,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAChE,QAAQ,CAAC,iBAAiB,CAAC,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAC5F;AAED,qBAAa,oBAAqB,SAAQ,eAAe;IACjD,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAG1F"}
1
+ {"version":3,"file":"quota-policy.hook.d.ts","sourceRoot":"","sources":["../../../../src/server/common/contracts/quota-policy.hook.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAErE,MAAM,MAAM,kBAAkB,GAC1B,gBAAgB,GAChB,gBAAgB,GAChB,sBAAsB,GACtB,oBAAoB,GACpB,0BAA0B,GAC1B,yBAAyB,GACzB,YAAY,CAAC;AAEjB,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,8BAAsB,eAAe;IACnC,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAChE,QAAQ,CAAC,iBAAiB,CAAC,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAC5F;AAED,qBAAa,oBAAqB,SAAQ,eAAe;IACjD,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAG1F"}
@@ -1 +1 @@
1
- {"version":3,"file":"quota-policy.hook.js","sourceRoot":"","sources":["../../../../src/server/common/contracts/quota-policy.hook.ts"],"names":[],"mappings":";AAAA,4CAA4C;AAC5C,mDAAmD;AACnD,EAAE;AACF,2EAA2E;AAC3E,8EAA8E;AAC9E,8EAA8E;;;AAqB9E,MAAsB,eAAe;CAGpC;AAHD,0CAGC;AAED,MAAa,oBAAqB,SAAQ,eAAe;IACvD,KAAK,CAAC,cAAc,CAAC,MAAyB;QAC5C,0CAA0C;IAC5C,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAI,MAA0B,EAAE,GAAqB;QAC1E,OAAO,GAAG,EAAE,CAAC;IACf,CAAC;CACF;AARD,oDAQC"}
1
+ {"version":3,"file":"quota-policy.hook.js","sourceRoot":"","sources":["../../../../src/server/common/contracts/quota-policy.hook.ts"],"names":[],"mappings":";AAAA,4CAA4C;AAC5C,mDAAmD;AACnD,EAAE;AACF,2EAA2E;AAC3E,8EAA8E;AAC9E,8EAA8E;;;AA4B9E,MAAsB,eAAe;CAGpC;AAHD,0CAGC;AAED,MAAa,oBAAqB,SAAQ,eAAe;IACvD,KAAK,CAAC,cAAc,CAAC,MAAyB;QAC5C,0CAA0C;IAC5C,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAI,MAA0B,EAAE,GAAqB;QAC1E,OAAO,GAAG,EAAE,CAAC;IACf,CAAC;CACF;AARD,oDAQC"}
@@ -27,7 +27,7 @@ exports.BullmqOrchestrationModule = BullmqOrchestrationModule = __decorate([
27
27
  },
28
28
  }),
29
29
  }),
30
- bullmq_1.BullModule.registerQueue({ name: 'llm' }, { name: 'probe' }),
30
+ bullmq_1.BullModule.registerQueue({ name: 'llm' }, { name: 'probe' }, { name: 'dataset-import' }),
31
31
  ],
32
32
  providers: [bullmq_service_1.BullmqService],
33
33
  exports: [bullmq_service_1.BullmqService],
@@ -1 +1 @@
1
- {"version":3,"file":"bullmq.module.js","sourceRoot":"","sources":["../../../../src/server/infrastructure/orchestration/bullmq.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,2CAA4C;AAC5C,qDAAiD;AAoB1C,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;CAAG,CAAA;AAA5B,8DAAyB;oCAAzB,yBAAyB;IAlBrC,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,mBAAU,CAAC,YAAY,CAAC;gBACtB,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;oBACjB,UAAU,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,wBAAwB,EAAE;oBACzE,0GAA0G;oBAC1G,kJAAkJ;oBAClJ,iBAAiB,EAAE;wBACjB,QAAQ,EAAE,CAAC;wBACX,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE;qBAC/C;iBACF,CAAC;aACH,CAAC;YACF,mBAAU,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;SAC7D;QACD,SAAS,EAAE,CAAC,8BAAa,CAAC;QAC1B,OAAO,EAAE,CAAC,8BAAa,CAAC;KACzB,CAAC;GACW,yBAAyB,CAAG"}
1
+ {"version":3,"file":"bullmq.module.js","sourceRoot":"","sources":["../../../../src/server/infrastructure/orchestration/bullmq.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,2CAA4C;AAC5C,qDAAiD;AAoB1C,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;CAAG,CAAA;AAA5B,8DAAyB;oCAAzB,yBAAyB;IAlBrC,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,mBAAU,CAAC,YAAY,CAAC;gBACtB,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;oBACjB,UAAU,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,wBAAwB,EAAE;oBACzE,0GAA0G;oBAC1G,kJAAkJ;oBAClJ,iBAAiB,EAAE;wBACjB,QAAQ,EAAE,CAAC;wBACX,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE;qBAC/C;iBACF,CAAC;aACH,CAAC;YACF,mBAAU,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;SACzF;QACD,SAAS,EAAE,CAAC,8BAAa,CAAC;QAC1B,OAAO,EAAE,CAAC,8BAAa,CAAC;KACzB,CAAC;GACW,yBAAyB,CAAG"}
@@ -1,10 +1,12 @@
1
- import { type LlmJobPayload, type ProbeJobPayload } from '@proofhound/orchestration-shared';
1
+ import { type DatasetRawImportJobPayload, type LlmJobPayload, type ProbeJobPayload } from '@proofhound/orchestration-shared';
2
2
  import type { Queue } from 'bullmq';
3
3
  export declare class BullmqService {
4
4
  private readonly llmQueue;
5
5
  private readonly probeQueue;
6
- constructor(llmQueue: Queue<LlmJobPayload>, probeQueue: Queue<ProbeJobPayload>);
6
+ private readonly datasetImportQueue;
7
+ constructor(llmQueue: Queue<LlmJobPayload>, probeQueue: Queue<ProbeJobPayload>, datasetImportQueue: Queue<DatasetRawImportJobPayload>);
7
8
  enqueueLlmJob(payload: LlmJobPayload, jobId?: string): Promise<string>;
8
9
  enqueueProbeJob(payload: ProbeJobPayload, jobId?: string): Promise<string>;
10
+ enqueueDatasetRawImportJob(payload: DatasetRawImportJobPayload, jobId?: string): Promise<string>;
9
11
  }
10
12
  //# sourceMappingURL=bullmq.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bullmq.service.d.ts","sourceRoot":"","sources":["../../../../src/server/infrastructure/orchestration/bullmq.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,eAAe,EACrB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAIpC,qBACa,aAAa;IAEF,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBADZ,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,EAC5B,UAAU,EAAE,KAAK,CAAC,eAAe,CAAC;IAGrE,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAMtE,eAAe,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAKjF"}
1
+ {"version":3,"file":"bullmq.service.d.ts","sourceRoot":"","sources":["../../../../src/server/infrastructure/orchestration/bullmq.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,0BAA0B,EAC/B,KAAK,aAAa,EAClB,KAAK,eAAe,EACrB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAIpC,qBACa,aAAa;IAEF,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAClB,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBAF7B,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,EAC5B,UAAU,EAAE,KAAK,CAAC,eAAe,CAAC,EACzB,kBAAkB,EAAE,KAAK,CAAC,0BAA0B,CAAC;IAGjG,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAMtE,eAAe,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAM1E,0BAA0B,CAAC,OAAO,EAAE,0BAA0B,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAKvG"}
@@ -19,9 +19,10 @@ const orchestration_shared_1 = require("@proofhound/orchestration-shared");
19
19
  // BullMQ producer: business Services dispatch tasks through this service
20
20
  // See docs/specs/03-orchestration.md §2
21
21
  let BullmqService = class BullmqService {
22
- constructor(llmQueue, probeQueue) {
22
+ constructor(llmQueue, probeQueue, datasetImportQueue) {
23
23
  this.llmQueue = llmQueue;
24
24
  this.probeQueue = probeQueue;
25
+ this.datasetImportQueue = datasetImportQueue;
25
26
  }
26
27
  async enqueueLlmJob(payload, jobId) {
27
28
  const parsed = orchestration_shared_1.llmJobPayloadSchema.parse(payload);
@@ -33,12 +34,18 @@ let BullmqService = class BullmqService {
33
34
  const job = await this.probeQueue.add('probe-model', parsed, jobId ? { jobId } : undefined);
34
35
  return String(job.id);
35
36
  }
37
+ async enqueueDatasetRawImportJob(payload, jobId) {
38
+ const parsed = orchestration_shared_1.datasetRawImportJobPayloadSchema.parse(payload);
39
+ const job = await this.datasetImportQueue.add('dataset-raw-import', parsed, jobId ? { jobId } : undefined);
40
+ return String(job.id);
41
+ }
36
42
  };
37
43
  exports.BullmqService = BullmqService;
38
44
  exports.BullmqService = BullmqService = __decorate([
39
45
  (0, common_1.Injectable)(),
40
46
  __param(0, (0, bullmq_1.InjectQueue)('llm')),
41
47
  __param(1, (0, bullmq_1.InjectQueue)('probe')),
42
- __metadata("design:paramtypes", [Function, Function])
48
+ __param(2, (0, bullmq_1.InjectQueue)('dataset-import')),
49
+ __metadata("design:paramtypes", [Function, Function, Function])
43
50
  ], BullmqService);
44
51
  //# sourceMappingURL=bullmq.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bullmq.service.js","sourceRoot":"","sources":["../../../../src/server/infrastructure/orchestration/bullmq.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,2CAA6C;AAC7C,2EAK0C;AAG1C,yEAAyE;AACzE,wCAAwC;AAEjC,IAAM,aAAa,GAAnB,MAAM,aAAa;IACxB,YACuC,QAA8B,EAC5B,UAAkC;QADpC,aAAQ,GAAR,QAAQ,CAAsB;QAC5B,eAAU,GAAV,UAAU,CAAwB;IACxE,CAAC;IAEJ,KAAK,CAAC,aAAa,CAAC,OAAsB,EAAE,KAAc;QACxD,MAAM,MAAM,GAAG,0CAAmB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACzF,OAAO,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAwB,EAAE,KAAc;QAC5D,MAAM,MAAM,GAAG,4CAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC5F,OAAO,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;CACF,CAAA;AAjBY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,oBAAW,EAAC,KAAK,CAAC,CAAA;IAClB,WAAA,IAAA,oBAAW,EAAC,OAAO,CAAC,CAAA;;GAHZ,aAAa,CAiBzB"}
1
+ {"version":3,"file":"bullmq.service.js","sourceRoot":"","sources":["../../../../src/server/infrastructure/orchestration/bullmq.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,2CAA6C;AAC7C,2EAO0C;AAG1C,yEAAyE;AACzE,wCAAwC;AAEjC,IAAM,aAAa,GAAnB,MAAM,aAAa;IACxB,YACuC,QAA8B,EAC5B,UAAkC,EACzB,kBAAqD;QAFhE,aAAQ,GAAR,QAAQ,CAAsB;QAC5B,eAAU,GAAV,UAAU,CAAwB;QACzB,uBAAkB,GAAlB,kBAAkB,CAAmC;IACpG,CAAC;IAEJ,KAAK,CAAC,aAAa,CAAC,OAAsB,EAAE,KAAc;QACxD,MAAM,MAAM,GAAG,0CAAmB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACzF,OAAO,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAwB,EAAE,KAAc;QAC5D,MAAM,MAAM,GAAG,4CAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC5F,OAAO,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,0BAA0B,CAAC,OAAmC,EAAE,KAAc;QAClF,MAAM,MAAM,GAAG,uDAAgC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,oBAAoB,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC3G,OAAO,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;CACF,CAAA;AAxBY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,oBAAW,EAAC,KAAK,CAAC,CAAA;IAClB,WAAA,IAAA,oBAAW,EAAC,OAAO,CAAC,CAAA;IACpB,WAAA,IAAA,oBAAW,EAAC,gBAAgB,CAAC,CAAA;;GAJrB,aAAa,CAwBzB"}
@@ -0,0 +1,9 @@
1
+ import { Readable } from 'node:stream';
2
+ import type { DatasetImportSourceFormat } from '@proofhound/shared';
3
+ export declare const DEFAULT_RAW_IMPORT_MAX_LINE_BYTES: number;
4
+ export declare const DEFAULT_RAW_IMPORT_MAX_BUFFERED_BYTES: number;
5
+ export declare function parseRawDatasetRows(stream: Readable, sourceFormat: DatasetImportSourceFormat, options?: {
6
+ maxLineBytes?: number;
7
+ maxBufferedBytes?: number;
8
+ }): AsyncGenerator<Record<string, unknown>>;
9
+ //# sourceMappingURL=dataset-import-raw-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataset-import-raw-parser.d.ts","sourceRoot":"","sources":["../../../../src/server/modules/dataset/dataset-import-raw-parser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAa,MAAM,aAAa,CAAC;AAIlD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAEpE,eAAO,MAAM,iCAAiC,QAAmB,CAAC;AAClE,eAAO,MAAM,qCAAqC,QAAmB,CAAC;AAItE,wBAAuB,mBAAmB,CACxC,MAAM,EAAE,QAAQ,EAChB,YAAY,EAAE,yBAAyB,EACvC,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAO,GACjE,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAsBzC"}
@@ -0,0 +1,344 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DEFAULT_RAW_IMPORT_MAX_BUFFERED_BYTES = exports.DEFAULT_RAW_IMPORT_MAX_LINE_BYTES = void 0;
7
+ exports.parseRawDatasetRows = parseRawDatasetRows;
8
+ const node_string_decoder_1 = require("node:string_decoder");
9
+ const node_stream_1 = require("node:stream");
10
+ const node_util_1 = require("node:util");
11
+ const node_zlib_1 = require("node:zlib");
12
+ const papaparse_1 = __importDefault(require("papaparse"));
13
+ exports.DEFAULT_RAW_IMPORT_MAX_LINE_BYTES = 16 * 1024 * 1024;
14
+ exports.DEFAULT_RAW_IMPORT_MAX_BUFFERED_BYTES = 64 * 1024 * 1024;
15
+ const inflateRawAsync = (0, node_util_1.promisify)(node_zlib_1.inflateRaw);
16
+ async function* parseRawDatasetRows(stream, sourceFormat, options = {}) {
17
+ if (sourceFormat === 'jsonl') {
18
+ yield* parseJsonlRows(stream, options.maxLineBytes ?? exports.DEFAULT_RAW_IMPORT_MAX_LINE_BYTES);
19
+ return;
20
+ }
21
+ if (sourceFormat === 'csv' || sourceFormat === 'tsv') {
22
+ yield* parseDelimitedRows(stream, sourceFormat === 'csv' ? ',' : '\t', options.maxLineBytes ?? exports.DEFAULT_RAW_IMPORT_MAX_LINE_BYTES);
23
+ return;
24
+ }
25
+ if (sourceFormat === 'json') {
26
+ yield* parseJsonArrayRows(stream, options.maxBufferedBytes ?? exports.DEFAULT_RAW_IMPORT_MAX_BUFFERED_BYTES);
27
+ return;
28
+ }
29
+ if (sourceFormat === 'zip') {
30
+ yield* parseZipRows(stream, options.maxBufferedBytes ?? exports.DEFAULT_RAW_IMPORT_MAX_BUFFERED_BYTES);
31
+ return;
32
+ }
33
+ throw new Error('unsupported_file_type');
34
+ }
35
+ async function* parseJsonlRows(stream, maxLineBytes) {
36
+ const decoder = new node_string_decoder_1.StringDecoder('utf8');
37
+ let pending = '';
38
+ const parseLine = (line) => {
39
+ const trimmed = line.trim();
40
+ if (!trimmed)
41
+ return null;
42
+ const parsed = JSON.parse(trimmed);
43
+ return parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? parsed : null;
44
+ };
45
+ for await (const chunk of stream) {
46
+ pending += decoder.write(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
47
+ const lines = pending.split(/\r?\n/u);
48
+ pending = lines.pop() ?? '';
49
+ for (const line of lines) {
50
+ assertLineWithinLimit(line, maxLineBytes);
51
+ const row = parseLine(line);
52
+ if (row)
53
+ yield row;
54
+ }
55
+ assertLineWithinLimit(pending, maxLineBytes);
56
+ }
57
+ pending += decoder.end();
58
+ assertLineWithinLimit(pending, maxLineBytes);
59
+ const row = parseLine(pending);
60
+ if (row)
61
+ yield row;
62
+ }
63
+ async function* parseDelimitedRows(stream, delimiter, maxLineBytes) {
64
+ const papaStream = papaparse_1.default.parse(papaparse_1.default.NODE_STREAM_INPUT, {
65
+ delimiter,
66
+ header: true,
67
+ skipEmptyLines: 'greedy',
68
+ transform: parseDelimitedCell,
69
+ transformHeader: (header, index) => header.trim() || `field_${index + 1}`,
70
+ });
71
+ const guardedStream = stream.pipe(createLineByteGuard(maxLineBytes));
72
+ guardedStream.on('error', (error) => papaStream.destroy(error));
73
+ guardedStream.pipe(papaStream);
74
+ for await (const row of papaStream) {
75
+ if (row && typeof row === 'object' && !Array.isArray(row)) {
76
+ yield row;
77
+ }
78
+ }
79
+ }
80
+ function assertLineWithinLimit(line, maxLineBytes) {
81
+ if (Buffer.byteLength(line, 'utf8') > maxLineBytes)
82
+ throw new Error('dataset_import_line_too_large');
83
+ }
84
+ function createLineByteGuard(maxLineBytes) {
85
+ let lineBytes = 0;
86
+ return new node_stream_1.Transform({
87
+ transform(chunk, _encoding, callback) {
88
+ const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
89
+ for (const byte of buffer) {
90
+ if (byte === 0x0a) {
91
+ lineBytes = 0;
92
+ continue;
93
+ }
94
+ lineBytes += 1;
95
+ if (lineBytes > maxLineBytes) {
96
+ callback(new Error('dataset_import_line_too_large'));
97
+ return;
98
+ }
99
+ }
100
+ callback(null, chunk);
101
+ },
102
+ });
103
+ }
104
+ function parseDelimitedCell(value) {
105
+ const trimmed = value.trim();
106
+ if (!trimmed.startsWith('['))
107
+ return trimmed;
108
+ try {
109
+ const parsed = JSON.parse(trimmed);
110
+ return Array.isArray(parsed) ? parsed : trimmed;
111
+ }
112
+ catch {
113
+ return trimmed;
114
+ }
115
+ }
116
+ async function* parseJsonArrayRows(stream, maxBytes) {
117
+ const buffer = await readStreamBuffer(stream, maxBytes);
118
+ const parsed = JSON.parse(buffer.toString('utf8'));
119
+ if (!Array.isArray(parsed))
120
+ throw new Error('json_array_required');
121
+ for (const row of parsed) {
122
+ if (row && typeof row === 'object' && !Array.isArray(row)) {
123
+ yield row;
124
+ }
125
+ }
126
+ }
127
+ async function* parseZipRows(stream, maxBytes) {
128
+ const buffer = await readStreamBuffer(stream, maxBytes);
129
+ const entries = readZipEntries(buffer);
130
+ const dataEntry = await chooseZipDataEntry(buffer, entries);
131
+ const dataBytes = await readZipEntryBytes(buffer, dataEntry);
132
+ const dataStream = node_stream_1.Readable.from([dataBytes]);
133
+ const rows = [];
134
+ for await (const row of parseRawDatasetRows(dataStream, extensionToSourceFormat(dataEntry.name), {
135
+ maxLineBytes: maxBytes,
136
+ })) {
137
+ rows.push(row);
138
+ }
139
+ for (const row of await inlineZipImages(rows, dataEntry, buffer, entries)) {
140
+ yield row;
141
+ }
142
+ }
143
+ async function readStreamBuffer(stream, maxBytes) {
144
+ const chunks = [];
145
+ let total = 0;
146
+ for await (const chunk of stream) {
147
+ const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
148
+ total += buffer.byteLength;
149
+ if (total > maxBytes)
150
+ throw new Error('dataset_import_file_too_large_for_buffered_parser');
151
+ chunks.push(buffer);
152
+ }
153
+ return Buffer.concat(chunks, total);
154
+ }
155
+ function readUint16(buffer, offset) {
156
+ return buffer.readUInt16LE(offset);
157
+ }
158
+ function readUint32(buffer, offset) {
159
+ return buffer.readUInt32LE(offset);
160
+ }
161
+ function findEndOfCentralDirectory(buffer) {
162
+ const minOffset = Math.max(0, buffer.byteLength - 65_557);
163
+ for (let offset = buffer.byteLength - 22; offset >= minOffset; offset -= 1) {
164
+ if (readUint32(buffer, offset) === 0x06054b50)
165
+ return offset;
166
+ }
167
+ return -1;
168
+ }
169
+ function readZipEntries(buffer) {
170
+ const eocdOffset = findEndOfCentralDirectory(buffer);
171
+ if (eocdOffset < 0)
172
+ throw new Error('zip_invalid');
173
+ const entryCount = readUint16(buffer, eocdOffset + 10);
174
+ const centralDirectoryOffset = readUint32(buffer, eocdOffset + 16);
175
+ const entries = [];
176
+ let offset = centralDirectoryOffset;
177
+ for (let index = 0; index < entryCount; index += 1) {
178
+ if (readUint32(buffer, offset) !== 0x02014b50)
179
+ throw new Error('zip_invalid');
180
+ const compressionMethod = readUint16(buffer, offset + 10);
181
+ const compressedSize = readUint32(buffer, offset + 20);
182
+ const uncompressedSize = readUint32(buffer, offset + 24);
183
+ const fileNameLength = readUint16(buffer, offset + 28);
184
+ const extraLength = readUint16(buffer, offset + 30);
185
+ const commentLength = readUint16(buffer, offset + 32);
186
+ const localHeaderOffset = readUint32(buffer, offset + 42);
187
+ const path = normalizePath(buffer.subarray(offset + 46, offset + 46 + fileNameLength).toString('utf8'));
188
+ if (path && !path.endsWith('/')) {
189
+ if (readUint32(buffer, localHeaderOffset) !== 0x04034b50)
190
+ throw new Error('zip_invalid');
191
+ const localNameLength = readUint16(buffer, localHeaderOffset + 26);
192
+ const localExtraLength = readUint16(buffer, localHeaderOffset + 28);
193
+ entries.push({
194
+ path,
195
+ name: path.split('/').at(-1) ?? path,
196
+ compressionMethod,
197
+ compressedSize,
198
+ uncompressedSize,
199
+ dataStart: localHeaderOffset + 30 + localNameLength + localExtraLength,
200
+ });
201
+ }
202
+ offset += 46 + fileNameLength + extraLength + commentLength;
203
+ }
204
+ return entries;
205
+ }
206
+ async function readZipEntryBytes(buffer, entry) {
207
+ const compressed = buffer.subarray(entry.dataStart, entry.dataStart + entry.compressedSize);
208
+ if (entry.compressionMethod === 0)
209
+ return compressed;
210
+ if (entry.compressionMethod === 8)
211
+ return inflateRawAsync(compressed);
212
+ throw new Error('zip_compression_unsupported');
213
+ }
214
+ async function chooseZipDataEntry(buffer, entries) {
215
+ const entryByPath = new Map(entries.map((entry) => [entry.path, entry]));
216
+ const manifestEntries = entries
217
+ .filter((entry) => entry.name.toLowerCase() === 'manifest.json')
218
+ .sort((a, b) => compareDatasetPaths(a.path, b.path));
219
+ for (const manifestEntry of manifestEntries) {
220
+ try {
221
+ const manifestText = (await readZipEntryBytes(buffer, manifestEntry)).toString('utf8');
222
+ const manifest = JSON.parse(manifestText);
223
+ if (typeof manifest.file !== 'string')
224
+ continue;
225
+ const targetPath = joinPath(getDirectory(manifestEntry.path), manifest.file);
226
+ const matchedEntry = entryByPath.get(targetPath);
227
+ if (matchedEntry && isStructuredDatasetExtension(getExtension(matchedEntry.name)))
228
+ return matchedEntry;
229
+ }
230
+ catch {
231
+ // Ignore invalid metadata files; data file candidates remain authoritative.
232
+ }
233
+ }
234
+ const datasetEntries = entries
235
+ .filter((entry) => isStructuredDatasetExtension(getExtension(entry.name)) && entry.name.toLowerCase() !== 'manifest.json')
236
+ .sort((a, b) => compareDatasetPaths(a.path, b.path));
237
+ const first = datasetEntries[0];
238
+ if (!first)
239
+ throw new Error('unsupported_file_type');
240
+ return first;
241
+ }
242
+ async function inlineZipImages(samples, dataEntry, buffer, entries) {
243
+ const imageEntries = new Map(entries.filter((entry) => extensionToImageMimeType(entry.path)).map((entry) => [entry.path, entry]));
244
+ if (imageEntries.size === 0)
245
+ return samples;
246
+ const dataDirectory = getDirectory(dataEntry.path);
247
+ const dataUrlCache = new Map();
248
+ const toDataUrl = async (value) => {
249
+ if (Array.isArray(value))
250
+ return Promise.all(value.map((item) => toDataUrl(item)));
251
+ if (typeof value !== 'string')
252
+ return value;
253
+ const imagePath = resolveZipImagePath(value, dataDirectory, imageEntries);
254
+ if (!imagePath)
255
+ return value;
256
+ const cached = dataUrlCache.get(imagePath);
257
+ if (cached)
258
+ return cached;
259
+ const entry = imageEntries.get(imagePath);
260
+ const mimeType = entry ? extensionToImageMimeType(entry.path) : null;
261
+ if (!entry || !mimeType)
262
+ return value;
263
+ const bytes = await readZipEntryBytes(buffer, entry);
264
+ if (entry.uncompressedSize > 0 && bytes.byteLength !== entry.uncompressedSize)
265
+ throw new Error('zip_invalid');
266
+ const dataUrl = `data:${mimeType};base64,${bytes.toString('base64')}`;
267
+ dataUrlCache.set(imagePath, dataUrl);
268
+ return dataUrl;
269
+ };
270
+ return Promise.all(samples.map(async (sample) => Object.fromEntries(await Promise.all(Object.entries(sample).map(async ([key, value]) => [key, await toDataUrl(value)])))));
271
+ }
272
+ function extensionToSourceFormat(path) {
273
+ const extension = getExtension(path);
274
+ if (extension === '.csv')
275
+ return 'csv';
276
+ if (extension === '.tsv')
277
+ return 'tsv';
278
+ if (extension === '.jsonl')
279
+ return 'jsonl';
280
+ if (extension === '.json')
281
+ return 'json';
282
+ throw new Error('unsupported_file_type');
283
+ }
284
+ function isStructuredDatasetExtension(extension) {
285
+ return extension === '.csv' || extension === '.tsv' || extension === '.jsonl' || extension === '.json';
286
+ }
287
+ function extensionToImageMimeType(path) {
288
+ const extension = getExtension(path);
289
+ if (extension === '.jpg' || extension === '.jpeg')
290
+ return 'image/jpeg';
291
+ if (extension === '.png')
292
+ return 'image/png';
293
+ if (extension === '.webp')
294
+ return 'image/webp';
295
+ if (extension === '.gif')
296
+ return 'image/gif';
297
+ if (extension === '.bmp')
298
+ return 'image/bmp';
299
+ if (extension === '.avif')
300
+ return 'image/avif';
301
+ if (extension === '.svg')
302
+ return 'image/svg+xml';
303
+ return null;
304
+ }
305
+ function resolveZipImagePath(value, dataDirectory, imageEntries) {
306
+ const trimmed = value.trim();
307
+ if (!trimmed || /^https?:\/\//iu.test(trimmed) || /^data:image\//iu.test(trimmed))
308
+ return null;
309
+ const candidates = [joinPath(dataDirectory, trimmed), normalizePath(trimmed.replace(/^\/+/u, ''))];
310
+ return candidates.find((candidate) => imageEntries.has(candidate)) ?? null;
311
+ }
312
+ function getExtension(fileName) {
313
+ const dotIndex = fileName.lastIndexOf('.');
314
+ return dotIndex >= 0 ? fileName.slice(dotIndex).toLowerCase() : '';
315
+ }
316
+ function normalizePath(path) {
317
+ const parts = [];
318
+ for (const part of path.split('/')) {
319
+ if (!part || part === '.')
320
+ continue;
321
+ if (part === '..') {
322
+ parts.pop();
323
+ continue;
324
+ }
325
+ parts.push(part);
326
+ }
327
+ return parts.join('/');
328
+ }
329
+ function getDirectory(path) {
330
+ const normalizedPath = normalizePath(path);
331
+ const lastSlash = normalizedPath.lastIndexOf('/');
332
+ return lastSlash >= 0 ? normalizedPath.slice(0, lastSlash) : '';
333
+ }
334
+ function joinPath(directory, fileName) {
335
+ return normalizePath(directory ? `${directory}/${fileName}` : fileName);
336
+ }
337
+ function compareDatasetPaths(left, right) {
338
+ const leftDepth = normalizePath(left).split('/').length;
339
+ const rightDepth = normalizePath(right).split('/').length;
340
+ if (leftDepth !== rightDepth)
341
+ return leftDepth - rightDepth;
342
+ return left.localeCompare(right);
343
+ }
344
+ //# sourceMappingURL=dataset-import-raw-parser.js.map