@ekairos/dataset 1.22.40-beta.development.0 → 1.22.40

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 (175) hide show
  1. package/dist/agents.d.ts +8 -0
  2. package/dist/agents.js +8 -0
  3. package/dist/builder/agentMaterializers.d.ts +9 -0
  4. package/dist/builder/agentMaterializers.js +10 -0
  5. package/dist/builder/context.d.ts +15 -0
  6. package/dist/builder/context.js +251 -0
  7. package/dist/builder/instructions.d.ts +4 -5
  8. package/dist/builder/instructions.js +15 -21
  9. package/dist/builder/materialize.d.ts +77 -10
  10. package/dist/builder/materialize.js +495 -152
  11. package/dist/builder/materializeQuery.d.ts +12 -0
  12. package/dist/builder/materializeQuery.js +31 -0
  13. package/dist/builder/persistence.d.ts +10 -6
  14. package/dist/builder/persistence.js +107 -62
  15. package/dist/builder/{sourceRows.d.ts → rows.d.ts} +0 -1
  16. package/dist/builder/{sourceRows.js → rows.js} +3 -9
  17. package/dist/builder/schemaInference.d.ts +1 -2
  18. package/dist/builder/schemaInference.js +4 -12
  19. package/dist/builder/types.d.ts +41 -26
  20. package/dist/builder/types.js +1 -3
  21. package/dist/clearDataset.tool.d.ts +2 -3
  22. package/dist/clearDataset.tool.js +13 -17
  23. package/dist/completeDataset.steps.d.ts +117 -0
  24. package/dist/completeDataset.steps.js +537 -0
  25. package/dist/completeDataset.tool.d.ts +132 -7
  26. package/dist/completeDataset.tool.js +46 -192
  27. package/dist/contextResources.d.ts +31 -0
  28. package/dist/contextResources.js +151 -0
  29. package/dist/contextWorkspace.d.ts +79 -0
  30. package/dist/contextWorkspace.js +234 -0
  31. package/dist/dataset/steps.d.ts +39 -15
  32. package/dist/dataset/steps.js +96 -39
  33. package/dist/dataset.d.ts +2 -3
  34. package/dist/dataset.js +73 -51
  35. package/dist/datasetFiles.d.ts +5 -1
  36. package/dist/datasetFiles.js +29 -27
  37. package/dist/defineNotation.tool.d.ts +49 -0
  38. package/dist/defineNotation.tool.js +154 -0
  39. package/dist/domain.d.ts +1 -2
  40. package/dist/domain.js +1 -6
  41. package/dist/executeCommand.tool.d.ts +2 -30
  42. package/dist/executeCommand.tool.js +165 -39
  43. package/dist/file/file-dataset.agent.d.ts +19 -56
  44. package/dist/file/file-dataset.agent.js +182 -136
  45. package/dist/file/file-dataset.steps.d.ts +27 -0
  46. package/dist/file/file-dataset.steps.js +47 -0
  47. package/dist/file/file-dataset.types.d.ts +64 -0
  48. package/dist/file/file-dataset.types.js +1 -0
  49. package/dist/file/filepreview.d.ts +5 -35
  50. package/dist/file/filepreview.js +60 -107
  51. package/dist/file/filepreview.types.d.ts +31 -0
  52. package/dist/file/filepreview.types.js +1 -0
  53. package/dist/file/generateSchema.tool.d.ts +2 -3
  54. package/dist/file/generateSchema.tool.js +11 -15
  55. package/dist/file/index.d.ts +1 -2
  56. package/dist/file/index.js +1 -18
  57. package/dist/file/prompts.d.ts +2 -3
  58. package/dist/file/prompts.js +152 -32
  59. package/dist/file/scripts.generated.d.ts +1 -0
  60. package/dist/file/scripts.generated.js +11 -0
  61. package/dist/file/steps.d.ts +1 -2
  62. package/dist/file/steps.js +9 -7
  63. package/dist/id.d.ts +1 -0
  64. package/dist/id.js +10 -0
  65. package/dist/index.d.ts +9 -7
  66. package/dist/index.js +9 -23
  67. package/dist/materializeDataset.tool.d.ts +35 -28
  68. package/dist/materializeDataset.tool.js +74 -68
  69. package/dist/notation.d.ts +205 -0
  70. package/dist/notation.js +424 -0
  71. package/dist/query/index.d.ts +1 -2
  72. package/dist/query/index.js +1 -18
  73. package/dist/query/queryDomain.d.ts +3 -4
  74. package/dist/query/queryDomain.js +3 -40
  75. package/dist/query/queryDomain.step.d.ts +1 -1
  76. package/dist/query/queryDomain.step.js +24 -13
  77. package/dist/sandbox/steps.d.ts +23 -15
  78. package/dist/sandbox/steps.js +73 -76
  79. package/dist/sandbox.steps.d.ts +1 -2
  80. package/dist/sandbox.steps.js +1 -18
  81. package/dist/schema.d.ts +14 -3
  82. package/dist/schema.js +27 -26
  83. package/dist/service.d.ts +12 -5
  84. package/dist/service.js +88 -15
  85. package/dist/skill.d.ts +0 -1
  86. package/dist/skill.js +12 -17
  87. package/dist/transform/filepreview.d.ts +2 -3
  88. package/dist/transform/filepreview.js +9 -26
  89. package/dist/transform/index.d.ts +2 -3
  90. package/dist/transform/index.js +2 -8
  91. package/dist/transform/prompts.d.ts +1 -34
  92. package/dist/transform/prompts.js +66 -46
  93. package/dist/transform/transform-dataset.agent.d.ts +21 -46
  94. package/dist/transform/transform-dataset.agent.js +152 -93
  95. package/dist/transform/transform-dataset.steps.d.ts +30 -0
  96. package/dist/transform/transform-dataset.steps.js +61 -0
  97. package/dist/transform/transform-dataset.types.d.ts +96 -0
  98. package/dist/transform/transform-dataset.types.js +1 -0
  99. package/dist/transform/transformDataset.d.ts +3 -3
  100. package/dist/transform/transformDataset.js +15 -18
  101. package/dist/writeDatasetRows.tool.d.ts +188 -0
  102. package/dist/writeDatasetRows.tool.js +258 -0
  103. package/package.json +33 -8
  104. package/dist/builder/instructions.d.ts.map +0 -1
  105. package/dist/builder/instructions.js.map +0 -1
  106. package/dist/builder/materialize.d.ts.map +0 -1
  107. package/dist/builder/materialize.js.map +0 -1
  108. package/dist/builder/persistence.d.ts.map +0 -1
  109. package/dist/builder/persistence.js.map +0 -1
  110. package/dist/builder/schemaInference.d.ts.map +0 -1
  111. package/dist/builder/schemaInference.js.map +0 -1
  112. package/dist/builder/sourceRows.d.ts.map +0 -1
  113. package/dist/builder/sourceRows.js.map +0 -1
  114. package/dist/builder/types.d.ts.map +0 -1
  115. package/dist/builder/types.js.map +0 -1
  116. package/dist/clearDataset.tool.d.ts.map +0 -1
  117. package/dist/clearDataset.tool.js.map +0 -1
  118. package/dist/completeDataset.tool.d.ts.map +0 -1
  119. package/dist/completeDataset.tool.js.map +0 -1
  120. package/dist/dataset/steps.d.ts.map +0 -1
  121. package/dist/dataset/steps.js.map +0 -1
  122. package/dist/dataset.d.ts.map +0 -1
  123. package/dist/dataset.js.map +0 -1
  124. package/dist/datasetFiles.d.ts.map +0 -1
  125. package/dist/datasetFiles.js.map +0 -1
  126. package/dist/domain.d.ts.map +0 -1
  127. package/dist/domain.js.map +0 -1
  128. package/dist/eventsReactRuntime.d.ts +0 -22
  129. package/dist/eventsReactRuntime.d.ts.map +0 -1
  130. package/dist/eventsReactRuntime.js +0 -29
  131. package/dist/eventsReactRuntime.js.map +0 -1
  132. package/dist/executeCommand.tool.d.ts.map +0 -1
  133. package/dist/executeCommand.tool.js.map +0 -1
  134. package/dist/file/file-dataset.agent.d.ts.map +0 -1
  135. package/dist/file/file-dataset.agent.js.map +0 -1
  136. package/dist/file/filepreview.d.ts.map +0 -1
  137. package/dist/file/filepreview.js.map +0 -1
  138. package/dist/file/generateSchema.tool.d.ts.map +0 -1
  139. package/dist/file/generateSchema.tool.js.map +0 -1
  140. package/dist/file/index.d.ts.map +0 -1
  141. package/dist/file/index.js.map +0 -1
  142. package/dist/file/prompts.d.ts.map +0 -1
  143. package/dist/file/prompts.js.map +0 -1
  144. package/dist/file/steps.d.ts.map +0 -1
  145. package/dist/file/steps.js.map +0 -1
  146. package/dist/index.d.ts.map +0 -1
  147. package/dist/index.js.map +0 -1
  148. package/dist/materializeDataset.tool.d.ts.map +0 -1
  149. package/dist/materializeDataset.tool.js.map +0 -1
  150. package/dist/query/index.d.ts.map +0 -1
  151. package/dist/query/index.js.map +0 -1
  152. package/dist/query/queryDomain.d.ts.map +0 -1
  153. package/dist/query/queryDomain.js.map +0 -1
  154. package/dist/query/queryDomain.step.d.ts.map +0 -1
  155. package/dist/query/queryDomain.step.js.map +0 -1
  156. package/dist/sandbox/steps.d.ts.map +0 -1
  157. package/dist/sandbox/steps.js.map +0 -1
  158. package/dist/sandbox.steps.d.ts.map +0 -1
  159. package/dist/sandbox.steps.js.map +0 -1
  160. package/dist/schema.d.ts.map +0 -1
  161. package/dist/schema.js.map +0 -1
  162. package/dist/service.d.ts.map +0 -1
  163. package/dist/service.js.map +0 -1
  164. package/dist/skill.d.ts.map +0 -1
  165. package/dist/skill.js.map +0 -1
  166. package/dist/transform/filepreview.d.ts.map +0 -1
  167. package/dist/transform/filepreview.js.map +0 -1
  168. package/dist/transform/index.d.ts.map +0 -1
  169. package/dist/transform/index.js.map +0 -1
  170. package/dist/transform/prompts.d.ts.map +0 -1
  171. package/dist/transform/prompts.js.map +0 -1
  172. package/dist/transform/transform-dataset.agent.d.ts.map +0 -1
  173. package/dist/transform/transform-dataset.agent.js.map +0 -1
  174. package/dist/transform/transformDataset.d.ts.map +0 -1
  175. package/dist/transform/transformDataset.js.map +0 -1
@@ -1,103 +1,90 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createFileParseStory = createFileParseStory;
4
- const events_1 = require("@ekairos/events");
5
- const steps_1 = require("../sandbox/steps");
6
- const generateSchema_tool_1 = require("./generateSchema.tool");
7
- const completeDataset_tool_1 = require("../completeDataset.tool");
8
- const executeCommand_tool_1 = require("../executeCommand.tool");
9
- const clearDataset_tool_1 = require("../clearDataset.tool");
10
- const prompts_1 = require("./prompts");
11
- const filepreview_1 = require("./filepreview");
12
- const admin_1 = require("@instantdb/admin");
13
- const datasetFiles_1 = require("../datasetFiles");
14
- const steps_2 = require("./steps");
15
- const steps_3 = require("../dataset/steps");
16
- const eventsReactRuntime_1 = require("../eventsReactRuntime");
17
- async function initializeSandbox(env, sandboxId, datasetId, fileId, state) {
18
- if (state.initialized) {
19
- return state.filePath;
1
+ import { INPUT_TEXT_ITEM_TYPE, WEB_CHANNEL, } from "@ekairos/events";
2
+ import { createContext } from "@ekairos/reactor/context";
3
+ import { createClearDatasetTool } from "../clearDataset.tool.js";
4
+ import { createCompleteDatasetTool, didCompleteDatasetSucceed, getDatasetFatalFailure, } from "../completeDataset.tool.js";
5
+ import { datasetGetByIdStep } from "../dataset/steps.js";
6
+ import { createExecuteCommandTool } from "../executeCommand.tool.js";
7
+ import { createDefineNotationTool } from "../defineNotation.tool.js";
8
+ import { createGenerateSchemaTool } from "./generateSchema.tool.js";
9
+ import { buildFileDatasetPromptStep, initializeFileParseSandboxStep, } from "./file-dataset.steps.js";
10
+ import { createDatasetId } from "../id.js";
11
+ async function awaitContextRun(run) {
12
+ if (!run)
13
+ return;
14
+ if (run.returnValue) {
15
+ await run.returnValue;
16
+ return;
20
17
  }
21
- console.log(`[FileParseStory ${datasetId}] Initializing sandbox...`);
22
- await (0, filepreview_1.ensurePreviewScriptsAvailable)(env, sandboxId);
23
- console.log(`[FileParseStory ${datasetId}] Installing Python dependencies...`);
24
- const pipInstall = await (0, steps_1.runDatasetSandboxCommandStep)({
25
- env,
26
- sandboxId,
27
- cmd: "python",
28
- args: ["-m", "pip", "install", "pandas", "openpyxl", "--quiet", "--upgrade"],
29
- });
30
- const installStderr = pipInstall.stderr;
31
- if (installStderr && (installStderr.includes("ERROR") || installStderr.includes("FAILED"))) {
32
- throw new Error(`pip install failed: ${installStderr.substring(0, 300)}`);
33
- }
34
- console.log(`[FileParseStory ${datasetId}] Fetching file from InstantDB...`);
35
- const file = await (0, steps_2.readInstantFileStep)({ env, fileId });
36
- console.log(`[FileParseStory ${datasetId}] Creating dataset workstation...`);
37
- const workstation = (0, datasetFiles_1.getDatasetWorkstation)(datasetId);
38
- await (0, steps_1.runDatasetSandboxCommandStep)({
39
- env,
40
- sandboxId,
41
- cmd: "mkdir",
42
- args: ["-p", workstation],
43
- });
44
- const fileName = file.contentDisposition ?? "";
45
- const fileExtension = fileName.includes(".") ? fileName.substring(fileName.lastIndexOf(".")) : "";
46
- const sandboxFilePath = `${workstation}/${fileId}${fileExtension}`;
47
- await (0, steps_1.writeDatasetSandboxFilesStep)({
48
- env,
49
- sandboxId,
50
- files: [
51
- {
52
- path: sandboxFilePath,
53
- contentBase64: file.contentBase64,
54
- },
55
- ],
56
- });
57
- console.log(`[FileParseStory ${datasetId}] ✅ Workstation created: ${workstation}`);
58
- console.log(`[FileParseStory ${datasetId}] ✅ File saved: ${sandboxFilePath}`);
59
- state.filePath = sandboxFilePath;
60
- state.initialized = true;
61
- return sandboxFilePath;
18
+ await run;
62
19
  }
63
- /**
64
- * FileParseStory
65
- *
66
- * Uso:
67
- * - Crear una instancia con `fileId`, `instructions` y un `sandbox`
68
- * - Llamar `getDataset()` para crear un dataset nuevo (crea un datasetId interno)
69
- * - Llamar `followUp(datasetId, feedback)` para iterar el mismo dataset con feedback
70
- *
71
- * Internamente corre un Context (`createContext("file.parse")`) que itera hasta que se ejecuta el tool `completeDataset`.
72
- */
73
- function createFileParseStoryDefinition(params) {
74
- const datasetId = params.datasetId ?? (0, admin_1.id)();
20
+ function createFileParseContextDefinition(params) {
21
+ const fallbackDatasetId = params.datasetId;
75
22
  const model = params.model ?? "openai/gpt-5";
76
- let storyBuilder = (0, events_1.createContext)("file.parse")
77
- .context(async (stored, env) => {
23
+ let contextBuilder = createContext("file.parse")
24
+ .context(async (stored, _env, runtime) => {
78
25
  const previous = stored?.content ?? {};
79
- const sandboxState = previous?.sandboxState ?? { initialized: false, filePath: "" };
26
+ const sandboxState = previous?.sandboxState ??
27
+ params.sandboxState ?? { initialized: false, filePath: "" };
28
+ const datasetId = previous?.datasetId ?? fallbackDatasetId ?? "";
29
+ const fileId = previous?.fileId ?? params.fileId ?? "";
30
+ const instructions = previous?.instructions ?? params.instructions ?? "";
80
31
  const sandboxId = previous?.sandboxId ?? params.sandboxId ?? "";
32
+ const contextRun = runtime?.__ekairosContextRun ?? {};
33
+ const contextId = String(contextRun.contextId ?? stored?.id ?? "").trim();
34
+ const executionId = String(contextRun.executionId ?? previous?.executionId ?? "").trim();
35
+ const sourceEventId = String(previous?.sourceEventId ?? params.sourceEventId ?? "").trim();
36
+ const sourcePartIndex = typeof previous?.sourcePartIndex === "number"
37
+ ? previous.sourcePartIndex
38
+ : typeof params.sourcePartIndex === "number"
39
+ ? params.sourcePartIndex
40
+ : 0;
41
+ if (!datasetId) {
42
+ throw new Error("dataset_id_required");
43
+ }
44
+ if (!fileId) {
45
+ throw new Error("dataset_file_id_required");
46
+ }
81
47
  if (!sandboxId) {
82
48
  throw new Error("dataset_sandbox_required");
83
49
  }
84
- const sandboxFilePath = await initializeSandbox(env, sandboxId, datasetId, params.fileId, sandboxState);
85
- let filePreview = undefined;
86
- try {
87
- filePreview = await (0, filepreview_1.generateFilePreview)(env, sandboxId, sandboxFilePath, datasetId);
50
+ if (!contextId) {
51
+ throw new Error("dataset_context_id_required");
88
52
  }
89
- catch {
90
- // optional
53
+ if (!executionId) {
54
+ throw new Error("dataset_execution_id_required");
91
55
  }
92
- let schema = null;
93
- const datasetResult = await (0, steps_3.datasetGetByIdStep)({ env, datasetId });
94
- if (datasetResult.ok && datasetResult.data.schema)
56
+ const initialized = sandboxState.initialized && sandboxState.filePath
57
+ ? { filePath: sandboxState.filePath, state: sandboxState }
58
+ : await initializeFileParseSandboxStep({
59
+ runtime,
60
+ sandboxId,
61
+ contextId,
62
+ executionId,
63
+ datasetId,
64
+ fileId,
65
+ sourceEventId,
66
+ sourcePartIndex,
67
+ filename: previous?.filename ?? params.filename,
68
+ mediaType: previous?.mediaType ?? params.mediaType,
69
+ state: sandboxState,
70
+ });
71
+ const sandboxFilePath = initialized.filePath;
72
+ let filePreview = previous?.filePreview ?? previous?.ctx?.filePreview ?? params.filePreview;
73
+ let schema = previous?.ctx?.schema ?? previous?.schema ?? params.schema ?? null;
74
+ const datasetResult = await datasetGetByIdStep({ runtime, datasetId });
75
+ if (datasetResult.ok && datasetResult.data.schema) {
95
76
  schema = datasetResult.data.schema;
77
+ }
96
78
  const ctx = {
97
79
  datasetId,
98
- fileId: params.fileId,
99
- instructions: params.instructions ?? "",
100
- sandboxConfig: { filePath: sandboxFilePath },
80
+ fileId,
81
+ instructions,
82
+ sandboxConfig: {
83
+ filePath: sandboxFilePath,
84
+ outputPath: initialized.state.outputPath,
85
+ scriptsDir: initialized.state.scriptsDir,
86
+ manifestPath: initialized.state.manifestPath,
87
+ },
101
88
  analysis: [],
102
89
  schema,
103
90
  plan: null,
@@ -109,16 +96,22 @@ function createFileParseStoryDefinition(params) {
109
96
  return {
110
97
  ...previous,
111
98
  datasetId,
112
- fileId: params.fileId,
113
- instructions: params.instructions ?? "",
99
+ fileId,
100
+ instructions,
114
101
  sandboxId,
115
- sandboxState,
102
+ executionId,
103
+ sourceEventId,
104
+ sourcePartIndex,
105
+ filename: previous?.filename ?? params.filename,
106
+ mediaType: previous?.mediaType ?? params.mediaType,
107
+ sandboxState: initialized.state,
108
+ filePreview,
116
109
  ctx,
117
110
  };
118
111
  })
119
112
  .narrative(async (stored) => {
120
113
  const ctx = stored?.content?.ctx;
121
- const base = (0, prompts_1.buildFileDatasetPrompt)(ctx);
114
+ const base = await buildFileDatasetPromptStep({ context: ctx });
122
115
  const userInstructions = String(ctx?.instructions ?? "").trim();
123
116
  if (!userInstructions)
124
117
  return base;
@@ -131,90 +124,143 @@ function createFileParseStoryDefinition(params) {
131
124
  base,
132
125
  ].join("\n");
133
126
  })
134
- .actions(async (_stored, env) => {
127
+ .actions(async (_stored, _env, runtime) => {
135
128
  const existingSchema = _stored?.content?.ctx?.schema?.schema;
129
+ const datasetId = _stored?.content?.datasetId ?? fallbackDatasetId ?? "";
130
+ const fileId = _stored?.content?.fileId ?? params.fileId ?? "";
131
+ const sandboxId = _stored?.content?.sandboxId ?? params.sandboxId ?? "";
132
+ const outputPath = _stored?.content?.ctx?.sandboxConfig?.outputPath;
133
+ if (!datasetId)
134
+ throw new Error("dataset_id_required");
135
+ if (!fileId)
136
+ throw new Error("dataset_file_id_required");
137
+ if (!sandboxId)
138
+ throw new Error("dataset_sandbox_required");
136
139
  const actions = {
137
- executeCommand: (0, executeCommand_tool_1.createExecuteCommandTool)({
140
+ executeCommand: createExecuteCommandTool({
138
141
  datasetId,
139
- sandboxId: _stored?.content?.sandboxId ?? params.sandboxId ?? "",
140
- env,
142
+ sandboxId,
143
+ runtime,
141
144
  }),
142
- completeDataset: (0, completeDataset_tool_1.createCompleteDatasetTool)({
145
+ completeDataset: createCompleteDatasetTool({
143
146
  datasetId,
144
- sandboxId: _stored?.content?.sandboxId ?? params.sandboxId ?? "",
145
- env,
147
+ sandboxId,
148
+ runtime,
149
+ outputPath,
146
150
  }),
147
- clearDataset: (0, clearDataset_tool_1.createClearDatasetTool)({
151
+ clearDataset: createClearDatasetTool({
148
152
  datasetId,
149
- sandboxId: _stored?.content?.sandboxId ?? params.sandboxId ?? "",
150
- env,
153
+ sandboxId,
154
+ runtime,
155
+ }),
156
+ defineNotation: createDefineNotationTool({
157
+ datasetId,
158
+ runtime,
151
159
  }),
152
160
  };
153
161
  if (!existingSchema) {
154
- actions.generateSchema = (0, generateSchema_tool_1.createGenerateSchemaTool)({
162
+ actions.generateSchema = createGenerateSchemaTool({
155
163
  datasetId,
156
- fileId: params.fileId,
157
- env,
164
+ fileId,
165
+ runtime,
158
166
  });
159
167
  }
160
168
  return actions;
161
169
  })
162
170
  .shouldContinue(({ reactionEvent }) => {
163
- return !(0, events_1.didToolExecute)(reactionEvent, "completeDataset");
171
+ const fatalFailure = getDatasetFatalFailure(reactionEvent);
172
+ if (fatalFailure) {
173
+ throw new Error(fatalFailure);
174
+ }
175
+ return !didCompleteDatasetSucceed(reactionEvent);
164
176
  });
165
177
  if (params.reactor) {
166
- storyBuilder = storyBuilder.reactor(params.reactor);
178
+ contextBuilder = contextBuilder.reactor(params.reactor);
167
179
  }
168
180
  else {
169
- storyBuilder = storyBuilder.model(model);
181
+ contextBuilder = contextBuilder.model(model);
170
182
  }
171
- const story = storyBuilder.build();
172
- return { datasetId, story };
183
+ const context = contextBuilder.build();
184
+ return { datasetId: fallbackDatasetId ?? "", context };
173
185
  }
174
- /**
175
- * Factory (DX-first):
176
- *
177
- * Usage:
178
- * const { datasetId } = await createFileParseStory(fileId, { instructions }).parse(env)
179
- *
180
- * - No `db` is accepted/stored (workflow-safe).
181
- * - All I/O happens in `"use step"` functions via Ekairos runtime (`getContextRuntime(env).db`).
182
- * - `parse()` is the entrypoint; it calls `story.react(...)` internally.
183
- */
184
- function createFileParseStory(fileId, opts) {
186
+ export function createFileParseContext(fileId, opts) {
187
+ const datasetId = opts?.datasetId ?? createDatasetId();
185
188
  const params = {
186
189
  fileId,
187
190
  instructions: opts?.instructions,
188
191
  sandboxId: opts?.sandboxId,
189
- datasetId: opts?.datasetId,
192
+ datasetId,
190
193
  model: opts?.model,
191
194
  reactor: opts?.reactor,
195
+ sandboxState: opts?.sandboxState,
196
+ filePreview: opts?.filePreview,
197
+ schema: opts?.schema,
198
+ filename: opts?.filename,
199
+ mediaType: opts?.mediaType,
192
200
  };
193
- const { datasetId, story } = createFileParseStoryDefinition(params);
201
+ const { context } = createFileParseContextDefinition(params);
194
202
  return {
195
203
  datasetId,
196
- async parse(env, prompt) {
204
+ async parse(runtime, options = {}) {
197
205
  const triggerEvent = {
198
- id: (0, admin_1.id)(),
199
- type: events_1.INPUT_TEXT_ITEM_TYPE,
200
- channel: events_1.WEB_CHANNEL,
206
+ id: createDatasetId(),
207
+ type: INPUT_TEXT_ITEM_TYPE,
208
+ channel: WEB_CHANNEL,
201
209
  createdAt: new Date().toISOString(),
202
210
  content: {
203
- parts: [{ type: "text", text: prompt ?? "generate a dataset for this file" }],
211
+ parts: [
212
+ {
213
+ type: "text",
214
+ text: options.prompt ?? "generate a dataset for this file",
215
+ },
216
+ {
217
+ type: "file",
218
+ fileId,
219
+ filename: opts?.filename ?? "resource-file",
220
+ mediaType: opts?.mediaType ?? "application/octet-stream",
221
+ },
222
+ ],
204
223
  },
205
224
  };
206
- const runtime = (0, eventsReactRuntime_1.createEventsReactRuntime)((env ?? {}));
207
- const shell = await story.react(triggerEvent, {
208
- runtime,
225
+ params.sourceEventId = triggerEvent.id;
226
+ params.sourcePartIndex = 1;
227
+ params.filename = opts?.filename ?? "resource-file";
228
+ params.mediaType = opts?.mediaType ?? "application/octet-stream";
229
+ const shell = await context.react(triggerEvent, {
230
+ runtime: runtime,
209
231
  context: { key: `dataset:${datasetId}` },
210
- durable: false,
211
- options: { silent: true, preventClose: true, sendFinish: false, maxIterations: 20, maxModelSteps: 5 },
232
+ durable: options.durable ?? false,
233
+ options: {
234
+ preventClose: true,
235
+ sendFinish: false,
236
+ maxIterations: 20,
237
+ maxModelSteps: 5,
238
+ },
239
+ __initialContent: {
240
+ ...(options.initialContent ?? {}),
241
+ datasetId,
242
+ fileId,
243
+ sourceEventId: triggerEvent.id,
244
+ sourcePartIndex: 1,
245
+ filename: opts?.filename ?? "resource-file",
246
+ mediaType: opts?.mediaType ?? "application/octet-stream",
247
+ instructions: opts?.instructions ?? "",
248
+ sandboxId: opts?.sandboxId ?? "",
249
+ sandboxState: opts?.sandboxState ?? { initialized: false, filePath: "" },
250
+ filePreview: opts?.filePreview,
251
+ schema: opts?.schema,
252
+ },
212
253
  });
213
- await shell.run;
254
+ await awaitContextRun(shell.run);
214
255
  return { datasetId };
215
256
  },
216
- // Optional: expose the built story for advanced callers (not required for parse DX)
217
- story,
257
+ context,
218
258
  };
219
259
  }
220
- //# sourceMappingURL=file-dataset.agent.js.map
260
+ export function registerFileParseContext(opts) {
261
+ createFileParseContextDefinition({
262
+ model: opts?.model,
263
+ reactor: opts?.reactor,
264
+ }).context;
265
+ }
266
+ registerFileParseContext();
@@ -0,0 +1,27 @@
1
+ import type { FileParseContext, SandboxState } from "./file-dataset.types.js";
2
+ import type { FilePreviewContext } from "./filepreview.types.js";
3
+ export declare function initializeFileParseSandboxStep(params: {
4
+ runtime: any;
5
+ sandboxId: string;
6
+ contextId: string;
7
+ executionId: string;
8
+ datasetId: string;
9
+ fileId: string;
10
+ sourceEventId?: string;
11
+ sourcePartIndex?: number;
12
+ filename?: string;
13
+ mediaType?: string;
14
+ state: SandboxState;
15
+ }): Promise<{
16
+ filePath: string;
17
+ state: SandboxState;
18
+ }>;
19
+ export declare function generateFileParsePreviewStep(params: {
20
+ runtime: any;
21
+ sandboxId: string;
22
+ sandboxFilePath: string;
23
+ datasetId: string;
24
+ }): Promise<FilePreviewContext>;
25
+ export declare function buildFileDatasetPromptStep(params: {
26
+ context: FileParseContext;
27
+ }): Promise<string>;
@@ -0,0 +1,47 @@
1
+ import { DATASET_OUTPUT_FILE_NAME } from "../datasetFiles.js";
2
+ import { prepareContextExecutionWorkspaceStep } from "../contextWorkspace.js";
3
+ import { buildFileDatasetPrompt } from "./prompts.js";
4
+ import { generateFilePreview } from "./filepreview.js";
5
+ export async function initializeFileParseSandboxStep(params) {
6
+ "use step";
7
+ if (params.state.initialized) {
8
+ return { filePath: params.state.filePath, state: params.state };
9
+ }
10
+ console.log(`[FileParseContext ${params.datasetId}] Preparing context execution workspace...`);
11
+ const workspace = await prepareContextExecutionWorkspaceStep({
12
+ runtime: params.runtime,
13
+ sandboxId: params.sandboxId,
14
+ contextId: params.contextId,
15
+ executionId: params.executionId,
16
+ files: [
17
+ {
18
+ fileId: params.fileId,
19
+ filename: params.filename,
20
+ mediaType: params.mediaType,
21
+ sourceEventId: params.sourceEventId,
22
+ sourcePartIndex: params.sourcePartIndex,
23
+ },
24
+ ],
25
+ });
26
+ const sandboxFilePath = workspace.files[0]?.path ?? "";
27
+ if (!sandboxFilePath)
28
+ throw new Error("dataset_workspace_file_missing");
29
+ console.log(`[FileParseContext ${params.datasetId}] Context workspace created: ${workspace.root}`);
30
+ console.log(`[FileParseContext ${params.datasetId}] File saved: ${sandboxFilePath}`);
31
+ const state = {
32
+ initialized: true,
33
+ filePath: sandboxFilePath,
34
+ outputPath: `${workspace.outputDir}/${DATASET_OUTPUT_FILE_NAME}`,
35
+ scriptsDir: workspace.scriptsDir,
36
+ manifestPath: workspace.manifestPath,
37
+ };
38
+ return { filePath: sandboxFilePath, state };
39
+ }
40
+ export async function generateFileParsePreviewStep(params) {
41
+ "use step";
42
+ return await generateFilePreview(params.runtime, params.sandboxId, params.sandboxFilePath, params.datasetId);
43
+ }
44
+ export async function buildFileDatasetPromptStep(params) {
45
+ "use step";
46
+ return buildFileDatasetPrompt(params.context);
47
+ }
@@ -0,0 +1,64 @@
1
+ import type { ContextReactor } from "@ekairos/reactor/context";
2
+ import type { FilePreviewContext } from "./filepreview.types.js";
3
+ export type SandboxState = {
4
+ initialized: boolean;
5
+ filePath: string;
6
+ outputPath?: string;
7
+ scriptsDir?: string;
8
+ manifestPath?: string;
9
+ };
10
+ export type FileParseContext = {
11
+ datasetId: string;
12
+ fileId: string;
13
+ instructions: string;
14
+ sandboxConfig: {
15
+ filePath: string;
16
+ outputPath?: string;
17
+ scriptsDir?: string;
18
+ manifestPath?: string;
19
+ };
20
+ analysis: any[];
21
+ schema: any | null;
22
+ plan: any | null;
23
+ executionResult: any | null;
24
+ errors: string[];
25
+ iterationCount: number;
26
+ filePreview?: FilePreviewContext;
27
+ };
28
+ export type FileParseContextParams = {
29
+ fileId?: string;
30
+ instructions?: string;
31
+ sandboxId?: string;
32
+ datasetId?: string;
33
+ model?: string;
34
+ reactor?: ContextReactor<any, any>;
35
+ sandboxState?: SandboxState;
36
+ filePreview?: FilePreviewContext;
37
+ schema?: any | null;
38
+ sourceEventId?: string;
39
+ sourcePartIndex?: number;
40
+ filename?: string;
41
+ mediaType?: string;
42
+ };
43
+ export type FileParseRunOptions = {
44
+ prompt?: string;
45
+ durable?: boolean;
46
+ initialContent?: Record<string, any>;
47
+ };
48
+ export type FileParseContextBuilder<Env extends {
49
+ orgId: string;
50
+ }> = {
51
+ datasetId: string;
52
+ context: any;
53
+ };
54
+ export type DatasetResult = {
55
+ id: string;
56
+ status?: string;
57
+ title?: string;
58
+ schema?: any;
59
+ analysis?: any;
60
+ calculatedTotalRows?: number;
61
+ actualGeneratedRowCount?: number;
62
+ createdAt?: number;
63
+ updatedAt?: number;
64
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -1,40 +1,10 @@
1
- export type FilePreviewContext = {
2
- totalRows: number;
3
- metadata?: {
4
- description: string;
5
- script: string;
6
- command: string;
7
- stdout: string;
8
- stderr: string;
9
- };
10
- head?: {
11
- description: string;
12
- script: string;
13
- command: string;
14
- stdout: string;
15
- stderr: string;
16
- };
17
- tail?: {
18
- description: string;
19
- script: string;
20
- command: string;
21
- stdout: string;
22
- stderr: string;
23
- };
24
- mid?: {
25
- description: string;
26
- script: string;
27
- command: string;
28
- stdout: string;
29
- stderr: string;
30
- };
31
- };
1
+ import type { FilePreviewContext } from "./filepreview.types.js";
2
+ export type { FilePreviewContext } from "./filepreview.types.js";
32
3
  interface PreviewOptions {
33
4
  headLines?: number;
34
5
  tailLines?: number;
35
6
  midLines?: number;
36
7
  }
37
- export declare function ensurePreviewScriptsAvailable(env: any, sandboxId: string): Promise<void>;
38
- export declare function generateFilePreview(env: any, sandboxId: string, sandboxFilePath: string, datasetId: string, options?: PreviewOptions): Promise<FilePreviewContext>;
39
- export {};
40
- //# sourceMappingURL=filepreview.d.ts.map
8
+ export declare function getEmbeddedFilePreviewScriptBase64(scriptName: string): string;
9
+ export declare function ensurePreviewScriptsAvailable(_runtime: any, _sandboxId: string): Promise<void>;
10
+ export declare function generateFilePreview(runtime: any, sandboxId: string, sandboxFilePath: string, datasetId: string, options?: PreviewOptions): Promise<FilePreviewContext>;