agentflight 0.3.1 → 0.3.3
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 +49 -0
- package/README.md +23 -1
- package/dist/commands/replay.d.ts.map +1 -1
- package/dist/commands/replay.js +2 -1
- package/dist/commands/replay.js.map +1 -1
- package/dist/commands/report.d.ts.map +1 -1
- package/dist/commands/report.js +2 -1
- package/dist/commands/report.js.map +1 -1
- package/dist/commands/resume.d.ts.map +1 -1
- package/dist/commands/resume.js +2 -1
- package/dist/commands/resume.js.map +1 -1
- package/dist/commands/snapshot.d.ts.map +1 -1
- package/dist/commands/snapshot.js +8 -1
- package/dist/commands/snapshot.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +2 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/core/changed-files.d.ts +3 -0
- package/dist/core/changed-files.d.ts.map +1 -0
- package/dist/core/changed-files.js +17 -0
- package/dist/core/changed-files.js.map +1 -0
- package/dist/core/git.d.ts.map +1 -1
- package/dist/core/git.js +5 -2
- package/dist/core/git.js.map +1 -1
- package/dist/renderers/html-replay.d.ts.map +1 -1
- package/dist/renderers/html-replay.js +151 -50
- package/dist/renderers/html-replay.js.map +1 -1
- package/docs/agentflight_logo/icon.svg +25 -0
- package/docs/assets/agentflight-cli-demo.svg +101 -0
- package/package.json +4 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,55 @@
|
|
|
2
2
|
|
|
3
3
|
All notable AgentFlight changes are documented here.
|
|
4
4
|
|
|
5
|
+
## [0.3.3] - 2026-06-14
|
|
6
|
+
|
|
7
|
+
Patch candidate focused on dogfood findings from published `agentflight@latest` v0.3.2.
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
|
|
11
|
+
- Improved HTML replay readability with a calmer developer-review layout, clearer timeline rows, cleaner file grouping, and denser verification evidence rows.
|
|
12
|
+
- Moved replay stdout/stderr evidence paths into collapsed native details so proof stays available without dominating the page.
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
|
|
16
|
+
- Excluded AgentFlight runtime artifacts from changed-file analysis by default:
|
|
17
|
+
- `.agentflight/sessions/**`
|
|
18
|
+
- `.agentflight/reports/**`
|
|
19
|
+
- `.agentflight/current/**`
|
|
20
|
+
- `.agentflight/evidence/**`
|
|
21
|
+
- Kept `.agentflight/config.json` visible in changed-file analysis because it is user-controlled project configuration, not runtime evidence.
|
|
22
|
+
|
|
23
|
+
### Documentation
|
|
24
|
+
|
|
25
|
+
- Added `PRODUCT.md` with the confirmed product UI direction: precise, calm, trustworthy.
|
|
26
|
+
- Added `docs/development/v0.3.2-dogfood-findings.md` with dogfood results from AgentFlight, ProjScan, and fifa-predictor.
|
|
27
|
+
- Updated the development log with dogfood, UI polish, and patch verification evidence.
|
|
28
|
+
|
|
29
|
+
## [0.3.2] - 2026-06-13
|
|
30
|
+
|
|
31
|
+
### Changed
|
|
32
|
+
|
|
33
|
+
- Added the official AgentFlight logo to the README.
|
|
34
|
+
- Added the Baseframe Labs AgentFlight website link near the top of the README.
|
|
35
|
+
- Added an animated CLI workflow preview before the 60-second workflow.
|
|
36
|
+
- Added a "Watch The Flow" section explaining start -> verify -> snapshot -> status -> report/replay/resume.
|
|
37
|
+
- Updated package homepage to the AgentFlight website page.
|
|
38
|
+
- Expanded packaged assets so npm README logo and animation references resolve.
|
|
39
|
+
|
|
40
|
+
### Documentation
|
|
41
|
+
|
|
42
|
+
- Updated launch notes with the AgentFlight logo reference.
|
|
43
|
+
- Updated development log with branding and README animation verification.
|
|
44
|
+
|
|
45
|
+
### Verification
|
|
46
|
+
|
|
47
|
+
- `npm run verify` passed.
|
|
48
|
+
- `npm run format:check` passed.
|
|
49
|
+
- `npm pack --dry-run` passed.
|
|
50
|
+
- `npm audit --audit-level=moderate` found `0 vulnerabilities`.
|
|
51
|
+
- ProjScan preflight passed.
|
|
52
|
+
- AgentLoopKit verification passed.
|
|
53
|
+
|
|
5
54
|
## [0.3.1] - 2026-06-13
|
|
6
55
|
|
|
7
56
|
### Changed
|
package/README.md
CHANGED
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
# AgentFlight
|
|
2
2
|
|
|
3
|
+
<p align="center">
|
|
4
|
+
<a href="https://www.baseframelabs.com/apps/agentflight">
|
|
5
|
+
<img src="docs/agentflight_logo/icon.svg" alt="AgentFlight logo" width="112" />
|
|
6
|
+
</a>
|
|
7
|
+
</p>
|
|
8
|
+
|
|
3
9
|
See what your coding agent did. Prove it works. Know what to do next.
|
|
4
10
|
|
|
5
11
|
AgentFlight is a local-first flight recorder for AI coding agents from Baseframe Labs. It sits around Codex, Claude Code, Cursor, Windsurf, Gemini CLI, Aider, OpenCode, and similar tools so you can review the session instead of guessing what happened.
|
|
6
12
|
|
|
13
|
+
Website: [baseframelabs.com/apps/agentflight](https://www.baseframelabs.com/apps/agentflight)
|
|
14
|
+
|
|
7
15
|
AgentFlight helps you:
|
|
8
16
|
|
|
9
17
|
- start an AI coding session
|
|
@@ -14,7 +22,7 @@ AgentFlight helps you:
|
|
|
14
22
|
- generate a local replay timeline
|
|
15
23
|
- create a resume prompt for the next agent or reviewer
|
|
16
24
|
|
|
17
|
-

|
|
18
26
|
|
|
19
27
|
## 60-Second Workflow
|
|
20
28
|
|
|
@@ -43,6 +51,20 @@ What you get:
|
|
|
43
51
|
- `replay` writes a local HTML timeline you can open in a browser.
|
|
44
52
|
- `resume` writes a Codex/Claude-ready prompt for the next safe step.
|
|
45
53
|
|
|
54
|
+
## Watch The Flow
|
|
55
|
+
|
|
56
|
+
AgentFlight turns a loose AI-agent session into a local proof trail:
|
|
57
|
+
|
|
58
|
+
1. Start a session before you ask the coding agent to work.
|
|
59
|
+
2. Capture real verification output with `agentflight verify`.
|
|
60
|
+
3. Snapshot meaningful checkpoints.
|
|
61
|
+
4. Read `status` to see changed files, risk, proof, gaps, and next action.
|
|
62
|
+
5. Generate `report`, `replay`, and `resume` when the work is ready to review or hand off.
|
|
63
|
+
|
|
64
|
+
The replay artifact is a self-contained local HTML file:
|
|
65
|
+
|
|
66
|
+

|
|
67
|
+
|
|
46
68
|
## Why This Exists
|
|
47
69
|
|
|
48
70
|
AI coding agents move fast. After a few prompts, you can lose track of:
|
|
@@ -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":"AAUA,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACpC,GAAG,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;CACxB;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,CAyC9B"}
|
package/dist/commands/replay.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { writeTextFileSafe } from "../core/fs-safe.js";
|
|
2
|
+
import { filterAgentFlightRuntimePaths } from "../core/changed-files.js";
|
|
2
3
|
import { listChangedFiles } from "../core/git.js";
|
|
3
4
|
import { resolveAgentFlightPaths } from "../core/paths.js";
|
|
4
5
|
import { analyzeRisk } from "../core/risk.js";
|
|
@@ -8,7 +9,7 @@ import { renderHtmlReplay } from "../renderers/html-replay.js";
|
|
|
8
9
|
import { readCurrentSession } from "./status.js";
|
|
9
10
|
export async function runReplayCommand(options) {
|
|
10
11
|
const session = await readCurrentSession(options.repoRoot);
|
|
11
|
-
const changedFiles = options.changedFiles ?? (await listChangedFiles(options.repoRoot));
|
|
12
|
+
const changedFiles = filterAgentFlightRuntimePaths(options.changedFiles ?? (await listChangedFiles(options.repoRoot)));
|
|
12
13
|
const risk = analyzeRisk(changedFiles);
|
|
13
14
|
const verification = buildVerificationSummary(session, {
|
|
14
15
|
changedFilesCount: changedFiles.length,
|
|
@@ -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,eAAe,EAAE,wBAAwB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAajD,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;
|
|
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,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AACzE,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,eAAe,EAAE,wBAAwB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAajD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAA6B;IAE7B,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAG,6BAA6B,CAChD,OAAO,CAAC,YAAY,IAAI,CAAC,MAAM,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CACnE,CAAC;IACF,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,cAAc,GAAG,eAAe,CAAC,OAAO,EAAE;QAC9C,IAAI,EAAE,kBAAkB;QACxB,SAAS,EAAE,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE;QACpC,KAAK,EAAE,kBAAkB;QACzB,QAAQ,EAAE;YACR,IAAI,EAAE,wBAAwB,OAAO,CAAC,EAAE,cAAc;SACvD;KACF,CAAC,CAAC;IACH,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,wBAAwB,CAAC,cAAc,CAAC;QAClD,YAAY;QACZ,iBAAiB,EAAE,IAAI,CAAC,UAAU;QAClC,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,eAAe,EAAE,YAAY,CAAC,SAAS;QACvC,cAAc,EAAE,GAAG,YAAY,CAAC,SAAS,KAAK,qBAAqB,CAAC,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,UAAU,CAAC,EAAE;KACvH,CAAC,CAAC;IAEH,MAAM,iBAAiB,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,MAAM,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAEpD,OAAO;QACL,MAAM,EAAE;EACV,UAAU;CACX;QACG,UAAU;KACX,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,SAAiB,EAAE,QAAgB;IAChE,IAAI,SAAS,KAAK,kBAAkB,EAAE,CAAC;QACrC,OAAO,8EAA8E,CAAC;IACxF,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,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":"AAUA,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACpC,GAAG,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;CACxB;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,CA2C9B"}
|
package/dist/commands/report.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { writeTextFileSafe } from "../core/fs-safe.js";
|
|
2
|
+
import { filterAgentFlightRuntimePaths } from "../core/changed-files.js";
|
|
2
3
|
import { listChangedFiles } from "../core/git.js";
|
|
3
4
|
import { resolveAgentFlightPaths } from "../core/paths.js";
|
|
4
5
|
import { analyzeRisk } from "../core/risk.js";
|
|
@@ -8,7 +9,7 @@ import { renderMarkdownReport } from "../renderers/markdown-report.js";
|
|
|
8
9
|
import { readCurrentSession } from "./status.js";
|
|
9
10
|
export async function runReportCommand(options) {
|
|
10
11
|
const session = await readCurrentSession(options.repoRoot);
|
|
11
|
-
const changedFiles = options.changedFiles ?? (await listChangedFiles(options.repoRoot));
|
|
12
|
+
const changedFiles = filterAgentFlightRuntimePaths(options.changedFiles ?? (await listChangedFiles(options.repoRoot)));
|
|
12
13
|
const risk = analyzeRisk(changedFiles);
|
|
13
14
|
const verification = buildVerificationSummary(session, {
|
|
14
15
|
changedFilesCount: changedFiles.length,
|
|
@@ -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,eAAe,EAAE,wBAAwB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAajD,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;
|
|
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,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AACzE,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,eAAe,EAAE,wBAAwB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAajD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAA6B;IAE7B,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAG,6BAA6B,CAChD,OAAO,CAAC,YAAY,IAAI,CAAC,MAAM,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CACnE,CAAC;IACF,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,WAAW,CAAC;IACjG,MAAM,cAAc,GAAG,eAAe,CAAC,OAAO,EAAE;QAC9C,IAAI,EAAE,kBAAkB;QACxB,SAAS,EAAE,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE;QACpC,KAAK,EAAE,kBAAkB;QACzB,QAAQ,EAAE;YACR,IAAI,EAAE,wBAAwB,OAAO,CAAC,EAAE,WAAW;SACpD;KACF,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,cAAc,EAAE,wBAAwB,CAAC,cAAc,CAAC;QACxD,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,qBAAqB,CAAC,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,UAAU,CAAC;QAClF,OAAO,EAAE,OAAO,CAAC,KAAK;KACvB,CAAC,CAAC;IAEH,MAAM,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,MAAM,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAEpD,OAAO;QACL,MAAM,EAAE;EACV,UAAU;CACX;QACG,UAAU;KACX,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,SAAiB,EAAE,QAAgB;IAChE,IAAI,SAAS,KAAK,kBAAkB,EAAE,CAAC;QACrC,OAAO,wFAAwF,CAAC;IAClG,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,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":"AAUA,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACpC,GAAG,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;CACxB;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,CAwC9B"}
|
package/dist/commands/resume.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { writeTextFileSafe } from "../core/fs-safe.js";
|
|
2
|
+
import { filterAgentFlightRuntimePaths } from "../core/changed-files.js";
|
|
2
3
|
import { listChangedFiles } from "../core/git.js";
|
|
3
4
|
import { resolveAgentFlightPaths } from "../core/paths.js";
|
|
4
5
|
import { analyzeRisk } from "../core/risk.js";
|
|
@@ -8,7 +9,7 @@ import { renderResumePrompt } from "../renderers/resume-prompt.js";
|
|
|
8
9
|
import { readCurrentSession } from "./status.js";
|
|
9
10
|
export async function runResumeCommand(options) {
|
|
10
11
|
const session = await readCurrentSession(options.repoRoot);
|
|
11
|
-
const changedFiles = options.changedFiles ?? (await listChangedFiles(options.repoRoot));
|
|
12
|
+
const changedFiles = filterAgentFlightRuntimePaths(options.changedFiles ?? (await listChangedFiles(options.repoRoot)));
|
|
12
13
|
const risk = analyzeRisk(changedFiles);
|
|
13
14
|
const verification = buildVerificationSummary(session, {
|
|
14
15
|
changedFilesCount: changedFiles.length,
|
|
@@ -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,eAAe,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAajD,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;
|
|
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,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AACzE,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,eAAe,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAajD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAA6B;IAE7B,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAG,6BAA6B,CAChD,OAAO,CAAC,YAAY,IAAI,CAAC,MAAM,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CACnE,CAAC;IACF,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,cAAc,GAAG,qBAAqB,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;IAC1E,MAAM,cAAc,GAAG,eAAe,CAAC,OAAO,EAAE;QAC9C,IAAI,EAAE,kBAAkB;QACxB,SAAS,EAAE,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE;QACpC,KAAK,EAAE,yBAAyB;QAChC,QAAQ,EAAE;YACR,IAAI,EAAE,uCAAuC;SAC9C;KACF,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,kBAAkB,EAAE,cAAc,EAAE,OAAO;QAC3C,iBAAiB,EAAE,GAAG,YAAY,CAAC,MAAM,YAAY,YAAY,CAAC,MAAM,SAAS;QACjF,UAAU,EAAE,qBAAqB,CAAC,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,UAAU,CAAC;KACnF,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;IACjE,MAAM,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAEpD,OAAO;QACL,MAAM,EAAE,MAAM;QACd,UAAU;KACX,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,SAAiB,EAAE,QAAgB;IAChE,IAAI,SAAS,KAAK,kBAAkB,EAAE,CAAC;QACrC,OAAO,mHAAmH,CAAC;IAC7H,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/commands/snapshot.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/commands/snapshot.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE/D,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,GAAG,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACvB,GAAG,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,YAAY,CAAC;CACrB;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CA+ChC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { filterAgentFlightRuntimePaths } from "../core/changed-files.js";
|
|
1
2
|
import { getGitInfo } from "../core/git.js";
|
|
2
3
|
import { analyzeRisk } from "../core/risk.js";
|
|
3
4
|
import { appendSessionEvent } from "../core/session.js";
|
|
@@ -5,7 +6,13 @@ import { buildVerificationSummary } from "../core/verification.js";
|
|
|
5
6
|
import { readCurrentSession } from "./status.js";
|
|
6
7
|
export async function runSnapshotCommand(options) {
|
|
7
8
|
const session = await readCurrentSession(options.repoRoot);
|
|
8
|
-
const
|
|
9
|
+
const rawGit = options.git ?? (await getGitInfo(options.repoRoot));
|
|
10
|
+
const changedFiles = filterAgentFlightRuntimePaths(rawGit.changedFiles);
|
|
11
|
+
const git = {
|
|
12
|
+
...rawGit,
|
|
13
|
+
dirty: changedFiles.length > 0,
|
|
14
|
+
changedFiles
|
|
15
|
+
};
|
|
9
16
|
const risk = analyzeRisk(git.changedFiles);
|
|
10
17
|
const verification = buildVerificationSummary(session, {
|
|
11
18
|
changedFilesCount: git.changedFiles.length,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/commands/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAejD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAA+B;IAE/B,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3D,MAAM,
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/commands/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAejD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAA+B;IAE/B,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnE,MAAM,YAAY,GAAG,6BAA6B,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACxE,MAAM,GAAG,GAAG;QACV,GAAG,MAAM;QACT,KAAK,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC;QAC9B,YAAY;KACb,CAAC;IACF,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,wBAAwB,CAAC,OAAO,EAAE;QACrD,iBAAiB,EAAE,GAAG,CAAC,YAAY,CAAC,MAAM;QAC1C,SAAS,EAAE,IAAI,CAAC,KAAK;KACtB,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE;QACzE,IAAI,EAAE,kBAAkB;QACxB,SAAS,EAAE,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE;QACpC,KAAK,EAAE,kBAAkB;QACzB,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,QAAQ,EAAE;YACR,GAAG;YACH,IAAI;YACJ,YAAY,EAAE;gBACZ,MAAM,EAAE,YAAY,CAAC,MAAM;gBAC3B,MAAM,EAAE,YAAY,CAAC,MAAM;gBAC3B,SAAS,EAAE,YAAY,CAAC,SAAS;gBACjC,IAAI,EAAE,YAAY,CAAC,IAAI;gBACvB,eAAe,EAAE,YAAY,CAAC,eAAe;aAC9C;SACF;KACF,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IAED,OAAO;QACL,MAAM,EAAE;;EAEV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,kBAAkB,GAAG,CAAC,YAAY,CAAC,MAAM;QAChF,IAAI,CAAC,KAAK;gBACF,YAAY,CAAC,MAAM,YAAY,YAAY,CAAC,MAAM;CACjE;QACG,KAAK;KACN,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":"AAOA,OAAO,KAAK,EACV,kBAAkB,EAInB,MAAM,mBAAmB,CAAC;AAE3B,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,CA+C9B;AAsBD,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAUtF"}
|
package/dist/commands/status.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { listChangedFiles } from "../core/git.js";
|
|
2
|
+
import { filterAgentFlightRuntimePaths } from "../core/changed-files.js";
|
|
2
3
|
import { pathExists, readJsonFile } from "../core/fs-safe.js";
|
|
3
4
|
import { resolveAgentFlightPaths } from "../core/paths.js";
|
|
4
5
|
import { analyzeRisk } from "../core/risk.js";
|
|
@@ -6,7 +7,7 @@ import { getLatestSessionEvent } from "../core/session.js";
|
|
|
6
7
|
import { buildVerificationSummary } from "../core/verification.js";
|
|
7
8
|
export async function runStatusCommand(options) {
|
|
8
9
|
const session = await readCurrentSession(options.repoRoot);
|
|
9
|
-
const changedFiles = options.changedFiles ?? (await listChangedFiles(options.repoRoot));
|
|
10
|
+
const changedFiles = filterAgentFlightRuntimePaths(options.changedFiles ?? (await listChangedFiles(options.repoRoot)));
|
|
10
11
|
const risk = analyzeRisk(changedFiles);
|
|
11
12
|
const duration = formatDuration(session.startedAt, options.now ?? new Date());
|
|
12
13
|
const verification = buildVerificationSummary(session, {
|
|
@@ -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,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAkBnE,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;
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"changed-files.d.ts","sourceRoot":"","sources":["../../src/core/changed-files.ts"],"names":[],"mappings":"AAOA,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAEvE;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAK9D"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
const agentFlightRuntimePrefixes = [
|
|
2
|
+
".agentflight/sessions/",
|
|
3
|
+
".agentflight/reports/",
|
|
4
|
+
".agentflight/current/",
|
|
5
|
+
".agentflight/evidence/"
|
|
6
|
+
];
|
|
7
|
+
export function filterAgentFlightRuntimePaths(files) {
|
|
8
|
+
return files.filter((file) => !isAgentFlightRuntimePath(file));
|
|
9
|
+
}
|
|
10
|
+
export function isAgentFlightRuntimePath(file) {
|
|
11
|
+
const normalized = normalizeChangedFilePath(file);
|
|
12
|
+
return agentFlightRuntimePrefixes.some((prefix) => normalized === prefix.slice(0, -1) || normalized.startsWith(prefix));
|
|
13
|
+
}
|
|
14
|
+
function normalizeChangedFilePath(file) {
|
|
15
|
+
return file.replaceAll("\\", "/").replace(/^\.\//, "");
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=changed-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"changed-files.js","sourceRoot":"","sources":["../../src/core/changed-files.ts"],"names":[],"mappings":"AAAA,MAAM,0BAA0B,GAAG;IACjC,wBAAwB;IACxB,uBAAuB;IACvB,uBAAuB;IACvB,wBAAwB;CACzB,CAAC;AAEF,MAAM,UAAU,6BAA6B,CAAC,KAAe;IAC3D,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACnD,MAAM,UAAU,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAClD,OAAO,0BAA0B,CAAC,IAAI,CACpC,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAChF,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,IAAY;IAC5C,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACzD,CAAC"}
|
package/dist/core/git.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/core/git.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/core/git.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAGjD,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,GAAG,GAAE,aAA0B,GAC9B,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,EAChB,GAAG,GAAE,aAA0B,GAC9B,OAAO,CAAC,OAAO,CAAC,CAgBlB;AAED,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,GAAG,GAAE,aAA0B,GAC9B,OAAO,CAAC,MAAM,EAAE,CAAC,CAQnB;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAW5D"}
|
package/dist/core/git.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { runCommand } from "./process.js";
|
|
2
|
+
import { filterAgentFlightRuntimePaths } from "./changed-files.js";
|
|
2
3
|
export async function getRepositoryRoot(cwd, run = runCommand) {
|
|
3
4
|
const result = await run("git", ["rev-parse", "--show-toplevel"], { cwd, timeoutMs: 10_000 });
|
|
4
5
|
return result.exitCode === 0 && result.stdout.trim() ? result.stdout.trim() : cwd;
|
|
@@ -9,7 +10,7 @@ export async function getGitInfo(repoRoot, run = runCommand) {
|
|
|
9
10
|
run("git", ["rev-parse", "--short", "HEAD"], { cwd: repoRoot, timeoutMs: 10_000 }),
|
|
10
11
|
run("git", ["status", "--porcelain", "-uall"], { cwd: repoRoot, timeoutMs: 10_000 })
|
|
11
12
|
]);
|
|
12
|
-
const changedFiles = status.exitCode === 0 ? parseGitStatusFiles(status.stdout) : [];
|
|
13
|
+
const changedFiles = status.exitCode === 0 ? filterAgentFlightRuntimePaths(parseGitStatusFiles(status.stdout)) : [];
|
|
13
14
|
return {
|
|
14
15
|
branch: branch.exitCode === 0 && branch.stdout.trim() ? branch.stdout.trim() : null,
|
|
15
16
|
commit: commit.exitCode === 0 && commit.stdout.trim() ? commit.stdout.trim() : null,
|
|
@@ -22,7 +23,9 @@ export async function listChangedFiles(repoRoot, run = runCommand) {
|
|
|
22
23
|
cwd: repoRoot,
|
|
23
24
|
timeoutMs: 10_000
|
|
24
25
|
});
|
|
25
|
-
return result.exitCode === 0
|
|
26
|
+
return result.exitCode === 0
|
|
27
|
+
? filterAgentFlightRuntimePaths(parseGitStatusFiles(result.stdout))
|
|
28
|
+
: [];
|
|
26
29
|
}
|
|
27
30
|
export function parseGitStatusFiles(output) {
|
|
28
31
|
return output
|
package/dist/core/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/core/git.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/core/git.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-replay.d.ts","sourceRoot":"","sources":["../../src/renderers/html-replay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE5F,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,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"html-replay.d.ts","sourceRoot":"","sources":["../../src/renderers/html-replay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE5F,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,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CA2J/D"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export function renderHtmlReplay(input) {
|
|
2
|
+
const risk = input.riskBadges[0] ?? "unknown";
|
|
3
|
+
const readiness = input.reviewReadiness ?? "Unknown";
|
|
2
4
|
return `<!doctype html>
|
|
3
5
|
<html lang="en">
|
|
4
6
|
<head>
|
|
@@ -6,66 +8,143 @@ export function renderHtmlReplay(input) {
|
|
|
6
8
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
7
9
|
<title>AgentFlight Replay ${escapeHtml(input.sessionId)}</title>
|
|
8
10
|
<style>
|
|
9
|
-
:root {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
:root {
|
|
12
|
+
color-scheme: light;
|
|
13
|
+
font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
14
|
+
--bg: oklch(0.982 0.006 248);
|
|
15
|
+
--paper: oklch(0.996 0.003 248);
|
|
16
|
+
--text: oklch(0.245 0.022 252);
|
|
17
|
+
--muted: oklch(0.49 0.028 252);
|
|
18
|
+
--faint: oklch(0.66 0.024 252);
|
|
19
|
+
--line: oklch(0.865 0.014 252);
|
|
20
|
+
--line-strong: oklch(0.74 0.026 252);
|
|
21
|
+
--soft: oklch(0.955 0.008 248);
|
|
22
|
+
--accent: oklch(0.47 0.105 252);
|
|
23
|
+
--success: oklch(0.49 0.13 148);
|
|
24
|
+
--success-bg: oklch(0.955 0.035 148);
|
|
25
|
+
--danger: oklch(0.52 0.165 28);
|
|
26
|
+
--danger-bg: oklch(0.955 0.032 28);
|
|
27
|
+
--warning: oklch(0.57 0.115 78);
|
|
28
|
+
--warning-bg: oklch(0.955 0.035 78);
|
|
29
|
+
--mono: ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", monospace;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
* { box-sizing: border-box; }
|
|
33
|
+
body { margin: 0; background: var(--bg); color: var(--text); }
|
|
34
|
+
main { max-width: 1120px; margin: 0 auto; padding: 40px 28px 48px; }
|
|
35
|
+
header { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 24px; align-items: start; border-bottom: 1px solid var(--line); padding-bottom: 28px; margin-bottom: 24px; }
|
|
36
|
+
h1 { font-size: 30px; line-height: 1.15; margin: 8px 0 12px; letter-spacing: 0; max-width: 26ch; }
|
|
37
|
+
h2 { font-size: 17px; line-height: 1.25; margin: 0 0 14px; letter-spacing: 0; }
|
|
38
|
+
p { max-width: 72ch; }
|
|
39
|
+
.eyebrow { color: var(--muted); font-size: 12px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; }
|
|
40
|
+
.meta { color: var(--muted); font-size: 13px; line-height: 1.45; }
|
|
41
|
+
.header-status { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px; max-width: 360px; }
|
|
16
42
|
.badges { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 16px; }
|
|
17
|
-
.badge { border: 1px solid
|
|
18
|
-
.
|
|
19
|
-
.
|
|
20
|
-
.
|
|
21
|
-
.
|
|
22
|
-
.
|
|
23
|
-
.
|
|
24
|
-
.
|
|
25
|
-
.
|
|
26
|
-
.
|
|
27
|
-
.
|
|
28
|
-
.
|
|
29
|
-
.
|
|
30
|
-
.
|
|
31
|
-
|
|
43
|
+
.badge { border: 1px solid var(--line); border-radius: 999px; padding: 4px 10px; background: var(--paper); color: var(--text); font-size: 12px; font-weight: 650; line-height: 1.35; }
|
|
44
|
+
.badge.risk-high, .badge.status-failed { background: var(--danger-bg); border-color: var(--danger); color: var(--danger); }
|
|
45
|
+
.badge.risk-medium { background: var(--warning-bg); border-color: var(--warning); color: oklch(0.39 0.095 78); }
|
|
46
|
+
.badge.risk-low, .badge.status-passed, .badge.ready { background: var(--success-bg); border-color: var(--success); color: var(--success); }
|
|
47
|
+
.badge.unknown { background: var(--soft); color: var(--muted); }
|
|
48
|
+
.summary-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); border: 1px solid var(--line); border-radius: 8px; overflow: hidden; background: var(--paper); margin: 0 0 28px; }
|
|
49
|
+
.summary-card { min-width: 0; padding: 15px 16px; border-right: 1px solid var(--line); }
|
|
50
|
+
.summary-card:last-child { border-right: 0; }
|
|
51
|
+
.summary-card span { color: var(--muted); display: block; font-size: 11px; font-weight: 700; letter-spacing: 0.05em; text-transform: uppercase; }
|
|
52
|
+
.summary-card strong { display: block; font-size: 17px; line-height: 1.25; margin-top: 5px; overflow-wrap: anywhere; }
|
|
53
|
+
.section { border-top: 1px solid var(--line); padding: 26px 0 4px; margin-top: 24px; }
|
|
54
|
+
.section-header { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; margin-bottom: 12px; }
|
|
55
|
+
.section-header .meta { flex: 0 0 auto; }
|
|
56
|
+
.timeline { display: grid; gap: 8px; }
|
|
57
|
+
.timeline-item { display: grid; grid-template-columns: minmax(145px, 0.34fr) 14px minmax(0, 1fr); gap: 12px; align-items: start; padding: 10px 0; border-bottom: 1px solid var(--line); }
|
|
58
|
+
.timeline-item:last-child { border-bottom: 0; }
|
|
59
|
+
.timeline-time { color: var(--muted); font-family: var(--mono); font-size: 12px; line-height: 1.5; overflow-wrap: anywhere; }
|
|
60
|
+
.timeline-dot { width: 9px; height: 9px; margin-top: 5px; border-radius: 999px; background: var(--line-strong); }
|
|
61
|
+
.timeline-body strong { display: block; font-size: 14px; line-height: 1.35; }
|
|
62
|
+
.timeline-type { color: var(--muted); font-family: var(--mono); font-size: 12px; margin-top: 2px; }
|
|
63
|
+
.timeline-message { color: var(--text); margin-top: 6px; }
|
|
64
|
+
.file-groups { display: grid; gap: 8px; }
|
|
65
|
+
.file-group { display: grid; grid-template-columns: 150px minmax(0, 1fr); gap: 14px; padding: 10px 0; border-bottom: 1px solid var(--line); }
|
|
66
|
+
.file-group:last-child { border-bottom: 0; }
|
|
67
|
+
.file-category { color: var(--text); font-size: 13px; font-weight: 700; }
|
|
68
|
+
.file-list-inline { display: flex; flex-wrap: wrap; gap: 6px; }
|
|
69
|
+
.changed-files { columns: 2; column-gap: 28px; margin: 0; padding: 0; list-style: none; }
|
|
70
|
+
.changed-files li { break-inside: avoid; margin: 0 0 7px; }
|
|
71
|
+
.verification-grid { border: 1px solid var(--line); border-radius: 8px; overflow: hidden; background: var(--paper); }
|
|
72
|
+
.verification-card { display: grid; grid-template-columns: 104px minmax(0, 1fr); gap: 14px; align-items: start; padding: 13px 16px; border-bottom: 1px solid var(--line); }
|
|
73
|
+
.verification-card:last-child { border-bottom: 0; }
|
|
74
|
+
.verification-status { align-self: start; justify-self: start; }
|
|
75
|
+
.verification-command { min-width: 0; }
|
|
76
|
+
details { margin-top: 8px; }
|
|
77
|
+
summary { color: var(--muted); cursor: pointer; font-size: 12px; font-weight: 650; }
|
|
78
|
+
.verification-paths { color: var(--muted); font-size: 12px; line-height: 1.55; margin-top: 6px; overflow-wrap: anywhere; }
|
|
79
|
+
.recommendation { background: var(--paper); border: 1px solid var(--line); border-radius: 8px; padding: 16px 18px; }
|
|
80
|
+
footer { color: var(--muted); font-size: 12px; margin-top: 30px; border-top: 1px solid var(--line); padding-top: 16px; }
|
|
32
81
|
ul { margin: 0; padding-left: 22px; }
|
|
33
82
|
li { margin: 6px 0; }
|
|
34
|
-
code { background:
|
|
35
|
-
@media (max-width:
|
|
83
|
+
code { background: var(--soft); border: 1px solid var(--line); border-radius: 5px; color: var(--text); font-family: var(--mono); font-size: 0.93em; padding: 2px 5px; overflow-wrap: anywhere; }
|
|
84
|
+
@media (max-width: 860px) {
|
|
85
|
+
main { padding: 28px 18px 40px; }
|
|
86
|
+
header { grid-template-columns: 1fr; }
|
|
87
|
+
.header-status { justify-content: flex-start; }
|
|
88
|
+
.summary-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
89
|
+
.summary-card:nth-child(2) { border-right: 0; }
|
|
90
|
+
.summary-card:nth-child(-n + 2) { border-bottom: 1px solid var(--line); }
|
|
91
|
+
.timeline-item, .file-group, .verification-card { grid-template-columns: 1fr; gap: 6px; }
|
|
92
|
+
.timeline-dot { display: none; }
|
|
93
|
+
.changed-files { columns: 1; }
|
|
94
|
+
}
|
|
36
95
|
</style>
|
|
37
96
|
</head>
|
|
38
97
|
<body>
|
|
39
98
|
<main>
|
|
40
99
|
<header>
|
|
41
|
-
<div
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
100
|
+
<div>
|
|
101
|
+
<div class="eyebrow">AgentFlight Replay</div>
|
|
102
|
+
<h1>${escapeHtml(input.task)}</h1>
|
|
103
|
+
<div class="meta">Session ${escapeHtml(input.sessionId)} · Started ${escapeHtml(input.startedAt)}</div>
|
|
104
|
+
<div class="badges">${input.riskBadges.map((badge) => renderBadge(badge, "risk")).join("")}</div>
|
|
105
|
+
</div>
|
|
106
|
+
<div class="header-status">
|
|
107
|
+
${renderBadge(readiness, "readiness")}
|
|
108
|
+
${renderBadge(risk, "risk")}
|
|
109
|
+
</div>
|
|
45
110
|
</header>
|
|
46
111
|
|
|
47
112
|
${renderSummary(input)}
|
|
48
113
|
|
|
49
|
-
<section class="
|
|
50
|
-
<
|
|
114
|
+
<section class="section">
|
|
115
|
+
<div class="section-header">
|
|
116
|
+
<h2>Timeline</h2>
|
|
117
|
+
<div class="meta">${escapeHtml(String(input.timeline.length))} events</div>
|
|
118
|
+
</div>
|
|
51
119
|
${renderTimeline(input.timeline)}
|
|
52
120
|
</section>
|
|
53
121
|
|
|
54
|
-
<section class="
|
|
55
|
-
<
|
|
122
|
+
<section class="section">
|
|
123
|
+
<div class="section-header">
|
|
124
|
+
<h2>Changed File Groups</h2>
|
|
125
|
+
<div class="meta">${escapeHtml(String(input.changedFileGroups?.length ?? 0))} groups</div>
|
|
126
|
+
</div>
|
|
56
127
|
${renderFileGroups(input.changedFileGroups ?? [])}
|
|
57
|
-
<
|
|
128
|
+
<div class="section-header" style="margin-top: 22px;">
|
|
129
|
+
<h2>Changed Files</h2>
|
|
130
|
+
<div class="meta">${escapeHtml(String(input.changedFiles.length))} files</div>
|
|
131
|
+
</div>
|
|
58
132
|
${renderFileList(input.changedFiles)}
|
|
59
133
|
</section>
|
|
60
134
|
|
|
61
|
-
<section class="
|
|
62
|
-
<
|
|
135
|
+
<section class="section">
|
|
136
|
+
<div class="section-header">
|
|
137
|
+
<h2>Verification Evidence</h2>
|
|
138
|
+
<div class="meta">${escapeHtml(String(input.verificationEvidence.length))} runs</div>
|
|
139
|
+
</div>
|
|
63
140
|
${renderVerification(input.verificationEvidence)}
|
|
64
141
|
</section>
|
|
65
142
|
|
|
66
|
-
<section class="
|
|
67
|
-
<
|
|
68
|
-
|
|
143
|
+
<section class="section">
|
|
144
|
+
<div class="section-header">
|
|
145
|
+
<h2>Recommendation</h2>
|
|
146
|
+
</div>
|
|
147
|
+
<div class="recommendation">${escapeHtml(input.recommendation)}</div>
|
|
69
148
|
</section>
|
|
70
149
|
|
|
71
150
|
<footer>Generated by AgentFlight</footer>
|
|
@@ -94,37 +173,59 @@ function renderTimeline(items) {
|
|
|
94
173
|
return "<p>No timeline events recorded.</p>";
|
|
95
174
|
return `<div class="timeline">${items
|
|
96
175
|
.map((item) => `<div class="timeline-item">
|
|
97
|
-
<
|
|
98
|
-
<div class="
|
|
99
|
-
|
|
176
|
+
<div class="timeline-time">${escapeHtml(item.timestamp)}</div>
|
|
177
|
+
<div class="timeline-dot" aria-hidden="true"></div>
|
|
178
|
+
<div class="timeline-body">
|
|
179
|
+
<strong>${escapeHtml(item.title)}</strong>
|
|
180
|
+
<div class="timeline-type">${escapeHtml(item.type)}</div>
|
|
181
|
+
${item.message ? `<div class="timeline-message">${escapeHtml(item.message)}</div>` : ""}
|
|
182
|
+
</div>
|
|
100
183
|
</div>`)
|
|
101
184
|
.join("")}</div>`;
|
|
102
185
|
}
|
|
103
186
|
function renderFileGroups(groups) {
|
|
104
187
|
if (groups.length === 0)
|
|
105
188
|
return "<p>No changed file groups detected.</p>";
|
|
106
|
-
return `<
|
|
107
|
-
.map((group) => `<
|
|
108
|
-
.join("")}</
|
|
189
|
+
return `<div class="file-groups">${groups
|
|
190
|
+
.map((group) => `<div class="file-group"><div class="file-category">${escapeHtml(group.category)}</div><div class="file-list-inline">${group.files.map((file) => `<code>${escapeHtml(file)}</code>`).join("")}</div></div>`)
|
|
191
|
+
.join("")}</div>`;
|
|
109
192
|
}
|
|
110
193
|
function renderFileList(files) {
|
|
111
194
|
if (files.length === 0)
|
|
112
195
|
return "<p>No changed files detected.</p>";
|
|
113
|
-
return `<ul>${files.map((file) => `<li><code>${escapeHtml(file)}</code></li>`).join("")}</ul>`;
|
|
196
|
+
return `<ul class="changed-files">${files.map((file) => `<li><code>${escapeHtml(file)}</code></li>`).join("")}</ul>`;
|
|
114
197
|
}
|
|
115
198
|
function renderVerification(evidence) {
|
|
116
199
|
if (evidence.length === 0)
|
|
117
200
|
return "<p>No verification evidence recorded.</p>";
|
|
118
201
|
return `<div class="verification-grid">${evidence
|
|
119
202
|
.map((item) => `<div class="verification-card ${escapeHtml(item.status)}">
|
|
120
|
-
<
|
|
121
|
-
<div
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
203
|
+
<div class="verification-status">${renderBadge(item.status, "status")}</div>
|
|
204
|
+
<div class="verification-command">
|
|
205
|
+
<code>${escapeHtml(item.command)}</code>
|
|
206
|
+
<div class="meta">Exit ${escapeHtml(String(item.exitCode ?? "unknown"))} · ${escapeHtml(String(item.durationMs))}ms</div>
|
|
207
|
+
<details>
|
|
208
|
+
<summary>Evidence files</summary>
|
|
209
|
+
<div class="verification-paths">
|
|
210
|
+
<div>stdout: ${escapeHtml(item.stdoutPath)}</div>
|
|
211
|
+
<div>stderr: ${escapeHtml(item.stderrPath)}</div>
|
|
212
|
+
</div>
|
|
213
|
+
</details>
|
|
214
|
+
</div>
|
|
125
215
|
</div>`)
|
|
126
216
|
.join("")}</div>`;
|
|
127
217
|
}
|
|
218
|
+
function renderBadge(value, kind) {
|
|
219
|
+
const normalized = value.toLowerCase().replaceAll(/\s+/g, "-");
|
|
220
|
+
const className = kind === "readiness"
|
|
221
|
+
? normalized.startsWith("ready")
|
|
222
|
+
? "ready"
|
|
223
|
+
: "unknown"
|
|
224
|
+
: kind === "status"
|
|
225
|
+
? `status-${normalized}`
|
|
226
|
+
: `risk-${normalized}`;
|
|
227
|
+
return `<span class="badge ${escapeHtml(className)}">${escapeHtml(value)}</span>`;
|
|
228
|
+
}
|
|
128
229
|
function escapeHtml(value) {
|
|
129
230
|
return value
|
|
130
231
|
.replaceAll("&", "&")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-replay.js","sourceRoot":"","sources":["../../src/renderers/html-replay.ts"],"names":[],"mappings":"AAoBA,MAAM,UAAU,gBAAgB,CAAC,KAAsB;IACrD,OAAO;;;;;8BAKqB,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC
|
|
1
|
+
{"version":3,"file":"html-replay.js","sourceRoot":"","sources":["../../src/renderers/html-replay.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="512" height="512" role="img" aria-label="AgentFlight logo">
|
|
2
|
+
<title>AgentFlight logo</title>
|
|
3
|
+
<defs>
|
|
4
|
+
<linearGradient id="af-bg" x1="0" y1="0" x2="0" y2="1">
|
|
5
|
+
<stop offset="0" stop-color="#1B2042"/>
|
|
6
|
+
<stop offset="1" stop-color="#0C0F22"/>
|
|
7
|
+
</linearGradient>
|
|
8
|
+
<linearGradient id="af-rec" x1="0" y1="0" x2="1" y2="1">
|
|
9
|
+
<stop offset="0" stop-color="#8E8DF8"/>
|
|
10
|
+
<stop offset="1" stop-color="#5B5BEF"/>
|
|
11
|
+
</linearGradient>
|
|
12
|
+
</defs>
|
|
13
|
+
<rect x="0" y="0" width="512" height="512" rx="114" ry="114" fill="url(#af-bg)"/>
|
|
14
|
+
<!-- Flight recorder body: a rounded "black box" module -->
|
|
15
|
+
<rect x="108" y="156" width="296" height="200" rx="50" ry="50"
|
|
16
|
+
fill="none" stroke="url(#af-rec)" stroke-width="26"/>
|
|
17
|
+
<!-- Recorded session timeline that lifts into a proof check -->
|
|
18
|
+
<path d="M 156 286 H 270 L 292 312 L 360 232"
|
|
19
|
+
fill="none" stroke="#FFFFFF" stroke-width="24"
|
|
20
|
+
stroke-linecap="round" stroke-linejoin="round"/>
|
|
21
|
+
<!-- Event markers along the timeline -->
|
|
22
|
+
<circle cx="180" cy="286" r="14" fill="#8E8DF8"/>
|
|
23
|
+
<circle cx="216" cy="286" r="14" fill="#7A79F4"/>
|
|
24
|
+
<circle cx="252" cy="286" r="14" fill="#5B5BEF"/>
|
|
25
|
+
</svg>
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="680" viewBox="0 0 1200 680" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">AgentFlight CLI workflow animation</title>
|
|
3
|
+
<desc id="desc">Animated terminal-style demo showing AgentFlight start, verify, snapshot, and status output for an AI coding session.</desc>
|
|
4
|
+
<style>
|
|
5
|
+
.bg { fill: #0f111a; }
|
|
6
|
+
.bar { fill: #171a24; }
|
|
7
|
+
.red { fill: #ff5f57; }
|
|
8
|
+
.yellow { fill: #ffbd2e; }
|
|
9
|
+
.green { fill: #28c840; }
|
|
10
|
+
.text { fill: #e8ecf3; font: 22px ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace; }
|
|
11
|
+
.muted { fill: #9aa4b2; font: 20px ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace; }
|
|
12
|
+
.cmd { fill: #7dd3fc; font: 22px ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace; }
|
|
13
|
+
.ok { fill: #86efac; font: 22px ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace; }
|
|
14
|
+
.warn { fill: #fbbf24; font: 22px ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace; }
|
|
15
|
+
.panel {
|
|
16
|
+
opacity: 0;
|
|
17
|
+
animation-duration: 12s;
|
|
18
|
+
animation-iteration-count: infinite;
|
|
19
|
+
animation-timing-function: ease-in-out;
|
|
20
|
+
}
|
|
21
|
+
.p1 { animation-name: panel1; }
|
|
22
|
+
.p2 { animation-name: panel2; }
|
|
23
|
+
.p3 { animation-name: panel3; }
|
|
24
|
+
@keyframes panel1 {
|
|
25
|
+
0%, 27% { opacity: 1; }
|
|
26
|
+
33%, 100% { opacity: 0; }
|
|
27
|
+
}
|
|
28
|
+
@keyframes panel2 {
|
|
29
|
+
0%, 30% { opacity: 0; }
|
|
30
|
+
36%, 60% { opacity: 1; }
|
|
31
|
+
66%, 100% { opacity: 0; }
|
|
32
|
+
}
|
|
33
|
+
@keyframes panel3 {
|
|
34
|
+
0%, 63% { opacity: 0; }
|
|
35
|
+
69%, 94% { opacity: 1; }
|
|
36
|
+
100% { opacity: 0; }
|
|
37
|
+
}
|
|
38
|
+
.cursor {
|
|
39
|
+
animation: blink 1s steps(2, start) infinite;
|
|
40
|
+
}
|
|
41
|
+
@keyframes blink {
|
|
42
|
+
0%, 45% { opacity: 1; }
|
|
43
|
+
46%, 100% { opacity: 0; }
|
|
44
|
+
}
|
|
45
|
+
</style>
|
|
46
|
+
|
|
47
|
+
<rect class="bg" x="0" y="0" width="1200" height="680" rx="18" />
|
|
48
|
+
<rect class="bar" x="0" y="0" width="1200" height="54" rx="18" />
|
|
49
|
+
<circle class="red" cx="32" cy="27" r="9" />
|
|
50
|
+
<circle class="yellow" cx="62" cy="27" r="9" />
|
|
51
|
+
<circle class="green" cx="92" cy="27" r="9" />
|
|
52
|
+
<text class="muted" x="130" y="35">AgentFlight local flight recorder</text>
|
|
53
|
+
|
|
54
|
+
<g class="panel p1">
|
|
55
|
+
<text class="cmd" x="44" y="96">$ npx agentflight@latest start --task "Add password reset flow"</text>
|
|
56
|
+
<text class="text" x="44" y="146">AgentFlight started</text>
|
|
57
|
+
<text class="muted" x="44" y="196">Task:</text>
|
|
58
|
+
<text class="text" x="160" y="196">Add password reset flow</text>
|
|
59
|
+
<text class="muted" x="44" y="246">Session:</text>
|
|
60
|
+
<text class="text" x="160" y="246">af-20260613-add-password-reset-flow</text>
|
|
61
|
+
<text class="muted" x="44" y="296">Detected:</text>
|
|
62
|
+
<text class="text" x="70" y="342">Git branch: main</text>
|
|
63
|
+
<text class="text" x="70" y="386">Package manager: npm</text>
|
|
64
|
+
<text class="ok" x="70" y="430">ProjScan: available</text>
|
|
65
|
+
<text class="ok" x="70" y="474">AgentLoopKit: available</text>
|
|
66
|
+
<text class="warn" x="44" y="542">Suggested proof: npm test</text>
|
|
67
|
+
<text class="muted" x="44" y="600">Now run Codex, Claude Code, Cursor, or your coding agent normally.</text>
|
|
68
|
+
</g>
|
|
69
|
+
|
|
70
|
+
<g class="panel p2">
|
|
71
|
+
<text class="cmd" x="44" y="96">$ npx agentflight@latest verify -- npm test</text>
|
|
72
|
+
<text class="text" x="44" y="146">Verification recorded</text>
|
|
73
|
+
<text class="muted" x="44" y="196">Command:</text>
|
|
74
|
+
<text class="text" x="160" y="196">npm test</text>
|
|
75
|
+
<text class="muted" x="44" y="246">Status:</text>
|
|
76
|
+
<text class="ok" x="160" y="246">passed</text>
|
|
77
|
+
<text class="muted" x="44" y="296">Evidence:</text>
|
|
78
|
+
<text class="text" x="70" y="342">stdout: .agentflight/evidence/.../verification-1.stdout.txt</text>
|
|
79
|
+
<text class="text" x="70" y="386">stderr: .agentflight/evidence/.../verification-1.stderr.txt</text>
|
|
80
|
+
<text class="cmd" x="44" y="474">$ npx agentflight@latest snapshot --note "Initial implementation verified"</text>
|
|
81
|
+
<text class="text" x="44" y="524">Snapshot recorded</text>
|
|
82
|
+
<text class="text" x="70" y="570">Changed files: 3 Risk: medium Verification: 1 passed, 0 failed</text>
|
|
83
|
+
</g>
|
|
84
|
+
|
|
85
|
+
<g class="panel p3">
|
|
86
|
+
<text class="cmd" x="44" y="96">$ npx agentflight@latest status</text>
|
|
87
|
+
<text class="text" x="44" y="146">AgentFlight status</text>
|
|
88
|
+
<text class="muted" x="44" y="196">Task:</text>
|
|
89
|
+
<text class="text" x="160" y="196">Add password reset flow</text>
|
|
90
|
+
<text class="muted" x="44" y="246">Changed files:</text>
|
|
91
|
+
<text class="text" x="230" y="246">3</text>
|
|
92
|
+
<text class="muted" x="44" y="296">Changed areas:</text>
|
|
93
|
+
<text class="text" x="70" y="342">docs: docs/password-reset.md</text>
|
|
94
|
+
<text class="text" x="70" y="386">tests: tests/password-reset.test.js</text>
|
|
95
|
+
<text class="text" x="70" y="430">unknown: src/password-reset.ts</text>
|
|
96
|
+
<text class="warn" x="44" y="498">Risk: medium</text>
|
|
97
|
+
<text class="ok" x="44" y="548">Verification Evidence: 1 passed, 0 failed</text>
|
|
98
|
+
<text class="ok" x="44" y="598">Review readiness: Ready for review</text>
|
|
99
|
+
<text class="cmd cursor" x="44" y="642">Next action: agentflight report</text>
|
|
100
|
+
</g>
|
|
101
|
+
</svg>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentflight",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.3",
|
|
4
4
|
"description": "Local-first flight recorder for AI coding agents.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/cli.js",
|
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
"dist",
|
|
13
13
|
"README.md",
|
|
14
14
|
"CHANGELOG.md",
|
|
15
|
+
"docs/agentflight_logo/icon.svg",
|
|
16
|
+
"docs/assets/agentflight-cli-demo.svg",
|
|
15
17
|
"docs/assets/agentflight-replay-timeline.png",
|
|
16
18
|
"docs/development/dogfooding.md",
|
|
17
19
|
"docs/development/release.md",
|
|
@@ -58,7 +60,7 @@
|
|
|
58
60
|
"bugs": {
|
|
59
61
|
"url": "https://github.com/abhiyoheswaran1/AgentFlight/issues"
|
|
60
62
|
},
|
|
61
|
-
"homepage": "https://
|
|
63
|
+
"homepage": "https://www.baseframelabs.com/apps/agentflight",
|
|
62
64
|
"devDependencies": {
|
|
63
65
|
"@eslint/js": "^10.0.1",
|
|
64
66
|
"@types/node": "^25.9.3",
|