@stoneforge/quarry 0.1.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.
- package/LICENSE +13 -0
- package/README.md +160 -0
- package/dist/api/index.d.ts +8 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +8 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/quarry-api.d.ts +268 -0
- package/dist/api/quarry-api.d.ts.map +1 -0
- package/dist/api/quarry-api.js +3905 -0
- package/dist/api/quarry-api.js.map +1 -0
- package/dist/api/types.d.ts +1359 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +204 -0
- package/dist/api/types.js.map +1 -0
- package/dist/bin/sf.d.ts +3 -0
- package/dist/bin/sf.d.ts.map +1 -0
- package/dist/bin/sf.js +9 -0
- package/dist/bin/sf.js.map +1 -0
- package/dist/cli/commands/admin.d.ts +11 -0
- package/dist/cli/commands/admin.d.ts.map +1 -0
- package/dist/cli/commands/admin.js +465 -0
- package/dist/cli/commands/admin.js.map +1 -0
- package/dist/cli/commands/alias.d.ts +8 -0
- package/dist/cli/commands/alias.d.ts.map +1 -0
- package/dist/cli/commands/alias.js +70 -0
- package/dist/cli/commands/alias.js.map +1 -0
- package/dist/cli/commands/channel.d.ts +13 -0
- package/dist/cli/commands/channel.d.ts.map +1 -0
- package/dist/cli/commands/channel.js +680 -0
- package/dist/cli/commands/channel.js.map +1 -0
- package/dist/cli/commands/completion.d.ts +8 -0
- package/dist/cli/commands/completion.d.ts.map +1 -0
- package/dist/cli/commands/completion.js +87 -0
- package/dist/cli/commands/completion.js.map +1 -0
- package/dist/cli/commands/config.d.ts +12 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +242 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/crud.d.ts +64 -0
- package/dist/cli/commands/crud.d.ts.map +1 -0
- package/dist/cli/commands/crud.js +805 -0
- package/dist/cli/commands/crud.js.map +1 -0
- package/dist/cli/commands/dep.d.ts +16 -0
- package/dist/cli/commands/dep.d.ts.map +1 -0
- package/dist/cli/commands/dep.js +499 -0
- package/dist/cli/commands/dep.js.map +1 -0
- package/dist/cli/commands/document.d.ts +12 -0
- package/dist/cli/commands/document.d.ts.map +1 -0
- package/dist/cli/commands/document.js +1039 -0
- package/dist/cli/commands/document.js.map +1 -0
- package/dist/cli/commands/embeddings.d.ts +12 -0
- package/dist/cli/commands/embeddings.d.ts.map +1 -0
- package/dist/cli/commands/embeddings.js +273 -0
- package/dist/cli/commands/embeddings.js.map +1 -0
- package/dist/cli/commands/entity.d.ts +16 -0
- package/dist/cli/commands/entity.d.ts.map +1 -0
- package/dist/cli/commands/entity.js +522 -0
- package/dist/cli/commands/entity.js.map +1 -0
- package/dist/cli/commands/gc.d.ts +10 -0
- package/dist/cli/commands/gc.d.ts.map +1 -0
- package/dist/cli/commands/gc.js +257 -0
- package/dist/cli/commands/gc.js.map +1 -0
- package/dist/cli/commands/help.d.ts +11 -0
- package/dist/cli/commands/help.d.ts.map +1 -0
- package/dist/cli/commands/help.js +169 -0
- package/dist/cli/commands/help.js.map +1 -0
- package/dist/cli/commands/history.d.ts +9 -0
- package/dist/cli/commands/history.d.ts.map +1 -0
- package/dist/cli/commands/history.js +160 -0
- package/dist/cli/commands/history.js.map +1 -0
- package/dist/cli/commands/identity.d.ts +18 -0
- package/dist/cli/commands/identity.d.ts.map +1 -0
- package/dist/cli/commands/identity.js +698 -0
- package/dist/cli/commands/identity.js.map +1 -0
- package/dist/cli/commands/inbox.d.ts +20 -0
- package/dist/cli/commands/inbox.d.ts.map +1 -0
- package/dist/cli/commands/inbox.js +493 -0
- package/dist/cli/commands/inbox.js.map +1 -0
- package/dist/cli/commands/init.d.ts +20 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +144 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/install.d.ts +9 -0
- package/dist/cli/commands/install.d.ts.map +1 -0
- package/dist/cli/commands/install.js +200 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/library.d.ts +12 -0
- package/dist/cli/commands/library.d.ts.map +1 -0
- package/dist/cli/commands/library.js +665 -0
- package/dist/cli/commands/library.js.map +1 -0
- package/dist/cli/commands/message.d.ts +11 -0
- package/dist/cli/commands/message.d.ts.map +1 -0
- package/dist/cli/commands/message.js +608 -0
- package/dist/cli/commands/message.js.map +1 -0
- package/dist/cli/commands/plan.d.ts +17 -0
- package/dist/cli/commands/plan.d.ts.map +1 -0
- package/dist/cli/commands/plan.js +698 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/playbook.d.ts +12 -0
- package/dist/cli/commands/playbook.d.ts.map +1 -0
- package/dist/cli/commands/playbook.js +730 -0
- package/dist/cli/commands/playbook.js.map +1 -0
- package/dist/cli/commands/reset.d.ts +12 -0
- package/dist/cli/commands/reset.d.ts.map +1 -0
- package/dist/cli/commands/reset.js +306 -0
- package/dist/cli/commands/reset.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +11 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +106 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/stats.d.ts +8 -0
- package/dist/cli/commands/stats.d.ts.map +1 -0
- package/dist/cli/commands/stats.js +82 -0
- package/dist/cli/commands/stats.js.map +1 -0
- package/dist/cli/commands/sync.d.ts +14 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +370 -0
- package/dist/cli/commands/sync.js.map +1 -0
- package/dist/cli/commands/task.d.ts +25 -0
- package/dist/cli/commands/task.d.ts.map +1 -0
- package/dist/cli/commands/task.js +1153 -0
- package/dist/cli/commands/task.js.map +1 -0
- package/dist/cli/commands/team.d.ts +13 -0
- package/dist/cli/commands/team.d.ts.map +1 -0
- package/dist/cli/commands/team.js +471 -0
- package/dist/cli/commands/team.js.map +1 -0
- package/dist/cli/commands/workflow.d.ts +16 -0
- package/dist/cli/commands/workflow.d.ts.map +1 -0
- package/dist/cli/commands/workflow.js +753 -0
- package/dist/cli/commands/workflow.js.map +1 -0
- package/dist/cli/completion.d.ts +28 -0
- package/dist/cli/completion.d.ts.map +1 -0
- package/dist/cli/completion.js +295 -0
- package/dist/cli/completion.js.map +1 -0
- package/dist/cli/db.d.ts +38 -0
- package/dist/cli/db.d.ts.map +1 -0
- package/dist/cli/db.js +90 -0
- package/dist/cli/db.js.map +1 -0
- package/dist/cli/formatter.d.ts +87 -0
- package/dist/cli/formatter.d.ts.map +1 -0
- package/dist/cli/formatter.js +464 -0
- package/dist/cli/formatter.js.map +1 -0
- package/dist/cli/index.d.ts +33 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +38 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/parser.d.ts +45 -0
- package/dist/cli/parser.d.ts.map +1 -0
- package/dist/cli/parser.js +256 -0
- package/dist/cli/parser.js.map +1 -0
- package/dist/cli/plugin-loader.d.ts +39 -0
- package/dist/cli/plugin-loader.d.ts.map +1 -0
- package/dist/cli/plugin-loader.js +165 -0
- package/dist/cli/plugin-loader.js.map +1 -0
- package/dist/cli/plugin-registry.d.ts +50 -0
- package/dist/cli/plugin-registry.d.ts.map +1 -0
- package/dist/cli/plugin-registry.js +206 -0
- package/dist/cli/plugin-registry.js.map +1 -0
- package/dist/cli/plugin-types.d.ts +106 -0
- package/dist/cli/plugin-types.d.ts.map +1 -0
- package/dist/cli/plugin-types.js +103 -0
- package/dist/cli/plugin-types.js.map +1 -0
- package/dist/cli/runner.d.ts +35 -0
- package/dist/cli/runner.d.ts.map +1 -0
- package/dist/cli/runner.js +340 -0
- package/dist/cli/runner.js.map +1 -0
- package/dist/cli/suggest.d.ts +15 -0
- package/dist/cli/suggest.d.ts.map +1 -0
- package/dist/cli/suggest.js +49 -0
- package/dist/cli/suggest.js.map +1 -0
- package/dist/cli/types.d.ts +138 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +63 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/config/config.d.ts +86 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +348 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/defaults.d.ts +66 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +114 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/duration.d.ts +75 -0
- package/dist/config/duration.d.ts.map +1 -0
- package/dist/config/duration.js +190 -0
- package/dist/config/duration.js.map +1 -0
- package/dist/config/env.d.ts +67 -0
- package/dist/config/env.d.ts.map +1 -0
- package/dist/config/env.js +207 -0
- package/dist/config/env.js.map +1 -0
- package/dist/config/file.d.ts +97 -0
- package/dist/config/file.d.ts.map +1 -0
- package/dist/config/file.js +365 -0
- package/dist/config/file.js.map +1 -0
- package/dist/config/index.d.ts +35 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +41 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/merge.d.ts +53 -0
- package/dist/config/merge.d.ts.map +1 -0
- package/dist/config/merge.js +226 -0
- package/dist/config/merge.js.map +1 -0
- package/dist/config/types.d.ts +257 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +72 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/validation.d.ts +55 -0
- package/dist/config/validation.d.ts.map +1 -0
- package/dist/config/validation.js +251 -0
- package/dist/config/validation.js.map +1 -0
- package/dist/http/index.d.ts +8 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +12 -0
- package/dist/http/index.js.map +1 -0
- package/dist/http/sync-handlers.d.ts +162 -0
- package/dist/http/sync-handlers.d.ts.map +1 -0
- package/dist/http/sync-handlers.js +271 -0
- package/dist/http/sync-handlers.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +69 -0
- package/dist/index.js.map +1 -0
- package/dist/server/index.d.ts +34 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +3329 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/static.d.ts +18 -0
- package/dist/server/static.d.ts.map +1 -0
- package/dist/server/static.js +71 -0
- package/dist/server/static.js.map +1 -0
- package/dist/server/ws/broadcaster.d.ts +8 -0
- package/dist/server/ws/broadcaster.d.ts.map +1 -0
- package/dist/server/ws/broadcaster.js +7 -0
- package/dist/server/ws/broadcaster.js.map +1 -0
- package/dist/server/ws/handler.d.ts +55 -0
- package/dist/server/ws/handler.d.ts.map +1 -0
- package/dist/server/ws/handler.js +160 -0
- package/dist/server/ws/handler.js.map +1 -0
- package/dist/services/blocked-cache.d.ts +297 -0
- package/dist/services/blocked-cache.d.ts.map +1 -0
- package/dist/services/blocked-cache.js +755 -0
- package/dist/services/blocked-cache.js.map +1 -0
- package/dist/services/dependency.d.ts +205 -0
- package/dist/services/dependency.d.ts.map +1 -0
- package/dist/services/dependency.js +566 -0
- package/dist/services/dependency.js.map +1 -0
- package/dist/services/embeddings/fusion.d.ts +33 -0
- package/dist/services/embeddings/fusion.d.ts.map +1 -0
- package/dist/services/embeddings/fusion.js +34 -0
- package/dist/services/embeddings/fusion.js.map +1 -0
- package/dist/services/embeddings/index.d.ts +12 -0
- package/dist/services/embeddings/index.d.ts.map +1 -0
- package/dist/services/embeddings/index.js +10 -0
- package/dist/services/embeddings/index.js.map +1 -0
- package/dist/services/embeddings/local-provider.d.ts +31 -0
- package/dist/services/embeddings/local-provider.d.ts.map +1 -0
- package/dist/services/embeddings/local-provider.js +80 -0
- package/dist/services/embeddings/local-provider.js.map +1 -0
- package/dist/services/embeddings/service.d.ts +76 -0
- package/dist/services/embeddings/service.d.ts.map +1 -0
- package/dist/services/embeddings/service.js +153 -0
- package/dist/services/embeddings/service.js.map +1 -0
- package/dist/services/embeddings/types.d.ts +70 -0
- package/dist/services/embeddings/types.d.ts.map +1 -0
- package/dist/services/embeddings/types.js +8 -0
- package/dist/services/embeddings/types.js.map +1 -0
- package/dist/services/id-length-cache.d.ts +156 -0
- package/dist/services/id-length-cache.d.ts.map +1 -0
- package/dist/services/id-length-cache.js +197 -0
- package/dist/services/id-length-cache.js.map +1 -0
- package/dist/services/inbox.d.ts +147 -0
- package/dist/services/inbox.d.ts.map +1 -0
- package/dist/services/inbox.js +428 -0
- package/dist/services/inbox.js.map +1 -0
- package/dist/services/index.d.ts +10 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +10 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/priority-service.d.ts +145 -0
- package/dist/services/priority-service.d.ts.map +1 -0
- package/dist/services/priority-service.js +272 -0
- package/dist/services/priority-service.js.map +1 -0
- package/dist/services/search-utils.d.ts +47 -0
- package/dist/services/search-utils.d.ts.map +1 -0
- package/dist/services/search-utils.js +83 -0
- package/dist/services/search-utils.js.map +1 -0
- package/dist/sync/hash.d.ts +48 -0
- package/dist/sync/hash.d.ts.map +1 -0
- package/dist/sync/hash.js +136 -0
- package/dist/sync/hash.js.map +1 -0
- package/dist/sync/index.d.ts +11 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +16 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/merge.d.ts +80 -0
- package/dist/sync/merge.d.ts.map +1 -0
- package/dist/sync/merge.js +310 -0
- package/dist/sync/merge.js.map +1 -0
- package/dist/sync/serialization.d.ts +132 -0
- package/dist/sync/serialization.d.ts.map +1 -0
- package/dist/sync/serialization.js +306 -0
- package/dist/sync/serialization.js.map +1 -0
- package/dist/sync/service.d.ts +102 -0
- package/dist/sync/service.d.ts.map +1 -0
- package/dist/sync/service.js +493 -0
- package/dist/sync/service.js.map +1 -0
- package/dist/sync/types.d.ts +275 -0
- package/dist/sync/types.d.ts.map +1 -0
- package/dist/sync/types.js +76 -0
- package/dist/sync/types.js.map +1 -0
- package/dist/systems/identity.d.ts +479 -0
- package/dist/systems/identity.d.ts.map +1 -0
- package/dist/systems/identity.js +817 -0
- package/dist/systems/identity.js.map +1 -0
- package/dist/systems/index.d.ts +8 -0
- package/dist/systems/index.d.ts.map +1 -0
- package/dist/systems/index.js +29 -0
- package/dist/systems/index.js.map +1 -0
- package/package.json +121 -0
- package/web/assets/charts-vendor-D1YcbGux.js +55 -0
- package/web/assets/dnd-vendor-DmxE-_ZH.js +5 -0
- package/web/assets/editor-vendor-BxraAWts.js +279 -0
- package/web/assets/index-B77vv208.js +341 -0
- package/web/assets/index-CF_XnVLh.css +1 -0
- package/web/assets/router-vendor-BCKpRBrB.js +41 -0
- package/web/assets/ui-vendor-DUahGnbT.js +45 -0
- package/web/assets/utils-vendor-CfYKiENT.js +813 -0
- package/web/favicon.ico +0 -0
- package/web/index.html +23 -0
- package/web/logo.png +0 -0
|
@@ -0,0 +1,493 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sync Service - Full export and import implementation
|
|
3
|
+
*
|
|
4
|
+
* Implements the sync operations specified in api/sync.md:
|
|
5
|
+
* - Full and incremental export to JSONL
|
|
6
|
+
* - Import with merge strategy
|
|
7
|
+
* - Conflict resolution
|
|
8
|
+
*/
|
|
9
|
+
import { writeFile, readFile, mkdir } from 'node:fs/promises';
|
|
10
|
+
import { existsSync, writeFileSync, readFileSync, mkdirSync } from 'node:fs';
|
|
11
|
+
import { join } from 'node:path';
|
|
12
|
+
import { createTimestamp } from '@stoneforge/core';
|
|
13
|
+
import { serializeElement, serializeDependency, parseElements, parseDependencies, sortElementsForExport, sortDependenciesForExport, } from './serialization.js';
|
|
14
|
+
import { mergeElements, mergeDependencies } from './merge.js';
|
|
15
|
+
// ============================================================================
|
|
16
|
+
// Sync Service Implementation
|
|
17
|
+
// ============================================================================
|
|
18
|
+
/**
|
|
19
|
+
* Service for handling JSONL export and import operations
|
|
20
|
+
*/
|
|
21
|
+
export class SyncService {
|
|
22
|
+
backend;
|
|
23
|
+
constructor(backend) {
|
|
24
|
+
this.backend = backend;
|
|
25
|
+
}
|
|
26
|
+
// --------------------------------------------------------------------------
|
|
27
|
+
// Export Operations
|
|
28
|
+
// --------------------------------------------------------------------------
|
|
29
|
+
/**
|
|
30
|
+
* Export elements to JSONL format
|
|
31
|
+
*
|
|
32
|
+
* @param options - Export configuration
|
|
33
|
+
* @returns Export result with file paths and counts
|
|
34
|
+
*/
|
|
35
|
+
async export(options) {
|
|
36
|
+
const now = createTimestamp();
|
|
37
|
+
// Ensure output directory exists
|
|
38
|
+
if (!existsSync(options.outputDir)) {
|
|
39
|
+
await mkdir(options.outputDir, { recursive: true });
|
|
40
|
+
}
|
|
41
|
+
// Get elements to export
|
|
42
|
+
const elements = options.full
|
|
43
|
+
? this.getAllElements(options.includeEphemeral ?? false)
|
|
44
|
+
: this.getDirtyElementsData();
|
|
45
|
+
// Sort elements for export (entities first, then by creation time)
|
|
46
|
+
const sortedElements = sortElementsForExport(elements);
|
|
47
|
+
// Get dependencies
|
|
48
|
+
const dependencies = this.getAllDependencies();
|
|
49
|
+
const sortedDependencies = sortDependenciesForExport(dependencies);
|
|
50
|
+
// Build file paths
|
|
51
|
+
const elementsFile = options.elementsFile ?? 'elements.jsonl';
|
|
52
|
+
const dependenciesFile = options.dependenciesFile ?? 'dependencies.jsonl';
|
|
53
|
+
const elementsPath = join(options.outputDir, elementsFile);
|
|
54
|
+
const dependenciesPath = join(options.outputDir, dependenciesFile);
|
|
55
|
+
// Serialize to JSONL (skip invalid elements with a warning)
|
|
56
|
+
const { content: elementsContent, skipped: skippedCount } = this.serializeElementsSafe(sortedElements);
|
|
57
|
+
const dependenciesContent = sortedDependencies.map((d) => serializeDependency(d)).join('\n');
|
|
58
|
+
if (skippedCount > 0) {
|
|
59
|
+
console.warn(`[sync] Skipped ${skippedCount} invalid element(s) during export`);
|
|
60
|
+
}
|
|
61
|
+
// Write files
|
|
62
|
+
await writeFile(elementsPath, elementsContent + (elementsContent ? '\n' : ''));
|
|
63
|
+
await writeFile(dependenciesPath, dependenciesContent + (dependenciesContent ? '\n' : ''));
|
|
64
|
+
// Clear dirty tracking after successful export
|
|
65
|
+
if (!options.full) {
|
|
66
|
+
this.backend.clearDirty();
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
elementsExported: sortedElements.length - skippedCount,
|
|
70
|
+
dependenciesExported: sortedDependencies.length,
|
|
71
|
+
incremental: !options.full,
|
|
72
|
+
elementsFile: elementsPath,
|
|
73
|
+
dependenciesFile: dependenciesPath,
|
|
74
|
+
exportedAt: now,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Export synchronously (useful for CLI and testing)
|
|
79
|
+
*/
|
|
80
|
+
exportSync(options) {
|
|
81
|
+
const now = createTimestamp();
|
|
82
|
+
// Ensure output directory exists
|
|
83
|
+
if (!existsSync(options.outputDir)) {
|
|
84
|
+
mkdirSync(options.outputDir, { recursive: true });
|
|
85
|
+
}
|
|
86
|
+
// Get elements to export
|
|
87
|
+
const elements = options.full
|
|
88
|
+
? this.getAllElements(options.includeEphemeral ?? false)
|
|
89
|
+
: this.getDirtyElementsData();
|
|
90
|
+
// Sort elements for export
|
|
91
|
+
const sortedElements = sortElementsForExport(elements);
|
|
92
|
+
// Get dependencies
|
|
93
|
+
const dependencies = this.getAllDependencies();
|
|
94
|
+
const sortedDependencies = sortDependenciesForExport(dependencies);
|
|
95
|
+
// Build file paths
|
|
96
|
+
const elementsFile = options.elementsFile ?? 'elements.jsonl';
|
|
97
|
+
const dependenciesFile = options.dependenciesFile ?? 'dependencies.jsonl';
|
|
98
|
+
const elementsPath = join(options.outputDir, elementsFile);
|
|
99
|
+
const dependenciesPath = join(options.outputDir, dependenciesFile);
|
|
100
|
+
// Serialize to JSONL (skip invalid elements with a warning)
|
|
101
|
+
const { content: elementsContent, skipped: skippedCount } = this.serializeElementsSafe(sortedElements);
|
|
102
|
+
const dependenciesContent = sortedDependencies.map((d) => serializeDependency(d)).join('\n');
|
|
103
|
+
if (skippedCount > 0) {
|
|
104
|
+
console.warn(`[sync] Skipped ${skippedCount} invalid element(s) during export`);
|
|
105
|
+
}
|
|
106
|
+
// Write files
|
|
107
|
+
writeFileSync(elementsPath, elementsContent + (elementsContent ? '\n' : ''));
|
|
108
|
+
writeFileSync(dependenciesPath, dependenciesContent + (dependenciesContent ? '\n' : ''));
|
|
109
|
+
// Clear dirty tracking after successful export
|
|
110
|
+
if (!options.full) {
|
|
111
|
+
this.backend.clearDirty();
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
elementsExported: sortedElements.length - skippedCount,
|
|
115
|
+
dependenciesExported: sortedDependencies.length,
|
|
116
|
+
incremental: !options.full,
|
|
117
|
+
elementsFile: elementsPath,
|
|
118
|
+
dependenciesFile: dependenciesPath,
|
|
119
|
+
exportedAt: now,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Export to string (for API and in-memory use)
|
|
124
|
+
*/
|
|
125
|
+
exportToString(options) {
|
|
126
|
+
const elements = this.getAllElements(options?.includeEphemeral ?? false);
|
|
127
|
+
const sortedElements = sortElementsForExport(elements);
|
|
128
|
+
const { content: elementsContent } = this.serializeElementsSafe(sortedElements);
|
|
129
|
+
let dependenciesContent;
|
|
130
|
+
if (options?.includeDependencies !== false) {
|
|
131
|
+
const dependencies = this.getAllDependencies();
|
|
132
|
+
const sortedDependencies = sortDependenciesForExport(dependencies);
|
|
133
|
+
dependenciesContent = sortedDependencies.map((d) => serializeDependency(d)).join('\n');
|
|
134
|
+
}
|
|
135
|
+
return {
|
|
136
|
+
elements: elementsContent,
|
|
137
|
+
dependencies: dependenciesContent,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
// --------------------------------------------------------------------------
|
|
141
|
+
// Import Operations
|
|
142
|
+
// --------------------------------------------------------------------------
|
|
143
|
+
/**
|
|
144
|
+
* Import elements from JSONL files
|
|
145
|
+
*
|
|
146
|
+
* @param options - Import configuration
|
|
147
|
+
* @returns Import result with counts and conflicts
|
|
148
|
+
*/
|
|
149
|
+
async import(options) {
|
|
150
|
+
// Build file paths
|
|
151
|
+
const elementsFile = options.elementsFile ?? 'elements.jsonl';
|
|
152
|
+
const dependenciesFile = options.dependenciesFile ?? 'dependencies.jsonl';
|
|
153
|
+
const elementsPath = join(options.inputDir, elementsFile);
|
|
154
|
+
const dependenciesPath = join(options.inputDir, dependenciesFile);
|
|
155
|
+
// Read files
|
|
156
|
+
let elementsContent = '';
|
|
157
|
+
let dependenciesContent = '';
|
|
158
|
+
if (existsSync(elementsPath)) {
|
|
159
|
+
elementsContent = await readFile(elementsPath, 'utf-8');
|
|
160
|
+
}
|
|
161
|
+
if (existsSync(dependenciesPath)) {
|
|
162
|
+
dependenciesContent = await readFile(dependenciesPath, 'utf-8');
|
|
163
|
+
}
|
|
164
|
+
return this.importFromStrings(elementsContent, dependenciesContent, options);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Import synchronously
|
|
168
|
+
*/
|
|
169
|
+
importSync(options) {
|
|
170
|
+
// Build file paths
|
|
171
|
+
const elementsFile = options.elementsFile ?? 'elements.jsonl';
|
|
172
|
+
const dependenciesFile = options.dependenciesFile ?? 'dependencies.jsonl';
|
|
173
|
+
const elementsPath = join(options.inputDir, elementsFile);
|
|
174
|
+
const dependenciesPath = join(options.inputDir, dependenciesFile);
|
|
175
|
+
// Read files
|
|
176
|
+
let elementsContent = '';
|
|
177
|
+
let dependenciesContent = '';
|
|
178
|
+
if (existsSync(elementsPath)) {
|
|
179
|
+
elementsContent = readFileSync(elementsPath, 'utf-8');
|
|
180
|
+
}
|
|
181
|
+
if (existsSync(dependenciesPath)) {
|
|
182
|
+
dependenciesContent = readFileSync(dependenciesPath, 'utf-8');
|
|
183
|
+
}
|
|
184
|
+
return this.importFromStrings(elementsContent, dependenciesContent, options);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Import from JSONL strings (for API and in-memory use)
|
|
188
|
+
*/
|
|
189
|
+
importFromStrings(elementsContent, dependenciesContent, options) {
|
|
190
|
+
const now = createTimestamp();
|
|
191
|
+
const errors = [];
|
|
192
|
+
const conflicts = [];
|
|
193
|
+
const dependencyConflicts = [];
|
|
194
|
+
const dryRun = options?.dryRun ?? false;
|
|
195
|
+
const force = options?.force ?? false;
|
|
196
|
+
let elementsImported = 0;
|
|
197
|
+
let elementsSkipped = 0;
|
|
198
|
+
let dependenciesImported = 0;
|
|
199
|
+
let dependenciesSkipped = 0;
|
|
200
|
+
// Parse elements
|
|
201
|
+
const { elements: parsedElements, errors: parseErrors } = parseElements(elementsContent);
|
|
202
|
+
for (const err of parseErrors) {
|
|
203
|
+
errors.push({
|
|
204
|
+
line: err.line,
|
|
205
|
+
file: 'elements',
|
|
206
|
+
message: err.message,
|
|
207
|
+
content: err.content,
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
// Parse dependencies
|
|
211
|
+
const { dependencies: parsedDependencies, errors: depParseErrors } = parseDependencies(dependenciesContent);
|
|
212
|
+
for (const err of depParseErrors) {
|
|
213
|
+
errors.push({
|
|
214
|
+
line: err.line,
|
|
215
|
+
file: 'dependencies',
|
|
216
|
+
message: err.message,
|
|
217
|
+
content: err.content,
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
// Sort elements for import order (entities first for referential integrity)
|
|
221
|
+
const sortedElements = sortElementsForExport(parsedElements);
|
|
222
|
+
// Process elements
|
|
223
|
+
if (!dryRun) {
|
|
224
|
+
this.backend.transaction((tx) => {
|
|
225
|
+
for (const remoteElement of sortedElements) {
|
|
226
|
+
const localElement = this.getElement(remoteElement.id);
|
|
227
|
+
if (!localElement) {
|
|
228
|
+
// New element - insert
|
|
229
|
+
this.insertElement(tx, remoteElement);
|
|
230
|
+
elementsImported++;
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
// Existing element - merge
|
|
234
|
+
const mergeResult = mergeElements(localElement, remoteElement);
|
|
235
|
+
if (mergeResult.localModified || force) {
|
|
236
|
+
// Apply remote or merged changes
|
|
237
|
+
const elementToSave = force ? remoteElement : mergeResult.element;
|
|
238
|
+
this.updateElement(tx, elementToSave);
|
|
239
|
+
elementsImported++;
|
|
240
|
+
if (mergeResult.conflict) {
|
|
241
|
+
conflicts.push(mergeResult.conflict);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
// No changes needed
|
|
246
|
+
elementsSkipped++;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
// Process dependencies
|
|
251
|
+
const localDependencies = this.getAllDependencies();
|
|
252
|
+
const mergeResult = mergeDependencies(localDependencies, parsedDependencies);
|
|
253
|
+
// Add new dependencies
|
|
254
|
+
for (const dep of mergeResult.added) {
|
|
255
|
+
this.insertDependency(tx, dep);
|
|
256
|
+
dependenciesImported++;
|
|
257
|
+
}
|
|
258
|
+
// Remove deleted dependencies
|
|
259
|
+
for (const dep of mergeResult.removed) {
|
|
260
|
+
this.deleteDependency(tx, dep);
|
|
261
|
+
}
|
|
262
|
+
dependencyConflicts.push(...mergeResult.conflicts);
|
|
263
|
+
dependenciesSkipped = parsedDependencies.length - mergeResult.added.length;
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
// Dry run - compute what would change without actually changing
|
|
268
|
+
for (const remoteElement of sortedElements) {
|
|
269
|
+
const localElement = this.getElement(remoteElement.id);
|
|
270
|
+
if (!localElement) {
|
|
271
|
+
elementsImported++;
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
const mergeResult = mergeElements(localElement, remoteElement);
|
|
275
|
+
if (mergeResult.localModified || force) {
|
|
276
|
+
elementsImported++;
|
|
277
|
+
if (mergeResult.conflict) {
|
|
278
|
+
conflicts.push(mergeResult.conflict);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
elementsSkipped++;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
// Dry run for dependencies
|
|
287
|
+
const localDependencies = this.getAllDependencies();
|
|
288
|
+
const mergeResult = mergeDependencies(localDependencies, parsedDependencies);
|
|
289
|
+
dependenciesImported = mergeResult.added.length;
|
|
290
|
+
dependenciesSkipped = parsedDependencies.length - mergeResult.added.length;
|
|
291
|
+
dependencyConflicts.push(...mergeResult.conflicts);
|
|
292
|
+
}
|
|
293
|
+
return {
|
|
294
|
+
elementsImported,
|
|
295
|
+
elementsSkipped,
|
|
296
|
+
dependenciesImported,
|
|
297
|
+
dependenciesSkipped,
|
|
298
|
+
conflicts,
|
|
299
|
+
dependencyConflicts,
|
|
300
|
+
errors,
|
|
301
|
+
importedAt: now,
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
// --------------------------------------------------------------------------
|
|
305
|
+
// Helper Methods
|
|
306
|
+
// --------------------------------------------------------------------------
|
|
307
|
+
/**
|
|
308
|
+
* Get all elements from storage
|
|
309
|
+
*/
|
|
310
|
+
getAllElements(includeEphemeral) {
|
|
311
|
+
// Query all elements
|
|
312
|
+
let sql = 'SELECT * FROM elements WHERE deleted_at IS NULL';
|
|
313
|
+
if (!includeEphemeral) {
|
|
314
|
+
// Exclude ephemeral workflows (with ephemeral: true)
|
|
315
|
+
sql += " AND JSON_EXTRACT(data, '$.ephemeral') IS NOT true";
|
|
316
|
+
}
|
|
317
|
+
sql += ' ORDER BY created_at';
|
|
318
|
+
const rows = this.backend.query(sql);
|
|
319
|
+
let elements = rows.map((row) => this.rowToElement(row));
|
|
320
|
+
// If not including ephemeral, also filter out tasks that are children of ephemeral workflows
|
|
321
|
+
if (!includeEphemeral) {
|
|
322
|
+
elements = this.filterOutEphemeralTasks(elements);
|
|
323
|
+
}
|
|
324
|
+
return elements;
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Filter out tasks that are children of ephemeral workflows
|
|
328
|
+
*/
|
|
329
|
+
filterOutEphemeralTasks(elements) {
|
|
330
|
+
// Find ephemeral workflow IDs
|
|
331
|
+
const ephemeralWorkflowIds = new Set();
|
|
332
|
+
for (const el of elements) {
|
|
333
|
+
if (el.type === 'workflow' && el.ephemeral) {
|
|
334
|
+
ephemeralWorkflowIds.add(el.id);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
if (ephemeralWorkflowIds.size === 0) {
|
|
338
|
+
return elements;
|
|
339
|
+
}
|
|
340
|
+
// Find task IDs that are children of ephemeral workflows via parent-child dependency
|
|
341
|
+
const ephemeralTaskIds = new Set();
|
|
342
|
+
const depRows = this.backend.query("SELECT * FROM dependencies WHERE type = 'parent-child'");
|
|
343
|
+
for (const row of depRows) {
|
|
344
|
+
// In parent-child, blockedId is the child (task), blockerId is the parent (workflow)
|
|
345
|
+
if (ephemeralWorkflowIds.has(row.blocker_id)) {
|
|
346
|
+
ephemeralTaskIds.add(row.blocked_id);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
// Filter out ephemeral workflows (already filtered) and their tasks
|
|
350
|
+
return elements.filter((el) => !ephemeralTaskIds.has(el.id));
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Get dirty elements data (for incremental export)
|
|
354
|
+
*/
|
|
355
|
+
getDirtyElementsData() {
|
|
356
|
+
const dirtyRecords = this.backend.getDirtyElements();
|
|
357
|
+
const elements = [];
|
|
358
|
+
for (const record of dirtyRecords) {
|
|
359
|
+
const row = this.backend.queryOne('SELECT * FROM elements WHERE id = ?', [record.elementId]);
|
|
360
|
+
if (row) {
|
|
361
|
+
elements.push(this.rowToElement(row));
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
return elements;
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Get all dependencies from storage
|
|
368
|
+
*/
|
|
369
|
+
getAllDependencies() {
|
|
370
|
+
const rows = this.backend.query('SELECT * FROM dependencies ORDER BY created_at');
|
|
371
|
+
return rows.map((row) => ({
|
|
372
|
+
blockedId: row.blocked_id,
|
|
373
|
+
blockerId: row.blocker_id,
|
|
374
|
+
type: row.type,
|
|
375
|
+
createdAt: row.created_at,
|
|
376
|
+
createdBy: row.created_by,
|
|
377
|
+
metadata: row.metadata ? JSON.parse(row.metadata) : {},
|
|
378
|
+
}));
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Get a single element by ID
|
|
382
|
+
*/
|
|
383
|
+
getElement(id) {
|
|
384
|
+
const row = this.backend.queryOne('SELECT * FROM elements WHERE id = ?', [id]);
|
|
385
|
+
if (!row) {
|
|
386
|
+
return null;
|
|
387
|
+
}
|
|
388
|
+
return this.rowToElement(row);
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* Convert database row to Element
|
|
392
|
+
*/
|
|
393
|
+
rowToElement(row) {
|
|
394
|
+
const data = JSON.parse(row.data);
|
|
395
|
+
// Get tags for this element
|
|
396
|
+
const tagRows = this.backend.query('SELECT tag FROM tags WHERE element_id = ?', [
|
|
397
|
+
row.id,
|
|
398
|
+
]);
|
|
399
|
+
const tags = tagRows.map((r) => r.tag);
|
|
400
|
+
return {
|
|
401
|
+
id: row.id,
|
|
402
|
+
type: data.type ?? row.type,
|
|
403
|
+
createdAt: row.created_at,
|
|
404
|
+
updatedAt: row.updated_at,
|
|
405
|
+
createdBy: row.created_by,
|
|
406
|
+
tags,
|
|
407
|
+
metadata: data.metadata ?? {},
|
|
408
|
+
...data,
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Serialize elements to JSONL, skipping any that fail validation.
|
|
413
|
+
*/
|
|
414
|
+
serializeElementsSafe(elements) {
|
|
415
|
+
const lines = [];
|
|
416
|
+
let skipped = 0;
|
|
417
|
+
for (const el of elements) {
|
|
418
|
+
try {
|
|
419
|
+
lines.push(serializeElement(el));
|
|
420
|
+
}
|
|
421
|
+
catch {
|
|
422
|
+
console.warn(`[sync] Skipping invalid element ${el.id} (type=${el.type})`);
|
|
423
|
+
skipped++;
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
return { content: lines.join('\n'), skipped };
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* Insert an element into storage (within transaction)
|
|
430
|
+
*/
|
|
431
|
+
insertElement(tx, element) {
|
|
432
|
+
// Extract base fields
|
|
433
|
+
const { id, type, createdAt, updatedAt, createdBy, tags, ...typeData } = element;
|
|
434
|
+
const data = JSON.stringify(typeData);
|
|
435
|
+
// Check for deletedAt (tombstone)
|
|
436
|
+
const deletedAt = 'deletedAt' in element ? element.deletedAt : null;
|
|
437
|
+
tx.run(`INSERT OR REPLACE INTO elements (id, type, data, created_at, updated_at, created_by, deleted_at)
|
|
438
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)`, [id, type, data, createdAt, updatedAt, createdBy, deletedAt ?? null]);
|
|
439
|
+
// Update tags
|
|
440
|
+
tx.run('DELETE FROM tags WHERE element_id = ?', [id]);
|
|
441
|
+
for (const tag of tags) {
|
|
442
|
+
tx.run('INSERT INTO tags (element_id, tag) VALUES (?, ?)', [id, tag]);
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* Update an element in storage (within transaction)
|
|
447
|
+
*/
|
|
448
|
+
updateElement(tx, element) {
|
|
449
|
+
// Extract base fields
|
|
450
|
+
const { id, type, createdAt, updatedAt, createdBy, tags, ...typeData } = element;
|
|
451
|
+
const data = JSON.stringify(typeData);
|
|
452
|
+
// Check for deletedAt (tombstone)
|
|
453
|
+
const deletedAt = 'deletedAt' in element ? element.deletedAt : null;
|
|
454
|
+
tx.run(`UPDATE elements SET data = ?, updated_at = ?, deleted_at = ?
|
|
455
|
+
WHERE id = ?`, [data, updatedAt, deletedAt ?? null, id]);
|
|
456
|
+
// Update tags
|
|
457
|
+
tx.run('DELETE FROM tags WHERE element_id = ?', [id]);
|
|
458
|
+
for (const tag of tags) {
|
|
459
|
+
tx.run('INSERT INTO tags (element_id, tag) VALUES (?, ?)', [id, tag]);
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
/**
|
|
463
|
+
* Insert a dependency into storage (within transaction)
|
|
464
|
+
*/
|
|
465
|
+
insertDependency(tx, dep) {
|
|
466
|
+
tx.run(`INSERT OR IGNORE INTO dependencies (blocked_id, blocker_id, type, created_at, created_by, metadata)
|
|
467
|
+
VALUES (?, ?, ?, ?, ?, ?)`, [
|
|
468
|
+
dep.blockedId,
|
|
469
|
+
dep.blockerId,
|
|
470
|
+
dep.type,
|
|
471
|
+
dep.createdAt,
|
|
472
|
+
dep.createdBy,
|
|
473
|
+
Object.keys(dep.metadata).length > 0 ? JSON.stringify(dep.metadata) : null,
|
|
474
|
+
]);
|
|
475
|
+
}
|
|
476
|
+
/**
|
|
477
|
+
* Delete a dependency from storage (within transaction)
|
|
478
|
+
*/
|
|
479
|
+
deleteDependency(tx, dep) {
|
|
480
|
+
tx.run('DELETE FROM dependencies WHERE blocked_id = ? AND blocker_id = ? AND type = ?', [
|
|
481
|
+
dep.blockedId,
|
|
482
|
+
dep.blockerId,
|
|
483
|
+
dep.type,
|
|
484
|
+
]);
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
/**
|
|
488
|
+
* Create a new SyncService instance
|
|
489
|
+
*/
|
|
490
|
+
export function createSyncService(backend) {
|
|
491
|
+
return new SyncService(backend);
|
|
492
|
+
}
|
|
493
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/sync/service.ts"],"names":[],"mappings":"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"}
|