vibe-squire 2.2.0 → 2.2.1

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.
@@ -1,7 +1,9 @@
1
+ import { PrismaService } from '../prisma/prisma.service';
1
2
  import { PollRunHistoryService } from '../sync/poll-run-history.service';
2
3
  export declare class ActivityApiController {
3
4
  private readonly pollRunHistory;
4
- constructor(pollRunHistory: PollRunHistoryService);
5
+ private readonly prisma;
6
+ constructor(pollRunHistory: PollRunHistoryService, prisma: PrismaService);
5
7
  runs(limitRaw?: string): Promise<{
6
8
  runs: {
7
9
  id: string;
@@ -23,17 +25,7 @@ export declare class ActivityApiController {
23
25
  skippedTriage: number | null;
24
26
  skippedDeclined: number | null;
25
27
  itemCount: number;
26
- items: Array<{
27
- prUrl: string;
28
- githubRepo: string;
29
- prNumber: number;
30
- prTitle: string;
31
- authorLogin: string | null;
32
- decision: string;
33
- decisionLabel: string;
34
- detail: string | null;
35
- kanbanIssueId: string | null;
36
- }>;
28
+ items: import("./ui-presenter").ActivityItem[];
37
29
  }[];
38
30
  }>;
39
31
  }
@@ -15,14 +15,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.ActivityApiController = void 0;
16
16
  const common_1 = require("@nestjs/common");
17
17
  const swagger_1 = require("@nestjs/swagger");
18
+ const prisma_service_1 = require("../prisma/prisma.service");
18
19
  const poll_run_history_service_1 = require("../sync/poll-run-history.service");
19
20
  const ui_presenter_1 = require("./ui-presenter");
20
21
  const DEFAULT_LIMIT = 40;
21
22
  const MAX_LIMIT = 100;
22
23
  let ActivityApiController = class ActivityApiController {
23
24
  pollRunHistory;
24
- constructor(pollRunHistory) {
25
+ prisma;
26
+ constructor(pollRunHistory, prisma) {
25
27
  this.pollRunHistory = pollRunHistory;
28
+ this.prisma = prisma;
26
29
  }
27
30
  async runs(limitRaw) {
28
31
  let limit = DEFAULT_LIMIT;
@@ -33,7 +36,29 @@ let ActivityApiController = class ActivityApiController {
33
36
  }
34
37
  }
35
38
  const rows = await this.pollRunHistory.listRecentForUi(limit);
36
- return { runs: (0, ui_presenter_1.presentActivityRunsForView)(rows) };
39
+ const allPrUrls = new Set(rows.flatMap((r) => r.items.map((i) => i.prUrl)));
40
+ const [syncedRows, declinedRows] = await Promise.all([
41
+ allPrUrls.size > 0
42
+ ? this.prisma.syncedPullRequest.findMany({
43
+ where: { prUrl: { in: [...allPrUrls] } },
44
+ select: { prUrl: true },
45
+ })
46
+ : [],
47
+ allPrUrls.size > 0
48
+ ? this.prisma.declinedPullRequest.findMany({
49
+ where: { prUrl: { in: [...allPrUrls] } },
50
+ select: { prUrl: true },
51
+ })
52
+ : [],
53
+ ]);
54
+ const acceptedPrUrls = new Set(syncedRows.map((r) => r.prUrl));
55
+ const declinedPrUrls = new Set(declinedRows.map((r) => r.prUrl));
56
+ return {
57
+ runs: (0, ui_presenter_1.presentActivityRunsForView)(rows, {
58
+ acceptedPrUrls,
59
+ declinedPrUrls,
60
+ }),
61
+ };
37
62
  }
38
63
  };
39
64
  exports.ActivityApiController = ActivityApiController;
@@ -53,6 +78,7 @@ __decorate([
53
78
  exports.ActivityApiController = ActivityApiController = __decorate([
54
79
  (0, swagger_1.ApiTags)('activity'),
55
80
  (0, common_1.Controller)('api/activity'),
56
- __metadata("design:paramtypes", [poll_run_history_service_1.PollRunHistoryService])
81
+ __metadata("design:paramtypes", [poll_run_history_service_1.PollRunHistoryService,
82
+ prisma_service_1.PrismaService])
57
83
  ], ActivityApiController);
58
84
  //# sourceMappingURL=activity-api.controller.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"activity-api.controller.js","sourceRoot":"","sources":["../../src/ui/activity-api.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAwD;AACxD,6CAAuE;AACvE,+EAAyE;AACzE,iDAA4D;AAE5D,MAAM,aAAa,GAAG,EAAE,CAAC;AACzB,MAAM,SAAS,GAAG,GAAG,CAAC;AAIf,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IACH;IAA7B,YAA6B,cAAqC;QAArC,mBAAc,GAAd,cAAc,CAAuB;IAAG,CAAC;IAUhE,AAAN,KAAK,CAAC,IAAI,CAAiB,QAAiB;QAC1C,IAAI,KAAK,GAAG,aAAa,CAAC;QAC1B,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;YAC9C,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACxC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC9D,OAAO,EAAE,IAAI,EAAE,IAAA,yCAA0B,EAAC,IAAI,CAAC,EAAE,CAAC;IACpD,CAAC;CACF,CAAA;AAtBY,sDAAqB;AAW1B;IARL,IAAA,YAAG,EAAC,MAAM,CAAC;IACX,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,qDAAqD;KAC/D,CAAC;IACD,IAAA,uBAAa,EAAC;QACb,WAAW,EACT,6EAA6E;KAChF,CAAC;IACU,WAAA,IAAA,cAAK,EAAC,OAAO,CAAC,CAAA;;;;iDAUzB;gCArBU,qBAAqB;IAFjC,IAAA,iBAAO,EAAC,UAAU,CAAC;IACnB,IAAA,mBAAU,EAAC,cAAc,CAAC;qCAEoB,gDAAqB;GADvD,qBAAqB,CAsBjC"}
1
+ {"version":3,"file":"activity-api.controller.js","sourceRoot":"","sources":["../../src/ui/activity-api.controller.ts"],"names":[],"mappings":"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"}
@@ -18,13 +18,79 @@
18
18
  skipped_board_limit: true,
19
19
  };
20
20
 
21
+ var OPTIMISTIC_KEY = 'vs_triage_optimistic';
22
+
23
+ function loadOptimistic() {
24
+ try {
25
+ return JSON.parse(localStorage.getItem(OPTIMISTIC_KEY) || '{}');
26
+ } catch {
27
+ return {};
28
+ }
29
+ }
30
+
31
+ function saveOptimistic(map) {
32
+ try {
33
+ localStorage.setItem(OPTIMISTIC_KEY, JSON.stringify(map));
34
+ } catch {
35
+ /* quota exceeded — ignore */
36
+ }
37
+ }
38
+
39
+ function markOptimistic(prUrl, action) {
40
+ var map = loadOptimistic();
41
+ map[prUrl] = action;
42
+ saveOptimistic(map);
43
+ }
44
+
45
+ function clearOptimistic(prUrl) {
46
+ var map = loadOptimistic();
47
+ delete map[prUrl];
48
+ saveOptimistic(map);
49
+ }
50
+
51
+ function applyOptimistic(items) {
52
+ var map = loadOptimistic();
53
+ var dirty = false;
54
+ for (var i = 0; i < items.length; i++) {
55
+ var it = items[i];
56
+ var opt = map[it.prUrl];
57
+ if (!opt) continue;
58
+ var eff = it.effectiveDecision || it.decision;
59
+ if (opt === 'accept' && !isTriageable(eff)) {
60
+ delete map[it.prUrl];
61
+ dirty = true;
62
+ } else if (opt === 'decline' && eff === 'skipped_declined') {
63
+ delete map[it.prUrl];
64
+ dirty = true;
65
+ } else if (opt === 'reconsider' && isTriageable(eff)) {
66
+ delete map[it.prUrl];
67
+ dirty = true;
68
+ } else if (opt === 'accept') {
69
+ it.effectiveDecision = 'linked_existing';
70
+ it.decisionLabel = 'Accepted (pending refresh)';
71
+ } else if (opt === 'decline') {
72
+ it.effectiveDecision = 'skipped_declined';
73
+ it.decisionLabel = 'Declined (pending refresh)';
74
+ } else if (opt === 'reconsider') {
75
+ it.effectiveDecision = 'skipped_triage';
76
+ it.decisionLabel = 'Pending triage';
77
+ }
78
+ }
79
+ if (dirty) saveOptimistic(map);
80
+ }
81
+
21
82
  function isTriageable(decision) {
22
83
  return TRIAGEABLE_DECISIONS[decision] === true;
23
84
  }
24
85
 
86
+ function effectiveOf(it) {
87
+ return it.effectiveDecision || it.decision;
88
+ }
89
+
25
90
  function triageSortKey(it) {
26
- if (isTriageable(it.decision)) return 0;
27
- if (it.decision === 'skipped_declined') return 1;
91
+ var eff = effectiveOf(it);
92
+ if (isTriageable(eff)) return 0;
93
+ if (eff === 'skipped_declined') return 1;
28
94
  return 2;
29
95
  }
30
96
 
@@ -39,7 +105,8 @@
39
105
 
40
106
  function triageActionButtons(it) {
41
107
  var url = esc(it.prUrl);
42
- if (isTriageable(it.decision)) {
108
+ var eff = effectiveOf(it);
109
+ if (isTriageable(eff)) {
43
110
  return (
44
111
  '<div class="triage-actions" style="margin-top:0.3rem">' +
45
112
  '<button class="btn btn-sm primary js-triage-accept" data-pr-url="' +
@@ -51,7 +118,7 @@
51
118
  '</div>'
52
119
  );
53
120
  }
54
- if (it.decision === 'skipped_declined') {
121
+ if (eff === 'skipped_declined') {
55
122
  return (
56
123
  '<div class="triage-actions" style="margin-top:0.3rem">' +
57
124
  '<button class="btn btn-sm ghost js-triage-reconsider" data-pr-url="' +
@@ -65,6 +132,7 @@
65
132
 
66
133
  function renderItemsTable(items) {
67
134
  if (!items || !items.length) return '';
135
+ applyOptimistic(items);
68
136
  var sorted = sortItemsForTriage(items);
69
137
  var rows = sorted
70
138
  .map(function (it) {
@@ -86,9 +154,10 @@
86
154
  '<div class="muted" style="font-size:0.8rem">@' +
87
155
  esc(it.authorLogin) +
88
156
  '</div>';
89
- var rowClass = isTriageable(it.decision)
157
+ var eff = effectiveOf(it);
158
+ var rowClass = isTriageable(eff)
90
159
  ? ' class="triage-pending-row"'
91
- : it.decision === 'skipped_declined'
160
+ : eff === 'skipped_declined'
92
161
  ? ' class="triage-declined-row"'
93
162
  : '';
94
163
  return (
@@ -283,6 +352,8 @@
283
352
 
284
353
  function triageAction(endpoint, prUrl, btn) {
285
354
  btn.disabled = true;
355
+ markOptimistic(prUrl, endpoint);
356
+ void load();
286
357
  fetch('/api/pr/' + endpoint, {
287
358
  method: 'POST',
288
359
  headers: { 'Content-Type': 'application/json' },
@@ -293,7 +364,8 @@
293
364
  void load();
294
365
  })
295
366
  .catch(function () {
296
- btn.disabled = false;
367
+ clearOptimistic(prUrl);
368
+ void load();
297
369
  });
298
370
  }
299
371
 
@@ -2,7 +2,23 @@ import type { SetupEvaluation } from '../setup/setup-evaluation.service';
2
2
  import type { PollRunHistoryService } from '../sync/poll-run-history.service';
3
3
  import type { UiNavEntry } from '../ports/ui-nav.types';
4
4
  export type PollRunRowForActivity = Awaited<ReturnType<PollRunHistoryService['listRecentForUi']>>[number];
5
- export declare function presentActivityRunsForView(rows: PollRunRowForActivity[]): Array<{
5
+ export type TriageLiveState = {
6
+ acceptedPrUrls: ReadonlySet<string>;
7
+ declinedPrUrls: ReadonlySet<string>;
8
+ };
9
+ export type ActivityItem = {
10
+ prUrl: string;
11
+ githubRepo: string;
12
+ prNumber: number;
13
+ prTitle: string;
14
+ authorLogin: string | null;
15
+ decision: string;
16
+ effectiveDecision: string;
17
+ decisionLabel: string;
18
+ detail: string | null;
19
+ kanbanIssueId: string | null;
20
+ };
21
+ export declare function presentActivityRunsForView(rows: PollRunRowForActivity[], live?: TriageLiveState): Array<{
6
22
  id: string;
7
23
  startedAt: string;
8
24
  startedAtLabel: string;
@@ -22,17 +38,7 @@ export declare function presentActivityRunsForView(rows: PollRunRowForActivity[]
22
38
  skippedTriage: number | null;
23
39
  skippedDeclined: number | null;
24
40
  itemCount: number;
25
- items: Array<{
26
- prUrl: string;
27
- githubRepo: string;
28
- prNumber: number;
29
- prTitle: string;
30
- authorLogin: string | null;
31
- decision: string;
32
- decisionLabel: string;
33
- detail: string | null;
34
- kanbanIssueId: string | null;
35
- }>;
41
+ items: ActivityItem[];
36
42
  }>;
37
43
  export declare function escapeForPre(s: string): string;
38
44
  export declare function destinationTypeLabel(t: string): string;
@@ -11,6 +11,7 @@ exports.uiNavLocals = uiNavLocals;
11
11
  exports.githubNotSourceRedirectUrl = githubNotSourceRedirectUrl;
12
12
  exports.vibeKanbanNotDestinationRedirectUrl = vibeKanbanNotDestinationRedirectUrl;
13
13
  const poll_run_labels_1 = require("../sync/poll-run-labels");
14
+ const poll_run_decisions_1 = require("../sync/poll-run-decisions");
14
15
  function formatActivityRunTime(d) {
15
16
  const t = d.getTime();
16
17
  if (Number.isNaN(t)) {
@@ -18,7 +19,24 @@ function formatActivityRunTime(d) {
18
19
  }
19
20
  return d.toLocaleString();
20
21
  }
21
- function presentActivityRunsForView(rows) {
22
+ const TRIAGE_DECISIONS = new Set([
23
+ poll_run_decisions_1.POLL_RUN_ITEM_DECISION.skippedTriage,
24
+ poll_run_decisions_1.POLL_RUN_ITEM_DECISION.skippedBoardLimit,
25
+ ]);
26
+ const EMPTY_LIVE_STATE = {
27
+ acceptedPrUrls: new Set(),
28
+ declinedPrUrls: new Set(),
29
+ };
30
+ function resolveEffectiveDecision(decision, prUrl, live) {
31
+ if (!TRIAGE_DECISIONS.has(decision))
32
+ return decision;
33
+ if (live.acceptedPrUrls.has(prUrl))
34
+ return poll_run_decisions_1.POLL_RUN_ITEM_DECISION.linkedExisting;
35
+ if (live.declinedPrUrls.has(prUrl))
36
+ return poll_run_decisions_1.POLL_RUN_ITEM_DECISION.skippedDeclined;
37
+ return decision;
38
+ }
39
+ function presentActivityRunsForView(rows, live = EMPTY_LIVE_STATE) {
22
40
  return rows.map((r) => ({
23
41
  id: r.id,
24
42
  startedAt: r.startedAt.toISOString(),
@@ -39,17 +57,21 @@ function presentActivityRunsForView(rows) {
39
57
  skippedTriage: r.skippedTriage,
40
58
  skippedDeclined: r.skippedDeclined,
41
59
  itemCount: r.items.length,
42
- items: r.items.map((i) => ({
43
- prUrl: i.prUrl,
44
- githubRepo: i.githubRepo,
45
- prNumber: i.prNumber,
46
- prTitle: i.prTitle,
47
- authorLogin: i.authorLogin,
48
- decision: i.decision,
49
- decisionLabel: (0, poll_run_labels_1.pollDecisionLabel)(i.decision),
50
- detail: i.detail,
51
- kanbanIssueId: i.kanbanIssueId,
52
- })),
60
+ items: r.items.map((i) => {
61
+ const eff = resolveEffectiveDecision(i.decision, i.prUrl, live);
62
+ return {
63
+ prUrl: i.prUrl,
64
+ githubRepo: i.githubRepo,
65
+ prNumber: i.prNumber,
66
+ prTitle: i.prTitle,
67
+ authorLogin: i.authorLogin,
68
+ decision: i.decision,
69
+ effectiveDecision: eff,
70
+ decisionLabel: (0, poll_run_labels_1.pollDecisionLabel)(eff),
71
+ detail: i.detail,
72
+ kanbanIssueId: i.kanbanIssueId,
73
+ };
74
+ }),
53
75
  }));
54
76
  }
55
77
  function escapeForPre(s) {
@@ -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.2.0",
3
+ "version": "2.2.1",
4
4
  "description": "Local orchestrator: GitHub PR review queue → Vibe Kanban via MCP",
5
5
  "author": "alexpialetski",
6
6
  "license": "MIT",