@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.
- package/dist/cli/feedback-commands.d.ts.map +1 -0
- package/dist/cli/feedback-commands.js +274 -0
- package/dist/cli/feedback-commands.js.map +1 -0
- package/dist/cli/init-commands.d.ts.map +1 -0
- package/dist/cli/init-commands.js +148 -0
- package/dist/cli/init-commands.js.map +1 -0
- package/dist/cli/issue-commands.d.ts.map +1 -0
- package/dist/cli/issue-commands.js +310 -0
- package/dist/cli/issue-commands.js.map +1 -0
- package/dist/cli/query-commands.d.ts.map +1 -0
- package/dist/cli/query-commands.js +61 -0
- package/dist/cli/query-commands.js.map +1 -0
- package/dist/cli/reference-commands.d.ts.map +1 -0
- package/dist/cli/reference-commands.js +136 -0
- package/dist/cli/reference-commands.js.map +1 -0
- package/dist/cli/relationship-commands.d.ts.map +1 -0
- package/dist/cli/relationship-commands.js +76 -0
- package/dist/cli/relationship-commands.js.map +1 -0
- package/dist/cli/server-commands.d.ts.map +1 -0
- package/dist/cli/server-commands.js +99 -0
- package/dist/cli/server-commands.js.map +1 -0
- package/dist/cli/spec-commands.d.ts.map +1 -0
- package/dist/cli/spec-commands.js +321 -0
- package/dist/cli/spec-commands.js.map +1 -0
- package/dist/cli/status-commands.d.ts.map +1 -0
- package/dist/cli/status-commands.js +131 -0
- package/dist/cli/status-commands.js.map +1 -0
- package/dist/cli/sync-commands.d.ts.map +1 -0
- package/dist/cli/sync-commands.js +416 -0
- package/dist/cli/sync-commands.js.map +1 -0
- package/dist/cli/update-commands.d.ts.map +1 -0
- package/dist/cli/update-commands.js +78 -0
- package/dist/cli/update-commands.js.map +1 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +425 -195
- package/dist/cli.js.map +1 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +54 -0
- package/dist/db.js.map +1 -0
- package/dist/export.d.ts.map +1 -0
- package/dist/export.js +195 -0
- package/dist/export.js.map +1 -0
- package/dist/filename-generator.d.ts.map +1 -0
- package/dist/filename-generator.js +93 -0
- package/dist/filename-generator.js.map +1 -0
- package/dist/id-generator.d.ts.map +1 -0
- package/dist/id-generator.js +123 -0
- package/dist/id-generator.js.map +1 -0
- package/dist/import.d.ts.map +1 -0
- package/dist/import.js +608 -0
- package/dist/import.js.map +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -189
- package/dist/index.js.map +1 -0
- package/dist/jsonl.d.ts.map +1 -0
- package/dist/jsonl.js +333 -0
- package/dist/jsonl.js.map +1 -0
- package/dist/markdown.d.ts.map +1 -0
- package/dist/markdown.js +357 -0
- package/dist/markdown.js.map +1 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +57 -0
- package/dist/migrations.js.map +1 -0
- package/dist/operations/events.d.ts.map +1 -0
- package/dist/operations/events.js +108 -0
- package/dist/operations/events.js.map +1 -0
- package/dist/operations/feedback-anchors.d.ts.map +1 -0
- package/dist/operations/feedback-anchors.js +444 -0
- package/dist/operations/feedback-anchors.js.map +1 -0
- package/dist/operations/feedback.d.ts.map +1 -0
- package/dist/operations/feedback.js +234 -0
- package/dist/operations/feedback.js.map +1 -0
- package/dist/operations/index.d.ts.map +1 -0
- package/dist/operations/index.js +10 -0
- package/dist/operations/index.js.map +1 -0
- package/dist/operations/issues.d.ts.map +1 -0
- package/dist/operations/issues.js +411 -0
- package/dist/operations/issues.js.map +1 -0
- package/dist/operations/references.d.ts.map +1 -0
- package/dist/operations/references.js +117 -0
- package/dist/operations/references.js.map +1 -0
- package/dist/operations/relationships.d.ts.map +1 -0
- package/dist/operations/relationships.js +236 -0
- package/dist/operations/relationships.js.map +1 -0
- package/dist/operations/specs.d.ts.map +1 -0
- package/dist/operations/specs.js +290 -0
- package/dist/operations/specs.js.map +1 -0
- package/dist/operations/tags.d.ts.map +1 -0
- package/dist/operations/tags.js +127 -0
- package/dist/operations/tags.js.map +1 -0
- package/dist/operations/transactions.d.ts.map +1 -0
- package/dist/operations/transactions.js +111 -0
- package/dist/operations/transactions.js.map +1 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +442 -0
- package/dist/sync.js.map +1 -0
- package/dist/test-schema.d.ts.map +1 -0
- package/dist/test-schema.js +46 -0
- package/dist/test-schema.js.map +1 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/dist/update-checker.d.ts.map +1 -0
- package/dist/update-checker.js +151 -0
- package/dist/update-checker.js.map +1 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +23 -0
- package/dist/version.js.map +1 -0
- package/dist/watcher.d.ts.map +1 -0
- package/dist/watcher.js +438 -0
- package/dist/watcher.js.map +1 -0
- 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"}
|