@ekairos/structure 1.21.53-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.
Files changed (73) hide show
  1. package/dist/clearDataset.tool.d.ts +14 -0
  2. package/dist/clearDataset.tool.d.ts.map +1 -0
  3. package/dist/clearDataset.tool.js +26 -0
  4. package/dist/clearDataset.tool.js.map +1 -0
  5. package/dist/completeObject.tool.d.ts +23 -0
  6. package/dist/completeObject.tool.d.ts.map +1 -0
  7. package/dist/completeObject.tool.js +80 -0
  8. package/dist/completeObject.tool.js.map +1 -0
  9. package/dist/completeRows.tool.d.ts +20 -0
  10. package/dist/completeRows.tool.d.ts.map +1 -0
  11. package/dist/completeRows.tool.js +134 -0
  12. package/dist/completeRows.tool.js.map +1 -0
  13. package/dist/dataset/steps.d.ts +142 -0
  14. package/dist/dataset/steps.d.ts.map +1 -0
  15. package/dist/dataset/steps.js +166 -0
  16. package/dist/dataset/steps.js.map +1 -0
  17. package/dist/datasetFiles.d.ts +6 -0
  18. package/dist/datasetFiles.d.ts.map +1 -0
  19. package/dist/datasetFiles.js +12 -0
  20. package/dist/datasetFiles.js.map +1 -0
  21. package/dist/domain.d.ts +2 -0
  22. package/dist/domain.d.ts.map +1 -0
  23. package/dist/domain.js +2 -0
  24. package/dist/domain.js.map +1 -0
  25. package/dist/executeCommand.tool.d.ts +35 -0
  26. package/dist/executeCommand.tool.d.ts.map +1 -0
  27. package/dist/executeCommand.tool.js +106 -0
  28. package/dist/executeCommand.tool.js.map +1 -0
  29. package/dist/file/steps.d.ts +8 -0
  30. package/dist/file/steps.d.ts.map +1 -0
  31. package/dist/file/steps.js +20 -0
  32. package/dist/file/steps.js.map +1 -0
  33. package/dist/generateSchema.tool.d.ts +22 -0
  34. package/dist/generateSchema.tool.d.ts.map +1 -0
  35. package/dist/generateSchema.tool.js +61 -0
  36. package/dist/generateSchema.tool.js.map +1 -0
  37. package/dist/index.d.ts +5 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +5 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/prompts.d.ts +18 -0
  42. package/dist/prompts.d.ts.map +1 -0
  43. package/dist/prompts.js +62 -0
  44. package/dist/prompts.js.map +1 -0
  45. package/dist/sandbox/steps.d.ts +74 -0
  46. package/dist/sandbox/steps.d.ts.map +1 -0
  47. package/dist/sandbox/steps.js +104 -0
  48. package/dist/sandbox/steps.js.map +1 -0
  49. package/dist/schema.d.ts +2 -0
  50. package/dist/schema.d.ts.map +1 -0
  51. package/dist/schema.js +33 -0
  52. package/dist/schema.js.map +1 -0
  53. package/dist/service.d.ts +41 -0
  54. package/dist/service.d.ts.map +1 -0
  55. package/dist/service.js +179 -0
  56. package/dist/service.js.map +1 -0
  57. package/dist/steps/commitFromEvents.step.d.ts +13 -0
  58. package/dist/steps/commitFromEvents.step.d.ts.map +1 -0
  59. package/dist/steps/commitFromEvents.step.js +82 -0
  60. package/dist/steps/commitFromEvents.step.js.map +1 -0
  61. package/dist/steps/persistObjectFromStory.step.d.ts +7 -0
  62. package/dist/steps/persistObjectFromStory.step.d.ts.map +1 -0
  63. package/dist/steps/persistObjectFromStory.step.js +90 -0
  64. package/dist/steps/persistObjectFromStory.step.js.map +1 -0
  65. package/dist/structure.d.ts +34 -0
  66. package/dist/structure.d.ts.map +1 -0
  67. package/dist/structure.js +443 -0
  68. package/dist/structure.js.map +1 -0
  69. package/dist/types/runtime.d.ts +56 -0
  70. package/dist/types/runtime.d.ts.map +1 -0
  71. package/dist/types/runtime.js +2 -0
  72. package/dist/types/runtime.js.map +1 -0
  73. package/package.json +49 -0
@@ -0,0 +1,82 @@
1
+ import { resolveStoryRuntime } from "@ekairos/story/runtime";
2
+ function isToolCompletePart(value) {
3
+ if (!value || typeof value !== "object")
4
+ return false;
5
+ const v = value;
6
+ return v.type === "tool-complete" && v.state === "output-available";
7
+ }
8
+ function findLatestCompleteToolOutput(events) {
9
+ for (let i = events.length - 1; i >= 0; i--) {
10
+ const parts = events[i]?.content?.parts;
11
+ if (!Array.isArray(parts))
12
+ continue;
13
+ for (let j = parts.length - 1; j >= 0; j--) {
14
+ const p = parts[j];
15
+ if (!isToolCompletePart(p))
16
+ continue;
17
+ return p.output;
18
+ }
19
+ }
20
+ return null;
21
+ }
22
+ export async function structureCommitFromEventsStep(params) {
23
+ "use step";
24
+ const contextKey = `structure:${params.structureId}`;
25
+ try {
26
+ const runtime = (await resolveStoryRuntime(params.env));
27
+ const store = runtime.store;
28
+ const db = runtime.db;
29
+ const events = await store.getEvents({ key: contextKey });
30
+ const output = findLatestCompleteToolOutput(events ?? []);
31
+ const out = output;
32
+ if (!out || out.success !== true)
33
+ return { ok: true, data: { committed: false } };
34
+ const ctx = await store.getContext({ key: contextKey });
35
+ const prevContent = (ctx?.content ?? {}) ?? {};
36
+ const prevStructure = (prevContent?.structure ?? {});
37
+ const nextStructure = {
38
+ ...prevStructure,
39
+ kind: "ekairos.structure",
40
+ version: 1,
41
+ structureId: params.structureId,
42
+ updatedAt: Date.now(),
43
+ state: "completed",
44
+ };
45
+ // Object completion
46
+ if (out.result !== undefined) {
47
+ nextStructure.outputs = {
48
+ ...(prevStructure?.outputs ?? {}),
49
+ object: { value: out.result },
50
+ };
51
+ }
52
+ // Rows completion
53
+ if (out.fileId && out.storagePath) {
54
+ nextStructure.metrics = {
55
+ ...(prevStructure?.metrics ?? {}),
56
+ calculatedTotalRows: typeof out.validRows === "number" ? out.validRows : prevStructure?.metrics?.calculatedTotalRows,
57
+ actualGeneratedRowCount: typeof out.validRows === "number" ? out.validRows : prevStructure?.metrics?.actualGeneratedRowCount,
58
+ };
59
+ nextStructure.outputs = {
60
+ ...(prevStructure?.outputs ?? {}),
61
+ rows: {
62
+ format: "jsonl",
63
+ fileId: out.fileId,
64
+ storagePath: out.storagePath,
65
+ rowCount: typeof out.validRows === "number" ? out.validRows : undefined,
66
+ },
67
+ };
68
+ // Link output file to context (domain-prefixed link)
69
+ const ctxId = ctx?.id;
70
+ if (!ctxId)
71
+ return { ok: false, error: "Context not found" };
72
+ await db.transact(db.tx.context_contexts[ctxId].link({ structure_output_file: out.fileId }));
73
+ }
74
+ await store.updateContextContent({ key: contextKey }, { ...prevContent, structure: nextStructure });
75
+ return { ok: true, data: { committed: true } };
76
+ }
77
+ catch (error) {
78
+ const message = error instanceof Error ? error.message : String(error);
79
+ return { ok: false, error: message };
80
+ }
81
+ }
82
+ //# sourceMappingURL=commitFromEvents.step.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commitFromEvents.step.js","sourceRoot":"","sources":["../../src/steps/commitFromEvents.step.ts"],"names":[],"mappings":"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","sourcesContent":["import { resolveStoryRuntime } from \"@ekairos/story/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 resolveStoryRuntime(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"]}
@@ -0,0 +1,7 @@
1
+ export declare function persistObjectResultFromStoryStep(params: {
2
+ env: any;
3
+ datasetId: string;
4
+ }): Promise<{
5
+ ok: boolean;
6
+ }>;
7
+ //# sourceMappingURL=persistObjectFromStory.step.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,90 @@
1
+ import { resolveStoryRuntime } from "@ekairos/story/runtime";
2
+ import { structurePatchContextContentStep, structureGetContextStep } from "../dataset/steps";
3
+ function extractJsonObject(text) {
4
+ const trimmed = text.trim();
5
+ if (!trimmed)
6
+ return null;
7
+ // strip ```json fences
8
+ const fenceStart = trimmed.startsWith("```") ? trimmed : "";
9
+ if (fenceStart) {
10
+ const withoutFirst = trimmed.replace(/^```[a-zA-Z]*\s*/i, "");
11
+ const withoutLast = withoutFirst.replace(/\s*```$/i, "");
12
+ try {
13
+ return JSON.parse(withoutLast.trim());
14
+ }
15
+ catch {
16
+ // fall through
17
+ }
18
+ }
19
+ // direct parse
20
+ try {
21
+ return JSON.parse(trimmed);
22
+ }
23
+ catch {
24
+ // fall through
25
+ }
26
+ // best-effort: extract first {...} block
27
+ const first = trimmed.indexOf("{");
28
+ const last = trimmed.lastIndexOf("}");
29
+ if (first === -1 || last === -1 || last <= first)
30
+ return null;
31
+ const candidate = trimmed.slice(first, last + 1);
32
+ try {
33
+ return JSON.parse(candidate);
34
+ }
35
+ catch {
36
+ return null;
37
+ }
38
+ }
39
+ export async function persistObjectResultFromStoryStep(params) {
40
+ "use step";
41
+ const runtime = (await resolveStoryRuntime(params.env));
42
+ const store = runtime.store;
43
+ console.log("[ekairos/structure] persistObjectFromStory.step execute begin");
44
+ console.log("[ekairos/structure] persistObjectFromStory.step execute datasetId", params.datasetId);
45
+ const contextKey = `structure:${params.datasetId}`;
46
+ const events = await store.getEvents({ key: contextKey });
47
+ console.log("[ekairos/structure] persistObjectFromStory.step execute eventsCount", Array.isArray(events) ? events.length : -1);
48
+ const ctxResult = await structureGetContextStep({ env: params.env, contextKey });
49
+ const existingContent = ctxResult.ok ? (ctxResult.data?.content ?? {}) : {};
50
+ for (let i = events.length - 1; i >= 0; i--) {
51
+ const e = events[i];
52
+ const parts = e?.content?.parts;
53
+ if (!Array.isArray(parts))
54
+ continue;
55
+ const text = parts
56
+ .map((p) => (p?.type === "text" ? String(p.text ?? "") : ""))
57
+ .join("\n")
58
+ .trim();
59
+ const obj = extractJsonObject(text);
60
+ if (obj) {
61
+ console.log("[ekairos/structure] persistObjectFromStory.step execute parsedJsonOk");
62
+ const patchResult = await structurePatchContextContentStep({
63
+ env: params.env,
64
+ contextKey,
65
+ patch: {
66
+ structure: {
67
+ kind: "ekairos.structure",
68
+ version: 1,
69
+ structureId: params.datasetId,
70
+ updatedAt: Date.now(),
71
+ state: "completed",
72
+ outputs: {
73
+ ...(existingContent?.structure?.outputs ?? {}),
74
+ object: { value: obj },
75
+ },
76
+ },
77
+ },
78
+ });
79
+ if (!patchResult?.ok) {
80
+ const err = patchResult?.error ?? "Failed to persist object result";
81
+ throw new Error(err);
82
+ }
83
+ console.log("[ekairos/structure] persistObjectFromStory.step execute savedOk");
84
+ return { ok: true };
85
+ }
86
+ }
87
+ console.log("[ekairos/structure] persistObjectFromStory.step execute noJsonFound");
88
+ return { ok: false };
89
+ }
90
+ //# sourceMappingURL=persistObjectFromStory.step.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistObjectFromStory.step.js","sourceRoot":"","sources":["../../src/steps/persistObjectFromStory.step.ts"],"names":[],"mappings":"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","sourcesContent":["import { resolveStoryRuntime } from \"@ekairos/story/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 resolveStoryRuntime(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"]}
@@ -0,0 +1,34 @@
1
+ export type StructureSource = {
2
+ kind: "file";
3
+ fileId: string;
4
+ } | {
5
+ kind: "dataset";
6
+ datasetId: string;
7
+ } | {
8
+ kind: "text";
9
+ text: string;
10
+ mimeType?: string;
11
+ name?: string;
12
+ };
13
+ export type StructureMode = "auto" | "schema";
14
+ export type StructureOutput = "rows" | "object";
15
+ export type StructureBuildResult = {
16
+ datasetId: string;
17
+ };
18
+ export declare function structure<Env extends {
19
+ orgId: string;
20
+ }>(env: Env, opts?: {
21
+ datasetId?: string;
22
+ }): {
23
+ datasetId: string;
24
+ from(...src: StructureSource[]): /*elided*/ any;
25
+ instructions(text?: string): /*elided*/ any;
26
+ auto(): /*elided*/ any;
27
+ schema(schema: any): /*elided*/ any;
28
+ asRows(): /*elided*/ any;
29
+ asObject(): /*elided*/ any;
30
+ build(userPrompt?: string): Promise<StructureBuildResult & {
31
+ dataset?: any;
32
+ }>;
33
+ };
34
+ //# sourceMappingURL=structure.d.ts.map
@@ -0,0 +1 @@
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"}