@ekairos/structure 1.21.54-beta.0 → 1.21.56-beta.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.
- package/dist/clearDataset.tool.d.ts +0 -1
- package/dist/clearDataset.tool.js +0 -1
- package/dist/completeObject.tool.d.ts +0 -1
- package/dist/completeObject.tool.js +0 -1
- package/dist/completeRows.tool.d.ts +0 -1
- package/dist/completeRows.tool.js +0 -1
- package/dist/dataset/steps.d.ts +0 -1
- package/dist/dataset/steps.js +48 -12
- package/dist/datasetFiles.d.ts +0 -1
- package/dist/datasetFiles.js +0 -1
- package/dist/datasetReader.d.ts +16 -0
- package/dist/datasetReader.js +25 -0
- package/dist/domain.d.ts +0 -1
- package/dist/domain.js +0 -1
- package/dist/executeCommand.tool.d.ts +0 -1
- package/dist/executeCommand.tool.js +0 -1
- package/dist/file/steps.d.ts +0 -1
- package/dist/file/steps.js +3 -4
- package/dist/generateSchema.tool.d.ts +0 -1
- package/dist/generateSchema.tool.js +0 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/prompts.d.ts +0 -1
- package/dist/prompts.js +0 -1
- package/dist/rowsOutputPaging.d.ts +57 -0
- package/dist/rowsOutputPaging.js +148 -0
- package/dist/rowsOutputPaging.steps.d.ts +37 -0
- package/dist/rowsOutputPaging.steps.js +125 -0
- package/dist/rowsPagination.steps.d.ts +59 -0
- package/dist/rowsPagination.steps.js +190 -0
- package/dist/runtime.d.ts +1 -2
- package/dist/runtime.js +1 -2
- package/dist/sandbox/steps.d.ts +0 -1
- package/dist/sandbox/steps.js +10 -7
- package/dist/schema.d.ts +0 -1
- package/dist/schema.js +3 -2
- package/dist/service.d.ts +0 -1
- package/dist/service.js +43 -34
- package/dist/steps/commitFromEvents.step.d.ts +0 -1
- package/dist/steps/commitFromEvents.step.js +2 -3
- package/dist/steps/persistObjectFromStory.step.d.ts +0 -1
- package/dist/steps/persistObjectFromStory.step.js +3 -4
- package/dist/structure.d.ts +29 -4
- package/dist/structure.js +35 -5
- package/package.json +14 -4
- package/dist/clearDataset.tool.d.ts.map +0 -1
- package/dist/clearDataset.tool.js.map +0 -1
- package/dist/completeObject.tool.d.ts.map +0 -1
- package/dist/completeObject.tool.js.map +0 -1
- package/dist/completeRows.tool.d.ts.map +0 -1
- package/dist/completeRows.tool.js.map +0 -1
- package/dist/dataset/steps.d.ts.map +0 -1
- package/dist/dataset/steps.js.map +0 -1
- package/dist/datasetFiles.d.ts.map +0 -1
- package/dist/datasetFiles.js.map +0 -1
- package/dist/domain.d.ts.map +0 -1
- package/dist/domain.js.map +0 -1
- package/dist/executeCommand.tool.d.ts.map +0 -1
- package/dist/executeCommand.tool.js.map +0 -1
- package/dist/file/steps.d.ts.map +0 -1
- package/dist/file/steps.js.map +0 -1
- package/dist/generateSchema.tool.d.ts.map +0 -1
- package/dist/generateSchema.tool.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/prompts.d.ts.map +0 -1
- package/dist/prompts.js.map +0 -1
- package/dist/runtime.d.ts.map +0 -1
- package/dist/runtime.js.map +0 -1
- package/dist/sandbox/steps.d.ts.map +0 -1
- package/dist/sandbox/steps.js.map +0 -1
- package/dist/schema.d.ts.map +0 -1
- package/dist/schema.js.map +0 -1
- package/dist/service.d.ts.map +0 -1
- package/dist/service.js.map +0 -1
- package/dist/steps/commitFromEvents.step.d.ts.map +0 -1
- package/dist/steps/commitFromEvents.step.js.map +0 -1
- package/dist/steps/persistObjectFromStory.step.d.ts.map +0 -1
- package/dist/steps/persistObjectFromStory.step.js.map +0 -1
- package/dist/structure.d.ts.map +0 -1
- package/dist/structure.js.map +0 -1
- package/dist/types/runtime.d.ts +0 -56
- package/dist/types/runtime.d.ts.map +0 -1
- package/dist/types/runtime.js +0 -2
- package/dist/types/runtime.js.map +0 -1
package/dist/structure.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type StructureRowsOutputPagingCursor } from "./rowsOutputPaging";
|
|
1
2
|
export type StructureSource = {
|
|
2
3
|
kind: "file";
|
|
3
4
|
fileId: string;
|
|
@@ -12,8 +13,35 @@ export type StructureSource = {
|
|
|
12
13
|
};
|
|
13
14
|
export type StructureMode = "auto" | "schema";
|
|
14
15
|
export type StructureOutput = "rows" | "object";
|
|
16
|
+
export type StructureRowsReadResult = {
|
|
17
|
+
rows: any[];
|
|
18
|
+
cursor: StructureRowsOutputPagingCursor;
|
|
19
|
+
done: boolean;
|
|
20
|
+
};
|
|
21
|
+
export type StructureRowsReader = {
|
|
22
|
+
/**
|
|
23
|
+
* Workflow-friendly rows reader.
|
|
24
|
+
*
|
|
25
|
+
* It lazily:
|
|
26
|
+
* - ensures a sandbox
|
|
27
|
+
* - downloads `/structure/<datasetId>/output.jsonl` into the sandbox (absolute dataset path)
|
|
28
|
+
* - reads the file in pages using an explicit cursor
|
|
29
|
+
*/
|
|
30
|
+
read(): Promise<StructureRowsReadResult>;
|
|
31
|
+
read(cursor?: Partial<StructureRowsOutputPagingCursor>, limit?: number): Promise<StructureRowsReadResult>;
|
|
32
|
+
read(params?: {
|
|
33
|
+
cursor?: Partial<StructureRowsOutputPagingCursor>;
|
|
34
|
+
limit?: number;
|
|
35
|
+
}): Promise<StructureRowsReadResult>;
|
|
36
|
+
};
|
|
15
37
|
export type StructureBuildResult = {
|
|
16
38
|
datasetId: string;
|
|
39
|
+
reader: StructureRowsReader;
|
|
40
|
+
/**
|
|
41
|
+
* Back-compat: in object output mode we still return the full context snapshot.
|
|
42
|
+
* Rows mode intentionally does not return the context, to keep the API light.
|
|
43
|
+
*/
|
|
44
|
+
dataset?: any;
|
|
17
45
|
};
|
|
18
46
|
export declare function structure<Env extends {
|
|
19
47
|
orgId: string;
|
|
@@ -27,8 +55,5 @@ export declare function structure<Env extends {
|
|
|
27
55
|
schema(schema: any): /*elided*/ any;
|
|
28
56
|
asRows(): /*elided*/ any;
|
|
29
57
|
asObject(): /*elided*/ any;
|
|
30
|
-
build(userPrompt?: string): Promise<StructureBuildResult
|
|
31
|
-
dataset?: any;
|
|
32
|
-
}>;
|
|
58
|
+
build(userPrompt?: string): Promise<StructureBuildResult>;
|
|
33
59
|
};
|
|
34
|
-
//# sourceMappingURL=structure.d.ts.map
|
package/dist/structure.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createStory, didToolExecute, USER_MESSAGE_TYPE, WEB_CHANNEL } from "@ekairos/story";
|
|
2
2
|
import { getDatasetOutputPath, getDatasetOutputSchemaPath, getDatasetWorkstation } from "./datasetFiles";
|
|
3
|
+
import { structureDownloadRowsOutputToSandboxStep, structureReadRowsOutputPageFromSandboxStep, } from "./rowsOutputPaging";
|
|
3
4
|
import { createDatasetSandboxStep, readDatasetSandboxFileStep, readDatasetSandboxTextFileStep, runDatasetSandboxCommandStep, writeDatasetSandboxFilesStep, writeDatasetSandboxTextFileStep, } from "./sandbox/steps";
|
|
4
5
|
import { readInstantFileStep } from "./file/steps";
|
|
5
6
|
import { structureGetContextStep, structureGetContextWithRowsOutputFileStep, structureReadRowsOutputJsonlStep, } from "./dataset/steps";
|
|
@@ -48,12 +49,13 @@ async function ensureSandboxPrepared(params) {
|
|
|
48
49
|
console.log("[ekairos/structure] structure.ts ensureSandboxPrepared sandbox.mkdir exitCode", mkdirRes.exitCode);
|
|
49
50
|
// Align with dataset sandbox behavior: install python deps up-front (once per dataset sandbox).
|
|
50
51
|
// This avoids tool-level "install if used" heuristics and ensures scripts can import pandas.
|
|
51
|
-
console.log("[ekairos/structure] structure.ts ensureSandboxPrepared installingPythonDeps pandas");
|
|
52
|
+
console.log("[ekairos/structure] structure.ts ensureSandboxPrepared installingPythonDeps pandas+openpyxl");
|
|
52
53
|
const pipInstall = await runDatasetSandboxCommandStep({
|
|
53
54
|
env,
|
|
54
55
|
sandboxId,
|
|
55
56
|
cmd: "python",
|
|
56
|
-
|
|
57
|
+
// NOTE: pandas needs openpyxl to read .xlsx files.
|
|
58
|
+
args: ["-m", "pip", "install", "pandas", "openpyxl", "--quiet", "--upgrade"],
|
|
57
59
|
});
|
|
58
60
|
const installStderr = pipInstall.stderr ?? "";
|
|
59
61
|
if (installStderr && (installStderr.includes("ERROR") || installStderr.includes("FAILED"))) {
|
|
@@ -151,7 +153,7 @@ async function readSchemaFromSandboxIfPresent(params) {
|
|
|
151
153
|
}
|
|
152
154
|
function createStructureStoryDefinition(config) {
|
|
153
155
|
const datasetId = config.datasetId;
|
|
154
|
-
const model = config.model ?? "openai/gpt-5";
|
|
156
|
+
const model = config.model ?? "openai/gpt-5.2";
|
|
155
157
|
const story = createStory("ekairos.structure")
|
|
156
158
|
.context(async (stored, env) => {
|
|
157
159
|
console.log("[ekairos/structure] structure.ts story.context begin");
|
|
@@ -434,10 +436,38 @@ export function structure(env, opts) {
|
|
|
434
436
|
if (output === "object" && !isObjectCompleted(ctx)) {
|
|
435
437
|
throw new Error("Object output not completed");
|
|
436
438
|
}
|
|
439
|
+
let rowsSandboxRef = null;
|
|
440
|
+
const reader = {
|
|
441
|
+
read: async (cursorOrParams, limit) => {
|
|
442
|
+
if (output !== "rows") {
|
|
443
|
+
throw new Error("reader.read() is only supported for output=rows");
|
|
444
|
+
}
|
|
445
|
+
if (!rowsSandboxRef) {
|
|
446
|
+
rowsSandboxRef = await structureDownloadRowsOutputToSandboxStep({
|
|
447
|
+
env,
|
|
448
|
+
structureId: datasetId,
|
|
449
|
+
});
|
|
450
|
+
}
|
|
451
|
+
const params = cursorOrParams && typeof cursorOrParams === "object" && ("cursor" in cursorOrParams || "limit" in cursorOrParams)
|
|
452
|
+
? cursorOrParams
|
|
453
|
+
: { cursor: cursorOrParams, limit };
|
|
454
|
+
const page = await structureReadRowsOutputPageFromSandboxStep({
|
|
455
|
+
env,
|
|
456
|
+
sandboxId: rowsSandboxRef.sandboxId,
|
|
457
|
+
localPath: rowsSandboxRef.localPath,
|
|
458
|
+
cursor: params?.cursor,
|
|
459
|
+
limit: params?.limit ?? 200,
|
|
460
|
+
});
|
|
461
|
+
return {
|
|
462
|
+
rows: page.rows,
|
|
463
|
+
cursor: page.nextCursor,
|
|
464
|
+
done: page.done,
|
|
465
|
+
};
|
|
466
|
+
},
|
|
467
|
+
};
|
|
437
468
|
console.log("[ekairos/structure] structure.ts build ok");
|
|
438
|
-
return { datasetId, dataset: ctx };
|
|
469
|
+
return output === "object" ? { datasetId, reader, dataset: ctx } : { datasetId, reader };
|
|
439
470
|
},
|
|
440
471
|
};
|
|
441
472
|
return api;
|
|
442
473
|
}
|
|
443
|
-
//# sourceMappingURL=structure.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ekairos/structure",
|
|
3
|
-
"version": "1.21.
|
|
3
|
+
"version": "1.21.56-beta.0",
|
|
4
4
|
"description": "Ekairos Structure - Unified structured extraction (rows or object) from file/text/dataset inputs",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -22,25 +22,35 @@
|
|
|
22
22
|
"types": "./dist/index.d.ts",
|
|
23
23
|
"import": "./dist/index.js",
|
|
24
24
|
"default": "./dist/index.js"
|
|
25
|
+
},
|
|
26
|
+
"./schema": {
|
|
27
|
+
"types": "./dist/schema.d.ts",
|
|
28
|
+
"import": "./dist/schema.js",
|
|
29
|
+
"default": "./dist/schema.js"
|
|
25
30
|
}
|
|
26
31
|
},
|
|
27
32
|
"scripts": {
|
|
28
33
|
"build": "tsc -p tsconfig.json",
|
|
34
|
+
"dev": "tsc -p tsconfig.json --watch",
|
|
29
35
|
"clean": "node -e \"require('fs').rmSync('dist', {recursive:true, force:true})\"",
|
|
30
36
|
"typecheck": "tsc --noEmit"
|
|
31
37
|
},
|
|
32
38
|
"dependencies": {
|
|
33
|
-
"@ekairos/
|
|
34
|
-
"@ekairos/
|
|
35
|
-
"@ekairos/sandbox": "^1.21.53-beta.0",
|
|
39
|
+
"@ekairos/domain": "^1.21.56-beta.0",
|
|
40
|
+
"@ekairos/sandbox": "^1.21.54-beta.0",
|
|
36
41
|
"@instantdb/admin": "^0.22.13",
|
|
37
42
|
"@instantdb/core": "^0.22.13",
|
|
38
43
|
"ai": "^5.0.95",
|
|
39
44
|
"ajv": "^8.17.1",
|
|
40
45
|
"zod": "^4.1.8"
|
|
41
46
|
},
|
|
47
|
+
"peerDependencies": {
|
|
48
|
+
"@ekairos/story": "^1.21.54-beta.0"
|
|
49
|
+
},
|
|
42
50
|
"devDependencies": {
|
|
43
51
|
"@ekairos/tsconfig": "workspace:*",
|
|
52
|
+
"@ekairos/story": "workspace:*",
|
|
53
|
+
"@ekairos/sandbox": "workspace:*",
|
|
44
54
|
"@types/node": "^24.5.0",
|
|
45
55
|
"typescript": "^5.9.2",
|
|
46
56
|
"vitest": "^3.2.4",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"clearDataset.tool.d.ts","sourceRoot":"","sources":["../src/clearDataset.tool.ts"],"names":[],"mappings":"AAKA,UAAU,sBAAsB;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,GAAG,CAAA;CACV;AAED,wBAAgB,sBAAsB,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,sBAAsB;;;;;;GAqB3F"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"clearDataset.tool.js","sourceRoot":"","sources":["../src/clearDataset.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAA;AACzB,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAC1B,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAA;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAQrD,MAAM,UAAU,sBAAsB,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAA0B;IAC1F,OAAO,IAAI,CAAC;QACV,WAAW,EAAE,8CAA8C;QAC3D,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;SACnD,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAsB,EAAE,EAAE;YAChD,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAA;YAClE,OAAO,CAAC,GAAG,CAAC,yDAAyD,EAAE,SAAS,CAAC,CAAA;YACjF,MAAM,UAAU,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAA;YAElD,IAAI,CAAC;gBACH,MAAM,4BAA4B,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC,CAAA;YAC7F,CAAC;YAAC,MAAM,CAAC;gBACP,cAAc;YAChB,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAA;YAC/D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAA;QACtD,CAAC;KACF,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import { tool } from \"ai\"\nimport { z } from \"zod/v4\"\nimport { runDatasetSandboxCommandStep } from \"./sandbox/steps\"\nimport { getDatasetOutputPath } from \"./datasetFiles\"\n\ninterface ClearDatasetToolParams {\n datasetId: string\n sandboxId: string\n env?: any\n}\n\nexport function createClearDatasetTool({ datasetId, sandboxId, env }: ClearDatasetToolParams) {\n return tool({\n description: \"Clear output files and reset dataset status.\",\n inputSchema: z.object({\n reason: z.string().describe(\"Reason for clearing\"),\n }),\n execute: async ({ reason }: { reason: string }) => {\n console.log(\"[ekairos/structure] clearDataset.tool execute begin\")\n console.log(\"[ekairos/structure] clearDataset.tool execute datasetId\", datasetId)\n const outputPath = getDatasetOutputPath(datasetId)\n\n try {\n await runDatasetSandboxCommandStep({ env, sandboxId, cmd: \"rm\", args: [\"-f\", outputPath] })\n } catch {\n // best-effort\n }\n\n console.log(\"[ekairos/structure] clearDataset.tool execute ok\")\n return { success: true, message: \"Cleared\", reason }\n },\n })\n}\n\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"completeObject.tool.d.ts","sourceRoot":"","sources":["../src/completeObject.tool.ts"],"names":[],"mappings":"AAeA,UAAU,wBAAwB;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,GAAG,CAAA;CACV;AAED,wBAAgB,wBAAwB,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,wBAAwB;;;;;;;;;;;;;;;GAmE/F"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"completeObject.tool.js","sourceRoot":"","sources":["../src/completeObject.tool.ts"],"names":[],"mappings":"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","sourcesContent":["import { tool } from \"ai\"\nimport { z } from \"zod/v4\"\nimport Ajv from \"ajv\"\nimport { structureGetContextStep } from \"./dataset/steps\"\nimport { readDatasetSandboxTextFileStep } from \"./sandbox/steps\"\n\nlet ajvInstance: Ajv | null = null\n\nfunction getAjv(): Ajv {\n if (!ajvInstance) {\n ajvInstance = new Ajv({ allErrors: true, strict: false })\n }\n return ajvInstance\n}\n\ninterface CompleteObjectToolParams {\n datasetId: string\n sandboxId: string\n env?: any\n}\n\nexport function createCompleteObjectTool({ datasetId, sandboxId, env }: CompleteObjectToolParams) {\n return tool({\n description:\n \"Complete an object result. Provide either resultJson (inline JSON) or resultPath (path to a JSON file in the sandbox). If a schema exists in the dataset record, the object is validated against it.\",\n inputSchema: z\n .object({\n summary: z.string().describe(\"Short summary\"),\n result: z.any().optional().describe(\"Result object (preferred)\"),\n resultJson: z.string().optional().describe(\"JSON string for the result object\"),\n resultPath: z.string().optional().describe(\"Sandbox path to a JSON file containing the object\"),\n })\n .refine((v) => v.result !== undefined || Boolean(v.resultJson) || Boolean(v.resultPath), {\n message: \"Provide result, resultJson or resultPath\",\n }),\n execute: async (input: { summary: string; result?: any; resultJson?: string; resultPath?: string }) => {\n console.log(\"[ekairos/structure] completeObject.tool execute begin\")\n console.log(\"[ekairos/structure] completeObject.tool execute datasetId\", datasetId)\n const contextKey = `structure:${datasetId}`\n const ctxResult = await structureGetContextStep({ env, contextKey })\n if (!ctxResult.ok) return { success: false, error: ctxResult.error }\n\n let obj: any\n if (input.result !== undefined) {\n obj = input.result\n } else {\n let jsonText = input.resultJson ?? \"\"\n if (!jsonText && input.resultPath) {\n console.log(\"[ekairos/structure] completeObject.tool execute readingResultPath\")\n const fileRead = await readDatasetSandboxTextFileStep({ env, sandboxId, path: input.resultPath })\n jsonText = fileRead.text ?? \"\"\n }\n\n try {\n obj = JSON.parse(jsonText)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n console.log(\"[ekairos/structure] completeObject.tool execute invalidJson\")\n return { success: false, error: `Invalid JSON: ${message}` }\n }\n }\n\n const content = (ctxResult.data?.content ?? {}) as any\n const outputSchema = content?.structure?.outputSchema\n const mode = content?.structure?.mode\n // Schema validation is strict only in `.schema(...)` mode. Auto is best-effort.\n if (mode === \"schema\" && outputSchema?.schema) {\n try {\n const validator = getAjv().compile(outputSchema.schema)\n const valid = validator(obj)\n if (!valid) {\n const errors = Array.isArray(validator.errors)\n ? validator.errors.map((err) => err.message || \"Unknown validation error\")\n : [\"Unknown validation error\"]\n console.log(\"[ekairos/structure] completeObject.tool execute schemaValidationFailed\")\n return { success: false, error: errors.slice(0, 5).join(\"; \") }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n console.log(\"[ekairos/structure] completeObject.tool execute schemaValidateThrew\")\n return { success: false, error: `Failed to validate schema: ${message}` }\n }\n }\n\n console.log(\"[ekairos/structure] completeObject.tool execute ok\")\n return { success: true, summary: input.summary, result: obj }\n },\n })\n}\n\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"completeRows.tool.d.ts","sourceRoot":"","sources":["../src/completeRows.tool.ts"],"names":[],"mappings":"AAgBA,UAAU,sBAAsB;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,GAAG,CAAA;CACV;AAED,wBAAgB,sBAAsB,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,sBAAsB;;;aA4FrE,OAAO;oBAAkB,MAAM;YAAU,MAAM;;;;;;;GAjBrE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"completeRows.tool.js","sourceRoot":"","sources":["../src/completeRows.tool.ts"],"names":[],"mappings":"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","sourcesContent":["import { tool } from \"ai\"\nimport { z } from \"zod/v4\"\nimport Ajv, { ValidateFunction } from \"ajv\"\nimport { readDatasetSandboxFileStep, readDatasetSandboxTextFileStep, runDatasetSandboxCommandStep } from \"./sandbox/steps\"\nimport { getDatasetOutputPath } from \"./datasetFiles\"\nimport { structureGetContextStep, structureUploadRowsOutputJsonlStep } from \"./dataset/steps\"\n\nlet ajvInstance: Ajv | null = null\n\nfunction getAjv(): Ajv {\n if (!ajvInstance) {\n ajvInstance = new Ajv({ allErrors: true, strict: false })\n }\n return ajvInstance\n}\n\ninterface CompleteRowsToolParams {\n datasetId: string\n sandboxId: string\n env?: any\n}\n\nexport function createCompleteRowsTool({ datasetId, sandboxId, env }: CompleteRowsToolParams) {\n return tool({\n description: \"Complete a rows dataset. Requires output.jsonl in the workstation and a saved schema.\",\n inputSchema: z.object({\n summary: z.string().describe(\"Summary of the completed dataset\"),\n }),\n execute: async ({ summary }: { summary: string }) => {\n console.log(\"[ekairos/structure] completeRows.tool execute begin\")\n console.log(\"[ekairos/structure] completeRows.tool execute datasetId\", datasetId)\n const contextKey = `structure:${datasetId}`\n const outputPath = getDatasetOutputPath(datasetId)\n\n try {\n await ensureFileExists(env, sandboxId, outputPath)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n console.log(\"[ekairos/structure] completeRows.tool execute missingOutputFile\")\n return { success: false, error: message }\n }\n\n const ctxResult = await structureGetContextStep({ env, contextKey })\n if (!ctxResult.ok) return { success: false, error: ctxResult.error }\n\n const content = (ctxResult.data?.content ?? {}) as any\n const outputSchema = content?.structure?.outputSchema\n if (!outputSchema?.schema) {\n console.log(\"[ekairos/structure] completeRows.tool execute schemaMissing\")\n return { success: false, error: \"Schema not found in database. Please generate schema first.\" }\n }\n\n const schemaJson = outputSchema.schema\n const mode = content?.structure?.mode\n let validator: ValidateFunction | null = null\n try {\n validator = getAjv().compile(schemaJson)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n if (mode === \"auto\") {\n console.log(\"[ekairos/structure] completeRows.tool execute schemaCompileSkippedAuto\")\n validator = null\n } else {\n console.log(\"[ekairos/structure] completeRows.tool execute schemaCompileFailed\")\n return { success: false, error: `Failed to compile schema: ${message}` }\n }\n }\n\n let totalValidRows = 0\n if (validator) {\n const validationResult = await validateJsonlRows({ env, sandboxId, outputPath, validator })\n if (!validationResult.success) return validationResult\n totalValidRows = validationResult.validRowCount ?? 0\n }\n console.log(\"[ekairos/structure] completeRows.tool execute validRowCount\", totalValidRows)\n\n const fileRead = await readDatasetSandboxFileStep({ env, sandboxId, path: outputPath })\n if (!fileRead.contentBase64) return { success: false, error: \"Empty file content\" }\n\n const uploadResult = await structureUploadRowsOutputJsonlStep({\n env,\n structureId: datasetId,\n contentBase64: fileRead.contentBase64,\n })\n if (!uploadResult.ok) return { success: false, error: uploadResult.error }\n console.log(\"[ekairos/structure] completeRows.tool execute uploadedFileId\", uploadResult.data.fileId)\n\n console.log(\"[ekairos/structure] completeRows.tool execute ok\")\n return {\n success: true,\n summary,\n validRows: totalValidRows,\n fileId: uploadResult.data.fileId,\n storagePath: uploadResult.data.storagePath,\n }\n },\n })\n}\n\nasync function ensureFileExists(env: any, sandboxId: string, path: string): Promise<void> {\n const result = await runDatasetSandboxCommandStep({\n env,\n sandboxId,\n cmd: \"test\",\n args: [\"-f\", path],\n })\n if (result.exitCode !== 0) throw new Error(\"Required file not found\")\n}\n\nasync function validateJsonlRows(params: {\n env: any\n sandboxId: string\n outputPath: string\n validator: ValidateFunction\n}): Promise<{ success: boolean; validRowCount?: number; error?: string }> {\n const { env, sandboxId, outputPath, validator } = params\n const fileRead = await readDatasetSandboxTextFileStep({ env, sandboxId, path: outputPath })\n const fileContent = fileRead.text ?? \"\"\n if (!fileContent) return { success: true, validRowCount: 0 }\n const lines = fileContent.split(\"\\n\")\n\n let validRowCount = 0\n for (let index = 0; index < lines.length; index++) {\n const trimmed = lines[index].trim()\n if (!trimmed) continue\n\n let record: any\n try {\n record = JSON.parse(trimmed)\n } catch {\n continue\n }\n\n if (record.type !== \"row\") continue\n const data = record.data\n if (data === undefined || data === null) continue\n\n const valid = validator(data)\n if (!valid) {\n const errors = Array.isArray(validator.errors)\n ? validator.errors.map((err) => err.message || \"Unknown validation error\")\n : [\"Unknown validation error\"]\n return { success: false, error: errors.slice(0, 3).join(\"; \") }\n }\n\n validRowCount++\n }\n\n return { success: true, validRowCount }\n}\n\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"steps.d.ts","sourceRoot":"","sources":["../../src/dataset/steps.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"steps.js","sourceRoot":"","sources":["../../src/dataset/steps.ts"],"names":[],"mappings":"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","sourcesContent":["import type { StoryRuntime } from \"@ekairos/story/runtime\"\nimport { getStoryRuntime } from \"../runtime\"\n\nexport type StructureContextContent = {\n /**\n * IMPORTANT:\n * Story engine persists its own runtime state into `context.content`.\n * To avoid clobbering, all structure metadata is namespaced under `structure`.\n */\n structure?: {\n kind?: \"ekairos.structure\"\n version?: number\n structureId?: string\n orgId?: string\n createdAt?: number\n updatedAt?: number\n mode?: \"auto\" | \"schema\"\n output?: \"rows\" | \"object\"\n instructions?: string\n sources?: any[]\n outputSchema?: { title?: string; description?: string; schema: any }\n state?: string\n metrics?: { calculatedTotalRows?: number; actualGeneratedRowCount?: number }\n outputs?: {\n rows?: { format: \"jsonl\"; fileId: string; storagePath: string; rowCount?: number }\n object?: { value: any }\n }\n error?: { message: string }\n }\n}\n\nexport async function structureGetOrCreateContextStep(params: {\n env: any\n contextKey: string\n}): Promise<{ ok: true; data: any } | { ok: false; error: string }> {\n \"use step\"\n try {\n const runtime: StoryRuntime = await getStoryRuntime(params.env)\n const ctx = await runtime.store.getOrCreateContext({ key: params.contextKey })\n return { ok: true, data: ctx }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n return { ok: false, error: message }\n }\n}\n\nexport async function structureGetContextStep(params: {\n env: any\n contextKey: string\n}): Promise<{ ok: true; data: any } | { ok: false; error: string }> {\n \"use step\"\n try {\n const runtime: StoryRuntime = await getStoryRuntime(params.env)\n const ctx = await runtime.store.getContext({ key: params.contextKey })\n if (!ctx) return { ok: false, error: \"Context not found\" }\n return { ok: true, data: ctx }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n return { ok: false, error: message }\n }\n}\n\nexport async function structureUpdateContextContentStep(params: {\n env: any\n contextKey: string\n content: StructureContextContent\n}): Promise<{ ok: true; data: any } | { ok: false; error: string }> {\n \"use step\"\n try {\n const runtime: StoryRuntime = await getStoryRuntime(params.env)\n const updated = await runtime.store.updateContextContent({ key: params.contextKey }, params.content)\n return { ok: true, data: updated }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n return { ok: false, error: message }\n }\n}\n\nexport async function structurePatchContextContentStep(params: {\n env: any\n contextKey: string\n patch: Partial<StructureContextContent>\n}): Promise<{ ok: true; data: any } | { ok: false; error: string }> {\n \"use step\"\n try {\n const runtime: StoryRuntime = await getStoryRuntime(params.env)\n const existing = await runtime.store.getOrCreateContext({ key: params.contextKey })\n const existingContent = (existing?.content ?? {}) as Record<string, unknown>\n const existingStructure = (existingContent?.structure ?? {}) as Record<string, unknown>\n const patchStructure = ((params.patch as StructureContextContent)?.structure ?? {}) as Record<string, unknown>\n\n const next = {\n ...existingContent,\n ...params.patch,\n structure: { ...existingStructure, ...patchStructure },\n }\n const updated = await runtime.store.updateContextContent({ key: params.contextKey }, next as any)\n return { ok: true, data: updated }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n return { ok: false, error: message }\n }\n}\n\nexport async function structureUploadRowsOutputJsonlStep(params: {\n env: any\n structureId: string\n contentBase64: string\n}): Promise<{ ok: true; data: { fileId: string; storagePath: string } } | { ok: false; error: string }> {\n \"use step\"\n try {\n const runtime: StoryRuntime = await getStoryRuntime(params.env)\n const db = runtime.db\n const storagePath = `/structure/${params.structureId}/output.jsonl`\n const fileBuffer = Buffer.from(params.contentBase64 ?? \"\", \"base64\")\n const uploadResult = await db.storage.uploadFile(storagePath, fileBuffer, {\n contentType: \"application/x-ndjson\",\n contentDisposition: \"output.jsonl\",\n })\n const fileId = uploadResult?.data?.id\n if (!fileId) return { ok: false, error: \"Failed to upload file to storage\" }\n return { ok: true, data: { fileId, storagePath } }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n return { ok: false, error: message }\n }\n}\n\nexport async function structureLinkRowsOutputFileToContextStep(params: {\n env: any\n contextKey: string\n fileId: string\n}): Promise<{ ok: true } | { ok: false; error: string }> {\n \"use step\"\n try {\n const runtime: StoryRuntime = await getStoryRuntime(params.env)\n const store = runtime.store\n const db = runtime.db\n const ctx = await store.getOrCreateContext({ key: params.contextKey })\n const ctxId = ctx?.id\n if (!ctxId) return { ok: false, error: \"Context not found\" }\n\n await db.transact([db.tx.context_contexts[ctxId].link({ structure_output_file: params.fileId })])\n return { ok: true }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n return { ok: false, error: message }\n }\n}\n\nexport async function structureUnlinkRowsOutputFileFromContextStep(params: {\n env: any\n contextKey: string\n fileId: string\n}): Promise<{ ok: true } | { ok: false; error: string }> {\n \"use step\"\n try {\n const runtime: StoryRuntime = await getStoryRuntime(params.env)\n const store = runtime.store\n const db = runtime.db\n const ctx = await store.getOrCreateContext({ key: params.contextKey })\n const ctxId = ctx?.id\n if (!ctxId) return { ok: false, error: \"Context not found\" }\n\n await db.transact([db.tx.context_contexts[ctxId].unlink({ structure_output_file: params.fileId })])\n return { ok: true }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n return { ok: false, error: message }\n }\n}\n\nexport async function structureGetContextWithRowsOutputFileStep(params: {\n env: any\n contextKey: string\n}): Promise<{ ok: true; data: any } | { ok: false; error: string }> {\n \"use step\"\n try {\n const runtime: StoryRuntime = await getStoryRuntime(params.env)\n const db = runtime.db\n const query = (await db.query({\n context_contexts: {\n $: { where: { key: params.contextKey }, limit: 1 },\n structure_output_file: {},\n },\n })) as any\n const row = query.context_contexts?.[0]\n if (!row) return { ok: false, error: \"Context not found\" }\n return { ok: true, data: row }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n return { ok: false, error: message }\n }\n}\n\nexport async function structureReadRowsOutputJsonlStep(params: {\n env: any\n structureId: string\n}): Promise<{ ok: true; data: { contentBase64: string } } | { ok: false; error: string }> {\n \"use step\"\n try {\n const contextKey = `structure:${params.structureId}`\n const runtime: StoryRuntime = await getStoryRuntime(params.env)\n const db = runtime.db\n const query = (await db.query({\n context_contexts: {\n $: { where: { key: contextKey }, limit: 1 },\n structure_output_file: {},\n },\n })) as any\n const ctx = query.context_contexts?.[0]\n if (!ctx) return { ok: false, error: \"Context not found\" }\n const linked = Array.isArray(ctx?.structure_output_file) ? ctx.structure_output_file[0] : ctx.structure_output_file\n const url = linked?.url\n if (!url) return { ok: false, error: \"Rows output file not found\" }\n\n const fileBuffer = await fetch(url).then((r) => r.arrayBuffer())\n return { ok: true, data: { contentBase64: Buffer.from(fileBuffer).toString(\"base64\") } }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n return { ok: false, error: message }\n }\n}\n\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"datasetFiles.d.ts","sourceRoot":"","sources":["../src/datasetFiles.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,iBAAiB,CAAA;AACtD,eAAO,MAAM,+BAA+B,uBAAuB,CAAA;AAEnE,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEpE"}
|
package/dist/datasetFiles.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"datasetFiles.js","sourceRoot":"","sources":["../src/datasetFiles.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,wBAAwB,GAAG,cAAc,CAAA;AACtD,MAAM,CAAC,MAAM,+BAA+B,GAAG,oBAAoB,CAAA;AAEnE,MAAM,UAAU,qBAAqB,CAAC,SAAiB;IACrD,OAAO,4BAA4B,SAAS,EAAE,CAAA;AAChD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD,OAAO,GAAG,qBAAqB,CAAC,SAAS,CAAC,IAAI,wBAAwB,EAAE,CAAA;AAC1E,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,SAAiB;IAC1D,OAAO,GAAG,qBAAqB,CAAC,SAAS,CAAC,IAAI,+BAA+B,EAAE,CAAA;AACjF,CAAC","sourcesContent":["export const DATASET_OUTPUT_FILE_NAME = \"output.jsonl\"\nexport const DATASET_OUTPUT_SCHEMA_FILE_NAME = \"output_schema.json\"\n\nexport function getDatasetWorkstation(datasetId: string): string {\n return `/vercel/sandbox/datasets/${datasetId}`\n}\n\nexport function getDatasetOutputPath(datasetId: string): string {\n return `${getDatasetWorkstation(datasetId)}/${DATASET_OUTPUT_FILE_NAME}`\n}\n\nexport function getDatasetOutputSchemaPath(datasetId: string): string {\n return `${getDatasetWorkstation(datasetId)}/${DATASET_OUTPUT_SCHEMA_FILE_NAME}`\n}\n\n"]}
|
package/dist/domain.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../src/domain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA"}
|
package/dist/domain.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"domain.js","sourceRoot":"","sources":["../src/domain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA","sourcesContent":["export { structureDomain } from \"./schema\"\n\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"executeCommand.tool.d.ts","sourceRoot":"","sources":["../src/executeCommand.tool.ts"],"names":[],"mappings":"AAQA,UAAU,wBAAwB;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,GAAG,CAAA;CACV;AAiBD,wBAAgB,wBAAwB,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiG/F"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"executeCommand.tool.js","sourceRoot":"","sources":["../src/executeCommand.tool.ts"],"names":[],"mappings":"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","sourcesContent":["import { tool } from \"ai\"\nimport { z } from \"zod/v4\"\nimport { runDatasetSandboxCommandStep, writeDatasetSandboxTextFileStep } from \"./sandbox/steps\"\nimport { getDatasetWorkstation } from \"./datasetFiles\"\n\nconst MAX_STDOUT_CHARS = 20000\nconst MAX_STDERR_CHARS = 5000\n\ninterface ExecuteCommandToolParams {\n datasetId: string\n sandboxId: string\n env?: any\n}\n\nfunction normalizeScriptName(scriptName: string): string {\n // Keep the AI-provided scriptName, but:\n // - strip a trailing \".py\" if it was included\n // - avoid extra dots/spaces in filenames\n const raw = String(scriptName ?? \"\").trim()\n const noExt = raw.toLowerCase().endsWith(\".py\") ? raw.slice(0, -3) : raw\n const cleaned = noExt\n .replace(/\\\\/g, \"_\")\n .replace(/\\//g, \"_\")\n .replace(/\\s+/g, \"_\")\n .replace(/\\./g, \"_\")\n .replace(/[^a-zA-Z0-9_-]/g, \"\")\n return cleaned.length > 0 ? cleaned : \"script\"\n}\n\nexport function createExecuteCommandTool({ datasetId, sandboxId, env }: ExecuteCommandToolParams) {\n return tool({\n description:\n \"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.\",\n inputSchema: z.object({\n pythonCode: z\n .string()\n .describe(\n \"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.\",\n ),\n scriptName: z\n .string()\n .describe(\n \"Name for the script file in snake_case (e.g., 'inspect_file', 'parse_csv', 'generate_output'). The file will be saved as <scriptName>.py in the workstation.\",\n ),\n }),\n execute: async ({ pythonCode, scriptName }: { pythonCode: string; scriptName: string }) => {\n console.log(\"[ekairos/structure] executeCommand.tool execute begin\")\n console.log(\"[ekairos/structure] executeCommand.tool execute datasetId\", datasetId)\n console.log(\"[ekairos/structure] executeCommand.tool execute scriptName\", scriptName)\n const workstation = getDatasetWorkstation(datasetId)\n const scriptNameWithExt = `${normalizeScriptName(scriptName)}.py`\n const scriptFile = `${workstation}/${scriptNameWithExt}`\n\n console.log(\"[ekairos/structure] executeCommand.tool execute writingScript\")\n await writeDatasetSandboxTextFileStep({\n env,\n sandboxId,\n path: scriptFile,\n text: pythonCode,\n })\n\n console.log(\"[ekairos/structure] executeCommand.tool execute runningPython\")\n const result = await runDatasetSandboxCommandStep({\n env,\n sandboxId,\n cmd: \"python\",\n args: [scriptFile],\n })\n\n const stdout = result.stdout || \"\"\n const stderr = result.stderr || \"\"\n const exitCode = result.exitCode\n\n const isStdoutTruncated = stdout.length > MAX_STDOUT_CHARS\n const isStderrTruncated = stderr.length > MAX_STDERR_CHARS\n\n const stdoutCapped = isStdoutTruncated ? stdout.slice(0, MAX_STDOUT_CHARS) : stdout\n const stderrCapped = isStderrTruncated ? stderr.slice(0, MAX_STDERR_CHARS) : stderr\n\n if (exitCode !== 0) {\n console.log(\"[ekairos/structure] executeCommand.tool execute failedExitCode\")\n return {\n success: false,\n exitCode,\n stdout: stdoutCapped,\n stderr: stderrCapped,\n scriptPath: scriptFile,\n error: \"Command failed\",\n stdoutTruncated: isStdoutTruncated,\n stderrTruncated: isStderrTruncated,\n stdoutOriginalLength: stdout.length,\n stderrOriginalLength: stderr.length,\n }\n }\n\n if (stderr && (stderr.includes(\"Traceback\") || stderr.toLowerCase().includes(\"error\"))) {\n console.log(\"[ekairos/structure] executeCommand.tool execute pythonErrorDetected\")\n return {\n success: false,\n exitCode,\n stdout: stdoutCapped,\n stderr: stderrCapped,\n scriptPath: scriptFile,\n error: \"Python error detected\",\n stdoutTruncated: isStdoutTruncated,\n stderrTruncated: isStderrTruncated,\n stdoutOriginalLength: stdout.length,\n stderrOriginalLength: stderr.length,\n }\n }\n\n console.log(\"[ekairos/structure] executeCommand.tool execute ok\")\n return {\n success: true,\n exitCode,\n stdout: stdoutCapped,\n stderr: stderrCapped,\n scriptPath: scriptFile,\n message: \"Command executed successfully\",\n stdoutTruncated: isStdoutTruncated,\n stderrTruncated: isStderrTruncated,\n stdoutOriginalLength: stdout.length,\n stderrOriginalLength: stderr.length,\n }\n },\n })\n}\n\n"]}
|
package/dist/file/steps.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"steps.d.ts","sourceRoot":"","sources":["../../src/file/steps.ts"],"names":[],"mappings":"AAGA,wBAAsB,mBAAmB,CAAC,MAAM,EAAE;IAChD,GAAG,EAAE,GAAG,CAAA;IACR,MAAM,EAAE,MAAM,CAAA;CACf,GAAG,OAAO,CAAC;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAgBlE"}
|
package/dist/file/steps.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"steps.js","sourceRoot":"","sources":["../../src/file/steps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE3C,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAGzC;IACC,UAAU,CAAA;IACV,MAAM,OAAO,GAAG,CAAC,MAAM,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAoB,CAAA;IACtE,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,CAAA;IACrB,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,EAAE,CAAC,CAAA;IACtC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACrD,MAAM,OAAO,GAAI,IAAuE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;IACrG,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,CAAA;IACxB,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAClD,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAA;IAC9E,OAAO;QACL,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACzD,kBAAkB,EAAG,OAAmC,CAAC,qBAAqB,CAAuB;KACtG,CAAA;AACH,CAAC","sourcesContent":["import { getStoryRuntime } from \"../runtime\"\nimport { DatasetService } from \"../service\"\n\nexport async function readInstantFileStep(params: {\n env: any\n fileId: string\n}): Promise<{ contentBase64: string; contentDisposition?: string }> {\n \"use step\"\n const runtime = (await getStoryRuntime(params.env)) as { db: unknown }\n const db = runtime.db\n const service = new DatasetService(db)\n const file = await service.getFileById(params.fileId)\n const fileRow = (file as { $files?: Array<{ url?: string } & Record<string, unknown>> })?.$files?.[0]\n const url = fileRow?.url\n if (!url) {\n throw new Error(\"File not found or URL missing\")\n }\n const fileBuffer = await fetch(url).then((response) => response.arrayBuffer())\n return {\n contentBase64: Buffer.from(fileBuffer).toString(\"base64\"),\n contentDisposition: (fileRow as Record<string, unknown>)[\"content-disposition\"] as string | undefined,\n }\n}\n\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generateSchema.tool.d.ts","sourceRoot":"","sources":["../src/generateSchema.tool.ts"],"names":[],"mappings":"AAKA,UAAU,wBAAwB;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,GAAG,CAAA;CACV;AAED,wBAAgB,wBAAwB,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,wBAAwB;;;;;;;;;;;;;;GAwD/F"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generateSchema.tool.js","sourceRoot":"","sources":["../src/generateSchema.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAA;AACzB,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAC1B,OAAO,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAA;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAA;AAQ3D,MAAM,UAAU,wBAAwB,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAA4B;IAC9F,OAAO,IAAI,CAAC;QACV,WAAW,EACT,mQAAmQ;QACrQ,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YACtD,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;YAClE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;SACxD,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,iBAAiB,EAAE,UAAU,EAA0E,EAAE,EAAE;YACxI,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAA;YACpE,OAAO,CAAC,GAAG,CAAC,2DAA2D,EAAE,SAAS,CAAC,CAAA;YACnF,OAAO,CAAC,GAAG,CAAC,2DAA2D,EAAE,SAAS,CAAC,CAAA;YACnF,OAAO,CAAC,GAAG,CAAC,6DAA6D,EAAE,WAAW,CAAC,CAAA;YACvF,OAAO,CAAC,GAAG,CAAC,kEAAkE,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;YAChH,MAAM,UAAU,GAAG;gBACjB,KAAK,EAAE,WAAW;gBAClB,WAAW,EAAE,iBAAiB;gBAC9B,MAAM,EAAE,CAAC,GAAG,EAAE;oBACZ,IAAI,CAAC;wBACH,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;oBAC/B,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;wBAC1D,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAA;wBAChF,OAAO,CAAC,GAAG,CAAC,0EAA0E,EAAE,OAAO,CAAC,CAAA;wBAChG,OAAO,CAAC,GAAG,CAAC,0EAA0E,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;wBAC/H,MAAM,CAAC,CAAA;oBACT,CAAC;gBACH,CAAC,CAAC,EAAE;aACL,CAAA;YAED,MAAM,UAAU,GAAG,0BAA0B,CAAC,SAAS,CAAC,CAAA;YACxD,IAAI,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,mEAAmE,EAAE,UAAU,CAAC,CAAA;gBAC5F,MAAM,+BAA+B,CAAC;oBACpC,GAAG;oBACH,SAAS;oBACT,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;iBAC1C,CAAC,CAAA;YACJ,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAA;gBACrE,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;gBAC1D,OAAO,CAAC,GAAG,CAAC,+DAA+D,EAAE,OAAO,CAAC,CAAA;gBACrF,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;oBAClC,OAAO,CAAC,GAAG,CAAC,6DAA6D,EAAE,CAAC,CAAC,KAAK,CAAC,CAAA;gBACrF,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,kEAAkE,EAAE,UAAU,CAAC,CAAA;gBAC3F,OAAO,CAAC,GAAG,CAAC,8DAA8D,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA;gBACzF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;YAC3C,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAA;YACjE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAA;QACjE,CAAC;KACF,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import { tool } from \"ai\"\nimport { z } from \"zod/v4\"\nimport { writeDatasetSandboxTextFileStep } from \"./sandbox/steps\"\nimport { getDatasetOutputSchemaPath } from \"./datasetFiles\"\n\ninterface GenerateSchemaToolParams {\n datasetId: string\n sandboxId: string\n env?: any\n}\n\nexport function createGenerateSchemaTool({ datasetId, sandboxId, env }: GenerateSchemaToolParams) {\n return tool({\n description:\n \"Write the output JSON Schema to the sandbox so the story loop can lift it into context state. IMPORTANT: Field names must be lowerCamelCase. For rows output, schema should describe a single record. For object output, schema should describe the whole object.\",\n inputSchema: z.object({\n schemaTitle: z.string().describe(\"Short schema title\"),\n schemaDescription: z.string().describe(\"Short schema description\"),\n schemaJson: z.string().describe(\"A JSON Schema string\"),\n }),\n execute: async ({ schemaTitle, schemaDescription, schemaJson }: { schemaTitle: string; schemaDescription: string; schemaJson: string }) => {\n console.log(\"[ekairos/structure] generateSchema.tool execute begin\")\n console.log(\"[ekairos/structure] generateSchema.tool execute datasetId\", datasetId)\n console.log(\"[ekairos/structure] generateSchema.tool execute sandboxId\", sandboxId)\n console.log(\"[ekairos/structure] generateSchema.tool execute schemaTitle\", schemaTitle)\n console.log(\"[ekairos/structure] generateSchema.tool execute schemaJsonLength\", String(schemaJson ?? \"\").length)\n const schemaData = {\n title: schemaTitle,\n description: schemaDescription,\n schema: (() => {\n try {\n return JSON.parse(schemaJson)\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e)\n console.log(\"[ekairos/structure] generateSchema.tool execute invalidSchemaJson\")\n console.log(\"[ekairos/structure] generateSchema.tool execute invalidSchemaJsonMessage\", message)\n console.log(\"[ekairos/structure] generateSchema.tool execute invalidSchemaJsonPreview\", String(schemaJson ?? \"\").slice(0, 300))\n throw e\n }\n })(),\n }\n\n const schemaPath = getDatasetOutputSchemaPath(datasetId)\n try {\n console.log(\"[ekairos/structure] generateSchema.tool execute writingSchemaPath\", schemaPath)\n await writeDatasetSandboxTextFileStep({\n env,\n sandboxId,\n path: schemaPath,\n text: JSON.stringify(schemaData, null, 2),\n })\n } catch (e) {\n console.log(\"[ekairos/structure] generateSchema.tool execute failed\")\n const message = e instanceof Error ? e.message : String(e)\n console.log(\"[ekairos/structure] generateSchema.tool execute failedMessage\", message)\n if (e instanceof Error && e.stack) {\n console.log(\"[ekairos/structure] generateSchema.tool execute failedStack\", e.stack)\n }\n console.log(\"[ekairos/structure] generateSchema.tool execute failedSchemaPath\", schemaPath)\n console.log(\"[ekairos/structure] generateSchema.tool execute failedHasEnv\", Boolean(env))\n return { success: false, error: message }\n }\n\n console.log(\"[ekairos/structure] generateSchema.tool execute ok\")\n return { success: true, message: \"Schema written\", schemaPath }\n },\n })\n}\n\n"]}
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA"}
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA","sourcesContent":["export * from \"./structure\"\nexport * from \"./schema\"\nexport * from \"./service\"\nexport * from \"./datasetFiles\"\n\n"]}
|
package/dist/prompts.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAA;IACjC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAA;IACvB,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAA;IACzB,YAAY,CAAC,EAAE,GAAG,CAAA;IAClB,OAAO,EAAE,cAAc,EAAE,CAAA;IACzB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,sBAAsB,GAAG,MAAM,CA4DxE"}
|
package/dist/prompts.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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","sourcesContent":["export type PreparedSource = {\n kind: \"file\" | \"dataset\" | \"text\"\n id: string\n path: string\n name?: string\n mimeType?: string\n}\n\nexport type StructurePromptContext = {\n datasetId: string\n mode: \"auto\" | \"schema\"\n output: \"rows\" | \"object\"\n outputSchema?: any\n sources: PreparedSource[]\n workstation: string\n outputPath: string\n}\n\nexport function buildStructurePrompt(ctx: StructurePromptContext): string {\n const goalText =\n ctx.output === \"rows\"\n ? \"Generate a JSONL dataset (output.jsonl) where each line is a JSON object: {\\\"type\\\":\\\"row\\\",\\\"data\\\":{...}}.\"\n : \"Generate a single JSON object result that matches the output schema (when provided).\"\n\n const lines: string[] = []\n lines.push(\"## ROLE\")\n lines.push(\"You are an AI system that produces structured outputs from mixed sources (files, text, and existing datasets).\")\n lines.push(\"\")\n lines.push(\"## GOAL\")\n lines.push(goalText)\n lines.push(\"\")\n lines.push(\"## CONTEXT\")\n lines.push(`DatasetId: ${ctx.datasetId}`)\n lines.push(\"\")\n lines.push(\"## SOURCES\")\n for (const s of ctx.sources) {\n lines.push(`- kind: ${s.kind}`)\n lines.push(` id: ${s.id}`)\n lines.push(` path: ${s.path}`)\n if (s.name) lines.push(` name: ${s.name}`)\n if (s.mimeType) lines.push(` mimeType: ${s.mimeType}`)\n }\n lines.push(\"\")\n lines.push(\"## SANDBOX\")\n lines.push(`Workstation: ${ctx.workstation}`)\n lines.push(`OutputPath: ${ctx.outputPath}`)\n lines.push(\"\")\n\n if (ctx.mode === \"schema\" && ctx.outputSchema) {\n lines.push(\"## OUTPUT SCHEMA (JSON Schema)\")\n lines.push(JSON.stringify(ctx.outputSchema, null, 2))\n lines.push(\"\")\n }\n\n lines.push(\"## INSTRUCTIONS\")\n if (ctx.mode === \"auto\") {\n lines.push(\"1) Inspect the Sources. If needed, use executeCommand to open/read files and explore structure (do not guess). Keep stdout concise.\")\n lines.push(\"2) Propose an output JSON Schema (lowerCamelCase field names). You may add derived fields if helpful, but justify them. Then call generateSchema.\")\n if (ctx.output === \"rows\") {\n lines.push(\"3) Use executeCommand to read the sources and write output.jsonl at OutputPath. Each line must be {\\\"type\\\":\\\"row\\\",\\\"data\\\":{...}}. Keep prints concise.\")\n lines.push(\"4) Call complete to validate and persist the output.jsonl to Instant Storage and mark the dataset completed.\")\n } else {\n lines.push(\"3) Produce the final JSON object. If needed, use executeCommand to compute it. Then you MUST call complete. Prefer resultJson (inline JSON) for small objects; use resultPath only if the object is large.\")\n }\n } else {\n if (ctx.output === \"rows\") {\n lines.push(\"1) Use executeCommand to read the sources and write output.jsonl at OutputPath. Each line must be {\\\"type\\\":\\\"row\\\",\\\"data\\\":{...}}. Keep prints concise.\")\n lines.push(\"2) Call complete to validate and persist the output.jsonl to Instant Storage and mark the dataset completed.\")\n } else {\n lines.push(\"1) Produce the final JSON object. If needed, use executeCommand to compute it. Then you MUST call complete. Prefer resultJson (inline JSON) for small objects; use resultPath only if the object is large.\")\n }\n }\n lines.push(\"\")\n lines.push(\"## RULES\")\n lines.push(\"- Field names must be lowerCamelCase.\")\n lines.push(\"- Do not leak secrets. Do not print large raw datasets to stdout.\")\n\n return lines.join(\"\\n\")\n}\n\n"]}
|
package/dist/runtime.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,GAAG,0DAG7C"}
|
package/dist/runtime.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAQ;IAC5C,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAA;IACtE,OAAO,MAAM,mBAAmB,CAAC,GAAG,CAAC,CAAA;AACvC,CAAC","sourcesContent":["/**\r\n * Internal helper to resolve Story runtime from within workflow steps.\r\n *\r\n * Why dynamic import?\r\n * - Some bundlers (notably Turbopack step bundles) can drop/hoist static imports in \"use step\" modules,\r\n * causing `ReferenceError: resolveStoryRuntime is not defined`.\r\n * - Using a dynamic import keeps the symbol resolution local to the step runtime.\r\n */\r\nexport async function getStoryRuntime(env: any) {\r\n const { resolveStoryRuntime } = await import(\"@ekairos/story/runtime\")\r\n return await resolveStoryRuntime(env)\r\n}\r\n\r\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"steps.d.ts","sourceRoot":"","sources":["../../src/sandbox/steps.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAA;AAErC,MAAM,MAAM,0BAA0B,GAAG;IACvC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,SAAS,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,8BAA8B,GAAG;IAC3C,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE;IAAE,GAAG,EAAE,GAAG,CAAA;CAAE,GAAG,0BAA0B,GAChD,OAAO,CAAC;IAAE,SAAS,EAAE,gBAAgB,CAAA;CAAE,CAAC,CAY1C;AAED,wBAAsB,4BAA4B,CAAC,MAAM,EAAE;IACzD,GAAG,EAAE,GAAG,CAAA;IACR,SAAS,EAAE,gBAAgB,CAAA;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAChB,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAkB1C;AAED,wBAAsB,4BAA4B,CAAC,MAAM,EAAE;IACzD,GAAG,EAAE,GAAG,CAAA;IACR,SAAS,EAAE,gBAAgB,CAAA;IAC3B,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACtD,GAAG,OAAO,CAAC,IAAI,CAAC,CAchB;AAED;;;;;;GAMG;AACH,wBAAsB,+BAA+B,CAAC,MAAM,EAAE;IAC5D,GAAG,EAAE,GAAG,CAAA;IACR,SAAS,EAAE,gBAAgB,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb,GAAG,OAAO,CAAC,IAAI,CAAC,CAQhB;AAED,wBAAsB,0BAA0B,CAAC,MAAM,EAAE;IACvD,GAAG,EAAE,GAAG,CAAA;IACR,SAAS,EAAE,gBAAgB,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAA;CACb,GAAG,OAAO,CAAC;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC,CAYrC;AAED;;;;;;GAMG;AACH,wBAAsB,8BAA8B,CAAC,MAAM,EAAE;IAC3D,GAAG,EAAE,GAAG,CAAA;IACR,SAAS,EAAE,gBAAgB,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAA;CACb,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAK5B;AAED,wBAAsB,sBAAsB,CAAC,MAAM,EAAE;IAAE,GAAG,EAAE,GAAG,CAAC;IAAC,SAAS,EAAE,gBAAgB,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAU7G"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"steps.js","sourceRoot":"","sources":["../../src/sandbox/steps.ts"],"names":[],"mappings":"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","sourcesContent":["import { getStoryRuntime } from \"../runtime\"\n\nexport type DatasetSandboxId = string\n\nexport type CreateDatasetSandboxParams = {\n runtime?: string\n timeoutMs?: number\n ports?: number[]\n resources?: { vcpus?: number }\n purpose?: string\n params?: Record<string, any>\n}\n\nexport type DatasetSandboxRunCommandResult = {\n exitCode: number\n stdout: string\n stderr: string\n}\n\nexport async function createDatasetSandboxStep(\n params: { env: any } & CreateDatasetSandboxParams,\n): Promise<{ sandboxId: DatasetSandboxId }> {\n \"use step\"\n console.log(\"[ekairos/structure] sandbox.step createSandbox begin\")\n console.log(\"[ekairos/structure] sandbox.step createSandbox runtime\", params.runtime)\n const db = (await getStoryRuntime(params.env) as any).db\n const { SandboxService } = (await import(\"@ekairos/sandbox\")) as any\n const service = new SandboxService(db)\n const created = await service.createSandbox(params)\n if (!created.ok) throw new Error(created.error)\n console.log(\"[ekairos/structure] sandbox.step createSandbox ok\")\n console.log(\"[ekairos/structure] sandbox.step createSandbox sandboxId\", created.data.sandboxId)\n return { sandboxId: created.data.sandboxId }\n}\n\nexport async function runDatasetSandboxCommandStep(params: {\n env: any\n sandboxId: DatasetSandboxId\n cmd: string\n args?: string[]\n}): Promise<DatasetSandboxRunCommandResult> {\n \"use step\"\n console.log(\"[ekairos/structure] sandbox.step runCommand begin\")\n console.log(\"[ekairos/structure] sandbox.step runCommand sandboxId\", params.sandboxId)\n console.log(\"[ekairos/structure] sandbox.step runCommand cmd\", params.cmd)\n const db = (await getStoryRuntime(params.env) as any).db\n const { SandboxService } = (await import(\"@ekairos/sandbox\")) as any\n const service = new SandboxService(db)\n const result = await service.runCommand(params.sandboxId, params.cmd, params.args ?? [])\n if (!result.ok) throw new Error(result.error)\n const normalized = {\n exitCode: result.data.exitCode ?? (result.data.success ? 0 : 1),\n stdout: result.data.output ?? \"\",\n stderr: result.data.error ?? \"\",\n }\n console.log(\"[ekairos/structure] sandbox.step runCommand ok\")\n console.log(\"[ekairos/structure] sandbox.step runCommand exitCode\", normalized.exitCode)\n return normalized\n}\n\nexport async function writeDatasetSandboxFilesStep(params: {\n env: any\n sandboxId: DatasetSandboxId\n files: Array<{ path: string; contentBase64: string }>\n}): Promise<void> {\n \"use step\"\n console.log(\"[ekairos/structure] sandbox.step writeFiles begin\")\n console.log(\"[ekairos/structure] sandbox.step writeFiles sandboxId\", params.sandboxId)\n console.log(\n \"[ekairos/structure] sandbox.step writeFiles paths\",\n params.files.map((f) => f.path),\n )\n const db = (await getStoryRuntime(params.env) as any).db\n const { SandboxService } = (await import(\"@ekairos/sandbox\")) as any\n const service = new SandboxService(db)\n const result = await service.writeFiles(params.sandboxId, params.files)\n if (!result.ok) throw new Error(result.error)\n console.log(\"[ekairos/structure] sandbox.step writeFiles ok\")\n}\n\n/**\n * Workflow-safe helper:\n * Keep base64 encoding inside the step runtime (Node),\n * so the workflow runtime never needs `Buffer`.\n *\n * Input/Output are serializable.\n */\nexport async function writeDatasetSandboxTextFileStep(params: {\n env: any\n sandboxId: DatasetSandboxId\n path: string\n text: string\n}): Promise<void> {\n \"use step\"\n const contentBase64 = Buffer.from(String(params.text ?? \"\"), \"utf-8\").toString(\"base64\")\n await writeDatasetSandboxFilesStep({\n env: params.env,\n sandboxId: params.sandboxId,\n files: [{ path: params.path, contentBase64 }],\n })\n}\n\nexport async function readDatasetSandboxFileStep(params: {\n env: any\n sandboxId: DatasetSandboxId\n path: string\n}): Promise<{ contentBase64: string }> {\n \"use step\"\n console.log(\"[ekairos/structure] sandbox.step readFile begin\")\n console.log(\"[ekairos/structure] sandbox.step readFile sandboxId\", params.sandboxId)\n console.log(\"[ekairos/structure] sandbox.step readFile path\", params.path)\n const db = (await getStoryRuntime(params.env) as any).db\n const { SandboxService } = (await import(\"@ekairos/sandbox\")) as any\n const service = new SandboxService(db)\n const result = await service.readFile(params.sandboxId, params.path)\n if (!result.ok) throw new Error(result.error)\n console.log(\"[ekairos/structure] sandbox.step readFile ok\")\n return result.data\n}\n\n/**\n * Workflow-safe helper:\n * Decode base64 -> utf-8 inside the step runtime (Node),\n * so the workflow runtime never needs `Buffer`.\n *\n * Input/Output are serializable.\n */\nexport async function readDatasetSandboxTextFileStep(params: {\n env: any\n sandboxId: DatasetSandboxId\n path: string\n}): Promise<{ text: string }> {\n \"use step\"\n const res = await readDatasetSandboxFileStep(params)\n const text = Buffer.from(res.contentBase64 ?? \"\", \"base64\").toString(\"utf-8\")\n return { text }\n}\n\nexport async function stopDatasetSandboxStep(params: { env: any; sandboxId: DatasetSandboxId }): Promise<void> {\n \"use step\"\n console.log(\"[ekairos/structure] sandbox.step stopSandbox begin\")\n console.log(\"[ekairos/structure] sandbox.step stopSandbox sandboxId\", params.sandboxId)\n const db = (await getStoryRuntime(params.env) as any).db\n const { SandboxService } = (await import(\"@ekairos/sandbox\")) as any\n const service = new SandboxService(db)\n const result = await service.stopSandbox(params.sandboxId)\n if (!result.ok) throw new Error(result.error)\n console.log(\"[ekairos/structure] sandbox.step stopSandbox ok\")\n}\n\n"]}
|
package/dist/schema.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAiCA,eAAO,MAAM,eAAe,EAAE,GAEO,CAAA"}
|
package/dist/schema.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,iBAAiB,CAAA;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5C,MAAM,QAAQ,GAAG;IACf,kFAAkF;IAClF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE;QACrC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAClC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE;QAC1C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE;QAC1C,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC7C,CAAC;CACM,CAAA;AAEV,MAAM,KAAK,GAAG;IACZ;;;;;OAKG;IACH,0BAA0B,EAAE;QAC1B,OAAO,EAAE,EAAE,EAAE,EAAE,kBAAkB,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAuB,EAAE;QAC/E,OAAO,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,EAAE;KACpE;CACO,CAAA;AAEV,MAAM,KAAK,GAAG,EAAW,CAAA;AAEzB,MAAM,CAAC,MAAM,eAAe,GAAQ,MAAM,CAAC,WAAW,CAAC;KACpD,QAAQ,CAAC,WAAW,CAAC;KACrB,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA","sourcesContent":["import { i } from \"@instantdb/core\"\nimport { domain } from \"@ekairos/domain\"\nimport { storyDomain } from \"@ekairos/story\"\n\nconst entities = {\n // Keep $files compatible with Instant's base file fields used by structure flows.\n $files: i.entity({\n path: i.string().optional().indexed(),\n url: i.string().optional(),\n name: i.string().optional(),\n contentType: i.string().optional(),\n size: i.number().optional(),\n createdAt: i.number().optional().indexed(),\n updatedAt: i.number().optional().indexed(),\n \"content-disposition\": i.string().optional(),\n }),\n} as const\n\nconst links = {\n /**\n * Structure output link (rows):\n *\n * - `context_contexts.structure_output_file` points to the `$files` record for `output.jsonl`.\n * - Reverse label is prefixed to avoid collisions across domains.\n */\n structureContextOutputFile: {\n forward: { on: \"context_contexts\", has: \"one\", label: \"structure_output_file\" },\n reverse: { on: \"$files\", has: \"many\", label: \"structure_contexts\" },\n },\n} as const\n\nconst rooms = {} as const\n\nexport const structureDomain: any = domain(\"structure\")\n .includes(storyDomain)\n .schema({ entities, links, rooms })\n\n"]}
|
package/dist/service.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,GAAG,IAAI;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAIzF;;;;GAIG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAK;gBAEZ,EAAE,EAAE,GAAG;IAInB,OAAO,CAAC,UAAU;IAIZ,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAkB9D,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAYzC,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAmExG;;;OAGG;IACG,aAAa,CAAC,MAAM,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IA2BrF,uBAAuB,CAAC,MAAM,EAAE;QACpC,SAAS,EAAE,MAAM,CAAA;QACjB,UAAU,EAAE,MAAM,CAAA;KACnB,GAAG,OAAO,CAAC,aAAa,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAoB7D,iBAAiB,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;CAiBrG"}
|
package/dist/service.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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","sourcesContent":["import { SchemaOf } from \"@ekairos/domain\"\nimport { structureDomain } from \"./schema\"\n\nexport type ServiceResult<T = any> = { ok: true; data: T } | { ok: false; error: string }\n\ntype StructureSchemaType = SchemaOf<typeof structureDomain>\n\n/**\n * Back-compat helper for reading structure outputs outside the workflow runtime.\n *\n * IMPORTANT: The source of truth is `context_contexts` (Story context) keyed by `structure:<id>`.\n */\nexport class DatasetService {\n private readonly db: any\n\n constructor(db: any) {\n this.db = db\n }\n\n private contextKey(structureId: string) {\n return `structure:${structureId}`\n }\n\n async getDatasetById(datasetId: string): Promise<ServiceResult<any>> {\n try {\n const key = this.contextKey(datasetId)\n const res: any = await (this.db as any).query({\n context_contexts: {\n $: { where: { key } as any, limit: 1 },\n structure_output_file: {},\n } as any,\n } as any)\n const ctx = res.context_contexts?.[0]\n if (!ctx) return { ok: false, error: \"Context not found\" }\n return { ok: true, data: ctx }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n return { ok: false, error: message }\n }\n }\n\n async getFileById(fileId: string): Promise<any> {\n const fileQuery: any = await (this.db as any).query({\n $files: {\n $: {\n where: { id: fileId } as any,\n limit: 1,\n },\n },\n } as any)\n return fileQuery\n }\n\n async readRecordsFromFile(datasetId: string): Promise<ServiceResult<AsyncGenerator<any, void, unknown>>> {\n try {\n const key = this.contextKey(datasetId)\n const res: any = await (this.db as any).query({\n context_contexts: {\n $: { where: { key } as any, limit: 1 },\n structure_output_file: {},\n } as any,\n } as any)\n\n const ctx = res.context_contexts?.[0]\n const linked = Array.isArray(ctx?.structure_output_file) ? ctx.structure_output_file[0] : ctx?.structure_output_file\n const url = linked?.url\n if (!url) return { ok: false, error: \"Rows output file not found\" }\n\n async function* createGenerator(fileUrl: string): AsyncGenerator<any, void, unknown> {\n const response = await fetch(fileUrl)\n if (!response.ok || !response.body) {\n throw new Error(\"Failed to download rows output file\")\n }\n\n const reader = response.body.getReader()\n const decoder = new TextDecoder(\"utf-8\")\n let buffer = \"\"\n\n while (true) {\n const { value, done } = await reader.read()\n if (done) break\n\n buffer += decoder.decode(value, { stream: true })\n let newlineIndex = buffer.indexOf(\"\\n\")\n\n while (newlineIndex !== -1) {\n const line = buffer.slice(0, newlineIndex)\n buffer = buffer.slice(newlineIndex + 1)\n\n const trimmed = line.trim()\n if (trimmed) {\n try {\n const record = JSON.parse(trimmed)\n yield record\n } catch {\n // skip invalid\n }\n }\n\n newlineIndex = buffer.indexOf(\"\\n\")\n }\n }\n\n const remaining = buffer.trim()\n if (remaining) {\n try {\n yield JSON.parse(remaining)\n } catch {\n // skip invalid\n }\n }\n }\n\n return { ok: true, data: createGenerator(url) }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n return { ok: false, error: message }\n }\n }\n\n /**\n * Back-compat: create a new structure context keyed by `structure:<id>`.\n * This is not used by the primary `structure()` API, which creates contexts via Story runtime.\n */\n async createDataset(params: { id?: string }): Promise<ServiceResult<{ datasetId: string }>> {\n try {\n const datasetId = params.id ?? createUuidV4()\n const key = this.contextKey(datasetId)\n\n const existing: any = await (this.db as any).query({\n context_contexts: { $: { where: { key } as any, limit: 1 } },\n } as any)\n const ctx = existing.context_contexts?.[0]\n if (ctx) return { ok: true, data: { datasetId } }\n\n await this.db.transact([\n this.db.tx.context_contexts[createUuidV4()].create({\n createdAt: new Date(),\n content: {},\n key,\n status: \"open\",\n } as any),\n ])\n\n return { ok: true, data: { datasetId } }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n return { ok: false, error: message }\n }\n }\n\n async uploadDatasetOutputFile(params: {\n datasetId: string\n fileBuffer: Buffer\n }): Promise<ServiceResult<{ fileId: string; storagePath: string }>> {\n try {\n const storagePath = `/structure/${params.datasetId}/output.jsonl`\n const uploadResult = await this.db.storage.uploadFile(storagePath, params.fileBuffer, {\n contentType: \"application/x-ndjson\",\n contentDisposition: \"output.jsonl\",\n })\n const fileId = uploadResult?.data?.id\n if (!fileId) return { ok: false, error: \"Failed to upload file to storage\" }\n\n const linkResult = await this.linkFileToDataset({ datasetId: params.datasetId, fileId })\n if (!linkResult.ok) return linkResult\n\n return { ok: true, data: { fileId, storagePath } }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n return { ok: false, error: message }\n }\n }\n\n async linkFileToDataset(params: { datasetId: string; fileId: string }): Promise<ServiceResult<void>> {\n try {\n const key = this.contextKey(params.datasetId)\n const res: any = await (this.db as any).query({\n context_contexts: { $: { where: { key } as any, limit: 1 } },\n } as any)\n const ctx = res?.context_contexts?.[0]\n const ctxId = ctx?.id\n if (!ctxId) return { ok: false, error: \"Context not found\" }\n\n await this.db.transact([this.db.tx.context_contexts[ctxId].link({ structure_output_file: params.fileId })])\n return { ok: true, data: undefined }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n return { ok: false, error: message }\n }\n }\n}\n\nfunction createUuidV4(): string {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0\n const v = c === \"x\" ? r : (r & 0x3) | 0x8\n return v.toString(16)\n })\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"commitFromEvents.step.d.ts","sourceRoot":"","sources":["../../src/steps/commitFromEvents.step.ts"],"names":[],"mappings":"AAuBA,wBAAsB,6BAA6B,CAAC,MAAM,EAAE;IAC1D,GAAG,EAAE,GAAG,CAAA;IACR,WAAW,EAAE,MAAM,CAAA;CACpB,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAsErF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"commitFromEvents.step.js","sourceRoot":"","sources":["../../src/steps/commitFromEvents.step.ts"],"names":[],"mappings":"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","sourcesContent":["import { getStoryRuntime } from \"../runtime\"\n\ntype ToolCompletePart = { type: \"tool-complete\"; state: \"output-available\"; output?: unknown }\n\nfunction isToolCompletePart(value: unknown): value is ToolCompletePart {\n if (!value || typeof value !== \"object\") return false\n const v = value as { type?: unknown; state?: unknown }\n return v.type === \"tool-complete\" && v.state === \"output-available\"\n}\n\nfunction findLatestCompleteToolOutput(events: unknown[]) {\n for (let i = events.length - 1; i >= 0; i--) {\n const parts = (events[i] as { content?: { parts?: unknown } })?.content?.parts\n if (!Array.isArray(parts)) continue\n for (let j = parts.length - 1; j >= 0; j--) {\n const p = parts[j]\n if (!isToolCompletePart(p)) continue\n return p.output\n }\n }\n return null\n}\n\nexport async function structureCommitFromEventsStep(params: {\n env: any\n structureId: string\n}): Promise<{ ok: true; data: { committed: boolean } } | { ok: false; error: string }> {\n \"use step\"\n const contextKey = `structure:${params.structureId}`\n\n try {\n const runtime = (await getStoryRuntime(params.env)) as {\n store: { getEvents(p: { key: string }): Promise<unknown[]>; getContext(p: { key: string }): Promise<{ id: string; content?: unknown } | null>; updateContextContent(p: { key: string }, c: unknown): Promise<unknown> }\n db: { transact(tx: unknown): Promise<unknown>; tx: { context_contexts: Record<string, { link(d: { structure_output_file: string }): unknown }> } }\n }\n const store = runtime.store\n const db = runtime.db\n\n const events = await store.getEvents({ key: contextKey })\n const output = findLatestCompleteToolOutput(events ?? [])\n const out = output as { success?: boolean; result?: unknown; fileId?: string; storagePath?: string; validRows?: unknown } | null\n if (!out || out.success !== true) return { ok: true, data: { committed: false } }\n\n const ctx = await store.getContext({ key: contextKey })\n const prevContent = ((ctx?.content ?? {}) as Record<string, unknown>) ?? {}\n const prevStructure = (prevContent?.structure ?? {}) as Record<string, unknown>\n\n const nextStructure: Record<string, unknown> = {\n ...prevStructure,\n kind: \"ekairos.structure\",\n version: 1,\n structureId: params.structureId,\n updatedAt: Date.now(),\n state: \"completed\",\n }\n\n // Object completion\n if (out.result !== undefined) {\n nextStructure.outputs = {\n ...(((prevStructure as any)?.outputs ?? {}) as Record<string, unknown>),\n object: { value: out.result },\n } as unknown\n }\n\n // Rows completion\n if (out.fileId && out.storagePath) {\n nextStructure.metrics = {\n ...(((prevStructure as any)?.metrics ?? {}) as Record<string, unknown>),\n calculatedTotalRows:\n typeof out.validRows === \"number\" ? out.validRows : (prevStructure as any)?.metrics?.calculatedTotalRows,\n actualGeneratedRowCount:\n typeof out.validRows === \"number\" ? out.validRows : (prevStructure as any)?.metrics?.actualGeneratedRowCount,\n } as unknown\n nextStructure.outputs = {\n ...(((prevStructure as any)?.outputs ?? {}) as Record<string, unknown>),\n rows: {\n format: \"jsonl\",\n fileId: out.fileId,\n storagePath: out.storagePath,\n rowCount: typeof out.validRows === \"number\" ? out.validRows : undefined,\n },\n } as unknown\n\n // Link output file to context (domain-prefixed link)\n const ctxId = ctx?.id\n if (!ctxId) return { ok: false, error: \"Context not found\" }\n await db.transact(db.tx.context_contexts[ctxId].link({ structure_output_file: out.fileId }))\n }\n\n await store.updateContextContent({ key: contextKey }, { ...prevContent, structure: nextStructure })\n\n return { ok: true, data: { committed: true } }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n return { ok: false, error: message }\n }\n}\n\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"persistObjectFromStory.step.d.ts","sourceRoot":"","sources":["../../src/steps/persistObjectFromStory.step.ts"],"names":[],"mappings":"AAsCA,wBAAsB,gCAAgC,CAAC,MAAM,EAAE;IAAE,GAAG,EAAE,GAAG,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAA;CAAE,CAAC,CAqDxH"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"persistObjectFromStory.step.js","sourceRoot":"","sources":["../../src/steps/persistObjectFromStory.step.ts"],"names":[],"mappings":"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","sourcesContent":["import { getStoryRuntime } from \"../runtime\"\nimport { structurePatchContextContentStep, structureGetContextStep } from \"../dataset/steps\"\n\nfunction extractJsonObject(text: string): any | null {\n const trimmed = text.trim()\n if (!trimmed) return null\n\n // strip ```json fences\n const fenceStart = trimmed.startsWith(\"```\") ? trimmed : \"\"\n if (fenceStart) {\n const withoutFirst = trimmed.replace(/^```[a-zA-Z]*\\s*/i, \"\")\n const withoutLast = withoutFirst.replace(/\\s*```$/i, \"\")\n try {\n return JSON.parse(withoutLast.trim())\n } catch {\n // fall through\n }\n }\n\n // direct parse\n try {\n return JSON.parse(trimmed)\n } catch {\n // fall through\n }\n\n // best-effort: extract first {...} block\n const first = trimmed.indexOf(\"{\")\n const last = trimmed.lastIndexOf(\"}\")\n if (first === -1 || last === -1 || last <= first) return null\n const candidate = trimmed.slice(first, last + 1)\n try {\n return JSON.parse(candidate)\n } catch {\n return null\n }\n}\n\nexport async function persistObjectResultFromStoryStep(params: { env: any; datasetId: string }): Promise<{ ok: boolean }> {\n \"use step\"\n const runtime = (await getStoryRuntime(params.env)) as any\n const store = runtime.store\n\n console.log(\"[ekairos/structure] persistObjectFromStory.step execute begin\")\n console.log(\"[ekairos/structure] persistObjectFromStory.step execute datasetId\", params.datasetId)\n const contextKey = `structure:${params.datasetId}`\n const events = await store.getEvents({ key: contextKey })\n console.log(\"[ekairos/structure] persistObjectFromStory.step execute eventsCount\", Array.isArray(events) ? events.length : -1)\n\n const ctxResult = await structureGetContextStep({ env: params.env, contextKey })\n const existingContent = ctxResult.ok ? ((ctxResult.data?.content ?? {}) as any) : ({} as any)\n\n for (let i = events.length - 1; i >= 0; i--) {\n const e: any = events[i]\n const parts = e?.content?.parts\n if (!Array.isArray(parts)) continue\n const text = parts\n .map((p: any) => (p?.type === \"text\" ? String(p.text ?? \"\") : \"\"))\n .join(\"\\n\")\n .trim()\n const obj = extractJsonObject(text)\n if (obj) {\n console.log(\"[ekairos/structure] persistObjectFromStory.step execute parsedJsonOk\")\n const patchResult = await structurePatchContextContentStep({\n env: params.env,\n contextKey,\n patch: {\n structure: {\n kind: \"ekairos.structure\",\n version: 1,\n structureId: params.datasetId,\n updatedAt: Date.now(),\n state: \"completed\",\n outputs: {\n ...(existingContent?.structure?.outputs ?? {}),\n object: { value: obj },\n },\n },\n } as any,\n })\n if (!(patchResult as any)?.ok) {\n const err = (patchResult as any)?.error ?? \"Failed to persist object result\"\n throw new Error(err)\n }\n console.log(\"[ekairos/structure] persistObjectFromStory.step execute savedOk\")\n return { ok: true }\n }\n }\n\n console.log(\"[ekairos/structure] persistObjectFromStory.step execute noJsonFound\")\n return { ok: false }\n}\n\n"]}
|
package/dist/structure.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"structure.d.ts","sourceRoot":"","sources":["../src/structure.ts"],"names":[],"mappings":"AA0BA,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpE,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,CAAA;AAC7C,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,CAAA;AAE/C,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AA2UD,wBAAgB,SAAS,CAAC,GAAG,SAAS;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,EACrD,GAAG,EAAE,GAAG,EACR,IAAI,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE;;iBAYd,eAAe,EAAE;wBAKV,MAAM;;mBAWX,GAAG;;;uBAgBO,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG;QAAE,OAAO,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;EAmJtF"}
|