studiograph 1.0.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.
Files changed (101) hide show
  1. package/README.md +18 -0
  2. package/dist/agent/orchestrator.d.ts +69 -0
  3. package/dist/agent/orchestrator.js +211 -0
  4. package/dist/agent/orchestrator.js.map +1 -0
  5. package/dist/agent/tools/graph-tools.d.ts +30 -0
  6. package/dist/agent/tools/graph-tools.js +536 -0
  7. package/dist/agent/tools/graph-tools.js.map +1 -0
  8. package/dist/auth/github.d.ts +53 -0
  9. package/dist/auth/github.js +180 -0
  10. package/dist/auth/github.js.map +1 -0
  11. package/dist/cli/commands/auth.d.ts +10 -0
  12. package/dist/cli/commands/auth.js +63 -0
  13. package/dist/cli/commands/auth.js.map +1 -0
  14. package/dist/cli/commands/init.d.ts +7 -0
  15. package/dist/cli/commands/init.js +299 -0
  16. package/dist/cli/commands/init.js.map +1 -0
  17. package/dist/cli/commands/join.d.ts +14 -0
  18. package/dist/cli/commands/join.js +230 -0
  19. package/dist/cli/commands/join.js.map +1 -0
  20. package/dist/cli/commands/members.d.ts +11 -0
  21. package/dist/cli/commands/members.js +230 -0
  22. package/dist/cli/commands/members.js.map +1 -0
  23. package/dist/cli/commands/serve.d.ts +17 -0
  24. package/dist/cli/commands/serve.js +90 -0
  25. package/dist/cli/commands/serve.js.map +1 -0
  26. package/dist/cli/commands/start.d.ts +7 -0
  27. package/dist/cli/commands/start.js +381 -0
  28. package/dist/cli/commands/start.js.map +1 -0
  29. package/dist/cli/commands/sync.d.ts +10 -0
  30. package/dist/cli/commands/sync.js +121 -0
  31. package/dist/cli/commands/sync.js.map +1 -0
  32. package/dist/cli/index.d.ts +7 -0
  33. package/dist/cli/index.js +31 -0
  34. package/dist/cli/index.js.map +1 -0
  35. package/dist/core/graph.d.ts +169 -0
  36. package/dist/core/graph.js +558 -0
  37. package/dist/core/graph.js.map +1 -0
  38. package/dist/core/types.d.ts +216 -0
  39. package/dist/core/types.js +71 -0
  40. package/dist/core/types.js.map +1 -0
  41. package/dist/core/user-config.d.ts +31 -0
  42. package/dist/core/user-config.js +50 -0
  43. package/dist/core/user-config.js.map +1 -0
  44. package/dist/core/validation.d.ts +2371 -0
  45. package/dist/core/validation.js +432 -0
  46. package/dist/core/validation.js.map +1 -0
  47. package/dist/core/workspace-manager.d.ts +104 -0
  48. package/dist/core/workspace-manager.js +432 -0
  49. package/dist/core/workspace-manager.js.map +1 -0
  50. package/dist/core/workspace.d.ts +103 -0
  51. package/dist/core/workspace.js +306 -0
  52. package/dist/core/workspace.js.map +1 -0
  53. package/dist/server/index.d.ts +25 -0
  54. package/dist/server/index.js +84 -0
  55. package/dist/server/index.js.map +1 -0
  56. package/dist/server/plugin-loader.d.ts +31 -0
  57. package/dist/server/plugin-loader.js +81 -0
  58. package/dist/server/plugin-loader.js.map +1 -0
  59. package/dist/server/routes/chat.d.ts +11 -0
  60. package/dist/server/routes/chat.js +66 -0
  61. package/dist/server/routes/chat.js.map +1 -0
  62. package/dist/server/routes/graph-api.d.ts +9 -0
  63. package/dist/server/routes/graph-api.js +72 -0
  64. package/dist/server/routes/graph-api.js.map +1 -0
  65. package/dist/server/routes/webhook.d.ts +14 -0
  66. package/dist/server/routes/webhook.js +69 -0
  67. package/dist/server/routes/webhook.js.map +1 -0
  68. package/dist/services/assets/base.d.ts +69 -0
  69. package/dist/services/assets/base.js +113 -0
  70. package/dist/services/assets/base.js.map +1 -0
  71. package/dist/services/assets/index.d.ts +36 -0
  72. package/dist/services/assets/index.js +89 -0
  73. package/dist/services/assets/index.js.map +1 -0
  74. package/dist/services/assets/local.d.ts +42 -0
  75. package/dist/services/assets/local.js +161 -0
  76. package/dist/services/assets/local.js.map +1 -0
  77. package/dist/services/assets/r2.d.ts +36 -0
  78. package/dist/services/assets/r2.js +182 -0
  79. package/dist/services/assets/r2.js.map +1 -0
  80. package/dist/services/csv-service.d.ts +36 -0
  81. package/dist/services/csv-service.js +143 -0
  82. package/dist/services/csv-service.js.map +1 -0
  83. package/dist/services/git.d.ts +99 -0
  84. package/dist/services/git.js +306 -0
  85. package/dist/services/git.js.map +1 -0
  86. package/dist/services/github-provisioner.d.ts +30 -0
  87. package/dist/services/github-provisioner.js +89 -0
  88. package/dist/services/github-provisioner.js.map +1 -0
  89. package/dist/services/markdown.d.ts +82 -0
  90. package/dist/services/markdown.js +338 -0
  91. package/dist/services/markdown.js.map +1 -0
  92. package/dist/services/memory-service.d.ts +74 -0
  93. package/dist/services/memory-service.js +183 -0
  94. package/dist/services/memory-service.js.map +1 -0
  95. package/dist/utils/git.d.ts +28 -0
  96. package/dist/utils/git.js +55 -0
  97. package/dist/utils/git.js.map +1 -0
  98. package/dist/utils/preflight.d.ts +44 -0
  99. package/dist/utils/preflight.js +95 -0
  100. package/dist/utils/preflight.js.map +1 -0
  101. package/package.json +55 -0
@@ -0,0 +1,558 @@
1
+ /**
2
+ * Base Graph Manager
3
+ *
4
+ * Provides unified entity management across any repo type.
5
+ * Integrates Git, Markdown, and Asset services.
6
+ */
7
+ import { join, basename } from 'path';
8
+ import { existsSync, readdirSync } from 'fs';
9
+ import { GitService } from '../services/git.js';
10
+ import { MarkdownService } from '../services/markdown.js';
11
+ import { AssetService } from '../services/assets/index.js';
12
+ import { ENTITY_SCHEMAS } from './validation.js';
13
+ import { CSVService } from '../services/csv-service.js';
14
+ import { z } from 'zod';
15
+ export class BaseGraphManager {
16
+ repoPath;
17
+ gitService;
18
+ markdownService;
19
+ assetService;
20
+ gitUser;
21
+ csvService;
22
+ constructor(config) {
23
+ this.repoPath = config.repoPath;
24
+ this.gitUser = config.gitUser;
25
+ // Initialize services
26
+ this.gitService = new GitService(this.repoPath);
27
+ this.markdownService = new MarkdownService();
28
+ this.csvService = new CSVService();
29
+ // Asset service is optional (can be disabled for repos without assets)
30
+ if (config.assetConfig) {
31
+ this.assetService = new AssetService(config.assetConfig);
32
+ }
33
+ // Ensure repo is initialized
34
+ this.ensureRepo();
35
+ }
36
+ /**
37
+ * Ensure repository exists
38
+ */
39
+ ensureRepo() {
40
+ if (!existsSync(this.repoPath)) {
41
+ throw new Error(`Repository path does not exist: ${this.repoPath}`);
42
+ }
43
+ // GitService automatically initializes in constructor
44
+ }
45
+ /**
46
+ * Get entity file path
47
+ */
48
+ getEntityPath(entityType, entityId) {
49
+ // Entity files are stored in {entityType}/{entityId}.md
50
+ return join(this.repoPath, entityType, `${entityId}.md`);
51
+ }
52
+ /**
53
+ * Get entity folder path
54
+ */
55
+ getEntityFolder(entityType) {
56
+ return join(this.repoPath, entityType);
57
+ }
58
+ /**
59
+ * Public alias for getEntityPath (used internally by dataset methods)
60
+ */
61
+ getEntityPathPublic(entityType, entityId) {
62
+ return this.getEntityPath(entityType, entityId);
63
+ }
64
+ /**
65
+ * Validate entity data against schema
66
+ */
67
+ validateEntity(entityType, data) {
68
+ const schema = ENTITY_SCHEMAS[entityType];
69
+ if (!schema) {
70
+ throw new Error(`Unknown entity type: ${entityType}`);
71
+ }
72
+ try {
73
+ // Add entity_type if not present
74
+ const dataWithType = {
75
+ ...data,
76
+ entity_type: entityType,
77
+ };
78
+ return schema.parse(dataWithType);
79
+ }
80
+ catch (error) {
81
+ if (error instanceof z.ZodError) {
82
+ const messages = error.errors.map(e => `${e.path.join('.')}: ${e.message}`);
83
+ throw new Error(`Validation failed for ${entityType}:\n${messages.join('\n')}`);
84
+ }
85
+ throw error;
86
+ }
87
+ }
88
+ /**
89
+ * Create a new entity
90
+ */
91
+ async create(options) {
92
+ const { entityType, entityId, data, content = '', commitMessage } = options;
93
+ // Validate data
94
+ const validatedData = this.validateEntity(entityType, data);
95
+ // Check if entity already exists
96
+ const entityPath = this.getEntityPath(entityType, entityId);
97
+ if (existsSync(entityPath)) {
98
+ throw new Error(`Entity already exists: ${entityType}/${entityId}`);
99
+ }
100
+ // Create git transaction
101
+ const transaction = this.gitService.createTransaction();
102
+ // Write markdown file
103
+ this.markdownService.writeFile(entityPath, {
104
+ frontmatter: validatedData,
105
+ content,
106
+ wikilinks: this.markdownService.extractWikilinks(content, validatedData),
107
+ });
108
+ transaction.add({
109
+ operation: 'create',
110
+ entityType,
111
+ entityId,
112
+ filePath: entityPath,
113
+ });
114
+ // Commit transaction
115
+ const message = commitMessage || `Create ${entityType}: ${entityId}`;
116
+ await transaction.commit(this.gitUser, message);
117
+ // Return created entity
118
+ return this.get(entityType, entityId);
119
+ }
120
+ /**
121
+ * Get an entity by type and ID
122
+ */
123
+ get(entityType, entityId) {
124
+ const entityPath = this.getEntityPath(entityType, entityId);
125
+ if (!existsSync(entityPath)) {
126
+ throw new Error(`Entity not found: ${entityType}/${entityId}`);
127
+ }
128
+ const document = this.markdownService.parseFile(entityPath);
129
+ // Validate frontmatter
130
+ const validatedData = this.validateEntity(entityType, document.frontmatter);
131
+ return {
132
+ id: entityId,
133
+ path: entityPath,
134
+ entityType,
135
+ data: validatedData,
136
+ document,
137
+ };
138
+ }
139
+ /**
140
+ * Update an existing entity
141
+ */
142
+ async update(options) {
143
+ const { entityType, entityId, data, content, commitMessage } = options;
144
+ // Get existing entity
145
+ const existing = this.get(entityType, entityId);
146
+ // Merge data (if provided) and add update metadata
147
+ const mergedData = data
148
+ ? {
149
+ ...existing.data,
150
+ ...data,
151
+ entity_type: entityType,
152
+ updated_at: new Date().toISOString(),
153
+ updated_by: this.gitUser.id,
154
+ }
155
+ : existing.data;
156
+ // Validate merged data
157
+ const validatedData = this.validateEntity(entityType, mergedData);
158
+ // Merge content (if provided)
159
+ const mergedContent = content !== undefined ? content : existing.document.content;
160
+ // Create git transaction
161
+ const transaction = this.gitService.createTransaction();
162
+ // Write updated markdown file
163
+ const entityPath = this.getEntityPath(entityType, entityId);
164
+ this.markdownService.writeFile(entityPath, {
165
+ frontmatter: validatedData,
166
+ content: mergedContent,
167
+ wikilinks: this.markdownService.extractWikilinks(mergedContent, validatedData),
168
+ });
169
+ transaction.add({
170
+ operation: 'update',
171
+ entityType,
172
+ entityId,
173
+ filePath: entityPath,
174
+ });
175
+ // Commit transaction
176
+ const message = commitMessage || `Update ${entityType}: ${entityId}`;
177
+ await transaction.commit(this.gitUser, message);
178
+ // Return updated entity
179
+ return this.get(entityType, entityId);
180
+ }
181
+ /**
182
+ * Delete an entity
183
+ */
184
+ async delete(entityType, entityId, commitMessage) {
185
+ // Verify entity exists
186
+ const existing = this.get(entityType, entityId);
187
+ // Create git transaction
188
+ const transaction = this.gitService.createTransaction();
189
+ // Delete the file
190
+ const { unlinkSync } = await import('fs');
191
+ unlinkSync(existing.path);
192
+ transaction.add({
193
+ operation: 'delete',
194
+ entityType,
195
+ entityId,
196
+ filePath: existing.path,
197
+ });
198
+ // Commit transaction
199
+ const message = commitMessage || `Delete ${entityType}: ${entityId}`;
200
+ await transaction.commit(this.gitUser, message);
201
+ }
202
+ /**
203
+ * List entities of a given type
204
+ */
205
+ list(entityType, limit) {
206
+ const results = [];
207
+ // If entityType specified, search only that folder
208
+ if (entityType) {
209
+ const folder = this.getEntityFolder(entityType);
210
+ if (!existsSync(folder)) {
211
+ return [];
212
+ }
213
+ const files = readdirSync(folder)
214
+ .filter(f => f.endsWith('.md'))
215
+ .map(f => {
216
+ const entityId = basename(f, '.md');
217
+ try {
218
+ return this.get(entityType, entityId);
219
+ }
220
+ catch {
221
+ return null;
222
+ }
223
+ })
224
+ .filter((e) => e !== null);
225
+ results.push(...files);
226
+ }
227
+ else {
228
+ // Search all entity type folders
229
+ const entityTypes = Object.keys(ENTITY_SCHEMAS);
230
+ for (const type of entityTypes) {
231
+ const folder = this.getEntityFolder(type);
232
+ if (!existsSync(folder)) {
233
+ continue;
234
+ }
235
+ const files = readdirSync(folder)
236
+ .filter(f => f.endsWith('.md'))
237
+ .map(f => {
238
+ const entityId = basename(f, '.md');
239
+ try {
240
+ return this.get(type, entityId);
241
+ }
242
+ catch {
243
+ return null;
244
+ }
245
+ })
246
+ .filter((e) => e !== null);
247
+ results.push(...files);
248
+ }
249
+ }
250
+ // Apply limit
251
+ if (limit && limit > 0) {
252
+ return results.slice(0, limit);
253
+ }
254
+ return results;
255
+ }
256
+ /**
257
+ * Search entities
258
+ */
259
+ search(options) {
260
+ const { entityType, query, filters, visibility, tags, dateRange, sortBy, limit } = options;
261
+ // Get all entities (optionally filtered by type)
262
+ let entities = this.list(entityType);
263
+ // Apply query filter (full-text search in content)
264
+ if (query && query.trim() !== '') {
265
+ const lowerQuery = query.toLowerCase();
266
+ entities = entities.filter(e => {
267
+ const content = e.document.content.toLowerCase();
268
+ const name = (e.data.name || '').toString().toLowerCase();
269
+ return content.includes(lowerQuery) || name.includes(lowerQuery);
270
+ });
271
+ }
272
+ // Apply visibility filter
273
+ if (visibility && visibility.length > 0) {
274
+ entities = entities.filter(e => {
275
+ const entityVisibility = e.data.visibility || 'team';
276
+ return visibility.includes(entityVisibility);
277
+ });
278
+ }
279
+ // Apply tags filter
280
+ if (tags && tags.length > 0) {
281
+ entities = entities.filter(e => {
282
+ const entityTags = (e.data.tags || []);
283
+ // Check if any filter tag matches any entity tag
284
+ return tags.some(tag => entityTags.includes(tag));
285
+ });
286
+ }
287
+ // Apply date range filter
288
+ if (dateRange) {
289
+ const fromDate = new Date(dateRange.from);
290
+ const toDate = new Date(dateRange.to);
291
+ entities = entities.filter(e => {
292
+ const createdAt = new Date(e.data.created_at);
293
+ return createdAt >= fromDate && createdAt <= toDate;
294
+ });
295
+ }
296
+ // Apply custom metadata filters
297
+ if (filters) {
298
+ entities = entities.filter(e => {
299
+ for (const [key, value] of Object.entries(filters)) {
300
+ const entityValue = e.data[key];
301
+ // Handle array values (tags, etc.)
302
+ if (Array.isArray(value)) {
303
+ if (!Array.isArray(entityValue)) {
304
+ return false;
305
+ }
306
+ // Check if any filter value matches any entity value
307
+ const hasMatch = value.some(v => entityValue.includes(v));
308
+ if (!hasMatch) {
309
+ return false;
310
+ }
311
+ }
312
+ else {
313
+ // Exact match
314
+ if (entityValue !== value) {
315
+ return false;
316
+ }
317
+ }
318
+ }
319
+ return true;
320
+ });
321
+ }
322
+ // Sort results
323
+ if (sortBy) {
324
+ if (sortBy === 'created_at') {
325
+ entities.sort((a, b) => {
326
+ const aDate = new Date(a.data.created_at).getTime();
327
+ const bDate = new Date(b.data.created_at).getTime();
328
+ return bDate - aDate; // Most recent first
329
+ });
330
+ }
331
+ else if (sortBy === 'updated_at') {
332
+ entities.sort((a, b) => {
333
+ const aDate = new Date(a.data.updated_at).getTime();
334
+ const bDate = new Date(b.data.updated_at).getTime();
335
+ return bDate - aDate; // Most recent first
336
+ });
337
+ }
338
+ else if (sortBy === 'relevance' && query) {
339
+ // Simple relevance scoring based on number of query matches
340
+ const lowerQuery = query.toLowerCase();
341
+ entities.sort((a, b) => {
342
+ const aContent = a.document.content.toLowerCase();
343
+ const bContent = b.document.content.toLowerCase();
344
+ const aName = (a.data.name || '').toString().toLowerCase();
345
+ const bName = (b.data.name || '').toString().toLowerCase();
346
+ // Count occurrences
347
+ const aMatches = (aContent.match(new RegExp(lowerQuery, 'g')) || []).length +
348
+ (aName.match(new RegExp(lowerQuery, 'g')) || []).length * 2; // Weight name matches higher
349
+ const bMatches = (bContent.match(new RegExp(lowerQuery, 'g')) || []).length +
350
+ (bName.match(new RegExp(lowerQuery, 'g')) || []).length * 2;
351
+ return bMatches - aMatches; // Higher score first
352
+ });
353
+ }
354
+ }
355
+ // Apply limit
356
+ if (limit && limit > 0) {
357
+ return entities.slice(0, limit);
358
+ }
359
+ return entities;
360
+ }
361
+ /**
362
+ * Get entities related to a given entity (via wikilinks)
363
+ */
364
+ getRelated(entityType, entityId) {
365
+ const entity = this.get(entityType, entityId);
366
+ const related = [];
367
+ // Find all wikilinked entities
368
+ for (const link of entity.document.wikilinks) {
369
+ // Try to find the linked entity in all folders
370
+ const found = this.markdownService.findEntity(link, [this.repoPath]);
371
+ if (found) {
372
+ // Determine entity type from path
373
+ const relPath = found.replace(this.repoPath + '/', '');
374
+ const parts = relPath.split('/');
375
+ if (parts.length >= 2) {
376
+ const linkedType = parts[0];
377
+ const linkedId = basename(parts[1], '.md');
378
+ try {
379
+ const linkedEntity = this.get(linkedType, linkedId);
380
+ related.push(linkedEntity);
381
+ }
382
+ catch {
383
+ // Entity exists as file but failed validation - skip
384
+ }
385
+ }
386
+ }
387
+ }
388
+ return related;
389
+ }
390
+ /**
391
+ * Get entities that link to a given entity (backlinks)
392
+ */
393
+ getBacklinks(entityType, entityId) {
394
+ const backlinks = this.markdownService.findBacklinks(entityId, [this.repoPath]);
395
+ const results = [];
396
+ for (const { file } of backlinks) {
397
+ // Determine entity type from path
398
+ const relPath = file.replace(this.repoPath + '/', '');
399
+ const parts = relPath.split('/');
400
+ if (parts.length >= 2) {
401
+ const linkedType = parts[0];
402
+ const linkedId = basename(parts[1], '.md');
403
+ try {
404
+ const linkedEntity = this.get(linkedType, linkedId);
405
+ results.push(linkedEntity);
406
+ }
407
+ catch {
408
+ // Entity exists as file but failed validation - skip
409
+ }
410
+ }
411
+ }
412
+ return results;
413
+ }
414
+ /**
415
+ * Validate wikilinks in an entity
416
+ */
417
+ validateWikilinks(entityType, entityId) {
418
+ const entity = this.get(entityType, entityId);
419
+ return this.markdownService.validateWikilinks(entity.document.wikilinks, [this.repoPath]);
420
+ }
421
+ /**
422
+ * Refactor a wikilink (rename entity and update all references)
423
+ */
424
+ async refactorWikilink(oldId, newId, commitMessage) {
425
+ const transaction = this.gitService.createTransaction();
426
+ // Find all files that reference the old entity ID
427
+ const backlinks = this.markdownService.findBacklinks(oldId, [this.repoPath]);
428
+ // Update each file
429
+ for (const { file } of backlinks) {
430
+ this.markdownService.updateWikilinks(file, oldId, newId);
431
+ const relPath = file.replace(this.repoPath + '/', '');
432
+ const parts = relPath.split('/');
433
+ if (parts.length >= 2) {
434
+ const entityType = parts[0];
435
+ const entityId = basename(parts[1], '.md');
436
+ transaction.add({
437
+ operation: 'update',
438
+ entityType,
439
+ entityId,
440
+ filePath: file,
441
+ });
442
+ }
443
+ }
444
+ // Commit transaction
445
+ const message = commitMessage || `Refactor wikilink: ${oldId} → ${newId}`;
446
+ await transaction.commit(this.gitUser, message);
447
+ return { updated: backlinks.length };
448
+ }
449
+ /**
450
+ * Upload asset for an entity
451
+ */
452
+ async uploadAsset(repoName, entityType, entityId, filename, buffer) {
453
+ if (!this.assetService) {
454
+ throw new Error('Asset service is not configured for this graph');
455
+ }
456
+ return await this.assetService.upload(repoName, entityType, entityId, filename, buffer);
457
+ }
458
+ /**
459
+ * List assets for an entity
460
+ */
461
+ async listAssets(repoName, entityType, entityId) {
462
+ if (!this.assetService) {
463
+ throw new Error('Asset service is not configured for this graph');
464
+ }
465
+ return await this.assetService.list(repoName, entityType, entityId);
466
+ }
467
+ /**
468
+ * Delete an asset
469
+ */
470
+ async deleteAsset(repoName, entityType, entityId, filename) {
471
+ if (!this.assetService) {
472
+ throw new Error('Asset service is not configured for this graph');
473
+ }
474
+ return await this.assetService.delete(repoName, entityType, entityId, filename);
475
+ }
476
+ /**
477
+ * Delete all assets for an entity (when entity is deleted)
478
+ */
479
+ async deleteAllAssets(repoName, entityType, entityId) {
480
+ if (!this.assetService) {
481
+ throw new Error('Asset service is not configured for this graph');
482
+ }
483
+ return await this.assetService.deleteAll(repoName, entityType, entityId);
484
+ }
485
+ /**
486
+ * Get dataset rows, optionally filtered
487
+ */
488
+ getDatasetRows(entityId, filter) {
489
+ const entity = this.get('dataset', entityId);
490
+ if (entity.data.entity_type !== 'dataset') {
491
+ throw new Error(`Entity ${entityId} is not a dataset`);
492
+ }
493
+ const schema = entity.data.schema;
494
+ const rows = this.csvService.parseRows(entity.document.content, schema);
495
+ if (filter && Object.keys(filter).length > 0) {
496
+ return this.csvService.filterRows(rows, filter);
497
+ }
498
+ return rows;
499
+ }
500
+ /**
501
+ * Append rows to a dataset entity
502
+ */
503
+ async appendDatasetRows(entityId, newRows, commitMessage) {
504
+ const entity = this.get('dataset', entityId);
505
+ if (entity.data.entity_type !== 'dataset') {
506
+ throw new Error(`Entity ${entityId} is not a dataset`);
507
+ }
508
+ const schema = entity.data.schema;
509
+ // Validate new rows against schema
510
+ const validatedRows = newRows.map(row => {
511
+ const stringRow = {};
512
+ for (const [k, v] of Object.entries(row)) {
513
+ stringRow[k] = v !== null && v !== undefined ? String(v) : '';
514
+ }
515
+ return this.csvService.validateRow(stringRow, schema);
516
+ });
517
+ // Parse existing rows and append
518
+ const existingRows = this.csvService.parseRows(entity.document.content, schema);
519
+ const allRows = [...existingRows, ...validatedRows];
520
+ // Stringify back to CSV
521
+ const newContent = this.csvService.stringifyRows(allRows, schema);
522
+ // Update the entity file (update content, bump updated_at)
523
+ const entityPath = this.getEntityPathPublic('dataset', entityId);
524
+ const updatedData = {
525
+ ...entity.data,
526
+ updated_at: new Date().toISOString(),
527
+ updated_by: this.gitUser.id,
528
+ };
529
+ const transaction = this.gitService.createTransaction();
530
+ this.markdownService.writeFile(entityPath, {
531
+ frontmatter: updatedData,
532
+ content: newContent,
533
+ wikilinks: this.markdownService.extractWikilinks(newContent, updatedData),
534
+ });
535
+ transaction.add({
536
+ operation: 'update',
537
+ entityType: 'dataset',
538
+ entityId,
539
+ filePath: entityPath,
540
+ });
541
+ const message = commitMessage || `Append ${validatedRows.length} row(s) to dataset: ${entityId}`;
542
+ await transaction.commit(this.gitUser, message);
543
+ return this.get('dataset', entityId);
544
+ }
545
+ /**
546
+ * Get repository status
547
+ */
548
+ getStatus() {
549
+ return this.gitService.getStatus();
550
+ }
551
+ /**
552
+ * Get commit history
553
+ */
554
+ getHistory(limit = 10) {
555
+ return this.gitService.getHistory(limit);
556
+ }
557
+ }
558
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/core/graph.ts"],"names":[],"mappings":"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"}