@ekairos/dataset 1.22.48-beta.development.0 → 1.22.50-beta.development.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) 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/materialize.d.ts +1 -11
  6. package/dist/builder/materialize.js +25 -77
  7. package/dist/builder/materializeQuery.d.ts +11 -0
  8. package/dist/builder/materializeQuery.js +40 -0
  9. package/dist/builder/persistence.js +13 -21
  10. package/dist/builder/types.d.ts +3 -0
  11. package/dist/clearDataset.tool.d.ts +2 -2
  12. package/dist/clearDataset.tool.js +3 -3
  13. package/dist/completeDataset.tool.d.ts +31 -3
  14. package/dist/completeDataset.tool.js +101 -13
  15. package/dist/dataset/steps.d.ts +32 -8
  16. package/dist/dataset/steps.js +69 -13
  17. package/dist/dataset.js +13 -7
  18. package/dist/executeCommand.tool.d.ts +2 -2
  19. package/dist/executeCommand.tool.js +3 -3
  20. package/dist/file/file-dataset.agent.d.ts +17 -11
  21. package/dist/file/file-dataset.agent.js +54 -47
  22. package/dist/file/filepreview.d.ts +2 -2
  23. package/dist/file/filepreview.js +24 -17
  24. package/dist/file/generateSchema.tool.d.ts +2 -2
  25. package/dist/file/generateSchema.tool.js +2 -2
  26. package/dist/file/prompts.d.ts +2 -2
  27. package/dist/file/prompts.js +6 -1
  28. package/dist/file/steps.d.ts +1 -1
  29. package/dist/file/steps.js +8 -2
  30. package/dist/index.d.ts +0 -1
  31. package/dist/index.js +0 -1
  32. package/dist/query/queryDomain.d.ts +3 -3
  33. package/dist/query/queryDomain.js +3 -3
  34. package/dist/query/queryDomain.step.d.ts +1 -0
  35. package/dist/query/queryDomain.step.js +8 -4
  36. package/dist/sandbox/steps.d.ts +6 -6
  37. package/dist/sandbox/steps.js +16 -12
  38. package/dist/transform/filepreview.d.ts +1 -1
  39. package/dist/transform/filepreview.js +6 -6
  40. package/dist/transform/index.d.ts +1 -1
  41. package/dist/transform/index.js +1 -1
  42. package/dist/transform/prompts.js +4 -1
  43. package/dist/transform/transform-dataset.agent.d.ts +9 -3
  44. package/dist/transform/transform-dataset.agent.js +39 -32
  45. package/dist/transform/transformDataset.d.ts +3 -2
  46. package/dist/transform/transformDataset.js +10 -9
  47. package/package.json +19 -5
  48. package/dist/eventsReactRuntime.d.ts +0 -21
  49. package/dist/eventsReactRuntime.js +0 -25
@@ -2,12 +2,19 @@ import { execFile } from "node:child_process";
2
2
  import { promises as fs } from "node:fs";
3
3
  import path from "node:path";
4
4
  import { promisify } from "node:util";
5
- import { getContextRuntime } from "@ekairos/events/runtime";
5
+ import { SandboxService } from "@ekairos/sandbox";
6
6
  const execFileAsync = promisify(execFile);
7
7
  const localSandboxRoots = new Map();
8
8
  function isLocalDatasetSandboxMode() {
9
9
  return String(process.env.DATASET_TEST_LOCAL_SANDBOX ?? "").trim() === "1";
10
10
  }
11
+ async function getRuntimeDb(runtime) {
12
+ if (!runtime) {
13
+ throw new Error("Dataset sandbox step requires runtime.");
14
+ }
15
+ const db = runtime.db;
16
+ return typeof db === "function" ? await db.call(runtime) : db;
17
+ }
11
18
  function getLocalSandboxRoot(sandboxId) {
12
19
  return (localSandboxRoots.get(sandboxId) ||
13
20
  path.resolve(process.cwd(), "test-results", "dataset-sandboxes", sandboxId));
@@ -63,10 +70,11 @@ export async function createDatasetSandboxStep(params) {
63
70
  await ensureLocalSandboxRoot(sandboxId);
64
71
  return { sandboxId };
65
72
  }
66
- const db = (await getContextRuntime(params.env)).db;
67
- const { SandboxService } = (await import("@ekairos/sandbox"));
73
+ const db = await getRuntimeDb(params.runtime);
68
74
  const service = new SandboxService(db);
69
- const created = await service.createSandbox(params);
75
+ const sandboxParams = { ...params, runtime: params.sandboxRuntime };
76
+ delete sandboxParams.sandboxRuntime;
77
+ const created = await service.createSandbox(sandboxParams);
70
78
  if (!created.ok)
71
79
  throw new Error(created.error);
72
80
  return { sandboxId: created.data.sandboxId };
@@ -80,8 +88,7 @@ export async function runDatasetSandboxCommandStep(params) {
80
88
  args: params.args,
81
89
  });
82
90
  }
83
- const db = (await getContextRuntime(params.env)).db;
84
- const { SandboxService } = (await import("@ekairos/sandbox"));
91
+ const db = await getRuntimeDb(params.runtime);
85
92
  const service = new SandboxService(db);
86
93
  const result = await service.runCommand(params.sandboxId, params.cmd, params.args ?? []);
87
94
  if (!result.ok)
@@ -101,8 +108,7 @@ export async function writeDatasetSandboxFilesStep(params) {
101
108
  }
102
109
  return;
103
110
  }
104
- const db = (await getContextRuntime(params.env)).db;
105
- const { SandboxService } = (await import("@ekairos/sandbox"));
111
+ const db = await getRuntimeDb(params.runtime);
106
112
  const service = new SandboxService(db);
107
113
  const result = await service.writeFiles(params.sandboxId, params.files);
108
114
  if (!result.ok)
@@ -114,8 +120,7 @@ export async function readDatasetSandboxFileStep(params) {
114
120
  const content = await fs.readFile(params.path);
115
121
  return { contentBase64: Buffer.from(content).toString("base64") };
116
122
  }
117
- const db = (await getContextRuntime(params.env)).db;
118
- const { SandboxService } = (await import("@ekairos/sandbox"));
123
+ const db = await getRuntimeDb(params.runtime);
119
124
  const service = new SandboxService(db);
120
125
  const result = await service.readFile(params.sandboxId, params.path);
121
126
  if (!result.ok)
@@ -130,8 +135,7 @@ export async function stopDatasetSandboxStep(params) {
130
135
  localSandboxRoots.delete(params.sandboxId);
131
136
  return;
132
137
  }
133
- const db = (await getContextRuntime(params.env)).db;
134
- const { SandboxService } = (await import("@ekairos/sandbox"));
138
+ const db = await getRuntimeDb(params.runtime);
135
139
  const service = new SandboxService(db);
136
140
  const result = await service.stopSandbox(params.sandboxId);
137
141
  if (!result.ok)
@@ -18,5 +18,5 @@ export type TransformSourcePreviewContext = {
18
18
  interface PreviewOptions {
19
19
  headLines?: number;
20
20
  }
21
- export declare function generateSourcePreview(env: any, sandboxId: string, sourcePath: string, datasetId: string, options?: PreviewOptions): Promise<TransformSourcePreviewContext>;
21
+ export declare function generateSourcePreview(runtime: any, sandboxId: string, sourcePath: string, datasetId: string, options?: PreviewOptions): Promise<TransformSourcePreviewContext>;
22
22
  export {};
@@ -1,11 +1,11 @@
1
1
  import { getDatasetWorkstation } from "../datasetFiles.js";
2
2
  import { runDatasetSandboxCommandStep, writeDatasetSandboxFilesStep } from "../sandbox/steps.js";
3
3
  const DEFAULT_HEAD_LINES = 50;
4
- async function runPythonSnippet(env, sandboxId, datasetId, scriptName, code, args, description) {
4
+ async function runPythonSnippet(runtime, sandboxId, datasetId, scriptName, code, args, description) {
5
5
  const workstation = getDatasetWorkstation(datasetId);
6
6
  const scriptPath = `${workstation}/${scriptName}.py`;
7
7
  await writeDatasetSandboxFilesStep({
8
- env,
8
+ runtime,
9
9
  sandboxId,
10
10
  files: [
11
11
  {
@@ -15,7 +15,7 @@ async function runPythonSnippet(env, sandboxId, datasetId, scriptName, code, arg
15
15
  ],
16
16
  });
17
17
  const result = await runDatasetSandboxCommandStep({
18
- env,
18
+ runtime,
19
19
  sandboxId,
20
20
  cmd: "python",
21
21
  args: [scriptPath, ...args],
@@ -30,7 +30,7 @@ async function runPythonSnippet(env, sandboxId, datasetId, scriptName, code, arg
30
30
  stderr,
31
31
  };
32
32
  }
33
- export async function generateSourcePreview(env, sandboxId, sourcePath, datasetId, options = {}) {
33
+ export async function generateSourcePreview(runtime, sandboxId, sourcePath, datasetId, options = {}) {
34
34
  const context = {
35
35
  totalRows: 0,
36
36
  };
@@ -54,7 +54,7 @@ try:
54
54
  except Exception as e:
55
55
  print(str(e))
56
56
  `;
57
- const meta = await runPythonSnippet(env, sandboxId, datasetId, "jsonl_count", countScript, [sourcePath], "Counts number of JSONL records with type='row'");
57
+ const meta = await runPythonSnippet(runtime, sandboxId, datasetId, "jsonl_count", countScript, [sourcePath], "Counts number of JSONL records with type='row'");
58
58
  context.metadata = meta;
59
59
  try {
60
60
  if (meta.stdout) {
@@ -89,7 +89,7 @@ try:
89
89
  except Exception as e:
90
90
  print(str(e))
91
91
  `;
92
- const head = await runPythonSnippet(env, sandboxId, datasetId, "jsonl_head", headScript, [sourcePath, String(headLines)], `Reads the first ${headLines} JSONL row records`);
92
+ const head = await runPythonSnippet(runtime, sandboxId, datasetId, "jsonl_head", headScript, [sourcePath, String(headLines)], `Reads the first ${headLines} JSONL row records`);
93
93
  context.head = head;
94
94
  return context;
95
95
  }
@@ -1,2 +1,2 @@
1
- export { createTransformDatasetStory, type TransformDatasetAgentParams, type TransformDatasetContext, } from "./transform-dataset.agent.js";
1
+ export { createTransformDatasetContext, type TransformDatasetAgentParams, type TransformDatasetContext, } from "./transform-dataset.agent.js";
2
2
  export { transformDataset, type TransformDatasetInput, type TransformDatasetResult, } from "./transformDataset.js";
@@ -1,2 +1,2 @@
1
- export { createTransformDatasetStory, } from "./transform-dataset.agent.js";
1
+ export { createTransformDatasetContext, } from "./transform-dataset.agent.js";
2
2
  export { transformDataset, } from "./transformDataset.js";
@@ -97,19 +97,22 @@ function buildInstructions(context) {
97
97
  .up()
98
98
  .ele("Step", { number: "2", name: "Plan Mapping" })
99
99
  .ele("Action").txt("Plan a deterministic mapping from source data fields to the output schema fields (normalize names, types, and formats).").up()
100
- .ele("Note").txt("If fields are missing, set defaults; if types differ, coerce consistently. When working with multiple sources, decide how to combine or relate them.").up()
100
+ .ele("Note").txt("If fields are missing, set defaults; if types differ, coerce consistently. When working with multiple sources, decide how to combine or relate them. Output field names must remain exactly as declared by the output schema.").up()
101
101
  .up()
102
102
  .ele("Step", { number: "3", name: "Transform" })
103
103
  .ele("Action").txt("Use executeCommand to run a Python script that reads source JSONL file(s) and writes transformed records to output.jsonl. Keep line-per-record JSON objects with { 'type': 'row', 'data': { ... } }.").up()
104
104
  .ele("Requirement").txt(`Write file to: ${outputPath}`).up()
105
+ .ele("Requirement").txt("Every data object MUST use the exact property names from OutputSchema required/properties keys. Do not translate, localize, rename, or infer alternative field names.").up()
105
106
  .ele("Requirement").txt("Do not print large data to stdout; only progress and summaries.").up()
106
107
  .up()
107
108
  .ele("Step", { number: "4", name: "Validate and Complete" })
108
109
  .ele("Action").txt("Call completeDataset to validate against the output schema and mark as completed.").up()
110
+ .ele("Behavior").txt("If completeDataset returns success:false, inspect validation details, rewrite output.jsonl, and call completeDataset again. Do not stop until completeDataset returns success:true.").up()
109
111
  .up()
110
112
  .up()
111
113
  .ele("Rules")
112
114
  .ele("Rule").txt("Output must strictly match the output schema for each record in data.").up()
115
+ .ele("Rule").txt("OutputSchema property names are authoritative. Field names are a technical contract; only field values may preserve source language.").up()
113
116
  .ele("Rule").txt("Each line in output.jsonl must be a standalone JSON object with {type:'row', data:{...}}.").up()
114
117
  .ele("Rule").txt("Do not include headers, summaries, or metadata as records.").up()
115
118
  .ele("Rule").txt("Be robust to malformed lines in source: skip or sanitize, but do not crash.").up()
@@ -28,6 +28,10 @@ export type TransformDatasetAgentParams = {
28
28
  sandboxId?: string;
29
29
  reactor?: ContextReactor<any, any>;
30
30
  };
31
+ export type TransformDatasetRunOptions = {
32
+ prompt?: string;
33
+ durable?: boolean;
34
+ };
31
35
  export type TransformDatasetResult = {
32
36
  id: string;
33
37
  status?: string;
@@ -39,7 +43,7 @@ export type TransformDatasetResult = {
39
43
  createdAt?: number;
40
44
  updatedAt?: number;
41
45
  };
42
- export declare function createTransformDatasetStory<Env extends {
46
+ export declare function createTransformDatasetContext<Env extends {
43
47
  orgId: string;
44
48
  }>(params: {
45
49
  sourceDatasetIds: string[];
@@ -51,8 +55,10 @@ export declare function createTransformDatasetStory<Env extends {
51
55
  reactor?: ContextReactor<any, any>;
52
56
  }): {
53
57
  datasetId: string;
54
- transform(env: Env, prompt?: string): Promise<{
58
+ transform(runtime: {
59
+ env: Env;
60
+ }, options?: TransformDatasetRunOptions): Promise<{
55
61
  datasetId: string;
56
62
  }>;
57
- story: any;
63
+ context: any;
58
64
  };
@@ -1,5 +1,5 @@
1
- import { createContext, didToolExecute, INPUT_TEXT_ITEM_TYPE, WEB_CHANNEL } from "@ekairos/events";
2
- import { createCompleteDatasetTool } from "../completeDataset.tool.js";
1
+ import { createContext, INPUT_TEXT_ITEM_TYPE, WEB_CHANNEL } from "@ekairos/events";
2
+ import { createCompleteDatasetTool, didCompleteDatasetSucceed } from "../completeDataset.tool.js";
3
3
  import { createExecuteCommandTool } from "../executeCommand.tool.js";
4
4
  import { createClearDatasetTool } from "../clearDataset.tool.js";
5
5
  import { buildTransformDatasetPrompt } from "./prompts.js";
@@ -8,19 +8,27 @@ import { id } from "@instantdb/admin";
8
8
  import { generateSourcePreview } from "./filepreview.js";
9
9
  import { datasetReadOutputJsonlStep, datasetUpdateSchemaStep } from "../dataset/steps.js";
10
10
  import { runDatasetSandboxCommandStep, writeDatasetSandboxFilesStep } from "../sandbox/steps.js";
11
- import { createEventsReactRuntime } from "../eventsReactRuntime.js";
12
- async function ensureSourcesInSandbox(env, sandboxId, datasetId, sourceDatasetIds, state) {
11
+ async function awaitContextRun(run) {
12
+ if (!run)
13
+ return;
14
+ if (run.returnValue) {
15
+ await run.returnValue;
16
+ return;
17
+ }
18
+ await run;
19
+ }
20
+ async function ensureSourcesInSandbox(runtime, sandboxId, datasetId, sourceDatasetIds, state) {
13
21
  if (state.initialized) {
14
22
  return { sourcePaths: state.sourcePaths, outputPath: getDatasetOutputPath(datasetId) };
15
23
  }
16
24
  const workstation = getDatasetWorkstation(datasetId);
17
- await runDatasetSandboxCommandStep({ env, sandboxId, cmd: "mkdir", args: ["-p", workstation] });
25
+ await runDatasetSandboxCommandStep({ runtime, sandboxId, cmd: "mkdir", args: ["-p", workstation] });
18
26
  const sourcePaths = [];
19
27
  for (const sourceDatasetId of sourceDatasetIds) {
20
28
  const sourcePath = `${workstation}/source_${sourceDatasetId}.jsonl`;
21
- const source = await datasetReadOutputJsonlStep({ env, datasetId: sourceDatasetId });
29
+ const source = await datasetReadOutputJsonlStep({ runtime, datasetId: sourceDatasetId });
22
30
  await writeDatasetSandboxFilesStep({
23
- env,
31
+ runtime,
24
32
  sandboxId,
25
33
  files: [{ path: sourcePath, contentBase64: source.contentBase64 }],
26
34
  });
@@ -30,22 +38,22 @@ async function ensureSourcesInSandbox(env, sandboxId, datasetId, sourceDatasetId
30
38
  state.initialized = true;
31
39
  return { sourcePaths, outputPath: getDatasetOutputPath(datasetId) };
32
40
  }
33
- function createTransformDatasetStoryDefinition(params) {
41
+ function createTransformDatasetContextDefinition(params) {
34
42
  const datasetId = params.datasetId ?? id();
35
43
  const model = params.model ?? "openai/gpt-5";
36
- let storyBuilder = createContext("dataset.transform")
37
- .context(async (stored, env) => {
44
+ let contextBuilder = createContext("dataset.transform")
45
+ .context(async (stored, _env, runtime) => {
38
46
  const previous = stored?.content ?? {};
39
47
  const sandboxState = previous?.sandboxState ?? { initialized: false, sourcePaths: [] };
40
48
  const sandboxId = previous?.sandboxId ?? params.sandboxId ?? "";
41
49
  if (!sandboxId) {
42
50
  throw new Error("dataset_sandbox_required");
43
51
  }
44
- const { sourcePaths, outputPath } = await ensureSourcesInSandbox(env, sandboxId, datasetId, params.sourceDatasetIds, sandboxState);
52
+ const { sourcePaths, outputPath } = await ensureSourcesInSandbox(runtime, sandboxId, datasetId, params.sourceDatasetIds, sandboxState);
45
53
  const sourcePreviews = [];
46
54
  for (const sp of sourcePaths) {
47
55
  try {
48
- const preview = await generateSourcePreview(env, sandboxId, sp.path, datasetId);
56
+ const preview = await generateSourcePreview(runtime, sandboxId, sp.path, datasetId);
49
57
  sourcePreviews.push({ datasetId: sp.datasetId, preview });
50
58
  }
51
59
  catch {
@@ -54,7 +62,7 @@ function createTransformDatasetStoryDefinition(params) {
54
62
  }
55
63
  // Persist output schema on the dataset record (so completeDataset validates against it)
56
64
  await datasetUpdateSchemaStep({
57
- env,
65
+ runtime,
58
66
  datasetId,
59
67
  schema: params.outputSchema,
60
68
  status: "schema_complete",
@@ -91,40 +99,40 @@ function createTransformDatasetStoryDefinition(params) {
91
99
  .narrative(async (stored) => {
92
100
  return String(stored?.content?.system ?? "");
93
101
  })
94
- .actions(async (stored, env) => {
102
+ .actions(async (stored, _env, runtime) => {
95
103
  const sandboxId = stored?.content?.sandboxId ?? params.sandboxId ?? "";
96
104
  return {
97
105
  executeCommand: createExecuteCommandTool({
98
106
  datasetId,
99
107
  sandboxId,
100
- env,
108
+ runtime,
101
109
  }),
102
110
  completeDataset: createCompleteDatasetTool({
103
111
  datasetId,
104
112
  sandboxId,
105
- env,
113
+ runtime,
106
114
  }),
107
115
  clearDataset: createClearDatasetTool({
108
116
  datasetId,
109
117
  sandboxId,
110
- env,
118
+ runtime,
111
119
  }),
112
120
  };
113
121
  })
114
122
  .shouldContinue(({ reactionEvent }) => {
115
- return !didToolExecute(reactionEvent, "completeDataset");
123
+ return !didCompleteDatasetSucceed(reactionEvent);
116
124
  });
117
125
  if (params.reactor) {
118
- storyBuilder = storyBuilder.reactor(params.reactor);
126
+ contextBuilder = contextBuilder.reactor(params.reactor);
119
127
  }
120
128
  else {
121
- storyBuilder = storyBuilder.model(model);
129
+ contextBuilder = contextBuilder.model(model);
122
130
  }
123
- const story = storyBuilder.build();
124
- return { datasetId, story };
131
+ const context = contextBuilder.build();
132
+ return { datasetId, context };
125
133
  }
126
- export function createTransformDatasetStory(params) {
127
- const { datasetId, story } = createTransformDatasetStoryDefinition({
134
+ export function createTransformDatasetContext(params) {
135
+ const { datasetId, context } = createTransformDatasetContextDefinition({
128
136
  sourceDatasetIds: params.sourceDatasetIds,
129
137
  outputSchema: params.outputSchema,
130
138
  instructions: params.instructions,
@@ -135,7 +143,7 @@ export function createTransformDatasetStory(params) {
135
143
  });
136
144
  return {
137
145
  datasetId,
138
- async transform(env, prompt) {
146
+ async transform(runtime, options = {}) {
139
147
  const datasetCountText = params.sourceDatasetIds.length === 1
140
148
  ? "the source dataset"
141
149
  : `${params.sourceDatasetIds.length} source datasets`;
@@ -148,22 +156,21 @@ export function createTransformDatasetStory(params) {
148
156
  parts: [
149
157
  {
150
158
  type: "text",
151
- text: prompt ??
159
+ text: options.prompt ??
152
160
  `Transform ${datasetCountText} into a new dataset matching the provided output schema`,
153
161
  },
154
162
  ],
155
163
  },
156
164
  };
157
- const runtime = createEventsReactRuntime(env);
158
- const shell = await story.react(triggerEvent, {
159
- runtime,
165
+ const shell = await context.react(triggerEvent, {
166
+ runtime: runtime,
160
167
  context: { key: `dataset:${datasetId}` },
161
- durable: false,
168
+ durable: options.durable ?? false,
162
169
  options: { silent: true, preventClose: true, sendFinish: false, maxIterations: 20, maxModelSteps: 5 },
163
170
  });
164
- await shell.run;
171
+ await awaitContextRun(shell.run);
165
172
  return { datasetId };
166
173
  },
167
- story,
174
+ context,
168
175
  };
169
176
  }
@@ -1,3 +1,4 @@
1
+ import type { AnyDatasetRuntime } from "../builder/types.js";
1
2
  export type TransformDatasetInput = {
2
3
  datasets: Array<{
3
4
  id: string;
@@ -14,6 +15,6 @@ export type TransformDatasetResult = {
14
15
  };
15
16
  /**
16
17
  * Workflow-compatible dataset transform.
17
- * Executes the transform story and returns datasetId + preview rows.
18
+ * Executes the transform context and returns datasetId + preview rows.
18
19
  */
19
- export declare function transformDataset(input: TransformDatasetInput): Promise<TransformDatasetResult>;
20
+ export declare function transformDataset(runtime: AnyDatasetRuntime, input: TransformDatasetInput): Promise<TransformDatasetResult>;
@@ -1,6 +1,5 @@
1
- import { getContextEnv } from "@ekairos/events/runtime";
2
1
  import { datasetPreviewRowsStep } from "../dataset/steps.js";
3
- import { createTransformDatasetStory } from "./transform-dataset.agent.js";
2
+ import { createTransformDatasetContext } from "./transform-dataset.agent.js";
4
3
  function buildInstructions(input) {
5
4
  const sources = input.datasets
6
5
  .map((d, idx) => {
@@ -22,18 +21,20 @@ function buildInstructions(input) {
22
21
  }
23
22
  /**
24
23
  * Workflow-compatible dataset transform.
25
- * Executes the transform story and returns datasetId + preview rows.
24
+ * Executes the transform context and returns datasetId + preview rows.
26
25
  */
27
- export async function transformDataset(input) {
28
- const env = await getContextEnv();
29
- const { datasetId, story } = createTransformDatasetStory({
26
+ export async function transformDataset(runtime, input) {
27
+ const transformContext = createTransformDatasetContext({
30
28
  sourceDatasetIds: input.datasets.map((d) => d.id),
31
29
  outputSchema: input.outputSchema,
32
30
  instructions: buildInstructions(input),
33
31
  datasetId: input.datasetId,
34
32
  model: input.model,
35
33
  });
36
- await story.transform(env);
37
- const preview = await datasetPreviewRowsStep({ datasetId });
38
- return { datasetId, previewRows: preview.rows };
34
+ await transformContext.transform(runtime);
35
+ const preview = await datasetPreviewRowsStep({
36
+ runtime,
37
+ datasetId: transformContext.datasetId,
38
+ });
39
+ return { datasetId: transformContext.datasetId, previewRows: preview.rows };
39
40
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ekairos/dataset",
3
- "version": "1.22.48-beta.development.0",
3
+ "version": "1.22.50-beta.development.0",
4
4
  "description": "Pulzar Dataset Tools",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -35,6 +35,16 @@
35
35
  "import": "./dist/query/index.js",
36
36
  "default": "./dist/query/index.js"
37
37
  },
38
+ "./agents": {
39
+ "types": "./dist/agents.d.ts",
40
+ "import": "./dist/agents.js",
41
+ "default": "./dist/agents.js"
42
+ },
43
+ "./skill": {
44
+ "types": "./dist/skill.d.ts",
45
+ "import": "./dist/skill.js",
46
+ "default": "./dist/skill.js"
47
+ },
38
48
  "./file/scripts": {
39
49
  "default": "./dist/file/scripts"
40
50
  },
@@ -49,14 +59,15 @@
49
59
  "typecheck": "tsc --noEmit",
50
60
  "typecheck:tests": "tsc --noEmit -p tsconfig.typecheck.json",
51
61
  "test": "vitest run -c vitest.config.mts",
62
+ "test:workflow": "vitest run -c vitest.workflow.config.mts",
52
63
  "test:direct": "vitest run -c vitest.config.mts src/tests/dataset.builder.instant.test.ts",
53
64
  "test:tool": "vitest run -c vitest.config.mts src/tests/materializeDataset.tool.instant.test.ts",
54
65
  "test:ai-sdk:instant": "vitest run -c vitest.codex.config.mts src/tests/materializeDataset.ai-sdk.instant.test.ts"
55
66
  },
56
67
  "dependencies": {
57
- "@ekairos/domain": "^1.22.48-beta.development.0",
58
- "@ekairos/events": "^1.22.48-beta.development.0",
59
- "@ekairos/sandbox": "^1.22.48-beta.development.0",
68
+ "@ekairos/domain": "^1.22.50-beta.development.0",
69
+ "@ekairos/events": "^1.22.50-beta.development.0",
70
+ "@ekairos/sandbox": "^1.22.50-beta.development.0",
60
71
  "@instantdb/admin": "0.22.158",
61
72
  "@instantdb/core": "0.22.142",
62
73
  "ai": "^5.0.44",
@@ -69,7 +80,10 @@
69
80
  "@ekairos/openai-reactor": "workspace:*",
70
81
  "@ekairos/tsconfig": "workspace:*",
71
82
  "@types/node": "^24.5.0",
83
+ "@workflow/serde": "5.0.0-beta.0",
84
+ "@workflow/vitest": "5.0.0-beta.1",
72
85
  "dotenv": "^17.2.3",
73
- "typescript": "^5.9.2"
86
+ "typescript": "^5.9.2",
87
+ "workflow": "5.0.0-beta.1"
74
88
  }
75
89
  }
@@ -1,21 +0,0 @@
1
- import { eventsDomain } from "@ekairos/events";
2
- export type EventsReactRuntime<Env extends Record<string, unknown>> = {
3
- env: Env;
4
- db(): Promise<any>;
5
- resolve(): Promise<{
6
- db: any;
7
- meta: () => {
8
- domain: typeof eventsDomain;
9
- schema: ReturnType<typeof eventsDomain.toInstantSchema>;
10
- context?: unknown;
11
- contextString?: string;
12
- };
13
- }>;
14
- meta: () => {
15
- domain: typeof eventsDomain;
16
- schema: ReturnType<typeof eventsDomain.toInstantSchema>;
17
- context?: unknown;
18
- contextString?: string;
19
- };
20
- };
21
- export declare function createEventsReactRuntime<Env extends Record<string, unknown>>(env: Env): EventsReactRuntime<Env>;
@@ -1,25 +0,0 @@
1
- import { eventsDomain } from "@ekairos/events";
2
- import { getContextRuntime } from "@ekairos/events/runtime";
3
- export function createEventsReactRuntime(env) {
4
- const meta = () => ({
5
- domain: eventsDomain,
6
- schema: eventsDomain.toInstantSchema(),
7
- context: typeof eventsDomain.context === "function" ? eventsDomain.context() : undefined,
8
- contextString: typeof eventsDomain.contextString === "function"
9
- ? eventsDomain.contextString()
10
- : undefined,
11
- });
12
- const runtime = {
13
- env,
14
- async db() {
15
- const resolved = (await getContextRuntime(env));
16
- return resolved.db;
17
- },
18
- async resolve() {
19
- const db = await runtime.db();
20
- return { db, meta };
21
- },
22
- meta,
23
- };
24
- return runtime;
25
- }