prism-pr 1.0.0-alpha.77 → 1.0.0-alpha.79
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +34 -5
- package/bin/run.js +1 -1
- package/dist/persistence/migrations/0005_pattern_feedback.sql +16 -16
- package/dist/persistence/migrations/0006_file_review_cache.sql +12 -12
- package/dist/tui/components/lifecycle-preview-body.d.ts +15 -0
- package/dist/tui/components/lifecycle-preview-body.d.ts.map +1 -0
- package/dist/tui/components/lifecycle-preview-body.js +43 -0
- package/dist/tui/components/lifecycle-preview-body.js.map +1 -0
- package/dist/tui/screens/findings-list.d.ts.map +1 -1
- package/dist/tui/screens/findings-list.js +2 -15
- package/dist/tui/screens/findings-list.js.map +1 -1
- package/dist/tui/screens/lifecycle-preview.d.ts.map +1 -1
- package/dist/tui/screens/lifecycle-preview.js +9 -5
- package/dist/tui/screens/lifecycle-preview.js.map +1 -1
- package/dist/tui/screens/lifecycle-running.d.ts.map +1 -1
- package/dist/tui/screens/lifecycle-running.js +1 -0
- package/dist/tui/screens/lifecycle-running.js.map +1 -1
- package/dist/tui/screens/lifecycle-summary.d.ts.map +1 -1
- package/dist/tui/screens/lifecycle-summary.js +23 -5
- package/dist/tui/screens/lifecycle-summary.js.map +1 -1
- package/dist/tui/screens/publishing.d.ts.map +1 -1
- package/dist/tui/screens/publishing.js +29 -8
- package/dist/tui/screens/publishing.js.map +1 -1
- package/dist/tui/screens/rule-suggestions.d.ts.map +1 -1
- package/dist/tui/screens/rule-suggestions.js +3 -0
- package/dist/tui/screens/rule-suggestions.js.map +1 -1
- package/dist/tui/screens/url-input.d.ts.map +1 -1
- package/dist/tui/screens/url-input.js +4 -1
- package/dist/tui/screens/url-input.js.map +1 -1
- package/dist/tui/state/tui-reducer.d.ts +9 -1
- package/dist/tui/state/tui-reducer.d.ts.map +1 -1
- package/dist/tui/state/tui-reducer.js +4 -2
- package/dist/tui/state/tui-reducer.js.map +1 -1
- package/dist/utils/lifecycle-preview-view.d.ts +40 -0
- package/dist/utils/lifecycle-preview-view.d.ts.map +1 -0
- package/dist/utils/lifecycle-preview-view.js +74 -0
- package/dist/utils/lifecycle-preview-view.js.map +1 -0
- package/oclif.manifest.json +1 -93
- package/package.json +3 -2
- package/dist/commands/review/clean.d.ts +0 -37
- package/dist/commands/review/clean.d.ts.map +0 -1
- package/dist/commands/review/clean.js +0 -201
- package/dist/commands/review/clean.js.map +0 -1
- package/dist/core/clean-re-review-service.d.ts +0 -45
- package/dist/core/clean-re-review-service.d.ts.map +0 -1
- package/dist/core/clean-re-review-service.js +0 -128
- package/dist/core/clean-re-review-service.js.map +0 -1
- package/dist/tui/screens/clean-rereview-confirm.d.ts +0 -3
- package/dist/tui/screens/clean-rereview-confirm.d.ts.map +0 -1
- package/dist/tui/screens/clean-rereview-confirm.js +0 -54
- package/dist/tui/screens/clean-rereview-confirm.js.map +0 -1
- package/dist/tui/screens/clean-rereview-running.d.ts +0 -3
- package/dist/tui/screens/clean-rereview-running.d.ts.map +0 -1
- package/dist/tui/screens/clean-rereview-running.js +0 -77
- package/dist/tui/screens/clean-rereview-running.js.map +0 -1
- package/dist/tui/screens/settings-menu.d.ts +0 -3
- package/dist/tui/screens/settings-menu.d.ts.map +0 -1
- package/dist/tui/screens/settings-menu.js +0 -35
- package/dist/tui/screens/settings-menu.js.map +0 -1
- package/dist/tui/screens/settings-provider.d.ts +0 -3
- package/dist/tui/screens/settings-provider.d.ts.map +0 -1
- package/dist/tui/screens/settings-provider.js +0 -105
- package/dist/tui/screens/settings-provider.js.map +0 -1
- package/dist/tui/screens/settings.d.ts +0 -4
- package/dist/tui/screens/settings.d.ts.map +0 -1
- package/dist/tui/screens/settings.js +0 -431
- package/dist/tui/screens/settings.js.map +0 -1
- package/dist/tui/screens/unified-settings/tab-agents.d.ts +0 -19
- package/dist/tui/screens/unified-settings/tab-agents.d.ts.map +0 -1
- package/dist/tui/screens/unified-settings/tab-agents.js +0 -33
- package/dist/tui/screens/unified-settings/tab-agents.js.map +0 -1
- package/dist/tui/screens/unified-settings/tab-models.d.ts +0 -18
- package/dist/tui/screens/unified-settings/tab-models.d.ts.map +0 -1
- package/dist/tui/screens/unified-settings/tab-models.js +0 -20
- package/dist/tui/screens/unified-settings/tab-models.js.map +0 -1
package/README.md
CHANGED
|
@@ -168,9 +168,10 @@ prism guard # guard-focused TUI
|
|
|
168
168
|
|
|
169
169
|
Launches a full Ink-based terminal UI with keyboard navigation.
|
|
170
170
|
|
|
171
|
-
In **Settings**,
|
|
172
|
-
- **
|
|
173
|
-
- **
|
|
171
|
+
In **Settings**, a unified tabbed screen:
|
|
172
|
+
- **Provider & Keys**: provider selection (`auto`, `anthropic`, `openai`, `gemini`, `claude-code`) and Anthropic/OpenAI/Gemini key registration
|
|
173
|
+
- **Models & Agents**: default model, per-agent model picker, presets (Max/Balance/Low), and custom model IDs
|
|
174
|
+
- **Defaults**: review defaults (minimum severity, content mode, …)
|
|
174
175
|
|
|
175
176
|
### Guardian Angel section
|
|
176
177
|
|
|
@@ -260,6 +261,33 @@ Configure all 14 agent models at once via the Settings screen:
|
|
|
260
261
|
|
|
261
262
|
---
|
|
262
263
|
|
|
264
|
+
## Comment Lifecycle — manage prior PRISM comments
|
|
265
|
+
|
|
266
|
+
Over a PR's life, PRISM accumulates review comments. `prism review lifecycle` captures them, classifies each by state (resolved, active, dev-reply), posts a single summary comment, and cleans up the resolved ones. **Dev replies are never deleted.**
|
|
267
|
+
|
|
268
|
+
```bash
|
|
269
|
+
# Preview only (default) — classify and report, ZERO Bitbucket writes
|
|
270
|
+
prism review lifecycle https://bitbucket.org/acme/app/pull-requests/42
|
|
271
|
+
|
|
272
|
+
# Full pipeline — post summary comment + delete resolved PRISM comments
|
|
273
|
+
prism review lifecycle https://bitbucket.org/acme/app/pull-requests/42 --cleanup
|
|
274
|
+
|
|
275
|
+
# Structured JSON (CI-friendly)
|
|
276
|
+
prism review lifecycle https://bitbucket.org/acme/app/pull-requests/42 --json
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
> **Breaking change (alpha.77):** the default is now **preview-only**. Add `--cleanup` to post the summary and delete comments. The `--no-cleanup` flag was removed; `--dry-run` is deprecated (redundant with the new default).
|
|
280
|
+
|
|
281
|
+
In the TUI, **Comment Lifecycle** (home menu) runs the same flow with a rich preview screen: confirm to post + clean up, or Esc to abort with no writes. After publishing, it offers to start a new review on the same PR (URL pre-filled).
|
|
282
|
+
|
|
283
|
+
| Exit code | Meaning |
|
|
284
|
+
|-----------|---------|
|
|
285
|
+
| `0` | Preview OK, or full pipeline success |
|
|
286
|
+
| `1` | Capture or summary failed (Bitbucket untouched or partial) |
|
|
287
|
+
| `2` | Cleanup partial failure (some deletes failed) |
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
263
291
|
## Commands
|
|
264
292
|
|
|
265
293
|
| Command | Purpose |
|
|
@@ -274,6 +302,7 @@ Configure all 14 agent models at once via the Settings screen:
|
|
|
274
302
|
| `prism rules push` | ~~Legacy v2.~~ Push a local `.prism-patterns.json` to the rules repo (deprecated) |
|
|
275
303
|
| `prism rules stats` | Show aggregated finding patterns from local review history |
|
|
276
304
|
| `prism review start` | Run an AI code review on a PR |
|
|
305
|
+
| `prism review lifecycle` | Preview or clean up prior PRISM comments on a PR (preview-only by default; `--cleanup` deletes) |
|
|
277
306
|
|
|
278
307
|
### guard check flags
|
|
279
308
|
|
|
@@ -365,10 +394,10 @@ A `ProjectManifest` lives at `projects/<workspace>/<repo>.json` in the shared ru
|
|
|
365
394
|
|
|
366
395
|
### Rulesets
|
|
367
396
|
|
|
368
|
-
Built-in rulesets today (
|
|
397
|
+
Built-in rulesets today (10 rulesets, 30+ ast-grep patterns):
|
|
369
398
|
|
|
370
399
|
- `shared/general`, `shared/security`, `shared/typescript`
|
|
371
|
-
- `angular/base`, `angular/v17`
|
|
400
|
+
- `angular/base`, `angular/v2`, `angular/v17`
|
|
372
401
|
- `react/base`
|
|
373
402
|
- `nestjs/base`
|
|
374
403
|
- `ag-grid/base`, `ag-grid/v32`
|
package/bin/run.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
CREATE TABLE IF NOT EXISTS pattern_feedback (
|
|
2
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
3
|
-
workspace TEXT NOT NULL,
|
|
4
|
-
repo TEXT NOT NULL,
|
|
5
|
-
pattern_id TEXT NOT NULL,
|
|
6
|
-
category TEXT NOT NULL,
|
|
7
|
-
agent_id TEXT,
|
|
8
|
-
file_path TEXT NOT NULL,
|
|
9
|
-
line_number INTEGER,
|
|
10
|
-
source TEXT NOT NULL DEFAULT 'guard',
|
|
11
|
-
reason TEXT,
|
|
12
|
-
auto_tuned INTEGER NOT NULL DEFAULT 0,
|
|
13
|
-
created_at TEXT NOT NULL
|
|
14
|
-
);
|
|
15
|
-
CREATE INDEX idx_pattern_feedback_lookup ON pattern_feedback (workspace, repo, pattern_id);
|
|
16
|
-
CREATE INDEX idx_pattern_feedback_threshold ON pattern_feedback (workspace, repo, pattern_id, auto_tuned);
|
|
1
|
+
CREATE TABLE IF NOT EXISTS pattern_feedback (
|
|
2
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
3
|
+
workspace TEXT NOT NULL,
|
|
4
|
+
repo TEXT NOT NULL,
|
|
5
|
+
pattern_id TEXT NOT NULL,
|
|
6
|
+
category TEXT NOT NULL,
|
|
7
|
+
agent_id TEXT,
|
|
8
|
+
file_path TEXT NOT NULL,
|
|
9
|
+
line_number INTEGER,
|
|
10
|
+
source TEXT NOT NULL DEFAULT 'guard',
|
|
11
|
+
reason TEXT,
|
|
12
|
+
auto_tuned INTEGER NOT NULL DEFAULT 0,
|
|
13
|
+
created_at TEXT NOT NULL
|
|
14
|
+
);
|
|
15
|
+
CREATE INDEX idx_pattern_feedback_lookup ON pattern_feedback (workspace, repo, pattern_id);
|
|
16
|
+
CREATE INDEX idx_pattern_feedback_threshold ON pattern_feedback (workspace, repo, pattern_id, auto_tuned);
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
CREATE TABLE IF NOT EXISTS file_review_cache (
|
|
2
|
-
pr_id INTEGER NOT NULL,
|
|
3
|
-
file_path TEXT NOT NULL,
|
|
4
|
-
agent_id TEXT NOT NULL,
|
|
5
|
-
file_hash TEXT NOT NULL,
|
|
6
|
-
outcome TEXT NOT NULL,
|
|
7
|
-
findings_count INTEGER NOT NULL DEFAULT 0,
|
|
8
|
-
session_id TEXT NOT NULL REFERENCES review_sessions(id),
|
|
9
|
-
reviewed_at TEXT NOT NULL,
|
|
10
|
-
PRIMARY KEY (pr_id, file_path, agent_id)
|
|
11
|
-
);
|
|
12
|
-
CREATE INDEX idx_file_review_cache_session ON file_review_cache (session_id);
|
|
1
|
+
CREATE TABLE IF NOT EXISTS file_review_cache (
|
|
2
|
+
pr_id INTEGER NOT NULL,
|
|
3
|
+
file_path TEXT NOT NULL,
|
|
4
|
+
agent_id TEXT NOT NULL,
|
|
5
|
+
file_hash TEXT NOT NULL,
|
|
6
|
+
outcome TEXT NOT NULL,
|
|
7
|
+
findings_count INTEGER NOT NULL DEFAULT 0,
|
|
8
|
+
session_id TEXT NOT NULL REFERENCES review_sessions(id),
|
|
9
|
+
reviewed_at TEXT NOT NULL,
|
|
10
|
+
PRIMARY KEY (pr_id, file_path, agent_id)
|
|
11
|
+
);
|
|
12
|
+
CREATE INDEX idx_file_review_cache_session ON file_review_cache (session_id);
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { SnapshotSummary } from '../../core/comment-lifecycle-service.js';
|
|
3
|
+
export interface LifecyclePreviewBodyProps {
|
|
4
|
+
snapshots: SnapshotSummary[];
|
|
5
|
+
captureRunId: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Rich, non-destructive preview of a captured PRISM comment lifecycle.
|
|
9
|
+
*
|
|
10
|
+
* Renders a real Ink component tree (colored, aligned) derived from the captured
|
|
11
|
+
* snapshots — replacing the previous raw-markdown dump. Pure/presentational:
|
|
12
|
+
* all numbers come from {@link derivePreviewView}, no IO.
|
|
13
|
+
*/
|
|
14
|
+
export declare function LifecyclePreviewBody({ snapshots, captureRunId, }: LifecyclePreviewBodyProps): React.ReactElement;
|
|
15
|
+
//# sourceMappingURL=lifecycle-preview-body.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle-preview-body.d.ts","sourceRoot":"","sources":["../../../src/tui/components/lifecycle-preview-body.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAM/E,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;CACtB;AA8BD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,SAAS,EACT,YAAY,GACb,EAAE,yBAAyB,GAAG,KAAK,CAAC,YAAY,CAoFhD"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import { derivePreviewView, } from '../../utils/lifecycle-preview-view.js';
|
|
4
|
+
const TONE_COLOR = {
|
|
5
|
+
ok: 'green',
|
|
6
|
+
warn: 'yellow',
|
|
7
|
+
danger: 'red',
|
|
8
|
+
muted: undefined,
|
|
9
|
+
};
|
|
10
|
+
const TONE_MARK = {
|
|
11
|
+
ok: '✓',
|
|
12
|
+
warn: '⏳',
|
|
13
|
+
danger: '✗',
|
|
14
|
+
muted: '·',
|
|
15
|
+
};
|
|
16
|
+
const PATH_MAX = 48;
|
|
17
|
+
const AGENT_COL = 20;
|
|
18
|
+
/** Keep the meaningful tail of a long path so the filename stays visible. */
|
|
19
|
+
function shortenPath(path) {
|
|
20
|
+
if (path.length <= PATH_MAX)
|
|
21
|
+
return path;
|
|
22
|
+
return '…' + path.slice(path.length - (PATH_MAX - 1));
|
|
23
|
+
}
|
|
24
|
+
/** Cap a value to a column width so fixed-width table rows stay aligned. */
|
|
25
|
+
function fitColumn(value, width) {
|
|
26
|
+
return value.length <= width ? value : value.slice(0, width - 1) + '…';
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Rich, non-destructive preview of a captured PRISM comment lifecycle.
|
|
30
|
+
*
|
|
31
|
+
* Renders a real Ink component tree (colored, aligned) derived from the captured
|
|
32
|
+
* snapshots — replacing the previous raw-markdown dump. Pure/presentational:
|
|
33
|
+
* all numbers come from {@link derivePreviewView}, no IO.
|
|
34
|
+
*/
|
|
35
|
+
export function LifecyclePreviewBody({ snapshots, captureRunId, }) {
|
|
36
|
+
const view = derivePreviewView(snapshots);
|
|
37
|
+
const shortRun = captureRunId.split('-')[0] ?? captureRunId;
|
|
38
|
+
return (_jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsxs(Text, { children: ["Captured ", _jsx(Text, { bold: true, children: view.total }), " PRISM comment", view.total === 1 ? '' : 's', _jsxs(Text, { dimColor: true, children: [" \u00B7 run ", shortRun] })] }), _jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, children: "Management" }), view.needsReview ? (_jsxs(Text, { color: "yellow", children: [' ', "\u26A0 ", view.open, " finding", view.open === 1 ? '' : 's', " still open \u2014 consider a re-review."] })) : view.resolved > 0 ? (_jsxs(Text, { color: "green", children: [' ', "\u2713 All ", view.resolved, " finding", view.resolved === 1 ? '' : 's', " addressed \u2014 no re-review needed."] })) : (_jsxs(Text, { dimColor: true, children: [' ', "No actionable findings captured."] })), _jsxs(Text, { dimColor: true, children: [' ', "Resolution ", view.resolutionRate, "% \u00B7 ", view.resolved, " resolved / ", view.open, " open"] })] }), _jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, children: "By state" }), view.states.map((s) => {
|
|
39
|
+
const color = TONE_COLOR[s.tone];
|
|
40
|
+
return (_jsxs(Text, { ...(color ? { color } : {}), dimColor: s.tone === 'muted', children: [' ', TONE_MARK[s.tone], " ", s.label.padEnd(22), " ", String(s.count).padStart(3)] }, s.state));
|
|
41
|
+
})] }), view.agents.length > 0 && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, children: "By agent" }), _jsxs(Text, { dimColor: true, children: [' ', 'Agent'.padEnd(AGENT_COL), " ", 'Comments'.padStart(8), " ", 'Resolved'.padStart(8), ' ', 'Open'.padStart(4)] }), view.agents.map((a) => (_jsxs(Text, { ...(a.open > 0 ? { color: 'yellow' } : {}), children: [' ', fitColumn(a.agentId, AGENT_COL).padEnd(AGENT_COL), " ", String(a.total).padStart(8), ' ', String(a.resolved).padStart(8), " ", String(a.open).padStart(4)] }, a.agentId)))] })), view.topFiles.length > 0 && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, children: "Top files" }), view.topFiles.map((f) => (_jsxs(Text, { ...(f.open > 0 ? { color: 'yellow' } : {}), children: [' ', shortenPath(f.path).padEnd(PATH_MAX), " ", String(f.count).padStart(3), _jsx(Text, { dimColor: true, children: f.open > 0 ? ` (${f.open} open)` : '' })] }, f.path)))] }))] }));
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=lifecycle-preview-body.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle-preview-body.js","sourceRoot":"","sources":["../../../src/tui/components/lifecycle-preview-body.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findings-list.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/findings-list.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"findings-list.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/findings-list.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAqDhE,wBAAgB,kBAAkB,IAAI,KAAK,CAAC,YAAY,CAwJvD"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useState, useCallback, useEffect
|
|
2
|
+
import { useState, useCallback, useEffect } from 'react';
|
|
3
3
|
import { Box, Text, useInput } from 'ink';
|
|
4
4
|
import { useRouter } from '../state/router-context.js';
|
|
5
5
|
import { useTUI } from '../state/tui-context.js';
|
|
@@ -38,9 +38,6 @@ export function FindingsListScreen() {
|
|
|
38
38
|
const isActive = currentScreen.name === 'findings-list';
|
|
39
39
|
const findings = state.workflow.summary?.findings ?? [];
|
|
40
40
|
const { generate, isGenerating, error: suggestError } = useSuggestRules('review');
|
|
41
|
-
// Guard against firing useEffect on initial mount when prior suggestions exist.
|
|
42
|
-
// Only auto-navigate when WE triggered the generation on this screen instance.
|
|
43
|
-
const didTriggerGenerationRef = useRef(false);
|
|
44
41
|
const items = buildListItems(findings);
|
|
45
42
|
useFooter(findings.length === 0 ? FINDINGS_LIST_EMPTY_FOOTER : FINDINGS_LIST_FOOTER);
|
|
46
43
|
const selectableIndices = items
|
|
@@ -52,15 +49,6 @@ export function FindingsListScreen() {
|
|
|
52
49
|
const cursorItemIndex = selectableIndices.length > 0
|
|
53
50
|
? (selectableIndices[cursorSelectablePos] ?? 0)
|
|
54
51
|
: -1;
|
|
55
|
-
// Auto-navigate to rule-suggestions when generation completes (generating → reviewing transition).
|
|
56
|
-
// The ref guard prevents firing on initial mount when prior suggestions already exist.
|
|
57
|
-
useEffect(() => {
|
|
58
|
-
if (didTriggerGenerationRef.current &&
|
|
59
|
-
state.suggestions.status === 'reviewing') {
|
|
60
|
-
didTriggerGenerationRef.current = false;
|
|
61
|
-
push({ name: 'rule-suggestions', params: {} });
|
|
62
|
-
}
|
|
63
|
-
}, [state.suggestions.status, push]);
|
|
64
52
|
// Mirror error from hook into local status message for inline display
|
|
65
53
|
useEffect(() => {
|
|
66
54
|
if (suggestError !== null) {
|
|
@@ -117,7 +105,6 @@ export function FindingsListScreen() {
|
|
|
117
105
|
push({ name: 'publish-confirm', params: {} });
|
|
118
106
|
}
|
|
119
107
|
else if (input === 'g' && findings.length > 0 && !isGenerating) {
|
|
120
|
-
didTriggerGenerationRef.current = true;
|
|
121
108
|
generate();
|
|
122
109
|
}
|
|
123
110
|
}, { isActive });
|
|
@@ -127,7 +114,7 @@ export function FindingsListScreen() {
|
|
|
127
114
|
const visibleItems = items.slice(windowOffset, windowOffset + WINDOW_SIZE);
|
|
128
115
|
const itemsAbove = windowOffset;
|
|
129
116
|
const itemsBelow = Math.max(0, items.length - (windowOffset + WINDOW_SIZE));
|
|
130
|
-
return (_jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsxs(Box, { flexDirection: "row", gap: 2, children: [_jsx(Text, { bold: true, color: "cyan", children: "Findings" }), _jsxs(Text, { dimColor: true, children: [findings.length, " total"] })] }), isGenerating && (_jsx(Text, { color: "yellow", children: "Generating AI rule suggestions..." })), suggestError !== null && (_jsx(Text, { color: "red", children: suggestError })), statusMessage !== null && suggestError === null && (_jsx(Text, { color: "red", children: statusMessage })), _jsxs(Box, { flexDirection: "column", children: [itemsAbove > 0 && _jsx(Text, { dimColor: true, children: `↑ ${itemsAbove} more` }), visibleItems.map((item, visIdx) => {
|
|
117
|
+
return (_jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsxs(Box, { flexDirection: "row", gap: 2, children: [_jsx(Text, { bold: true, color: "cyan", children: "Findings" }), _jsxs(Text, { dimColor: true, children: [findings.length, " total"] })] }), isGenerating && (_jsx(Text, { color: "yellow", children: "Generating AI rule suggestions..." })), state.suggestions.status === 'reviewing' && !isGenerating && (_jsx(Text, { color: "green", children: "Suggestions ready" })), suggestError !== null && (_jsx(Text, { color: "red", children: suggestError })), statusMessage !== null && suggestError === null && (_jsx(Text, { color: "red", children: statusMessage })), _jsxs(Box, { flexDirection: "column", children: [itemsAbove > 0 && _jsx(Text, { dimColor: true, children: `↑ ${itemsAbove} more` }), visibleItems.map((item, visIdx) => {
|
|
131
118
|
const absoluteIdx = windowOffset + visIdx;
|
|
132
119
|
if (item.type === 'header') {
|
|
133
120
|
return (_jsxs(Box, { flexDirection: "row", gap: 1, children: [_jsx(Text, { bold: true, color: "blue", children: item.filePath }), _jsxs(Text, { dimColor: true, children: ["(", item.count, ")"] })] }, `header-${item.filePath}`));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findings-list.js","sourceRoot":"","sources":["../../../src/tui/screens/findings-list.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"findings-list.js","sourceRoot":"","sources":["../../../src/tui/screens/findings-list.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle-preview.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/lifecycle-preview.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"lifecycle-preview.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/lifecycle-preview.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2B,MAAM,OAAO,CAAC;AAsChD,MAAM,WAAW,2BAA2B;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAID,wBAAgB,sBAAsB,CAAC,EACrC,YAAY,EACZ,KAAK,GACN,EAAE,2BAA2B,GAAG,KAAK,CAAC,YAAY,CAuNlD"}
|
|
@@ -7,6 +7,7 @@ import { useTUI } from '../state/tui-context.js';
|
|
|
7
7
|
import { useDeps } from '../deps-context.js';
|
|
8
8
|
import { BitbucketClient } from '../../bitbucket/client.js';
|
|
9
9
|
import { CommentLifecycleService } from '../../core/comment-lifecycle-service.js';
|
|
10
|
+
import { LifecyclePreviewBody } from '../components/lifecycle-preview-body.js';
|
|
10
11
|
// ── Footer items ───────────────────────────────────────────────────────────────
|
|
11
12
|
const PREVIEW_FOOTER = [
|
|
12
13
|
{ key: 'Enter', label: 'confirm — post summary + delete' },
|
|
@@ -22,7 +23,6 @@ export function LifecyclePreviewScreen({ captureRunId, prUrl, }) {
|
|
|
22
23
|
const [confirmPhase, setConfirmPhase] = useState('idle');
|
|
23
24
|
const [partialFailure, setPartialFailure] = useState(null);
|
|
24
25
|
const [errorState, setErrorState] = useState(null);
|
|
25
|
-
const isPreview = confirmPhase === 'idle';
|
|
26
26
|
const isConfirming = confirmPhase === 'confirming';
|
|
27
27
|
const footerItems = confirmPhase === 'error' || confirmPhase === 'partial-failure'
|
|
28
28
|
? ERROR_FOOTER
|
|
@@ -30,8 +30,9 @@ export function LifecyclePreviewScreen({ captureRunId, prUrl, }) {
|
|
|
30
30
|
? CONFIRMING_FOOTER
|
|
31
31
|
: PREVIEW_FOOTER;
|
|
32
32
|
useFooter(footerItems);
|
|
33
|
-
//
|
|
34
|
-
|
|
33
|
+
// Rich preview is rendered from the captured snapshots (populated by
|
|
34
|
+
// LIFECYCLE_PREVIEW_READY) — not from the markdown previewReport string.
|
|
35
|
+
const previewSnapshots = state.lifecycle.previewSnapshots ?? [];
|
|
35
36
|
// ── Dependencies ─────────────────────────────────────────────────────────────
|
|
36
37
|
// NOTE: This screen reconstructs CommentLifecycleService from credentials on
|
|
37
38
|
// mount — same DI deviation pattern as lifecycle-running.tsx:53-66. Intentional.
|
|
@@ -119,7 +120,9 @@ export function LifecyclePreviewScreen({ captureRunId, prUrl, }) {
|
|
|
119
120
|
setConfirmPhase('partial-failure');
|
|
120
121
|
return;
|
|
121
122
|
}
|
|
122
|
-
// Full success — transition to lifecycle-summary
|
|
123
|
+
// Full success — transition to lifecycle-summary. Forward prUrl so the
|
|
124
|
+
// summary can offer a "new review" pre-filled with the same PR URL the
|
|
125
|
+
// lifecycle already started from (no re-typing).
|
|
123
126
|
replace({
|
|
124
127
|
name: 'lifecycle-summary',
|
|
125
128
|
params: {
|
|
@@ -129,6 +132,7 @@ export function LifecyclePreviewScreen({ captureRunId, prUrl, }) {
|
|
|
129
132
|
captureErrors: 0,
|
|
130
133
|
cleanupSucceeded: cleanupResult.succeeded,
|
|
131
134
|
cleanupFailed: cleanupResult.failed,
|
|
135
|
+
prUrl,
|
|
132
136
|
},
|
|
133
137
|
});
|
|
134
138
|
}
|
|
@@ -149,6 +153,6 @@ export function LifecyclePreviewScreen({ captureRunId, prUrl, }) {
|
|
|
149
153
|
if (isConfirming) {
|
|
150
154
|
return (_jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: "Comment Lifecycle \u2014 Confirming" }), _jsx(Text, { dimColor: true, children: prUrl }), _jsx(Text, { children: "Posting summary and cleaning up PRISM comments..." })] }));
|
|
151
155
|
}
|
|
152
|
-
return (_jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: "Comment Lifecycle \u2014 Preview" }), _jsx(Text, { dimColor: true, children: prUrl }),
|
|
156
|
+
return (_jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: "Comment Lifecycle \u2014 Preview" }), _jsx(Text, { dimColor: true, children: prUrl }), _jsx(LifecyclePreviewBody, { snapshots: previewSnapshots, captureRunId: captureRunId }), _jsx(Text, { dimColor: true, children: "Confirming will POST 1 summary comment and DELETE all eligible PRISM root comments. Dev replies are never touched." })] }));
|
|
153
157
|
}
|
|
154
158
|
//# sourceMappingURL=lifecycle-preview.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle-preview.js","sourceRoot":"","sources":["../../../src/tui/screens/lifecycle-preview.tsx"],"names":[],"mappings":";AAAA,OAAc,
|
|
1
|
+
{"version":3,"file":"lifecycle-preview.js","sourceRoot":"","sources":["../../../src/tui/screens/lifecycle-preview.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle-running.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/lifecycle-running.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAe3D,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,sBAAsB,CAAC,EAAE,KAAK,EAAE,EAAE,2BAA2B,GAAG,KAAK,CAAC,YAAY,
|
|
1
|
+
{"version":3,"file":"lifecycle-running.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/lifecycle-running.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAe3D,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,sBAAsB,CAAC,EAAE,KAAK,EAAE,EAAE,2BAA2B,GAAG,KAAK,CAAC,YAAY,CAwHjG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle-running.js","sourceRoot":"","sources":["../../../src/tui/screens/lifecycle-running.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"lifecycle-running.js","sourceRoot":"","sources":["../../../src/tui/screens/lifecycle-running.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle-summary.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/lifecycle-summary.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"lifecycle-summary.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/lifecycle-summary.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAY1B,wBAAgB,sBAAsB,IAAI,KAAK,CAAC,YAAY,CAoF3D"}
|
|
@@ -2,9 +2,12 @@ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { Box, Text, useInput } from 'ink';
|
|
3
3
|
import { useFooter } from '../hooks/use-footer.js';
|
|
4
4
|
import { useRouter } from '../state/router-context.js';
|
|
5
|
-
const DONE_FOOTER = [
|
|
5
|
+
const DONE_FOOTER = [
|
|
6
|
+
{ key: 'Enter', label: 'start a new review' },
|
|
7
|
+
{ key: 'Esc', label: 'home' },
|
|
8
|
+
];
|
|
6
9
|
export function LifecycleSummaryScreen() {
|
|
7
|
-
const { currentScreen, reset } = useRouter();
|
|
10
|
+
const { currentScreen, reset, push } = useRouter();
|
|
8
11
|
const isActive = currentScreen.name === 'lifecycle-summary';
|
|
9
12
|
useFooter(DONE_FOOTER);
|
|
10
13
|
const params = currentScreen.params;
|
|
@@ -13,12 +16,27 @@ export function LifecycleSummaryScreen() {
|
|
|
13
16
|
const captureErrors = typeof params['captureErrors'] === 'number' ? params['captureErrors'] : 0;
|
|
14
17
|
const cleanupSucceeded = typeof params['cleanupSucceeded'] === 'number' ? params['cleanupSucceeded'] : 0;
|
|
15
18
|
const cleanupFailed = typeof params['cleanupFailed'] === 'number' ? params['cleanupFailed'] : 0;
|
|
19
|
+
const prUrl = typeof params['prUrl'] === 'string' ? params['prUrl'] : '';
|
|
16
20
|
const rawStateCounts = params['stateCounts'];
|
|
17
21
|
const stateCounts = rawStateCounts !== null && typeof rawStateCounts === 'object' && !Array.isArray(rawStateCounts)
|
|
18
22
|
? rawStateCounts
|
|
19
23
|
: {};
|
|
20
|
-
useInput(() => {
|
|
21
|
-
|
|
24
|
+
useInput((_input, key) => {
|
|
25
|
+
if (key.return) {
|
|
26
|
+
// Start a fresh review via the "Review by URL" screen, pre-filled with the
|
|
27
|
+
// PR URL the lifecycle already ran against — the user can just press Enter
|
|
28
|
+
// to re-review the same PR (or edit it for another). Rebuild the stack as
|
|
29
|
+
// [home, url-input] so the URL screen's Esc/back still returns home. A bare
|
|
30
|
+
// reset would leave url-input as the sole stack entry and strand the user —
|
|
31
|
+
// POP is a no-op at stack length 1 (router-reducer.ts), and url-input
|
|
32
|
+
// escapes via pop(). This mirrors the normal "new review" entry (home → push).
|
|
33
|
+
reset({ name: 'home', params: {} });
|
|
34
|
+
push({ name: 'url-input', params: { prUrl } });
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (key.escape) {
|
|
38
|
+
reset({ name: 'home', params: {} });
|
|
39
|
+
}
|
|
22
40
|
}, { isActive });
|
|
23
41
|
const statusColor = status === 'completed' ? 'green' :
|
|
24
42
|
status === 'cleanup_partial' ? 'yellow' :
|
|
@@ -27,6 +45,6 @@ export function LifecycleSummaryScreen() {
|
|
|
27
45
|
status === 'cleanup_partial' ? 'Partial cleanup' :
|
|
28
46
|
status === 'summary_failed' ? 'Summary failed' :
|
|
29
47
|
'Capture failed';
|
|
30
|
-
return (_jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsxs(Text, { bold: true, color: statusColor, children: ["Lifecycle Summary \u2014 ", statusLabel] }), _jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { children: ["Total PRISM comments: ", _jsx(Text, { bold: true, children: totalPrismComments })] }), captureErrors > 0 && (_jsxs(Text, { color: "yellow", children: ["Capture errors: ", _jsx(Text, { bold: true, children: captureErrors })] }))] }), Object.keys(stateCounts).length > 0 && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { dimColor: true, children: "State breakdown:" }), Object.entries(stateCounts).map(([state, count]) => (_jsxs(Text, { dimColor: true, children: [" ", state, ": ", _jsx(Text, { bold: true, children: count })] }, state)))] })), (cleanupSucceeded > 0 || cleanupFailed > 0) && (_jsx(Box, { flexDirection: "column", children: _jsxs(Text, { dimColor: true, children: ["Cleanup: ", _jsx(Text, { bold: true, color: "green", children: cleanupSucceeded }), " deleted", cleanupFailed > 0 && _jsxs(Text, { children: [", ", _jsx(Text, { bold: true, color: "yellow", children: cleanupFailed }), " failed"] })] }) })), _jsx(Text, { dimColor: true, children: "
|
|
48
|
+
return (_jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsxs(Text, { bold: true, color: statusColor, children: ["Lifecycle Summary \u2014 ", statusLabel] }), _jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { children: ["Total PRISM comments: ", _jsx(Text, { bold: true, children: totalPrismComments })] }), captureErrors > 0 && (_jsxs(Text, { color: "yellow", children: ["Capture errors: ", _jsx(Text, { bold: true, children: captureErrors })] }))] }), Object.keys(stateCounts).length > 0 && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { dimColor: true, children: "State breakdown:" }), Object.entries(stateCounts).map(([state, count]) => (_jsxs(Text, { dimColor: true, children: [" ", state, ": ", _jsx(Text, { bold: true, children: count })] }, state)))] })), (cleanupSucceeded > 0 || cleanupFailed > 0) && (_jsx(Box, { flexDirection: "column", children: _jsxs(Text, { dimColor: true, children: ["Cleanup: ", _jsx(Text, { bold: true, color: "green", children: cleanupSucceeded }), " deleted", cleanupFailed > 0 && _jsxs(Text, { children: [", ", _jsx(Text, { bold: true, color: "yellow", children: cleanupFailed }), " failed"] })] }) })), _jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { children: "Start a new review? The PR URL is pre-filled \u2014 edit it to review another PR." }), _jsx(Text, { dimColor: true, children: "[Enter] start a new review \u00B7 [Esc] return home" })] })] }));
|
|
31
49
|
}
|
|
32
50
|
//# sourceMappingURL=lifecycle-summary.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle-summary.js","sourceRoot":"","sources":["../../../src/tui/screens/lifecycle-summary.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAGvD,MAAM,WAAW,GAAiB,
|
|
1
|
+
{"version":3,"file":"lifecycle-summary.js","sourceRoot":"","sources":["../../../src/tui/screens/lifecycle-summary.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publishing.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/publishing.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"publishing.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/publishing.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AA0BxC,wBAAgB,gBAAgB,IAAI,KAAK,CAAC,YAAY,CA0JrD"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
2
3
|
import { Box, Text, useInput } from 'ink';
|
|
3
4
|
import { Spinner } from '../components/spinner.js';
|
|
4
5
|
import { useFooter } from '../hooks/use-footer.js';
|
|
5
6
|
import { useAlert } from '../hooks/use-alert.js';
|
|
6
7
|
import { useRouter } from '../state/router-context.js';
|
|
7
8
|
import { useTUI } from '../state/tui-context.js';
|
|
9
|
+
import { useSuggestRules } from '../hooks/use-suggest-rules.js';
|
|
8
10
|
import { formatCost } from '../../utils/cost-estimator.js';
|
|
9
11
|
const PUBLISHING_ERROR_FOOTER = [
|
|
10
12
|
{ key: 'Esc', label: 'home' },
|
|
@@ -12,23 +14,42 @@ const PUBLISHING_ERROR_FOOTER = [
|
|
|
12
14
|
const PUBLISHING_COMPLETE_FOOTER = [
|
|
13
15
|
{ key: 'any key', label: 'home' },
|
|
14
16
|
];
|
|
15
|
-
const
|
|
16
|
-
{ key: '
|
|
17
|
+
const PUBLISHING_SUGGEST_FOOTER = [
|
|
18
|
+
{ key: 'g', label: 'suggest rules' },
|
|
19
|
+
{ key: 'any key', label: 'home' },
|
|
17
20
|
];
|
|
18
21
|
const PUBLISHING_EMPTY_FOOTER = [];
|
|
19
22
|
export function PublishingScreen() {
|
|
20
23
|
const { state, dispatch } = useTUI();
|
|
21
|
-
const { reset, currentScreen } = useRouter();
|
|
24
|
+
const { push, reset, currentScreen } = useRouter();
|
|
22
25
|
const isActive = currentScreen.name === 'publishing';
|
|
23
26
|
const { workflow } = state;
|
|
27
|
+
const { generate } = useSuggestRules('review');
|
|
28
|
+
const [showReport, setShowReport] = useState(false);
|
|
24
29
|
const footerItems = workflow.status === 'error' ? PUBLISHING_ERROR_FOOTER :
|
|
25
30
|
workflow.status === 'complete' ? PUBLISHING_COMPLETE_FOOTER :
|
|
26
|
-
workflow.status === 'publish-complete' ?
|
|
27
|
-
|
|
31
|
+
(workflow.status === 'publish-complete' && showReport) ? PUBLISHING_COMPLETE_FOOTER :
|
|
32
|
+
workflow.status === 'publish-complete' ? PUBLISHING_SUGGEST_FOOTER :
|
|
33
|
+
PUBLISHING_EMPTY_FOOTER;
|
|
28
34
|
useFooter(footerItems);
|
|
29
35
|
useAlert(workflow.status === 'complete' || workflow.status === 'publish-complete' || workflow.status === 'error');
|
|
30
|
-
useInput((
|
|
31
|
-
if (workflow.status === 'publish-complete'
|
|
36
|
+
useInput((input, key) => {
|
|
37
|
+
if (workflow.status === 'publish-complete') {
|
|
38
|
+
if (input === 'g' && !showReport) {
|
|
39
|
+
if (state.suggestions.status !== 'reviewing') {
|
|
40
|
+
generate();
|
|
41
|
+
}
|
|
42
|
+
push({ name: 'rule-suggestions', params: {} });
|
|
43
|
+
}
|
|
44
|
+
else if (workflow.finalReport !== null && !showReport) {
|
|
45
|
+
setShowReport(true);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
dispatch({ type: 'WORKFLOW_RESET' });
|
|
49
|
+
reset({ name: 'home', params: {} });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
else if (workflow.status === 'complete') {
|
|
32
53
|
dispatch({ type: 'WORKFLOW_RESET' });
|
|
33
54
|
reset({ name: 'home', params: {} });
|
|
34
55
|
}
|
|
@@ -42,7 +63,7 @@ export function PublishingScreen() {
|
|
|
42
63
|
return (_jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsx(Text, { bold: true, color: "red", children: "Publishing Error" }), _jsx(Text, { color: "red", children: workflow.error ?? 'An unknown error occurred' })] }));
|
|
43
64
|
}
|
|
44
65
|
// ── Complete state (final report) ────────────────────────────────────────────
|
|
45
|
-
if (workflow.status === 'complete' && workflow.finalReport !== null) {
|
|
66
|
+
if ((workflow.status === 'complete' || showReport) && workflow.finalReport !== null) {
|
|
46
67
|
const report = workflow.finalReport;
|
|
47
68
|
const pr = workflow.publishResult;
|
|
48
69
|
return (_jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsx(Text, { bold: true, color: "green", children: "Review Complete" }), pr !== null && (_jsxs(Box, { flexDirection: "row", gap: 2, children: [_jsxs(Text, { children: ["Published: ", _jsx(Text, { color: "green", bold: true, children: pr.publishedCount })] }), pr.skippedCount > 0 && (_jsxs(Text, { children: ["Skipped: ", _jsx(Text, { color: "yellow", children: pr.skippedCount })] })), pr.failedCount > 0 && (_jsxs(Text, { children: ["Failed: ", _jsx(Text, { color: "red", children: pr.failedCount })] }))] })), _jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { dimColor: true, children: ["Cost: ", formatCost(report.cost, report.usage)] }), report.sessionId !== null && (_jsxs(Text, { dimColor: true, children: ["Session: ", report.sessionId] })), _jsxs(Text, { dimColor: true, children: ["Memory: ", report.memorySaved ? 'Saved to local DB' : 'Failed to save findings'] }), workflow.summaryComment !== null && (_jsx(Text, { dimColor: true, children: "Summary: Posted to Bitbucket" }))] })] }));
|