@agentuity/runtime 0.0.106 → 0.0.108

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.
@@ -30,41 +30,122 @@ export class LocalThreadProvider {
30
30
  }
31
31
  const threadId = await this.threadIDProvider.getThreadId(this.appState, ctx);
32
32
  validateThreadIdOrThrow(threadId);
33
- // Try to restore state from DB
34
- const row = this.db
35
- .query('SELECT state FROM threads WHERE id = ?')
36
- .get(threadId);
37
- // Parse the stored data, handling both old (flat) and new ({ state, metadata }) formats
38
- const { flatStateJson, metadata } = parseThreadData(row?.state);
39
- // Create thread with restored state and metadata
40
- const thread = new DefaultThread(this, threadId, flatStateJson, metadata);
41
- // Populate thread state from restored data
42
- if (flatStateJson) {
43
- try {
44
- const data = JSON.parse(flatStateJson);
45
- for (const [key, value] of Object.entries(data)) {
46
- thread.state.set(key, value);
47
- }
33
+ // Create a restore function for lazy loading
34
+ const restoreFn = async () => {
35
+ if (!this.db) {
36
+ return { state: new Map(), metadata: {} };
48
37
  }
49
- catch {
50
- // Continue with empty state if parsing fails
38
+ const row = this.db
39
+ .query('SELECT state FROM threads WHERE id = ?')
40
+ .get(threadId);
41
+ const { flatStateJson, metadata } = parseThreadData(row?.state);
42
+ const state = new Map();
43
+ if (flatStateJson) {
44
+ try {
45
+ const data = JSON.parse(flatStateJson);
46
+ for (const [key, value] of Object.entries(data)) {
47
+ state.set(key, value);
48
+ }
49
+ }
50
+ catch {
51
+ // Continue with empty state if parsing fails
52
+ }
51
53
  }
52
- }
53
- return thread;
54
+ return { state, metadata: metadata || {} };
55
+ };
56
+ return new DefaultThread(this, threadId, restoreFn);
54
57
  }
55
58
  async save(thread) {
56
59
  if (!this.db || !(thread instanceof DefaultThread)) {
57
60
  return;
58
61
  }
59
- // Only save if state was modified
60
- if (!thread.isDirty()) {
62
+ const saveMode = thread.getSaveMode();
63
+ if (saveMode === 'none') {
61
64
  return;
62
65
  }
63
- const stateJson = thread.getSerializedState();
64
66
  const now = Date.now();
65
- // Upsert thread state
66
- this.db.run(`INSERT INTO threads (id, state, updated_at) VALUES (?, ?, ?)
67
- ON CONFLICT(id) DO UPDATE SET state = ?, updated_at = ?`, [thread.id, stateJson, now, stateJson, now]);
67
+ if (saveMode === 'merge') {
68
+ // For merge, we need to load existing state, apply operations, then save
69
+ const operations = thread.getPendingOperations();
70
+ const metadata = thread.getMetadataForSave();
71
+ // Load existing state
72
+ const row = this.db
73
+ .query('SELECT state FROM threads WHERE id = ?')
74
+ .get(thread.id);
75
+ const { flatStateJson, metadata: existingMetadata } = parseThreadData(row?.state);
76
+ const state = {};
77
+ if (flatStateJson) {
78
+ try {
79
+ Object.assign(state, JSON.parse(flatStateJson));
80
+ }
81
+ catch {
82
+ // Continue with empty state if parsing fails
83
+ }
84
+ }
85
+ // Apply operations
86
+ for (const op of operations) {
87
+ switch (op.op) {
88
+ case 'clear':
89
+ for (const key of Object.keys(state)) {
90
+ delete state[key];
91
+ }
92
+ break;
93
+ case 'set':
94
+ if (op.key !== undefined) {
95
+ state[op.key] = op.value;
96
+ }
97
+ break;
98
+ case 'delete':
99
+ if (op.key !== undefined) {
100
+ delete state[op.key];
101
+ }
102
+ break;
103
+ case 'push':
104
+ if (op.key !== undefined) {
105
+ const existing = state[op.key];
106
+ let arr;
107
+ if (Array.isArray(existing)) {
108
+ existing.push(op.value);
109
+ arr = existing;
110
+ }
111
+ else if (existing === undefined) {
112
+ arr = [op.value];
113
+ state[op.key] = arr;
114
+ }
115
+ else {
116
+ // If non-array, silently skip
117
+ continue;
118
+ }
119
+ // Apply maxRecords limit
120
+ if (op.maxRecords !== undefined && arr.length > op.maxRecords) {
121
+ state[op.key] = arr.slice(arr.length - op.maxRecords);
122
+ }
123
+ }
124
+ break;
125
+ }
126
+ }
127
+ // Build final data
128
+ const finalMetadata = metadata || existingMetadata || {};
129
+ const hasState = Object.keys(state).length > 0;
130
+ const hasMetadata = Object.keys(finalMetadata).length > 0;
131
+ let stateJson = '';
132
+ if (hasState || hasMetadata) {
133
+ const data = {};
134
+ if (hasState)
135
+ data.state = state;
136
+ if (hasMetadata)
137
+ data.metadata = finalMetadata;
138
+ stateJson = JSON.stringify(data);
139
+ }
140
+ this.db.run(`INSERT INTO threads (id, state, updated_at) VALUES (?, ?, ?)
141
+ ON CONFLICT(id) DO UPDATE SET state = ?, updated_at = ?`, [thread.id, stateJson, now, stateJson, now]);
142
+ }
143
+ else {
144
+ // Full save
145
+ const stateJson = await thread.getSerializedState();
146
+ this.db.run(`INSERT INTO threads (id, state, updated_at) VALUES (?, ?, ?)
147
+ ON CONFLICT(id) DO UPDATE SET state = ?, updated_at = ?`, [thread.id, stateJson, now, stateJson, now]);
148
+ }
68
149
  }
69
150
  async destroy(thread) {
70
151
  if (!this.db) {
@@ -1 +1 @@
1
- {"version":3,"file":"local.js","sourceRoot":"","sources":["../../../src/services/thread/local.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local.js","sourceRoot":"","sources":["../../../src/services/thread/local.ts"],"names":[],"mappings":"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"}
package/dist/session.d.ts CHANGED
@@ -17,6 +17,114 @@ export interface ParsedThreadData {
17
17
  export declare function parseThreadData(raw: string | undefined): ParsedThreadData;
18
18
  export type ThreadEventName = 'destroyed';
19
19
  export type SessionEventName = 'completed';
20
+ /**
21
+ * Represents a merge operation for thread state.
22
+ * Used when state is modified without being loaded first.
23
+ */
24
+ export interface MergeOperation {
25
+ op: 'set' | 'delete' | 'clear' | 'push';
26
+ key?: string;
27
+ value?: unknown;
28
+ maxRecords?: number;
29
+ }
30
+ /**
31
+ * Async thread state storage with lazy loading.
32
+ *
33
+ * State is only fetched from storage when first accessed via a read operation.
34
+ * Write operations can be batched and sent as a merge command without loading.
35
+ *
36
+ * @example
37
+ * ```typescript
38
+ * // Read triggers lazy load
39
+ * const count = await ctx.thread.state.get<number>('messageCount');
40
+ *
41
+ * // Write queues operation (may not trigger load)
42
+ * await ctx.thread.state.set('messageCount', (count ?? 0) + 1);
43
+ *
44
+ * // Check state status
45
+ * if (ctx.thread.state.dirty) {
46
+ * console.log('State has pending changes');
47
+ * }
48
+ * ```
49
+ */
50
+ export interface ThreadState {
51
+ /**
52
+ * Whether state has been loaded from storage.
53
+ * True when state has been fetched via a read operation.
54
+ */
55
+ readonly loaded: boolean;
56
+ /**
57
+ * Whether state has pending changes.
58
+ * True when there are queued writes (pending-writes state) or
59
+ * modifications after loading (loaded state with changes).
60
+ */
61
+ readonly dirty: boolean;
62
+ /**
63
+ * Get a value from thread state.
64
+ * Triggers lazy load if state hasn't been fetched yet.
65
+ */
66
+ get<T = unknown>(key: string): Promise<T | undefined>;
67
+ /**
68
+ * Set a value in thread state.
69
+ * If state hasn't been loaded, queues the operation for merge.
70
+ */
71
+ set<T = unknown>(key: string, value: T): Promise<void>;
72
+ /**
73
+ * Check if a key exists in thread state.
74
+ * Triggers lazy load if state hasn't been fetched yet.
75
+ */
76
+ has(key: string): Promise<boolean>;
77
+ /**
78
+ * Delete a key from thread state.
79
+ * If state hasn't been loaded, queues the operation for merge.
80
+ */
81
+ delete(key: string): Promise<void>;
82
+ /**
83
+ * Clear all thread state.
84
+ * If state hasn't been loaded, queues a clear operation for merge.
85
+ */
86
+ clear(): Promise<void>;
87
+ /**
88
+ * Get all entries as key-value pairs.
89
+ * Triggers lazy load if state hasn't been fetched yet.
90
+ */
91
+ entries<T = unknown>(): Promise<[string, T][]>;
92
+ /**
93
+ * Get all keys.
94
+ * Triggers lazy load if state hasn't been fetched yet.
95
+ */
96
+ keys(): Promise<string[]>;
97
+ /**
98
+ * Get all values.
99
+ * Triggers lazy load if state hasn't been fetched yet.
100
+ */
101
+ values<T = unknown>(): Promise<T[]>;
102
+ /**
103
+ * Get the number of entries in state.
104
+ * Triggers lazy load if state hasn't been fetched yet.
105
+ */
106
+ size(): Promise<number>;
107
+ /**
108
+ * Push a value to an array in thread state.
109
+ * If the key doesn't exist, creates a new array with the value.
110
+ * If state hasn't been loaded, queues the operation for efficient merge.
111
+ *
112
+ * @param key - The key of the array to push to
113
+ * @param value - The value to push
114
+ * @param maxRecords - Optional maximum number of records to keep (sliding window)
115
+ *
116
+ * @example
117
+ * ```typescript
118
+ * // Efficiently append messages without loading entire array
119
+ * await ctx.thread.state.push('messages', { role: 'user', content: 'Hello' });
120
+ * await ctx.thread.state.push('messages', { role: 'assistant', content: 'Hi!' });
121
+ *
122
+ * // Keep only the last 100 messages
123
+ * await ctx.thread.state.push('messages', newMessage, 100);
124
+ * ```
125
+ */
126
+ push<T = unknown>(key: string, value: T, maxRecords?: number): Promise<void>;
127
+ }
20
128
  type ThreadEventCallback<T extends Thread> = (eventName: 'destroyed', thread: T) => Promise<void> | void;
21
129
  type SessionEventCallback<T extends Session> = (eventName: 'completed', session: T) => Promise<void> | void;
22
130
  /**
@@ -35,9 +143,12 @@ type SessionEventCallback<T extends Session> = (eventName: 'completed', session:
35
143
  * ctx.logger.info('Thread: %s', ctx.thread.id);
36
144
  *
37
145
  * // Store data in thread state (persists across sessions)
38
- * ctx.thread.state.set('conversationCount',
39
- * (ctx.thread.state.get('conversationCount') as number || 0) + 1
40
- * );
146
+ * const count = await ctx.thread.state.get<number>('conversationCount') ?? 0;
147
+ * await ctx.thread.state.set('conversationCount', count + 1);
148
+ *
149
+ * // Access metadata
150
+ * const meta = await ctx.thread.getMetadata();
151
+ * await ctx.thread.setMetadata({ ...meta, lastAccess: Date.now() });
41
152
  *
42
153
  * // Listen for thread destruction
43
154
  * ctx.thread.addEventListener('destroyed', (eventName, thread) => {
@@ -56,30 +167,38 @@ export interface Thread {
56
167
  */
57
168
  id: string;
58
169
  /**
59
- * Thread-scoped state storage that persists across multiple sessions.
60
- * Use this to maintain conversation history or user preferences.
170
+ * Thread-scoped state storage with async lazy-loading.
171
+ * State is only fetched from storage when first accessed via a read operation.
61
172
  *
62
173
  * @example
63
174
  * ```typescript
64
- * // Store conversation count
65
- * ctx.thread.state.set('messageCount',
66
- * (ctx.thread.state.get('messageCount') as number || 0) + 1
67
- * );
175
+ * // Read triggers lazy load
176
+ * const count = await ctx.thread.state.get<number>('messageCount');
177
+ * // Write may queue operation without loading
178
+ * await ctx.thread.state.set('messageCount', (count ?? 0) + 1);
68
179
  * ```
69
180
  */
70
- state: Map<string, unknown>;
181
+ state: ThreadState;
71
182
  /**
72
- * Unencrypted metadata for filtering and querying threads.
73
- * Unlike state, metadata is stored as-is in the database with GIN indexes
74
- * for efficient filtering. Initialized to empty object, only persisted if non-empty.
183
+ * Get thread metadata (lazy-loaded).
184
+ * Unlike state, metadata is stored unencrypted for efficient filtering.
75
185
  *
76
186
  * @example
77
187
  * ```typescript
78
- * ctx.thread.metadata.userId = 'user123';
79
- * ctx.thread.metadata.department = 'sales';
188
+ * const meta = await ctx.thread.getMetadata();
189
+ * console.log(meta.userId);
80
190
  * ```
81
191
  */
82
- metadata: Record<string, unknown>;
192
+ getMetadata(): Promise<Record<string, unknown>>;
193
+ /**
194
+ * Set thread metadata (full replace).
195
+ *
196
+ * @example
197
+ * ```typescript
198
+ * await ctx.thread.setMetadata({ userId: 'user123', department: 'sales' });
199
+ * ```
200
+ */
201
+ setMetadata(metadata: Record<string, unknown>): Promise<void>;
83
202
  /**
84
203
  * Register an event listener for when the thread is destroyed.
85
204
  * Thread is destroyed when it expires or is manually destroyed.
@@ -116,15 +235,16 @@ export interface Thread {
116
235
  /**
117
236
  * Check if the thread has any data.
118
237
  * Returns true if thread state is empty (no data to save).
238
+ * This is async because it may need to check lazy-loaded state.
119
239
  *
120
240
  * @example
121
241
  * ```typescript
122
- * if (ctx.thread.empty()) {
242
+ * if (await ctx.thread.empty()) {
123
243
  * // Thread has no data, won't be persisted
124
244
  * }
125
245
  * ```
126
246
  */
127
- empty(): boolean;
247
+ empty(): Promise<boolean>;
128
248
  }
129
249
  /**
130
250
  * Represents a single request-response session within a thread.
@@ -444,31 +564,89 @@ export declare class DefaultThreadIDProvider implements ThreadIDProvider {
444
564
  private getSecret;
445
565
  getThreadId(_appState: AppState, ctx: Context<Env>): Promise<string>;
446
566
  }
567
+ type LazyStateStatus = 'idle' | 'pending-writes' | 'loaded';
568
+ type RestoreFn = () => Promise<{
569
+ state: Map<string, unknown>;
570
+ metadata: Record<string, unknown>;
571
+ }>;
572
+ export declare class LazyThreadState implements ThreadState {
573
+ #private;
574
+ constructor(restoreFn: RestoreFn);
575
+ get loaded(): boolean;
576
+ get dirty(): boolean;
577
+ private ensureLoaded;
578
+ private doLoad;
579
+ get<T = unknown>(key: string): Promise<T | undefined>;
580
+ set<T = unknown>(key: string, value: T): Promise<void>;
581
+ has(key: string): Promise<boolean>;
582
+ delete(key: string): Promise<void>;
583
+ clear(): Promise<void>;
584
+ entries<T = unknown>(): Promise<[string, T][]>;
585
+ keys(): Promise<string[]>;
586
+ values<T = unknown>(): Promise<T[]>;
587
+ size(): Promise<number>;
588
+ push<T = unknown>(key: string, value: T, maxRecords?: number): Promise<void>;
589
+ /**
590
+ * Get the current status for save logic
591
+ * @internal
592
+ */
593
+ getStatus(): LazyStateStatus;
594
+ /**
595
+ * Get pending operations for merge command
596
+ * @internal
597
+ */
598
+ getPendingOperations(): MergeOperation[];
599
+ /**
600
+ * Get serialized state for full save.
601
+ * Ensures state is loaded before serializing.
602
+ * @internal
603
+ */
604
+ getSerializedState(): Promise<Record<string, unknown>>;
605
+ }
447
606
  export declare class DefaultThread implements Thread {
448
607
  #private;
449
608
  readonly id: string;
450
- readonly state: Map<string, unknown>;
451
- metadata: Record<string, unknown>;
609
+ readonly state: LazyThreadState;
452
610
  private provider;
453
- constructor(provider: ThreadProvider, id: string, initialStateJson?: string, metadata?: Record<string, unknown>);
611
+ constructor(provider: ThreadProvider, id: string, restoreFn: RestoreFn, initialMetadata?: Record<string, unknown>);
612
+ private ensureMetadataLoaded;
613
+ private doLoadMetadata;
614
+ getMetadata(): Promise<Record<string, unknown>>;
615
+ setMetadata(metadata: Record<string, unknown>): Promise<void>;
454
616
  addEventListener(eventName: ThreadEventName, callback: ThreadEventCallback<any>): void;
455
617
  removeEventListener(eventName: ThreadEventName, callback: ThreadEventCallback<any>): void;
456
618
  fireEvent(eventName: ThreadEventName): Promise<void>;
457
619
  destroy(): Promise<void>;
458
620
  /**
459
- * Check if thread state has been modified since restore
621
+ * Check if thread has any data (state or metadata)
622
+ */
623
+ empty(): Promise<boolean>;
624
+ /**
625
+ * Check if thread needs saving
460
626
  * @internal
461
627
  */
462
- isDirty(): boolean;
628
+ needsSave(): boolean;
463
629
  /**
464
- * Check if thread has any data (state or metadata)
630
+ * Get the save mode for this thread
631
+ * @internal
632
+ */
633
+ getSaveMode(): 'none' | 'merge' | 'full';
634
+ /**
635
+ * Get pending operations for merge command
636
+ * @internal
637
+ */
638
+ getPendingOperations(): MergeOperation[];
639
+ /**
640
+ * Get metadata for saving (returns null if not loaded/modified)
641
+ * @internal
465
642
  */
466
- empty(): boolean;
643
+ getMetadataForSave(): Record<string, unknown> | undefined;
467
644
  /**
468
- * Get serialized state for saving
645
+ * Get serialized state for full save.
646
+ * Ensures state is loaded before serializing.
469
647
  * @internal
470
648
  */
471
- getSerializedState(): string;
649
+ getSerializedState(): Promise<string>;
472
650
  }
473
651
  export declare class DefaultSession implements Session {
474
652
  readonly id: string;
@@ -532,6 +710,7 @@ export declare class ThreadWebSocketClient {
532
710
  restore(threadId: string): Promise<string | undefined>;
533
711
  save(threadId: string, userData: string, threadMetadata?: Record<string, unknown>): Promise<void>;
534
712
  delete(threadId: string): Promise<void>;
713
+ merge(threadId: string, operations: MergeOperation[], metadata?: Record<string, unknown>): Promise<void>;
535
714
  cleanup(): void;
536
715
  }
537
716
  export declare class DefaultThreadProvider implements ThreadProvider {
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}