agentflight 0.5.1 → 0.7.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 +312 -1
- package/README.md +45 -21
- package/dist/adapters/agentloopkit.d.ts +2 -1
- package/dist/adapters/agentloopkit.d.ts.map +1 -1
- package/dist/adapters/agentloopkit.js +53 -58
- package/dist/adapters/agentloopkit.js.map +1 -1
- package/dist/adapters/projscan.d.ts +1 -0
- package/dist/adapters/projscan.d.ts.map +1 -1
- package/dist/adapters/projscan.js +36 -44
- package/dist/adapters/projscan.js.map +1 -1
- package/dist/adapters/tool-runner.d.ts +16 -0
- package/dist/adapters/tool-runner.d.ts.map +1 -0
- package/dist/adapters/tool-runner.js +43 -0
- package/dist/adapters/tool-runner.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +36 -7
- package/dist/cli.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +26 -2
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/handoff.d.ts +17 -0
- package/dist/commands/handoff.d.ts.map +1 -0
- package/dist/commands/handoff.js +286 -0
- package/dist/commands/handoff.js.map +1 -0
- package/dist/commands/history.d.ts +11 -0
- package/dist/commands/history.d.ts.map +1 -0
- package/dist/commands/history.js +251 -0
- package/dist/commands/history.js.map +1 -0
- package/dist/commands/init.d.ts +5 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +30 -7
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/replay.d.ts.map +1 -1
- package/dist/commands/replay.js +23 -16
- package/dist/commands/replay.js.map +1 -1
- package/dist/commands/report.d.ts +1 -0
- package/dist/commands/report.d.ts.map +1 -1
- package/dist/commands/report.js +41 -16
- package/dist/commands/report.js.map +1 -1
- package/dist/commands/resume.d.ts +1 -0
- package/dist/commands/resume.d.ts.map +1 -1
- package/dist/commands/resume.js +24 -14
- package/dist/commands/resume.js.map +1 -1
- package/dist/commands/start.d.ts +12 -0
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +53 -33
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/status.d.ts +1 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +138 -10
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/verify.d.ts +1 -0
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +187 -58
- package/dist/commands/verify.js.map +1 -1
- package/dist/core/artifacts.d.ts +11 -0
- package/dist/core/artifacts.d.ts.map +1 -0
- package/dist/core/artifacts.js +39 -0
- package/dist/core/artifacts.js.map +1 -0
- package/dist/core/changed-files.d.ts +3 -0
- package/dist/core/changed-files.d.ts.map +1 -1
- package/dist/core/changed-files.js +18 -1
- package/dist/core/changed-files.js.map +1 -1
- package/dist/core/config.d.ts +2 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +17 -14
- package/dist/core/config.js.map +1 -1
- package/dist/core/doctor.d.ts +4 -0
- package/dist/core/doctor.d.ts.map +1 -1
- package/dist/core/doctor.js +37 -2
- package/dist/core/doctor.js.map +1 -1
- package/dist/core/fs-safe.d.ts +6 -0
- package/dist/core/fs-safe.d.ts.map +1 -1
- package/dist/core/fs-safe.js +50 -4
- package/dist/core/fs-safe.js.map +1 -1
- package/dist/core/git.d.ts.map +1 -1
- package/dist/core/git.js +9 -5
- package/dist/core/git.js.map +1 -1
- package/dist/core/output.d.ts +14 -0
- package/dist/core/output.d.ts.map +1 -1
- package/dist/core/output.js +72 -4
- package/dist/core/output.js.map +1 -1
- package/dist/core/paths.d.ts +1 -0
- package/dist/core/paths.d.ts.map +1 -1
- package/dist/core/paths.js +9 -1
- package/dist/core/paths.js.map +1 -1
- package/dist/core/review-intelligence.d.ts +2 -1
- package/dist/core/review-intelligence.d.ts.map +1 -1
- package/dist/core/review-intelligence.js +246 -104
- package/dist/core/review-intelligence.js.map +1 -1
- package/dist/core/risk.d.ts.map +1 -1
- package/dist/core/risk.js +9 -4
- package/dist/core/risk.js.map +1 -1
- package/dist/core/session.d.ts +47 -1
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +203 -10
- package/dist/core/session.js.map +1 -1
- package/dist/core/verification-runs.d.ts +6 -0
- package/dist/core/verification-runs.d.ts.map +1 -0
- package/dist/core/verification-runs.js +104 -0
- package/dist/core/verification-runs.js.map +1 -0
- package/dist/core/verification.d.ts +4 -3
- package/dist/core/verification.d.ts.map +1 -1
- package/dist/core/verification.js +33 -66
- package/dist/core/verification.js.map +1 -1
- package/dist/renderers/html-replay.d.ts +2 -0
- package/dist/renderers/html-replay.d.ts.map +1 -1
- package/dist/renderers/html-replay.js +237 -17
- package/dist/renderers/html-replay.js.map +1 -1
- package/dist/renderers/markdown-report.d.ts +7 -1
- package/dist/renderers/markdown-report.d.ts.map +1 -1
- package/dist/renderers/markdown-report.js +85 -7
- package/dist/renderers/markdown-report.js.map +1 -1
- package/dist/renderers/resume-prompt.d.ts +2 -0
- package/dist/renderers/resume-prompt.d.ts.map +1 -1
- package/dist/renderers/resume-prompt.js +47 -10
- package/dist/renderers/resume-prompt.js.map +1 -1
- package/dist/types/index.d.ts +13 -3
- package/dist/types/index.d.ts.map +1 -1
- package/docs/assets/agentflight-cli-demo.svg +3 -3
- package/docs/development/changed-file-filters.md +35 -6
- package/docs/development/dogfooding.md +1 -1
- package/docs/examples/basic-agentflight-session.md +21 -10
- package/docs/roadmap/index.md +11 -3
- package/docs/roadmap/v0.4.0-review-intelligence-plan.md +1 -1
- package/package.json +3 -3
package/dist/commands/status.js
CHANGED
|
@@ -1,14 +1,18 @@
|
|
|
1
|
+
import { readOpenFirstArtifact } from "../core/artifacts.js";
|
|
1
2
|
import { listChangedFiles } from "../core/git.js";
|
|
2
3
|
import { filterChangedFiles } from "../core/changed-files.js";
|
|
3
4
|
import { loadConfig } from "../core/config.js";
|
|
4
5
|
import { pathExists, readJsonFile } from "../core/fs-safe.js";
|
|
5
|
-
import { compactCommandInText, formatVerifyCommandForDisplay } from "../core/output.js";
|
|
6
|
+
import { compactCommandInText, formatCommandForDisplay, formatVerificationCountLine, formatVerificationFailureContext, formatVerifyCommandForDisplay } from "../core/output.js";
|
|
6
7
|
import { resolveAgentFlightPaths } from "../core/paths.js";
|
|
7
8
|
import { analyzeRisk } from "../core/risk.js";
|
|
8
9
|
import { buildReviewIntelligence } from "../core/review-intelligence.js";
|
|
9
|
-
import { getLatestSessionEvent } from "../core/session.js";
|
|
10
|
+
import { getLatestRecordedReviewSummary, getLatestSessionEvent } from "../core/session.js";
|
|
10
11
|
import { buildVerificationSummary } from "../core/verification.js";
|
|
12
|
+
const STATUS_VERIFICATION_RUN_LIMIT = 8;
|
|
13
|
+
const readyHandoffNextAction = "Run agentflight handoff to generate the local review packet.";
|
|
11
14
|
export async function runStatusCommand(options) {
|
|
15
|
+
const format = normalizeStatusFormat(options.format);
|
|
12
16
|
const session = await readCurrentSession(options.repoRoot);
|
|
13
17
|
const config = await loadConfig(options.repoRoot);
|
|
14
18
|
const changedFiles = filterChangedFiles(options.changedFiles ?? (await listChangedFiles(options.repoRoot)), { ignore: config?.changedFileFilters?.ignore });
|
|
@@ -20,6 +24,30 @@ export async function runStatusCommand(options) {
|
|
|
20
24
|
});
|
|
21
25
|
const review = buildReviewIntelligence({ changedFiles, risk, session });
|
|
22
26
|
const latestSnapshot = getLatestSessionEvent(session, "snapshot_created");
|
|
27
|
+
const readinessReason = compactCommandInText(review.readiness.reason, review.readiness.suggestedCommand);
|
|
28
|
+
const nextAction = compactCommandInText(review.readiness.nextAction, review.readiness.suggestedCommand);
|
|
29
|
+
const statusTextNextAction = await buildStatusTextNextAction({
|
|
30
|
+
repoRoot: options.repoRoot,
|
|
31
|
+
session,
|
|
32
|
+
readinessState: review.readiness.state,
|
|
33
|
+
nextAction
|
|
34
|
+
});
|
|
35
|
+
const verificationFailureContext = formatVerificationFailureContext(verification);
|
|
36
|
+
if (format === "json") {
|
|
37
|
+
return {
|
|
38
|
+
output: `${JSON.stringify(buildStatusJson({
|
|
39
|
+
session,
|
|
40
|
+
duration,
|
|
41
|
+
changedFiles,
|
|
42
|
+
risk,
|
|
43
|
+
verification,
|
|
44
|
+
review,
|
|
45
|
+
latestSnapshot,
|
|
46
|
+
readinessReason,
|
|
47
|
+
nextAction
|
|
48
|
+
}), null, 2)}\n`
|
|
49
|
+
};
|
|
50
|
+
}
|
|
23
51
|
return {
|
|
24
52
|
output: `AgentFlight status
|
|
25
53
|
|
|
@@ -39,8 +67,10 @@ Risk: ${risk.level}
|
|
|
39
67
|
${risk.reasons.map((reason) => `- ${reason}`).join("\n")}
|
|
40
68
|
|
|
41
69
|
Verification Evidence:
|
|
42
|
-
${verification
|
|
43
|
-
${formatVerificationRuns(verification.runs
|
|
70
|
+
${formatVerificationCountLine(verification)}
|
|
71
|
+
${verificationFailureContext ? `${verificationFailureContext}\n` : ""}${formatVerificationRuns(verification.runs, {
|
|
72
|
+
tuckDetails: changedFiles.length === 0 && verification.unresolvedFailed === 0
|
|
73
|
+
})}
|
|
44
74
|
|
|
45
75
|
Review first:
|
|
46
76
|
${formatReviewFocus(review.focus.slice(0, 5))}
|
|
@@ -52,13 +82,60 @@ Latest snapshot:
|
|
|
52
82
|
${formatLatestSnapshot(latestSnapshot)}
|
|
53
83
|
|
|
54
84
|
Readiness: ${review.readiness.label}
|
|
55
|
-
Reason: ${
|
|
85
|
+
Reason: ${readinessReason}
|
|
56
86
|
|
|
57
87
|
Next action:
|
|
58
|
-
${
|
|
88
|
+
${statusTextNextAction}
|
|
59
89
|
`
|
|
60
90
|
};
|
|
61
91
|
}
|
|
92
|
+
function normalizeStatusFormat(format) {
|
|
93
|
+
if (!format || format === "text")
|
|
94
|
+
return "text";
|
|
95
|
+
if (format === "json")
|
|
96
|
+
return "json";
|
|
97
|
+
throw new Error(`Unsupported status format "${format}". Use "text" or "json".`);
|
|
98
|
+
}
|
|
99
|
+
function buildStatusJson(input) {
|
|
100
|
+
return {
|
|
101
|
+
task: input.session.task,
|
|
102
|
+
session: {
|
|
103
|
+
id: input.session.id,
|
|
104
|
+
startedAt: input.session.startedAt,
|
|
105
|
+
duration: input.duration
|
|
106
|
+
},
|
|
107
|
+
changedFiles: input.changedFiles,
|
|
108
|
+
changedFileCount: input.changedFiles.length,
|
|
109
|
+
changedAreas: input.risk.categories,
|
|
110
|
+
risk: input.risk,
|
|
111
|
+
verification: {
|
|
112
|
+
passed: input.verification.passed,
|
|
113
|
+
failed: input.verification.failed,
|
|
114
|
+
unresolvedFailed: input.verification.unresolvedFailed,
|
|
115
|
+
resolvedFailed: input.verification.resolvedFailed,
|
|
116
|
+
runs: input.verification.runs
|
|
117
|
+
},
|
|
118
|
+
review: {
|
|
119
|
+
focus: input.review.focus,
|
|
120
|
+
proofGaps: input.review.proofGaps,
|
|
121
|
+
readiness: input.review.readiness
|
|
122
|
+
},
|
|
123
|
+
latestSnapshot: formatLatestSnapshotJson(input.latestSnapshot),
|
|
124
|
+
reason: input.readinessReason,
|
|
125
|
+
nextAction: input.nextAction
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
function formatLatestSnapshotJson(event) {
|
|
129
|
+
if (!event)
|
|
130
|
+
return null;
|
|
131
|
+
const risk = readMetadataObject(event, "risk");
|
|
132
|
+
return {
|
|
133
|
+
timestamp: event.timestamp,
|
|
134
|
+
note: event.message ?? null,
|
|
135
|
+
riskLevel: typeof risk.level === "string" ? risk.level : "unknown",
|
|
136
|
+
changedFiles: typeof risk.changedFiles === "number" ? risk.changedFiles : null
|
|
137
|
+
};
|
|
138
|
+
}
|
|
62
139
|
function formatLatestSnapshot(event) {
|
|
63
140
|
if (!event)
|
|
64
141
|
return "- No snapshots recorded.";
|
|
@@ -70,6 +147,34 @@ function formatLatestSnapshot(event) {
|
|
|
70
147
|
- Risk: ${riskLevel}
|
|
71
148
|
- Changed files: ${changedFiles}`;
|
|
72
149
|
}
|
|
150
|
+
function formatCleanStatusNextAction(openFirst) {
|
|
151
|
+
const openLine = openFirst
|
|
152
|
+
? `Open first: ${openFirst}`
|
|
153
|
+
: "Run agentflight history --limit 1 to reopen the latest local artifacts.";
|
|
154
|
+
return `${openLine}
|
|
155
|
+
Start a new AgentFlight session when you begin the next task.`;
|
|
156
|
+
}
|
|
157
|
+
async function buildStatusTextNextAction(input) {
|
|
158
|
+
const openFirstReadiness = statusOpenFirstReadiness(input.readinessState, input.session);
|
|
159
|
+
if (openFirstReadiness === undefined)
|
|
160
|
+
return input.nextAction;
|
|
161
|
+
const openFirst = await readOpenFirstArtifact(input.repoRoot, input.session.id, openFirstReadiness);
|
|
162
|
+
if (input.readinessState === "clean_worktree")
|
|
163
|
+
return formatCleanStatusNextAction(openFirst);
|
|
164
|
+
return formatReadyStatusNextAction(input.nextAction, openFirst);
|
|
165
|
+
}
|
|
166
|
+
function statusOpenFirstReadiness(readinessState, session) {
|
|
167
|
+
if (readinessState === "clean_worktree")
|
|
168
|
+
return getLatestRecordedReviewSummary(session)?.state;
|
|
169
|
+
if (readinessState === "ready_for_review")
|
|
170
|
+
return readinessState;
|
|
171
|
+
return undefined;
|
|
172
|
+
}
|
|
173
|
+
function formatReadyStatusNextAction(nextAction, openFirst) {
|
|
174
|
+
if (openFirst && nextAction === readyHandoffNextAction)
|
|
175
|
+
return `Open first: ${openFirst}`;
|
|
176
|
+
return nextAction;
|
|
177
|
+
}
|
|
73
178
|
function readMetadataObject(event, key) {
|
|
74
179
|
const value = event.metadata?.[key];
|
|
75
180
|
return typeof value === "object" && value !== null && !Array.isArray(value)
|
|
@@ -99,12 +204,35 @@ function formatChangedAreas(categories) {
|
|
|
99
204
|
.map((summary) => `- ${summary.category}: ${summary.files.join(", ")}`)
|
|
100
205
|
.join("\n");
|
|
101
206
|
}
|
|
102
|
-
function formatVerificationRuns(runs) {
|
|
207
|
+
function formatVerificationRuns(runs, options = {}) {
|
|
103
208
|
if (!runs || runs.length === 0)
|
|
104
209
|
return "- No verification runs recorded.";
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
210
|
+
if (options.tuckDetails)
|
|
211
|
+
return formatTuckedVerificationRuns();
|
|
212
|
+
return formatVisibleVerificationRuns(runs);
|
|
213
|
+
}
|
|
214
|
+
function formatTuckedVerificationRuns() {
|
|
215
|
+
return "- Verification run details are tucked because the worktree is clean; open handoff/report/replay or JSON output for the full ledger.";
|
|
216
|
+
}
|
|
217
|
+
function formatVisibleVerificationRuns(runs) {
|
|
218
|
+
const displayRuns = runs.length > STATUS_VERIFICATION_RUN_LIMIT ? runs.slice(-STATUS_VERIFICATION_RUN_LIMIT) : runs;
|
|
219
|
+
const runLines = displayRuns.map(formatVerificationRunLine).join("\n");
|
|
220
|
+
if (displayRuns.length === runs.length)
|
|
221
|
+
return runLines;
|
|
222
|
+
return `${formatOmittedVerificationRunNote(runs.length, displayRuns.length)}
|
|
223
|
+
${runLines}`;
|
|
224
|
+
}
|
|
225
|
+
function formatVerificationRunLine(run) {
|
|
226
|
+
return `- ${run.status}: ${formatCommandForDisplay(run.command)} (exit ${run.exitCode ?? "unknown"}, ${run.durationMs}ms)`;
|
|
227
|
+
}
|
|
228
|
+
function formatOmittedVerificationRunNote(totalRuns, shownRuns) {
|
|
229
|
+
const omitted = totalRuns - shownRuns;
|
|
230
|
+
return `- Showing latest ${shownRuns} of ${totalRuns} verification runs.
|
|
231
|
+
- ${formatOmittedVerificationRunCount(omitted)} remain in report/replay and JSON output.`;
|
|
232
|
+
}
|
|
233
|
+
function formatOmittedVerificationRunCount(omitted) {
|
|
234
|
+
const runNoun = omitted === 1 ? "run" : "runs";
|
|
235
|
+
return `${omitted} earlier verification ${runNoun}`;
|
|
108
236
|
}
|
|
109
237
|
function formatReviewFocus(items) {
|
|
110
238
|
if (items.length === 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import type { CommandRunner } from "../core/process.js";
|
|
|
3
3
|
export interface VerifyCommandOptions {
|
|
4
4
|
repoRoot: string;
|
|
5
5
|
commandArgs?: string[] | undefined;
|
|
6
|
+
profile?: string | undefined;
|
|
6
7
|
now?: (() => Date) | undefined;
|
|
7
8
|
commandRunner?: CommandRunner | undefined;
|
|
8
9
|
heartbeatIntervalMs?: number | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAsB,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,GAAG,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IAC/B,aAAa,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAC1C,mBAAmB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,WAAW,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CACvD;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,eAAe,EAAE,CAAC;CACzB;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CAoB9B"}
|
package/dist/commands/verify.js
CHANGED
|
@@ -1,65 +1,119 @@
|
|
|
1
1
|
import { loadConfig } from "../core/config.js";
|
|
2
|
+
import { readPackageJson } from "../core/project.js";
|
|
2
3
|
import { appendSessionEvent, appendVerificationRun } from "../core/session.js";
|
|
3
|
-
import { formatCommand, parseCommandLine, runVerificationCommand } from "../core/verification.js";
|
|
4
|
+
import { detectVerificationCommands, formatCommand, parseCommandLine, runVerificationCommand } from "../core/verification.js";
|
|
4
5
|
import { readCurrentSession } from "./status.js";
|
|
5
6
|
export async function runVerifyCommand(options) {
|
|
6
|
-
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
7
|
+
const session = await readCurrentSession(options.repoRoot);
|
|
8
|
+
const commandResolution = await resolveCommandSets(options);
|
|
9
|
+
const resolutionError = buildResolutionErrorResult(commandResolution.error);
|
|
10
|
+
if (resolutionError)
|
|
11
|
+
return resolutionError;
|
|
12
|
+
const missingCommand = buildMissingCommandResult(commandResolution);
|
|
13
|
+
if (missingCommand)
|
|
14
|
+
return missingCommand;
|
|
15
|
+
const { output, runs } = await runResolvedVerificationCommands(options, session, commandResolution);
|
|
16
|
+
return {
|
|
17
|
+
output: `${output.join("\n")}\n`,
|
|
18
|
+
exitCode: allRunsPassed(runs) ? 0 : 1,
|
|
19
|
+
runs
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
async function runResolvedVerificationCommands(options, initialSession, commandResolution) {
|
|
23
|
+
let session = initialSession;
|
|
24
|
+
const output = buildVerificationOutputHeader(commandResolution.profileName);
|
|
25
|
+
const runs = [];
|
|
26
|
+
for (const commandArgs of commandResolution.commandSets) {
|
|
27
|
+
const result = await runSingleVerificationCommand(options, session, commandArgs);
|
|
28
|
+
session = result.session;
|
|
29
|
+
runs.push(result.run);
|
|
30
|
+
appendVerificationOutput(output, result.run);
|
|
17
31
|
}
|
|
32
|
+
return { output, runs };
|
|
33
|
+
}
|
|
34
|
+
function buildVerificationOutputHeader(profileName) {
|
|
18
35
|
const output = ["AgentFlight verification", ""];
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
session
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
output.push(`- stdout: ${run.stdoutPath}`);
|
|
51
|
-
output.push(`- stderr: ${run.stderrPath}`);
|
|
52
|
-
if (run.outputExcerpt) {
|
|
53
|
-
output.push(run.outputExcerpt);
|
|
54
|
-
}
|
|
55
|
-
if (run.status === "failed") {
|
|
56
|
-
output.push(`Next action: fix the command, then rerun agentflight verify -- ${run.command}`);
|
|
36
|
+
if (profileName) {
|
|
37
|
+
output.push(`Profile: ${profileName}`);
|
|
38
|
+
output.push("");
|
|
39
|
+
}
|
|
40
|
+
return output;
|
|
41
|
+
}
|
|
42
|
+
async function runSingleVerificationCommand(options, session, commandArgs) {
|
|
43
|
+
const command = formatCommand(commandArgs);
|
|
44
|
+
let updatedSession = await appendSessionEvent(options.repoRoot, session, {
|
|
45
|
+
type: "verification_started",
|
|
46
|
+
timestamp: options.now?.() ?? new Date(),
|
|
47
|
+
title: "Verification started",
|
|
48
|
+
metadata: { command }
|
|
49
|
+
});
|
|
50
|
+
const run = await runWithHeartbeat(runVerificationCommand({
|
|
51
|
+
repoRoot: options.repoRoot,
|
|
52
|
+
session: updatedSession,
|
|
53
|
+
commandArgs,
|
|
54
|
+
now: options.now,
|
|
55
|
+
commandRunner: options.commandRunner
|
|
56
|
+
}), options);
|
|
57
|
+
updatedSession = await appendVerificationRun(options.repoRoot, updatedSession, run);
|
|
58
|
+
updatedSession = await appendSessionEvent(options.repoRoot, updatedSession, {
|
|
59
|
+
type: run.status === "passed" ? "verification_passed" : "verification_failed",
|
|
60
|
+
timestamp: run.finishedAt,
|
|
61
|
+
title: run.status === "passed" ? "Verification passed" : "Verification failed",
|
|
62
|
+
metadata: {
|
|
63
|
+
command: run.command,
|
|
64
|
+
exitCode: run.exitCode,
|
|
65
|
+
stdoutPath: run.stdoutPath,
|
|
66
|
+
stderrPath: run.stderrPath
|
|
57
67
|
}
|
|
68
|
+
});
|
|
69
|
+
return { session: updatedSession, run };
|
|
70
|
+
}
|
|
71
|
+
function appendVerificationOutput(output, run) {
|
|
72
|
+
output.push(`${run.status}: ${run.command}`);
|
|
73
|
+
output.push("Evidence saved:");
|
|
74
|
+
output.push(`- stdout: ${run.stdoutPath}`);
|
|
75
|
+
output.push(`- stderr: ${run.stderrPath}`);
|
|
76
|
+
if (run.outputExcerpt) {
|
|
77
|
+
output.push(run.outputExcerpt);
|
|
78
|
+
}
|
|
79
|
+
if (run.status === "failed") {
|
|
80
|
+
output.push(`Next action: fix the command, then rerun agentflight verify -- ${run.command}`);
|
|
58
81
|
}
|
|
82
|
+
}
|
|
83
|
+
function allRunsPassed(runs) {
|
|
84
|
+
return runs.every((run) => run.status === "passed");
|
|
85
|
+
}
|
|
86
|
+
function buildResolutionErrorResult(error) {
|
|
87
|
+
if (!error)
|
|
88
|
+
return null;
|
|
59
89
|
return {
|
|
60
|
-
output:
|
|
61
|
-
|
|
62
|
-
|
|
90
|
+
output: `AgentFlight verify
|
|
91
|
+
|
|
92
|
+
${error}
|
|
93
|
+
`,
|
|
94
|
+
exitCode: 1,
|
|
95
|
+
runs: []
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
function buildMissingCommandResult(commandResolution) {
|
|
99
|
+
if (commandResolution.commandSets.length > 0)
|
|
100
|
+
return null;
|
|
101
|
+
const suggestedCommands = commandResolution.suggestedCommands ?? [];
|
|
102
|
+
const suggestions = suggestedCommands.length > 0
|
|
103
|
+
? `
|
|
104
|
+
|
|
105
|
+
Try one of:
|
|
106
|
+
${suggestedCommands.map((command) => `- agentflight verify -- ${command}`).join("\n")}
|
|
107
|
+
|
|
108
|
+
To make this the default, add commands under verification.commands in .agentflight/config.json.`
|
|
109
|
+
: "";
|
|
110
|
+
return {
|
|
111
|
+
output: `AgentFlight verify
|
|
112
|
+
|
|
113
|
+
No verification command was provided and no commands are configured in .agentflight/config.json.${suggestions}
|
|
114
|
+
`,
|
|
115
|
+
exitCode: 1,
|
|
116
|
+
runs: []
|
|
63
117
|
};
|
|
64
118
|
}
|
|
65
119
|
async function runWithHeartbeat(promise, options) {
|
|
@@ -83,12 +137,87 @@ async function runWithHeartbeat(promise, options) {
|
|
|
83
137
|
}
|
|
84
138
|
}
|
|
85
139
|
async function resolveCommandSets(options) {
|
|
86
|
-
|
|
87
|
-
|
|
140
|
+
const profile = normalizeProfileOption(options.profile);
|
|
141
|
+
if (profile.error)
|
|
142
|
+
return { commandSets: [], error: profile.error };
|
|
143
|
+
if (profile.name && hasExplicitCommandArgs(options)) {
|
|
144
|
+
return {
|
|
145
|
+
commandSets: [],
|
|
146
|
+
error: "Cannot combine --profile with an explicit verification command."
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
if (hasExplicitCommandArgs(options)) {
|
|
150
|
+
return { commandSets: [options.commandArgs] };
|
|
88
151
|
}
|
|
89
152
|
const config = await loadConfig(options.repoRoot);
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
153
|
+
if (profile.name) {
|
|
154
|
+
return resolveProfileCommandSets(config?.verification, profile.name);
|
|
155
|
+
}
|
|
156
|
+
return resolveConfiguredCommandSets(options.repoRoot, config?.verification.commands);
|
|
157
|
+
}
|
|
158
|
+
function hasExplicitCommandArgs(options) {
|
|
159
|
+
return Array.isArray(options.commandArgs) && options.commandArgs.length > 0;
|
|
160
|
+
}
|
|
161
|
+
function normalizeProfileOption(profile) {
|
|
162
|
+
const name = profile?.trim();
|
|
163
|
+
if (profile !== undefined && !name)
|
|
164
|
+
return { error: "Verification profile name cannot be empty." };
|
|
165
|
+
return name ? { name } : {};
|
|
166
|
+
}
|
|
167
|
+
async function resolveConfiguredCommandSets(repoRoot, commands) {
|
|
168
|
+
const commandSets = parseConfiguredCommands(commands ?? []);
|
|
169
|
+
if (commandSets.length > 0)
|
|
170
|
+
return { commandSets };
|
|
171
|
+
return {
|
|
172
|
+
commandSets,
|
|
173
|
+
suggestedCommands: detectVerificationCommands(await readPackageJson(repoRoot))
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
function resolveProfileCommandSets(verification, profileName) {
|
|
177
|
+
const profile = readProfileCommands(verification, profileName);
|
|
178
|
+
if (profile.status === "unknown")
|
|
179
|
+
return unknownProfile(profileName);
|
|
180
|
+
if (profile.status === "invalid") {
|
|
181
|
+
return {
|
|
182
|
+
commandSets: [],
|
|
183
|
+
error: `Verification profile ${profileName} is invalid. Expected an array of command strings in .agentflight/config.json.`
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
const commandSets = parseConfiguredCommands(profile.commands);
|
|
187
|
+
if (commandSets.length === 0) {
|
|
188
|
+
return {
|
|
189
|
+
commandSets: [],
|
|
190
|
+
error: `Verification profile ${profileName} is empty. Add at least one command string in .agentflight/config.json.`
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
return { commandSets, profileName };
|
|
194
|
+
}
|
|
195
|
+
function readProfileCommands(verification, profileName) {
|
|
196
|
+
if (!verification || typeof verification !== "object")
|
|
197
|
+
return { status: "unknown" };
|
|
198
|
+
const profiles = verification.profiles;
|
|
199
|
+
if (!isProfileRecord(profiles))
|
|
200
|
+
return { status: "unknown" };
|
|
201
|
+
const profile = profiles[profileName];
|
|
202
|
+
if (profile === undefined)
|
|
203
|
+
return { status: "unknown" };
|
|
204
|
+
if (!isStringArray(profile))
|
|
205
|
+
return { status: "invalid" };
|
|
206
|
+
return { status: "found", commands: profile };
|
|
207
|
+
}
|
|
208
|
+
function isProfileRecord(value) {
|
|
209
|
+
return !!value && typeof value === "object" && !Array.isArray(value);
|
|
210
|
+
}
|
|
211
|
+
function isStringArray(value) {
|
|
212
|
+
return Array.isArray(value) && value.every((command) => typeof command === "string");
|
|
213
|
+
}
|
|
214
|
+
function parseConfiguredCommands(commands) {
|
|
215
|
+
return commands.map((command) => parseCommandLine(command)).filter((args) => args.length > 0);
|
|
216
|
+
}
|
|
217
|
+
function unknownProfile(profileName) {
|
|
218
|
+
return {
|
|
219
|
+
commandSets: [],
|
|
220
|
+
error: `Verification profile ${profileName} was not found in .agentflight/config.json.`
|
|
221
|
+
};
|
|
93
222
|
}
|
|
94
223
|
//# sourceMappingURL=verify.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ReviewReadinessState } from "../types/index.js";
|
|
2
|
+
export interface ReviewArtifacts {
|
|
3
|
+
handoff: string;
|
|
4
|
+
report: string;
|
|
5
|
+
replay: string;
|
|
6
|
+
resume: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function readReviewArtifacts(repoRoot: string, sessionId: string): Promise<ReviewArtifacts>;
|
|
9
|
+
export declare function readOpenFirstArtifact(repoRoot: string, sessionId: string, readiness: ReviewReadinessState | undefined): Promise<string | null>;
|
|
10
|
+
export declare function chooseOpenFirstArtifact(readiness: ReviewReadinessState | undefined, artifacts: ReviewArtifacts): string;
|
|
11
|
+
//# sourceMappingURL=artifacts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../src/core/artifacts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAID,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC,CAO1B;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,oBAAoB,GAAG,SAAS,GAC1C,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAIxB;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,oBAAoB,GAAG,SAAS,EAC3C,SAAS,EAAE,eAAe,GACzB,MAAM,CAmBR"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { pathExists } from "./fs-safe.js";
|
|
2
|
+
import { formatRepoRelativePath, resolveAgentFlightPaths } from "./paths.js";
|
|
3
|
+
export async function readReviewArtifacts(repoRoot, sessionId) {
|
|
4
|
+
return {
|
|
5
|
+
handoff: await formatArtifactPath(repoRoot, sessionId, "handoff.md"),
|
|
6
|
+
report: await formatArtifactPath(repoRoot, sessionId, "proof.md"),
|
|
7
|
+
replay: await formatArtifactPath(repoRoot, sessionId, "replay.html"),
|
|
8
|
+
resume: await formatArtifactPath(repoRoot, sessionId, "resume.md")
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export async function readOpenFirstArtifact(repoRoot, sessionId, readiness) {
|
|
12
|
+
const artifacts = await readReviewArtifacts(repoRoot, sessionId);
|
|
13
|
+
const openFirst = chooseOpenFirstArtifact(readiness, artifacts);
|
|
14
|
+
return openFirst === "none yet" ? null : openFirst;
|
|
15
|
+
}
|
|
16
|
+
export function chooseOpenFirstArtifact(readiness, artifacts) {
|
|
17
|
+
if (readiness === "ready_for_review") {
|
|
18
|
+
return formatOpenFirstArtifact(firstExistingArtifact(["handoff", "replay", "report"], artifacts), artifacts);
|
|
19
|
+
}
|
|
20
|
+
if (readiness) {
|
|
21
|
+
return formatOpenFirstArtifact(firstExistingArtifact(["report", "handoff", "replay"], artifacts), artifacts);
|
|
22
|
+
}
|
|
23
|
+
return formatOpenFirstArtifact(firstExistingArtifact(["handoff", "replay", "report"], artifacts), artifacts);
|
|
24
|
+
}
|
|
25
|
+
function firstExistingArtifact(order, artifacts) {
|
|
26
|
+
return order.find((artifact) => artifacts[artifact] !== "missing") ?? null;
|
|
27
|
+
}
|
|
28
|
+
function formatOpenFirstArtifact(artifact, artifacts) {
|
|
29
|
+
if (!artifact)
|
|
30
|
+
return "none yet";
|
|
31
|
+
return `${artifact} ${artifacts[artifact]}`;
|
|
32
|
+
}
|
|
33
|
+
async function formatArtifactPath(repoRoot, sessionId, suffix) {
|
|
34
|
+
const artifactPath = `${resolveAgentFlightPaths(repoRoot).reports}/${sessionId}-${suffix}`;
|
|
35
|
+
return (await pathExists(artifactPath))
|
|
36
|
+
? formatRepoRelativePath(repoRoot, artifactPath)
|
|
37
|
+
: "missing";
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=artifacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/core/artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAY7E,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,QAAgB,EAChB,SAAiB;IAEjB,OAAO;QACL,OAAO,EAAE,MAAM,kBAAkB,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC;QACpE,MAAM,EAAE,MAAM,kBAAkB,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC;QACjE,MAAM,EAAE,MAAM,kBAAkB,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC;QACpE,MAAM,EAAE,MAAM,kBAAkB,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC;KACnE,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,QAAgB,EAChB,SAAiB,EACjB,SAA2C;IAE3C,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,uBAAuB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAChE,OAAO,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,SAA2C,EAC3C,SAA0B;IAE1B,IAAI,SAAS,KAAK,kBAAkB,EAAE,CAAC;QACrC,OAAO,uBAAuB,CAC5B,qBAAqB,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,SAAS,CAAC,EACjE,SAAS,CACV,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,uBAAuB,CAC5B,qBAAqB,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,SAAS,CAAC,EACjE,SAAS,CACV,CAAC;IACJ,CAAC;IAED,OAAO,uBAAuB,CAC5B,qBAAqB,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,SAAS,CAAC,EACjE,SAAS,CACV,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAC5B,KAAwB,EACxB,SAA0B;IAE1B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC,IAAI,IAAI,CAAC;AAC7E,CAAC;AAED,SAAS,uBAAuB,CAC9B,QAAgC,EAChC,SAA0B;IAE1B,IAAI,CAAC,QAAQ;QAAE,OAAO,UAAU,CAAC;IACjC,OAAO,GAAG,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC9C,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,QAAgB,EAChB,SAAiB,EACjB,MAA+D;IAE/D,MAAM,YAAY,GAAG,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC,OAAO,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;IAC3F,OAAO,CAAC,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC;QACrC,CAAC,CAAC,sBAAsB,CAAC,QAAQ,EAAE,YAAY,CAAC;QAChD,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC"}
|
|
@@ -3,5 +3,8 @@ export interface ChangedFileFilterOptions {
|
|
|
3
3
|
}
|
|
4
4
|
export declare function filterChangedFiles(files: string[], options?: ChangedFileFilterOptions): string[];
|
|
5
5
|
export declare function filterAgentFlightRuntimePaths(files: string[]): string[];
|
|
6
|
+
export declare function filterBuiltInRuntimePaths(files: string[]): string[];
|
|
6
7
|
export declare function isAgentFlightRuntimePath(file: string): boolean;
|
|
8
|
+
export declare function isAgentLoopKitEvidencePath(file: string): boolean;
|
|
9
|
+
export declare function isBuiltInRuntimePath(file: string): boolean;
|
|
7
10
|
//# sourceMappingURL=changed-files.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"changed-files.d.ts","sourceRoot":"","sources":["../../src/core/changed-files.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"changed-files.d.ts","sourceRoot":"","sources":["../../src/core/changed-files.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CAC/B;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,GAAE,wBAA6B,GACrC,MAAM,EAAE,CAaV;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAEvE;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAEnE;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAK9D;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQhE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D"}
|