@rool-dev/client 0.3.1-dev.5742de4 → 0.3.1-dev.5aaae9e

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,658 +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_user' });
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_user' });
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
- async 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
- this.emit('nodeCreated', { nodeId, node, source: 'local_user' });
260
- // Await server call
261
- try {
262
- const message = await this.graphqlClient.createNode(this.id, nodeId, type, fields, meta, prompt);
263
- return { id: nodeId, message };
264
- }
265
- catch (error) {
266
- console.error('[Graph] Failed to create node:', error);
267
- this.resyncFromServer(error instanceof Error ? error : new Error(String(error)));
268
- throw error;
269
- }
270
- }
271
- /**
272
- * Update an existing node.
273
- * @param nodeId - The ID of the node to update
274
- * @param options.type - Optional new type for the node
275
- * @param options.fields - Fields to add or update. Use {{placeholder}} for AI-generated content.
276
- * @param options.meta - Client-private metadata to merge. Hidden from AI operations.
277
- * @param options.prompt - AI prompt for content editing (optional).
278
- */
279
- async updateNode(nodeId, options) {
280
- const node = this._data.nodes[nodeId];
281
- if (!node) {
282
- throw new Error(`Node ${nodeId} not found for update`);
283
- }
284
- const { type, fields, meta } = options;
285
- // Build local updates
286
- if (type) {
287
- node.type = type;
288
- }
289
- if (fields) {
290
- Object.assign(node, fields);
291
- }
292
- if (meta) {
293
- node._meta = { ...node._meta, ...meta };
294
- }
295
- // Emit semantic event with updated node
296
- if (type || fields || meta) {
297
- this.emit('nodeUpdated', { nodeId, node, source: 'local_user' });
298
- }
299
- // Await server call
300
- try {
301
- return await this.graphqlClient.updateNode(this.id, nodeId, type, fields, meta, options.prompt);
302
- }
303
- catch (error) {
304
- console.error('[Graph] Failed to update node:', error);
305
- this.resyncFromServer(error instanceof Error ? error : new Error(String(error)));
306
- throw error;
307
- }
308
- }
309
- /**
310
- * Delete nodes by IDs.
311
- * Also removes any edges connected to the deleted nodes.
312
- */
313
- async deleteNodes(nodeIds) {
314
- if (nodeIds.length === 0)
315
- return;
316
- const nodeIdSet = new Set(nodeIds);
317
- const deletedEdgeIds = [];
318
- const deletedNodeIds = [];
319
- // Remove edges connected to any deleted node (local state)
320
- for (const [edgeId, edge] of Object.entries(this._data.edges)) {
321
- const hasDeletedSource = edge.sources.some(s => nodeIdSet.has(s));
322
- const hasDeletedTarget = edge.targets.some(t => nodeIdSet.has(t));
323
- if (hasDeletedSource || hasDeletedTarget) {
324
- delete this._data.edges[edgeId];
325
- deletedEdgeIds.push(edgeId);
326
- }
327
- }
328
- // Remove nodes (local state)
329
- for (const nodeId of nodeIds) {
330
- if (this._data.nodes[nodeId]) {
331
- delete this._data.nodes[nodeId];
332
- deletedNodeIds.push(nodeId);
333
- }
334
- }
335
- // Emit semantic events
336
- for (const edgeId of deletedEdgeIds) {
337
- this.emit('edgeDeleted', { edgeId, source: 'local_user' });
338
- }
339
- for (const nodeId of deletedNodeIds) {
340
- this.emit('nodeDeleted', { nodeId, source: 'local_user' });
341
- }
342
- // Await server call
343
- try {
344
- await this.graphqlClient.deleteNodes(this.id, nodeIds);
345
- }
346
- catch (error) {
347
- console.error('[Graph] Failed to delete nodes:', error);
348
- this.resyncFromServer(error instanceof Error ? error : new Error(String(error)));
349
- throw error;
350
- }
351
- }
352
- // ===========================================================================
353
- // Edge Operations
354
- // ===========================================================================
355
- /**
356
- * Create an edge between nodes.
357
- * @returns The generated edge ID
358
- */
359
- async createEdge(sourceId, targetId, edgeType) {
360
- const edgeId = generateEntityId();
361
- const edge = {
362
- sources: [sourceId],
363
- targets: [targetId],
364
- type: edgeType,
365
- _meta: {},
366
- };
367
- // Update local state immediately
368
- this._data.edges[edgeId] = edge;
369
- this.emit('edgeCreated', { edgeId, edge, source: 'local_user' });
370
- // Await server call
371
- try {
372
- await this.graphqlClient.createEdge(this.id, edgeId, sourceId, targetId, edgeType);
373
- }
374
- catch (error) {
375
- console.error('[Graph] Failed to create edge:', error);
376
- this.resyncFromServer(error instanceof Error ? error : new Error(String(error)));
377
- throw error;
378
- }
379
- return edgeId;
380
- }
381
- /**
382
- * Remove edges between two nodes.
383
- * @returns true if any edges were removed
384
- */
385
- async deleteEdge(sourceId, targetId) {
386
- const deletedEdgeIds = [];
387
- // Update local state
388
- for (const [edgeId, edge] of Object.entries(this._data.edges)) {
389
- if (edge.sources.includes(sourceId) && edge.targets.includes(targetId)) {
390
- delete this._data.edges[edgeId];
391
- deletedEdgeIds.push(edgeId);
392
- }
393
- }
394
- // Emit semantic events
395
- for (const edgeId of deletedEdgeIds) {
396
- this.emit('edgeDeleted', { edgeId, source: 'local_user' });
397
- }
398
- // Await server call
399
- try {
400
- await this.graphqlClient.deleteEdge(this.id, sourceId, targetId);
401
- }
402
- catch (error) {
403
- console.error('[Graph] Failed to delete edge:', error);
404
- this.resyncFromServer(error instanceof Error ? error : new Error(String(error)));
405
- throw error;
406
- }
407
- return deletedEdgeIds.length > 0;
408
- }
409
- /**
410
- * Get parent node IDs (nodes that have edges pointing TO this node).
411
- * @param edgeType - Optional filter by edge type
412
- */
413
- getParents(nodeId, edgeType) {
414
- return Object.values(this._data.edges)
415
- .filter(edge => edge.targets.includes(nodeId) &&
416
- (!edgeType || edge.type === edgeType))
417
- .flatMap(edge => edge.sources);
418
- }
419
- /**
420
- * Get child node IDs (nodes that this node has edges pointing TO).
421
- * @param edgeType - Optional filter by edge type
422
- */
423
- getChildren(nodeId, edgeType) {
424
- return Object.values(this._data.edges)
425
- .filter(edge => edge.sources.includes(nodeId) &&
426
- (!edgeType || edge.type === edgeType))
427
- .flatMap(edge => edge.targets);
428
- }
429
- /**
430
- * Get an edge by ID.
431
- */
432
- getEdge(edgeId) {
433
- return this._data.edges[edgeId];
434
- }
435
- /**
436
- * Get all edge IDs.
437
- */
438
- getEdgeIds() {
439
- return Object.keys(this._data.edges);
440
- }
441
- // ===========================================================================
442
- // Metadata Operations
443
- // ===========================================================================
444
- /**
445
- * Set a metadata value.
446
- * Metadata is stored in _meta and hidden from AI operations.
447
- */
448
- setMetadata(key, value) {
449
- if (!this._data._meta) {
450
- this._data._meta = {};
451
- }
452
- this._data._meta[key] = value;
453
- this.emit('metaUpdated', { meta: this._data._meta, source: 'local_user' });
454
- // Fire-and-forget server call - errors trigger resync
455
- this.graphqlClient.setGraphMeta(this.id, this._data._meta)
456
- .catch((error) => {
457
- console.error('[Graph] Failed to set graph meta:', error);
458
- this.resyncFromServer(error instanceof Error ? error : new Error(String(error)));
459
- });
460
- }
461
- /**
462
- * Get a metadata value.
463
- */
464
- getMetadata(key) {
465
- return this._data._meta?.[key];
466
- }
467
- /**
468
- * Get all metadata.
469
- */
470
- getAllMetadata() {
471
- return this._data._meta ?? {};
472
- }
473
- // ===========================================================================
474
- // AI Operations
475
- // ===========================================================================
476
- /**
477
- * Send a prompt to the AI agent for graph manipulation.
478
- */
479
- async prompt(prompt, options) {
480
- return this.graphqlClient.promptGraph(this._id, prompt, options);
481
- }
482
- // ===========================================================================
483
- // Collaboration
484
- // ===========================================================================
485
- /**
486
- * List users with access to this graph.
487
- */
488
- async listUsers() {
489
- return this.graphqlClient.listGraphUsers(this._id);
490
- }
491
- /**
492
- * Add a user to this graph with specified role.
493
- */
494
- async addUser(userId, role) {
495
- return this.graphqlClient.addGraphUser(this._id, userId, role);
496
- }
497
- /**
498
- * Remove a user from this graph.
499
- */
500
- async removeUser(userId) {
501
- return this.graphqlClient.removeGraphUser(this._id, userId);
502
- }
503
- // ===========================================================================
504
- // Media Operations
505
- // ===========================================================================
506
- /**
507
- * List all media files for this graph.
508
- */
509
- async listMedia() {
510
- return this.mediaClient.list(this._id);
511
- }
512
- /**
513
- * Upload a file to this graph.
514
- */
515
- async uploadMedia(file) {
516
- return this.mediaClient.upload(this._id, file);
517
- }
518
- /**
519
- * Get the URL for a media file.
520
- */
521
- getMediaUrl(uuid) {
522
- return this.mediaClient.getUrl(this._id, uuid);
523
- }
524
- /**
525
- * Download a media file as a Blob.
526
- */
527
- async downloadMedia(uuid) {
528
- return this.mediaClient.download(this._id, uuid);
529
- }
530
- /**
531
- * Delete a media file.
532
- */
533
- async deleteMedia(uuid) {
534
- return this.mediaClient.delete(this._id, uuid);
535
- }
536
- // ===========================================================================
537
- // Low-level Operations
538
- // ===========================================================================
539
- /**
540
- * Get the full graph data.
541
- * Use sparingly - prefer specific operations.
542
- */
543
- getData() {
544
- return this._data;
545
- }
546
- // ===========================================================================
547
- // Event Handlers (called by RoolClient for routing)
548
- // ===========================================================================
549
- /**
550
- * Handle a patch event from another client.
551
- * @internal
552
- */
553
- handleRemotePatch(patch, source = 'user') {
554
- try {
555
- this._data = immutableJSONPatch(this._data, patch);
556
- }
557
- catch (error) {
558
- console.error('[Graph] Failed to apply remote patch:', error);
559
- // Force resync on patch error
560
- this.resyncFromServer(error instanceof Error ? error : new Error(String(error))).catch(() => { });
561
- return;
562
- }
563
- // Parse patch operations and emit semantic events
564
- const changeSource = source === 'agent' ? 'remote_agent' : 'remote_user';
565
- this.emitSemanticEventsFromPatch(patch, changeSource);
566
- }
567
- /**
568
- * Parse JSON patch operations and emit semantic events.
569
- * @internal
570
- */
571
- emitSemanticEventsFromPatch(patch, source) {
572
- // Track which nodes have been updated (to avoid duplicate events)
573
- const updatedNodes = new Set();
574
- for (const op of patch) {
575
- const { path } = op;
576
- // Node operations
577
- if (path.startsWith('/nodes/')) {
578
- const parts = path.split('/');
579
- const nodeId = parts[2];
580
- if (parts.length === 3) {
581
- // /nodes/{nodeId} - full node add or remove
582
- if (op.op === 'add') {
583
- const node = this._data.nodes[nodeId];
584
- if (node) {
585
- this.emit('nodeCreated', { nodeId, node, source });
586
- }
587
- }
588
- else if (op.op === 'remove') {
589
- this.emit('nodeDeleted', { nodeId, source });
590
- }
591
- }
592
- else if (parts.length > 3 && !updatedNodes.has(nodeId)) {
593
- // /nodes/{nodeId}/{field} - field update
594
- const node = this._data.nodes[nodeId];
595
- if (node) {
596
- this.emit('nodeUpdated', { nodeId, node, source });
597
- updatedNodes.add(nodeId);
598
- }
599
- }
600
- }
601
- // Edge operations
602
- else if (path.startsWith('/edges/')) {
603
- const parts = path.split('/');
604
- const edgeId = parts[2];
605
- if (parts.length === 3) {
606
- // /edges/{edgeId} - full edge add or remove
607
- if (op.op === 'add') {
608
- const edge = this._data.edges[edgeId];
609
- if (edge) {
610
- this.emit('edgeCreated', { edgeId, edge, source });
611
- }
612
- }
613
- else if (op.op === 'remove') {
614
- this.emit('edgeDeleted', { edgeId, source });
615
- }
616
- }
617
- }
618
- // Graph metadata
619
- else if (path === '/_meta' || path.startsWith('/_meta/')) {
620
- this.emit('metaUpdated', { meta: this._data._meta, source });
621
- }
622
- }
623
- }
624
- /**
625
- * Handle a full graph reload from server.
626
- * @internal
627
- */
628
- handleRemoteChange(newData) {
629
- this._data = newData;
630
- this.emit('reset', { source: 'remote_user' });
631
- }
632
- /**
633
- * Update the name from external source.
634
- * @internal
635
- */
636
- handleRemoteRename(newName) {
637
- this._name = newName;
638
- }
639
- // ===========================================================================
640
- // Private Methods
641
- // ===========================================================================
642
- async resyncFromServer(originalError) {
643
- console.warn('[Graph] Resyncing from server after sync failure');
644
- try {
645
- const freshData = await this.graphqlClient.getGraph(this._id);
646
- this._data = freshData;
647
- this.clearHistory();
648
- this.emit('syncError', originalError ?? new Error('Sync failed'));
649
- this.emit('reset', { source: 'system' });
650
- }
651
- catch (error) {
652
- console.error('[Graph] Failed to resync from server:', error);
653
- // Still emit syncError with the original error
654
- this.emit('syncError', originalError ?? new Error('Sync failed'));
655
- }
656
- }
657
- }
658
- //# 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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"}