@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.
Files changed (41) hide show
  1. package/dist/index.d.ts.map +1 -1
  2. package/dist/index.js +2 -0
  3. package/dist/index.js.map +1 -1
  4. package/dist/public/assets/index-D_Cq2kbL.css +1 -0
  5. package/dist/public/assets/index-vAra91Pu.js +917 -0
  6. package/dist/public/assets/{index-3qSRtUlY.js.map → index-vAra91Pu.js.map} +1 -1
  7. package/dist/public/index.html +2 -2
  8. package/dist/routes/executions.d.ts.map +1 -1
  9. package/dist/routes/executions.js +89 -0
  10. package/dist/routes/executions.js.map +1 -1
  11. package/dist/routes/feedback.d.ts.map +1 -1
  12. package/dist/routes/feedback.js +5 -4
  13. package/dist/routes/feedback.js.map +1 -1
  14. package/dist/routes/import.d.ts +142 -0
  15. package/dist/routes/import.d.ts.map +1 -0
  16. package/dist/routes/import.js +896 -0
  17. package/dist/routes/import.js.map +1 -0
  18. package/dist/routes/issues.d.ts.map +1 -1
  19. package/dist/routes/issues.js +102 -0
  20. package/dist/routes/issues.js.map +1 -1
  21. package/dist/routes/plugins.d.ts +7 -0
  22. package/dist/routes/plugins.d.ts.map +1 -1
  23. package/dist/routes/plugins.js +110 -16
  24. package/dist/routes/plugins.js.map +1 -1
  25. package/dist/routes/specs.d.ts.map +1 -1
  26. package/dist/routes/specs.js +133 -5
  27. package/dist/routes/specs.js.map +1 -1
  28. package/dist/services/execution-changes-service.d.ts.map +1 -1
  29. package/dist/services/execution-changes-service.js +17 -7
  30. package/dist/services/execution-changes-service.js.map +1 -1
  31. package/dist/services/external-refresh-service.d.ts +104 -0
  32. package/dist/services/external-refresh-service.d.ts.map +1 -0
  33. package/dist/services/external-refresh-service.js +520 -0
  34. package/dist/services/external-refresh-service.js.map +1 -0
  35. package/dist/services/repo-info.d.ts +4 -0
  36. package/dist/services/repo-info.d.ts.map +1 -1
  37. package/dist/services/repo-info.js +42 -5
  38. package/dist/services/repo-info.js.map +1 -1
  39. package/package.json +3 -3
  40. package/dist/public/assets/index-3qSRtUlY.js +0 -844
  41. 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;CACd;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,CAgDzB;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,CAAC,CA8CrB"}
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 name from various URL formats:
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
- const match = remoteUrl.match(/\/([^\/]+?)(\.git)?$/);
30
- if (match && match[1]) {
31
- repoName = match[1];
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":"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"}
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;AAiB1D;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAgB;IAEhB,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;IAE5B,8CAA8C;IAC9C,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACvD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IAED,yDAAyD;IACzD,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,6BAA6B;IACrE,IAAI,SAA6B,CAAC;IAClC,IAAI,WAA+B,CAAC;IAEpC,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,CACpC,2BAA2B,EAC3B,QAAQ,CACT,CAAC;QACF,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;QAEtC,+CAA+C;QAC/C,qCAAqC;QACrC,iCAAiC;QACjC,iCAAiC;QACjC,qCAAqC;QACrC,iCAAiC;QAEjC,2BAA2B;QAC3B,IAAI,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACrC,WAAW,GAAG,QAAQ,CAAC;QACzB,CAAC;aAAM,IAAI,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5C,WAAW,GAAG,QAAQ,CAAC;QACzB,CAAC;aAAM,IAAI,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YAC/C,WAAW,GAAG,WAAW,CAAC;QAC5B,CAAC;QAED,yDAAyD;QACzD,IAAI,cAAc,CAAC;QACnB,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,4CAA4C;YAC5C,cAAc,GAAG,SAAS,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,kDAAkD;YAClD,cAAc,GAAG,SAAS,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;QAC3G,CAAC;QAED,IAAI,cAAc,IAAI,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;YACxC,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YAC9B,oCAAoC;YACpC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,mCAAmC;YACnC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACtD,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtB,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,qEAAqE;QACrE,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;IACvE,CAAC;IAED,qBAAqB;IACrB,IAAI,MAAM,GAAG,YAAY,CAAC;IAC1B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAC9B,iCAAiC,EACjC,QAAQ,CACT,CAAC;QACF,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;IAED,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,MAAM;QACN,IAAI,EAAE,QAAQ;QACd,SAAS;QACT,WAAW;KACZ,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,QAAgB;IAEhB,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;IAE5B,8CAA8C;IAC9C,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACvD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IAED,qBAAqB;IACrB,IAAI,aAAa,GAAG,YAAY,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAC9B,iCAAiC,EACjC,QAAQ,CACT,CAAC;QACF,aAAa,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;IAED,yBAAyB;IACzB,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAC9B,wCAAwC,EACxC,QAAQ,CACT,CAAC;QACF,MAAM,UAAU,GAAG,MAAM;aACtB,IAAI,EAAE;aACN,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC/B,QAAQ,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAChD,4DAA4D;QAC5D,IAAI,aAAa,KAAK,YAAY,EAAE,CAAC;YACnC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,aAAa;QACtB,QAAQ;KACT,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sudocode-ai/local-server",
3
- "version": "0.1.14",
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.14",
47
- "@sudocode-ai/types": "^0.1.14",
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",