@kortyx/runtime 0.5.0 → 0.5.1

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 (54) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/index.d.ts +127 -11
  3. package/dist/index.js +1303 -25
  4. package/dist/index.js.map +1 -0
  5. package/package.json +6 -5
  6. package/dist/checkpointer.d.ts +0 -3
  7. package/dist/checkpointer.d.ts.map +0 -1
  8. package/dist/checkpointer.js +0 -20
  9. package/dist/framework/adapter.d.ts +0 -21
  10. package/dist/framework/adapter.d.ts.map +0 -1
  11. package/dist/framework/adapter.js +0 -74
  12. package/dist/framework/in-memory-checkpointer.d.ts +0 -9
  13. package/dist/framework/in-memory-checkpointer.d.ts.map +0 -1
  14. package/dist/framework/in-memory-checkpointer.js +0 -134
  15. package/dist/framework/pending-requests.d.ts +0 -33
  16. package/dist/framework/pending-requests.d.ts.map +0 -1
  17. package/dist/framework/pending-requests.js +0 -32
  18. package/dist/framework/redis/pending-request-store.d.ts +0 -8
  19. package/dist/framework/redis/pending-request-store.d.ts.map +0 -1
  20. package/dist/framework/redis/pending-request-store.js +0 -30
  21. package/dist/framework/redis/redis-checkpointer.d.ts +0 -13
  22. package/dist/framework/redis/redis-checkpointer.d.ts.map +0 -1
  23. package/dist/framework/redis/redis-checkpointer.js +0 -159
  24. package/dist/framework/redis/redis-client.d.ts +0 -13
  25. package/dist/framework/redis/redis-client.d.ts.map +0 -1
  26. package/dist/framework/redis/redis-client.js +0 -181
  27. package/dist/framework/redis/redis-store.d.ts +0 -20
  28. package/dist/framework/redis/redis-store.d.ts.map +0 -1
  29. package/dist/framework/redis/redis-store.js +0 -107
  30. package/dist/graph/create-langgraph.d.ts +0 -17
  31. package/dist/graph/create-langgraph.d.ts.map +0 -1
  32. package/dist/graph/create-langgraph.js +0 -312
  33. package/dist/index.d.ts.map +0 -1
  34. package/dist/interrupt/tokens.d.ts +0 -3
  35. package/dist/interrupt/tokens.d.ts.map +0 -1
  36. package/dist/interrupt/tokens.js +0 -11
  37. package/dist/node-loader.d.ts +0 -7
  38. package/dist/node-loader.d.ts.map +0 -1
  39. package/dist/node-loader.js +0 -58
  40. package/dist/node-registry.d.ts +0 -7
  41. package/dist/node-registry.d.ts.map +0 -1
  42. package/dist/node-registry.js +0 -27
  43. package/dist/registry/file-registry.d.ts +0 -9
  44. package/dist/registry/file-registry.d.ts.map +0 -1
  45. package/dist/registry/file-registry.js +0 -105
  46. package/dist/registry/in-memory-registry.d.ts +0 -6
  47. package/dist/registry/in-memory-registry.d.ts.map +0 -1
  48. package/dist/registry/in-memory-registry.js +0 -25
  49. package/dist/registry/interface.d.ts +0 -12
  50. package/dist/registry/interface.d.ts.map +0 -1
  51. package/dist/registry/interface.js +0 -2
  52. package/dist/state/build-initial-state.d.ts +0 -9
  53. package/dist/state/build-initial-state.d.ts.map +0 -1
  54. package/dist/state/build-initial-state.js +0 -18
@@ -1,30 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createRedisPendingRequestStore = createRedisPendingRequestStore;
4
- function createRedisPendingRequestStore(options) {
5
- const prefix = options.prefix ?? "kortyx:pending:";
6
- const key = (token) => `${prefix}${token}`;
7
- return {
8
- async save(rec) {
9
- await options.store.set(key(rec.token), JSON.stringify(rec), rec.ttlMs);
10
- },
11
- async get(token) {
12
- const raw = await options.store.get(key(token));
13
- if (!raw)
14
- return null;
15
- return JSON.parse(raw);
16
- },
17
- async delete(token) {
18
- await options.store.del(key(token));
19
- },
20
- async update(token, patch) {
21
- const prevRaw = await options.store.get(key(token));
22
- if (!prevRaw)
23
- return;
24
- const prev = JSON.parse(prevRaw);
25
- const next = { ...prev, ...patch };
26
- const ttlLeft = Math.max(1, next.ttlMs - (Date.now() - next.createdAt));
27
- await options.store.set(key(token), JSON.stringify(next), ttlLeft);
28
- },
29
- };
30
- }
@@ -1,13 +0,0 @@
1
- import { type BaseCheckpointSaver } from "@langchain/langgraph-checkpoint";
2
- import type { RedisFrameworkStore } from "./redis-store";
3
- type RedisCheckpointSaverOptions = {
4
- store: RedisFrameworkStore;
5
- prefix?: string;
6
- ttlMs: number;
7
- };
8
- export type RedisCheckpointSaver = BaseCheckpointSaver & {
9
- deleteThread: (threadId: string) => Promise<void>;
10
- };
11
- export declare function createRedisCheckpointSaver(options: RedisCheckpointSaverOptions): RedisCheckpointSaver;
12
- export {};
13
- //# sourceMappingURL=redis-checkpointer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"redis-checkpointer.d.ts","sourceRoot":"","sources":["../../../src/framework/redis/redis-checkpointer.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,mBAAmB,EASzB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAOzD,KAAK,2BAA2B,GAAG;IACjC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AA8BF,MAAM,MAAM,oBAAoB,GAAG,mBAAmB,GAAG;IACvD,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACnD,CAAC;AAEF,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,2BAA2B,GACnC,oBAAoB,CAwNtB"}
@@ -1,159 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createRedisCheckpointSaver = createRedisCheckpointSaver;
4
- const langgraph_checkpoint_1 = require("@langchain/langgraph-checkpoint");
5
- const utf8Bytes = (s) => new Uint8Array(Buffer.from(s, "utf8"));
6
- const utf8String = (u8) => typeof u8 === "string" ? u8 : Buffer.from(u8).toString("utf8");
7
- const jsonSerde = {
8
- async dumpsTyped(data) {
9
- return ["json", utf8Bytes(JSON.stringify(data))];
10
- },
11
- async loadsTyped(_type, data) {
12
- return JSON.parse(utf8String(data));
13
- },
14
- };
15
- const b64FromBytes = (u8) => Buffer.from(u8).toString("base64");
16
- const bytesFromB64 = (s) => new Uint8Array(Buffer.from(s, "base64"));
17
- function createRedisCheckpointSaver(options) {
18
- const store = options.store;
19
- const ttlMs = options.ttlMs;
20
- const prefix = options.prefix ?? "kortyx:cp:";
21
- const latestKey = (threadId, checkpointNs) => `${prefix}latest:${threadId}:${checkpointNs}`;
22
- const checkpointKey = (threadId, checkpointNs, checkpointId) => `${prefix}chk:${threadId}:${checkpointNs}:${checkpointId}`;
23
- const writesKey = (threadId, checkpointNs, checkpointId) => `${prefix}wr:${threadId}:${checkpointNs}:${checkpointId}`;
24
- const serde = jsonSerde;
25
- const saver = {
26
- serde,
27
- async get(config) {
28
- const value = await saver.getTuple(config);
29
- return value ? value.checkpoint : undefined;
30
- },
31
- getNextVersion(current) {
32
- if (typeof current === "string") {
33
- throw new Error("Please override this method to use string versions.");
34
- }
35
- return current !== undefined && typeof current === "number"
36
- ? current + 1
37
- : 1;
38
- },
39
- async getTuple(config) {
40
- const threadId = config.configurable?.thread_id;
41
- const checkpointNs = config.configurable?.checkpoint_ns ?? "";
42
- if (!threadId)
43
- return undefined;
44
- const requested = (0, langgraph_checkpoint_1.getCheckpointId)(config);
45
- const checkpointId = requested || (await store.get(latestKey(threadId, checkpointNs))) || "";
46
- if (!checkpointId)
47
- return undefined;
48
- const raw = await store.get(checkpointKey(threadId, checkpointNs, checkpointId));
49
- if (!raw)
50
- return undefined;
51
- const parsed = JSON.parse(raw);
52
- const checkpoint = (await serde.loadsTyped("json", bytesFromB64(parsed.checkpoint)));
53
- const metadata = (await serde.loadsTyped("json", bytesFromB64(parsed.metadata)));
54
- const writes = await store.hgetall(writesKey(threadId, checkpointNs, checkpointId));
55
- const pendingWrites = await Promise.all(Object.values(writes).map(async (v) => {
56
- const w = JSON.parse(v);
57
- return [
58
- w.taskId,
59
- w.channel,
60
- await serde.loadsTyped("json", bytesFromB64(w.value)),
61
- ];
62
- }));
63
- const tuple = {
64
- config: {
65
- configurable: {
66
- thread_id: threadId,
67
- checkpoint_ns: checkpointNs,
68
- checkpoint_id: checkpointId,
69
- },
70
- },
71
- checkpoint,
72
- metadata,
73
- pendingWrites,
74
- };
75
- if (parsed.parentCheckpointId) {
76
- tuple.parentConfig = {
77
- configurable: {
78
- thread_id: threadId,
79
- checkpoint_ns: checkpointNs,
80
- checkpoint_id: parsed.parentCheckpointId,
81
- },
82
- };
83
- }
84
- return tuple;
85
- },
86
- async *list(_config, _options) {
87
- },
88
- async put(config, checkpoint, metadata, _newVersions) {
89
- const threadId = config.configurable?.thread_id;
90
- const checkpointNs = config.configurable?.checkpoint_ns ?? "";
91
- if (!threadId) {
92
- throw new Error('Failed to put checkpoint: missing "thread_id" in config.configurable.');
93
- }
94
- const prevId = await store.get(latestKey(threadId, checkpointNs));
95
- const prepared = (0, langgraph_checkpoint_1.copyCheckpoint)(checkpoint);
96
- const [[, chkBytes], [, metaBytes]] = await Promise.all([
97
- serde.dumpsTyped(prepared),
98
- serde.dumpsTyped(metadata),
99
- ]);
100
- const checkpointId = checkpoint.id;
101
- const key = checkpointKey(threadId, checkpointNs, checkpointId);
102
- const stored = {
103
- checkpoint: b64FromBytes(chkBytes),
104
- metadata: b64FromBytes(metaBytes),
105
- parentCheckpointId: config.configurable?.checkpoint_id,
106
- };
107
- await store.set(key, JSON.stringify(stored), ttlMs);
108
- await store.set(latestKey(threadId, checkpointNs), checkpointId, ttlMs);
109
- if (prevId && prevId !== checkpointId) {
110
- await store.del(checkpointKey(threadId, checkpointNs, prevId));
111
- await store.del(writesKey(threadId, checkpointNs, prevId));
112
- }
113
- return {
114
- configurable: {
115
- thread_id: threadId,
116
- checkpoint_ns: checkpointNs,
117
- checkpoint_id: checkpointId,
118
- },
119
- };
120
- },
121
- async putWrites(config, writes, taskId) {
122
- const threadId = config.configurable?.thread_id;
123
- const checkpointNs = config.configurable?.checkpoint_ns;
124
- const checkpointId = config.configurable?.checkpoint_id;
125
- if (!threadId) {
126
- throw new Error('Failed to put writes: missing "thread_id" in config.configurable.');
127
- }
128
- if (!checkpointId) {
129
- throw new Error('Failed to put writes: missing "checkpoint_id" in config.configurable.');
130
- }
131
- const outer = writesKey(threadId, checkpointNs ?? "", checkpointId);
132
- await store.expire(outer, ttlMs);
133
- await Promise.all(writes.map(async ([channel, value], idx) => {
134
- const [, vBytes] = await serde.dumpsTyped(value);
135
- const mappedIdx = langgraph_checkpoint_1.WRITES_IDX_MAP[channel] ?? idx;
136
- const innerKeyStr = `${taskId},${mappedIdx}`;
137
- const payload = {
138
- taskId,
139
- channel,
140
- value: b64FromBytes(vBytes),
141
- };
142
- const serialized = JSON.stringify(payload);
143
- if (mappedIdx >= 0) {
144
- await store.hsetnx(outer, innerKeyStr, serialized);
145
- }
146
- else {
147
- await store.hset(outer, innerKeyStr, serialized);
148
- }
149
- }));
150
- },
151
- async deleteThread(threadId) {
152
- const chkKeys = await store.scanKeys(`${prefix}chk:${threadId}:`);
153
- const wrKeys = await store.scanKeys(`${prefix}wr:${threadId}:`);
154
- const latestKeys = await store.scanKeys(`${prefix}latest:${threadId}:`);
155
- await store.delRaw([...chkKeys, ...wrKeys, ...latestKeys]);
156
- },
157
- };
158
- return saver;
159
- }
@@ -1,13 +0,0 @@
1
- export type RedisReply = string | number | null | RedisReply[] | {
2
- type: "error";
3
- message: string;
4
- };
5
- export type RedisClientOptions = {
6
- url: string;
7
- connectTimeoutMs?: number;
8
- };
9
- export type RedisClient = {
10
- command: (cmd: string, args?: string[]) => Promise<RedisReply>;
11
- };
12
- export declare function createRedisClient(options: RedisClientOptions): RedisClient;
13
- //# sourceMappingURL=redis-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"redis-client.d.ts","sourceRoot":"","sources":["../../../src/framework/redis/redis-client.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,MAAM,GACN,IAAI,GACJ,UAAU,EAAE,GACZ;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AA0EF,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CAChE,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CA6H1E"}
@@ -1,181 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createRedisClient = createRedisClient;
4
- const node_net_1 = require("node:net");
5
- const node_tls_1 = require("node:tls");
6
- const encodeBulk = (s) => {
7
- const b = Buffer.from(s, "utf8");
8
- return Buffer.concat([
9
- Buffer.from(`$${b.length}\r\n`),
10
- b,
11
- Buffer.from("\r\n"),
12
- ]);
13
- };
14
- const encodeCommand = (cmd, args) => {
15
- const parts = [cmd, ...args];
16
- const bufs = [Buffer.from(`*${parts.length}\r\n`)];
17
- for (const p of parts)
18
- bufs.push(encodeBulk(p));
19
- return Buffer.concat(bufs);
20
- };
21
- function readLine(buf, start) {
22
- const idx = buf.indexOf("\r\n", start);
23
- if (idx === -1)
24
- return null;
25
- return { line: buf.slice(start, idx).toString("utf8"), next: idx + 2 };
26
- }
27
- function parseReply(buf, start) {
28
- if (start >= buf.length)
29
- return null;
30
- const byte = buf[start];
31
- if (byte === undefined)
32
- return null;
33
- const prefix = String.fromCharCode(byte);
34
- if (prefix === "+" || prefix === "-" || prefix === ":") {
35
- const line = readLine(buf, start + 1);
36
- if (!line)
37
- return null;
38
- if (prefix === "+")
39
- return { value: line.line, next: line.next };
40
- if (prefix === ":")
41
- return { value: Number.parseInt(line.line, 10), next: line.next };
42
- return { value: { type: "error", message: line.line }, next: line.next };
43
- }
44
- if (prefix === "$") {
45
- const line = readLine(buf, start + 1);
46
- if (!line)
47
- return null;
48
- const len = Number.parseInt(line.line, 10);
49
- if (len === -1)
50
- return { value: null, next: line.next };
51
- const end = line.next + len;
52
- if (end + 2 > buf.length)
53
- return null;
54
- const data = buf.slice(line.next, end).toString("utf8");
55
- return { value: data, next: end + 2 };
56
- }
57
- if (prefix === "*") {
58
- const line = readLine(buf, start + 1);
59
- if (!line)
60
- return null;
61
- const count = Number.parseInt(line.line, 10);
62
- if (count === -1)
63
- return { value: null, next: line.next };
64
- const items = [];
65
- let cursor = line.next;
66
- for (let i = 0; i < count; i++) {
67
- const parsed = parseReply(buf, cursor);
68
- if (!parsed)
69
- return null;
70
- items.push(parsed.value);
71
- cursor = parsed.next;
72
- }
73
- return { value: items, next: cursor };
74
- }
75
- return {
76
- value: { type: "error", message: `Unknown RESP prefix: ${prefix}` },
77
- next: buf.length,
78
- };
79
- }
80
- function createRedisClient(options) {
81
- const resolvedOptions = {
82
- connectTimeoutMs: options.connectTimeoutMs ?? 5_000,
83
- url: options.url,
84
- };
85
- let socket = null;
86
- let buffer = Buffer.alloc(0);
87
- const inflight = [];
88
- let connecting = null;
89
- let ready = false;
90
- const drainReplies = () => {
91
- while (inflight.length) {
92
- const parsed = parseReply(buffer, 0);
93
- if (!parsed)
94
- return;
95
- const waiter = inflight.shift();
96
- buffer = buffer.slice(parsed.next);
97
- waiter.resolve(parsed.value);
98
- }
99
- };
100
- const send = (cmd, args = []) => {
101
- if (!socket)
102
- return Promise.reject(new Error("Redis socket not available"));
103
- const payload = encodeCommand(cmd, args);
104
- return new Promise((resolve, reject) => {
105
- inflight.push({ resolve, reject });
106
- socket.write(payload);
107
- });
108
- };
109
- const ensureConnected = async () => {
110
- if (ready)
111
- return;
112
- if (connecting)
113
- return connecting;
114
- connecting = (async () => {
115
- const u = new URL(resolvedOptions.url);
116
- const isTls = u.protocol === "rediss:";
117
- const host = u.hostname || "127.0.0.1";
118
- const port = u.port ? Number(u.port) : isTls ? 6380 : 6379;
119
- const password = u.password ? decodeURIComponent(u.password) : "";
120
- const db = u.pathname && u.pathname !== "/" ? Number(u.pathname.slice(1)) : 0;
121
- const s = isTls
122
- ? (0, node_tls_1.connect)({ host, port, servername: host })
123
- : (0, node_net_1.connect)({ host, port });
124
- socket = s;
125
- s.setNoDelay(true);
126
- s.setKeepAlive(true);
127
- s.on("data", (chunk) => {
128
- buffer = Buffer.concat([buffer, chunk]);
129
- drainReplies();
130
- });
131
- s.on("error", (err) => {
132
- ready = false;
133
- while (inflight.length)
134
- inflight.shift().reject(err);
135
- });
136
- s.on("close", () => {
137
- ready = false;
138
- while (inflight.length)
139
- inflight.shift().reject(new Error("Redis socket closed"));
140
- });
141
- await new Promise((resolve, reject) => {
142
- const timer = setTimeout(() => reject(new Error("Redis connect timeout")), resolvedOptions.connectTimeoutMs);
143
- const onConnect = () => {
144
- clearTimeout(timer);
145
- resolve();
146
- };
147
- s.once("connect", onConnect);
148
- s.once?.("secureConnect", onConnect);
149
- s.once("error", (e) => {
150
- clearTimeout(timer);
151
- reject(e);
152
- });
153
- });
154
- if (password) {
155
- const r = await send("AUTH", [password]);
156
- if (typeof r === "object" && r && r.type === "error") {
157
- throw new Error(`Redis AUTH failed: ${r.message}`);
158
- }
159
- }
160
- if (db && Number.isFinite(db) && db > 0) {
161
- const r = await send("SELECT", [String(db)]);
162
- if (typeof r === "object" && r && r.type === "error") {
163
- throw new Error(`Redis SELECT failed: ${r.message}`);
164
- }
165
- }
166
- ready = true;
167
- })();
168
- try {
169
- await connecting;
170
- }
171
- finally {
172
- connecting = null;
173
- }
174
- };
175
- return {
176
- async command(cmd, args = []) {
177
- await ensureConnected();
178
- return send(cmd, args);
179
- },
180
- };
181
- }
@@ -1,20 +0,0 @@
1
- export type RedisFrameworkStoreOptions = {
2
- url: string;
3
- prefix?: string;
4
- };
5
- export type FrameworkTtl = {
6
- ttlMs: number;
7
- };
8
- export type RedisFrameworkStore = {
9
- get: (key: string) => Promise<string | null>;
10
- set: (key: string, value: string, ttlMs: number) => Promise<void>;
11
- del: (key: string) => Promise<void>;
12
- hset: (key: string, field: string, value: string) => Promise<void>;
13
- hsetnx: (key: string, field: string, value: string) => Promise<number>;
14
- hgetall: (key: string) => Promise<Record<string, string>>;
15
- expire: (key: string, ttlMs: number) => Promise<void>;
16
- scanKeys: (prefix: string) => Promise<string[]>;
17
- delRaw: (keys: string[]) => Promise<void>;
18
- };
19
- export declare function createRedisFrameworkStore(options: RedisFrameworkStoreOptions): RedisFrameworkStore;
20
- //# sourceMappingURL=redis-store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"redis-store.d.ts","sourceRoot":"","sources":["../../../src/framework/redis/redis-store.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,0BAA0B,GAAG;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC7C,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACvE,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1D,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C,CAAC;AAMF,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,0BAA0B,GAClC,mBAAmB,CAwGrB"}
@@ -1,107 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createRedisFrameworkStore = createRedisFrameworkStore;
4
- const redis_client_1 = require("./redis-client");
5
- const isRedisError = (r) => Boolean(r) && typeof r === "object" && r.type === "error";
6
- function createRedisFrameworkStore(options) {
7
- const client = (0, redis_client_1.createRedisClient)({ url: options.url });
8
- const prefix = options.prefix ?? "kortyx:fw:";
9
- const k = (key) => `${prefix}${key}`;
10
- return {
11
- async get(key) {
12
- const r = await client.command("GET", [k(key)]);
13
- if (r === null)
14
- return null;
15
- if (typeof r === "string")
16
- return r;
17
- if (isRedisError(r)) {
18
- throw new Error(`Redis GET error: ${r.message}`);
19
- }
20
- return null;
21
- },
22
- async set(key, value, ttlMs) {
23
- const args = [k(key), value, "PX", String(Math.max(1, ttlMs))];
24
- const r = await client.command("SET", args);
25
- if (isRedisError(r)) {
26
- throw new Error(`Redis SET error: ${r.message}`);
27
- }
28
- },
29
- async del(key) {
30
- const r = await client.command("DEL", [k(key)]);
31
- if (isRedisError(r)) {
32
- throw new Error(`Redis DEL error: ${r.message}`);
33
- }
34
- },
35
- async hset(key, field, value) {
36
- const r = await client.command("HSET", [k(key), field, value]);
37
- if (isRedisError(r)) {
38
- throw new Error(`Redis HSET error: ${r.message}`);
39
- }
40
- },
41
- async hsetnx(key, field, value) {
42
- const r = await client.command("HSETNX", [k(key), field, value]);
43
- if (isRedisError(r)) {
44
- throw new Error(`Redis HSETNX error: ${r.message}`);
45
- }
46
- return typeof r === "number" ? r : 0;
47
- },
48
- async hgetall(key) {
49
- const r = await client.command("HGETALL", [k(key)]);
50
- if (isRedisError(r)) {
51
- throw new Error(`Redis HGETALL error: ${r.message}`);
52
- }
53
- if (!Array.isArray(r))
54
- return {};
55
- const out = {};
56
- for (let i = 0; i < r.length; i += 2) {
57
- const kk = r[i];
58
- const v = r[i + 1];
59
- if (typeof kk === "string" && typeof v === "string")
60
- out[kk] = v;
61
- }
62
- return out;
63
- },
64
- async expire(key, ttlMs) {
65
- const r = await client.command("PEXPIRE", [
66
- k(key),
67
- String(Math.max(1, ttlMs)),
68
- ]);
69
- if (isRedisError(r)) {
70
- throw new Error(`Redis PEXPIRE error: ${r.message}`);
71
- }
72
- },
73
- async scanKeys(prefixKey) {
74
- const fullPrefix = k(prefixKey);
75
- let cursor = "0";
76
- const keys = [];
77
- do {
78
- const r = await client.command("SCAN", [
79
- cursor,
80
- "MATCH",
81
- `${fullPrefix}*`,
82
- "COUNT",
83
- "200",
84
- ]);
85
- if (!Array.isArray(r) || r.length < 2)
86
- break;
87
- cursor = typeof r[0] === "string" ? r[0] : "0";
88
- const batch = r[1];
89
- if (Array.isArray(batch)) {
90
- for (const key of batch) {
91
- if (typeof key === "string")
92
- keys.push(key);
93
- }
94
- }
95
- } while (cursor !== "0");
96
- return keys;
97
- },
98
- async delRaw(keys) {
99
- if (keys.length === 0)
100
- return;
101
- const r = await client.command("DEL", keys);
102
- if (isRedisError(r)) {
103
- throw new Error(`Redis DEL error: ${r.message}`);
104
- }
105
- },
106
- };
107
- }
@@ -1,17 +0,0 @@
1
- import type { GraphState, WorkflowDefinition } from "@kortyx/core";
2
- import type { MemoryAdapter } from "@kortyx/memory";
3
- import type { GetProviderFn } from "@kortyx/providers";
4
- import type { BaseCheckpointSaver } from "@langchain/langgraph-checkpoint";
5
- export interface GraphRuntimeConfig {
6
- emit?: (event: string, payload: unknown) => void;
7
- onCheckpoint?: (args: {
8
- nodeId: string;
9
- state: GraphState;
10
- }) => void;
11
- memoryAdapter?: MemoryAdapter;
12
- checkpointer?: BaseCheckpointSaver;
13
- getProvider?: GetProviderFn;
14
- [key: string]: unknown;
15
- }
16
- export declare function createLangGraph(workflow: WorkflowDefinition, config: GraphRuntimeConfig): Promise<any>;
17
- //# sourceMappingURL=create-langgraph.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-langgraph.d.ts","sourceRoot":"","sources":["../../src/graph/create-langgraph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EAIV,kBAAkB,EACnB,MAAM,cAAc,CAAC;AAGtB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAI3E,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,KAAK,IAAI,CAAC;IACrE,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,CAAC,EAAE,mBAAmB,CAAC;IAKnC,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,wBAAsB,eAAe,CACnC,QAAQ,EAAE,kBAAkB,EAC5B,MAAM,EAAE,kBAAkB,gBA+Z3B"}