@sudocode-ai/cli 0.1.0 → 0.1.2

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 (112) hide show
  1. package/dist/cli/feedback-commands.d.ts.map +1 -0
  2. package/dist/cli/feedback-commands.js +274 -0
  3. package/dist/cli/feedback-commands.js.map +1 -0
  4. package/dist/cli/init-commands.d.ts.map +1 -0
  5. package/dist/cli/init-commands.js +148 -0
  6. package/dist/cli/init-commands.js.map +1 -0
  7. package/dist/cli/issue-commands.d.ts.map +1 -0
  8. package/dist/cli/issue-commands.js +310 -0
  9. package/dist/cli/issue-commands.js.map +1 -0
  10. package/dist/cli/query-commands.d.ts.map +1 -0
  11. package/dist/cli/query-commands.js +61 -0
  12. package/dist/cli/query-commands.js.map +1 -0
  13. package/dist/cli/reference-commands.d.ts.map +1 -0
  14. package/dist/cli/reference-commands.js +136 -0
  15. package/dist/cli/reference-commands.js.map +1 -0
  16. package/dist/cli/relationship-commands.d.ts.map +1 -0
  17. package/dist/cli/relationship-commands.js +76 -0
  18. package/dist/cli/relationship-commands.js.map +1 -0
  19. package/dist/cli/server-commands.d.ts.map +1 -0
  20. package/dist/cli/server-commands.js +99 -0
  21. package/dist/cli/server-commands.js.map +1 -0
  22. package/dist/cli/spec-commands.d.ts.map +1 -0
  23. package/dist/cli/spec-commands.js +321 -0
  24. package/dist/cli/spec-commands.js.map +1 -0
  25. package/dist/cli/status-commands.d.ts.map +1 -0
  26. package/dist/cli/status-commands.js +131 -0
  27. package/dist/cli/status-commands.js.map +1 -0
  28. package/dist/cli/sync-commands.d.ts.map +1 -0
  29. package/dist/cli/sync-commands.js +416 -0
  30. package/dist/cli/sync-commands.js.map +1 -0
  31. package/dist/cli/update-commands.d.ts.map +1 -0
  32. package/dist/cli/update-commands.js +78 -0
  33. package/dist/cli/update-commands.js.map +1 -0
  34. package/dist/cli.d.ts.map +1 -0
  35. package/dist/cli.js +425 -195
  36. package/dist/cli.js.map +1 -0
  37. package/dist/db.d.ts.map +1 -0
  38. package/dist/db.js +54 -0
  39. package/dist/db.js.map +1 -0
  40. package/dist/export.d.ts.map +1 -0
  41. package/dist/export.js +195 -0
  42. package/dist/export.js.map +1 -0
  43. package/dist/filename-generator.d.ts.map +1 -0
  44. package/dist/filename-generator.js +93 -0
  45. package/dist/filename-generator.js.map +1 -0
  46. package/dist/id-generator.d.ts.map +1 -0
  47. package/dist/id-generator.js +123 -0
  48. package/dist/id-generator.js.map +1 -0
  49. package/dist/import.d.ts.map +1 -0
  50. package/dist/import.js +608 -0
  51. package/dist/import.js.map +1 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +13 -189
  54. package/dist/index.js.map +1 -0
  55. package/dist/jsonl.d.ts.map +1 -0
  56. package/dist/jsonl.js +333 -0
  57. package/dist/jsonl.js.map +1 -0
  58. package/dist/markdown.d.ts.map +1 -0
  59. package/dist/markdown.js +357 -0
  60. package/dist/markdown.js.map +1 -0
  61. package/dist/migrations.d.ts.map +1 -0
  62. package/dist/migrations.js +57 -0
  63. package/dist/migrations.js.map +1 -0
  64. package/dist/operations/events.d.ts.map +1 -0
  65. package/dist/operations/events.js +108 -0
  66. package/dist/operations/events.js.map +1 -0
  67. package/dist/operations/feedback-anchors.d.ts.map +1 -0
  68. package/dist/operations/feedback-anchors.js +444 -0
  69. package/dist/operations/feedback-anchors.js.map +1 -0
  70. package/dist/operations/feedback.d.ts.map +1 -0
  71. package/dist/operations/feedback.js +234 -0
  72. package/dist/operations/feedback.js.map +1 -0
  73. package/dist/operations/index.d.ts.map +1 -0
  74. package/dist/operations/index.js +10 -0
  75. package/dist/operations/index.js.map +1 -0
  76. package/dist/operations/issues.d.ts.map +1 -0
  77. package/dist/operations/issues.js +411 -0
  78. package/dist/operations/issues.js.map +1 -0
  79. package/dist/operations/references.d.ts.map +1 -0
  80. package/dist/operations/references.js +117 -0
  81. package/dist/operations/references.js.map +1 -0
  82. package/dist/operations/relationships.d.ts.map +1 -0
  83. package/dist/operations/relationships.js +236 -0
  84. package/dist/operations/relationships.js.map +1 -0
  85. package/dist/operations/specs.d.ts.map +1 -0
  86. package/dist/operations/specs.js +290 -0
  87. package/dist/operations/specs.js.map +1 -0
  88. package/dist/operations/tags.d.ts.map +1 -0
  89. package/dist/operations/tags.js +127 -0
  90. package/dist/operations/tags.js.map +1 -0
  91. package/dist/operations/transactions.d.ts.map +1 -0
  92. package/dist/operations/transactions.js +111 -0
  93. package/dist/operations/transactions.js.map +1 -0
  94. package/dist/sync.d.ts.map +1 -0
  95. package/dist/sync.js +442 -0
  96. package/dist/sync.js.map +1 -0
  97. package/dist/test-schema.d.ts.map +1 -0
  98. package/dist/test-schema.js +46 -0
  99. package/dist/test-schema.js.map +1 -0
  100. package/dist/types.d.ts.map +1 -0
  101. package/dist/types.js +7 -0
  102. package/dist/types.js.map +1 -0
  103. package/dist/update-checker.d.ts.map +1 -0
  104. package/dist/update-checker.js +151 -0
  105. package/dist/update-checker.js.map +1 -0
  106. package/dist/version.d.ts.map +1 -0
  107. package/dist/version.js +23 -0
  108. package/dist/version.js.map +1 -0
  109. package/dist/watcher.d.ts.map +1 -0
  110. package/dist/watcher.js +438 -0
  111. package/dist/watcher.js.map +1 -0
  112. package/package.json +4 -7
package/dist/import.js ADDED
@@ -0,0 +1,608 @@
1
+ /**
2
+ * Import JSONL data to SQLite with collision resolution
3
+ */
4
+ import { readJSONL } from "./jsonl.js";
5
+ import { listSpecs, createSpec, updateSpec, deleteSpec, getSpec, } from "./operations/specs.js";
6
+ import { listIssues, createIssue, updateIssue, deleteIssue, getIssue, } from "./operations/issues.js";
7
+ import { addRelationship, removeAllRelationships, } from "./operations/relationships.js";
8
+ import { setTags } from "./operations/tags.js";
9
+ import { createFeedback, listFeedback, deleteFeedback, } from "./operations/feedback.js";
10
+ import { transaction } from "./operations/transactions.js";
11
+ import * as path from "path";
12
+ /**
13
+ * Detect changes between existing and incoming entities
14
+ * Uses UUID as the source of truth for entity identity
15
+ */
16
+ export function detectChanges(existing, incoming) {
17
+ // Map by UUID (the true identity)
18
+ const existingByUUID = new Map(existing.map((e) => [e.uuid, e]));
19
+ const incomingUUIDs = new Set(incoming.map((e) => e.uuid));
20
+ const added = incoming
21
+ .filter((e) => !existingByUUID.has(e.uuid))
22
+ .map((e) => e.id);
23
+ const deleted = existing
24
+ .filter((e) => !incomingUUIDs.has(e.uuid))
25
+ .map((e) => e.id);
26
+ const updated = [];
27
+ const unchanged = [];
28
+ for (const inc of incoming) {
29
+ const ex = existingByUUID.get(inc.uuid);
30
+ if (ex) {
31
+ // Same entity (same UUID), check if content changed
32
+ if (hasChanged(ex, inc)) {
33
+ updated.push(inc.id);
34
+ }
35
+ else {
36
+ unchanged.push(inc.id);
37
+ }
38
+ }
39
+ }
40
+ return { added, updated, deleted, unchanged };
41
+ }
42
+ /**
43
+ * Check if an entity has changed
44
+ */
45
+ function hasChanged(existing, incoming) {
46
+ // Simple comparison based on updated_at timestamp
47
+ return existing.updated_at !== incoming.updated_at;
48
+ }
49
+ /**
50
+ * Detect ID collisions (same ID, different UUID)
51
+ * UUIDs are the source of truth for entity identity
52
+ */
53
+ export function detectCollisions(existing, incoming) {
54
+ const collisions = [];
55
+ const existingMap = new Map(existing.map((e) => [e.id, e]));
56
+ // First, detect collisions between existing and incoming
57
+ for (const inc of incoming) {
58
+ const ex = existingMap.get(inc.id);
59
+ // Collision only if same ID but different UUID (different entities)
60
+ if (ex && ex.uuid !== inc.uuid) {
61
+ collisions.push({
62
+ id: inc.id,
63
+ uuid: inc.uuid, // UUID of the incoming entity
64
+ type: "spec", // Will be set correctly by caller
65
+ reason: "Same ID but different UUID (different entities)",
66
+ localContent: ex.title,
67
+ incomingContent: inc.title,
68
+ localCreatedAt: ex.created_at,
69
+ incomingCreatedAt: inc.created_at,
70
+ });
71
+ }
72
+ }
73
+ // Second, detect collisions within incoming data itself (duplicates)
74
+ const incomingByID = new Map();
75
+ for (const inc of incoming) {
76
+ const existing = incomingByID.get(inc.id) || [];
77
+ existing.push(inc);
78
+ incomingByID.set(inc.id, existing);
79
+ }
80
+ for (const [id, entities] of incomingByID.entries()) {
81
+ if (entities.length > 1) {
82
+ // Multiple entities with same ID in incoming data
83
+ // Check if they have different UUIDs (real collision) vs same UUID (duplicate entry)
84
+ const uniqueUUIDs = new Set(entities.map((e) => e.uuid));
85
+ if (uniqueUUIDs.size > 1) {
86
+ // Different UUIDs = real collision within incoming data
87
+ // We'll keep the first one and mark the rest as collisions
88
+ for (let i = 1; i < entities.length; i++) {
89
+ collisions.push({
90
+ id: entities[i].id,
91
+ uuid: entities[i].uuid, // UUID of the colliding entity
92
+ type: "spec", // Will be set correctly by caller
93
+ reason: "Duplicate ID in incoming data with different UUID",
94
+ localContent: entities[0].title,
95
+ incomingContent: entities[i].title,
96
+ localCreatedAt: entities[0].created_at,
97
+ incomingCreatedAt: entities[i].created_at,
98
+ });
99
+ }
100
+ }
101
+ }
102
+ }
103
+ return collisions;
104
+ }
105
+ /**
106
+ * Count references to an entity ID in content fields
107
+ */
108
+ export function countReferences(db, entityId, entityType) {
109
+ let count = 0;
110
+ // Count in specs
111
+ const specs = listSpecs(db);
112
+ for (const spec of specs) {
113
+ const regex = new RegExp(`\\b${entityId}\\b`, "g");
114
+ const matches = spec.content.match(regex);
115
+ if (matches) {
116
+ count += matches.length;
117
+ }
118
+ }
119
+ // Count in issues
120
+ const issues = listIssues(db);
121
+ for (const issue of issues) {
122
+ const regex = new RegExp(`\\b${entityId}\\b`, "g");
123
+ const contentMatches = issue.content.match(regex);
124
+ if (contentMatches)
125
+ count += contentMatches.length;
126
+ }
127
+ return count;
128
+ }
129
+ /**
130
+ * Resolve collisions using timestamp-based deterministic strategy
131
+ *
132
+ * The entity with the NEWER (more recent) created_at timestamp logically
133
+ * should be renumbered, while the OLDER entity keeps the original ID.
134
+ *
135
+ * For practical reasons (entities already in DB can't be easily renamed),
136
+ * incoming entities are always the ones that get new IDs. However, we
137
+ * deterministically decide which UUID gets which new ID based on timestamps.
138
+ */
139
+ export function resolveCollisions(db, collisions) {
140
+ const resolved = [];
141
+ const uuidToNewId = new Map();
142
+ for (const collision of collisions) {
143
+ // Determine which entity is newer based on created_at timestamps
144
+ let incomingIsNewer = true;
145
+ if (collision.localCreatedAt) {
146
+ const localTime = new Date(collision.localCreatedAt).getTime();
147
+ const incomingTime = new Date(collision.incomingCreatedAt).getTime();
148
+ // Check which is newer
149
+ if (incomingTime > localTime) {
150
+ incomingIsNewer = true; // Incoming is newer
151
+ }
152
+ else if (localTime > incomingTime) {
153
+ incomingIsNewer = false; // Local is newer
154
+ }
155
+ else {
156
+ // Same timestamp - use UUID comparison for determinism
157
+ incomingIsNewer = collision.uuid > collision.localContent;
158
+ }
159
+ }
160
+ // Generate deterministic new ID
161
+ // Always renumber the incoming entity (practical constraint)
162
+ // But ensure same UUID always gets same new ID across runs
163
+ let newId = uuidToNewId.get(collision.uuid);
164
+ if (!newId) {
165
+ newId = generateNewId(db, collision.id, collision.type);
166
+ uuidToNewId.set(collision.uuid, newId);
167
+ }
168
+ resolved.push({
169
+ ...collision,
170
+ resolution: "renumber", // Incoming always gets renumbered
171
+ newId,
172
+ // Track which one was logically newer (for logging/debugging)
173
+ ...(incomingIsNewer && {
174
+ note: "incoming is newer - correctly renumbered",
175
+ }),
176
+ ...(!incomingIsNewer && {
177
+ note: "local is newer - incoming (older) being renumbered",
178
+ }),
179
+ });
180
+ }
181
+ return resolved;
182
+ }
183
+ /**
184
+ * Generate a new unique ID
185
+ */
186
+ function generateNewId(db, oldId, type) {
187
+ // Extract prefix and number
188
+ const match = oldId.match(/^([a-z]+-)?(\d+)$/i);
189
+ if (!match) {
190
+ // Use timestamp-based ID
191
+ return `${type}-${Date.now()}`;
192
+ }
193
+ const prefix = match[1] || `${type}-`;
194
+ let num = parseInt(match[2], 10);
195
+ // Find next available ID
196
+ let newId = `${prefix}${num + 1000}`;
197
+ let attempts = 0;
198
+ while (attempts < 1000) {
199
+ const exists = type === "spec"
200
+ ? getSpec(db, newId) !== null
201
+ : getIssue(db, newId) !== null;
202
+ if (!exists) {
203
+ return newId;
204
+ }
205
+ num++;
206
+ newId = `${prefix}${num + 1000}`;
207
+ attempts++;
208
+ }
209
+ // Fallback to timestamp
210
+ return `${prefix}${Date.now()}`;
211
+ }
212
+ /**
213
+ * Update text references when an ID is renumbered
214
+ */
215
+ export function updateTextReferences(db, oldId, newId) {
216
+ let updatedCount = 0;
217
+ // Update specs
218
+ const specs = listSpecs(db);
219
+ for (const spec of specs) {
220
+ const regex = new RegExp(`\\b${oldId}\\b`, "g");
221
+ if (regex.test(spec.content)) {
222
+ const newContent = spec.content.replace(regex, newId);
223
+ updateSpec(db, spec.id, {
224
+ content: newContent,
225
+ });
226
+ updatedCount++;
227
+ }
228
+ }
229
+ // Update issues
230
+ const issues = listIssues(db);
231
+ for (const issue of issues) {
232
+ const regex = new RegExp(`\\b${oldId}\\b`, "g");
233
+ let updated = false;
234
+ let newContent = issue.content;
235
+ if (regex.test(issue.content)) {
236
+ newContent = issue.content.replace(regex, newId);
237
+ updated = true;
238
+ }
239
+ if (updated) {
240
+ updateIssue(db, issue.id, {
241
+ content: newContent,
242
+ });
243
+ updatedCount++;
244
+ }
245
+ }
246
+ return updatedCount;
247
+ }
248
+ /**
249
+ * Import specs from JSONL
250
+ */
251
+ export function importSpecs(db, specs, changes, dryRun = false, skipRelationships = false) {
252
+ if (dryRun) {
253
+ return {
254
+ added: changes.added.length,
255
+ updated: changes.updated.length,
256
+ deleted: changes.deleted.length,
257
+ };
258
+ }
259
+ let added = 0;
260
+ let updated = 0;
261
+ let deleted = 0;
262
+ // Add new specs
263
+ for (const id of changes.added) {
264
+ const spec = specs.find((s) => s.id === id);
265
+ if (spec) {
266
+ createSpec(db, {
267
+ id: spec.id,
268
+ uuid: spec.uuid,
269
+ title: spec.title,
270
+ file_path: spec.file_path,
271
+ content: spec.content,
272
+ priority: spec.priority,
273
+ parent_id: spec.parent_id,
274
+ archived: spec.archived,
275
+ archived_at: spec.archived_at,
276
+ created_at: spec.created_at,
277
+ updated_at: spec.updated_at,
278
+ });
279
+ // Add tags
280
+ setTags(db, spec.id, "spec", spec.tags || []);
281
+ added++;
282
+ }
283
+ }
284
+ // Add relationships
285
+ if (!skipRelationships) {
286
+ for (const id of changes.added) {
287
+ const spec = specs.find((s) => s.id === id);
288
+ if (spec) {
289
+ if (spec.relationships && spec.relationships.length > 0) {
290
+ for (const rel of spec.relationships) {
291
+ addRelationship(db, {
292
+ from_id: rel.from,
293
+ from_type: rel.from_type,
294
+ to_id: rel.to,
295
+ to_type: rel.to_type,
296
+ relationship_type: rel.type,
297
+ });
298
+ }
299
+ }
300
+ }
301
+ }
302
+ }
303
+ // Update existing specs
304
+ for (const id of changes.updated) {
305
+ const spec = specs.find((s) => s.id === id);
306
+ if (spec) {
307
+ updateSpec(db, spec.id, {
308
+ title: spec.title,
309
+ file_path: spec.file_path,
310
+ content: spec.content,
311
+ priority: spec.priority,
312
+ parent_id: spec.parent_id,
313
+ archived: spec.archived,
314
+ archived_at: spec.archived_at,
315
+ updated_at: spec.updated_at,
316
+ });
317
+ setTags(db, spec.id, "spec", spec.tags || []);
318
+ updated++;
319
+ }
320
+ }
321
+ // Update relationships
322
+ if (!skipRelationships) {
323
+ for (const id of changes.updated) {
324
+ const spec = specs.find((s) => s.id === id);
325
+ if (spec) {
326
+ removeAllRelationships(db, spec.id, "spec");
327
+ for (const rel of spec.relationships || []) {
328
+ addRelationship(db, {
329
+ from_id: rel.from,
330
+ from_type: rel.from_type,
331
+ to_id: rel.to,
332
+ to_type: rel.to_type,
333
+ relationship_type: rel.type,
334
+ });
335
+ }
336
+ }
337
+ }
338
+ }
339
+ // Delete removed specs
340
+ for (const id of changes.deleted) {
341
+ deleteSpec(db, id);
342
+ deleted++;
343
+ }
344
+ return { added, updated, deleted };
345
+ }
346
+ /**
347
+ * Sync feedback for an issue from JSONL data
348
+ */
349
+ function syncIssueFeedback(db, issueId, feedbackJSONL) {
350
+ // Delete all existing feedback for this issue
351
+ const existingFeedback = listFeedback(db, { issue_id: issueId });
352
+ for (const fb of existingFeedback) {
353
+ deleteFeedback(db, fb.id);
354
+ }
355
+ // Create new feedback from JSONL
356
+ if (feedbackJSONL && feedbackJSONL.length > 0) {
357
+ for (const fb of feedbackJSONL) {
358
+ createFeedback(db, {
359
+ id: fb.id,
360
+ issue_id: fb.issue_id,
361
+ spec_id: fb.spec_id,
362
+ feedback_type: fb.feedback_type,
363
+ content: fb.content,
364
+ agent: fb.agent,
365
+ anchor: fb.anchor,
366
+ dismissed: fb.dismissed,
367
+ });
368
+ }
369
+ }
370
+ }
371
+ /**
372
+ * Import issues from JSONL
373
+ */
374
+ export function importIssues(db, issues, changes, dryRun = false, skipRelationships = false) {
375
+ if (dryRun) {
376
+ return {
377
+ added: changes.added.length,
378
+ updated: changes.updated.length,
379
+ deleted: changes.deleted.length,
380
+ };
381
+ }
382
+ let added = 0;
383
+ let updated = 0;
384
+ let deleted = 0;
385
+ // Add new issues
386
+ for (const id of changes.added) {
387
+ const issue = issues.find((i) => i.id === id);
388
+ if (issue) {
389
+ createIssue(db, {
390
+ id: issue.id,
391
+ uuid: issue.uuid,
392
+ title: issue.title,
393
+ content: issue.content,
394
+ status: issue.status,
395
+ priority: issue.priority,
396
+ assignee: issue.assignee,
397
+ parent_id: issue.parent_id,
398
+ archived: issue.archived,
399
+ archived_at: issue.archived_at,
400
+ created_at: issue.created_at,
401
+ updated_at: issue.updated_at,
402
+ closed_at: issue.closed_at,
403
+ });
404
+ setTags(db, issue.id, "issue", issue.tags || []);
405
+ syncIssueFeedback(db, issue.id, issue.feedback);
406
+ added++;
407
+ }
408
+ }
409
+ // Add relationships
410
+ if (!skipRelationships) {
411
+ for (const id of changes.added) {
412
+ const issue = issues.find((i) => i.id === id);
413
+ if (issue) {
414
+ for (const rel of issue.relationships || []) {
415
+ addRelationship(db, {
416
+ from_id: rel.from,
417
+ from_type: rel.from_type,
418
+ to_id: rel.to,
419
+ to_type: rel.to_type,
420
+ relationship_type: rel.type,
421
+ });
422
+ }
423
+ }
424
+ }
425
+ }
426
+ // Update existing issues
427
+ for (const id of changes.updated) {
428
+ const issue = issues.find((i) => i.id === id);
429
+ if (issue) {
430
+ updateIssue(db, issue.id, {
431
+ title: issue.title,
432
+ content: issue.content,
433
+ status: issue.status,
434
+ priority: issue.priority,
435
+ assignee: issue.assignee,
436
+ parent_id: issue.parent_id,
437
+ archived: issue.archived,
438
+ archived_at: issue.archived_at,
439
+ updated_at: issue.updated_at,
440
+ closed_at: issue.closed_at,
441
+ });
442
+ setTags(db, issue.id, "issue", issue.tags || []);
443
+ syncIssueFeedback(db, issue.id, issue.feedback);
444
+ updated++;
445
+ }
446
+ }
447
+ // Update relationships
448
+ if (!skipRelationships) {
449
+ for (const id of changes.updated) {
450
+ const issue = issues.find((i) => i.id === id);
451
+ if (issue) {
452
+ removeAllRelationships(db, issue.id, "issue");
453
+ for (const rel of issue.relationships || []) {
454
+ addRelationship(db, {
455
+ from_id: rel.from,
456
+ from_type: rel.from_type,
457
+ to_id: rel.to,
458
+ to_type: rel.to_type,
459
+ relationship_type: rel.type,
460
+ });
461
+ }
462
+ }
463
+ }
464
+ }
465
+ // Delete removed issues
466
+ for (const id of changes.deleted) {
467
+ deleteIssue(db, id);
468
+ deleted++;
469
+ }
470
+ return { added, updated, deleted };
471
+ }
472
+ /**
473
+ * Import both specs and issues from JSONL files
474
+ */
475
+ export async function importFromJSONL(db, options = {}) {
476
+ const { inputDir = ".sudocode", specsFile = "specs.jsonl", issuesFile = "issues.jsonl", dryRun = false, resolveCollisions: shouldResolve = true, } = options;
477
+ const specsPath = path.join(inputDir, specsFile);
478
+ const issuesPath = path.join(inputDir, issuesFile);
479
+ // Read JSONL files
480
+ const incomingSpecs = await readJSONL(specsPath, {
481
+ skipErrors: true,
482
+ });
483
+ const incomingIssues = await readJSONL(issuesPath, {
484
+ skipErrors: true,
485
+ });
486
+ // Get existing data
487
+ const existingSpecs = listSpecs(db);
488
+ const existingIssues = listIssues(db);
489
+ // Detect collisions
490
+ const specCollisions = detectCollisions(existingSpecs, incomingSpecs);
491
+ const issueCollisions = detectCollisions(existingIssues, incomingIssues);
492
+ const allCollisions = [
493
+ ...specCollisions.map((c) => ({ ...c, type: "spec" })),
494
+ ...issueCollisions.map((c) => ({ ...c, type: "issue" })),
495
+ ];
496
+ // Resolve collisions if requested
497
+ let resolvedCollisions = [];
498
+ if (shouldResolve && allCollisions.length > 0) {
499
+ resolvedCollisions = resolveCollisions(db, allCollisions);
500
+ // Modify incoming data to use new IDs for colliding entities
501
+ // Use UUID to identify the correct entity to rename (in case of duplicate IDs)
502
+ for (const collision of resolvedCollisions) {
503
+ if (collision.resolution === "renumber" && collision.newId) {
504
+ if (collision.type === "spec") {
505
+ const spec = incomingSpecs.find((s) => s.id === collision.id && s.uuid === collision.uuid);
506
+ if (spec) {
507
+ spec.id = collision.newId;
508
+ }
509
+ }
510
+ else if (collision.type === "issue") {
511
+ const issue = incomingIssues.find((i) => i.id === collision.id && i.uuid === collision.uuid);
512
+ if (issue) {
513
+ issue.id = collision.newId;
514
+ }
515
+ }
516
+ }
517
+ }
518
+ }
519
+ // Detect changes (after collision resolution has modified incoming data)
520
+ const specChanges = detectChanges(existingSpecs, incomingSpecs);
521
+ const issueChanges = detectChanges(existingIssues, incomingIssues);
522
+ // Apply changes in transaction
523
+ const result = {
524
+ specs: { added: 0, updated: 0, deleted: 0 },
525
+ issues: { added: 0, updated: 0, deleted: 0 },
526
+ collisions: resolvedCollisions.length > 0 ? resolvedCollisions : allCollisions,
527
+ };
528
+ if (!dryRun) {
529
+ transaction(db, () => {
530
+ // First pass: Import all entities without relationships
531
+ result.specs = importSpecs(db, incomingSpecs, specChanges, dryRun, true);
532
+ result.issues = importIssues(db, incomingIssues, issueChanges, dryRun, true);
533
+ // Second pass: Import all relationships after all entities exist
534
+ // Import spec relationships for added specs
535
+ for (const id of specChanges.added) {
536
+ const spec = incomingSpecs.find((s) => s.id === id);
537
+ if (spec && spec.relationships && spec.relationships.length > 0) {
538
+ for (const rel of spec.relationships) {
539
+ addRelationship(db, {
540
+ from_id: rel.from,
541
+ from_type: rel.from_type,
542
+ to_id: rel.to,
543
+ to_type: rel.to_type,
544
+ relationship_type: rel.type,
545
+ });
546
+ }
547
+ }
548
+ }
549
+ // Import spec relationships for updated specs
550
+ for (const id of specChanges.updated) {
551
+ const spec = incomingSpecs.find((s) => s.id === id);
552
+ if (spec) {
553
+ removeAllRelationships(db, spec.id, "spec");
554
+ for (const rel of spec.relationships || []) {
555
+ addRelationship(db, {
556
+ from_id: rel.from,
557
+ from_type: rel.from_type,
558
+ to_id: rel.to,
559
+ to_type: rel.to_type,
560
+ relationship_type: rel.type,
561
+ });
562
+ }
563
+ }
564
+ }
565
+ // Import issue relationships for added issues
566
+ for (const id of issueChanges.added) {
567
+ const issue = incomingIssues.find((i) => i.id === id);
568
+ if (issue && issue.relationships && issue.relationships.length > 0) {
569
+ for (const rel of issue.relationships) {
570
+ addRelationship(db, {
571
+ from_id: rel.from,
572
+ from_type: rel.from_type,
573
+ to_id: rel.to,
574
+ to_type: rel.to_type,
575
+ relationship_type: rel.type,
576
+ });
577
+ }
578
+ }
579
+ }
580
+ // Import issue relationships for updated issues
581
+ for (const id of issueChanges.updated) {
582
+ const issue = incomingIssues.find((i) => i.id === id);
583
+ if (issue) {
584
+ removeAllRelationships(db, issue.id, "issue");
585
+ for (const rel of issue.relationships || []) {
586
+ addRelationship(db, {
587
+ from_id: rel.from,
588
+ from_type: rel.from_type,
589
+ to_id: rel.to,
590
+ to_type: rel.to_type,
591
+ relationship_type: rel.type,
592
+ });
593
+ }
594
+ }
595
+ }
596
+ // Note: Text reference updating is intentionally not done here
597
+ // The renumbered entity is imported with its new ID
598
+ // References within the imported data should already be using the correct IDs
599
+ // Updating all references globally would incorrectly change references to the local entity
600
+ });
601
+ }
602
+ else {
603
+ result.specs = importSpecs(db, incomingSpecs, specChanges, dryRun);
604
+ result.issues = importIssues(db, incomingIssues, issueChanges, dryRun);
605
+ }
606
+ return result;
607
+ }
608
+ //# sourceMappingURL=import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.js","sourceRoot":"","sources":["../src/import.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,SAAS,CAAC;AACxB,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC"}