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 +113 -12
- package/dist/agent.d.ts +1 -1
- package/dist/agent.js +2 -2
- package/dist/dataset.d.ts +16 -1
- package/dist/dataset.d.ts.map +1 -1
- package/dist/dataset.js +38 -15
- package/dist/dataset.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/thread.d.ts +2 -0
- package/dist/thread.d.ts.map +1 -0
- package/dist/{context.js → thread.js} +2 -2
- package/dist/thread.js.map +1 -0
- package/package.json +9 -9
- package/dist/context.d.ts +0 -2
- package/dist/context.d.ts.map +0 -1
- package/dist/context.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,22 +1,123 @@
|
|
|
1
1
|
# ekairos
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Unified entrypoint for Ekairos core libraries.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
`ekairos` re-exports:
|
|
6
6
|
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
- `ekairos/dataset`
|
|
10
|
-
- `ekairos/domain`
|
|
7
|
+
- `@ekairos/domain`
|
|
8
|
+
- `@ekairos/thread`
|
|
11
9
|
|
|
12
|
-
|
|
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 {
|
|
54
|
+
import { createThread } from "ekairos";
|
|
55
|
+
import { tool } from "ai";
|
|
56
|
+
import { z } from "zod";
|
|
16
57
|
|
|
17
|
-
const
|
|
18
|
-
.context((stored) => stored.content ?? {})
|
|
19
|
-
.narrative(() => "
|
|
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/
|
|
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/
|
|
18
|
-
__exportStar(require("@ekairos/
|
|
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
|
-
|
|
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
|
package/dist/dataset.d.ts.map
CHANGED
|
@@ -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
|
-
|
|
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
|
package/dist/dataset.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataset.js","sourceRoot":"","sources":["../src/dataset.ts"],"names":[],"mappings":"
|
|
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
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
|
|
18
|
-
__exportStar(require("@ekairos/
|
|
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,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAkD;AAClD,kDAAgC;AAEhC,6BAA6B;AAC7B,kDAAgC"}
|
package/dist/thread.d.ts
ADDED
|
@@ -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/
|
|
18
|
-
//# sourceMappingURL=
|
|
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.
|
|
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
|
-
"./
|
|
38
|
-
"types": "./dist/
|
|
39
|
-
"import": "./dist/
|
|
40
|
-
"require": "./dist/
|
|
41
|
-
"default": "./dist/
|
|
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.
|
|
77
|
-
"@ekairos/
|
|
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.
|
|
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
package/dist/context.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
|
package/dist/context.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC"}
|