vibe-squire 2.0.0 → 2.1.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 (63) hide show
  1. package/dist/generated/prisma/browser.d.ts +1 -0
  2. package/dist/generated/prisma/client.d.ts +1 -0
  3. package/dist/generated/prisma/internal/class.d.ts +3 -0
  4. package/dist/generated/prisma/internal/class.js +4 -4
  5. package/dist/generated/prisma/internal/class.js.map +1 -1
  6. package/dist/generated/prisma/internal/prismaNamespace.d.ts +85 -1
  7. package/dist/generated/prisma/internal/prismaNamespace.js +10 -2
  8. package/dist/generated/prisma/internal/prismaNamespace.js.map +1 -1
  9. package/dist/generated/prisma/internal/prismaNamespaceBrowser.d.ts +9 -0
  10. package/dist/generated/prisma/internal/prismaNamespaceBrowser.js +10 -2
  11. package/dist/generated/prisma/internal/prismaNamespaceBrowser.js.map +1 -1
  12. package/dist/generated/prisma/models/DeclinedPullRequest.d.ts +342 -0
  13. package/dist/generated/prisma/models/DeclinedPullRequest.js +3 -0
  14. package/dist/generated/prisma/models/DeclinedPullRequest.js.map +1 -0
  15. package/dist/generated/prisma/models/PollRun.d.ts +77 -1
  16. package/dist/generated/prisma/models.d.ts +1 -0
  17. package/dist/settings/core-settings-group.service.d.ts +2 -0
  18. package/dist/settings/core-settings.schema.d.ts +4 -0
  19. package/dist/settings/core-settings.schema.js +19 -14
  20. package/dist/settings/core-settings.schema.js.map +1 -1
  21. package/dist/settings/core-settings.service.d.ts +1 -0
  22. package/dist/settings/core-settings.service.js +3 -0
  23. package/dist/settings/core-settings.service.js.map +1 -1
  24. package/dist/sync/poll-cycle/ensure-issue-for-pr.d.ts +1 -0
  25. package/dist/sync/poll-cycle/ensure-issue-for-pr.js +9 -0
  26. package/dist/sync/poll-cycle/ensure-issue-for-pr.js.map +1 -1
  27. package/dist/sync/poll-cycle/ensure-issue-outcome.d.ts +4 -0
  28. package/dist/sync/poll-cycle/finalize-successful-poll-cycle.d.ts +2 -0
  29. package/dist/sync/poll-cycle/finalize-successful-poll-cycle.js +15 -4
  30. package/dist/sync/poll-cycle/finalize-successful-poll-cycle.js.map +1 -1
  31. package/dist/sync/poll-cycle/process-poll-candidates.d.ts +2 -0
  32. package/dist/sync/poll-cycle/process-poll-candidates.js +16 -0
  33. package/dist/sync/poll-cycle/process-poll-candidates.js.map +1 -1
  34. package/dist/sync/poll-cycle/reconcile-removed-sync-rows.js +14 -0
  35. package/dist/sync/poll-cycle/reconcile-removed-sync-rows.js.map +1 -1
  36. package/dist/sync/poll-run-decisions.d.ts +2 -0
  37. package/dist/sync/poll-run-decisions.js +2 -0
  38. package/dist/sync/poll-run-decisions.js.map +1 -1
  39. package/dist/sync/poll-run-history.service.d.ts +4 -0
  40. package/dist/sync/poll-run-history.service.js +2 -0
  41. package/dist/sync/poll-run-history.service.js.map +1 -1
  42. package/dist/sync/poll-run-labels.js +2 -0
  43. package/dist/sync/poll-run-labels.js.map +1 -1
  44. package/dist/sync/pr-triage.controller.d.ts +18 -0
  45. package/dist/sync/pr-triage.controller.js +121 -0
  46. package/dist/sync/pr-triage.controller.js.map +1 -0
  47. package/dist/sync/pr-triage.service.d.ts +22 -0
  48. package/dist/sync/pr-triage.service.js +132 -0
  49. package/dist/sync/pr-triage.service.js.map +1 -0
  50. package/dist/sync/run-poll-cycle.service.js +6 -1
  51. package/dist/sync/run-poll-cycle.service.js.map +1 -1
  52. package/dist/sync/sync.module.js +4 -1
  53. package/dist/sync/sync.module.js.map +1 -1
  54. package/dist/tsconfig.build.tsbuildinfo +1 -1
  55. package/dist/ui/activity-api.controller.d.ts +2 -0
  56. package/dist/ui/public/operator-activity.js +103 -3
  57. package/dist/ui/public/operator.css +15 -0
  58. package/dist/ui/ui-presenter.d.ts +2 -0
  59. package/dist/ui/ui-presenter.js +2 -0
  60. package/dist/ui/ui-presenter.js.map +1 -1
  61. package/package.json +1 -1
  62. package/prisma/migrations/20260406120000_triage_mode/migration.sql +13 -0
  63. package/prisma/schema.prisma +10 -1
@@ -20,6 +20,8 @@ export declare class ActivityApiController {
20
20
  skippedBoardLimit: number | null;
21
21
  skippedAlreadyTracked: number | null;
22
22
  skippedLinkedExisting: number | null;
23
+ skippedTriage: number | null;
24
+ skippedDeclined: number | null;
23
25
  itemCount: number;
24
26
  items: Array<{
25
27
  prUrl: string;
@@ -13,9 +13,60 @@
13
13
  return v == null ? '—' : String(v);
14
14
  }
15
15
 
16
+ var TRIAGEABLE_DECISIONS = {
17
+ skipped_triage: true,
18
+ skipped_board_limit: true,
19
+ };
20
+
21
+ function isTriageable(decision) {
22
+ return TRIAGEABLE_DECISIONS[decision] === true;
23
+ }
24
+
25
+ function triageSortKey(it) {
26
+ if (isTriageable(it.decision)) return 0;
27
+ if (it.decision === 'skipped_declined') return 1;
28
+ return 2;
29
+ }
30
+
31
+ function sortItemsForTriage(items) {
32
+ return items.slice().sort(function (a, b) {
33
+ var ka = triageSortKey(a);
34
+ var kb = triageSortKey(b);
35
+ if (ka !== kb) return ka - kb;
36
+ return (a.prNumber || 0) - (b.prNumber || 0);
37
+ });
38
+ }
39
+
40
+ function triageActionButtons(it) {
41
+ var url = esc(it.prUrl);
42
+ if (isTriageable(it.decision)) {
43
+ return (
44
+ '<div class="triage-actions" style="margin-top:0.3rem">' +
45
+ '<button class="btn btn-sm primary js-triage-accept" data-pr-url="' +
46
+ url +
47
+ '">Review</button> ' +
48
+ '<button class="btn btn-sm ghost js-triage-decline" data-pr-url="' +
49
+ url +
50
+ '">Decline</button>' +
51
+ '</div>'
52
+ );
53
+ }
54
+ if (it.decision === 'skipped_declined') {
55
+ return (
56
+ '<div class="triage-actions" style="margin-top:0.3rem">' +
57
+ '<button class="btn btn-sm ghost js-triage-reconsider" data-pr-url="' +
58
+ url +
59
+ '">Reconsider</button>' +
60
+ '</div>'
61
+ );
62
+ }
63
+ return '';
64
+ }
65
+
16
66
  function renderItemsTable(items) {
17
67
  if (!items || !items.length) return '';
18
- var rows = items
68
+ var sorted = sortItemsForTriage(items);
69
+ var rows = sorted
19
70
  .map(function (it) {
20
71
  var detailParts = [];
21
72
  if (it.kanbanIssueId) {
@@ -35,8 +86,15 @@
35
86
  '<div class="muted" style="font-size:0.8rem">@' +
36
87
  esc(it.authorLogin) +
37
88
  '</div>';
89
+ var rowClass = isTriageable(it.decision)
90
+ ? ' class="triage-pending-row"'
91
+ : it.decision === 'skipped_declined'
92
+ ? ' class="triage-declined-row"'
93
+ : '';
38
94
  return (
39
- '<tr>' +
95
+ '<tr' +
96
+ rowClass +
97
+ '>' +
40
98
  '<td class="mono">' +
41
99
  '<a href="' +
42
100
  esc(it.prUrl) +
@@ -53,6 +111,7 @@
53
111
  '</td>' +
54
112
  '<td>' +
55
113
  esc(it.decisionLabel) +
114
+ triageActionButtons(it) +
56
115
  '</td>' +
57
116
  '<td class="wrap muted">' +
58
117
  detail +
@@ -113,7 +172,14 @@
113
172
  fmtCount(r.skippedAlreadyTracked) +
114
173
  ' already tracked · ' +
115
174
  fmtCount(r.skippedLinkedExisting) +
116
- ' linked existing</p>';
175
+ ' linked existing' +
176
+ (r.skippedTriage
177
+ ? ' · ' + fmtCount(r.skippedTriage) + ' pending triage'
178
+ : '') +
179
+ (r.skippedDeclined
180
+ ? ' · ' + fmtCount(r.skippedDeclined) + ' declined'
181
+ : '') +
182
+ '</p>';
117
183
  }
118
184
  if (r.phase === 'aborted') {
119
185
  summaryBody +=
@@ -215,6 +281,40 @@
215
281
  }
216
282
  }
217
283
 
284
+ function triageAction(endpoint, prUrl, btn) {
285
+ btn.disabled = true;
286
+ fetch('/api/pr/' + endpoint, {
287
+ method: 'POST',
288
+ headers: { 'Content-Type': 'application/json' },
289
+ body: JSON.stringify({ prUrl: prUrl }),
290
+ })
291
+ .then(function (res) {
292
+ if (!res.ok) throw new Error('HTTP ' + res.status);
293
+ void load();
294
+ })
295
+ .catch(function () {
296
+ btn.disabled = false;
297
+ });
298
+ }
299
+
300
+ root.addEventListener('click', function (e) {
301
+ var btn = e.target.closest('.js-triage-accept');
302
+ if (btn) {
303
+ triageAction('accept', btn.getAttribute('data-pr-url'), btn);
304
+ return;
305
+ }
306
+ btn = e.target.closest('.js-triage-decline');
307
+ if (btn) {
308
+ triageAction('decline', btn.getAttribute('data-pr-url'), btn);
309
+ return;
310
+ }
311
+ btn = e.target.closest('.js-triage-reconsider');
312
+ if (btn) {
313
+ triageAction('reconsider', btn.getAttribute('data-pr-url'), btn);
314
+ return;
315
+ }
316
+ });
317
+
218
318
  Ui.onStatusSnapshot(function () {
219
319
  void load();
220
320
  });
@@ -704,3 +704,18 @@ textarea.input {
704
704
  margin-top: 0.2rem;
705
705
  max-width: 28rem;
706
706
  }
707
+
708
+ /* Triage rows */
709
+ .triage-pending-row {
710
+ background: rgba(61, 159, 122, 0.06);
711
+ }
712
+
713
+ .triage-declined-row {
714
+ opacity: 0.55;
715
+ }
716
+
717
+ .triage-actions {
718
+ display: flex;
719
+ gap: 0.35rem;
720
+ flex-wrap: wrap;
721
+ }
@@ -19,6 +19,8 @@ export declare function presentActivityRunsForView(rows: PollRunRowForActivity[]
19
19
  skippedBoardLimit: number | null;
20
20
  skippedAlreadyTracked: number | null;
21
21
  skippedLinkedExisting: number | null;
22
+ skippedTriage: number | null;
23
+ skippedDeclined: number | null;
22
24
  itemCount: number;
23
25
  items: Array<{
24
26
  prUrl: string;
@@ -36,6 +36,8 @@ function presentActivityRunsForView(rows) {
36
36
  skippedBoardLimit: r.skippedBoardLimit,
37
37
  skippedAlreadyTracked: r.skippedAlreadyTracked,
38
38
  skippedLinkedExisting: r.skippedLinkedExisting,
39
+ skippedTriage: r.skippedTriage,
40
+ skippedDeclined: r.skippedDeclined,
39
41
  itemCount: r.items.length,
40
42
  items: r.items.map((i) => ({
41
43
  prUrl: i.prUrl,
@@ -1 +1 @@
1
- {"version":3,"file":"ui-presenter.js","sourceRoot":"","sources":["../../src/ui/ui-presenter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ui-presenter.js","sourceRoot":"","sources":["../../src/ui/ui-presenter.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vibe-squire",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "description": "Local orchestrator: GitHub PR review queue → Vibe Kanban via MCP",
5
5
  "author": "alexpialetski",
6
6
  "license": "MIT",
@@ -0,0 +1,13 @@
1
+ -- CreateTable
2
+ CREATE TABLE "DeclinedPullRequest" (
3
+ "id" TEXT NOT NULL PRIMARY KEY,
4
+ "prUrl" TEXT NOT NULL,
5
+ "declinedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
6
+ );
7
+
8
+ -- CreateIndex
9
+ CREATE UNIQUE INDEX "DeclinedPullRequest_prUrl_key" ON "DeclinedPullRequest"("prUrl");
10
+
11
+ -- AlterTable: add triage counters to PollRun
12
+ ALTER TABLE "PollRun" ADD COLUMN "skippedTriage" INTEGER;
13
+ ALTER TABLE "PollRun" ADD COLUMN "skippedDeclined" INTEGER;
@@ -60,6 +60,8 @@ model PollRun {
60
60
  skippedBoardLimit Int?
61
61
  skippedAlreadyTracked Int?
62
62
  skippedLinkedExisting Int?
63
+ skippedTriage Int?
64
+ skippedDeclined Int?
63
65
  items PollRunItem[]
64
66
 
65
67
  @@index([startedAt(sort: Desc)])
@@ -75,7 +77,7 @@ model PollRunItem {
75
77
  prNumber Int
76
78
  prTitle String
77
79
  authorLogin String?
78
- /// created | already_tracked | linked_existing | skipped_unmapped | skipped_bot | skipped_board_limit
80
+ /// created | already_tracked | linked_existing | skipped_unmapped | skipped_bot | skipped_board_limit | skipped_triage | skipped_declined
79
81
  decision String
80
82
  detail String?
81
83
  kanbanIssueId String?
@@ -83,6 +85,13 @@ model PollRunItem {
83
85
  @@index([runId])
84
86
  }
85
87
 
88
+ /// PRs the operator explicitly declined in triage mode (suppressed until PR leaves scout results).
89
+ model DeclinedPullRequest {
90
+ id String @id @default(cuid())
91
+ prUrl String @unique
92
+ declinedAt DateTime @default(now())
93
+ }
94
+
86
95
  /// Tracks Kanban issues created for a GitHub PR (dedupe + reconciliation when PR leaves review queue).
87
96
  model SyncedPullRequest {
88
97
  id String @id @default(cuid())