ekairos 1.22.4-beta.development.0 → 1.22.4-beta.feature-thread-unify.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/README.md CHANGED
@@ -1,22 +1,123 @@
1
1
  # ekairos
2
2
 
3
- Convenience package that re-exports the main Ekairos surfaces.
3
+ Unified entrypoint for Ekairos core libraries.
4
4
 
5
- ## Main entrypoints
5
+ `ekairos` re-exports:
6
6
 
7
- - `ekairos` -> `@ekairos/events` + `@ekairos/domain`
8
- - `ekairos/context` -> context runtime/builder surface
9
- - `ekairos/dataset`
10
- - `ekairos/domain`
7
+ - `@ekairos/domain`
8
+ - `@ekairos/thread`
11
9
 
12
- ## Example
10
+ Use this package when you want one dependency and a clean DX surface for app teams.
11
+
12
+ ## What You Build With It
13
+
14
+ Ekairos is for domain-native AI applications:
15
+
16
+ - model your business as domains,
17
+ - run durable AI threads on top of those domains,
18
+ - keep state, traces, and workflow execution aligned.
19
+
20
+ ## Installation
21
+
22
+ ```bash
23
+ pnpm add ekairos
24
+ ```
25
+
26
+ ## Minimal App Bootstrap
27
+
28
+ ```ts
29
+ import "server-only";
30
+ import { configureRuntime } from "ekairos/runtime";
31
+ import { getOrgAdminDb } from "@/lib/admin-org-db";
32
+ import appDomain from "@/lib/domain";
33
+
34
+ export const runtimeConfig = configureRuntime({
35
+ runtime: async (env: { orgId: string }) => {
36
+ const db = await getOrgAdminDb(env.orgId, appDomain);
37
+ return { db };
38
+ },
39
+ domain: { domain: appDomain },
40
+ });
41
+ ```
42
+
43
+ The runtime bootstrap is single-source:
44
+
45
+ - no per-thread runtime bootstrap,
46
+ - no duplicated store wiring in app code,
47
+ - no extra SDK wrapper required.
48
+
49
+ Thread builds its store from the runtime-resolved db.
50
+
51
+ ## Define a Thread
13
52
 
14
53
  ```ts
15
- import { createContext } from "ekairos/context";
54
+ import { createThread } from "ekairos";
55
+ import { tool } from "ai";
56
+ import { z } from "zod";
16
57
 
17
- const demoContext = createContext("demo")
18
- .context((stored) => stored.content ?? {})
19
- .narrative(() => "Demo context")
20
- .actions(() => ({}))
58
+ const demoThread = createThread<{ orgId: string; sessionId: string }>("demo")
59
+ .context(async (stored, env) => ({ ...(stored.content ?? {}), ...env }))
60
+ .narrative(() => "You are a reliable assistant.")
61
+ .actions(() => ({
62
+ ping: tool({
63
+ description: "Return pong",
64
+ inputSchema: z.object({ text: z.string().optional() }),
65
+ execute: async ({ text }) => ({ pong: text ?? "ok" }),
66
+ }),
67
+ }))
68
+ .model("openai/gpt-5.2")
21
69
  .build();
22
70
  ```
71
+
72
+ ## Preconfigured Coding Thread (`thread/codex`)
73
+
74
+ If your app uses Codex App Server:
75
+
76
+ ```ts
77
+ import { createCodexThreadBuilder } from "ekairos/thread";
78
+
79
+ const codingBuilder = createCodexThreadBuilder({
80
+ key: "code.agent",
81
+ context: async (stored, env) => ({ ...(stored.content ?? {}), ...env }),
82
+ executeCodex: async ({ input, env }) => {
83
+ // call app server and return normalized output
84
+ return {
85
+ threadId: "t_1",
86
+ turnId: "turn_1",
87
+ assistantText: "completed",
88
+ reasoningText: "",
89
+ diff: "",
90
+ toolParts: [],
91
+ };
92
+ },
93
+ });
94
+ ```
95
+
96
+ ## Workflow Integration
97
+
98
+ Ekairos threads are designed to run inside Workflow DevKit:
99
+
100
+ - thread logic stays declarative,
101
+ - side effects run in workflow-safe steps,
102
+ - streams are resumable via workflow run streams.
103
+
104
+ Important boundary:
105
+
106
+ - workflow wrapper owns `"use workflow"`,
107
+ - thread engine stays workflow-compatible but does not declare `"use workflow"` internally.
108
+
109
+ ## Package Surface
110
+
111
+ - `ekairos` -> root re-exports (`domain` + `thread` APIs)
112
+ - `ekairos/domain` -> domain constructors and types
113
+ - `ekairos/thread` -> thread runtime and builders
114
+ - `ekairos/dataset` -> dataset tools (separate package support)
115
+
116
+ ## DX Principles
117
+
118
+ - Keep startup config short.
119
+ - Keep thread definitions easy to read.
120
+ - Keep runtime explicit and deterministic.
121
+ - Keep domain as source of truth.
122
+
123
+ This package is optimized for fast onboarding without sacrificing production durability.
package/dist/agent.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export * from '@ekairos/events';
1
+ export * from '@ekairos/thread';
2
2
  //# sourceMappingURL=agent.d.ts.map
package/dist/agent.js CHANGED
@@ -14,6 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- // Re-export agent functionality from @ekairos/events
18
- __exportStar(require("@ekairos/events"), exports);
17
+ // Re-export agent functionality from @ekairos/thread
18
+ __exportStar(require("@ekairos/thread"), exports);
19
19
  //# sourceMappingURL=agent.js.map
package/dist/dataset.d.ts CHANGED
@@ -1,2 +1,17 @@
1
- export * from "@ekairos/dataset";
1
+ import { type InstantAdminDatabase } from "@instantdb/admin";
2
+ import { datasetDomain, DatasetService } from "@ekairos/dataset";
3
+ import type { SchemaOf } from "@ekairos/domain";
4
+ export type DatasetDb = InstantAdminDatabase<SchemaOf<typeof datasetDomain>>;
5
+ export type DatasetsOptions = {
6
+ db?: DatasetDb;
7
+ appId?: string;
8
+ adminToken?: string;
9
+ schema?: unknown;
10
+ };
11
+ export type DatasetsClient = {
12
+ db: DatasetDb;
13
+ domain: typeof datasetDomain;
14
+ service: DatasetService;
15
+ };
16
+ export declare function datasets(options?: DatasetsOptions): DatasetsClient;
2
17
  //# sourceMappingURL=dataset.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dataset.d.ts","sourceRoot":"","sources":["../src/dataset.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"dataset.d.ts","sourceRoot":"","sources":["../src/dataset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,MAAM,SAAS,GAAG,oBAAoB,CAAC,QAAQ,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC;AAE7E,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,CAAC,EAAE,SAAS,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,SAAS,CAAC;IACd,MAAM,EAAE,OAAO,aAAa,CAAC;IAC7B,OAAO,EAAE,cAAc,CAAC;CACzB,CAAC;AAeF,wBAAgB,QAAQ,CAAC,OAAO,GAAE,eAAoB,GAAG,cAAc,CAgCtE"}
package/dist/dataset.js CHANGED
@@ -1,18 +1,41 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
2
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("@ekairos/dataset"), exports);
3
+ exports.datasets = datasets;
4
+ const admin_1 = require("@instantdb/admin");
5
+ const dataset_1 = require("@ekairos/dataset");
6
+ function resolveAppId(options) {
7
+ return (options.appId ??
8
+ process.env.INSTANT_APP_ID ??
9
+ process.env.NEXT_PUBLIC_INSTANT_APP_ID ??
10
+ "");
11
+ }
12
+ function resolveAdminToken(options) {
13
+ return options.adminToken ?? process.env.INSTANT_APP_ADMIN_TOKEN ?? "";
14
+ }
15
+ function datasets(options = {}) {
16
+ if (options.db) {
17
+ return {
18
+ db: options.db,
19
+ domain: dataset_1.datasetDomain,
20
+ service: new dataset_1.DatasetService(options.db),
21
+ };
22
+ }
23
+ const appId = resolveAppId(options);
24
+ const adminToken = resolveAdminToken(options);
25
+ if (!appId || !adminToken) {
26
+ throw new Error("datasets() requires Instant credentials. Provide { db } or { appId, adminToken }.");
27
+ }
28
+ const schema = options.schema ??
29
+ (typeof dataset_1.datasetDomain.toInstantSchema === "function"
30
+ ? dataset_1.datasetDomain.toInstantSchema()
31
+ : typeof dataset_1.datasetDomain.schema === "function"
32
+ ? dataset_1.datasetDomain.schema()
33
+ : undefined);
34
+ const db = (0, admin_1.init)({ appId, adminToken, ...(schema ? { schema } : {}) });
35
+ return {
36
+ db,
37
+ domain: dataset_1.datasetDomain,
38
+ service: new dataset_1.DatasetService(db),
39
+ };
40
+ }
18
41
  //# sourceMappingURL=dataset.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dataset.js","sourceRoot":"","sources":["../src/dataset.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAiC"}
1
+ {"version":3,"file":"dataset.js","sourceRoot":"","sources":["../src/dataset.ts"],"names":[],"mappings":";;AAgCA,4BAgCC;AAhED,4CAAmE;AACnE,8CAAiE;AAkBjE,SAAS,YAAY,CAAC,OAAwB;IAC5C,OAAO,CACL,OAAO,CAAC,KAAK;QACb,OAAO,CAAC,GAAG,CAAC,cAAc;QAC1B,OAAO,CAAC,GAAG,CAAC,0BAA0B;QACtC,EAAE,CACH,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAwB;IACjD,OAAO,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,EAAE,CAAC;AACzE,CAAC;AAED,SAAgB,QAAQ,CAAC,UAA2B,EAAE;IACpD,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;QACf,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,MAAM,EAAE,uBAAa;YACrB,OAAO,EAAE,IAAI,wBAAc,CAAC,OAAO,CAAC,EAAE,CAAC;SACxC,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAE9C,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,mFAAmF,CACpF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GACV,OAAO,CAAC,MAAM;QACd,CAAC,OAAQ,uBAAqB,CAAC,eAAe,KAAK,UAAU;YAC3D,CAAC,CAAE,uBAAqB,CAAC,eAAe,EAAE;YAC1C,CAAC,CAAC,OAAQ,uBAAqB,CAAC,MAAM,KAAK,UAAU;gBACnD,CAAC,CAAE,uBAAqB,CAAC,MAAM,EAAE;gBACjC,CAAC,CAAC,SAAS,CAAC,CAAC;IACnB,MAAM,EAAE,GAAG,IAAA,YAAI,EAAC,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAc,CAAC;IAEnF,OAAO;QACL,EAAE;QACF,MAAM,EAAE,uBAAa;QACrB,OAAO,EAAE,IAAI,wBAAc,CAAC,EAAE,CAAC;KAChC,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export * from '@ekairos/events';
1
+ export * from '@ekairos/thread';
2
2
  export * from '@ekairos/domain';
3
3
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -14,8 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- // Re-export principal de context/events
18
- __exportStar(require("@ekairos/events"), exports);
17
+ // Re-export todo de thread (el paquete principal)
18
+ __exportStar(require("@ekairos/thread"), exports);
19
19
  // Re-export domain utilities
20
20
  __exportStar(require("@ekairos/domain"), exports);
21
21
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wCAAwC;AACxC,kDAAgC;AAEhC,6BAA6B;AAC7B,kDAAgC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAkD;AAClD,kDAAgC;AAEhC,6BAA6B;AAC7B,kDAAgC"}
@@ -0,0 +1,2 @@
1
+ export * from "@ekairos/thread";
2
+ //# sourceMappingURL=thread.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thread.d.ts","sourceRoot":"","sources":["../src/thread.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
@@ -14,5 +14,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("@ekairos/events"), exports);
18
- //# sourceMappingURL=context.js.map
17
+ __exportStar(require("@ekairos/thread"), exports);
18
+ //# sourceMappingURL=thread.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thread.js","sourceRoot":"","sources":["../src/thread.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ekairos",
3
- "version": "1.22.4-beta.development.0",
3
+ "version": "1.22.4-beta.feature-thread-unify.0",
4
4
  "description": "Ekairos - AI Stories and Workflows Runtime",
5
5
  "type": "commonjs",
6
6
  "main": "dist/index.js",
@@ -34,11 +34,11 @@
34
34
  "require": "./dist/dataset.js",
35
35
  "default": "./dist/dataset.js"
36
36
  },
37
- "./context": {
38
- "types": "./dist/context.d.ts",
39
- "import": "./dist/context.js",
40
- "require": "./dist/context.js",
41
- "default": "./dist/context.js"
37
+ "./thread": {
38
+ "types": "./dist/thread.d.ts",
39
+ "import": "./dist/thread.js",
40
+ "require": "./dist/thread.js",
41
+ "default": "./dist/thread.js"
42
42
  },
43
43
  "./domain": {
44
44
  "types": "./dist/domain.d.ts",
@@ -73,10 +73,10 @@
73
73
  },
74
74
  "dependencies": {
75
75
  "@ekairos/dataset": "^1.21.85-beta.0",
76
- "@ekairos/domain": "^1.22.4-beta.development.0",
77
- "@ekairos/events": "^1.22.4-beta.development.0",
76
+ "@ekairos/domain": "^1.22.4-beta.feature-thread-unify.0",
77
+ "@ekairos/thread": "^1.22.4-beta.feature-thread-unify.0",
78
78
  "@instantdb/admin": "0.22.126",
79
- "ekairos-cli": "^1.22.4-beta.development.0"
79
+ "ekairos-cli": "^1.22.4-beta.feature-thread-unify.0"
80
80
  },
81
81
  "devDependencies": {
82
82
  "@ekairos/tsconfig": "workspace:*",
package/dist/context.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export * from "@ekairos/events";
2
- //# sourceMappingURL=context.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC"}