@ariaflowagents/redis-store 0.7.0 → 0.9.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.
@@ -0,0 +1,29 @@
1
+ import type { MemoryService, MemoryIngestionOptions, SearchMemoryRequest, SearchMemoryResponse, Session } from '@ariaflowagents/core';
2
+ import type { RedisClientLike } from './RedisSessionStore.js';
3
+ export type RedisMemoryStoreOptions = {
4
+ client: RedisClientLike;
5
+ prefix?: string;
6
+ memoryTtlSeconds?: number;
7
+ };
8
+ export declare class RedisMemoryService implements MemoryService {
9
+ private client;
10
+ private prefix;
11
+ private memoryTtlSeconds?;
12
+ constructor(options: RedisMemoryStoreOptions);
13
+ /** Key for a single memory entry. */
14
+ private memoryKey;
15
+ /** Set of memory IDs belonging to a user. */
16
+ private userMemoryIndexKey;
17
+ /** Set of memory IDs derived from a specific session (for idempotency). */
18
+ private sessionMemoryIndexKey;
19
+ addSessionToMemory(session: Session, options?: MemoryIngestionOptions): Promise<void>;
20
+ searchMemory(request: SearchMemoryRequest): Promise<SearchMemoryResponse>;
21
+ deleteMemories(userId: string): Promise<void>;
22
+ /**
23
+ * Extracts MemoryEntry objects from session messages.
24
+ * Strategy 'raw' stores each user/assistant message as a separate memory.
25
+ * Strategies 'summarize' and 'extract' are deferred to a future version.
26
+ */
27
+ private extractMemories;
28
+ }
29
+ //# sourceMappingURL=RedisMemoryService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RedisMemoryService.d.ts","sourceRoot":"","sources":["../src/RedisMemoryService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAEb,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,OAAO,EACR,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAU9D,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,qBAAa,kBAAmB,YAAW,aAAa;IACtD,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,gBAAgB,CAAC,CAAS;gBAEtB,OAAO,EAAE,uBAAuB;IAM5C,qCAAqC;IACrC,OAAO,CAAC,SAAS;IAIjB,6CAA6C;IAC7C,OAAO,CAAC,kBAAkB;IAI1B,2EAA2E;IAC3E,OAAO,CAAC,qBAAqB;IAIvB,kBAAkB,CACtB,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,IAAI,CAAC;IA2BV,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAoCzE,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnD;;;;OAIG;IACH,OAAO,CAAC,eAAe;CAkCxB"}
@@ -0,0 +1,121 @@
1
+ import { callCommand, getMembers, addMembers, removeMembers, setExpiration, getMulti, } from './redisHelpers.js';
2
+ export class RedisMemoryService {
3
+ client;
4
+ prefix;
5
+ memoryTtlSeconds;
6
+ constructor(options) {
7
+ this.client = options.client;
8
+ this.prefix = options.prefix ?? 'ariaflow';
9
+ this.memoryTtlSeconds = options.memoryTtlSeconds;
10
+ }
11
+ /** Key for a single memory entry. */
12
+ memoryKey(id) {
13
+ return `${this.prefix}:memory:${id}`;
14
+ }
15
+ /** Set of memory IDs belonging to a user. */
16
+ userMemoryIndexKey(userId) {
17
+ return `${this.prefix}:user:${userId}:memories`;
18
+ }
19
+ /** Set of memory IDs derived from a specific session (for idempotency). */
20
+ sessionMemoryIndexKey(sessionId) {
21
+ return `${this.prefix}:session:${sessionId}:memories`;
22
+ }
23
+ async addSessionToMemory(session, options) {
24
+ if (!session.userId)
25
+ return;
26
+ // Idempotency: delete previous memories from this session before re-ingesting.
27
+ const existingIds = await getMembers(this.client, this.sessionMemoryIndexKey(session.id));
28
+ for (const id of existingIds) {
29
+ await callCommand(this.client, ['del'], this.memoryKey(id));
30
+ await removeMembers(this.client, this.userMemoryIndexKey(session.userId), id);
31
+ }
32
+ if (existingIds.length > 0) {
33
+ await callCommand(this.client, ['del'], this.sessionMemoryIndexKey(session.id));
34
+ }
35
+ // Extract memories from session messages.
36
+ const memories = this.extractMemories(session, options);
37
+ for (const memory of memories) {
38
+ const key = this.memoryKey(memory.id);
39
+ await callCommand(this.client, ['set'], key, JSON.stringify(memory));
40
+ if (this.memoryTtlSeconds) {
41
+ await setExpiration(this.client, key, this.memoryTtlSeconds);
42
+ }
43
+ await addMembers(this.client, this.userMemoryIndexKey(session.userId), memory.id);
44
+ await addMembers(this.client, this.sessionMemoryIndexKey(session.id), memory.id);
45
+ }
46
+ }
47
+ async searchMemory(request) {
48
+ const { userId, query, limit = 10 } = request;
49
+ const ids = await getMembers(this.client, this.userMemoryIndexKey(userId));
50
+ if (ids.length === 0)
51
+ return { memories: [] };
52
+ const keys = ids.map(id => this.memoryKey(id));
53
+ const rawEntries = await getMulti(this.client, keys);
54
+ const memories = [];
55
+ const queryLower = query.toLowerCase();
56
+ const queryTerms = queryLower.split(/\s+/).filter(Boolean);
57
+ for (const raw of rawEntries) {
58
+ if (!raw)
59
+ continue;
60
+ try {
61
+ const entry = JSON.parse(raw);
62
+ entry.createdAt = new Date(entry.createdAt);
63
+ // Keyword scoring: count of query terms found in content.
64
+ const contentLower = entry.content.toLowerCase();
65
+ let matchCount = 0;
66
+ for (const term of queryTerms) {
67
+ if (contentLower.includes(term))
68
+ matchCount++;
69
+ }
70
+ if (matchCount > 0) {
71
+ entry.score = matchCount / queryTerms.length;
72
+ memories.push(entry);
73
+ }
74
+ }
75
+ catch { /* skip malformed entries */ }
76
+ }
77
+ memories.sort((a, b) => (b.score ?? 0) - (a.score ?? 0));
78
+ return { memories: memories.slice(0, limit) };
79
+ }
80
+ async deleteMemories(userId) {
81
+ const ids = await getMembers(this.client, this.userMemoryIndexKey(userId));
82
+ for (const id of ids) {
83
+ await callCommand(this.client, ['del'], this.memoryKey(id));
84
+ }
85
+ await callCommand(this.client, ['del'], this.userMemoryIndexKey(userId));
86
+ }
87
+ /**
88
+ * Extracts MemoryEntry objects from session messages.
89
+ * Strategy 'raw' stores each user/assistant message as a separate memory.
90
+ * Strategies 'summarize' and 'extract' are deferred to a future version.
91
+ */
92
+ extractMemories(session, options) {
93
+ const memories = [];
94
+ const now = new Date();
95
+ for (const message of session.messages) {
96
+ if (message.role !== 'user' && message.role !== 'assistant')
97
+ continue;
98
+ const content = typeof message.content === 'string'
99
+ ? message.content
100
+ : Array.isArray(message.content)
101
+ ? message.content
102
+ .filter((p) => p.type === 'text')
103
+ .map((p) => p.text)
104
+ .join('\n')
105
+ : '';
106
+ if (!content.trim())
107
+ continue;
108
+ memories.push({
109
+ id: `${session.id}:${memories.length}`,
110
+ sessionId: session.id,
111
+ userId: session.userId,
112
+ content,
113
+ author: message.role,
114
+ metadata: options?.metadata,
115
+ createdAt: now,
116
+ });
117
+ }
118
+ return memories;
119
+ }
120
+ }
121
+ //# sourceMappingURL=RedisMemoryService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RedisMemoryService.js","sourceRoot":"","sources":["../src/RedisMemoryService.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"RedisSessionStore.d.ts","sourceRoot":"","sources":["../src/RedisSessionStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIlE,KAAK,WAAW,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC;AAEzC,KAAK,YAAY,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;AAE7D,MAAM,MAAM,eAAe,GAAG;IAC5B,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,gBAAgB,CAAC,EAAE,YAAY,CAAC;IAChC,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,gBAAgB,CAAC,EAAE,YAAY,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAiJF,qBAAa,iBAAkB,YAAW,YAAY;IACpD,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,iBAAiB,CAAC,CAAS;IACnC,OAAO,CAAC,kBAAkB,CAAU;gBAExB,OAAO,EAAE,iBAAiB;IAOtC,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,eAAe;IAIjB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAcxC,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBrC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcjC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAsBzC,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAgBjD"}
1
+ {"version":3,"file":"RedisSessionStore.d.ts","sourceRoot":"","sources":["../src/RedisSessionStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAalE,KAAK,WAAW,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC;AAEzC,KAAK,YAAY,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;AAE7D,MAAM,MAAM,eAAe,GAAG;IAC5B,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,gBAAgB,CAAC,EAAE,YAAY,CAAC;IAChC,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,gBAAgB,CAAC,EAAE,YAAY,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAmCF,qBAAa,iBAAkB,YAAW,YAAY;IACpD,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,iBAAiB,CAAC,CAAS;IACnC,OAAO,CAAC,kBAAkB,CAAU;gBAExB,OAAO,EAAE,iBAAiB;IAOtC,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,eAAe;IAIjB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAcxC,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBrC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcjC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAsBzC,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAgBjD"}
@@ -1,3 +1,4 @@
1
+ import { callCommand, getMembers, addMembers, removeMembers, setExpiration, setScore, removeScore, rangeByScore, removeByScore, } from './redisHelpers.js';
1
2
  const defaultPrefix = 'ariaflow';
2
3
  const reviveSession = (raw) => {
3
4
  const session = { ...raw };
@@ -27,77 +28,6 @@ const reviveSession = (raw) => {
27
28
  ]));
28
29
  return session;
29
30
  };
30
- const callCommand = async (client, names, ...args) => {
31
- for (const name of names) {
32
- const fn = client[name];
33
- if (typeof fn === 'function') {
34
- return (await fn.call(client, ...args));
35
- }
36
- }
37
- throw new Error(`Redis client missing command: ${names.join(', ')}`);
38
- };
39
- const getMembers = async (client, key) => {
40
- return (await callCommand(client, ['smembers', 'sMembers'], key)) ?? [];
41
- };
42
- const addMembers = async (client, key, ...members) => {
43
- if (members.length === 0)
44
- return;
45
- await callCommand(client, ['sadd', 'sAdd'], key, ...members);
46
- };
47
- const removeMembers = async (client, key, ...members) => {
48
- if (members.length === 0)
49
- return;
50
- await callCommand(client, ['srem', 'sRem'], key, ...members);
51
- };
52
- const setExpiration = async (client, key, ttlSeconds) => {
53
- if (!ttlSeconds)
54
- return;
55
- await callCommand(client, ['expire'], key, ttlSeconds);
56
- };
57
- const setScore = async (client, key, score, member) => {
58
- if (typeof client.zAdd === 'function') {
59
- await client.zAdd(key, [{ score, value: member }]);
60
- return;
61
- }
62
- if (typeof client.zadd === 'function') {
63
- try {
64
- await client.zadd(key, { score, member });
65
- return;
66
- }
67
- catch {
68
- await client.zadd(key, score, member);
69
- return;
70
- }
71
- }
72
- await callCommand(client, ['zadd', 'zAdd'], key, { score, member });
73
- };
74
- const removeScore = async (client, key, member) => {
75
- await callCommand(client, ['zrem', 'zRem'], key, member);
76
- };
77
- const rangeByScore = async (client, key, min, max) => {
78
- return (await callCommand(client, ['zrangebyscore', 'zRangeByScore'], key, min, max)) ?? [];
79
- };
80
- const removeByScore = async (client, key, min, max) => {
81
- await callCommand(client, ['zremrangebyscore', 'zRemRangeByScore'], key, min, max);
82
- };
83
- const getMulti = async (client, keys) => {
84
- if (keys.length === 0)
85
- return [];
86
- if (typeof client.mGet === 'function') {
87
- const result = (await client.mGet(keys));
88
- return result ?? [];
89
- }
90
- if (typeof client.mget === 'function') {
91
- const result = (await client.mget(...keys));
92
- return result ?? [];
93
- }
94
- const values = [];
95
- for (const key of keys) {
96
- const value = (await callCommand(client, ['get'], key)) ?? null;
97
- values.push(value);
98
- }
99
- return values;
100
- };
101
31
  export class RedisSessionStore {
102
32
  client;
103
33
  prefix;
@@ -1 +1 @@
1
- {"version":3,"file":"RedisSessionStore.js","sourceRoot":"","sources":["../src/RedisSessionStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RedisSessionStore.js","sourceRoot":"","sources":["../src/RedisSessionStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { VectorStore, VectorEntry, VectorQueryParams, VectorQueryResult, CreateIndexParams, IndexStats, VectorFilter } from '@ariaflowagents/rag';
2
+ import type { RedisClientLike } from './RedisSessionStore.js';
3
+ export type RedisVectorStoreOptions = {
4
+ /** Redis client (node-redis, ioredis, or Upstash). Must have Redis Search module. */
5
+ client: RedisClientLike;
6
+ /** Key prefix. Default: 'ariaflow:vector'. */
7
+ prefix?: string;
8
+ };
9
+ /**
10
+ * VectorStore implementation backed by Redis with Redis Search module.
11
+ *
12
+ * Key layout:
13
+ * {prefix}:{indexName}:{id} -- Hash with vector, metadata, document
14
+ *
15
+ * Uses FT.CREATE for index creation and FT.SEARCH with KNN for queries.
16
+ *
17
+ * Requires: Redis 7+ with Redis Search module, or Redis Stack.
18
+ */
19
+ export declare class RedisVectorStore implements VectorStore {
20
+ private readonly client;
21
+ private readonly prefix;
22
+ constructor(options: RedisVectorStoreOptions);
23
+ private keyPrefix;
24
+ private hashKey;
25
+ private ftIndexName;
26
+ private registryKey;
27
+ createIndex(params: CreateIndexParams): Promise<void>;
28
+ upsert(indexName: string, entries: VectorEntry[]): Promise<void>;
29
+ query(indexName: string, params: VectorQueryParams): Promise<VectorQueryResult[]>;
30
+ listIndexes(): Promise<string[]>;
31
+ deleteIndex(indexName: string): Promise<void>;
32
+ deleteVectors(indexName: string, params: {
33
+ ids?: string[];
34
+ filter?: VectorFilter;
35
+ }): Promise<void>;
36
+ describeIndex(indexName: string): Promise<IndexStats>;
37
+ private rawCommand;
38
+ private hset;
39
+ private hgetall;
40
+ private hget;
41
+ }
42
+ //# sourceMappingURL=RedisVectorStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RedisVectorStore.d.ts","sourceRoot":"","sources":["../src/RedisVectorStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,EACV,YAAY,EACb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG9D,MAAM,MAAM,uBAAuB,GAAG;IACpC,qFAAqF;IACrF,MAAM,EAAE,eAAe,CAAC;IACxB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAwBF;;;;;;;;;GASG;AACH,qBAAa,gBAAiB,YAAW,WAAW;IAClD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,OAAO,EAAE,uBAAuB;IAK5C,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,WAAW;IAIb,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCrD,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BhE,KAAK,CACT,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,iBAAiB,EAAE,CAAC;IA4BzB,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAkBhC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAe7C,aAAa,CACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,YAAY,CAAA;KAAE,GAChD,OAAO,CAAC,IAAI,CAAC;IAuBV,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;YAyB7C,UAAU;YA2BV,IAAI;YAIJ,OAAO;YAIP,IAAI;CAOnB"}
@@ -0,0 +1,308 @@
1
+ import { callCommand } from './redisHelpers.js';
2
+ const DEFAULT_PREFIX = 'ariaflow:vector';
3
+ /**
4
+ * VectorStore implementation backed by Redis with Redis Search module.
5
+ *
6
+ * Key layout:
7
+ * {prefix}:{indexName}:{id} -- Hash with vector, metadata, document
8
+ *
9
+ * Uses FT.CREATE for index creation and FT.SEARCH with KNN for queries.
10
+ *
11
+ * Requires: Redis 7+ with Redis Search module, or Redis Stack.
12
+ */
13
+ export class RedisVectorStore {
14
+ client;
15
+ prefix;
16
+ constructor(options) {
17
+ this.client = options.client;
18
+ this.prefix = options.prefix ?? DEFAULT_PREFIX;
19
+ }
20
+ keyPrefix(indexName) {
21
+ return `${this.prefix}:${indexName}`;
22
+ }
23
+ hashKey(indexName, id) {
24
+ return `${this.keyPrefix(indexName)}:${id}`;
25
+ }
26
+ ftIndexName(indexName) {
27
+ return `${this.prefix}:${indexName}:idx`;
28
+ }
29
+ registryKey() {
30
+ return `${this.prefix}:_registry`;
31
+ }
32
+ async createIndex(params) {
33
+ const ftIdx = this.ftIndexName(params.indexName);
34
+ const keyPfx = `${this.keyPrefix(params.indexName)}:`;
35
+ const metric = (params.metric ?? 'cosine').toUpperCase();
36
+ const dim = params.dimension;
37
+ // Try to create the FT index
38
+ const ftArgs = [
39
+ ftIdx,
40
+ 'ON', 'HASH',
41
+ 'PREFIX', '1', keyPfx,
42
+ 'SCHEMA',
43
+ 'vector', 'VECTOR', 'HNSW', '6',
44
+ 'TYPE', 'FLOAT32',
45
+ 'DIM', String(dim),
46
+ 'DISTANCE_METRIC', metric,
47
+ 'document', 'TEXT',
48
+ 'metadata', 'TEXT',
49
+ ];
50
+ try {
51
+ await this.rawCommand('FT.CREATE', ...ftArgs);
52
+ }
53
+ catch (e) {
54
+ // Index already exists -- idempotent
55
+ if (e?.message?.includes('Index already exists'))
56
+ return;
57
+ throw e;
58
+ }
59
+ // Store index metadata in registry
60
+ await this.hset(this.registryKey(), params.indexName, JSON.stringify({
61
+ dimension: dim,
62
+ metric: params.metric ?? 'cosine',
63
+ }));
64
+ }
65
+ async upsert(indexName, entries) {
66
+ for (const entry of entries) {
67
+ const key = this.hashKey(indexName, entry.id);
68
+ const vectorBuf = float32ArrayToBuffer(entry.vector);
69
+ const metadataStr = entry.metadata ? JSON.stringify(entry.metadata) : '{}';
70
+ const documentStr = entry.document ?? '';
71
+ // node-redis hSet accepts object with Buffer/string values
72
+ if (typeof this.client.hSet === 'function') {
73
+ await this.client.hSet(key, {
74
+ vector: vectorBuf,
75
+ metadata: metadataStr,
76
+ document: documentStr,
77
+ id: entry.id,
78
+ });
79
+ }
80
+ else if (typeof this.client.hset === 'function') {
81
+ // ioredis: hset(key, field, val, field, val, ...)
82
+ await this.client.hset(key, 'id', entry.id, 'metadata', metadataStr, 'document', documentStr, 'vector', vectorBuf);
83
+ }
84
+ else {
85
+ throw new Error('Redis client missing hset/hSet command');
86
+ }
87
+ }
88
+ }
89
+ async query(indexName, params) {
90
+ const ftIdx = this.ftIndexName(indexName);
91
+ const topK = params.topK ?? 10;
92
+ const vectorBuf = float32ArrayToBuffer(params.queryVector);
93
+ // Build filter query
94
+ const filterExpr = params.filter ? buildRedisFilter(params.filter) : '*';
95
+ // FT.SEARCH idx "(@filter_expr)=>[KNN topK @vector $BLOB AS dist]" PARAMS 2 BLOB <bytes> DIALECT 2
96
+ const searchQuery = `(${filterExpr})=>[KNN ${topK} @vector $BLOB AS dist]`;
97
+ const returnFields = ['id', 'dist', 'metadata'];
98
+ if (params.includeDocuments !== false)
99
+ returnFields.push('document');
100
+ const ftArgs = [
101
+ ftIdx,
102
+ searchQuery,
103
+ 'PARAMS', '2', 'BLOB', vectorBuf,
104
+ 'RETURN', String(returnFields.length), ...returnFields,
105
+ 'SORTBY', 'dist',
106
+ 'LIMIT', '0', String(topK),
107
+ 'DIALECT', '2',
108
+ ];
109
+ const result = await this.rawCommand('FT.SEARCH', ...ftArgs);
110
+ return parseSearchResult(result, params.includeVectors);
111
+ }
112
+ async listIndexes() {
113
+ try {
114
+ const data = await this.hgetall(this.registryKey());
115
+ if (!data)
116
+ return [];
117
+ if (typeof data === 'object' && !Array.isArray(data)) {
118
+ return Object.keys(data);
119
+ }
120
+ // Array format from some clients: [key, val, key, val, ...]
121
+ const keys = [];
122
+ for (let i = 0; i < data.length; i += 2) {
123
+ keys.push(String(data[i]));
124
+ }
125
+ return keys;
126
+ }
127
+ catch {
128
+ return [];
129
+ }
130
+ }
131
+ async deleteIndex(indexName) {
132
+ const ftIdx = this.ftIndexName(indexName);
133
+ try {
134
+ // DD flag deletes all associated hash keys
135
+ await this.rawCommand('FT.DROPINDEX', ftIdx, 'DD');
136
+ }
137
+ catch {
138
+ // Index might not exist
139
+ }
140
+ try {
141
+ await this.rawCommand('HDEL', this.registryKey(), indexName);
142
+ }
143
+ catch {
144
+ // Registry might not exist
145
+ }
146
+ }
147
+ async deleteVectors(indexName, params) {
148
+ if (params.ids?.length) {
149
+ for (const id of params.ids) {
150
+ const key = this.hashKey(indexName, id);
151
+ await callCommand(this.client, ['del'], key);
152
+ }
153
+ }
154
+ if (params.filter) {
155
+ // Query matching vectors then delete them
156
+ const results = await this.query(indexName, {
157
+ queryVector: [], // dummy -- we filter by metadata only
158
+ topK: 10000,
159
+ filter: params.filter,
160
+ }).catch(() => []);
161
+ for (const r of results) {
162
+ const key = this.hashKey(indexName, r.id);
163
+ await callCommand(this.client, ['del'], key);
164
+ }
165
+ }
166
+ }
167
+ async describeIndex(indexName) {
168
+ const regData = await this.hget(this.registryKey(), indexName);
169
+ const meta = regData ? JSON.parse(regData) : { dimension: 0, metric: 'cosine' };
170
+ let count = 0;
171
+ try {
172
+ const info = await this.rawCommand('FT.INFO', this.ftIndexName(indexName));
173
+ // FT.INFO returns flat array: [..., 'num_docs', count, ...]
174
+ if (Array.isArray(info)) {
175
+ const idx = info.indexOf('num_docs');
176
+ if (idx >= 0)
177
+ count = parseInt(String(info[idx + 1]));
178
+ }
179
+ }
180
+ catch {
181
+ // Index might not exist
182
+ }
183
+ return {
184
+ dimension: meta.dimension,
185
+ count,
186
+ metric: meta.metric,
187
+ };
188
+ }
189
+ // -- Redis command helpers --
190
+ async rawCommand(cmd, ...args) {
191
+ // Try node-redis sendCommand
192
+ if (typeof this.client.sendCommand === 'function') {
193
+ return this.client.sendCommand([cmd, ...args.map(a => Buffer.isBuffer(a) ? a : String(a))]);
194
+ }
195
+ // Try ioredis call
196
+ if (typeof this.client.call === 'function') {
197
+ return this.client.call(cmd, ...args);
198
+ }
199
+ // Try ft sub-object (node-redis v4+)
200
+ if (cmd === 'FT.CREATE' && this.client.ft?.create) {
201
+ return this.client.ft.create(...args);
202
+ }
203
+ if (cmd === 'FT.SEARCH' && this.client.ft?.search) {
204
+ return this.client.ft.search(...args);
205
+ }
206
+ if (cmd === 'FT.DROPINDEX' && this.client.ft?.dropIndex) {
207
+ return this.client.ft.dropIndex(...args);
208
+ }
209
+ if (cmd === 'FT.INFO' && this.client.ft?.info) {
210
+ return this.client.ft.info(...args);
211
+ }
212
+ throw new Error(`Redis client does not support raw command execution. Cannot run ${cmd}.`);
213
+ }
214
+ async hset(key, field, value) {
215
+ await callCommand(this.client, ['hset', 'hSet'], key, field, value);
216
+ }
217
+ async hgetall(key) {
218
+ return callCommand(this.client, ['hgetall', 'hGetAll'], key);
219
+ }
220
+ async hget(key, field) {
221
+ try {
222
+ return await callCommand(this.client, ['hget', 'hGet'], key, field);
223
+ }
224
+ catch {
225
+ return null;
226
+ }
227
+ }
228
+ }
229
+ // -- Helpers --
230
+ function float32ArrayToBuffer(vector) {
231
+ const buf = Buffer.alloc(vector.length * 4);
232
+ for (let i = 0; i < vector.length; i++) {
233
+ buf.writeFloatLE(vector[i], i * 4);
234
+ }
235
+ return buf;
236
+ }
237
+ function parseSearchResult(result, includeVectors) {
238
+ if (!result || !Array.isArray(result))
239
+ return [];
240
+ // FT.SEARCH returns: [totalCount, key1, [field, val, ...], key2, [field, val, ...], ...]
241
+ const totalCount = typeof result[0] === 'number' ? result[0] : parseInt(String(result[0]));
242
+ if (totalCount === 0)
243
+ return [];
244
+ const results = [];
245
+ for (let i = 1; i < result.length; i += 2) {
246
+ const fields = result[i + 1];
247
+ if (!Array.isArray(fields))
248
+ continue;
249
+ const fieldMap = {};
250
+ for (let j = 0; j < fields.length; j += 2) {
251
+ fieldMap[String(fields[j])] = String(fields[j + 1]);
252
+ }
253
+ const dist = fieldMap.dist ? parseFloat(fieldMap.dist) : 0;
254
+ let metadata;
255
+ try {
256
+ metadata = fieldMap.metadata ? JSON.parse(fieldMap.metadata) : undefined;
257
+ }
258
+ catch {
259
+ metadata = undefined;
260
+ }
261
+ results.push({
262
+ id: fieldMap.id ?? String(result[i]).split(':').pop() ?? '',
263
+ score: 1 - dist, // Redis returns distance, we need similarity
264
+ metadata,
265
+ document: fieldMap.document || undefined,
266
+ vector: undefined, // Redis doesn't return vectors in FT.SEARCH by default
267
+ });
268
+ }
269
+ return results;
270
+ }
271
+ // -- Filter translation: VectorFilter -> Redis Search filter syntax --
272
+ function buildRedisFilter(filter) {
273
+ if ('$and' in filter) {
274
+ const clauses = filter.$and.map(buildRedisFilter);
275
+ return clauses.join(' ');
276
+ }
277
+ if ('$or' in filter) {
278
+ const clauses = filter.$or.map(buildRedisFilter);
279
+ return `(${clauses.join(' | ')})`;
280
+ }
281
+ if ('$not' in filter) {
282
+ const clause = buildRedisFilter(filter.$not);
283
+ return `-${clause}`;
284
+ }
285
+ // Field-level conditions: use TAG filter on metadata JSON
286
+ // Redis Search treats TEXT fields as full-text; for exact match we use the metadata field
287
+ const conditions = [];
288
+ for (const [field, condition] of Object.entries(filter)) {
289
+ if (typeof condition === 'object' && condition !== null && !Array.isArray(condition)) {
290
+ const ops = condition;
291
+ if ('$eq' in ops) {
292
+ conditions.push(`@metadata:(${escapeRedis(String(ops.$eq))})`);
293
+ }
294
+ if ('$in' in ops) {
295
+ const vals = ops.$in.map(v => escapeRedis(String(v)));
296
+ conditions.push(`@metadata:(${vals.join('|')})`);
297
+ }
298
+ }
299
+ else if (condition !== null && condition !== undefined) {
300
+ conditions.push(`@metadata:(${escapeRedis(String(condition))})`);
301
+ }
302
+ }
303
+ return conditions.length > 0 ? conditions.join(' ') : '*';
304
+ }
305
+ function escapeRedis(value) {
306
+ return value.replace(/[,.<>{}[\]"':;!@#$%^&*()+=~|/\\-]/g, '\\$&');
307
+ }
308
+ //# sourceMappingURL=RedisVectorStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RedisVectorStore.js","sourceRoot":"","sources":["../src/RedisVectorStore.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,9 @@
1
1
  export { RedisSessionStore } from './RedisSessionStore.js';
2
2
  export type { RedisClientLike, RedisStoreOptions } from './RedisSessionStore.js';
3
+ export { RedisMemoryService } from './RedisMemoryService.js';
4
+ export type { RedisMemoryStoreOptions } from './RedisMemoryService.js';
3
5
  export { fromUpstash, fromNodeRedis, fromIORedis } from './adapters.js';
4
6
  export type { RedisAdapterOptions } from './adapters.js';
7
+ export { RedisVectorStore } from './RedisVectorStore.js';
8
+ export type { RedisVectorStoreOptions } from './RedisVectorStore.js';
5
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACxE,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACxE,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,5 @@
1
1
  export { RedisSessionStore } from './RedisSessionStore.js';
2
+ export { RedisMemoryService } from './RedisMemoryService.js';
2
3
  export { fromUpstash, fromNodeRedis, fromIORedis } from './adapters.js';
4
+ export { RedisVectorStore } from './RedisVectorStore.js';
3
5
  //# 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,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAExE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { RedisClientLike } from './RedisSessionStore.js';
2
+ export declare const callCommand: <T>(client: RedisClientLike, names: Array<keyof RedisClientLike>, ...args: any[]) => Promise<T>;
3
+ export declare const getMembers: (client: RedisClientLike, key: string) => Promise<string[]>;
4
+ export declare const addMembers: (client: RedisClientLike, key: string, ...members: string[]) => Promise<void>;
5
+ export declare const removeMembers: (client: RedisClientLike, key: string, ...members: string[]) => Promise<void>;
6
+ export declare const setExpiration: (client: RedisClientLike, key: string, ttlSeconds?: number) => Promise<void>;
7
+ export declare const setScore: (client: RedisClientLike, key: string, score: number, member: string) => Promise<void>;
8
+ export declare const removeScore: (client: RedisClientLike, key: string, member: string) => Promise<void>;
9
+ export declare const rangeByScore: (client: RedisClientLike, key: string, min: number, max: number) => Promise<string[]>;
10
+ export declare const removeByScore: (client: RedisClientLike, key: string, min: number, max: number) => Promise<void>;
11
+ export declare const getMulti: (client: RedisClientLike, keys: string[]) => Promise<Array<string | null>>;
12
+ //# sourceMappingURL=redisHelpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redisHelpers.d.ts","sourceRoot":"","sources":["../src/redisHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,eAAO,MAAM,WAAW,GAAU,CAAC,EACjC,QAAQ,eAAe,EACvB,OAAO,KAAK,CAAC,MAAM,eAAe,CAAC,EACnC,GAAG,MAAM,GAAG,EAAE,KACb,OAAO,CAAC,CAAC,CAQX,CAAC;AAEF,eAAO,MAAM,UAAU,GAAU,QAAQ,eAAe,EAAE,KAAK,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,CAEvF,CAAC;AAEF,eAAO,MAAM,UAAU,GAAU,QAAQ,eAAe,EAAE,KAAK,MAAM,EAAE,GAAG,SAAS,MAAM,EAAE,KAAG,OAAO,CAAC,IAAI,CAGzG,CAAC;AAEF,eAAO,MAAM,aAAa,GAAU,QAAQ,eAAe,EAAE,KAAK,MAAM,EAAE,GAAG,SAAS,MAAM,EAAE,KAAG,OAAO,CAAC,IAAI,CAG5G,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,QAAQ,eAAe,EACvB,KAAK,MAAM,EACX,aAAa,MAAM,KAClB,OAAO,CAAC,IAAI,CAGd,CAAC;AAEF,eAAO,MAAM,QAAQ,GACnB,QAAQ,eAAe,EACvB,KAAK,MAAM,EACX,OAAO,MAAM,EACb,QAAQ,MAAM,KACb,OAAO,CAAC,IAAI,CAiBd,CAAC;AAEF,eAAO,MAAM,WAAW,GAAU,QAAQ,eAAe,EAAE,KAAK,MAAM,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CAEpG,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,QAAQ,eAAe,EACvB,KAAK,MAAM,EACX,KAAK,MAAM,EACX,KAAK,MAAM,KACV,OAAO,CAAC,MAAM,EAAE,CAQlB,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,QAAQ,eAAe,EACvB,KAAK,MAAM,EACX,KAAK,MAAM,EACX,KAAK,MAAM,KACV,OAAO,CAAC,IAAI,CAEd,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAU,QAAQ,eAAe,EAAE,MAAM,MAAM,EAAE,KAAG,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAmBpG,CAAC"}
@@ -0,0 +1,72 @@
1
+ export const callCommand = async (client, names, ...args) => {
2
+ for (const name of names) {
3
+ const fn = client[name];
4
+ if (typeof fn === 'function') {
5
+ return (await fn.call(client, ...args));
6
+ }
7
+ }
8
+ throw new Error(`Redis client missing command: ${names.join(', ')}`);
9
+ };
10
+ export const getMembers = async (client, key) => {
11
+ return (await callCommand(client, ['smembers', 'sMembers'], key)) ?? [];
12
+ };
13
+ export const addMembers = async (client, key, ...members) => {
14
+ if (members.length === 0)
15
+ return;
16
+ await callCommand(client, ['sadd', 'sAdd'], key, ...members);
17
+ };
18
+ export const removeMembers = async (client, key, ...members) => {
19
+ if (members.length === 0)
20
+ return;
21
+ await callCommand(client, ['srem', 'sRem'], key, ...members);
22
+ };
23
+ export const setExpiration = async (client, key, ttlSeconds) => {
24
+ if (!ttlSeconds)
25
+ return;
26
+ await callCommand(client, ['expire'], key, ttlSeconds);
27
+ };
28
+ export const setScore = async (client, key, score, member) => {
29
+ if (typeof client.zAdd === 'function') {
30
+ await client.zAdd(key, [{ score, value: member }]);
31
+ return;
32
+ }
33
+ if (typeof client.zadd === 'function') {
34
+ try {
35
+ await client.zadd(key, { score, member });
36
+ return;
37
+ }
38
+ catch {
39
+ await client.zadd(key, score, member);
40
+ return;
41
+ }
42
+ }
43
+ await callCommand(client, ['zadd', 'zAdd'], key, { score, member });
44
+ };
45
+ export const removeScore = async (client, key, member) => {
46
+ await callCommand(client, ['zrem', 'zRem'], key, member);
47
+ };
48
+ export const rangeByScore = async (client, key, min, max) => {
49
+ return (await callCommand(client, ['zrangebyscore', 'zRangeByScore'], key, min, max)) ?? [];
50
+ };
51
+ export const removeByScore = async (client, key, min, max) => {
52
+ await callCommand(client, ['zremrangebyscore', 'zRemRangeByScore'], key, min, max);
53
+ };
54
+ export const getMulti = async (client, keys) => {
55
+ if (keys.length === 0)
56
+ return [];
57
+ if (typeof client.mGet === 'function') {
58
+ const result = (await client.mGet(keys));
59
+ return result ?? [];
60
+ }
61
+ if (typeof client.mget === 'function') {
62
+ const result = (await client.mget(...keys));
63
+ return result ?? [];
64
+ }
65
+ const values = [];
66
+ for (const key of keys) {
67
+ const value = (await callCommand(client, ['get'], key)) ?? null;
68
+ values.push(value);
69
+ }
70
+ return values;
71
+ };
72
+ //# sourceMappingURL=redisHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redisHelpers.js","sourceRoot":"","sources":["../src/redisHelpers.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ariaflowagents/redis-store",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "description": "Redis-backed SessionStore for AriaFlow (supports Upstash and common Redis clients)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -12,14 +12,16 @@
12
12
  }
13
13
  },
14
14
  "dependencies": {
15
- "@ariaflowagents/core": "^0.7.0"
15
+ "@ariaflowagents/core": "^0.8.0"
16
16
  },
17
17
  "peerDependencies": {
18
- "@ariaflowagents/core": "^0.7.0"
18
+ "@ariaflowagents/core": "^0.8.0",
19
+ "@ariaflowagents/rag": "^0.8.0"
19
20
  },
20
21
  "devDependencies": {
21
22
  "@ai-sdk/openai": "^3.0.0",
22
- "@ariaflowagents/core": "^0.7.0",
23
+ "@ariaflowagents/core": "workspace:*",
24
+ "@ariaflowagents/rag": "workspace:*",
23
25
  "@types/node": "^20.11.0",
24
26
  "ai": "^6.0.0",
25
27
  "dotenv": "^16.4.0",