@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.
Files changed (330) hide show
  1. package/LICENSE +13 -0
  2. package/README.md +160 -0
  3. package/dist/api/index.d.ts +8 -0
  4. package/dist/api/index.d.ts.map +1 -0
  5. package/dist/api/index.js +8 -0
  6. package/dist/api/index.js.map +1 -0
  7. package/dist/api/quarry-api.d.ts +268 -0
  8. package/dist/api/quarry-api.d.ts.map +1 -0
  9. package/dist/api/quarry-api.js +3905 -0
  10. package/dist/api/quarry-api.js.map +1 -0
  11. package/dist/api/types.d.ts +1359 -0
  12. package/dist/api/types.d.ts.map +1 -0
  13. package/dist/api/types.js +204 -0
  14. package/dist/api/types.js.map +1 -0
  15. package/dist/bin/sf.d.ts +3 -0
  16. package/dist/bin/sf.d.ts.map +1 -0
  17. package/dist/bin/sf.js +9 -0
  18. package/dist/bin/sf.js.map +1 -0
  19. package/dist/cli/commands/admin.d.ts +11 -0
  20. package/dist/cli/commands/admin.d.ts.map +1 -0
  21. package/dist/cli/commands/admin.js +465 -0
  22. package/dist/cli/commands/admin.js.map +1 -0
  23. package/dist/cli/commands/alias.d.ts +8 -0
  24. package/dist/cli/commands/alias.d.ts.map +1 -0
  25. package/dist/cli/commands/alias.js +70 -0
  26. package/dist/cli/commands/alias.js.map +1 -0
  27. package/dist/cli/commands/channel.d.ts +13 -0
  28. package/dist/cli/commands/channel.d.ts.map +1 -0
  29. package/dist/cli/commands/channel.js +680 -0
  30. package/dist/cli/commands/channel.js.map +1 -0
  31. package/dist/cli/commands/completion.d.ts +8 -0
  32. package/dist/cli/commands/completion.d.ts.map +1 -0
  33. package/dist/cli/commands/completion.js +87 -0
  34. package/dist/cli/commands/completion.js.map +1 -0
  35. package/dist/cli/commands/config.d.ts +12 -0
  36. package/dist/cli/commands/config.d.ts.map +1 -0
  37. package/dist/cli/commands/config.js +242 -0
  38. package/dist/cli/commands/config.js.map +1 -0
  39. package/dist/cli/commands/crud.d.ts +64 -0
  40. package/dist/cli/commands/crud.d.ts.map +1 -0
  41. package/dist/cli/commands/crud.js +805 -0
  42. package/dist/cli/commands/crud.js.map +1 -0
  43. package/dist/cli/commands/dep.d.ts +16 -0
  44. package/dist/cli/commands/dep.d.ts.map +1 -0
  45. package/dist/cli/commands/dep.js +499 -0
  46. package/dist/cli/commands/dep.js.map +1 -0
  47. package/dist/cli/commands/document.d.ts +12 -0
  48. package/dist/cli/commands/document.d.ts.map +1 -0
  49. package/dist/cli/commands/document.js +1039 -0
  50. package/dist/cli/commands/document.js.map +1 -0
  51. package/dist/cli/commands/embeddings.d.ts +12 -0
  52. package/dist/cli/commands/embeddings.d.ts.map +1 -0
  53. package/dist/cli/commands/embeddings.js +273 -0
  54. package/dist/cli/commands/embeddings.js.map +1 -0
  55. package/dist/cli/commands/entity.d.ts +16 -0
  56. package/dist/cli/commands/entity.d.ts.map +1 -0
  57. package/dist/cli/commands/entity.js +522 -0
  58. package/dist/cli/commands/entity.js.map +1 -0
  59. package/dist/cli/commands/gc.d.ts +10 -0
  60. package/dist/cli/commands/gc.d.ts.map +1 -0
  61. package/dist/cli/commands/gc.js +257 -0
  62. package/dist/cli/commands/gc.js.map +1 -0
  63. package/dist/cli/commands/help.d.ts +11 -0
  64. package/dist/cli/commands/help.d.ts.map +1 -0
  65. package/dist/cli/commands/help.js +169 -0
  66. package/dist/cli/commands/help.js.map +1 -0
  67. package/dist/cli/commands/history.d.ts +9 -0
  68. package/dist/cli/commands/history.d.ts.map +1 -0
  69. package/dist/cli/commands/history.js +160 -0
  70. package/dist/cli/commands/history.js.map +1 -0
  71. package/dist/cli/commands/identity.d.ts +18 -0
  72. package/dist/cli/commands/identity.d.ts.map +1 -0
  73. package/dist/cli/commands/identity.js +698 -0
  74. package/dist/cli/commands/identity.js.map +1 -0
  75. package/dist/cli/commands/inbox.d.ts +20 -0
  76. package/dist/cli/commands/inbox.d.ts.map +1 -0
  77. package/dist/cli/commands/inbox.js +493 -0
  78. package/dist/cli/commands/inbox.js.map +1 -0
  79. package/dist/cli/commands/init.d.ts +20 -0
  80. package/dist/cli/commands/init.d.ts.map +1 -0
  81. package/dist/cli/commands/init.js +144 -0
  82. package/dist/cli/commands/init.js.map +1 -0
  83. package/dist/cli/commands/install.d.ts +9 -0
  84. package/dist/cli/commands/install.d.ts.map +1 -0
  85. package/dist/cli/commands/install.js +200 -0
  86. package/dist/cli/commands/install.js.map +1 -0
  87. package/dist/cli/commands/library.d.ts +12 -0
  88. package/dist/cli/commands/library.d.ts.map +1 -0
  89. package/dist/cli/commands/library.js +665 -0
  90. package/dist/cli/commands/library.js.map +1 -0
  91. package/dist/cli/commands/message.d.ts +11 -0
  92. package/dist/cli/commands/message.d.ts.map +1 -0
  93. package/dist/cli/commands/message.js +608 -0
  94. package/dist/cli/commands/message.js.map +1 -0
  95. package/dist/cli/commands/plan.d.ts +17 -0
  96. package/dist/cli/commands/plan.d.ts.map +1 -0
  97. package/dist/cli/commands/plan.js +698 -0
  98. package/dist/cli/commands/plan.js.map +1 -0
  99. package/dist/cli/commands/playbook.d.ts +12 -0
  100. package/dist/cli/commands/playbook.d.ts.map +1 -0
  101. package/dist/cli/commands/playbook.js +730 -0
  102. package/dist/cli/commands/playbook.js.map +1 -0
  103. package/dist/cli/commands/reset.d.ts +12 -0
  104. package/dist/cli/commands/reset.d.ts.map +1 -0
  105. package/dist/cli/commands/reset.js +306 -0
  106. package/dist/cli/commands/reset.js.map +1 -0
  107. package/dist/cli/commands/serve.d.ts +11 -0
  108. package/dist/cli/commands/serve.d.ts.map +1 -0
  109. package/dist/cli/commands/serve.js +106 -0
  110. package/dist/cli/commands/serve.js.map +1 -0
  111. package/dist/cli/commands/stats.d.ts +8 -0
  112. package/dist/cli/commands/stats.d.ts.map +1 -0
  113. package/dist/cli/commands/stats.js +82 -0
  114. package/dist/cli/commands/stats.js.map +1 -0
  115. package/dist/cli/commands/sync.d.ts +14 -0
  116. package/dist/cli/commands/sync.d.ts.map +1 -0
  117. package/dist/cli/commands/sync.js +370 -0
  118. package/dist/cli/commands/sync.js.map +1 -0
  119. package/dist/cli/commands/task.d.ts +25 -0
  120. package/dist/cli/commands/task.d.ts.map +1 -0
  121. package/dist/cli/commands/task.js +1153 -0
  122. package/dist/cli/commands/task.js.map +1 -0
  123. package/dist/cli/commands/team.d.ts +13 -0
  124. package/dist/cli/commands/team.d.ts.map +1 -0
  125. package/dist/cli/commands/team.js +471 -0
  126. package/dist/cli/commands/team.js.map +1 -0
  127. package/dist/cli/commands/workflow.d.ts +16 -0
  128. package/dist/cli/commands/workflow.d.ts.map +1 -0
  129. package/dist/cli/commands/workflow.js +753 -0
  130. package/dist/cli/commands/workflow.js.map +1 -0
  131. package/dist/cli/completion.d.ts +28 -0
  132. package/dist/cli/completion.d.ts.map +1 -0
  133. package/dist/cli/completion.js +295 -0
  134. package/dist/cli/completion.js.map +1 -0
  135. package/dist/cli/db.d.ts +38 -0
  136. package/dist/cli/db.d.ts.map +1 -0
  137. package/dist/cli/db.js +90 -0
  138. package/dist/cli/db.js.map +1 -0
  139. package/dist/cli/formatter.d.ts +87 -0
  140. package/dist/cli/formatter.d.ts.map +1 -0
  141. package/dist/cli/formatter.js +464 -0
  142. package/dist/cli/formatter.js.map +1 -0
  143. package/dist/cli/index.d.ts +33 -0
  144. package/dist/cli/index.d.ts.map +1 -0
  145. package/dist/cli/index.js +38 -0
  146. package/dist/cli/index.js.map +1 -0
  147. package/dist/cli/parser.d.ts +45 -0
  148. package/dist/cli/parser.d.ts.map +1 -0
  149. package/dist/cli/parser.js +256 -0
  150. package/dist/cli/parser.js.map +1 -0
  151. package/dist/cli/plugin-loader.d.ts +39 -0
  152. package/dist/cli/plugin-loader.d.ts.map +1 -0
  153. package/dist/cli/plugin-loader.js +165 -0
  154. package/dist/cli/plugin-loader.js.map +1 -0
  155. package/dist/cli/plugin-registry.d.ts +50 -0
  156. package/dist/cli/plugin-registry.d.ts.map +1 -0
  157. package/dist/cli/plugin-registry.js +206 -0
  158. package/dist/cli/plugin-registry.js.map +1 -0
  159. package/dist/cli/plugin-types.d.ts +106 -0
  160. package/dist/cli/plugin-types.d.ts.map +1 -0
  161. package/dist/cli/plugin-types.js +103 -0
  162. package/dist/cli/plugin-types.js.map +1 -0
  163. package/dist/cli/runner.d.ts +35 -0
  164. package/dist/cli/runner.d.ts.map +1 -0
  165. package/dist/cli/runner.js +340 -0
  166. package/dist/cli/runner.js.map +1 -0
  167. package/dist/cli/suggest.d.ts +15 -0
  168. package/dist/cli/suggest.d.ts.map +1 -0
  169. package/dist/cli/suggest.js +49 -0
  170. package/dist/cli/suggest.js.map +1 -0
  171. package/dist/cli/types.d.ts +138 -0
  172. package/dist/cli/types.d.ts.map +1 -0
  173. package/dist/cli/types.js +63 -0
  174. package/dist/cli/types.js.map +1 -0
  175. package/dist/config/config.d.ts +86 -0
  176. package/dist/config/config.d.ts.map +1 -0
  177. package/dist/config/config.js +348 -0
  178. package/dist/config/config.js.map +1 -0
  179. package/dist/config/defaults.d.ts +66 -0
  180. package/dist/config/defaults.d.ts.map +1 -0
  181. package/dist/config/defaults.js +114 -0
  182. package/dist/config/defaults.js.map +1 -0
  183. package/dist/config/duration.d.ts +75 -0
  184. package/dist/config/duration.d.ts.map +1 -0
  185. package/dist/config/duration.js +190 -0
  186. package/dist/config/duration.js.map +1 -0
  187. package/dist/config/env.d.ts +67 -0
  188. package/dist/config/env.d.ts.map +1 -0
  189. package/dist/config/env.js +207 -0
  190. package/dist/config/env.js.map +1 -0
  191. package/dist/config/file.d.ts +97 -0
  192. package/dist/config/file.d.ts.map +1 -0
  193. package/dist/config/file.js +365 -0
  194. package/dist/config/file.js.map +1 -0
  195. package/dist/config/index.d.ts +35 -0
  196. package/dist/config/index.d.ts.map +1 -0
  197. package/dist/config/index.js +41 -0
  198. package/dist/config/index.js.map +1 -0
  199. package/dist/config/merge.d.ts +53 -0
  200. package/dist/config/merge.d.ts.map +1 -0
  201. package/dist/config/merge.js +226 -0
  202. package/dist/config/merge.js.map +1 -0
  203. package/dist/config/types.d.ts +257 -0
  204. package/dist/config/types.d.ts.map +1 -0
  205. package/dist/config/types.js +72 -0
  206. package/dist/config/types.js.map +1 -0
  207. package/dist/config/validation.d.ts +55 -0
  208. package/dist/config/validation.d.ts.map +1 -0
  209. package/dist/config/validation.js +251 -0
  210. package/dist/config/validation.js.map +1 -0
  211. package/dist/http/index.d.ts +8 -0
  212. package/dist/http/index.d.ts.map +1 -0
  213. package/dist/http/index.js +12 -0
  214. package/dist/http/index.js.map +1 -0
  215. package/dist/http/sync-handlers.d.ts +162 -0
  216. package/dist/http/sync-handlers.d.ts.map +1 -0
  217. package/dist/http/sync-handlers.js +271 -0
  218. package/dist/http/sync-handlers.js.map +1 -0
  219. package/dist/index.d.ts +25 -0
  220. package/dist/index.d.ts.map +1 -0
  221. package/dist/index.js +69 -0
  222. package/dist/index.js.map +1 -0
  223. package/dist/server/index.d.ts +34 -0
  224. package/dist/server/index.d.ts.map +1 -0
  225. package/dist/server/index.js +3329 -0
  226. package/dist/server/index.js.map +1 -0
  227. package/dist/server/static.d.ts +18 -0
  228. package/dist/server/static.d.ts.map +1 -0
  229. package/dist/server/static.js +71 -0
  230. package/dist/server/static.js.map +1 -0
  231. package/dist/server/ws/broadcaster.d.ts +8 -0
  232. package/dist/server/ws/broadcaster.d.ts.map +1 -0
  233. package/dist/server/ws/broadcaster.js +7 -0
  234. package/dist/server/ws/broadcaster.js.map +1 -0
  235. package/dist/server/ws/handler.d.ts +55 -0
  236. package/dist/server/ws/handler.d.ts.map +1 -0
  237. package/dist/server/ws/handler.js +160 -0
  238. package/dist/server/ws/handler.js.map +1 -0
  239. package/dist/services/blocked-cache.d.ts +297 -0
  240. package/dist/services/blocked-cache.d.ts.map +1 -0
  241. package/dist/services/blocked-cache.js +755 -0
  242. package/dist/services/blocked-cache.js.map +1 -0
  243. package/dist/services/dependency.d.ts +205 -0
  244. package/dist/services/dependency.d.ts.map +1 -0
  245. package/dist/services/dependency.js +566 -0
  246. package/dist/services/dependency.js.map +1 -0
  247. package/dist/services/embeddings/fusion.d.ts +33 -0
  248. package/dist/services/embeddings/fusion.d.ts.map +1 -0
  249. package/dist/services/embeddings/fusion.js +34 -0
  250. package/dist/services/embeddings/fusion.js.map +1 -0
  251. package/dist/services/embeddings/index.d.ts +12 -0
  252. package/dist/services/embeddings/index.d.ts.map +1 -0
  253. package/dist/services/embeddings/index.js +10 -0
  254. package/dist/services/embeddings/index.js.map +1 -0
  255. package/dist/services/embeddings/local-provider.d.ts +31 -0
  256. package/dist/services/embeddings/local-provider.d.ts.map +1 -0
  257. package/dist/services/embeddings/local-provider.js +80 -0
  258. package/dist/services/embeddings/local-provider.js.map +1 -0
  259. package/dist/services/embeddings/service.d.ts +76 -0
  260. package/dist/services/embeddings/service.d.ts.map +1 -0
  261. package/dist/services/embeddings/service.js +153 -0
  262. package/dist/services/embeddings/service.js.map +1 -0
  263. package/dist/services/embeddings/types.d.ts +70 -0
  264. package/dist/services/embeddings/types.d.ts.map +1 -0
  265. package/dist/services/embeddings/types.js +8 -0
  266. package/dist/services/embeddings/types.js.map +1 -0
  267. package/dist/services/id-length-cache.d.ts +156 -0
  268. package/dist/services/id-length-cache.d.ts.map +1 -0
  269. package/dist/services/id-length-cache.js +197 -0
  270. package/dist/services/id-length-cache.js.map +1 -0
  271. package/dist/services/inbox.d.ts +147 -0
  272. package/dist/services/inbox.d.ts.map +1 -0
  273. package/dist/services/inbox.js +428 -0
  274. package/dist/services/inbox.js.map +1 -0
  275. package/dist/services/index.d.ts +10 -0
  276. package/dist/services/index.d.ts.map +1 -0
  277. package/dist/services/index.js +10 -0
  278. package/dist/services/index.js.map +1 -0
  279. package/dist/services/priority-service.d.ts +145 -0
  280. package/dist/services/priority-service.d.ts.map +1 -0
  281. package/dist/services/priority-service.js +272 -0
  282. package/dist/services/priority-service.js.map +1 -0
  283. package/dist/services/search-utils.d.ts +47 -0
  284. package/dist/services/search-utils.d.ts.map +1 -0
  285. package/dist/services/search-utils.js +83 -0
  286. package/dist/services/search-utils.js.map +1 -0
  287. package/dist/sync/hash.d.ts +48 -0
  288. package/dist/sync/hash.d.ts.map +1 -0
  289. package/dist/sync/hash.js +136 -0
  290. package/dist/sync/hash.js.map +1 -0
  291. package/dist/sync/index.d.ts +11 -0
  292. package/dist/sync/index.d.ts.map +1 -0
  293. package/dist/sync/index.js +16 -0
  294. package/dist/sync/index.js.map +1 -0
  295. package/dist/sync/merge.d.ts +80 -0
  296. package/dist/sync/merge.d.ts.map +1 -0
  297. package/dist/sync/merge.js +310 -0
  298. package/dist/sync/merge.js.map +1 -0
  299. package/dist/sync/serialization.d.ts +132 -0
  300. package/dist/sync/serialization.d.ts.map +1 -0
  301. package/dist/sync/serialization.js +306 -0
  302. package/dist/sync/serialization.js.map +1 -0
  303. package/dist/sync/service.d.ts +102 -0
  304. package/dist/sync/service.d.ts.map +1 -0
  305. package/dist/sync/service.js +493 -0
  306. package/dist/sync/service.js.map +1 -0
  307. package/dist/sync/types.d.ts +275 -0
  308. package/dist/sync/types.d.ts.map +1 -0
  309. package/dist/sync/types.js +76 -0
  310. package/dist/sync/types.js.map +1 -0
  311. package/dist/systems/identity.d.ts +479 -0
  312. package/dist/systems/identity.d.ts.map +1 -0
  313. package/dist/systems/identity.js +817 -0
  314. package/dist/systems/identity.js.map +1 -0
  315. package/dist/systems/index.d.ts +8 -0
  316. package/dist/systems/index.d.ts.map +1 -0
  317. package/dist/systems/index.js +29 -0
  318. package/dist/systems/index.js.map +1 -0
  319. package/package.json +121 -0
  320. package/web/assets/charts-vendor-D1YcbGux.js +55 -0
  321. package/web/assets/dnd-vendor-DmxE-_ZH.js +5 -0
  322. package/web/assets/editor-vendor-BxraAWts.js +279 -0
  323. package/web/assets/index-B77vv208.js +341 -0
  324. package/web/assets/index-CF_XnVLh.css +1 -0
  325. package/web/assets/router-vendor-BCKpRBrB.js +41 -0
  326. package/web/assets/ui-vendor-DUahGnbT.js +45 -0
  327. package/web/assets/utils-vendor-CfYKiENT.js +813 -0
  328. package/web/favicon.ico +0 -0
  329. package/web/index.html +23 -0
  330. 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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"}