@ekairos/dataset 1.8.3

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 (76) hide show
  1. package/dist/clearDataset.tool.d.ts +22 -0
  2. package/dist/clearDataset.tool.d.ts.map +1 -0
  3. package/dist/clearDataset.tool.js +58 -0
  4. package/dist/clearDataset.tool.js.map +1 -0
  5. package/dist/completeDataset.tool.d.ts +27 -0
  6. package/dist/completeDataset.tool.d.ts.map +1 -0
  7. package/dist/completeDataset.tool.js +258 -0
  8. package/dist/completeDataset.tool.js.map +1 -0
  9. package/dist/datasetFiles.d.ts +4 -0
  10. package/dist/datasetFiles.d.ts.map +1 -0
  11. package/dist/datasetFiles.js +13 -0
  12. package/dist/datasetFiles.js.map +1 -0
  13. package/dist/domain.d.ts +2 -0
  14. package/dist/domain.d.ts.map +1 -0
  15. package/dist/domain.js +6 -0
  16. package/dist/domain.js.map +1 -0
  17. package/dist/executeCommand.tool.d.ts +37 -0
  18. package/dist/executeCommand.tool.d.ts.map +1 -0
  19. package/dist/executeCommand.tool.js +123 -0
  20. package/dist/executeCommand.tool.js.map +1 -0
  21. package/dist/file/file-dataset.agent.d.ts +51 -0
  22. package/dist/file/file-dataset.agent.d.ts.map +1 -0
  23. package/dist/file/file-dataset.agent.js +272 -0
  24. package/dist/file/file-dataset.agent.js.map +1 -0
  25. package/dist/file/filepreview.d.ts +41 -0
  26. package/dist/file/filepreview.d.ts.map +1 -0
  27. package/dist/file/filepreview.js +188 -0
  28. package/dist/file/filepreview.js.map +1 -0
  29. package/dist/file/generateSchema.tool.d.ts +31 -0
  30. package/dist/file/generateSchema.tool.d.ts.map +1 -0
  31. package/dist/file/generateSchema.tool.js +108 -0
  32. package/dist/file/generateSchema.tool.js.map +1 -0
  33. package/dist/file/index.d.ts +2 -0
  34. package/dist/file/index.d.ts.map +1 -0
  35. package/dist/file/index.js +18 -0
  36. package/dist/file/index.js.map +1 -0
  37. package/dist/file/prompts.d.ts +3 -0
  38. package/dist/file/prompts.d.ts.map +1 -0
  39. package/dist/file/prompts.js +194 -0
  40. package/dist/file/prompts.js.map +1 -0
  41. package/dist/file/scripts/file_metadata.py +71 -0
  42. package/dist/file/scripts/preview_head_csv.py +24 -0
  43. package/dist/file/scripts/preview_head_excel.py +30 -0
  44. package/dist/file/scripts/preview_mid_csv.py +36 -0
  45. package/dist/file/scripts/preview_mid_excel.py +39 -0
  46. package/dist/file/scripts/preview_tail_csv.py +27 -0
  47. package/dist/file/scripts/preview_tail_excel.py +29 -0
  48. package/dist/index.d.ts +8 -0
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.js +24 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/schema.d.ts +62 -0
  53. package/dist/schema.d.ts.map +1 -0
  54. package/dist/schema.js +46 -0
  55. package/dist/schema.js.map +1 -0
  56. package/dist/service.d.ts +73 -0
  57. package/dist/service.d.ts.map +1 -0
  58. package/dist/service.js +423 -0
  59. package/dist/service.js.map +1 -0
  60. package/dist/transform/filepreview.d.ts +24 -0
  61. package/dist/transform/filepreview.d.ts.map +1 -0
  62. package/dist/transform/filepreview.js +92 -0
  63. package/dist/transform/filepreview.js.map +1 -0
  64. package/dist/transform/index.d.ts +2 -0
  65. package/dist/transform/index.d.ts.map +1 -0
  66. package/dist/transform/index.js +18 -0
  67. package/dist/transform/index.js.map +1 -0
  68. package/dist/transform/prompts.d.ts +35 -0
  69. package/dist/transform/prompts.d.ts.map +1 -0
  70. package/dist/transform/prompts.js +137 -0
  71. package/dist/transform/prompts.js.map +1 -0
  72. package/dist/transform/transform-dataset.agent.d.ts +58 -0
  73. package/dist/transform/transform-dataset.agent.d.ts.map +1 -0
  74. package/dist/transform/transform-dataset.agent.js +283 -0
  75. package/dist/transform/transform-dataset.agent.js.map +1 -0
  76. package/package.json +56 -0
@@ -0,0 +1,22 @@
1
+ import { Sandbox } from "@vercel/sandbox";
2
+ import { DatasetService } from "./service";
3
+ interface ClearDatasetToolParams {
4
+ service: DatasetService;
5
+ datasetId: string;
6
+ sandbox: Sandbox;
7
+ }
8
+ export declare function createClearDatasetTool({ service, datasetId, sandbox }: ClearDatasetToolParams): import("ai").Tool<{
9
+ reason: string;
10
+ }, {
11
+ success: boolean;
12
+ error: string;
13
+ deletedRecords?: undefined;
14
+ message?: undefined;
15
+ } | {
16
+ success: boolean;
17
+ deletedRecords: number;
18
+ message: string;
19
+ error?: undefined;
20
+ }>;
21
+ export {};
22
+ //# sourceMappingURL=clearDataset.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clearDataset.tool.d.ts","sourceRoot":"","sources":["../src/clearDataset.tool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAE1C,UAAU,sBAAsB;IAC5B,OAAO,EAAE,cAAc,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;CACnB;AAED,wBAAgB,sBAAsB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,sBAAsB;;;;;;;;;;;;GA0D7F"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createClearDatasetTool = createClearDatasetTool;
4
+ const ai_1 = require("ai");
5
+ const zod_1 = require("zod");
6
+ const datasetFiles_1 = require("./datasetFiles");
7
+ function createClearDatasetTool({ service, datasetId, sandbox }) {
8
+ return (0, ai_1.tool)({
9
+ description: "Clear all dataset records and output files. This will delete all generated data and reset the dataset to its initial state.",
10
+ inputSchema: zod_1.z.object({
11
+ reason: zod_1.z.string().describe("The reason for clearing the dataset"),
12
+ }),
13
+ execute: async ({ reason }) => {
14
+ console.log(`[Dataset ${datasetId}] ========================================`);
15
+ console.log(`[Dataset ${datasetId}] Tool: clearDataset`);
16
+ console.log(`[Dataset ${datasetId}] Reason: ${reason}`);
17
+ console.log(`[Dataset ${datasetId}] ========================================`);
18
+ const outputPath = (0, datasetFiles_1.getDatasetOutputPath)(datasetId);
19
+ console.log(`[Dataset ${datasetId}] Step 1: Deleting output file`);
20
+ try {
21
+ const result = await sandbox.runCommand({
22
+ cmd: "rm",
23
+ args: ["-f", outputPath],
24
+ });
25
+ if (result.exitCode !== 0) {
26
+ const stderr = await result.stderr();
27
+ console.warn(`[Dataset ${datasetId}] Failed to delete output file: ${stderr}`);
28
+ }
29
+ else {
30
+ console.log(`[Dataset ${datasetId}] ✅ Output file deleted`);
31
+ }
32
+ }
33
+ catch (error) {
34
+ const message = error instanceof Error ? error.message : String(error);
35
+ console.warn(`[Dataset ${datasetId}] Error deleting output file: ${message}`);
36
+ }
37
+ console.log(`[Dataset ${datasetId}] Step 2: Clearing dataset records`);
38
+ const clearResult = await service.clearDataset(datasetId);
39
+ if (!clearResult.ok) {
40
+ console.error(`[Dataset ${datasetId}] Failed to clear dataset: ${clearResult.error}`);
41
+ return {
42
+ success: false,
43
+ error: clearResult.error,
44
+ };
45
+ }
46
+ const deletedCount = clearResult.data.deletedCount;
47
+ console.log(`[Dataset ${datasetId}] ✅ Cleared ${deletedCount} records`);
48
+ console.log(`[Dataset ${datasetId}] Dataset cleared successfully`);
49
+ console.log(`[Dataset ${datasetId}] ========================================`);
50
+ return {
51
+ success: true,
52
+ deletedRecords: deletedCount,
53
+ message: `Dataset cleared successfully. Deleted ${deletedCount} records and output files. Reason: ${reason}`,
54
+ };
55
+ },
56
+ });
57
+ }
58
+ //# sourceMappingURL=clearDataset.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clearDataset.tool.js","sourceRoot":"","sources":["../src/clearDataset.tool.ts"],"names":[],"mappings":";;AAYA,wDA0DC;AAtED,2BAAyB;AACzB,6BAAuB;AAEvB,iDAAqD;AASrD,SAAgB,sBAAsB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAA0B;IAC1F,OAAO,IAAA,SAAI,EAAC;QACR,WAAW,EAAE,6HAA6H;QAC1I,WAAW,EAAE,OAAC,CAAC,MAAM,CAAC;YAClB,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;SACrE,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YAC1B,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,4CAA4C,CAAC,CAAA;YAC9E,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,sBAAsB,CAAC,CAAA;YACxD,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,aAAa,MAAM,EAAE,CAAC,CAAA;YACvD,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,4CAA4C,CAAC,CAAA;YAE9E,MAAM,UAAU,GAAG,IAAA,mCAAoB,EAAC,SAAS,CAAC,CAAA;YAElD,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,gCAAgC,CAAC,CAAA;YAClE,IAAI,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;oBACpC,GAAG,EAAE,IAAI;oBACT,IAAI,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC;iBAC3B,CAAC,CAAA;gBAEF,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;oBACxB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,CAAA;oBACpC,OAAO,CAAC,IAAI,CAAC,YAAY,SAAS,mCAAmC,MAAM,EAAE,CAAC,CAAA;gBAClF,CAAC;qBACI,CAAC;oBACF,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,yBAAyB,CAAC,CAAA;gBAC/D,CAAC;YACL,CAAC;YACD,OAAO,KAAK,EAAE,CAAC;gBACX,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBACtE,OAAO,CAAC,IAAI,CAAC,YAAY,SAAS,iCAAiC,OAAO,EAAE,CAAC,CAAA;YACjF,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,oCAAoC,CAAC,CAAA;YACtE,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;YAEzD,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,YAAY,SAAS,8BAA8B,WAAW,CAAC,KAAK,EAAE,CAAC,CAAA;gBACrF,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,WAAW,CAAC,KAAK;iBAC3B,CAAA;YACL,CAAC;YAED,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,YAAY,CAAA;YAClD,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,eAAe,YAAY,UAAU,CAAC,CAAA;YAEvE,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,gCAAgC,CAAC,CAAA;YAClE,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,4CAA4C,CAAC,CAAA;YAE9E,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,cAAc,EAAE,YAAY;gBAC5B,OAAO,EAAE,yCAAyC,YAAY,sCAAsC,MAAM,EAAE;aAC/G,CAAA;QACL,CAAC;KACJ,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { Sandbox } from "@vercel/sandbox";
2
+ import { DatasetService } from "./service";
3
+ interface CompleteDatasetToolParams {
4
+ service: DatasetService;
5
+ datasetId: string;
6
+ sandbox: Sandbox;
7
+ }
8
+ export declare function createCompleteDatasetTool({ service, datasetId, sandbox }: CompleteDatasetToolParams): import("ai").Tool<{
9
+ summary: string;
10
+ }, {
11
+ success: boolean;
12
+ validation?: Array<{
13
+ index: number;
14
+ valid: boolean;
15
+ errors?: string[];
16
+ }>;
17
+ validRowCount?: number;
18
+ error?: string;
19
+ } | {
20
+ success: boolean;
21
+ validRows: number | undefined;
22
+ fileId: string;
23
+ storagePath: string;
24
+ message: string;
25
+ }>;
26
+ export {};
27
+ //# sourceMappingURL=completeDataset.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completeDataset.tool.d.ts","sourceRoot":"","sources":["../src/completeDataset.tool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAKzC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAe1C,UAAU,yBAAyB;IAC/B,OAAO,EAAE,cAAc,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;CACnB;AAED,wBAAgB,yBAAyB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,yBAAyB;;;aAkLvF,OAAO;iBACH,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;oBACxD,MAAM;YACd,MAAM;;;;;;;GA1BjB"}
@@ -0,0 +1,258 @@
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.createCompleteDatasetTool = createCompleteDatasetTool;
7
+ const ai_1 = require("ai");
8
+ const zod_1 = require("zod");
9
+ const ajv_1 = __importDefault(require("ajv"));
10
+ const datasetFiles_1 = require("./datasetFiles");
11
+ let ajvInstance = null;
12
+ function getAjv() {
13
+ if (!ajvInstance) {
14
+ ajvInstance = new ajv_1.default({
15
+ allErrors: true,
16
+ strict: false,
17
+ });
18
+ }
19
+ return ajvInstance;
20
+ }
21
+ function createCompleteDatasetTool({ service, datasetId, sandbox }) {
22
+ return (0, ai_1.tool)({
23
+ description: "Mark the dataset as completed. Use only when output.jsonl has been successfully generated and is ready for validation.",
24
+ inputSchema: zod_1.z.object({
25
+ summary: zod_1.z.string().describe("Summary of the completed dataset including record count and structure"),
26
+ }),
27
+ execute: async ({ summary }) => {
28
+ console.log(`[Dataset ${datasetId}] ========================================`);
29
+ console.log(`[Dataset ${datasetId}] Tool: completeDataset`);
30
+ console.log(`[Dataset ${datasetId}] Summary: ${summary}`);
31
+ console.log(`[Dataset ${datasetId}] ========================================`);
32
+ const outputPath = (0, datasetFiles_1.getDatasetOutputPath)(datasetId);
33
+ try {
34
+ await ensureFileExists(sandbox, outputPath);
35
+ }
36
+ catch (error) {
37
+ const message = error instanceof Error ? error.message : String(error);
38
+ console.error(`[Dataset ${datasetId}] Missing output file:`, message);
39
+ return {
40
+ success: false,
41
+ error: message,
42
+ };
43
+ }
44
+ console.log(`[Dataset ${datasetId}] Validating dataset rows against schema`);
45
+ const datasetResult = await service.getDatasetById(datasetId);
46
+ if (!datasetResult.ok) {
47
+ console.error(`[Dataset ${datasetId}] ${datasetResult.error}`);
48
+ return {
49
+ success: false,
50
+ error: datasetResult.error,
51
+ };
52
+ }
53
+ const datasetRecord = datasetResult.data;
54
+ if (!datasetRecord.schema) {
55
+ console.error(`[Dataset ${datasetId}] Schema not found in database`);
56
+ return {
57
+ success: false,
58
+ error: "Schema not found in database. Please generate schema first.",
59
+ };
60
+ }
61
+ const schemaJson = datasetRecord.schema.schema;
62
+ let validator;
63
+ try {
64
+ validator = getAjv().compile(schemaJson);
65
+ }
66
+ catch (error) {
67
+ const message = error instanceof Error ? error.message : String(error);
68
+ console.error(`[Dataset ${datasetId}] Failed to compile schema:`, message);
69
+ return {
70
+ success: false,
71
+ error: `Failed to compile schema: ${message}`,
72
+ };
73
+ }
74
+ const validationResult = await validateJsonlRows({
75
+ sandbox,
76
+ outputPath,
77
+ validator,
78
+ datasetId,
79
+ });
80
+ if (!validationResult.success) {
81
+ return validationResult;
82
+ }
83
+ const totalValidRows = validationResult.validRowCount;
84
+ console.log(`[Dataset ${datasetId}] Reading file content for upload`);
85
+ const fileStream = await sandbox.readFile({ path: outputPath });
86
+ if (!fileStream) {
87
+ console.error(`[Dataset ${datasetId}] Failed to read file`);
88
+ return {
89
+ success: false,
90
+ error: "Failed to read file from sandbox",
91
+ };
92
+ }
93
+ const chunks = [];
94
+ for await (const chunk of fileStream) {
95
+ if (typeof chunk === "string") {
96
+ chunks.push(Buffer.from(chunk, "utf-8"));
97
+ }
98
+ else if (chunk instanceof Uint8Array) {
99
+ chunks.push(Buffer.from(chunk));
100
+ }
101
+ else if (chunk instanceof ArrayBuffer) {
102
+ chunks.push(Buffer.from(chunk));
103
+ }
104
+ else if (chunk) {
105
+ chunks.push(Buffer.from(chunk));
106
+ }
107
+ }
108
+ if (chunks.length === 0) {
109
+ console.error(`[Dataset ${datasetId}] Empty file content`);
110
+ return {
111
+ success: false,
112
+ error: "Empty file content",
113
+ };
114
+ }
115
+ const fileBuffer = Buffer.concat(chunks);
116
+ console.log(`[Dataset ${datasetId}] Uploading file to InstantDB storage`);
117
+ const uploadResult = await service.uploadDatasetOutputFile({
118
+ datasetId,
119
+ fileBuffer,
120
+ });
121
+ if (!uploadResult.ok) {
122
+ console.error(`[Dataset ${datasetId}] File upload failed: ${uploadResult.error}`);
123
+ return {
124
+ success: false,
125
+ error: uploadResult.error,
126
+ };
127
+ }
128
+ console.log(`[Dataset ${datasetId}] File uploaded successfully: ${uploadResult.data.fileId}`);
129
+ const statusResult = await service.updateDatasetStatus({
130
+ datasetId,
131
+ status: "completed",
132
+ calculatedTotalRows: totalValidRows,
133
+ actualGeneratedRowCount: totalValidRows,
134
+ });
135
+ if (!statusResult.ok) {
136
+ console.error(`[Dataset ${datasetId}] Failed to update status: ${statusResult.error}`);
137
+ return {
138
+ success: false,
139
+ error: statusResult.error,
140
+ };
141
+ }
142
+ console.log(`[Dataset ${datasetId}] Dataset marked as COMPLETED (${totalValidRows} valid rows)`);
143
+ console.log(`[Dataset ${datasetId}] ========================================`);
144
+ return {
145
+ success: true,
146
+ validRows: totalValidRows,
147
+ fileId: uploadResult.data.fileId,
148
+ storagePath: uploadResult.data.storagePath,
149
+ message: "Dataset creation completed and uploaded to storage",
150
+ };
151
+ },
152
+ });
153
+ }
154
+ async function ensureFileExists(sandbox, path) {
155
+ const result = await sandbox.runCommand({
156
+ cmd: "test",
157
+ args: ["-f", path],
158
+ });
159
+ if (result.exitCode !== 0) {
160
+ throw new Error(`Required file not found: ${path}`);
161
+ }
162
+ }
163
+ async function validateJsonlRows({ sandbox, outputPath, validator, datasetId }) {
164
+ const validation = [];
165
+ let validRowCount = 0;
166
+ console.log(`[Dataset ${datasetId}] Reading and validating JSONL file from sandbox`);
167
+ const fileStream = await sandbox.readFile({ path: outputPath });
168
+ if (!fileStream) {
169
+ console.log(`[Dataset ${datasetId}] Empty output file`);
170
+ return {
171
+ success: true,
172
+ validation,
173
+ validRowCount: 0,
174
+ };
175
+ }
176
+ const chunks = [];
177
+ for await (const chunk of fileStream) {
178
+ if (typeof chunk === "string") {
179
+ chunks.push(Buffer.from(chunk, "utf-8"));
180
+ }
181
+ else if (chunk instanceof Uint8Array) {
182
+ chunks.push(Buffer.from(chunk));
183
+ }
184
+ else if (chunk instanceof ArrayBuffer) {
185
+ chunks.push(Buffer.from(chunk));
186
+ }
187
+ else if (chunk) {
188
+ chunks.push(Buffer.from(chunk));
189
+ }
190
+ }
191
+ if (chunks.length === 0) {
192
+ console.log(`[Dataset ${datasetId}] Empty output file`);
193
+ return {
194
+ success: true,
195
+ validation,
196
+ validRowCount: 0,
197
+ };
198
+ }
199
+ const fileContent = Buffer.concat(chunks).toString();
200
+ const lines = fileContent.split("\n");
201
+ console.log(`[Dataset ${datasetId}] Validating ${lines.length} lines`);
202
+ for (let index = 0; index < lines.length; index++) {
203
+ const line = lines[index];
204
+ const trimmed = line.trim();
205
+ if (trimmed.length === 0) {
206
+ continue;
207
+ }
208
+ let record;
209
+ try {
210
+ record = JSON.parse(trimmed);
211
+ }
212
+ catch (error) {
213
+ const message = error instanceof Error ? error.message : String(error);
214
+ validation.push({
215
+ index,
216
+ valid: false,
217
+ errors: [`Invalid JSON: ${message}`],
218
+ });
219
+ continue;
220
+ }
221
+ if (record.type !== "row") {
222
+ continue;
223
+ }
224
+ const data = record.data;
225
+ if (data === undefined || data === null) {
226
+ validation.push({
227
+ index,
228
+ valid: false,
229
+ errors: ["Missing 'data' field"],
230
+ });
231
+ continue;
232
+ }
233
+ const valid = validator(data);
234
+ if (!valid) {
235
+ const errors = Array.isArray(validator.errors)
236
+ ? validator.errors.map((err) => err.message || "Unknown validation error")
237
+ : ["Unknown validation error"];
238
+ validation.push({
239
+ index,
240
+ valid: false,
241
+ errors,
242
+ });
243
+ continue;
244
+ }
245
+ validation.push({
246
+ index,
247
+ valid: true,
248
+ });
249
+ validRowCount++;
250
+ }
251
+ console.log(`[Dataset ${datasetId}] Validation completed: ${validRowCount} valid rows`);
252
+ return {
253
+ success: true,
254
+ validation,
255
+ validRowCount,
256
+ };
257
+ }
258
+ //# sourceMappingURL=completeDataset.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completeDataset.tool.js","sourceRoot":"","sources":["../src/completeDataset.tool.ts"],"names":[],"mappings":";;;;;AA4BA,8DA2JC;AAvLD,2BAAyB;AACzB,6BAAuB;AAEvB,8CAA2C;AAC3C,iDAEuB;AAGvB,IAAI,WAAW,GAAe,IAAI,CAAA;AAElC,SAAS,MAAM;IACX,IAAI,CAAC,WAAW,EAChB,CAAC;QACG,WAAW,GAAG,IAAI,aAAG,CAAC;YAClB,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,KAAK;SAChB,CAAC,CAAA;IACN,CAAC;IACD,OAAO,WAAW,CAAA;AACtB,CAAC;AAQD,SAAgB,yBAAyB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAA6B;IAChG,OAAO,IAAA,SAAI,EAAC;QACR,WAAW,EAAE,wHAAwH;QACrI,WAAW,EAAE,OAAC,CAAC,MAAM,CAAC;YAClB,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uEAAuE,CAAC;SACxG,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;YAC3B,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,4CAA4C,CAAC,CAAA;YAC9E,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,yBAAyB,CAAC,CAAA;YAC3D,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,cAAc,OAAO,EAAE,CAAC,CAAA;YACzD,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,4CAA4C,CAAC,CAAA;YAE9E,MAAM,UAAU,GAAG,IAAA,mCAAoB,EAAC,SAAS,CAAC,CAAA;YAElD,IAAI,CAAC;gBACD,MAAM,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;YAC/C,CAAC;YACD,OAAO,KAAK,EAAE,CAAC;gBACX,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBACtE,OAAO,CAAC,KAAK,CAAC,YAAY,SAAS,wBAAwB,EAAE,OAAO,CAAC,CAAA;gBACrE,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,OAAO;iBACjB,CAAA;YACL,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,0CAA0C,CAAC,CAAA;YAE5E,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;YAC7D,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;gBACpB,OAAO,CAAC,KAAK,CAAC,YAAY,SAAS,KAAK,aAAa,CAAC,KAAK,EAAE,CAAC,CAAA;gBAC9D,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,aAAa,CAAC,KAAK;iBAC7B,CAAA;YACL,CAAC;YAED,MAAM,aAAa,GAAG,aAAa,CAAC,IAAI,CAAA;YACxC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;gBACxB,OAAO,CAAC,KAAK,CAAC,YAAY,SAAS,gCAAgC,CAAC,CAAA;gBACpE,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,6DAA6D;iBACvE,CAAA;YACL,CAAC;YAED,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAA;YAE9C,IAAI,SAA2B,CAAA;YAC/B,IAAI,CAAC;gBACD,SAAS,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;YAC5C,CAAC;YACD,OAAO,KAAK,EAAE,CAAC;gBACX,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBACtE,OAAO,CAAC,KAAK,CAAC,YAAY,SAAS,6BAA6B,EAAE,OAAO,CAAC,CAAA;gBAC1E,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,6BAA6B,OAAO,EAAE;iBAChD,CAAA;YACL,CAAC;YAED,MAAM,gBAAgB,GAAG,MAAM,iBAAiB,CAAC;gBAC7C,OAAO;gBACP,UAAU;gBACV,SAAS;gBACT,SAAS;aACZ,CAAC,CAAA;YAEF,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;gBAC5B,OAAO,gBAAgB,CAAA;YAC3B,CAAC;YAED,MAAM,cAAc,GAAG,gBAAgB,CAAC,aAAa,CAAA;YAErD,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,mCAAmC,CAAC,CAAA;YACrE,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAA;YAE/D,IAAI,CAAC,UAAU,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,YAAY,SAAS,uBAAuB,CAAC,CAAA;gBAC3D,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,kCAAkC;iBAC5C,CAAA;YACL,CAAC;YAED,MAAM,MAAM,GAAa,EAAE,CAAA;YAC3B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,UAAuE,EAAE,CAAC;gBAChG,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC5B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAA;gBAC5C,CAAC;qBACI,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;oBACnC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;gBACnC,CAAC;qBACI,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;oBACpC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;gBACnC,CAAC;qBACI,IAAI,KAAK,EAAE,CAAC;oBACb,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;gBACnC,CAAC;YACL,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,KAAK,CAAC,YAAY,SAAS,sBAAsB,CAAC,CAAA;gBAC1D,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,oBAAoB;iBAC9B,CAAA;YACL,CAAC;YAED,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YAExC,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,uCAAuC,CAAC,CAAA;YAEzE,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,uBAAuB,CAAC;gBACvD,SAAS;gBACT,UAAU;aACb,CAAC,CAAA;YAEF,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;gBACnB,OAAO,CAAC,KAAK,CAAC,YAAY,SAAS,yBAAyB,YAAY,CAAC,KAAK,EAAE,CAAC,CAAA;gBACjF,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,YAAY,CAAC,KAAK;iBAC5B,CAAA;YACL,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,iCAAiC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;YAE7F,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,mBAAmB,CAAC;gBACnD,SAAS;gBACT,MAAM,EAAE,WAAW;gBACnB,mBAAmB,EAAE,cAAc;gBACnC,uBAAuB,EAAE,cAAc;aAC1C,CAAC,CAAA;YAEF,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;gBACnB,OAAO,CAAC,KAAK,CAAC,YAAY,SAAS,8BAA8B,YAAY,CAAC,KAAK,EAAE,CAAC,CAAA;gBACtF,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,YAAY,CAAC,KAAK;iBAC5B,CAAA;YACL,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,kCAAkC,cAAc,cAAc,CAAC,CAAA;YAChG,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,4CAA4C,CAAC,CAAA;YAE9E,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,cAAc;gBACzB,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM;gBAChC,WAAW,EAAE,YAAY,CAAC,IAAI,CAAC,WAAW;gBAC1C,OAAO,EAAE,oDAAoD;aAChE,CAAA;QACL,CAAC;KACJ,CAAC,CAAA;AACN,CAAC;AAID,KAAK,UAAU,gBAAgB,CAAC,OAAgB,EAAE,IAAY;IAC1D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;QACpC,GAAG,EAAE,MAAM;QACX,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;KACrB,CAAC,CAAA;IAEF,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAA;IACvD,CAAC;AACL,CAAC;AASD,KAAK,UAAU,iBAAiB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAA2B;IAMnG,MAAM,UAAU,GAAgE,EAAE,CAAA;IAClF,IAAI,aAAa,GAAG,CAAC,CAAA;IAErB,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,kDAAkD,CAAC,CAAA;IAEpF,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAA;IAE/D,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,qBAAqB,CAAC,CAAA;QACvD,OAAO;YACH,OAAO,EAAE,IAAI;YACb,UAAU;YACV,aAAa,EAAE,CAAC;SACnB,CAAA;IACL,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,UAAuE,EAAE,CAAC;QAChG,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAA;QAC5C,CAAC;aACI,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;QACnC,CAAC;aACI,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;QACnC,CAAC;aACI,IAAI,KAAK,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;QACnC,CAAC;IACL,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,qBAAqB,CAAC,CAAA;QACvD,OAAO;YACH,OAAO,EAAE,IAAI;YACb,UAAU;YACV,aAAa,EAAE,CAAC;SACnB,CAAA;IACL,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAA;IACpD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACrC,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,gBAAgB,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAA;IAEtE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EACjD,CAAC;QACG,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;QAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,SAAQ;QACZ,CAAC;QAED,IAAI,MAAW,CAAA;QACf,IAAI,CAAC;YACD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAChC,CAAC;QACD,OAAO,KAAK,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACtE,UAAU,CAAC,IAAI,CAAC;gBACZ,KAAK;gBACL,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,CAAC,iBAAiB,OAAO,EAAE,CAAC;aACvC,CAAC,CAAA;YACF,SAAQ;QACZ,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACxB,SAAQ;QACZ,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;QACxB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YACtC,UAAU,CAAC,IAAI,CAAC;gBACZ,KAAK;gBACL,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,CAAC,sBAAsB,CAAC;aACnC,CAAC,CAAA;YACF,SAAQ;QACZ,CAAC;QAED,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;QAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC;gBAC1C,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,0BAA0B,CAAC;gBAC1E,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAA;YAClC,UAAU,CAAC,IAAI,CAAC;gBACZ,KAAK;gBACL,KAAK,EAAE,KAAK;gBACZ,MAAM;aACT,CAAC,CAAA;YACF,SAAQ;QACZ,CAAC;QAED,UAAU,CAAC,IAAI,CAAC;YACZ,KAAK;YACL,KAAK,EAAE,IAAI;SACd,CAAC,CAAA;QACF,aAAa,EAAE,CAAA;IACnB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,2BAA2B,aAAa,aAAa,CAAC,CAAA;IAEvF,OAAO;QACH,OAAO,EAAE,IAAI;QACb,UAAU;QACV,aAAa;KAChB,CAAA;AACL,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const DATASET_OUTPUT_FILE_NAME = "output.jsonl";
2
+ export declare function getDatasetWorkstation(datasetId: string): string;
3
+ export declare function getDatasetOutputPath(datasetId: string): string;
4
+ //# sourceMappingURL=datasetFiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datasetFiles.d.ts","sourceRoot":"","sources":["../src/datasetFiles.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,iBAAiB,CAAA;AAEtD,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAG/D;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAG9D"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DATASET_OUTPUT_FILE_NAME = void 0;
4
+ exports.getDatasetWorkstation = getDatasetWorkstation;
5
+ exports.getDatasetOutputPath = getDatasetOutputPath;
6
+ exports.DATASET_OUTPUT_FILE_NAME = "output.jsonl";
7
+ function getDatasetWorkstation(datasetId) {
8
+ return `/vercel/sandbox/datasets/${datasetId}`;
9
+ }
10
+ function getDatasetOutputPath(datasetId) {
11
+ return `${getDatasetWorkstation(datasetId)}/${exports.DATASET_OUTPUT_FILE_NAME}`;
12
+ }
13
+ //# sourceMappingURL=datasetFiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datasetFiles.js","sourceRoot":"","sources":["../src/datasetFiles.ts"],"names":[],"mappings":";;;AAEA,sDAGC;AAED,oDAGC;AAVY,QAAA,wBAAwB,GAAG,cAAc,CAAA;AAEtD,SAAgB,qBAAqB,CAAC,SAAiB;IAEnD,OAAO,4BAA4B,SAAS,EAAE,CAAA;AAClD,CAAC;AAED,SAAgB,oBAAoB,CAAC,SAAiB;IAElD,OAAO,GAAG,qBAAqB,CAAC,SAAS,CAAC,IAAI,gCAAwB,EAAE,CAAA;AAC5E,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { datasetDomain } from "./schema";
2
+ //# sourceMappingURL=domain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../src/domain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA"}
package/dist/domain.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.datasetDomain = void 0;
4
+ var schema_1 = require("./schema");
5
+ Object.defineProperty(exports, "datasetDomain", { enumerable: true, get: function () { return schema_1.datasetDomain; } });
6
+ //# sourceMappingURL=domain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain.js","sourceRoot":"","sources":["../src/domain.ts"],"names":[],"mappings":";;;AAAA,mCAAwC;AAA/B,uGAAA,aAAa,OAAA"}
@@ -0,0 +1,37 @@
1
+ import { Sandbox } from "@vercel/sandbox";
2
+ import { DatasetService } from "./service";
3
+ interface ExecuteCommandToolParams {
4
+ service: DatasetService;
5
+ datasetId: string;
6
+ sandbox: Sandbox;
7
+ }
8
+ export declare function createExecuteCommandTool({ service, datasetId, sandbox }: ExecuteCommandToolParams): import("ai").Tool<{
9
+ pythonCode: string;
10
+ scriptName: string;
11
+ }, {
12
+ success: boolean;
13
+ exitCode: number;
14
+ stdout: string;
15
+ stderr: string;
16
+ scriptPath: string;
17
+ error: string;
18
+ stdoutTruncated: boolean;
19
+ stderrTruncated: boolean;
20
+ stdoutOriginalLength: number;
21
+ stderrOriginalLength: number;
22
+ message?: undefined;
23
+ } | {
24
+ success: boolean;
25
+ exitCode: number;
26
+ stdout: string;
27
+ stderr: string;
28
+ scriptPath: string;
29
+ message: string;
30
+ stdoutTruncated: boolean;
31
+ stderrTruncated: boolean;
32
+ stdoutOriginalLength: number;
33
+ stderrOriginalLength: number;
34
+ error?: undefined;
35
+ }>;
36
+ export {};
37
+ //# sourceMappingURL=executeCommand.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executeCommand.tool.d.ts","sourceRoot":"","sources":["../src/executeCommand.tool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAO1C,UAAU,wBAAwB;IAC9B,OAAO,EAAE,cAAc,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;CACnB;AAED,wBAAgB,wBAAwB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkIjG"}
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createExecuteCommandTool = createExecuteCommandTool;
4
+ const ai_1 = require("ai");
5
+ const zod_1 = require("zod");
6
+ const datasetFiles_1 = require("./datasetFiles");
7
+ // To keep responses predictable for big data scenarios, we cap stdout/stderr.
8
+ // The tool's return payload exposes stdout (capped) plus the on-disk script path.
9
+ const MAX_STDOUT_CHARS = 20000;
10
+ const MAX_STDERR_CHARS = 5000;
11
+ function createExecuteCommandTool({ service, datasetId, sandbox }) {
12
+ return (0, ai_1.tool)({
13
+ description: "Execute Python scripts in the sandbox. Always saves script to a file before executing. The tool's output is EXACTLY the script's stdout and includes the script file path for traceability. CRITICAL: Print concise, human-readable summaries only; do NOT print raw large data. For big results, write artifacts to files in the workstation and print their file paths. Always include progress/result prints (e.g., 'Processing file X...', 'Found Y records', 'Generated output.csv').",
14
+ inputSchema: zod_1.z.object({
15
+ pythonCode: zod_1.z.string().describe("Python code to execute. Saved to a file before running. MANDATORY: Use print() to report progress and final results. Keep prints concise; avoid dumping rows/JSON. For large outputs, write to files in the workstation directory and print only file paths and brief summaries."),
16
+ scriptName: zod_1.z.string().describe("Name for the script file in snake_case (e.g., 'inspect_file', 'parse_csv', 'generate_dataset'). A UUID will be appended automatically."),
17
+ }),
18
+ execute: async ({ pythonCode, scriptName }) => {
19
+ const uuid = `${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
20
+ const workstation = (0, datasetFiles_1.getDatasetWorkstation)(datasetId);
21
+ const scriptFile = `${workstation}/${scriptName}-${uuid}.py`;
22
+ console.log(`[Dataset ${datasetId}] ========================================`);
23
+ console.log(`[Dataset ${datasetId}] Tool: executeCommand`);
24
+ console.log(`[Dataset ${datasetId}] Script: ${scriptName}`);
25
+ console.log(`[Dataset ${datasetId}] File: ${scriptFile}`);
26
+ console.log(`[Dataset ${datasetId}] Code length: ${pythonCode.length} chars`);
27
+ console.log(`[Dataset ${datasetId}] ========================================`);
28
+ try {
29
+ await sandbox.writeFiles([{
30
+ path: scriptFile,
31
+ content: Buffer.from(pythonCode, 'utf-8'),
32
+ }]);
33
+ console.log(`[Dataset ${datasetId}] Script written to: ${scriptFile}`);
34
+ console.log(`[Dataset ${datasetId}] Executing: python ${scriptFile}`);
35
+ const result = await sandbox.runCommand({
36
+ cmd: "python",
37
+ args: [scriptFile],
38
+ });
39
+ const rawStdout = await result.stdout();
40
+ const rawStderr = await result.stderr();
41
+ const exitCode = result.exitCode;
42
+ const stdout = rawStdout || "";
43
+ const stderr = rawStderr || "";
44
+ const isStdoutTruncated = stdout.length > MAX_STDOUT_CHARS;
45
+ const isStderrTruncated = stderr.length > MAX_STDERR_CHARS;
46
+ const stdoutCapped = isStdoutTruncated ? stdout.slice(0, MAX_STDOUT_CHARS) : stdout;
47
+ const stderrCapped = isStderrTruncated ? stderr.slice(0, MAX_STDERR_CHARS) : stderr;
48
+ if (exitCode !== 0) {
49
+ console.error(`[Dataset ${datasetId}] ❌ Command failed with exit code ${exitCode}`);
50
+ console.error(`[Dataset ${datasetId}] Stderr:`, stderrCapped.substring(0, 500));
51
+ console.error(`[Dataset ${datasetId}] ========================================`);
52
+ return {
53
+ success: false,
54
+ exitCode,
55
+ stdout: stdoutCapped,
56
+ stderr: stderrCapped,
57
+ scriptPath: scriptFile,
58
+ error: `Command failed with exit code ${exitCode}`,
59
+ stdoutTruncated: isStdoutTruncated,
60
+ stderrTruncated: isStderrTruncated,
61
+ stdoutOriginalLength: stdout.length,
62
+ stderrOriginalLength: stderr.length,
63
+ };
64
+ }
65
+ if (stderr && (stderr.includes("Traceback") || stderr.toLowerCase().includes("error"))) {
66
+ console.error(`[Dataset ${datasetId}] ❌ Python error detected`);
67
+ console.error(`[Dataset ${datasetId}] Stderr:`, stderrCapped.substring(0, 500));
68
+ console.error(`[Dataset ${datasetId}] ========================================`);
69
+ return {
70
+ success: false,
71
+ exitCode,
72
+ stdout: stdoutCapped,
73
+ stderr: stderrCapped,
74
+ scriptPath: scriptFile,
75
+ error: "Python error detected in stderr",
76
+ stdoutTruncated: isStdoutTruncated,
77
+ stderrTruncated: isStderrTruncated,
78
+ stdoutOriginalLength: stdout.length,
79
+ stderrOriginalLength: stderr.length,
80
+ };
81
+ }
82
+ console.log(`[Dataset ${datasetId}] ✅ Command executed successfully`);
83
+ if (stdout) {
84
+ console.log(`[Dataset ${datasetId}] Output length: ${stdout.length} chars`);
85
+ if (isStdoutTruncated) {
86
+ console.log(`[Dataset ${datasetId}] ⚠️ Stdout truncated to ${MAX_STDOUT_CHARS} chars`);
87
+ }
88
+ }
89
+ console.log(`[Dataset ${datasetId}] ========================================`);
90
+ return {
91
+ success: true,
92
+ exitCode,
93
+ stdout: stdoutCapped,
94
+ stderr: stderrCapped,
95
+ scriptPath: scriptFile,
96
+ message: "Command executed successfully",
97
+ stdoutTruncated: isStdoutTruncated,
98
+ stderrTruncated: isStderrTruncated,
99
+ stdoutOriginalLength: stdout.length,
100
+ stderrOriginalLength: stderr.length,
101
+ };
102
+ }
103
+ catch (error) {
104
+ const errorMessage = error instanceof Error ? error.message : "Unknown error";
105
+ console.error(`[Dataset ${datasetId}] executeCommand failed:`, errorMessage);
106
+ console.error(`[Dataset ${datasetId}] ========================================`);
107
+ return {
108
+ success: false,
109
+ error: errorMessage,
110
+ stdout: "",
111
+ stderr: "",
112
+ exitCode: -1,
113
+ scriptPath: scriptFile,
114
+ stdoutTruncated: false,
115
+ stderrTruncated: false,
116
+ stdoutOriginalLength: 0,
117
+ stderrOriginalLength: 0,
118
+ };
119
+ }
120
+ },
121
+ });
122
+ }
123
+ //# sourceMappingURL=executeCommand.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executeCommand.tool.js","sourceRoot":"","sources":["../src/executeCommand.tool.ts"],"names":[],"mappings":"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"}