@rool-dev/client 0.3.1-dev.ff91c85 → 0.4.0-dev.22f8ef0

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/dist/graph.js DELETED
@@ -1,592 +0,0 @@
1
- // =============================================================================
2
- // Graph
3
- // First-class Graph object with node/edge operations, undo/redo, and events
4
- // =============================================================================
5
- import { immutableJSONPatch } from 'immutable-json-patch';
6
- import { EventEmitter } from './event-emitter.js';
7
- const MAX_UNDO_STACK_SIZE = 50;
8
- // 6-character alphanumeric ID (62^6 = 56.8 billion possible values)
9
- const ID_CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
10
- export function generateEntityId() {
11
- let result = '';
12
- for (let i = 0; i < 6; i++) {
13
- result += ID_CHARS[Math.floor(Math.random() * ID_CHARS.length)];
14
- }
15
- return result;
16
- }
17
- /**
18
- * First-class Graph object.
19
- *
20
- * Features:
21
- * - High-level node/edge operations
22
- * - Built-in undo/redo with checkpoints
23
- * - Metadata management
24
- * - Event emission for state changes
25
- * - Real-time subscription support
26
- */
27
- export class RoolGraph extends EventEmitter {
28
- _id;
29
- _name;
30
- _role;
31
- _data;
32
- graphqlClient;
33
- mediaClient;
34
- onRegisterForEvents;
35
- onUnregisterFromEvents;
36
- // Undo/redo stacks
37
- undoStack = [];
38
- redoStack = [];
39
- // Subscription state
40
- _isSubscribed = false;
41
- constructor(config) {
42
- super();
43
- this._id = config.id;
44
- this._name = config.name;
45
- this._role = config.role;
46
- this._data = config.initialData;
47
- this.graphqlClient = config.graphqlClient;
48
- this.mediaClient = config.mediaClient;
49
- this.onRegisterForEvents = config.onRegisterForEvents;
50
- this.onUnregisterFromEvents = config.onUnregisterFromEvents;
51
- }
52
- // ===========================================================================
53
- // Properties
54
- // ===========================================================================
55
- get id() {
56
- return this._id;
57
- }
58
- get name() {
59
- return this._name;
60
- }
61
- get role() {
62
- return this._role;
63
- }
64
- get isReadOnly() {
65
- return this._role === 'viewer';
66
- }
67
- get isSubscribed() {
68
- return this._isSubscribed;
69
- }
70
- // ===========================================================================
71
- // Graph Lifecycle
72
- // ===========================================================================
73
- /**
74
- * Rename this graph.
75
- */
76
- async rename(newName) {
77
- const oldName = this._name;
78
- this._name = newName;
79
- try {
80
- await this.graphqlClient.renameGraph(this._id, newName);
81
- }
82
- catch (error) {
83
- this._name = oldName;
84
- throw error;
85
- }
86
- }
87
- /**
88
- * Subscribe to real-time updates for this graph.
89
- * Registers with the client for event routing.
90
- */
91
- subscribe() {
92
- if (this._isSubscribed)
93
- return;
94
- this._isSubscribed = true;
95
- this.onRegisterForEvents(this._id, this);
96
- }
97
- /**
98
- * Unsubscribe from real-time updates.
99
- */
100
- unsubscribe() {
101
- if (!this._isSubscribed)
102
- return;
103
- this._isSubscribed = false;
104
- this.onUnregisterFromEvents(this._id);
105
- }
106
- /**
107
- * Close this graph and clean up resources.
108
- */
109
- close() {
110
- this.unsubscribe();
111
- this.undoStack = [];
112
- this.redoStack = [];
113
- this.removeAllListeners();
114
- }
115
- // ===========================================================================
116
- // Undo / Redo
117
- // ===========================================================================
118
- /**
119
- * Create a checkpoint for undo.
120
- * Call this before a user action to capture the current state.
121
- */
122
- checkpoint(label = 'Change') {
123
- const entry = {
124
- timestamp: Date.now(),
125
- label,
126
- data: JSON.parse(JSON.stringify(this._data)),
127
- };
128
- this.undoStack.push(entry);
129
- // Limit stack size
130
- if (this.undoStack.length > MAX_UNDO_STACK_SIZE) {
131
- this.undoStack.shift();
132
- }
133
- // Clear redo stack (new action invalidates redo)
134
- this.redoStack = [];
135
- }
136
- /**
137
- * Check if undo is available.
138
- */
139
- canUndo() {
140
- return this.undoStack.length > 0;
141
- }
142
- /**
143
- * Check if redo is available.
144
- */
145
- canRedo() {
146
- return this.redoStack.length > 0;
147
- }
148
- /**
149
- * Undo to the previous checkpoint.
150
- * @returns true if undo was performed
151
- */
152
- async undo() {
153
- if (!this.canUndo())
154
- return false;
155
- // Save current state to redo stack
156
- const currentEntry = {
157
- timestamp: Date.now(),
158
- label: 'Redo point',
159
- data: JSON.parse(JSON.stringify(this._data)),
160
- };
161
- this.redoStack.push(currentEntry);
162
- // Restore previous state
163
- const previousEntry = this.undoStack.pop();
164
- this._data = previousEntry.data;
165
- // Sync to server - resync on failure
166
- try {
167
- await this.graphqlClient.setGraph(this._id, this._data);
168
- this.emit('reset', { source: 'local' });
169
- }
170
- catch (error) {
171
- console.error('[Graph] Failed to sync undo to server:', error);
172
- await this.resyncFromServer(error instanceof Error ? error : new Error(String(error)));
173
- }
174
- return true;
175
- }
176
- /**
177
- * Redo a previously undone action.
178
- * @returns true if redo was performed
179
- */
180
- async redo() {
181
- if (!this.canRedo())
182
- return false;
183
- // Save current state to undo stack
184
- const currentEntry = {
185
- timestamp: Date.now(),
186
- label: 'Undo point',
187
- data: JSON.parse(JSON.stringify(this._data)),
188
- };
189
- this.undoStack.push(currentEntry);
190
- // Restore next state
191
- const nextEntry = this.redoStack.pop();
192
- this._data = nextEntry.data;
193
- // Sync to server - resync on failure
194
- try {
195
- await this.graphqlClient.setGraph(this._id, this._data);
196
- this.emit('reset', { source: 'local' });
197
- }
198
- catch (error) {
199
- console.error('[Graph] Failed to sync redo to server:', error);
200
- await this.resyncFromServer(error instanceof Error ? error : new Error(String(error)));
201
- }
202
- return true;
203
- }
204
- /**
205
- * Clear undo/redo history.
206
- * Called when external changes invalidate local history.
207
- */
208
- clearHistory() {
209
- this.undoStack = [];
210
- this.redoStack = [];
211
- }
212
- // ===========================================================================
213
- // Node Operations
214
- // ===========================================================================
215
- /**
216
- * Get a node by ID.
217
- * @throws Error if node not found
218
- */
219
- getNode(nodeId) {
220
- const node = this._data.nodes[nodeId];
221
- if (!node) {
222
- throw new Error(`Node ${nodeId} not found`);
223
- }
224
- return node;
225
- }
226
- /**
227
- * Get a node by ID, or undefined if not found.
228
- */
229
- getNodeOrUndefined(nodeId) {
230
- return this._data.nodes[nodeId];
231
- }
232
- /**
233
- * Get all nodes of a specific type.
234
- */
235
- getNodesByType(type) {
236
- return Object.values(this._data.nodes).filter(node => node.type === type);
237
- }
238
- /**
239
- * Get all node IDs.
240
- */
241
- getNodeIds() {
242
- return Object.keys(this._data.nodes);
243
- }
244
- /**
245
- * Create a new node with optional AI generation.
246
- * @param options.type - The node type (required)
247
- * @param options.fields - Node fields (optional). Use {{placeholder}} for AI-generated content.
248
- * @param options.meta - Client-private metadata (optional). Hidden from AI operations.
249
- * @param options.prompt - AI prompt for content generation (optional).
250
- * @returns The generated node ID
251
- */
252
- createNode(options) {
253
- const nodeId = generateEntityId();
254
- const { type, fields, meta, prompt } = options;
255
- // Build the node for local state
256
- const node = { type, _meta: meta ?? {}, ...fields };
257
- // Update local state immediately (optimistic)
258
- this._data.nodes[nodeId] = node;
259
- const ops = [{ op: 'add', path: `/nodes/${nodeId}`, value: node }];
260
- this.emit('patch', { ops, source: 'local' });
261
- // Fire-and-forget server call - errors trigger resync
262
- this.graphqlClient.createNode(this.id, nodeId, type, fields, meta, prompt)
263
- .catch((error) => {
264
- console.error('[Graph] Failed to create node:', error);
265
- this.resyncFromServer(error instanceof Error ? error : new Error(String(error)));
266
- });
267
- return nodeId;
268
- }
269
- /**
270
- * Update an existing node.
271
- * @param nodeId - The ID of the node to update
272
- * @param options.type - Optional new type for the node
273
- * @param options.fields - Fields to add or update. Use {{placeholder}} for AI-generated content.
274
- * @param options.meta - Client-private metadata to merge. Hidden from AI operations.
275
- * @param options.prompt - AI prompt for content editing (optional).
276
- */
277
- updateNode(nodeId, options) {
278
- const node = this._data.nodes[nodeId];
279
- if (!node) {
280
- throw new Error(`Node ${nodeId} not found for update`);
281
- }
282
- const { type, fields, meta } = options;
283
- // Build local updates
284
- if (type) {
285
- node.type = type;
286
- }
287
- if (fields) {
288
- Object.assign(node, fields);
289
- }
290
- if (meta) {
291
- node._meta = { ...node._meta, ...meta };
292
- }
293
- // Build patch ops for local emission
294
- const ops = [];
295
- if (type) {
296
- ops.push({ op: 'add', path: `/nodes/${nodeId}/type`, value: type });
297
- }
298
- if (fields) {
299
- for (const [field, value] of Object.entries(fields)) {
300
- ops.push({ op: 'add', path: `/nodes/${nodeId}/${field}`, value });
301
- }
302
- }
303
- if (meta) {
304
- ops.push({ op: 'add', path: `/nodes/${nodeId}/_meta`, value: node._meta });
305
- }
306
- if (ops.length > 0) {
307
- this.emit('patch', { ops, source: 'local' });
308
- }
309
- // Fire-and-forget server call - errors trigger resync
310
- this.graphqlClient.updateNode(this.id, nodeId, type, fields, meta, options.prompt)
311
- .catch((error) => {
312
- console.error('[Graph] Failed to update node:', error);
313
- this.resyncFromServer(error instanceof Error ? error : new Error(String(error)));
314
- });
315
- }
316
- /**
317
- * Delete nodes by IDs.
318
- * Also removes any edges connected to the deleted nodes.
319
- */
320
- deleteNodes(nodeIds) {
321
- if (nodeIds.length === 0)
322
- return;
323
- const patch = [];
324
- const nodeIdSet = new Set(nodeIds);
325
- // Remove edges connected to any deleted node (local state)
326
- for (const [edgeId, edge] of Object.entries(this._data.edges)) {
327
- const hasDeletedSource = edge.sources.some(s => nodeIdSet.has(s));
328
- const hasDeletedTarget = edge.targets.some(t => nodeIdSet.has(t));
329
- if (hasDeletedSource || hasDeletedTarget) {
330
- delete this._data.edges[edgeId];
331
- patch.push({ op: 'remove', path: `/edges/${edgeId}` });
332
- }
333
- }
334
- // Remove nodes (local state)
335
- for (const nodeId of nodeIds) {
336
- if (this._data.nodes[nodeId]) {
337
- delete this._data.nodes[nodeId];
338
- patch.push({ op: 'remove', path: `/nodes/${nodeId}` });
339
- }
340
- }
341
- if (patch.length > 0) {
342
- this.emit('patch', { ops: patch, source: 'local' });
343
- }
344
- // Fire-and-forget server call - errors trigger resync
345
- this.graphqlClient.deleteNodes(this.id, nodeIds)
346
- .catch((error) => {
347
- console.error('[Graph] Failed to delete nodes:', error);
348
- this.resyncFromServer(error instanceof Error ? error : new Error(String(error)));
349
- });
350
- }
351
- // ===========================================================================
352
- // Edge Operations
353
- // ===========================================================================
354
- /**
355
- * Create an edge between nodes.
356
- * @returns The generated edge ID
357
- */
358
- createEdge(sourceId, targetId, edgeType) {
359
- const edgeId = generateEntityId();
360
- const edge = {
361
- sources: [sourceId],
362
- targets: [targetId],
363
- type: edgeType,
364
- _meta: {},
365
- };
366
- // Update local state immediately
367
- this._data.edges[edgeId] = edge;
368
- const ops = [{ op: 'add', path: `/edges/${edgeId}`, value: edge }];
369
- this.emit('patch', { ops, source: 'local' });
370
- // Fire-and-forget server call - errors trigger resync
371
- this.graphqlClient.createEdge(this.id, edgeId, sourceId, targetId, edgeType)
372
- .catch((error) => {
373
- console.error('[Graph] Failed to create edge:', error);
374
- this.resyncFromServer(error instanceof Error ? error : new Error(String(error)));
375
- });
376
- return edgeId;
377
- }
378
- /**
379
- * Remove edges between two nodes.
380
- * @returns true if any edges were removed
381
- */
382
- deleteEdge(sourceId, targetId) {
383
- const patch = [];
384
- // Update local state
385
- for (const [edgeId, edge] of Object.entries(this._data.edges)) {
386
- if (edge.sources.includes(sourceId) && edge.targets.includes(targetId)) {
387
- delete this._data.edges[edgeId];
388
- patch.push({ op: 'remove', path: `/edges/${edgeId}` });
389
- }
390
- }
391
- if (patch.length > 0) {
392
- this.emit('patch', { ops: patch, source: 'local' });
393
- }
394
- // Fire-and-forget server call - errors trigger resync
395
- this.graphqlClient.deleteEdge(this.id, sourceId, targetId)
396
- .catch((error) => {
397
- console.error('[Graph] Failed to delete edge:', error);
398
- this.resyncFromServer(error instanceof Error ? error : new Error(String(error)));
399
- });
400
- return patch.length > 0;
401
- }
402
- /**
403
- * Get parent node IDs (nodes that have edges pointing TO this node).
404
- * @param edgeType - Optional filter by edge type
405
- */
406
- getParents(nodeId, edgeType) {
407
- return Object.values(this._data.edges)
408
- .filter(edge => edge.targets.includes(nodeId) &&
409
- (!edgeType || edge.type === edgeType))
410
- .flatMap(edge => edge.sources);
411
- }
412
- /**
413
- * Get child node IDs (nodes that this node has edges pointing TO).
414
- * @param edgeType - Optional filter by edge type
415
- */
416
- getChildren(nodeId, edgeType) {
417
- return Object.values(this._data.edges)
418
- .filter(edge => edge.sources.includes(nodeId) &&
419
- (!edgeType || edge.type === edgeType))
420
- .flatMap(edge => edge.targets);
421
- }
422
- /**
423
- * Get an edge by ID.
424
- */
425
- getEdge(edgeId) {
426
- return this._data.edges[edgeId];
427
- }
428
- /**
429
- * Get all edge IDs.
430
- */
431
- getEdgeIds() {
432
- return Object.keys(this._data.edges);
433
- }
434
- // ===========================================================================
435
- // Metadata Operations
436
- // ===========================================================================
437
- /**
438
- * Set a metadata value.
439
- * Metadata is stored in _meta and hidden from AI operations.
440
- */
441
- setMetadata(key, value) {
442
- if (!this._data._meta) {
443
- this._data._meta = {};
444
- }
445
- this._data._meta[key] = value;
446
- // Fire-and-forget server call - errors trigger resync
447
- this.graphqlClient.setGraphMeta(this.id, this._data._meta)
448
- .catch((error) => {
449
- console.error('[Graph] Failed to set graph meta:', error);
450
- this.resyncFromServer(error instanceof Error ? error : new Error(String(error)));
451
- });
452
- }
453
- /**
454
- * Get a metadata value.
455
- */
456
- getMetadata(key) {
457
- return this._data._meta?.[key];
458
- }
459
- /**
460
- * Get all metadata.
461
- */
462
- getAllMetadata() {
463
- return this._data._meta ?? {};
464
- }
465
- // ===========================================================================
466
- // AI Operations
467
- // ===========================================================================
468
- /**
469
- * Send a prompt to the AI agent for graph manipulation.
470
- */
471
- async prompt(prompt, options) {
472
- return this.graphqlClient.promptGraph(this._id, prompt, options);
473
- }
474
- // ===========================================================================
475
- // Collaboration
476
- // ===========================================================================
477
- /**
478
- * List users with access to this graph.
479
- */
480
- async listUsers() {
481
- return this.graphqlClient.listGraphUsers(this._id);
482
- }
483
- /**
484
- * Add a user to this graph with specified role.
485
- */
486
- async addUser(userId, role) {
487
- return this.graphqlClient.addGraphUser(this._id, userId, role);
488
- }
489
- /**
490
- * Remove a user from this graph.
491
- */
492
- async removeUser(userId) {
493
- return this.graphqlClient.removeGraphUser(this._id, userId);
494
- }
495
- // ===========================================================================
496
- // Media Operations
497
- // ===========================================================================
498
- /**
499
- * List all media files for this graph.
500
- */
501
- async listMedia() {
502
- return this.mediaClient.list(this._id);
503
- }
504
- /**
505
- * Upload a file to this graph.
506
- */
507
- async uploadMedia(file) {
508
- return this.mediaClient.upload(this._id, file);
509
- }
510
- /**
511
- * Get the URL for a media file.
512
- */
513
- getMediaUrl(uuid) {
514
- return this.mediaClient.getUrl(this._id, uuid);
515
- }
516
- /**
517
- * Download a media file as a Blob.
518
- */
519
- async downloadMedia(uuid) {
520
- return this.mediaClient.download(this._id, uuid);
521
- }
522
- /**
523
- * Delete a media file.
524
- */
525
- async deleteMedia(uuid) {
526
- return this.mediaClient.delete(this._id, uuid);
527
- }
528
- // ===========================================================================
529
- // Low-level Operations
530
- // ===========================================================================
531
- /**
532
- * Get the full graph data.
533
- * Use sparingly - prefer specific operations.
534
- */
535
- getData() {
536
- return this._data;
537
- }
538
- // ===========================================================================
539
- // Event Handlers (called by RoolClient for routing)
540
- // ===========================================================================
541
- /**
542
- * Handle a patch event from another client.
543
- * @internal
544
- */
545
- handleRemotePatch(patch, source = 'user') {
546
- try {
547
- this._data = immutableJSONPatch(this._data, patch);
548
- }
549
- catch (error) {
550
- console.error('[Graph] Failed to apply remote patch:', error);
551
- // Force resync on patch error
552
- this.resyncFromServer(error instanceof Error ? error : new Error(String(error))).catch(() => { });
553
- return;
554
- }
555
- const emitterSource = source === 'agent' ? 'remote_agent' : 'remote_user';
556
- this.emit('patch', { ops: patch, source: emitterSource });
557
- }
558
- /**
559
- * Handle a full graph reload from server.
560
- * @internal
561
- */
562
- handleRemoteChange(newData) {
563
- this._data = newData;
564
- this.emit('reset', { source: 'remote_user' });
565
- }
566
- /**
567
- * Update the name from external source.
568
- * @internal
569
- */
570
- handleRemoteRename(newName) {
571
- this._name = newName;
572
- }
573
- // ===========================================================================
574
- // Private Methods
575
- // ===========================================================================
576
- async resyncFromServer(originalError) {
577
- console.warn('[Graph] Resyncing from server after sync failure');
578
- try {
579
- const freshData = await this.graphqlClient.getGraph(this._id);
580
- this._data = freshData;
581
- this.clearHistory();
582
- this.emit('syncError', originalError ?? new Error('Sync failed'));
583
- this.emit('reset', { source: 'system' });
584
- }
585
- catch (error) {
586
- console.error('[Graph] Failed to resync from server:', error);
587
- // Still emit syncError with the original error
588
- this.emit('syncError', originalError ?? new Error('Sync failed'));
589
- }
590
- }
591
- }
592
- //# sourceMappingURL=graph.js.map
package/dist/graph.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"graph.js","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"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"}