agentflight 0.1.0 → 0.2.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/README.md +16 -4
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +39 -3
- package/dist/cli.js.map +1 -1
- package/dist/commands/doctor.js +3 -12
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/replay.d.ts.map +1 -1
- package/dist/commands/replay.js +14 -5
- package/dist/commands/replay.js.map +1 -1
- package/dist/commands/report.d.ts.map +1 -1
- package/dist/commands/report.js +9 -1
- package/dist/commands/report.js.map +1 -1
- package/dist/commands/resume.d.ts.map +1 -1
- package/dist/commands/resume.js +7 -8
- package/dist/commands/resume.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +30 -12
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/verify.d.ts +13 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +50 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +2 -0
- package/dist/core/config.js.map +1 -1
- package/dist/core/fs-safe.d.ts +1 -0
- package/dist/core/fs-safe.d.ts.map +1 -1
- package/dist/core/fs-safe.js +9 -0
- package/dist/core/fs-safe.js.map +1 -1
- package/dist/core/paths.d.ts.map +1 -1
- package/dist/core/paths.js +1 -0
- package/dist/core/paths.js.map +1 -1
- package/dist/core/session.d.ts +4 -1
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +17 -0
- package/dist/core/session.js.map +1 -1
- package/dist/core/verification.d.ts +29 -0
- package/dist/core/verification.d.ts.map +1 -1
- package/dist/core/verification.js +157 -0
- package/dist/core/verification.js.map +1 -1
- package/dist/renderers/html-replay.d.ts +2 -2
- package/dist/renderers/html-replay.d.ts.map +1 -1
- package/dist/renderers/html-replay.js +17 -3
- package/dist/renderers/html-replay.js.map +1 -1
- package/dist/renderers/markdown-report.d.ts +6 -2
- package/dist/renderers/markdown-report.d.ts.map +1 -1
- package/dist/renderers/markdown-report.js +19 -7
- package/dist/renderers/markdown-report.js.map +1 -1
- package/dist/renderers/resume-prompt.d.ts.map +1 -1
- package/dist/renderers/resume-prompt.js +3 -2
- package/dist/renderers/resume-prompt.js.map +1 -1
- package/dist/types/index.d.ts +12 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -26,6 +26,7 @@ AgentFlight creates a local `.agentflight/` directory in your repo:
|
|
|
26
26
|
- `sessions/` stores session metadata.
|
|
27
27
|
- `current/` stores the active session, handoff, and resume prompt.
|
|
28
28
|
- `reports/` stores Markdown proof reports and HTML replays.
|
|
29
|
+
- `evidence/` stores stdout and stderr from captured verification runs.
|
|
29
30
|
|
|
30
31
|
Reports include filenames and summaries by default, not full source diffs. AgentFlight does not collect telemetry and does not upload source code.
|
|
31
32
|
|
|
@@ -37,6 +38,7 @@ npm run build
|
|
|
37
38
|
npx agentflight init
|
|
38
39
|
npx agentflight start --task "Add example feature"
|
|
39
40
|
npx agentflight status
|
|
41
|
+
npx agentflight verify -- npm test
|
|
40
42
|
npx agentflight report
|
|
41
43
|
npx agentflight replay
|
|
42
44
|
npx agentflight resume
|
|
@@ -55,6 +57,8 @@ npm run agentflight -- start --task "Add example feature"
|
|
|
55
57
|
- `agentflight init` initializes `.agentflight/` with safe writes.
|
|
56
58
|
- `agentflight start --task "..."` starts a session and writes the current handoff.
|
|
57
59
|
- `agentflight status` summarizes changed files, risk, verification status, and next action.
|
|
60
|
+
- `agentflight verify -- <command>` runs a proof command and records stdout/stderr evidence.
|
|
61
|
+
- `agentflight verify` runs commands from `.agentflight/config.json`.
|
|
58
62
|
- `agentflight report` generates a Markdown proof report.
|
|
59
63
|
- `agentflight replay` generates a local self-contained HTML replay.
|
|
60
64
|
- `agentflight resume` prints and saves a Codex/Claude-ready continuation prompt.
|
|
@@ -71,14 +75,14 @@ agentflight start --task "Add password reset flow"
|
|
|
71
75
|
# Run Codex, Claude Code, Cursor, or another coding agent normally.
|
|
72
76
|
|
|
73
77
|
agentflight status
|
|
74
|
-
npm run typecheck
|
|
75
|
-
npm test
|
|
78
|
+
agentflight verify -- npm run typecheck
|
|
79
|
+
agentflight verify -- npm test
|
|
76
80
|
agentflight report
|
|
77
81
|
agentflight replay
|
|
78
82
|
agentflight resume
|
|
79
83
|
```
|
|
80
84
|
|
|
81
|
-
Use the generated report for review and the resume prompt when handing the work to another agent or human.
|
|
85
|
+
Use `agentflight verify -- <command>` when you want AgentFlight to capture proof. The command records exit code, timing, stdout path, and stderr path in the current session. Use the generated report for review and the resume prompt when handing the work to another agent or human.
|
|
82
86
|
|
|
83
87
|
## Powered By ProjScan And AgentLoopKit
|
|
84
88
|
|
|
@@ -103,13 +107,14 @@ Runtime session data is ignored by git by default:
|
|
|
103
107
|
|
|
104
108
|
- `.agentflight/sessions/`
|
|
105
109
|
- `.agentflight/reports/`
|
|
110
|
+
- `.agentflight/evidence/`
|
|
106
111
|
- `.agentflight/current/`
|
|
107
112
|
|
|
108
113
|
`.agentflight/config.json` is intentionally not ignored, so a project can commit its local AgentFlight defaults if that is useful.
|
|
109
114
|
|
|
110
115
|
## Current Status
|
|
111
116
|
|
|
112
|
-
AgentFlight
|
|
117
|
+
AgentFlight current release is `0.2.0`, centered on real verification evidence capture.
|
|
113
118
|
|
|
114
119
|
Implemented:
|
|
115
120
|
|
|
@@ -121,6 +126,7 @@ Implemented:
|
|
|
121
126
|
- Self-contained HTML replay
|
|
122
127
|
- Resume prompt generation
|
|
123
128
|
- Doctor checks
|
|
129
|
+
- Verification evidence capture with `agentflight verify`
|
|
124
130
|
- Defensive ProjScan and AgentLoopKit adapters
|
|
125
131
|
- Vitest coverage for core behavior, renderers, adapters, and command workflow
|
|
126
132
|
|
|
@@ -137,6 +143,12 @@ Not implemented:
|
|
|
137
143
|
|
|
138
144
|
See [docs/roadmap.md](docs/roadmap.md).
|
|
139
145
|
|
|
146
|
+
## Releases
|
|
147
|
+
|
|
148
|
+
AgentFlight uses npm Trusted Publishing from GitHub Actions for tagged releases. Pushes and pull requests run verification; npm publishes happen from `v*.*.*` tags.
|
|
149
|
+
|
|
150
|
+
See [docs/development/release.md](docs/development/release.md) and [CHANGELOG.md](CHANGELOG.md).
|
|
151
|
+
|
|
140
152
|
## Contributing
|
|
141
153
|
|
|
142
154
|
Use the local verification loop before opening changes:
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,SAAS,IAAI,OAAO,CA0FnC;AAeD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAG5F"}
|
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
2
|
+
import { readFileSync, realpathSync } from "node:fs";
|
|
3
|
+
import { dirname, resolve } from "node:path";
|
|
3
4
|
import { fileURLToPath } from "node:url";
|
|
4
5
|
import { Command } from "commander";
|
|
5
6
|
import { getRepositoryRoot } from "./core/git.js";
|
|
@@ -10,12 +11,13 @@ import { runReportCommand } from "./commands/report.js";
|
|
|
10
11
|
import { runResumeCommand } from "./commands/resume.js";
|
|
11
12
|
import { runStartCommand } from "./commands/start.js";
|
|
12
13
|
import { runStatusCommand } from "./commands/status.js";
|
|
14
|
+
import { runVerifyCommand } from "./commands/verify.js";
|
|
13
15
|
export function createCli() {
|
|
14
16
|
const program = new Command();
|
|
15
17
|
program
|
|
16
18
|
.name("agentflight")
|
|
17
19
|
.description("Local-first flight recorder for AI coding agents.")
|
|
18
|
-
.version(
|
|
20
|
+
.version(readPackageVersion());
|
|
19
21
|
program
|
|
20
22
|
.command("init")
|
|
21
23
|
.description("Initialise AgentFlight in this repository.")
|
|
@@ -40,6 +42,18 @@ export function createCli() {
|
|
|
40
42
|
.action(async () => {
|
|
41
43
|
await printResult(runStatusCommand({ repoRoot: await getRepositoryRoot(process.cwd()) }));
|
|
42
44
|
});
|
|
45
|
+
program
|
|
46
|
+
.command("verify")
|
|
47
|
+
.description("Run verification and capture local evidence for the current session.")
|
|
48
|
+
.allowUnknownOption(true)
|
|
49
|
+
.allowExcessArguments(true)
|
|
50
|
+
.argument("[command...]", "verification command to run after --")
|
|
51
|
+
.action(async (commandArgs) => {
|
|
52
|
+
await printResult(runVerifyCommand({
|
|
53
|
+
repoRoot: await getRepositoryRoot(process.cwd()),
|
|
54
|
+
commandArgs
|
|
55
|
+
}));
|
|
56
|
+
});
|
|
43
57
|
program
|
|
44
58
|
.command("report")
|
|
45
59
|
.description("Generate a Markdown proof report for the current session.")
|
|
@@ -78,6 +92,9 @@ async function printResult(promise) {
|
|
|
78
92
|
try {
|
|
79
93
|
const result = await promise;
|
|
80
94
|
console.log(result.output.trimEnd());
|
|
95
|
+
if (result.exitCode !== undefined) {
|
|
96
|
+
process.exitCode = result.exitCode;
|
|
97
|
+
}
|
|
81
98
|
}
|
|
82
99
|
catch (error) {
|
|
83
100
|
console.error(error instanceof Error ? error.message : String(error));
|
|
@@ -87,7 +104,26 @@ async function printResult(promise) {
|
|
|
87
104
|
export function isDirectCliInvocation(metaUrl, argvPath) {
|
|
88
105
|
if (!argvPath)
|
|
89
106
|
return false;
|
|
90
|
-
return fileURLToPath(metaUrl) ===
|
|
107
|
+
return normalizeCliPath(fileURLToPath(metaUrl)) === normalizeCliPath(argvPath);
|
|
108
|
+
}
|
|
109
|
+
function normalizeCliPath(path) {
|
|
110
|
+
const resolved = resolve(path);
|
|
111
|
+
try {
|
|
112
|
+
return realpathSync(resolved);
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
return resolved;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
function readPackageVersion() {
|
|
119
|
+
const packagePath = resolve(dirname(fileURLToPath(import.meta.url)), "..", "package.json");
|
|
120
|
+
try {
|
|
121
|
+
const packageJson = JSON.parse(readFileSync(packagePath, "utf8"));
|
|
122
|
+
return typeof packageJson.version === "string" ? packageJson.version : "0.0.0";
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return "0.0.0";
|
|
126
|
+
}
|
|
91
127
|
}
|
|
92
128
|
if (isDirectCliInvocation(import.meta.url, process.argv[1])) {
|
|
93
129
|
await createCli().parseAsync(process.argv);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/doctor.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { inspectAgentLoopKit } from "../adapters/agentloopkit.js";
|
|
4
4
|
import { inspectProjScan } from "../adapters/projscan.js";
|
|
5
5
|
import { evaluateDoctorChecks } from "../core/doctor.js";
|
|
6
|
-
import { pathExists } from "../core/fs-safe.js";
|
|
6
|
+
import { isPathWritable, pathExists } from "../core/fs-safe.js";
|
|
7
7
|
import { getRepositoryRoot } from "../core/git.js";
|
|
8
8
|
import { renderStatus } from "../core/output.js";
|
|
9
9
|
import { detectPackageManager, readPackageJson } from "../core/project.js";
|
|
@@ -37,7 +37,7 @@ export async function runDoctorCommand(options) {
|
|
|
37
37
|
repoRoot,
|
|
38
38
|
agentFlightExists: await pathExists(paths.root),
|
|
39
39
|
configValid: await isConfigValid(paths.config),
|
|
40
|
-
writable: await
|
|
40
|
+
writable: await isPathWritable(paths.root),
|
|
41
41
|
currentSessionExists: await pathExists(paths.currentSession),
|
|
42
42
|
projscanAvailable: projscan.available,
|
|
43
43
|
agentloopkitAvailable: agentloopkit.available,
|
|
@@ -66,15 +66,6 @@ async function isConfigValid(path) {
|
|
|
66
66
|
return false;
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
|
-
async function isWritable(path) {
|
|
70
|
-
try {
|
|
71
|
-
await access(path);
|
|
72
|
-
return true;
|
|
73
|
-
}
|
|
74
|
-
catch {
|
|
75
|
-
return false;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
69
|
function renderDoctor(result) {
|
|
79
70
|
return `AgentFlight Doctor
|
|
80
71
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../src/commands/replay.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../src/commands/replay.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CACrC;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CAkC9B"}
|
package/dist/commands/replay.js
CHANGED
|
@@ -2,24 +2,33 @@ import { writeTextFileSafe } from "../core/fs-safe.js";
|
|
|
2
2
|
import { listChangedFiles } from "../core/git.js";
|
|
3
3
|
import { resolveAgentFlightPaths } from "../core/paths.js";
|
|
4
4
|
import { analyzeRisk } from "../core/risk.js";
|
|
5
|
+
import { buildVerificationSummary } from "../core/verification.js";
|
|
5
6
|
import { renderHtmlReplay } from "../renderers/html-replay.js";
|
|
6
7
|
import { readCurrentSession } from "./status.js";
|
|
7
8
|
export async function runReplayCommand(options) {
|
|
8
9
|
const session = await readCurrentSession(options.repoRoot);
|
|
9
10
|
const changedFiles = options.changedFiles ?? (await listChangedFiles(options.repoRoot));
|
|
10
11
|
const risk = analyzeRisk(changedFiles);
|
|
12
|
+
const verification = buildVerificationSummary(session, {
|
|
13
|
+
changedFilesCount: changedFiles.length,
|
|
14
|
+
riskLevel: risk.level
|
|
15
|
+
});
|
|
11
16
|
const replayPath = `${resolveAgentFlightPaths(options.repoRoot).reports}/${session.id}-replay.html`;
|
|
12
17
|
const html = renderHtmlReplay({
|
|
13
18
|
task: session.task.title,
|
|
14
19
|
sessionId: session.id,
|
|
15
20
|
startedAt: session.startedAt,
|
|
16
|
-
timeline: [
|
|
21
|
+
timeline: [
|
|
22
|
+
{ label: "Session started", timestamp: session.startedAt },
|
|
23
|
+
...verification.runs.map((run) => ({
|
|
24
|
+
label: `Verification ${run.status}: ${run.command}`,
|
|
25
|
+
timestamp: run.finishedAt
|
|
26
|
+
}))
|
|
27
|
+
],
|
|
17
28
|
changedFiles,
|
|
18
29
|
riskBadges: [risk.level, ...risk.categories.map((summary) => summary.category)],
|
|
19
|
-
verificationEvidence:
|
|
20
|
-
recommendation:
|
|
21
|
-
? "Run verification and request focused review on high-risk file categories."
|
|
22
|
-
: "Run verification and prepare a scoped handoff."
|
|
30
|
+
verificationEvidence: verification.runs,
|
|
31
|
+
recommendation: `${verification.readiness}. ${verification.nextAction}`
|
|
23
32
|
});
|
|
24
33
|
await writeTextFileSafe(replayPath, html, { overwrite: true });
|
|
25
34
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/commands/replay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAYjD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAA6B;IAE7B,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,MAAM,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxF,MAAM,IAAI,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,GAAG,uBAAuB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,EAAE,cAAc,CAAC;IACpG,MAAM,IAAI,GAAG,gBAAgB,CAAC;QAC5B,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK;QACxB,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/commands/replay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAYjD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAA6B;IAE7B,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,MAAM,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxF,MAAM,IAAI,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IACvC,MAAM,YAAY,GAAG,wBAAwB,CAAC,OAAO,EAAE;QACrD,iBAAiB,EAAE,YAAY,CAAC,MAAM;QACtC,SAAS,EAAE,IAAI,CAAC,KAAK;KACtB,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,GAAG,uBAAuB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,EAAE,cAAc,CAAC;IACpG,MAAM,IAAI,GAAG,gBAAgB,CAAC;QAC5B,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK;QACxB,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,QAAQ,EAAE;YACR,EAAE,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE;YAC1D,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACjC,KAAK,EAAE,gBAAgB,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE;gBACnD,SAAS,EAAE,GAAG,CAAC,UAAU;aAC1B,CAAC,CAAC;SACJ;QACD,YAAY;QACZ,UAAU,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC/E,oBAAoB,EAAE,YAAY,CAAC,IAAI;QACvC,cAAc,EAAE,GAAG,YAAY,CAAC,SAAS,KAAK,YAAY,CAAC,UAAU,EAAE;KACxE,CAAC,CAAC;IAEH,MAAM,iBAAiB,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/D,OAAO;QACL,MAAM,EAAE;EACV,UAAU;CACX;QACG,UAAU;KACX,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/commands/report.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/commands/report.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CACrC;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CA+B9B"}
|
package/dist/commands/report.js
CHANGED
|
@@ -2,12 +2,17 @@ import { writeTextFileSafe } from "../core/fs-safe.js";
|
|
|
2
2
|
import { listChangedFiles } from "../core/git.js";
|
|
3
3
|
import { resolveAgentFlightPaths } from "../core/paths.js";
|
|
4
4
|
import { analyzeRisk } from "../core/risk.js";
|
|
5
|
+
import { buildVerificationSummary } from "../core/verification.js";
|
|
5
6
|
import { renderMarkdownReport } from "../renderers/markdown-report.js";
|
|
6
7
|
import { readCurrentSession } from "./status.js";
|
|
7
8
|
export async function runReportCommand(options) {
|
|
8
9
|
const session = await readCurrentSession(options.repoRoot);
|
|
9
10
|
const changedFiles = options.changedFiles ?? (await listChangedFiles(options.repoRoot));
|
|
10
11
|
const risk = analyzeRisk(changedFiles);
|
|
12
|
+
const verification = buildVerificationSummary(session, {
|
|
13
|
+
changedFilesCount: changedFiles.length,
|
|
14
|
+
riskLevel: risk.level
|
|
15
|
+
});
|
|
11
16
|
const report = renderMarkdownReport({
|
|
12
17
|
task: session.task.title,
|
|
13
18
|
sessionId: session.id,
|
|
@@ -15,7 +20,10 @@ export async function runReportCommand(options) {
|
|
|
15
20
|
changedFiles,
|
|
16
21
|
risk,
|
|
17
22
|
verificationCommands: session.verificationCommands,
|
|
18
|
-
verificationEvidence:
|
|
23
|
+
verificationEvidence: verification.runs,
|
|
24
|
+
verificationGaps: verification.gaps,
|
|
25
|
+
recommendation: verification.readiness,
|
|
26
|
+
nextAction: verification.nextAction,
|
|
19
27
|
tooling: session.tools
|
|
20
28
|
});
|
|
21
29
|
const reportPath = `${resolveAgentFlightPaths(options.repoRoot).reports}/${session.id}-proof.md`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/commands/report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAYjD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAA6B;IAE7B,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,MAAM,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxF,MAAM,IAAI,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,oBAAoB,CAAC;QAClC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK;QACxB,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,YAAY;QACZ,IAAI;QACJ,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;QAClD,oBAAoB,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/commands/report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAYjD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAA6B;IAE7B,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,MAAM,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxF,MAAM,IAAI,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IACvC,MAAM,YAAY,GAAG,wBAAwB,CAAC,OAAO,EAAE;QACrD,iBAAiB,EAAE,YAAY,CAAC,MAAM;QACtC,SAAS,EAAE,IAAI,CAAC,KAAK;KACtB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,oBAAoB,CAAC;QAClC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK;QACxB,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,YAAY;QACZ,IAAI;QACJ,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;QAClD,oBAAoB,EAAE,YAAY,CAAC,IAAI;QACvC,gBAAgB,EAAE,YAAY,CAAC,IAAI;QACnC,cAAc,EAAE,YAAY,CAAC,SAAS;QACtC,UAAU,EAAE,YAAY,CAAC,UAAU;QACnC,OAAO,EAAE,OAAO,CAAC,KAAK;KACvB,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,GAAG,uBAAuB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,EAAE,WAAW,CAAC;IAEjG,MAAM,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjE,OAAO;QACL,MAAM,EAAE;EACV,UAAU;CACX;QACG,UAAU;KACX,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resume.d.ts","sourceRoot":"","sources":["../../src/commands/resume.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resume.d.ts","sourceRoot":"","sources":["../../src/commands/resume.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CACrC;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CA0B9B"}
|
package/dist/commands/resume.js
CHANGED
|
@@ -2,17 +2,17 @@ import { writeTextFileSafe } from "../core/fs-safe.js";
|
|
|
2
2
|
import { listChangedFiles } from "../core/git.js";
|
|
3
3
|
import { resolveAgentFlightPaths } from "../core/paths.js";
|
|
4
4
|
import { analyzeRisk } from "../core/risk.js";
|
|
5
|
+
import { buildVerificationSummary } from "../core/verification.js";
|
|
5
6
|
import { renderResumePrompt } from "../renderers/resume-prompt.js";
|
|
6
7
|
import { readCurrentSession } from "./status.js";
|
|
7
8
|
export async function runResumeCommand(options) {
|
|
8
9
|
const session = await readCurrentSession(options.repoRoot);
|
|
9
10
|
const changedFiles = options.changedFiles ?? (await listChangedFiles(options.repoRoot));
|
|
10
11
|
const risk = analyzeRisk(changedFiles);
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
: ["No verification commands detected."];
|
|
12
|
+
const verification = buildVerificationSummary(session, {
|
|
13
|
+
changedFilesCount: changedFiles.length,
|
|
14
|
+
riskLevel: risk.level
|
|
15
|
+
});
|
|
16
16
|
const prompt = renderResumePrompt({
|
|
17
17
|
task: session.task.title,
|
|
18
18
|
sessionId: session.id,
|
|
@@ -20,9 +20,8 @@ export async function runResumeCommand(options) {
|
|
|
20
20
|
changedFiles,
|
|
21
21
|
riskLevel: risk.level,
|
|
22
22
|
riskReasons: risk.reasons,
|
|
23
|
-
verificationGaps,
|
|
24
|
-
nextAction:
|
|
25
|
-
"Add or run an appropriate verification command before claiming completion."
|
|
23
|
+
verificationGaps: verification.gaps,
|
|
24
|
+
nextAction: verification.nextAction
|
|
26
25
|
});
|
|
27
26
|
const resumePath = resolveAgentFlightPaths(options.repoRoot).currentResumePrompt;
|
|
28
27
|
await writeTextFileSafe(resumePath, prompt, { overwrite: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resume.js","sourceRoot":"","sources":["../../src/commands/resume.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAYjD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAA6B;IAE7B,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,MAAM,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxF,MAAM,IAAI,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IACvC,MAAM,
|
|
1
|
+
{"version":3,"file":"resume.js","sourceRoot":"","sources":["../../src/commands/resume.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAYjD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAA6B;IAE7B,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,MAAM,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxF,MAAM,IAAI,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IACvC,MAAM,YAAY,GAAG,wBAAwB,CAAC,OAAO,EAAE;QACrD,iBAAiB,EAAE,YAAY,CAAC,MAAM;QACtC,SAAS,EAAE,IAAI,CAAC,KAAK;KACtB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,kBAAkB,CAAC;QAChC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK;QACxB,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM;QAC1B,YAAY;QACZ,SAAS,EAAE,IAAI,CAAC,KAAK;QACrB,WAAW,EAAE,IAAI,CAAC,OAAO;QACzB,gBAAgB,EAAE,YAAY,CAAC,IAAI;QACnC,UAAU,EAAE,YAAY,CAAC,UAAU;KACpC,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,uBAAuB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,mBAAmB,CAAC;IAEjF,MAAM,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjE,OAAO;QACL,MAAM,EAAE,MAAM;QACd,UAAU;KACX,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAwC,MAAM,mBAAmB,CAAC;AAElG,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CACrC;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CAyC9B;AAED,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAEtF"}
|
package/dist/commands/status.js
CHANGED
|
@@ -2,14 +2,16 @@ import { listChangedFiles } from "../core/git.js";
|
|
|
2
2
|
import { readJsonFile } from "../core/fs-safe.js";
|
|
3
3
|
import { resolveAgentFlightPaths } from "../core/paths.js";
|
|
4
4
|
import { analyzeRisk } from "../core/risk.js";
|
|
5
|
+
import { buildVerificationSummary } from "../core/verification.js";
|
|
5
6
|
export async function runStatusCommand(options) {
|
|
6
7
|
const session = await readCurrentSession(options.repoRoot);
|
|
7
8
|
const changedFiles = options.changedFiles ?? (await listChangedFiles(options.repoRoot));
|
|
8
9
|
const risk = analyzeRisk(changedFiles);
|
|
9
10
|
const duration = formatDuration(session.startedAt, options.now ?? new Date());
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
:
|
|
11
|
+
const verification = buildVerificationSummary(session, {
|
|
12
|
+
changedFilesCount: changedFiles.length,
|
|
13
|
+
riskLevel: risk.level
|
|
14
|
+
});
|
|
13
15
|
return {
|
|
14
16
|
output: `AgentFlight status
|
|
15
17
|
|
|
@@ -22,14 +24,23 @@ ${duration}
|
|
|
22
24
|
Changed files:
|
|
23
25
|
${changedFiles.length}
|
|
24
26
|
|
|
27
|
+
Changed areas:
|
|
28
|
+
${formatChangedAreas(risk.categories)}
|
|
29
|
+
|
|
25
30
|
Risk: ${risk.level}
|
|
26
31
|
${risk.reasons.map((reason) => `- ${reason}`).join("\n")}
|
|
27
32
|
|
|
28
|
-
Verification:
|
|
29
|
-
${
|
|
33
|
+
Verification Evidence:
|
|
34
|
+
${verification.passed} passed, ${verification.failed} failed
|
|
35
|
+
${formatVerificationRuns(verification.runs)}
|
|
36
|
+
|
|
37
|
+
Proof missing:
|
|
38
|
+
${verification.gaps.map((gap) => `- ${gap}`).join("\n")}
|
|
39
|
+
|
|
40
|
+
Review readiness: ${verification.readiness}
|
|
30
41
|
|
|
31
42
|
Next action:
|
|
32
|
-
${nextAction
|
|
43
|
+
${verification.nextAction}
|
|
33
44
|
`
|
|
34
45
|
};
|
|
35
46
|
}
|
|
@@ -45,11 +56,18 @@ function formatDuration(startedAt, now) {
|
|
|
45
56
|
return "1 minute";
|
|
46
57
|
return `${minutes} minutes`;
|
|
47
58
|
}
|
|
48
|
-
function
|
|
49
|
-
if (
|
|
50
|
-
return
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
59
|
+
function formatChangedAreas(categories) {
|
|
60
|
+
if (categories.length === 0)
|
|
61
|
+
return "- none";
|
|
62
|
+
return categories
|
|
63
|
+
.map((summary) => `- ${summary.category}: ${summary.files.join(", ")}`)
|
|
64
|
+
.join("\n");
|
|
65
|
+
}
|
|
66
|
+
function formatVerificationRuns(runs) {
|
|
67
|
+
if (!runs || runs.length === 0)
|
|
68
|
+
return "- No verification runs recorded.";
|
|
69
|
+
return runs
|
|
70
|
+
.map((run) => `- ${run.status}: ${run.command} (exit ${run.exitCode ?? "unknown"}, ${run.durationMs}ms)`)
|
|
71
|
+
.join("\n");
|
|
54
72
|
}
|
|
55
73
|
//# sourceMappingURL=status.js.map
|
|
@@ -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,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { VerificationRun } from "../types/index.js";
|
|
2
|
+
export interface VerifyCommandOptions {
|
|
3
|
+
repoRoot: string;
|
|
4
|
+
commandArgs?: string[] | undefined;
|
|
5
|
+
now?: (() => Date) | undefined;
|
|
6
|
+
}
|
|
7
|
+
export interface VerifyCommandResult {
|
|
8
|
+
output: string;
|
|
9
|
+
exitCode: number;
|
|
10
|
+
runs: VerificationRun[];
|
|
11
|
+
}
|
|
12
|
+
export declare function runVerifyCommand(options: VerifyCommandOptions): Promise<VerifyCommandResult>;
|
|
13
|
+
//# sourceMappingURL=verify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACnC,GAAG,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;CAChC;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,CAyC9B"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { loadConfig } from "../core/config.js";
|
|
2
|
+
import { appendVerificationRun } from "../core/session.js";
|
|
3
|
+
import { parseCommandLine, readVerificationStdout, runVerificationCommand } from "../core/verification.js";
|
|
4
|
+
import { readCurrentSession } from "./status.js";
|
|
5
|
+
export async function runVerifyCommand(options) {
|
|
6
|
+
let session = await readCurrentSession(options.repoRoot);
|
|
7
|
+
const commandSets = await resolveCommandSets(options);
|
|
8
|
+
if (commandSets.length === 0) {
|
|
9
|
+
return {
|
|
10
|
+
output: `AgentFlight verify
|
|
11
|
+
|
|
12
|
+
No verification command was provided and no commands are configured in .agentflight/config.json.
|
|
13
|
+
`,
|
|
14
|
+
exitCode: 1,
|
|
15
|
+
runs: []
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
const output = ["AgentFlight verification", ""];
|
|
19
|
+
const runs = [];
|
|
20
|
+
for (const commandArgs of commandSets) {
|
|
21
|
+
const run = await runVerificationCommand({
|
|
22
|
+
repoRoot: options.repoRoot,
|
|
23
|
+
session,
|
|
24
|
+
commandArgs,
|
|
25
|
+
now: options.now
|
|
26
|
+
});
|
|
27
|
+
session = await appendVerificationRun(options.repoRoot, session, run);
|
|
28
|
+
runs.push(run);
|
|
29
|
+
output.push(`${run.status}: ${run.command}`);
|
|
30
|
+
const stdout = await readVerificationStdout(options.repoRoot, run);
|
|
31
|
+
if (stdout.trim().length > 0) {
|
|
32
|
+
output.push(stdout.trimEnd());
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
output: `${output.join("\n")}\n`,
|
|
37
|
+
exitCode: runs.every((run) => run.status === "passed") ? 0 : 1,
|
|
38
|
+
runs
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
async function resolveCommandSets(options) {
|
|
42
|
+
if (options.commandArgs && options.commandArgs.length > 0) {
|
|
43
|
+
return [options.commandArgs];
|
|
44
|
+
}
|
|
45
|
+
const config = await loadConfig(options.repoRoot);
|
|
46
|
+
return (config?.verification.commands ?? [])
|
|
47
|
+
.map((command) => parseCommandLine(command))
|
|
48
|
+
.filter((args) => args.length > 0);
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=verify.js.map
|
|
@@ -0,0 +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,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,sBAAsB,EACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAejD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAA6B;IAE7B,IAAI,OAAO,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAEtD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO;YACL,MAAM,EAAE;;;CAGb;YACK,QAAQ,EAAE,CAAC;YACX,IAAI,EAAE,EAAE;SACT,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAa,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAsB,EAAE,CAAC;IAEnC,KAAK,MAAM,WAAW,IAAI,WAAW,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,MAAM,sBAAsB,CAAC;YACvC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,OAAO;YACP,WAAW;YACX,GAAG,EAAE,OAAO,CAAC,GAAG;SACjB,CAAC,CAAC;QACH,OAAO,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QACtE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEf,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAE7C,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACnE,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;QAChC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,IAAI;KACL,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,OAA6B;IAC7D,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1D,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAClD,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,QAAQ,IAAI,EAAE,CAAC;SACzC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;SAC3C,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE7E,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,gBAAgB,CAAC;IACxB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE;QACV,YAAY,EAAE,OAAO,CAAC;QACtB,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC;CACH;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,iBAAiB,CAyB1F;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE7E,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,gBAAgB,CAAC;IACxB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE;QACV,YAAY,EAAE,OAAO,CAAC;QACtB,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC;CACH;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,iBAAiB,CAyB1F;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CA0ChC;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAIpF"}
|
package/dist/core/config.js
CHANGED
|
@@ -33,10 +33,12 @@ export async function initAgentFlight(options) {
|
|
|
33
33
|
await ensureDir(paths.root);
|
|
34
34
|
await ensureDir(paths.sessions);
|
|
35
35
|
await ensureDir(paths.reports);
|
|
36
|
+
await ensureDir(paths.evidence);
|
|
36
37
|
await ensureDir(paths.current);
|
|
37
38
|
for (const gitkeepPath of [
|
|
38
39
|
`${paths.sessions}/.gitkeep`,
|
|
39
40
|
`${paths.reports}/.gitkeep`,
|
|
41
|
+
`${paths.evidence}/.gitkeep`,
|
|
40
42
|
`${paths.current}/.gitkeep`
|
|
41
43
|
]) {
|
|
42
44
|
const result = await writeTextFileSafe(gitkeepPath, "");
|
package/dist/core/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
package/dist/core/fs-safe.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ export interface SafeWriteOptions {
|
|
|
7
7
|
overwrite?: boolean;
|
|
8
8
|
}
|
|
9
9
|
export declare function pathExists(path: string): Promise<boolean>;
|
|
10
|
+
export declare function isPathWritable(path: string): Promise<boolean>;
|
|
10
11
|
export declare function ensureDir(path: string): Promise<void>;
|
|
11
12
|
export declare function readJsonFile<T>(path: string): Promise<T>;
|
|
12
13
|
export declare function writeJsonFileSafe(path: string, value: unknown, options?: SafeWriteOptions): Promise<SafeWriteResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs-safe.d.ts","sourceRoot":"","sources":["../../src/core/fs-safe.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,CAAC;AAEpE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO/D;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3D;AAED,wBAAsB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAE9D;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAE1B;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAU1B"}
|
|
1
|
+
{"version":3,"file":"fs-safe.d.ts","sourceRoot":"","sources":["../../src/core/fs-safe.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,CAAC;AAEpE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO/D;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3D;AAED,wBAAsB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAE9D;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAE1B;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAU1B"}
|