@sudocode-ai/local-server 0.1.14 → 0.1.15
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/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/public/assets/index-D_Cq2kbL.css +1 -0
- package/dist/public/assets/index-vAra91Pu.js +917 -0
- package/dist/public/assets/{index-3qSRtUlY.js.map → index-vAra91Pu.js.map} +1 -1
- package/dist/public/index.html +2 -2
- package/dist/routes/executions.d.ts.map +1 -1
- package/dist/routes/executions.js +89 -0
- package/dist/routes/executions.js.map +1 -1
- package/dist/routes/feedback.d.ts.map +1 -1
- package/dist/routes/feedback.js +5 -4
- package/dist/routes/feedback.js.map +1 -1
- package/dist/routes/import.d.ts +142 -0
- package/dist/routes/import.d.ts.map +1 -0
- package/dist/routes/import.js +896 -0
- package/dist/routes/import.js.map +1 -0
- package/dist/routes/issues.d.ts.map +1 -1
- package/dist/routes/issues.js +102 -0
- package/dist/routes/issues.js.map +1 -1
- package/dist/routes/plugins.d.ts +7 -0
- package/dist/routes/plugins.d.ts.map +1 -1
- package/dist/routes/plugins.js +110 -16
- package/dist/routes/plugins.js.map +1 -1
- package/dist/routes/specs.d.ts.map +1 -1
- package/dist/routes/specs.js +133 -5
- package/dist/routes/specs.js.map +1 -1
- package/dist/services/execution-changes-service.d.ts.map +1 -1
- package/dist/services/execution-changes-service.js +17 -7
- package/dist/services/execution-changes-service.js.map +1 -1
- package/dist/services/external-refresh-service.d.ts +104 -0
- package/dist/services/external-refresh-service.d.ts.map +1 -0
- package/dist/services/external-refresh-service.js +520 -0
- package/dist/services/external-refresh-service.js.map +1 -0
- package/dist/services/repo-info.d.ts +4 -0
- package/dist/services/repo-info.d.ts.map +1 -1
- package/dist/services/repo-info.js +42 -5
- package/dist/services/repo-info.js.map +1 -1
- package/package.json +3 -3
- package/dist/public/assets/index-3qSRtUlY.js +0 -844
- package/dist/public/assets/index-p0337DGd.css +0 -1
|
@@ -0,0 +1,520 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Refresh Service - handles refreshing entities from external sources
|
|
3
|
+
*
|
|
4
|
+
* Provides change detection via content_hash comparison and refresh logic
|
|
5
|
+
* for syncing entities with their external sources.
|
|
6
|
+
*/
|
|
7
|
+
import { createHash } from "crypto";
|
|
8
|
+
import { getSpecFromJsonl, getIssueFromJsonl, } from "@sudocode-ai/cli/dist/operations/external-links.js";
|
|
9
|
+
import { loadPlugin, getFirstPartyPlugins, } from "@sudocode-ai/cli/dist/integrations/index.js";
|
|
10
|
+
import { updateExistingSpec } from "./specs.js";
|
|
11
|
+
import { updateExistingIssue } from "./issues.js";
|
|
12
|
+
import { readJSONLSync, writeJSONLSync } from "@sudocode-ai/cli/dist/jsonl.js";
|
|
13
|
+
import * as path from "path";
|
|
14
|
+
// =============================================================================
|
|
15
|
+
// Content Hash Utilities
|
|
16
|
+
// =============================================================================
|
|
17
|
+
/**
|
|
18
|
+
* Compute SHA256 hash of content for change detection
|
|
19
|
+
* Matches the implementation in import.ts
|
|
20
|
+
*/
|
|
21
|
+
export function computeContentHash(title, content) {
|
|
22
|
+
const hash = createHash("sha256");
|
|
23
|
+
hash.update(title);
|
|
24
|
+
hash.update(content || "");
|
|
25
|
+
return hash.digest("hex");
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Detect local changes by comparing current content hash with stored hash
|
|
29
|
+
*
|
|
30
|
+
* @param title - Current entity title
|
|
31
|
+
* @param content - Current entity content
|
|
32
|
+
* @param storedHash - Hash stored in external_link.content_hash
|
|
33
|
+
* @returns true if local changes were detected
|
|
34
|
+
*/
|
|
35
|
+
export function detectLocalChanges(title, content, storedHash) {
|
|
36
|
+
if (!storedHash) {
|
|
37
|
+
// No stored hash means we can't detect changes - assume no local changes
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
const currentHash = computeContentHash(title, content);
|
|
41
|
+
return currentHash !== storedHash;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Compute field-level changes between local entity and remote entity
|
|
45
|
+
*/
|
|
46
|
+
export function computeFieldChanges(localTitle, localContent, remoteTitle, remoteContent) {
|
|
47
|
+
const changes = [];
|
|
48
|
+
if (localTitle !== remoteTitle) {
|
|
49
|
+
changes.push({
|
|
50
|
+
field: "title",
|
|
51
|
+
localValue: localTitle,
|
|
52
|
+
remoteValue: remoteTitle,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
if (localContent !== (remoteContent || "")) {
|
|
56
|
+
changes.push({
|
|
57
|
+
field: "content",
|
|
58
|
+
localValue: localContent,
|
|
59
|
+
remoteValue: remoteContent || "",
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
return changes;
|
|
63
|
+
}
|
|
64
|
+
// =============================================================================
|
|
65
|
+
// External Link Update Utilities
|
|
66
|
+
// =============================================================================
|
|
67
|
+
/**
|
|
68
|
+
* Update an external link on a spec in JSONL
|
|
69
|
+
*/
|
|
70
|
+
function updateSpecExternalLink(sudocodeDir, specId, externalId, updates) {
|
|
71
|
+
const specsPath = path.join(sudocodeDir, "specs.jsonl");
|
|
72
|
+
const specs = readJSONLSync(specsPath, { skipErrors: true });
|
|
73
|
+
const specIndex = specs.findIndex((s) => s.id === specId);
|
|
74
|
+
if (specIndex === -1) {
|
|
75
|
+
throw new Error(`Spec not found: ${specId}`);
|
|
76
|
+
}
|
|
77
|
+
const spec = specs[specIndex];
|
|
78
|
+
const links = spec.external_links || [];
|
|
79
|
+
const linkIndex = links.findIndex((l) => l.external_id === externalId);
|
|
80
|
+
if (linkIndex === -1) {
|
|
81
|
+
throw new Error(`External link not found: ${externalId}`);
|
|
82
|
+
}
|
|
83
|
+
links[linkIndex] = { ...links[linkIndex], ...updates };
|
|
84
|
+
spec.external_links = links;
|
|
85
|
+
spec.updated_at = new Date().toISOString();
|
|
86
|
+
specs[specIndex] = spec;
|
|
87
|
+
writeJSONLSync(specsPath, specs);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Update an external link on an issue in JSONL
|
|
91
|
+
*/
|
|
92
|
+
function updateIssueExternalLink(sudocodeDir, issueId, externalId, updates) {
|
|
93
|
+
const issuesPath = path.join(sudocodeDir, "issues.jsonl");
|
|
94
|
+
const issues = readJSONLSync(issuesPath, { skipErrors: true });
|
|
95
|
+
const issueIndex = issues.findIndex((i) => i.id === issueId);
|
|
96
|
+
if (issueIndex === -1) {
|
|
97
|
+
throw new Error(`Issue not found: ${issueId}`);
|
|
98
|
+
}
|
|
99
|
+
const issue = issues[issueIndex];
|
|
100
|
+
const links = issue.external_links || [];
|
|
101
|
+
const linkIndex = links.findIndex((l) => l.external_id === externalId);
|
|
102
|
+
if (linkIndex === -1) {
|
|
103
|
+
throw new Error(`External link not found: ${externalId}`);
|
|
104
|
+
}
|
|
105
|
+
links[linkIndex] = { ...links[linkIndex], ...updates };
|
|
106
|
+
issue.external_links = links;
|
|
107
|
+
issue.updated_at = new Date().toISOString();
|
|
108
|
+
issues[issueIndex] = issue;
|
|
109
|
+
writeJSONLSync(issuesPath, issues);
|
|
110
|
+
}
|
|
111
|
+
// =============================================================================
|
|
112
|
+
// Refresh Logic
|
|
113
|
+
// =============================================================================
|
|
114
|
+
/**
|
|
115
|
+
* Get a provider instance for the given provider name
|
|
116
|
+
*/
|
|
117
|
+
async function getProvider(providerName, projectPath) {
|
|
118
|
+
const firstPartyPlugins = getFirstPartyPlugins();
|
|
119
|
+
// Try first-party plugins
|
|
120
|
+
for (const p of firstPartyPlugins) {
|
|
121
|
+
if (p.name === providerName) {
|
|
122
|
+
const plugin = await loadPlugin(p.name);
|
|
123
|
+
if (plugin) {
|
|
124
|
+
return plugin.createProvider({}, projectPath);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Try loading as custom plugin
|
|
129
|
+
const plugin = await loadPlugin(providerName);
|
|
130
|
+
if (plugin) {
|
|
131
|
+
return plugin.createProvider({}, projectPath);
|
|
132
|
+
}
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Refresh a spec from its external source
|
|
137
|
+
*
|
|
138
|
+
* @param db - Database instance
|
|
139
|
+
* @param sudocodeDir - Path to .sudocode directory
|
|
140
|
+
* @param projectPath - Path to project root
|
|
141
|
+
* @param specId - ID of spec to refresh
|
|
142
|
+
* @param force - If true, skip conflict check and overwrite local changes
|
|
143
|
+
* @returns Refresh result
|
|
144
|
+
*/
|
|
145
|
+
export async function refreshSpec(db, sudocodeDir, projectPath, specId, force = false) {
|
|
146
|
+
// Get spec from JSONL (includes external_links)
|
|
147
|
+
const spec = getSpecFromJsonl(sudocodeDir, specId);
|
|
148
|
+
if (!spec) {
|
|
149
|
+
return {
|
|
150
|
+
updated: false,
|
|
151
|
+
hasLocalChanges: false,
|
|
152
|
+
error: `Spec not found: ${specId}`,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
// Check for external links
|
|
156
|
+
const externalLinks = spec.external_links || [];
|
|
157
|
+
if (externalLinks.length === 0) {
|
|
158
|
+
return {
|
|
159
|
+
updated: false,
|
|
160
|
+
hasLocalChanges: false,
|
|
161
|
+
error: "Spec has no external links",
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
// Use the first sync-enabled inbound link
|
|
165
|
+
const link = externalLinks.find((l) => l.sync_enabled &&
|
|
166
|
+
(l.sync_direction === "inbound" || l.sync_direction === "bidirectional"));
|
|
167
|
+
if (!link) {
|
|
168
|
+
return {
|
|
169
|
+
updated: false,
|
|
170
|
+
hasLocalChanges: false,
|
|
171
|
+
error: "No sync-enabled inbound external link found",
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
// Get provider
|
|
175
|
+
const provider = await getProvider(link.provider, projectPath);
|
|
176
|
+
if (!provider) {
|
|
177
|
+
return {
|
|
178
|
+
updated: false,
|
|
179
|
+
hasLocalChanges: false,
|
|
180
|
+
error: `Provider not found: ${link.provider}`,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
try {
|
|
184
|
+
await provider.initialize();
|
|
185
|
+
// Fetch fresh entity from provider
|
|
186
|
+
const remoteEntity = await provider.fetchEntity(link.external_id);
|
|
187
|
+
// Handle stale/deleted entity
|
|
188
|
+
if (!remoteEntity) {
|
|
189
|
+
// Mark link as stale but don't delete local entity
|
|
190
|
+
updateSpecExternalLink(sudocodeDir, specId, link.external_id, {
|
|
191
|
+
sync_enabled: false,
|
|
192
|
+
metadata: {
|
|
193
|
+
...link.metadata,
|
|
194
|
+
stale: true,
|
|
195
|
+
stale_reason: "external_entity_not_found",
|
|
196
|
+
stale_at: new Date().toISOString(),
|
|
197
|
+
},
|
|
198
|
+
});
|
|
199
|
+
return {
|
|
200
|
+
updated: false,
|
|
201
|
+
hasLocalChanges: false,
|
|
202
|
+
stale: true,
|
|
203
|
+
error: "External entity no longer exists",
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
// Check for local changes
|
|
207
|
+
const hasLocalChanges = detectLocalChanges(spec.title, spec.content || "", link.content_hash);
|
|
208
|
+
// If local changes exist and not forcing, return preview
|
|
209
|
+
if (hasLocalChanges && !force) {
|
|
210
|
+
const changes = computeFieldChanges(spec.title, spec.content || "", remoteEntity.title, remoteEntity.description || "");
|
|
211
|
+
return {
|
|
212
|
+
updated: false,
|
|
213
|
+
hasLocalChanges: true,
|
|
214
|
+
changes,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
// Update spec with remote data
|
|
218
|
+
const newContentHash = computeContentHash(remoteEntity.title, remoteEntity.description || "");
|
|
219
|
+
const now = new Date().toISOString();
|
|
220
|
+
// Update in database
|
|
221
|
+
const updatedSpec = updateExistingSpec(db, specId, {
|
|
222
|
+
title: remoteEntity.title,
|
|
223
|
+
content: remoteEntity.description || "",
|
|
224
|
+
});
|
|
225
|
+
// Update external link metadata in JSONL
|
|
226
|
+
updateSpecExternalLink(sudocodeDir, specId, link.external_id, {
|
|
227
|
+
content_hash: newContentHash,
|
|
228
|
+
last_synced_at: now,
|
|
229
|
+
external_updated_at: remoteEntity.updated_at,
|
|
230
|
+
});
|
|
231
|
+
return {
|
|
232
|
+
updated: true,
|
|
233
|
+
hasLocalChanges: false,
|
|
234
|
+
entity: updatedSpec,
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
catch (error) {
|
|
238
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
239
|
+
// Check for 404-like errors indicating stale entity
|
|
240
|
+
if (errorMessage.includes("404") ||
|
|
241
|
+
errorMessage.includes("not found") ||
|
|
242
|
+
errorMessage.includes("Not Found")) {
|
|
243
|
+
updateSpecExternalLink(sudocodeDir, specId, link.external_id, {
|
|
244
|
+
sync_enabled: false,
|
|
245
|
+
metadata: {
|
|
246
|
+
...link.metadata,
|
|
247
|
+
stale: true,
|
|
248
|
+
stale_reason: "fetch_failed_404",
|
|
249
|
+
stale_at: new Date().toISOString(),
|
|
250
|
+
},
|
|
251
|
+
});
|
|
252
|
+
return {
|
|
253
|
+
updated: false,
|
|
254
|
+
hasLocalChanges: false,
|
|
255
|
+
stale: true,
|
|
256
|
+
error: "External entity no longer exists",
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
return {
|
|
260
|
+
updated: false,
|
|
261
|
+
hasLocalChanges: false,
|
|
262
|
+
error: `Refresh failed: ${errorMessage}`,
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
finally {
|
|
266
|
+
await provider.dispose();
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Refresh an issue from its external source
|
|
271
|
+
*
|
|
272
|
+
* @param db - Database instance
|
|
273
|
+
* @param sudocodeDir - Path to .sudocode directory
|
|
274
|
+
* @param projectPath - Path to project root
|
|
275
|
+
* @param issueId - ID of issue to refresh
|
|
276
|
+
* @param force - If true, skip conflict check and overwrite local changes
|
|
277
|
+
* @returns Refresh result
|
|
278
|
+
*/
|
|
279
|
+
export async function refreshIssue(db, sudocodeDir, projectPath, issueId, force = false) {
|
|
280
|
+
// Get issue from JSONL (includes external_links)
|
|
281
|
+
const issue = getIssueFromJsonl(sudocodeDir, issueId);
|
|
282
|
+
if (!issue) {
|
|
283
|
+
return {
|
|
284
|
+
updated: false,
|
|
285
|
+
hasLocalChanges: false,
|
|
286
|
+
error: `Issue not found: ${issueId}`,
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
// Check for external links
|
|
290
|
+
const externalLinks = issue.external_links || [];
|
|
291
|
+
if (externalLinks.length === 0) {
|
|
292
|
+
return {
|
|
293
|
+
updated: false,
|
|
294
|
+
hasLocalChanges: false,
|
|
295
|
+
error: "Issue has no external links",
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
// Use the first sync-enabled inbound link
|
|
299
|
+
const link = externalLinks.find((l) => l.sync_enabled &&
|
|
300
|
+
(l.sync_direction === "inbound" || l.sync_direction === "bidirectional"));
|
|
301
|
+
if (!link) {
|
|
302
|
+
return {
|
|
303
|
+
updated: false,
|
|
304
|
+
hasLocalChanges: false,
|
|
305
|
+
error: "No sync-enabled inbound external link found",
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
// Get provider
|
|
309
|
+
const provider = await getProvider(link.provider, projectPath);
|
|
310
|
+
if (!provider) {
|
|
311
|
+
return {
|
|
312
|
+
updated: false,
|
|
313
|
+
hasLocalChanges: false,
|
|
314
|
+
error: `Provider not found: ${link.provider}`,
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
try {
|
|
318
|
+
await provider.initialize();
|
|
319
|
+
// Fetch fresh entity from provider
|
|
320
|
+
const remoteEntity = await provider.fetchEntity(link.external_id);
|
|
321
|
+
// Handle stale/deleted entity
|
|
322
|
+
if (!remoteEntity) {
|
|
323
|
+
// Mark link as stale but don't delete local entity
|
|
324
|
+
updateIssueExternalLink(sudocodeDir, issueId, link.external_id, {
|
|
325
|
+
sync_enabled: false,
|
|
326
|
+
metadata: {
|
|
327
|
+
...link.metadata,
|
|
328
|
+
stale: true,
|
|
329
|
+
stale_reason: "external_entity_not_found",
|
|
330
|
+
stale_at: new Date().toISOString(),
|
|
331
|
+
},
|
|
332
|
+
});
|
|
333
|
+
return {
|
|
334
|
+
updated: false,
|
|
335
|
+
hasLocalChanges: false,
|
|
336
|
+
stale: true,
|
|
337
|
+
error: "External entity no longer exists",
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
// Check for local changes
|
|
341
|
+
const hasLocalChanges = detectLocalChanges(issue.title, issue.content || "", link.content_hash);
|
|
342
|
+
// If local changes exist and not forcing, return preview
|
|
343
|
+
if (hasLocalChanges && !force) {
|
|
344
|
+
const changes = computeFieldChanges(issue.title, issue.content || "", remoteEntity.title, remoteEntity.description || "");
|
|
345
|
+
return {
|
|
346
|
+
updated: false,
|
|
347
|
+
hasLocalChanges: true,
|
|
348
|
+
changes,
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
// Update issue with remote data
|
|
352
|
+
const newContentHash = computeContentHash(remoteEntity.title, remoteEntity.description || "");
|
|
353
|
+
const now = new Date().toISOString();
|
|
354
|
+
// Update in database
|
|
355
|
+
const updatedIssue = updateExistingIssue(db, issueId, {
|
|
356
|
+
title: remoteEntity.title,
|
|
357
|
+
content: remoteEntity.description || "",
|
|
358
|
+
});
|
|
359
|
+
// Update external link metadata in JSONL
|
|
360
|
+
updateIssueExternalLink(sudocodeDir, issueId, link.external_id, {
|
|
361
|
+
content_hash: newContentHash,
|
|
362
|
+
last_synced_at: now,
|
|
363
|
+
external_updated_at: remoteEntity.updated_at,
|
|
364
|
+
});
|
|
365
|
+
return {
|
|
366
|
+
updated: true,
|
|
367
|
+
hasLocalChanges: false,
|
|
368
|
+
entity: updatedIssue,
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
catch (error) {
|
|
372
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
373
|
+
// Check for 404-like errors indicating stale entity
|
|
374
|
+
if (errorMessage.includes("404") ||
|
|
375
|
+
errorMessage.includes("not found") ||
|
|
376
|
+
errorMessage.includes("Not Found")) {
|
|
377
|
+
updateIssueExternalLink(sudocodeDir, issueId, link.external_id, {
|
|
378
|
+
sync_enabled: false,
|
|
379
|
+
metadata: {
|
|
380
|
+
...link.metadata,
|
|
381
|
+
stale: true,
|
|
382
|
+
stale_reason: "fetch_failed_404",
|
|
383
|
+
stale_at: new Date().toISOString(),
|
|
384
|
+
},
|
|
385
|
+
});
|
|
386
|
+
return {
|
|
387
|
+
updated: false,
|
|
388
|
+
hasLocalChanges: false,
|
|
389
|
+
stale: true,
|
|
390
|
+
error: "External entity no longer exists",
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
return {
|
|
394
|
+
updated: false,
|
|
395
|
+
hasLocalChanges: false,
|
|
396
|
+
error: `Refresh failed: ${errorMessage}`,
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
finally {
|
|
400
|
+
await provider.dispose();
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Refresh multiple entities from their external sources
|
|
405
|
+
*
|
|
406
|
+
* @param db - Database instance
|
|
407
|
+
* @param sudocodeDir - Path to .sudocode directory
|
|
408
|
+
* @param projectPath - Path to project root
|
|
409
|
+
* @param options - Filter options for bulk refresh
|
|
410
|
+
* @returns Bulk refresh result
|
|
411
|
+
*/
|
|
412
|
+
export async function bulkRefresh(db, sudocodeDir, projectPath, options = {}) {
|
|
413
|
+
const { provider: providerFilter, entityIds, force = false } = options;
|
|
414
|
+
const results = [];
|
|
415
|
+
let refreshed = 0;
|
|
416
|
+
let skipped = 0;
|
|
417
|
+
let failed = 0;
|
|
418
|
+
let stale = 0;
|
|
419
|
+
// Collect entities to refresh
|
|
420
|
+
const entitiesToRefresh = [];
|
|
421
|
+
// Read specs and issues from JSONL
|
|
422
|
+
const specsPath = path.join(sudocodeDir, "specs.jsonl");
|
|
423
|
+
const issuesPath = path.join(sudocodeDir, "issues.jsonl");
|
|
424
|
+
const specs = readJSONLSync(specsPath, { skipErrors: true });
|
|
425
|
+
const issues = readJSONLSync(issuesPath, { skipErrors: true });
|
|
426
|
+
// Filter specs
|
|
427
|
+
for (const spec of specs) {
|
|
428
|
+
if (entityIds && !entityIds.includes(spec.id))
|
|
429
|
+
continue;
|
|
430
|
+
const links = spec.external_links || [];
|
|
431
|
+
const hasMatchingLink = links.some((l) => l.sync_enabled &&
|
|
432
|
+
(l.sync_direction === "inbound" ||
|
|
433
|
+
l.sync_direction === "bidirectional") &&
|
|
434
|
+
(!providerFilter || l.provider === providerFilter));
|
|
435
|
+
if (hasMatchingLink) {
|
|
436
|
+
entitiesToRefresh.push({ id: spec.id, type: "spec" });
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
// Filter issues
|
|
440
|
+
for (const issue of issues) {
|
|
441
|
+
if (entityIds && !entityIds.includes(issue.id))
|
|
442
|
+
continue;
|
|
443
|
+
const links = issue.external_links || [];
|
|
444
|
+
const hasMatchingLink = links.some((l) => l.sync_enabled &&
|
|
445
|
+
(l.sync_direction === "inbound" ||
|
|
446
|
+
l.sync_direction === "bidirectional") &&
|
|
447
|
+
(!providerFilter || l.provider === providerFilter));
|
|
448
|
+
if (hasMatchingLink) {
|
|
449
|
+
entitiesToRefresh.push({ id: issue.id, type: "issue" });
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
// Refresh each entity
|
|
453
|
+
for (const entity of entitiesToRefresh) {
|
|
454
|
+
try {
|
|
455
|
+
let result;
|
|
456
|
+
if (entity.type === "spec") {
|
|
457
|
+
result = await refreshSpec(db, sudocodeDir, projectPath, entity.id, force);
|
|
458
|
+
}
|
|
459
|
+
else {
|
|
460
|
+
result = await refreshIssue(db, sudocodeDir, projectPath, entity.id, force);
|
|
461
|
+
}
|
|
462
|
+
if (result.stale) {
|
|
463
|
+
stale++;
|
|
464
|
+
results.push({
|
|
465
|
+
entityId: entity.id,
|
|
466
|
+
status: "stale",
|
|
467
|
+
error: result.error,
|
|
468
|
+
});
|
|
469
|
+
}
|
|
470
|
+
else if (result.error) {
|
|
471
|
+
failed++;
|
|
472
|
+
results.push({
|
|
473
|
+
entityId: entity.id,
|
|
474
|
+
status: "failed",
|
|
475
|
+
error: result.error,
|
|
476
|
+
});
|
|
477
|
+
}
|
|
478
|
+
else if (result.updated) {
|
|
479
|
+
refreshed++;
|
|
480
|
+
results.push({
|
|
481
|
+
entityId: entity.id,
|
|
482
|
+
status: "updated",
|
|
483
|
+
});
|
|
484
|
+
}
|
|
485
|
+
else if (result.hasLocalChanges) {
|
|
486
|
+
// Skipped due to local changes (and not forcing)
|
|
487
|
+
skipped++;
|
|
488
|
+
results.push({
|
|
489
|
+
entityId: entity.id,
|
|
490
|
+
status: "skipped",
|
|
491
|
+
error: "Local changes detected - use force=true to overwrite",
|
|
492
|
+
});
|
|
493
|
+
}
|
|
494
|
+
else {
|
|
495
|
+
// No changes needed
|
|
496
|
+
skipped++;
|
|
497
|
+
results.push({
|
|
498
|
+
entityId: entity.id,
|
|
499
|
+
status: "skipped",
|
|
500
|
+
});
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
catch (error) {
|
|
504
|
+
failed++;
|
|
505
|
+
results.push({
|
|
506
|
+
entityId: entity.id,
|
|
507
|
+
status: "failed",
|
|
508
|
+
error: error instanceof Error ? error.message : String(error),
|
|
509
|
+
});
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
return {
|
|
513
|
+
refreshed,
|
|
514
|
+
skipped,
|
|
515
|
+
failed,
|
|
516
|
+
stale,
|
|
517
|
+
results,
|
|
518
|
+
};
|
|
519
|
+
}
|
|
520
|
+
//# sourceMappingURL=external-refresh-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-refresh-service.js","sourceRoot":"","sources":["../../src/services/external-refresh-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,10 @@ export interface RepositoryInfo {
|
|
|
5
5
|
name: string;
|
|
6
6
|
branch: string;
|
|
7
7
|
path: string;
|
|
8
|
+
/** Full owner/repo identifier from git remote (e.g., "anthropic/sudocode") */
|
|
9
|
+
ownerRepo?: string;
|
|
10
|
+
/** Git hosting provider (e.g., "github", "gitlab", "bitbucket") */
|
|
11
|
+
gitProvider?: string;
|
|
8
12
|
}
|
|
9
13
|
export interface BranchInfo {
|
|
10
14
|
current: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo-info.d.ts","sourceRoot":"","sources":["../../src/services/repo-info.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"repo-info.d.ts","sourceRoot":"","sources":["../../src/services/repo-info.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,cAAc,CAAC,CAqFzB;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,CAAC,CA8CrB"}
|
|
@@ -17,18 +17,53 @@ export async function getRepositoryInfo(repoPath) {
|
|
|
17
17
|
if (!isValidRepo) {
|
|
18
18
|
throw new Error("Not a git repository");
|
|
19
19
|
}
|
|
20
|
-
// Get repository name from git remote URL
|
|
20
|
+
// Get repository name and owner/repo from git remote URL
|
|
21
21
|
let repoName = path.basename(repoPath); // Fallback to directory name
|
|
22
|
+
let ownerRepo;
|
|
23
|
+
let gitProvider;
|
|
22
24
|
try {
|
|
23
25
|
const remoteOutput = gitCli["execGit"]("git remote get-url origin", repoPath);
|
|
24
26
|
const remoteUrl = remoteOutput.trim();
|
|
25
|
-
// Extract repo
|
|
27
|
+
// Extract owner/repo from various URL formats:
|
|
26
28
|
// - https://github.com/user/repo.git
|
|
27
29
|
// - git@github.com:user/repo.git
|
|
28
30
|
// - https://github.com/user/repo
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
31
|
+
// - https://gitlab.com/user/repo.git
|
|
32
|
+
// - git@gitlab.com:user/repo.git
|
|
33
|
+
// Detect provider from URL
|
|
34
|
+
if (remoteUrl.includes("github.com")) {
|
|
35
|
+
gitProvider = "github";
|
|
36
|
+
}
|
|
37
|
+
else if (remoteUrl.includes("gitlab.com")) {
|
|
38
|
+
gitProvider = "gitlab";
|
|
39
|
+
}
|
|
40
|
+
else if (remoteUrl.includes("bitbucket.org")) {
|
|
41
|
+
gitProvider = "bitbucket";
|
|
42
|
+
}
|
|
43
|
+
// Extract owner/repo - handle both HTTPS and SSH formats
|
|
44
|
+
let ownerRepoMatch;
|
|
45
|
+
if (remoteUrl.startsWith("git@")) {
|
|
46
|
+
// SSH format: git@github.com:owner/repo.git
|
|
47
|
+
ownerRepoMatch = remoteUrl.match(/:([^/]+\/[^/]+?)(\.git)?$/);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
// HTTPS format: https://github.com/owner/repo.git
|
|
51
|
+
ownerRepoMatch = remoteUrl.match(/(?:github\.com|gitlab\.com|bitbucket\.org)\/([^/]+\/[^/]+?)(\.git)?$/);
|
|
52
|
+
}
|
|
53
|
+
if (ownerRepoMatch && ownerRepoMatch[1]) {
|
|
54
|
+
ownerRepo = ownerRepoMatch[1];
|
|
55
|
+
// Extract repo name from owner/repo
|
|
56
|
+
const parts = ownerRepo.split("/");
|
|
57
|
+
if (parts.length === 2) {
|
|
58
|
+
repoName = parts[1];
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
// Fallback: just extract repo name
|
|
63
|
+
const match = remoteUrl.match(/\/([^\/]+?)(\.git)?$/);
|
|
64
|
+
if (match && match[1]) {
|
|
65
|
+
repoName = match[1];
|
|
66
|
+
}
|
|
32
67
|
}
|
|
33
68
|
}
|
|
34
69
|
catch (error) {
|
|
@@ -48,6 +83,8 @@ export async function getRepositoryInfo(repoPath) {
|
|
|
48
83
|
name: repoName,
|
|
49
84
|
branch,
|
|
50
85
|
path: repoPath,
|
|
86
|
+
ownerRepo,
|
|
87
|
+
gitProvider,
|
|
51
88
|
};
|
|
52
89
|
}
|
|
53
90
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo-info.js","sourceRoot":"","sources":["../../src/services/repo-info.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"repo-info.js","sourceRoot":"","sources":["../../src/services/repo-info.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sudocode-ai/local-server",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.15",
|
|
4
4
|
"description": "Local backend server for sudocode - provides REST API and WebSocket endpoints",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -43,8 +43,8 @@
|
|
|
43
43
|
"dependencies": {
|
|
44
44
|
"@ag-ui/core": "^0.0.39",
|
|
45
45
|
"@modelcontextprotocol/sdk": "^1.24.1",
|
|
46
|
-
"@sudocode-ai/cli": "^0.1.
|
|
47
|
-
"@sudocode-ai/types": "^0.1.
|
|
46
|
+
"@sudocode-ai/cli": "^0.1.15",
|
|
47
|
+
"@sudocode-ai/types": "^0.1.15",
|
|
48
48
|
"@types/ws": "^8.18.1",
|
|
49
49
|
"agent-execution-engine": "^0.0.15",
|
|
50
50
|
"async-mutex": "^0.5.0",
|