agentflight 0.3.3 → 0.4.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.
- package/CHANGELOG.md +39 -0
- package/README.md +41 -9
- package/dist/commands/replay.d.ts.map +1 -1
- package/dist/commands/replay.js +9 -4
- package/dist/commands/replay.js.map +1 -1
- package/dist/commands/report.d.ts.map +1 -1
- package/dist/commands/report.js +9 -4
- package/dist/commands/report.js.map +1 -1
- package/dist/commands/resume.d.ts.map +1 -1
- package/dist/commands/resume.js +10 -3
- package/dist/commands/resume.js.map +1 -1
- package/dist/commands/snapshot.d.ts.map +1 -1
- package/dist/commands/snapshot.js +13 -2
- package/dist/commands/snapshot.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +28 -6
- package/dist/commands/status.js.map +1 -1
- package/dist/core/changed-files.d.ts +4 -0
- package/dist/core/changed-files.d.ts.map +1 -1
- package/dist/core/changed-files.js +56 -0
- package/dist/core/changed-files.js.map +1 -1
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +3 -0
- package/dist/core/config.js.map +1 -1
- package/dist/core/review-intelligence.d.ts +9 -0
- package/dist/core/review-intelligence.d.ts.map +1 -0
- package/dist/core/review-intelligence.js +340 -0
- package/dist/core/review-intelligence.js.map +1 -0
- package/dist/renderers/html-replay.d.ts +2 -1
- package/dist/renderers/html-replay.d.ts.map +1 -1
- package/dist/renderers/html-replay.js +37 -0
- package/dist/renderers/html-replay.js.map +1 -1
- package/dist/renderers/markdown-report.d.ts +3 -3
- package/dist/renderers/markdown-report.d.ts.map +1 -1
- package/dist/renderers/markdown-report.js +35 -5
- package/dist/renderers/markdown-report.js.map +1 -1
- package/dist/renderers/resume-prompt.d.ts +4 -1
- package/dist/renderers/resume-prompt.d.ts.map +1 -1
- package/dist/renderers/resume-prompt.js +32 -2
- package/dist/renderers/resume-prompt.js.map +1 -1
- package/dist/types/index.d.ts +39 -0
- package/dist/types/index.d.ts.map +1 -1
- package/docs/assets/agentflight-replay-timeline.png +0 -0
- package/docs/development/changed-file-filters.md +58 -0
- package/docs/{roadmap.md → roadmap/index.md} +5 -0
- package/docs/roadmap/v0.4.0-review-intelligence-plan.md +882 -0
- package/package.json +4 -2
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AgentFlightSession, ReviewIntelligence, RiskAnalysis, VerificationProofKind } from "../types/index.js";
|
|
2
|
+
export interface BuildReviewIntelligenceOptions {
|
|
3
|
+
changedFiles: string[];
|
|
4
|
+
risk: RiskAnalysis;
|
|
5
|
+
session: AgentFlightSession;
|
|
6
|
+
}
|
|
7
|
+
export declare function buildReviewIntelligence(options: BuildReviewIntelligenceOptions): ReviewIntelligence;
|
|
8
|
+
export declare function classifyVerificationProofKind(command: string): VerificationProofKind;
|
|
9
|
+
//# sourceMappingURL=review-intelligence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-intelligence.d.ts","sourceRoot":"","sources":["../../src/core/review-intelligence.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,kBAAkB,EAGlB,kBAAkB,EAIlB,YAAY,EAGZ,qBAAqB,EAEtB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,8BAA8B;IAC7C,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,kBAAkB,CAAC;CAC7B;AAsCD,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,8BAA8B,GACtC,kBAAkB,CA2BpB;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB,CAUpF"}
|
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
import { categorizeFile } from "./risk.js";
|
|
2
|
+
import { getVerificationRuns } from "./session.js";
|
|
3
|
+
const baseScores = {
|
|
4
|
+
auth: 100,
|
|
5
|
+
"billing/payments": 95,
|
|
6
|
+
"security/secrets": 95,
|
|
7
|
+
"database/migrations": 90,
|
|
8
|
+
config: 75,
|
|
9
|
+
"backend/api": 70,
|
|
10
|
+
dependencies: 65,
|
|
11
|
+
unknown: 50,
|
|
12
|
+
frontend: 35,
|
|
13
|
+
tests: 20,
|
|
14
|
+
docs: 10
|
|
15
|
+
};
|
|
16
|
+
const reviewerFocusByCategory = new Map([
|
|
17
|
+
["auth", "Check session, permission, and identity boundaries first."],
|
|
18
|
+
["billing/payments", "Check payment state, idempotency, and webhook handling first."],
|
|
19
|
+
["security/secrets", "Check credential handling and accidental exposure first."],
|
|
20
|
+
["database/migrations", "Check data model, migration safety, and rollback assumptions first."],
|
|
21
|
+
["config", "Check build, CI, and runtime configuration impact first."],
|
|
22
|
+
["backend/api", "Check request handling, validation, and error paths first."],
|
|
23
|
+
["dependencies", "Check install/build impact and dependency risk first."],
|
|
24
|
+
["frontend", "Check user-facing behavior and build evidence first."],
|
|
25
|
+
["tests", "Check whether tests cover the changed behavior."],
|
|
26
|
+
["docs", "Check accuracy and scope of documentation changes."],
|
|
27
|
+
["unknown", "Inspect manually because AgentFlight could not classify this file."]
|
|
28
|
+
]);
|
|
29
|
+
const readinessLabels = {
|
|
30
|
+
ready_for_review: "Ready for review",
|
|
31
|
+
not_ready_for_review: "Not ready for review",
|
|
32
|
+
needs_verification: "Needs verification",
|
|
33
|
+
blocked_by_failed_verification: "Blocked by failed verification",
|
|
34
|
+
unknown: "Unknown"
|
|
35
|
+
};
|
|
36
|
+
export function buildReviewIntelligence(options) {
|
|
37
|
+
const runs = getVerificationRuns(options.session);
|
|
38
|
+
const proofKinds = summarizeProofKinds(runs);
|
|
39
|
+
const proofGaps = buildProofGaps({
|
|
40
|
+
changedFiles: options.changedFiles,
|
|
41
|
+
verificationCommands: options.session.verificationCommands,
|
|
42
|
+
proofKinds,
|
|
43
|
+
runs
|
|
44
|
+
});
|
|
45
|
+
const focus = buildReviewFocus({
|
|
46
|
+
changedFiles: options.changedFiles,
|
|
47
|
+
proofGaps,
|
|
48
|
+
proofKinds,
|
|
49
|
+
runs
|
|
50
|
+
});
|
|
51
|
+
const readiness = buildReadinessDecision({
|
|
52
|
+
changedFiles: options.changedFiles,
|
|
53
|
+
proofGaps,
|
|
54
|
+
focus,
|
|
55
|
+
runs
|
|
56
|
+
});
|
|
57
|
+
return {
|
|
58
|
+
focus,
|
|
59
|
+
proofGaps,
|
|
60
|
+
readiness
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
export function classifyVerificationProofKind(command) {
|
|
64
|
+
const normalized = command.toLowerCase();
|
|
65
|
+
if (/\b(npm|pnpm|yarn|bun)\s+(ci|install)\b/.test(normalized))
|
|
66
|
+
return "install";
|
|
67
|
+
if (/\b(vitest|jest|mocha|playwright|cypress|test)\b/.test(normalized))
|
|
68
|
+
return "test";
|
|
69
|
+
if (/\bbuild\b/.test(normalized))
|
|
70
|
+
return "build";
|
|
71
|
+
if (/\b(typecheck|tsc)\b/.test(normalized))
|
|
72
|
+
return "typecheck";
|
|
73
|
+
if (/\b(lint|eslint)\b/.test(normalized))
|
|
74
|
+
return "lint";
|
|
75
|
+
return "unknown";
|
|
76
|
+
}
|
|
77
|
+
function summarizeProofKinds(runs) {
|
|
78
|
+
const passed = new Set();
|
|
79
|
+
const failed = new Set();
|
|
80
|
+
for (const run of runs) {
|
|
81
|
+
const kind = classifyVerificationProofKind(run.command);
|
|
82
|
+
if (run.status === "passed")
|
|
83
|
+
passed.add(kind);
|
|
84
|
+
if (run.status === "failed")
|
|
85
|
+
failed.add(kind);
|
|
86
|
+
}
|
|
87
|
+
return { passed, failed };
|
|
88
|
+
}
|
|
89
|
+
function buildProofGaps(input) {
|
|
90
|
+
const gaps = [];
|
|
91
|
+
const failedRuns = input.runs.filter((run) => run.status === "failed");
|
|
92
|
+
if (failedRuns.length > 0) {
|
|
93
|
+
const failedCommand = failedRuns[0].command;
|
|
94
|
+
gaps.push({
|
|
95
|
+
id: "failed-verification",
|
|
96
|
+
severity: "blocking",
|
|
97
|
+
message: `A verification command failed and must be fixed or rerun successfully: ${failedCommand}`,
|
|
98
|
+
suggestedCommand: failedCommand,
|
|
99
|
+
relatedFiles: input.changedFiles
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
const filesByCategory = groupFilesByCategory(input.changedFiles);
|
|
103
|
+
addCategoryGap(gaps, input, filesByCategory, {
|
|
104
|
+
categories: ["auth", "billing/payments", "security/secrets"],
|
|
105
|
+
id: "missing-auth-test-proof",
|
|
106
|
+
severity: "blocking",
|
|
107
|
+
proofKinds: ["test"],
|
|
108
|
+
message: "Sensitive auth, payment, or security files changed without passing test evidence."
|
|
109
|
+
});
|
|
110
|
+
addCategoryGap(gaps, input, filesByCategory, {
|
|
111
|
+
categories: ["database/migrations"],
|
|
112
|
+
id: "missing-database-test-proof",
|
|
113
|
+
severity: "blocking",
|
|
114
|
+
proofKinds: ["test", "build"],
|
|
115
|
+
message: "Database schema or migration files changed without passing test or build evidence."
|
|
116
|
+
});
|
|
117
|
+
addCategoryGap(gaps, input, filesByCategory, {
|
|
118
|
+
categories: ["backend/api"],
|
|
119
|
+
id: "missing-backend-proof",
|
|
120
|
+
severity: "warning",
|
|
121
|
+
proofKinds: ["test", "build"],
|
|
122
|
+
message: "Backend/API files changed without passing test or build evidence."
|
|
123
|
+
});
|
|
124
|
+
addCategoryGap(gaps, input, filesByCategory, {
|
|
125
|
+
categories: ["dependencies"],
|
|
126
|
+
id: "missing-dependency-proof",
|
|
127
|
+
severity: "warning",
|
|
128
|
+
proofKinds: ["install", "build", "typecheck", "test"],
|
|
129
|
+
message: "Dependency files changed without install, build, typecheck, or test evidence."
|
|
130
|
+
});
|
|
131
|
+
addCategoryGap(gaps, input, filesByCategory, {
|
|
132
|
+
categories: ["config"],
|
|
133
|
+
id: "missing-config-proof",
|
|
134
|
+
severity: "warning",
|
|
135
|
+
proofKinds: ["lint", "typecheck", "build"],
|
|
136
|
+
message: "Config or CI files changed without lint, typecheck, or build evidence."
|
|
137
|
+
});
|
|
138
|
+
addCategoryGap(gaps, input, filesByCategory, {
|
|
139
|
+
categories: ["frontend"],
|
|
140
|
+
id: "missing-frontend-build-proof",
|
|
141
|
+
severity: "warning",
|
|
142
|
+
proofKinds: ["build", "test"],
|
|
143
|
+
message: "Frontend files changed without passing build or test evidence."
|
|
144
|
+
});
|
|
145
|
+
addCategoryGap(gaps, input, filesByCategory, {
|
|
146
|
+
categories: ["tests"],
|
|
147
|
+
id: "missing-test-suite-proof",
|
|
148
|
+
severity: "warning",
|
|
149
|
+
proofKinds: ["test"],
|
|
150
|
+
message: "Test files changed without passing test evidence."
|
|
151
|
+
});
|
|
152
|
+
return gaps;
|
|
153
|
+
}
|
|
154
|
+
function addCategoryGap(gaps, input, filesByCategory, rule) {
|
|
155
|
+
const relatedFiles = rule.categories.flatMap((category) => filesByCategory.get(category) ?? []);
|
|
156
|
+
if (relatedFiles.length === 0)
|
|
157
|
+
return;
|
|
158
|
+
if (rule.proofKinds.some((kind) => input.proofKinds.passed.has(kind)))
|
|
159
|
+
return;
|
|
160
|
+
const suggestedCommand = findSuggestedCommand(input.verificationCommands, rule.proofKinds);
|
|
161
|
+
gaps.push({
|
|
162
|
+
id: rule.id,
|
|
163
|
+
severity: rule.severity,
|
|
164
|
+
message: rule.message,
|
|
165
|
+
...(suggestedCommand ? { suggestedCommand } : {}),
|
|
166
|
+
relatedFiles
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
function buildReviewFocus(input) {
|
|
170
|
+
const hasFailedVerification = input.runs.some((run) => run.status === "failed");
|
|
171
|
+
const items = input.changedFiles.map((file) => {
|
|
172
|
+
const category = categorizeFile(file);
|
|
173
|
+
const relatedGaps = input.proofGaps.filter((gap) => gap.relatedFiles.includes(file));
|
|
174
|
+
const proofStatus = determineProofStatus({
|
|
175
|
+
category,
|
|
176
|
+
relatedGaps,
|
|
177
|
+
hasFailedVerification,
|
|
178
|
+
proofKinds: input.proofKinds
|
|
179
|
+
});
|
|
180
|
+
const reasons = buildFocusReasons(category, proofStatus, relatedGaps);
|
|
181
|
+
const score = scoreFocusItem(category, proofStatus, relatedGaps, hasFailedVerification);
|
|
182
|
+
const suggestedCommand = relatedGaps.find((gap) => gap.suggestedCommand)?.suggestedCommand;
|
|
183
|
+
return {
|
|
184
|
+
rank: 0,
|
|
185
|
+
file,
|
|
186
|
+
category,
|
|
187
|
+
riskLevel: riskLevelForCategory(category),
|
|
188
|
+
score,
|
|
189
|
+
reasons,
|
|
190
|
+
suggestedReviewerFocus: suggestedReviewerFocus(category),
|
|
191
|
+
proofStatus,
|
|
192
|
+
...(suggestedCommand ? { suggestedCommand } : {}),
|
|
193
|
+
relatedProofGapIds: relatedGaps.map((gap) => gap.id)
|
|
194
|
+
};
|
|
195
|
+
});
|
|
196
|
+
return items
|
|
197
|
+
.sort((left, right) => right.score - left.score || left.file.localeCompare(right.file))
|
|
198
|
+
.map((item, index) => ({ ...item, rank: index + 1 }));
|
|
199
|
+
}
|
|
200
|
+
function determineProofStatus(input) {
|
|
201
|
+
if (input.hasFailedVerification && input.category !== "docs")
|
|
202
|
+
return "failed";
|
|
203
|
+
if (input.relatedGaps.length > 0)
|
|
204
|
+
return "missing";
|
|
205
|
+
if (input.category === "docs")
|
|
206
|
+
return "not_required";
|
|
207
|
+
if (input.proofKinds.passed.size > 0)
|
|
208
|
+
return "covered";
|
|
209
|
+
return input.category === "unknown" ? "unknown" : "not_required";
|
|
210
|
+
}
|
|
211
|
+
function buildReadinessDecision(input) {
|
|
212
|
+
const failedRuns = input.runs.filter((run) => run.status === "failed");
|
|
213
|
+
if (failedRuns.length > 0) {
|
|
214
|
+
const failedCommand = failedRuns[0].command;
|
|
215
|
+
return readinessDecision({
|
|
216
|
+
state: "blocked_by_failed_verification",
|
|
217
|
+
reason: `A verification command failed and must be fixed or rerun successfully: ${failedCommand}`,
|
|
218
|
+
nextAction: `Fix the failed command, then rerun agentflight verify -- ${failedCommand}`,
|
|
219
|
+
suggestedCommand: failedCommand,
|
|
220
|
+
proofGaps: input.proofGaps,
|
|
221
|
+
failedVerificationSummary: failedRuns.map((run) => `${run.command} failed`).join("; ")
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
if (input.changedFiles.length === 0) {
|
|
225
|
+
return readinessDecision({
|
|
226
|
+
state: "unknown",
|
|
227
|
+
reason: "No changed files were detected for review.",
|
|
228
|
+
nextAction: "Make changes or inspect git status before requesting review.",
|
|
229
|
+
proofGaps: input.proofGaps
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
const blockingGap = input.proofGaps.find((gap) => gap.severity === "blocking");
|
|
233
|
+
const firstGap = blockingGap ?? input.proofGaps[0];
|
|
234
|
+
if (firstGap) {
|
|
235
|
+
const state = blockingGap ? "needs_verification" : "needs_verification";
|
|
236
|
+
const suggestedCommand = firstGap.suggestedCommand;
|
|
237
|
+
return readinessDecision({
|
|
238
|
+
state,
|
|
239
|
+
reason: firstGap.message,
|
|
240
|
+
nextAction: suggestedCommand
|
|
241
|
+
? `Run agentflight verify -- ${suggestedCommand}`
|
|
242
|
+
: "Run relevant verification before requesting review.",
|
|
243
|
+
suggestedCommand,
|
|
244
|
+
proofGaps: input.proofGaps
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
return readinessDecision({
|
|
248
|
+
state: "ready_for_review",
|
|
249
|
+
reason: "Verification evidence matches the observed review risk.",
|
|
250
|
+
nextAction: "Generate or share the AgentFlight report/replay and request scoped human review.",
|
|
251
|
+
proofGaps: []
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
function readinessDecision(input) {
|
|
255
|
+
return {
|
|
256
|
+
state: input.state,
|
|
257
|
+
label: labelReadiness(input.state),
|
|
258
|
+
reason: input.reason,
|
|
259
|
+
nextAction: input.nextAction,
|
|
260
|
+
...(input.suggestedCommand ? { suggestedCommand: input.suggestedCommand } : {}),
|
|
261
|
+
proofGaps: input.proofGaps,
|
|
262
|
+
...(input.failedVerificationSummary
|
|
263
|
+
? { failedVerificationSummary: input.failedVerificationSummary }
|
|
264
|
+
: {})
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
function scoreFocusItem(category, proofStatus, relatedGaps, hasFailedVerification) {
|
|
268
|
+
let score = baseScores[category];
|
|
269
|
+
if (proofStatus === "missing")
|
|
270
|
+
score += 30;
|
|
271
|
+
if (hasFailedVerification && category !== "docs")
|
|
272
|
+
score += 40;
|
|
273
|
+
if (category === "dependencies" && relatedGaps.length > 0)
|
|
274
|
+
score += 20;
|
|
275
|
+
if (category === "config" && relatedGaps.length > 0)
|
|
276
|
+
score += 15;
|
|
277
|
+
if (category === "unknown")
|
|
278
|
+
score += 10;
|
|
279
|
+
return score;
|
|
280
|
+
}
|
|
281
|
+
function buildFocusReasons(category, proofStatus, relatedGaps) {
|
|
282
|
+
const reasons = [categoryLabel(category)];
|
|
283
|
+
if (proofStatus === "failed")
|
|
284
|
+
reasons.push("verification failed");
|
|
285
|
+
if (relatedGaps.some((gap) => gap.message.toLowerCase().includes("test"))) {
|
|
286
|
+
reasons.push("no passing test evidence");
|
|
287
|
+
}
|
|
288
|
+
else if (relatedGaps.length > 0) {
|
|
289
|
+
reasons.push("matching proof missing");
|
|
290
|
+
}
|
|
291
|
+
return reasons;
|
|
292
|
+
}
|
|
293
|
+
function categoryLabel(category) {
|
|
294
|
+
if (category === "auth")
|
|
295
|
+
return "identity/session path";
|
|
296
|
+
if (category === "billing/payments")
|
|
297
|
+
return "payment-sensitive path";
|
|
298
|
+
if (category === "security/secrets")
|
|
299
|
+
return "credential-handling path";
|
|
300
|
+
if (category === "database/migrations")
|
|
301
|
+
return "database schema or migration path";
|
|
302
|
+
if (category === "backend/api")
|
|
303
|
+
return "backend/API file";
|
|
304
|
+
if (category === "dependencies")
|
|
305
|
+
return "dependency metadata changed";
|
|
306
|
+
if (category === "config")
|
|
307
|
+
return "configuration or CI path";
|
|
308
|
+
return `${category} file`;
|
|
309
|
+
}
|
|
310
|
+
function groupFilesByCategory(files) {
|
|
311
|
+
const grouped = new Map();
|
|
312
|
+
for (const file of files) {
|
|
313
|
+
const category = categorizeFile(file);
|
|
314
|
+
grouped.set(category, [...(grouped.get(category) ?? []), file]);
|
|
315
|
+
}
|
|
316
|
+
return grouped;
|
|
317
|
+
}
|
|
318
|
+
function findSuggestedCommand(verificationCommands, proofKinds) {
|
|
319
|
+
return verificationCommands.find((command) => proofKinds.includes(classifyVerificationProofKind(command)));
|
|
320
|
+
}
|
|
321
|
+
function riskLevelForCategory(category) {
|
|
322
|
+
if (category === "auth" ||
|
|
323
|
+
category === "billing/payments" ||
|
|
324
|
+
category === "security/secrets" ||
|
|
325
|
+
category === "database/migrations" ||
|
|
326
|
+
category === "config") {
|
|
327
|
+
return "high";
|
|
328
|
+
}
|
|
329
|
+
if (category === "backend/api" || category === "dependencies" || category === "unknown") {
|
|
330
|
+
return "medium";
|
|
331
|
+
}
|
|
332
|
+
return "low";
|
|
333
|
+
}
|
|
334
|
+
function suggestedReviewerFocus(category) {
|
|
335
|
+
return reviewerFocusByCategory.get(category) ?? "Inspect this file manually.";
|
|
336
|
+
}
|
|
337
|
+
function labelReadiness(state) {
|
|
338
|
+
return readinessLabels[state];
|
|
339
|
+
}
|
|
340
|
+
//# sourceMappingURL=review-intelligence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-intelligence.js","sourceRoot":"","sources":["../../src/core/review-intelligence.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { RiskCategorySummary, SessionEvent, VerificationRun } from "../types/index.js";
|
|
1
|
+
import type { ReviewIntelligence, RiskCategorySummary, SessionEvent, VerificationRun } from "../types/index.js";
|
|
2
2
|
export type ReplayTimelineItem = Pick<SessionEvent, "type" | "timestamp" | "title" | "message" | "metadata">;
|
|
3
3
|
export interface HtmlReplayInput {
|
|
4
4
|
task: string;
|
|
@@ -10,6 +10,7 @@ export interface HtmlReplayInput {
|
|
|
10
10
|
riskBadges: string[];
|
|
11
11
|
verificationEvidence: VerificationRun[];
|
|
12
12
|
reviewReadiness?: string | undefined;
|
|
13
|
+
review?: ReviewIntelligence | undefined;
|
|
13
14
|
recommendation: string;
|
|
14
15
|
}
|
|
15
16
|
export declare function renderHtmlReplay(input: HtmlReplayInput): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-replay.d.ts","sourceRoot":"","sources":["../../src/renderers/html-replay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"html-replay.d.ts","sourceRoot":"","sources":["../../src/renderers/html-replay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,kBAAkB,GAAG,IAAI,CACnC,YAAY,EACZ,MAAM,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,CACxD,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,iBAAiB,CAAC,EAAE,mBAAmB,EAAE,GAAG,SAAS,CAAC;IACtD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,oBAAoB,EAAE,eAAe,EAAE,CAAC;IACxC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,MAAM,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACxC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CA6J/D"}
|
|
@@ -111,6 +111,8 @@ export function renderHtmlReplay(input) {
|
|
|
111
111
|
|
|
112
112
|
${renderSummary(input)}
|
|
113
113
|
|
|
114
|
+
${renderReview(input.review)}
|
|
115
|
+
|
|
114
116
|
<section class="section">
|
|
115
117
|
<div class="section-header">
|
|
116
118
|
<h2>Timeline</h2>
|
|
@@ -183,6 +185,41 @@ function renderTimeline(items) {
|
|
|
183
185
|
</div>`)
|
|
184
186
|
.join("")}</div>`;
|
|
185
187
|
}
|
|
188
|
+
function renderReview(review) {
|
|
189
|
+
if (!review)
|
|
190
|
+
return "";
|
|
191
|
+
return `<section class="section">
|
|
192
|
+
<div class="section-header">
|
|
193
|
+
<h2>Review Focus</h2>
|
|
194
|
+
<div class="meta">${escapeHtml(String(review.focus.length))} files</div>
|
|
195
|
+
</div>
|
|
196
|
+
${renderReviewFocus(review.focus)}
|
|
197
|
+
<div class="section-header" style="margin-top: 22px;">
|
|
198
|
+
<h2>Proof Gaps</h2>
|
|
199
|
+
<div class="meta">${escapeHtml(String(review.proofGaps.length))} gaps</div>
|
|
200
|
+
</div>
|
|
201
|
+
${renderProofGaps(review.proofGaps)}
|
|
202
|
+
<div class="recommendation" style="margin-top: 16px;">
|
|
203
|
+
<strong>${escapeHtml(review.readiness.label)}</strong><br>
|
|
204
|
+
${escapeHtml(review.readiness.reason)}<br>
|
|
205
|
+
Next: ${escapeHtml(review.readiness.nextAction)}
|
|
206
|
+
</div>
|
|
207
|
+
</section>`;
|
|
208
|
+
}
|
|
209
|
+
function renderReviewFocus(items) {
|
|
210
|
+
if (items.length === 0)
|
|
211
|
+
return "<p>No changed files to review.</p>";
|
|
212
|
+
return `<div class="file-groups">${items
|
|
213
|
+
.map((item) => `<div class="file-group"><div class="file-category">#${escapeHtml(String(item.rank))} ${escapeHtml(item.category)}</div><div><code>${escapeHtml(item.file)}</code><div class="meta">${escapeHtml(item.reasons.join("; "))}</div><div class="meta">${escapeHtml(item.suggestedReviewerFocus)}</div>${item.suggestedCommand ? `<div class="meta">Suggested proof: <code>${escapeHtml(item.suggestedCommand)}</code></div>` : ""}</div></div>`)
|
|
214
|
+
.join("")}</div>`;
|
|
215
|
+
}
|
|
216
|
+
function renderProofGaps(gaps) {
|
|
217
|
+
if (gaps.length === 0)
|
|
218
|
+
return "<p>No proof gaps detected.</p>";
|
|
219
|
+
return `<ul>${gaps
|
|
220
|
+
.map((gap) => `<li><strong>${escapeHtml(gap.severity)}</strong>: ${escapeHtml(gap.message)}${gap.suggestedCommand ? ` <code>agentflight verify -- ${escapeHtml(gap.suggestedCommand)}</code>` : ""}</li>`)
|
|
221
|
+
.join("")}</ul>`;
|
|
222
|
+
}
|
|
186
223
|
function renderFileGroups(groups) {
|
|
187
224
|
if (groups.length === 0)
|
|
188
225
|
return "<p>No changed file groups detected.</p>";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-replay.js","sourceRoot":"","sources":["../../src/renderers/html-replay.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"html-replay.js","sourceRoot":"","sources":["../../src/renderers/html-replay.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type { RiskAnalysis, SessionEvent, ToolAdapterResult, VerificationRun } from "../types/index.js";
|
|
2
|
-
import type { ReviewReadiness } from "../core/verification.js";
|
|
1
|
+
import type { ReviewIntelligence, RiskAnalysis, SessionEvent, ToolAdapterResult, VerificationRun } from "../types/index.js";
|
|
3
2
|
export interface MarkdownReportInput {
|
|
4
3
|
task: string;
|
|
5
4
|
sessionId: string;
|
|
@@ -10,8 +9,9 @@ export interface MarkdownReportInput {
|
|
|
10
9
|
verificationCommands: string[];
|
|
11
10
|
verificationEvidence: VerificationRun[];
|
|
12
11
|
verificationGaps?: string[] | undefined;
|
|
13
|
-
recommendation?:
|
|
12
|
+
recommendation?: string | undefined;
|
|
14
13
|
nextAction?: string | undefined;
|
|
14
|
+
review?: ReviewIntelligence | undefined;
|
|
15
15
|
tooling: {
|
|
16
16
|
projscan: ToolAdapterResult;
|
|
17
17
|
agentloopkit: ToolAdapterResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-report.d.ts","sourceRoot":"","sources":["../../src/renderers/markdown-report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,eAAe,EAChB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"markdown-report.d.ts","sourceRoot":"","sources":["../../src/renderers/markdown-report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,CAAC,EAAE,YAAY,EAAE,GAAG,SAAS,CAAC;IAC5C,IAAI,EAAE,YAAY,CAAC;IACnB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,oBAAoB,EAAE,eAAe,EAAE,CAAC;IACxC,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACxC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,MAAM,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACxC,OAAO,EAAE;QACP,QAAQ,EAAE,iBAAiB,CAAC;QAC5B,YAAY,EAAE,iBAAiB,CAAC;KACjC,CAAC;CACH;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM,CA6CvE"}
|
|
@@ -22,8 +22,14 @@ ${renderList(input.risk.reasons)}
|
|
|
22
22
|
## Verification Evidence
|
|
23
23
|
${renderVerification(input)}
|
|
24
24
|
|
|
25
|
-
## Review
|
|
26
|
-
${
|
|
25
|
+
## Review First
|
|
26
|
+
${renderReviewFirst(input)}
|
|
27
|
+
|
|
28
|
+
## Proof Gaps
|
|
29
|
+
${renderProofGaps(input)}
|
|
30
|
+
|
|
31
|
+
## Review Readiness
|
|
32
|
+
${renderReviewReadiness(input)}
|
|
27
33
|
|
|
28
34
|
## Recommendation
|
|
29
35
|
${renderRecommendation(input)}
|
|
@@ -69,13 +75,37 @@ function renderTimeline(events) {
|
|
|
69
75
|
})
|
|
70
76
|
.join("\n");
|
|
71
77
|
}
|
|
72
|
-
function
|
|
73
|
-
|
|
74
|
-
|
|
78
|
+
function renderReviewFirst(input) {
|
|
79
|
+
const focus = input.review?.focus;
|
|
80
|
+
if (focus && focus.length > 0) {
|
|
81
|
+
return focus
|
|
82
|
+
.map((item) => `${item.rank}. ${item.file}\n - Why: ${item.reasons.join("; ")}\n - Focus: ${item.suggestedReviewerFocus}${item.suggestedCommand ? `\n - Suggested proof: ${item.suggestedCommand}` : ""}`)
|
|
83
|
+
.join("\n");
|
|
84
|
+
}
|
|
85
|
+
return input.risk.categories.length
|
|
86
|
+
? input.risk.categories
|
|
75
87
|
.map((summary) => `- ${summary.category}: ${summary.files.join(", ")}`)
|
|
76
88
|
.join("\n")
|
|
77
89
|
: "- Confirm the session has meaningful changes before review.";
|
|
78
90
|
}
|
|
91
|
+
function renderProofGaps(input) {
|
|
92
|
+
if (input.review) {
|
|
93
|
+
return input.review.proofGaps.length
|
|
94
|
+
? input.review.proofGaps
|
|
95
|
+
.map((gap) => `- ${gap.severity}: ${gap.message}${gap.suggestedCommand ? `\n - Suggested proof: agentflight verify -- ${gap.suggestedCommand}` : ""}`)
|
|
96
|
+
.join("\n")
|
|
97
|
+
: "- none";
|
|
98
|
+
}
|
|
99
|
+
return input.verificationGaps?.length ? renderList(input.verificationGaps) : "- none";
|
|
100
|
+
}
|
|
101
|
+
function renderReviewReadiness(input) {
|
|
102
|
+
if (!input.review)
|
|
103
|
+
return input.recommendation ?? "Unknown";
|
|
104
|
+
return `${input.review.readiness.label}
|
|
105
|
+
|
|
106
|
+
Reason: ${input.review.readiness.reason}
|
|
107
|
+
Next action: ${input.review.readiness.nextAction}`;
|
|
108
|
+
}
|
|
79
109
|
function renderRecommendation(input) {
|
|
80
110
|
if (input.recommendation) {
|
|
81
111
|
return `${input.recommendation}.`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-report.js","sourceRoot":"","sources":["../../src/renderers/markdown-report.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"markdown-report.js","sourceRoot":"","sources":["../../src/renderers/markdown-report.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { RiskLevel } from "../types/index.js";
|
|
1
|
+
import type { ProofGap, ReviewFocusItem, ReviewReadinessDecision, RiskLevel } from "../types/index.js";
|
|
2
2
|
export interface ResumePromptInput {
|
|
3
3
|
task: string;
|
|
4
4
|
sessionId: string;
|
|
@@ -7,6 +7,9 @@ export interface ResumePromptInput {
|
|
|
7
7
|
riskLevel: RiskLevel;
|
|
8
8
|
riskReasons: string[];
|
|
9
9
|
verificationGaps: string[];
|
|
10
|
+
reviewFocus?: ReviewFocusItem[] | undefined;
|
|
11
|
+
proofGaps?: ProofGap[] | undefined;
|
|
12
|
+
readiness?: ReviewReadinessDecision | undefined;
|
|
10
13
|
latestSnapshotNote?: string | undefined;
|
|
11
14
|
verificationState?: string | undefined;
|
|
12
15
|
nextAction: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resume-prompt.d.ts","sourceRoot":"","sources":["../../src/renderers/resume-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"resume-prompt.d.ts","sourceRoot":"","sources":["../../src/renderers/resume-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EACf,uBAAuB,EACvB,SAAS,EACV,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,eAAe,EAAE,GAAG,SAAS,CAAC;IAC5C,SAAS,CAAC,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;IACnC,SAAS,CAAC,EAAE,uBAAuB,GAAG,SAAS,CAAC;IAChD,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CA0CnE"}
|
|
@@ -21,8 +21,14 @@ ${input.latestSnapshotNote ?? "No snapshot recorded."}
|
|
|
21
21
|
## Verification State
|
|
22
22
|
${input.verificationState ?? "No verification state recorded."}
|
|
23
23
|
|
|
24
|
-
##
|
|
25
|
-
${
|
|
24
|
+
## Review Focus
|
|
25
|
+
${renderReviewFocus(input.reviewFocus ?? [])}
|
|
26
|
+
|
|
27
|
+
## Proof Gaps
|
|
28
|
+
${renderProofGaps(input)}
|
|
29
|
+
|
|
30
|
+
## Review Readiness
|
|
31
|
+
${renderReadiness(input.readiness)}
|
|
26
32
|
|
|
27
33
|
## Next Recommended Action
|
|
28
34
|
${input.nextAction}
|
|
@@ -38,4 +44,28 @@ ${input.nextAction}
|
|
|
38
44
|
function renderList(items, empty) {
|
|
39
45
|
return items.length ? items.map((item) => `- ${item}`).join("\n") : empty;
|
|
40
46
|
}
|
|
47
|
+
function renderReviewFocus(items) {
|
|
48
|
+
if (items.length === 0)
|
|
49
|
+
return "No review focus recorded.";
|
|
50
|
+
return items
|
|
51
|
+
.map((item) => `${item.rank}. ${item.file}\n - Why: ${item.reasons.join("; ")}\n - Focus: ${item.suggestedReviewerFocus}${item.suggestedCommand ? `\n - Suggested proof: ${item.suggestedCommand}` : ""}`)
|
|
52
|
+
.join("\n");
|
|
53
|
+
}
|
|
54
|
+
function renderProofGaps(input) {
|
|
55
|
+
if (input.proofGaps) {
|
|
56
|
+
return input.proofGaps.length
|
|
57
|
+
? input.proofGaps
|
|
58
|
+
.map((gap) => `- ${gap.severity}: ${gap.message}${gap.suggestedCommand ? `\n Suggested proof: agentflight verify -- ${gap.suggestedCommand}` : ""}`)
|
|
59
|
+
.join("\n")
|
|
60
|
+
: "No proof gaps recorded.";
|
|
61
|
+
}
|
|
62
|
+
return renderList(input.verificationGaps, "No verification gaps recorded.");
|
|
63
|
+
}
|
|
64
|
+
function renderReadiness(readiness) {
|
|
65
|
+
if (!readiness)
|
|
66
|
+
return "No review readiness recorded.";
|
|
67
|
+
return `${readiness.label}
|
|
68
|
+
- Reason: ${readiness.reason}
|
|
69
|
+
- Next action: ${readiness.nextAction}`;
|
|
70
|
+
}
|
|
41
71
|
//# sourceMappingURL=resume-prompt.js.map
|