@intrect/openswarm 0.4.4 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/README.md +33 -16
  2. package/config.example.yaml +14 -8
  3. package/dist/adapters/agenticLoop.d.ts +30 -1
  4. package/dist/adapters/agenticLoop.d.ts.map +1 -1
  5. package/dist/adapters/agenticLoop.js +150 -60
  6. package/dist/adapters/agenticLoop.js.map +1 -1
  7. package/dist/adapters/codex.d.ts +1 -0
  8. package/dist/adapters/codex.d.ts.map +1 -1
  9. package/dist/adapters/codex.js +40 -5
  10. package/dist/adapters/codex.js.map +1 -1
  11. package/dist/adapters/gpt.d.ts.map +1 -1
  12. package/dist/adapters/gpt.js +18 -4
  13. package/dist/adapters/gpt.js.map +1 -1
  14. package/dist/adapters/index.d.ts +3 -2
  15. package/dist/adapters/index.d.ts.map +1 -1
  16. package/dist/adapters/index.js +8 -5
  17. package/dist/adapters/index.js.map +1 -1
  18. package/dist/adapters/lmstudio.d.ts +8 -0
  19. package/dist/adapters/lmstudio.d.ts.map +1 -0
  20. package/dist/adapters/lmstudio.js +41 -0
  21. package/dist/adapters/lmstudio.js.map +1 -0
  22. package/dist/adapters/local.d.ts +16 -1
  23. package/dist/adapters/local.d.ts.map +1 -1
  24. package/dist/adapters/local.js +45 -13
  25. package/dist/adapters/local.js.map +1 -1
  26. package/dist/adapters/openrouter.d.ts +56 -0
  27. package/dist/adapters/openrouter.d.ts.map +1 -0
  28. package/dist/adapters/openrouter.js +294 -0
  29. package/dist/adapters/openrouter.js.map +1 -0
  30. package/dist/adapters/tools.d.ts +27 -2
  31. package/dist/adapters/tools.d.ts.map +1 -1
  32. package/dist/adapters/tools.js +99 -12
  33. package/dist/adapters/tools.js.map +1 -1
  34. package/dist/adapters/types.d.ts +20 -1
  35. package/dist/adapters/types.d.ts.map +1 -1
  36. package/dist/agents/draftAnalyzer.d.ts +1 -1
  37. package/dist/agents/draftAnalyzer.d.ts.map +1 -1
  38. package/dist/agents/draftAnalyzer.js +3 -3
  39. package/dist/agents/draftAnalyzer.js.map +1 -1
  40. package/dist/agents/pairPipeline.d.ts.map +1 -1
  41. package/dist/agents/pairPipeline.js +102 -3
  42. package/dist/agents/pairPipeline.js.map +1 -1
  43. package/dist/agents/worker.d.ts +6 -0
  44. package/dist/agents/worker.d.ts.map +1 -1
  45. package/dist/agents/worker.js +22 -2
  46. package/dist/agents/worker.js.map +1 -1
  47. package/dist/auth/index.d.ts +2 -1
  48. package/dist/auth/index.d.ts.map +1 -1
  49. package/dist/auth/index.js +2 -1
  50. package/dist/auth/index.js.map +1 -1
  51. package/dist/auth/oauthPkce.d.ts +4 -3
  52. package/dist/auth/oauthPkce.d.ts.map +1 -1
  53. package/dist/auth/oauthPkce.js +21 -7
  54. package/dist/auth/oauthPkce.js.map +1 -1
  55. package/dist/auth/oauthStore.d.ts +11 -1
  56. package/dist/auth/oauthStore.d.ts.map +1 -1
  57. package/dist/auth/oauthStore.js +4 -0
  58. package/dist/auth/oauthStore.js.map +1 -1
  59. package/dist/auth/openrouterPkce.d.ts +29 -0
  60. package/dist/auth/openrouterPkce.d.ts.map +1 -0
  61. package/dist/auth/openrouterPkce.js +222 -0
  62. package/dist/auth/openrouterPkce.js.map +1 -0
  63. package/dist/automation/autonomousRunner.d.ts +16 -6
  64. package/dist/automation/autonomousRunner.d.ts.map +1 -1
  65. package/dist/automation/autonomousRunner.js +54 -57
  66. package/dist/automation/autonomousRunner.js.map +1 -1
  67. package/dist/automation/runnerExecution.js +1 -1
  68. package/dist/automation/runnerExecution.js.map +1 -1
  69. package/dist/automation/runnerTypes.d.ts +1 -1
  70. package/dist/automation/runnerTypes.d.ts.map +1 -1
  71. package/dist/cli/authHandler.d.ts +8 -5
  72. package/dist/cli/authHandler.d.ts.map +1 -1
  73. package/dist/cli/authHandler.js +95 -35
  74. package/dist/cli/authHandler.js.map +1 -1
  75. package/dist/cli.js +5 -4
  76. package/dist/cli.js.map +1 -1
  77. package/dist/core/config.d.ts +39 -13
  78. package/dist/core/config.d.ts.map +1 -1
  79. package/dist/core/config.js +33 -15
  80. package/dist/core/config.js.map +1 -1
  81. package/dist/core/eventHub.d.ts +22 -0
  82. package/dist/core/eventHub.d.ts.map +1 -1
  83. package/dist/core/eventHub.js.map +1 -1
  84. package/dist/core/service.js +2 -2
  85. package/dist/core/service.js.map +1 -1
  86. package/dist/core/types.d.ts +2 -2
  87. package/dist/core/types.d.ts.map +1 -1
  88. package/dist/discord/discordCore.d.ts.map +1 -1
  89. package/dist/discord/discordCore.js +16 -103
  90. package/dist/discord/discordCore.js.map +1 -1
  91. package/dist/locale/prompts/en.d.ts.map +1 -1
  92. package/dist/locale/prompts/en.js +26 -18
  93. package/dist/locale/prompts/en.js.map +1 -1
  94. package/dist/locale/prompts/ko.d.ts.map +1 -1
  95. package/dist/locale/prompts/ko.js +25 -18
  96. package/dist/locale/prompts/ko.js.map +1 -1
  97. package/dist/locale/types.d.ts +6 -0
  98. package/dist/locale/types.d.ts.map +1 -1
  99. package/dist/memory/repoKnowledge.d.ts +33 -0
  100. package/dist/memory/repoKnowledge.d.ts.map +1 -0
  101. package/dist/memory/repoKnowledge.js +97 -0
  102. package/dist/memory/repoKnowledge.js.map +1 -0
  103. package/dist/support/chat.js +8 -22
  104. package/dist/support/chat.js.map +1 -1
  105. package/dist/support/chatBackend.d.ts.map +1 -1
  106. package/dist/support/chatBackend.js +37 -83
  107. package/dist/support/chatBackend.js.map +1 -1
  108. package/dist/support/chatTui.d.ts.map +1 -1
  109. package/dist/support/chatTui.js +16 -19
  110. package/dist/support/chatTui.js.map +1 -1
  111. package/dist/support/dashboardHtml.d.ts +1 -1
  112. package/dist/support/dashboardHtml.d.ts.map +1 -1
  113. package/dist/support/dashboardHtml.js +318 -65
  114. package/dist/support/dashboardHtml.js.map +1 -1
  115. package/dist/support/projectMapper.d.ts.map +1 -1
  116. package/dist/support/projectMapper.js +29 -1
  117. package/dist/support/projectMapper.js.map +1 -1
  118. package/dist/support/repoMetadata.d.ts +44 -0
  119. package/dist/support/repoMetadata.d.ts.map +1 -0
  120. package/dist/support/repoMetadata.js +79 -0
  121. package/dist/support/repoMetadata.js.map +1 -0
  122. package/dist/support/web.d.ts.map +1 -1
  123. package/dist/support/web.js +53 -6
  124. package/dist/support/web.js.map +1 -1
  125. package/package.json +1 -1
@@ -6,37 +6,53 @@ const DASHBOARD_HTML = `<!DOCTYPE html>
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
7
  <title>OpenSwarm :: Supervisor</title>
8
8
  <style>
9
+ /*
10
+ * Design tokens — adapted from VEGA (GitHub Dark inspired).
11
+ * Legacy variable names are preserved so the rest of the stylesheet keeps
12
+ * working unchanged; only the values shifted to a calmer, more readable
13
+ * palette while keeping the semantic intent (--green = primary action,
14
+ * --amber = warning, --red = destructive, --dim = secondary text).
15
+ */
9
16
  :root {
10
- --bg: #0a0c0a;
11
- --bg2: #0d100d;
12
- --bg3: #111411;
13
- --green: #00ff41;
14
- --green-dim: #003a00;
15
- --green-mid: #00aa00;
16
- --green-lo: #005500;
17
- --cyan: #00ccdd;
18
- --cyan-dim: #003344;
19
- --amber: #ffaa00;
20
- --red: #ff3333;
21
- --white: #ccddcc;
22
- --dim: #445544;
23
- --border: #1a2a1a;
24
- --border2: #0d1a0d;
17
+ --bg: #0d1117; /* page background */
18
+ --bg2: #161b22; /* surface (cards, header) */
19
+ --bg3: #1c2128; /* surface raised (hover) */
20
+ --green: #58a6ff; /* primary accent (was matrix green) */
21
+ --green-dim: rgba(88, 166, 255, 0.12);
22
+ --green-mid: #58a6ff;
23
+ --green-lo: #30363d;
24
+ --cyan: #79c0ff;
25
+ --cyan-dim: rgba(121, 192, 255, 0.14);
26
+ --amber: #d29922;
27
+ --red: #f85149;
28
+ --white: #c9d1d9; /* primary text */
29
+ --dim: #8b949e; /* muted text */
30
+ --border: #30363d;
31
+ --border2: rgba(48, 54, 61, 0.55);
32
+ --radius-sm: 6px;
33
+ --radius-md: 8px;
34
+ --radius-lg: 12px;
25
35
  }
26
36
  * { box-sizing: border-box; margin: 0; padding: 0; }
27
37
  html, body { height: 100%; overflow: hidden; }
28
38
  body {
29
- font-family: 'Cascadia Code', 'JetBrains Mono', 'Fira Code', 'Consolas', monospace;
39
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Arial, sans-serif;
30
40
  background: var(--bg);
31
41
  color: var(--white);
32
- font-size: 13px;
33
- line-height: 1.4;
42
+ font-size: 14px;
43
+ line-height: 1.5;
44
+ -webkit-font-smoothing: antialiased;
45
+ }
46
+ /* Monospace contexts (logs, paths, IDs) still use a mono stack */
47
+ code, pre, .mono, .log-line, .repo-item-path, .scan-path-row .path, .issue-id {
48
+ font-family: "SF Mono", "JetBrains Mono", "Fira Code", Consolas, monospace;
34
49
  }
35
50
 
36
51
  /* ===== SCROLLBAR ===== */
37
- ::-webkit-scrollbar { width: 4px; }
38
- ::-webkit-scrollbar-track { background: var(--bg); }
39
- ::-webkit-scrollbar-thumb { background: var(--green-lo); border-radius: 2px; }
52
+ ::-webkit-scrollbar { width: 8px; height: 8px; }
53
+ ::-webkit-scrollbar-track { background: transparent; }
54
+ ::-webkit-scrollbar-thumb { background: var(--border); border-radius: 4px; }
55
+ ::-webkit-scrollbar-thumb:hover { background: var(--dim); }
40
56
 
41
57
  /* ===== HEADER ===== */
42
58
  header {
@@ -70,17 +86,21 @@ const DASHBOARD_HTML = `<!DOCTYPE html>
70
86
  #sse-status.disconnected { border-color: var(--red); color: var(--red); }
71
87
  .btn {
72
88
  font-family: inherit;
73
- font-size: 10px;
74
- padding: 2px 10px;
75
- background: transparent;
76
- border: 1px solid var(--green-lo);
77
- color: var(--green-mid);
89
+ font-size: 11px;
90
+ font-weight: 500;
91
+ padding: 4px 12px;
92
+ background: var(--bg2);
93
+ border: 1px solid var(--border);
94
+ border-radius: var(--radius-sm);
95
+ color: var(--white);
78
96
  cursor: pointer;
79
- letter-spacing: 0.1em;
80
- transition: all 0.15s;
97
+ letter-spacing: 0.04em;
98
+ transition: border-color 0.15s, background 0.15s, color 0.15s;
81
99
  }
82
100
  .btn:hover:not(:disabled) { border-color: var(--green); color: var(--green); background: var(--green-dim); }
83
101
  .btn:disabled { opacity: 0.4; cursor: default; }
102
+ .btn.primary { background: var(--green); border-color: var(--green); color: #0d1117; font-weight: 600; }
103
+ .btn.primary:hover:not(:disabled) { opacity: 0.88; background: var(--green); color: #0d1117; }
84
104
  .btn-active { border-color: var(--amber); color: var(--amber); }
85
105
  .btn-active:hover:not(:disabled) { background: #332200; border-color: var(--amber); }
86
106
  .btn-danger { border-color: #551111; color: var(--red); }
@@ -312,22 +332,58 @@ const DASHBOARD_HTML = `<!DOCTYPE html>
312
332
  .proc-kill:hover { background: #220000; border-color: var(--red); }
313
333
 
314
334
  /* ===== PIPELINE ===== */
335
+ .stage-block {
336
+ border-bottom: 1px solid var(--border2);
337
+ }
315
338
  .stage-row {
316
339
  display: flex; align-items: center; gap: 6px;
317
- padding: 3px 0; border-bottom: 1px solid var(--border2);
340
+ padding: 4px 8px;
318
341
  font-size: 11px;
342
+ cursor: pointer;
343
+ transition: background 0.12s;
344
+ }
345
+ .stage-row:hover { background: var(--bg3); }
346
+ .stage-row.has-details::after {
347
+ content: "›"; color: var(--dim); margin-left: 4px;
348
+ transition: transform 0.15s;
349
+ }
350
+ .stage-block.expanded .stage-row.has-details::after {
351
+ transform: rotate(90deg); display: inline-block;
319
352
  }
320
353
  .sdot { width: 6px; height: 6px; border-radius: 50%; flex-shrink: 0; background: var(--dim); }
321
354
  .sdot.start { background: var(--amber); }
322
355
  .sdot.complete { background: var(--green); }
323
356
  .sdot.fail { background: var(--red); }
324
357
  .sname { color: var(--white); min-width: 70px; }
325
- .srepo { color: var(--green-lo); font-size: 9px; min-width: 50px; max-width: 90px; flex-shrink: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
358
+ .srepo { color: var(--dim); font-size: 10px; min-width: 50px; max-width: 90px; flex-shrink: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
326
359
  .stask { color: var(--cyan); font-size: 10px; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
360
+ .ssummary {
361
+ color: var(--white); font-size: 11px; flex: 2;
362
+ overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
363
+ opacity: 0.85;
364
+ }
327
365
  .selapsed { color: var(--amber); font-size: 9px; flex-shrink: 0; min-width: 36px; text-align: right; }
328
366
  .smodel { color: var(--dim); font-size: 9px; flex-shrink: 0; min-width: 56px; text-align: right; }
329
367
  .stokens { color: var(--amber); font-size: 9px; flex-shrink: 0; min-width: 80px; text-align: right; white-space: nowrap; }
330
- .sstatus { margin-left: auto; font-size: 9px; color: var(--dim); text-transform: uppercase; letter-spacing: 0.06em; flex-shrink: 0; }
368
+ .sstatus { font-size: 9px; color: var(--dim); text-transform: uppercase; letter-spacing: 0.06em; flex-shrink: 0; }
369
+ /* Expanded details */
370
+ .stage-details {
371
+ display: none;
372
+ padding: 8px 14px 10px 22px;
373
+ background: rgba(0,0,0,0.18);
374
+ font-size: 11px;
375
+ color: var(--white);
376
+ border-top: 1px dashed var(--border2);
377
+ }
378
+ .stage-block.expanded .stage-details { display: block; }
379
+ .stage-details .sd-line { display: flex; gap: 8px; padding: 1px 0; align-items: baseline; }
380
+ .stage-details .sd-key { color: var(--dim); font-size: 10px; min-width: 70px; text-transform: uppercase; letter-spacing: 0.06em; }
381
+ .stage-details .sd-val { color: var(--white); font-size: 11px; flex: 1; word-break: break-all; }
382
+ .stage-details ul { margin: 2px 0 4px 14px; padding: 0; }
383
+ .stage-details li { font-family: "SF Mono", "JetBrains Mono", monospace; font-size: 10px; color: var(--cyan); padding: 1px 0; }
384
+ .sd-decision-approve { color: var(--green); font-weight: 600; }
385
+ .sd-decision-revise { color: var(--amber); font-weight: 600; }
386
+ .sd-decision-reject { color: var(--red); font-weight: 600; }
331
387
 
332
388
  /* ===== LOG TAB BAR ===== */
333
389
  .log-tab-bar {
@@ -632,31 +688,55 @@ const DASHBOARD_HTML = `<!DOCTYPE html>
632
688
  </div>
633
689
 
634
690
  <!-- REPO PICKER OVERLAY -->
635
- <div id="repo-picker" style="display:none;position:fixed;inset:0;background:rgba(0,0,0,0.7);z-index:100;align-items:center;justify-content:center">
636
- <div style="background:#0d100d;border:1px solid #1a2a1a;width:500px;max-height:70vh;display:flex;flex-direction:column">
637
- <div style="padding:8px 12px;border-bottom:1px solid #1a2a1a;display:flex;align-items:center;gap:8px">
638
- <span style="color:#00aa00;font-size:11px;text-transform:uppercase;letter-spacing:.1em">ADD REPOSITORY</span>
639
- <button onclick="closeRepoPicker()" style="margin-left:auto;background:transparent;border:none;color:#445544;cursor:pointer;font-size:14px">✕</button>
691
+ <div id="repo-picker" style="display:none;position:fixed;inset:0;background:rgba(0,0,0,0.65);backdrop-filter:blur(4px);z-index:100;align-items:center;justify-content:center">
692
+ <div style="background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-lg);width:560px;max-height:75vh;display:flex;flex-direction:column;box-shadow:0 10px 32px rgba(0,0,0,0.5)">
693
+ <div style="padding:14px 18px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:8px">
694
+ <span style="color:var(--white);font-size:13px;font-weight:600;letter-spacing:.04em">Add repository</span>
695
+ <button onclick="closeRepoPicker()" style="margin-left:auto;background:transparent;border:none;color:var(--dim);cursor:pointer;font-size:18px;line-height:1;padding:0 4px;border-radius:4px" onmouseover="this.style.color='var(--white)'" onmouseout="this.style.color='var(--dim)'">✕</button>
640
696
  </div>
641
- <div style="padding:6px 12px;border-bottom:1px solid #1a2a1a">
642
- <input id="repo-search" type="text" placeholder="filter repositories..."
643
- style="width:100%;background:transparent;border:none;outline:none;font-family:inherit;font-size:12px;color:#00ff41;caret-color:#00ff41"
697
+ <div style="padding:10px 18px;border-bottom:1px solid var(--border2)">
698
+ <input id="repo-search" type="text" placeholder="Filter repositories"
699
+ style="width:100%;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);outline:none;font-family:inherit;font-size:13px;color:var(--white);padding:7px 10px;caret-color:var(--green)"
644
700
  oninput="filterRepos(this.value)" onkeydown="if(event.key==='Escape')closeRepoPicker()">
645
701
  </div>
646
- <div id="repo-picker-list" style="overflow-y:auto;flex:1;padding:4px 0"></div>
647
- <div id="scan-paths-section" style="border-top:1px solid #1a2a1a;padding:8px 12px">
648
- <div style="color:#00aa00;font-size:10px;text-transform:uppercase;letter-spacing:.1em;margin-bottom:6px">SCAN PATHS</div>
702
+ <div id="repo-picker-list" style="overflow-y:auto;flex:1;padding:6px 0"></div>
703
+ <div id="scan-paths-section" style="border-top:1px solid var(--border);padding:12px 18px;background:rgba(13,17,23,0.4)">
704
+ <div style="color:var(--dim);font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;margin-bottom:8px">Scan paths</div>
649
705
  <div id="scan-paths-list"></div>
650
- <div style="display:flex;gap:4px;margin-top:6px">
651
- <input id="scan-path-input" type="text" placeholder="/path/to/scan"
652
- style="flex:1;background:transparent;border:1px solid #1a2a1a;outline:none;font-family:inherit;font-size:11px;color:#00ff41;padding:3px 6px;caret-color:#00ff41"
706
+ <div style="display:flex;gap:6px;margin-top:10px">
707
+ <button class="btn" style="flex:1;justify-content:center" onclick="openFolderBrowser()">📁 Browse for folder…</button>
708
+ <button class="btn" style="font-size:11px" onclick="toggleManualPathInput()" title="Type a path manually">⌨</button>
709
+ </div>
710
+ <div id="manual-path-row" style="display:none;gap:6px;margin-top:6px">
711
+ <input id="scan-path-input" type="text" placeholder="/absolute/path/to/scan"
712
+ style="flex:1;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);outline:none;font-family:inherit;font-size:12px;color:var(--white);padding:5px 8px;caret-color:var(--green)"
653
713
  onkeydown="if(event.key==='Enter')addScanPath()">
654
- <button class="btn" style="font-size:9px;padding:1px 6px" onclick="addScanPath()">+ ADD</button>
714
+ <button class="btn primary" style="font-size:11px" onclick="addScanPath()">Add</button>
655
715
  </div>
656
716
  </div>
657
717
  </div>
658
718
  </div>
659
719
 
720
+ <!-- FOLDER BROWSER OVERLAY (native-style picker, server-side fs) -->
721
+ <div id="folder-browser" style="display:none;position:fixed;inset:0;background:rgba(0,0,0,0.65);backdrop-filter:blur(4px);z-index:110;align-items:center;justify-content:center">
722
+ <div style="background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-lg);width:620px;max-height:80vh;display:flex;flex-direction:column;box-shadow:0 10px 32px rgba(0,0,0,0.5)">
723
+ <div style="padding:14px 18px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:8px">
724
+ <span style="color:var(--white);font-size:13px;font-weight:600;letter-spacing:.04em">Choose folder to scan</span>
725
+ <button onclick="closeFolderBrowser()" style="margin-left:auto;background:transparent;border:none;color:var(--dim);cursor:pointer;font-size:18px;line-height:1;padding:0 4px;border-radius:4px" onmouseover="this.style.color='var(--white)'" onmouseout="this.style.color='var(--dim)'">✕</button>
726
+ </div>
727
+ <div style="padding:10px 18px;border-bottom:1px solid var(--border2);display:flex;align-items:center;gap:6px">
728
+ <button class="btn" id="fb-up" style="font-size:11px;padding:3px 10px" onclick="folderBrowserUp()" title="Parent directory">↑ Up</button>
729
+ <input id="fb-path" type="text" readonly
730
+ style="flex:1;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);outline:none;font-family:'SF Mono',monospace;font-size:12px;color:var(--white);padding:5px 10px">
731
+ </div>
732
+ <div id="fb-list" style="overflow-y:auto;flex:1;padding:4px 0"></div>
733
+ <div style="padding:12px 18px;border-top:1px solid var(--border);display:flex;gap:8px;justify-content:flex-end">
734
+ <button class="btn" onclick="closeFolderBrowser()">Cancel</button>
735
+ <button class="btn primary" id="fb-select" onclick="folderBrowserSelect()">Select this folder</button>
736
+ </div>
737
+ </div>
738
+ </div>
739
+
660
740
  <!-- MIDDLE: PIPELINE + LOG -->
661
741
  <div class="col">
662
742
  <div class="panel" style="flex: 0 0 38%">
@@ -1384,9 +1464,13 @@ const DASHBOARD_HTML = `<!DOCTYPE html>
1384
1464
  }
1385
1465
  function shortModel(name) {
1386
1466
  if (!name) return "";
1467
+ // Order matters: most specific suffix first so 'sonnet-4-6' isn't
1468
+ // captured by the generic 'sonnet-4' fallback below.
1469
+ if (name.includes("opus-4-7")) return "opus-4.7";
1470
+ if (name.includes("opus-4-6")) return "opus-4.6";
1471
+ if (name.includes("sonnet-4-6")) return "sonnet-4.6";
1387
1472
  if (name.includes("sonnet-4-5")) return "sonnet-4.5";
1388
1473
  if (name.includes("haiku-4-5")) return "haiku-4.5";
1389
- if (name.includes("opus-4-6")) return "opus-4.6";
1390
1474
  if (name.includes("opus-4")) return "opus-4";
1391
1475
  if (name.includes("sonnet-4")) return "sonnet-4";
1392
1476
  var parts = name.split("-");
@@ -1398,12 +1482,73 @@ const DASHBOARD_HTML = `<!DOCTYPE html>
1398
1482
  if (n >= 1000) return (n / 1000).toFixed(1) + "k";
1399
1483
  return String(n);
1400
1484
  }
1485
+ function buildStageDetails(r) {
1486
+ // Builds the expanded "what did the worker actually do" panel for
1487
+ // a pipeline:stage payload. Returns "" when there's nothing to show.
1488
+ const lines = [];
1489
+ function addLine(key, valHtml) {
1490
+ lines.push(
1491
+ "<div class=\\"sd-line\\"><div class=\\"sd-key\\">" + escapeHtml(key) + "</div>" +
1492
+ "<div class=\\"sd-val\\">" + valHtml + "</div></div>"
1493
+ );
1494
+ }
1495
+ function addList(key, items) {
1496
+ const ul = items.map(function(s) { return "<li>" + escapeHtml(String(s)) + "</li>"; }).join("");
1497
+ lines.push(
1498
+ "<div class=\\"sd-line\\"><div class=\\"sd-key\\">" + escapeHtml(key) + "</div>" +
1499
+ "<div class=\\"sd-val\\"><ul>" + ul + "</ul></div></div>"
1500
+ );
1501
+ }
1502
+
1503
+ if (r.summary) addLine("Summary", escapeHtml(r.summary));
1504
+ if (r.decision) {
1505
+ const cls = "sd-decision-" + r.decision;
1506
+ addLine("Decision", "<span class=\\"" + cls + "\\">" + escapeHtml(r.decision.toUpperCase()) + "</span>");
1507
+ }
1508
+ if (r.feedback) addLine("Feedback", escapeHtml(r.feedback));
1509
+ if (Array.isArray(r.filesChanged) && r.filesChanged.length > 0) {
1510
+ const label = "Files (" + (r.filesChangedCount || r.filesChanged.length) + ")";
1511
+ addList(label, r.filesChanged);
1512
+ }
1513
+ if (Array.isArray(r.commands) && r.commands.length > 0) {
1514
+ const label = "Commands (" + (r.commandsCount || r.commands.length) + ")";
1515
+ addList(label, r.commands);
1516
+ }
1517
+ if (Array.isArray(r.issues) && r.issues.length > 0) {
1518
+ const label = "Issues (" + (r.issuesCount || r.issues.length) + ")";
1519
+ addList(label, r.issues);
1520
+ }
1521
+ if (Array.isArray(r.failedTests) && r.failedTests.length > 0) {
1522
+ addList("Failed tests", r.failedTests);
1523
+ }
1524
+ if (r.passed != null || r.failed != null) {
1525
+ addLine("Tests", escapeHtml((r.passed || 0) + " passed, " + (r.failed || 0) + " failed" + (r.coverage != null ? " — coverage " + r.coverage + "%" : "")));
1526
+ }
1527
+ if (r.confidencePercent != null) addLine("Confidence", escapeHtml(r.confidencePercent + "%"));
1528
+ if (r.haltReason) addLine("Halt", escapeHtml(r.haltReason));
1529
+ if (r.bsScore != null) addLine("BS score", escapeHtml(String(r.bsScore)));
1530
+ if (r.criticalCount || r.warningCount) {
1531
+ addLine("Audit", escapeHtml((r.criticalCount || 0) + " critical, " + (r.warningCount || 0) + " warnings"));
1532
+ }
1533
+ if (r.changelogEntry) addLine("Changelog", escapeHtml(r.changelogEntry));
1534
+ if (r.durationMs != null) addLine("Duration", escapeHtml((r.durationMs / 1000).toFixed(1) + "s"));
1535
+ if (r.error) {
1536
+ addLine("Error", "<span style=\\"color:var(--red)\\">" + escapeHtml(r.error) + "</span>");
1537
+ }
1538
+ return lines.join("");
1539
+ }
1540
+
1541
+ function toggleStageDetails(idx) {
1542
+ const block = document.querySelector("[data-stage-idx=\\"" + idx + "\\"]");
1543
+ if (block) block.classList.toggle("expanded");
1544
+ }
1545
+
1401
1546
  function renderStages() {
1402
1547
  const el = document.getElementById("stage-list");
1403
1548
  const cnt = document.getElementById("stage-count");
1404
1549
  if (!stageRows.length) { el.innerHTML = "<div class=\\"empty\\">no pipeline events</div>"; return; }
1405
1550
  if (cnt) cnt.textContent = stageRows.length + "/" + MAX_STAGE;
1406
- el.innerHTML = stageRows.slice().reverse().map(r => {
1551
+ el.innerHTML = stageRows.slice().reverse().map((r, i) => {
1407
1552
  const info = r.taskId ? taskTitleMap.get(r.taskId) : null;
1408
1553
  let taskLabel = "";
1409
1554
  if (info) {
@@ -1413,10 +1558,8 @@ const DASHBOARD_HTML = `<!DOCTYPE html>
1413
1558
  } else if (r.taskId) {
1414
1559
  taskLabel = r.taskId.slice(0, 8);
1415
1560
  }
1416
- // repo name from projectPath
1417
1561
  const projPath = r.taskId ? taskProjectMap.get(r.taskId) : null;
1418
1562
  const repoName = projPath ? projPath.split("/").pop() : "";
1419
- // elapsed time
1420
1563
  const startTs = r.taskId ? taskStartMap.get(r.taskId) : null;
1421
1564
  let elapsed = "";
1422
1565
  if (startTs) {
@@ -1425,23 +1568,48 @@ const DASHBOARD_HTML = `<!DOCTYPE html>
1425
1568
  else if (sec < 3600) elapsed = Math.floor(sec / 60) + "m" + (sec % 60) + "s";
1426
1569
  else elapsed = Math.floor(sec / 3600) + "h" + Math.floor((sec % 3600) / 60) + "m";
1427
1570
  }
1428
- // model/token info (only on complete)
1429
- var modelStr = r.model ? shortModel(r.model) : "";
1430
- var tokenStr = "";
1571
+ const modelStr = r.model ? shortModel(r.model) : "";
1572
+ let tokenStr = "";
1431
1573
  if (r.inputTokens || r.outputTokens) {
1432
1574
  tokenStr = fmtTokens(r.inputTokens) + "/" + fmtTokens(r.outputTokens);
1433
1575
  if (r.costUsd != null) tokenStr += " $" + r.costUsd.toFixed(2);
1434
1576
  }
1577
+
1578
+ // Inline summary on the row itself, so the user sees *what* happened
1579
+ // without having to expand.
1580
+ let inlineSummary = "";
1581
+ if (r.decision) {
1582
+ const cls = "sd-decision-" + r.decision;
1583
+ inlineSummary = "<span class=\\"" + cls + "\\">" + escapeHtml(r.decision.toUpperCase()) + "</span>" +
1584
+ (r.feedback ? " · " + escapeHtml(r.feedback.slice(0, 80)) : "");
1585
+ } else if (r.summary) {
1586
+ inlineSummary = escapeHtml(r.summary);
1587
+ if (r.filesChangedCount > 0) inlineSummary += " · " + r.filesChangedCount + " files";
1588
+ } else if (r.passed != null || r.failed != null) {
1589
+ inlineSummary = "✓ " + (r.passed || 0) + " ✗ " + (r.failed || 0);
1590
+ } else if (r.error) {
1591
+ inlineSummary = "<span style=\\"color:var(--red)\\">" + escapeHtml(r.error.slice(0, 120)) + "</span>";
1592
+ }
1593
+
1594
+ const detailsHtml = buildStageDetails(r);
1595
+ const hasDetails = detailsHtml.length > 0;
1596
+ const rowClass = "stage-row" + (hasDetails ? " has-details" : "");
1597
+ const onclick = hasDetails ? " onclick=\\"toggleStageDetails(" + i + ")\\"" : "";
1598
+
1435
1599
  return (
1436
- "<div class=\\"stage-row\\">" +
1437
- "<div class=\\"sdot " + (r.status || "") + "\\"></div>" +
1438
- "<div class=\\"srepo\\">" + escapeHtml(repoName) + "</div>" +
1439
- "<div class=\\"sname\\">" + escapeHtml(r.stage) + "</div>" +
1440
- "<div class=\\"stask\\" title=\\"" + escapeAttr(r.taskId || "") + "\\">" + escapeHtml(taskLabel) + "</div>" +
1441
- "<div class=\\"smodel\\">" + escapeHtml(modelStr) + "</div>" +
1442
- "<div class=\\"stokens\\">" + escapeHtml(tokenStr) + "</div>" +
1443
- "<div class=\\"selapsed\\">" + elapsed + "</div>" +
1444
- "<div class=\\"sstatus\\">" + (r.status || "") + "</div>" +
1600
+ "<div class=\\"stage-block\\" data-stage-idx=\\"" + i + "\\">" +
1601
+ "<div class=\\"" + rowClass + "\\"" + onclick + ">" +
1602
+ "<div class=\\"sdot " + (r.status || "") + "\\"></div>" +
1603
+ "<div class=\\"srepo\\">" + escapeHtml(repoName) + "</div>" +
1604
+ "<div class=\\"sname\\">" + escapeHtml(r.stage) + "</div>" +
1605
+ "<div class=\\"stask\\" title=\\"" + escapeAttr(r.taskId || "") + "\\">" + escapeHtml(taskLabel) + "</div>" +
1606
+ "<div class=\\"ssummary\\">" + inlineSummary + "</div>" +
1607
+ "<div class=\\"smodel\\">" + escapeHtml(modelStr) + "</div>" +
1608
+ "<div class=\\"stokens\\">" + escapeHtml(tokenStr) + "</div>" +
1609
+ "<div class=\\"selapsed\\">" + elapsed + "</div>" +
1610
+ "<div class=\\"sstatus\\">" + (r.status || "") + "</div>" +
1611
+ "</div>" +
1612
+ (hasDetails ? "<div class=\\"stage-details\\">" + detailsHtml + "</div>" : "") +
1445
1613
  "</div>"
1446
1614
  );
1447
1615
  }).join("");
@@ -1786,11 +1954,11 @@ const DASHBOARD_HTML = `<!DOCTYPE html>
1786
1954
  list.innerHTML = rows.length > 0 ? rows.join("") : "<div style=\\"color:#334433;font-size:10px\\">no scan paths configured</div>";
1787
1955
  }
1788
1956
 
1789
- async function addScanPath() {
1957
+ async function addScanPath(explicitPath) {
1790
1958
  const input = document.getElementById("scan-path-input");
1791
- const path = input.value.trim();
1959
+ const path = (explicitPath ?? input.value).trim();
1792
1960
  if (!path) return;
1793
- input.value = "";
1961
+ if (!explicitPath) input.value = "";
1794
1962
  try {
1795
1963
  await fetch("/api/scan-paths", {
1796
1964
  method: "POST",
@@ -1807,6 +1975,91 @@ const DASHBOARD_HTML = `<!DOCTYPE html>
1807
1975
  }
1808
1976
  }
1809
1977
 
1978
+ function toggleManualPathInput() {
1979
+ const row = document.getElementById("manual-path-row");
1980
+ if (!row) return;
1981
+ if (row.style.display === "none" || row.style.display === "") {
1982
+ row.style.display = "flex";
1983
+ const input = document.getElementById("scan-path-input");
1984
+ if (input) input.focus();
1985
+ } else {
1986
+ row.style.display = "none";
1987
+ }
1988
+ }
1989
+
1990
+ // ---- Folder Browser (native-style picker via /api/fs/list) ----
1991
+ var folderBrowserCurrent = null;
1992
+ var folderBrowserParent = null;
1993
+
1994
+ async function openFolderBrowser(startPath) {
1995
+ const modal = document.getElementById("folder-browser");
1996
+ if (!modal) return;
1997
+ modal.style.display = "flex";
1998
+ await loadFolderBrowser(startPath || "~/dev");
1999
+ }
2000
+
2001
+ function closeFolderBrowser() {
2002
+ const modal = document.getElementById("folder-browser");
2003
+ if (modal) modal.style.display = "none";
2004
+ }
2005
+
2006
+ async function loadFolderBrowser(path) {
2007
+ const list = document.getElementById("fb-list");
2008
+ const pathEl = document.getElementById("fb-path");
2009
+ const upBtn = document.getElementById("fb-up");
2010
+ const selectBtn = document.getElementById("fb-select");
2011
+ if (!list || !pathEl) return;
2012
+ list.innerHTML = "<div style=\\"padding:18px;color:var(--dim);font-size:12px;text-align:center\\">Loading…</div>";
2013
+ try {
2014
+ const res = await fetch("/api/fs/list?path=" + encodeURIComponent(path));
2015
+ if (!res.ok) {
2016
+ const err = await res.json().catch(() => ({}));
2017
+ list.innerHTML = "<div style=\\"padding:18px;color:var(--red);font-size:12px;text-align:center\\">" + escapeHtml(err.error || ("HTTP " + res.status)) + "</div>";
2018
+ return;
2019
+ }
2020
+ const data = await res.json();
2021
+ folderBrowserCurrent = data.path;
2022
+ folderBrowserParent = data.parent;
2023
+ pathEl.value = data.path;
2024
+ if (upBtn) upBtn.disabled = !data.parent;
2025
+ if (selectBtn) selectBtn.textContent = "Select \\"" + (data.name || data.path) + "\\"";
2026
+
2027
+ const dirs = (data.entries || []).filter(function(e) { return e.isDir; });
2028
+ if (dirs.length === 0) {
2029
+ list.innerHTML = "<div style=\\"padding:18px;color:var(--dim);font-size:12px;text-align:center\\">No subfolders</div>";
2030
+ return;
2031
+ }
2032
+ list.innerHTML = dirs.map(function(e) {
2033
+ return "<div class=\\"fb-row\\" data-name=\\"" + escapeAttr(e.name) + "\\" onclick=\\"folderBrowserEnter(this.getAttribute('data-name'))\\"" +
2034
+ " style=\\"padding:7px 18px;cursor:pointer;font-size:13px;color:var(--white);display:flex;align-items:center;gap:8px;border-bottom:1px solid var(--border2);transition:background .12s\\"" +
2035
+ " onmouseover=\\"this.style.background='var(--bg3)'\\" onmouseout=\\"this.style.background=''\\">" +
2036
+ "<span style=\\"color:var(--green)\\">📁</span>" +
2037
+ "<span>" + escapeHtml(e.name) + "</span>" +
2038
+ "</div>";
2039
+ }).join("");
2040
+ } catch (e) {
2041
+ list.innerHTML = "<div style=\\"padding:18px;color:var(--red);font-size:12px;text-align:center\\">" + escapeHtml(String(e)) + "</div>";
2042
+ }
2043
+ }
2044
+
2045
+ function folderBrowserEnter(name) {
2046
+ if (!folderBrowserCurrent || !name) return;
2047
+ // Join via the server side by sending the absolute path of the child
2048
+ const sep = folderBrowserCurrent.endsWith("/") ? "" : "/";
2049
+ loadFolderBrowser(folderBrowserCurrent + sep + name);
2050
+ }
2051
+
2052
+ function folderBrowserUp() {
2053
+ if (folderBrowserParent) loadFolderBrowser(folderBrowserParent);
2054
+ }
2055
+
2056
+ async function folderBrowserSelect() {
2057
+ if (!folderBrowserCurrent) return;
2058
+ const picked = folderBrowserCurrent;
2059
+ closeFolderBrowser();
2060
+ await addScanPath(picked);
2061
+ }
2062
+
1810
2063
  async function removeScanPath(path) {
1811
2064
  try {
1812
2065
  await fetch("/api/scan-paths/" + encodeURIComponent(path), {
@@ -1 +1 @@
1
- {"version":3,"file":"dashboardHtml.js","sourceRoot":"","sources":["../../src/support/dashboardHtml.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAmhEf,CAAC;AAGT,OAAO,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"dashboardHtml.js","sourceRoot":"","sources":["../../src/support/dashboardHtml.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAgxEf,CAAC;AAGT,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"projectMapper.d.ts","sourceRoot":"","sources":["../../src/support/projectMapper.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,cAAc;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;CACvB;AAWD;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA4DpF;AAgCD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,iBAAiB,EAAE,MAAM,EACzB,aAAa,EAAE,YAAY,EAAE,GAC5B;IAAE,OAAO,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAyBtD;AAiED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,eAAe,EAAE,MAAM,EACvB,iBAAiB,EAAE,MAAM,EACzB,SAAS,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA+BxB;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,cAAc,EAAE,CAEjD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAIxC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAG7C;AAiBD;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAiBxC"}
1
+ {"version":3,"file":"projectMapper.d.ts","sourceRoot":"","sources":["../../src/support/projectMapper.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,cAAc;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;CACvB;AAWD;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA4DpF;AAgCD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,iBAAiB,EAAE,MAAM,EACzB,aAAa,EAAE,YAAY,EAAE,GAC5B;IAAE,OAAO,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAyBtD;AAiED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,eAAe,EAAE,MAAM,EACvB,iBAAiB,EAAE,MAAM,EACzB,SAAS,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA4DxB;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,cAAc,EAAE,CAEjD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAIxC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAG7C;AAiBD;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAiBxC"}
@@ -5,6 +5,7 @@
5
5
  import { readdir, stat } from 'fs/promises';
6
6
  import { join, basename } from 'path';
7
7
  import { expandPath } from '../core/config.js';
8
+ import { loadRepoMetadata, RepoMetadataError } from './repoMetadata.js';
8
9
  // State
9
10
  const mappingCache = new Map();
10
11
  const localProjectsCache = [];
@@ -186,7 +187,34 @@ export async function mapLinearProject(linearProjectId, linearProjectName, baseP
186
187
  }
187
188
  // Scan local projects
188
189
  const localProjects = await scanLocalProjects(basePaths);
189
- // Attempt matching
190
+ // 1) Explicit mapping via openswarm.json wins over any fuzzy match.
191
+ // Walk every local project, read its openswarm.json (if present), and
192
+ // pick the one whose linear.projectId matches.
193
+ for (const project of localProjects) {
194
+ let meta;
195
+ try {
196
+ meta = await loadRepoMetadata(project.path);
197
+ }
198
+ catch (err) {
199
+ if (err instanceof RepoMetadataError) {
200
+ console.warn(`[ProjectMapper] ${err.message}`);
201
+ }
202
+ continue;
203
+ }
204
+ if (meta?.linear?.projectId === linearProjectId) {
205
+ const mapping = {
206
+ linearProjectId,
207
+ linearProjectName,
208
+ localPath: project.path,
209
+ confidence: 1,
210
+ lastVerified: Date.now(),
211
+ };
212
+ mappingCache.set(linearProjectId, mapping);
213
+ console.log(`[ProjectMapper] Explicit mapping: ${linearProjectName} → ${project.path} (openswarm.json)`);
214
+ return project.path;
215
+ }
216
+ }
217
+ // 2) Fall back to fuzzy name matching for repos without metadata.
190
218
  const match = findBestMatch(linearProjectName, localProjects);
191
219
  if (match) {
192
220
  // Save to cache
@@ -1 +1 @@
1
- {"version":3,"file":"projectMapper.js","sourceRoot":"","sources":["../../src/support/projectMapper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"projectMapper.js","sourceRoot":"","sources":["../../src/support/projectMapper.ts"],"names":[],"mappings":"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"}