agentflight 0.1.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.
Files changed (103) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +152 -0
  3. package/dist/adapters/agentloopkit.d.ts +10 -0
  4. package/dist/adapters/agentloopkit.d.ts.map +1 -0
  5. package/dist/adapters/agentloopkit.js +68 -0
  6. package/dist/adapters/agentloopkit.js.map +1 -0
  7. package/dist/adapters/projscan.d.ts +10 -0
  8. package/dist/adapters/projscan.d.ts.map +1 -0
  9. package/dist/adapters/projscan.js +54 -0
  10. package/dist/adapters/projscan.js.map +1 -0
  11. package/dist/cli.d.ts +5 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +95 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/commands/doctor.d.ts +16 -0
  16. package/dist/commands/doctor.d.ts.map +1 -0
  17. package/dist/commands/doctor.js +91 -0
  18. package/dist/commands/doctor.js.map +1 -0
  19. package/dist/commands/init.d.ts +9 -0
  20. package/dist/commands/init.d.ts.map +1 -0
  21. package/dist/commands/init.js +28 -0
  22. package/dist/commands/init.js.map +1 -0
  23. package/dist/commands/replay.d.ts +10 -0
  24. package/dist/commands/replay.d.ts.map +1 -0
  25. package/dist/commands/replay.js +32 -0
  26. package/dist/commands/replay.js.map +1 -0
  27. package/dist/commands/report.d.ts +10 -0
  28. package/dist/commands/report.d.ts.map +1 -0
  29. package/dist/commands/report.js +30 -0
  30. package/dist/commands/report.js.map +1 -0
  31. package/dist/commands/resume.d.ts +10 -0
  32. package/dist/commands/resume.d.ts.map +1 -0
  33. package/dist/commands/resume.js +34 -0
  34. package/dist/commands/resume.js.map +1 -0
  35. package/dist/commands/start.d.ts +20 -0
  36. package/dist/commands/start.d.ts.map +1 -0
  37. package/dist/commands/start.js +89 -0
  38. package/dist/commands/start.js.map +1 -0
  39. package/dist/commands/status.d.ts +12 -0
  40. package/dist/commands/status.d.ts.map +1 -0
  41. package/dist/commands/status.js +55 -0
  42. package/dist/commands/status.js.map +1 -0
  43. package/dist/core/config.d.ts +23 -0
  44. package/dist/core/config.d.ts.map +1 -0
  45. package/dist/core/config.js +74 -0
  46. package/dist/core/config.js.map +1 -0
  47. package/dist/core/doctor.d.ts +22 -0
  48. package/dist/core/doctor.d.ts.map +1 -0
  49. package/dist/core/doctor.js +68 -0
  50. package/dist/core/doctor.js.map +1 -0
  51. package/dist/core/fs-safe.d.ts +14 -0
  52. package/dist/core/fs-safe.d.ts.map +1 -0
  53. package/dist/core/fs-safe.js +31 -0
  54. package/dist/core/fs-safe.js.map +1 -0
  55. package/dist/core/git.d.ts +7 -0
  56. package/dist/core/git.d.ts.map +1 -0
  57. package/dist/core/git.js +40 -0
  58. package/dist/core/git.js.map +1 -0
  59. package/dist/core/output.d.ts +6 -0
  60. package/dist/core/output.d.ts.map +1 -0
  61. package/dist/core/output.js +11 -0
  62. package/dist/core/output.js.map +1 -0
  63. package/dist/core/paths.d.ts +3 -0
  64. package/dist/core/paths.d.ts.map +1 -0
  65. package/dist/core/paths.js +15 -0
  66. package/dist/core/paths.js.map +1 -0
  67. package/dist/core/process.d.ts +11 -0
  68. package/dist/core/process.d.ts.map +1 -0
  69. package/dist/core/process.js +27 -0
  70. package/dist/core/process.js.map +1 -0
  71. package/dist/core/project.d.ts +4 -0
  72. package/dist/core/project.d.ts.map +1 -0
  73. package/dist/core/project.js +25 -0
  74. package/dist/core/project.js.map +1 -0
  75. package/dist/core/risk.d.ts +4 -0
  76. package/dist/core/risk.d.ts.map +1 -0
  77. package/dist/core/risk.js +110 -0
  78. package/dist/core/risk.js.map +1 -0
  79. package/dist/core/session.d.ts +26 -0
  80. package/dist/core/session.d.ts.map +1 -0
  81. package/dist/core/session.js +83 -0
  82. package/dist/core/session.js.map +1 -0
  83. package/dist/core/verification.d.ts +5 -0
  84. package/dist/core/verification.d.ts.map +1 -0
  85. package/dist/core/verification.js +14 -0
  86. package/dist/core/verification.js.map +1 -0
  87. package/dist/renderers/html-replay.d.ts +17 -0
  88. package/dist/renderers/html-replay.d.ts.map +1 -0
  89. package/dist/renderers/html-replay.js +84 -0
  90. package/dist/renderers/html-replay.js.map +1 -0
  91. package/dist/renderers/markdown-report.d.ts +16 -0
  92. package/dist/renderers/markdown-report.d.ts.map +1 -0
  93. package/dist/renderers/markdown-report.js +80 -0
  94. package/dist/renderers/markdown-report.js.map +1 -0
  95. package/dist/renderers/resume-prompt.d.ts +13 -0
  96. package/dist/renderers/resume-prompt.d.ts.map +1 -0
  97. package/dist/renderers/resume-prompt.js +34 -0
  98. package/dist/renderers/resume-prompt.js.map +1 -0
  99. package/dist/types/index.d.ts +93 -0
  100. package/dist/types/index.d.ts.map +1 -0
  101. package/dist/types/index.js +2 -0
  102. package/dist/types/index.js.map +1 -0
  103. package/package.json +66 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification.js","sourceRoot":"","sources":["../../src/core/verification.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,0BAA0B,CAAC,WAA4B;IACrE,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,IAAI,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,IAAI,OAAO,CAAC,SAAS;QAAE,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC1D,IAAI,OAAO,CAAC,IAAI;QAAE,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAChD,IAAI,OAAO,CAAC,IAAI;QAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5C,IAAI,OAAO,CAAC,KAAK;QAAE,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAElD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { VerificationEvidence } from "../types/index.js";
2
+ export interface ReplayTimelineItem {
3
+ label: string;
4
+ timestamp: string;
5
+ }
6
+ export interface HtmlReplayInput {
7
+ task: string;
8
+ sessionId: string;
9
+ startedAt: string;
10
+ timeline: ReplayTimelineItem[];
11
+ changedFiles: string[];
12
+ riskBadges: string[];
13
+ verificationEvidence: VerificationEvidence[];
14
+ recommendation: string;
15
+ }
16
+ export declare function renderHtmlReplay(input: HtmlReplayInput): string;
17
+ //# sourceMappingURL=html-replay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-replay.d.ts","sourceRoot":"","sources":["../../src/renderers/html-replay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,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,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,oBAAoB,EAAE,oBAAoB,EAAE,CAAC;IAC7C,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAuD/D"}
@@ -0,0 +1,84 @@
1
+ export function renderHtmlReplay(input) {
2
+ return `<!doctype html>
3
+ <html lang="en">
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1">
7
+ <title>AgentFlight Replay ${escapeHtml(input.sessionId)}</title>
8
+ <style>
9
+ :root { color-scheme: light; font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; }
10
+ body { margin: 0; background: #f7f8fa; color: #1b1f24; }
11
+ main { max-width: 960px; margin: 0 auto; padding: 40px 24px; }
12
+ header { border-bottom: 1px solid #d8dee4; padding-bottom: 24px; margin-bottom: 28px; }
13
+ h1 { font-size: 32px; line-height: 1.1; margin: 0 0 12px; letter-spacing: 0; }
14
+ h2 { font-size: 18px; margin: 28px 0 12px; }
15
+ .meta { color: #57606a; font-size: 14px; }
16
+ .badges { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 16px; }
17
+ .badge { border: 1px solid #d0d7de; border-radius: 999px; padding: 4px 10px; background: #ffffff; font-size: 13px; }
18
+ .panel { background: #ffffff; border: 1px solid #d0d7de; border-radius: 8px; padding: 18px; margin: 16px 0; }
19
+ ul { margin: 0; padding-left: 22px; }
20
+ li { margin: 6px 0; }
21
+ code { background: #f0f3f6; border-radius: 4px; padding: 2px 5px; }
22
+ </style>
23
+ </head>
24
+ <body>
25
+ <main>
26
+ <header>
27
+ <div class="meta">AgentFlight replay · ${escapeHtml(input.sessionId)}</div>
28
+ <h1>${escapeHtml(input.task)}</h1>
29
+ <div class="meta">Started ${escapeHtml(input.startedAt)}</div>
30
+ <div class="badges">${input.riskBadges.map((badge) => `<span class="badge">${escapeHtml(badge)}</span>`).join("")}</div>
31
+ </header>
32
+
33
+ <section class="panel">
34
+ <h2>Timeline</h2>
35
+ ${renderTimeline(input.timeline)}
36
+ </section>
37
+
38
+ <section class="panel">
39
+ <h2>Changed Files</h2>
40
+ ${renderFileList(input.changedFiles)}
41
+ </section>
42
+
43
+ <section class="panel">
44
+ <h2>Verification Evidence</h2>
45
+ ${renderVerification(input.verificationEvidence)}
46
+ </section>
47
+
48
+ <section class="panel">
49
+ <h2>Recommendation</h2>
50
+ <p>${escapeHtml(input.recommendation)}</p>
51
+ </section>
52
+ </main>
53
+ </body>
54
+ </html>
55
+ `;
56
+ }
57
+ function renderTimeline(items) {
58
+ if (items.length === 0)
59
+ return "<p>No timeline events recorded.</p>";
60
+ return `<ul>${items
61
+ .map((item) => `<li><strong>${escapeHtml(item.timestamp)}</strong> ${escapeHtml(item.label)}</li>`)
62
+ .join("")}</ul>`;
63
+ }
64
+ function renderFileList(files) {
65
+ if (files.length === 0)
66
+ return "<p>No changed files detected.</p>";
67
+ return `<ul>${files.map((file) => `<li><code>${escapeHtml(file)}</code></li>`).join("")}</ul>`;
68
+ }
69
+ function renderVerification(evidence) {
70
+ if (evidence.length === 0)
71
+ return "<p>No verification evidence recorded.</p>";
72
+ return `<ul>${evidence
73
+ .map((item) => `<li><code>${escapeHtml(item.command)}</code>: ${escapeHtml(item.status)}</li>`)
74
+ .join("")}</ul>`;
75
+ }
76
+ function escapeHtml(value) {
77
+ return value
78
+ .replaceAll("&", "&amp;")
79
+ .replaceAll("<", "&lt;")
80
+ .replaceAll(">", "&gt;")
81
+ .replaceAll('"', "&quot;")
82
+ .replaceAll("'", "&#39;");
83
+ }
84
+ //# sourceMappingURL=html-replay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-replay.js","sourceRoot":"","sources":["../../src/renderers/html-replay.ts"],"names":[],"mappings":"AAkBA,MAAM,UAAU,gBAAgB,CAAC,KAAsB;IACrD,OAAO;;;;;8BAKqB,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;+CAoBV,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC;YAC9D,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;kCACA,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC;4BACjC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,uBAAuB,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;;;;;QAK/G,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC;;;;;QAK9B,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC;;;;;QAKlC,kBAAkB,CAAC,KAAK,CAAC,oBAAoB,CAAC;;;;;WAK3C,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC;;;;;CAK1C,CAAC;AACF,CAAC;AAED,SAAS,cAAc,CAAC,KAA2B;IACjD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,qCAAqC,CAAC;IACrE,OAAO,OAAO,KAAK;SAChB,GAAG,CACF,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAC9F;SACA,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;AACrB,CAAC;AAED,SAAS,cAAc,CAAC,KAAe;IACrC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,mCAAmC,CAAC;IACnE,OAAO,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;AACjG,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAgC;IAC1D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,2CAA2C,CAAC;IAC9E,OAAO,OAAO,QAAQ;SACnB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;SAC9F,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;AACrB,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK;SACT,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;SACxB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC;SACzB,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { RiskAnalysis, ToolAdapterResult, VerificationEvidence } from "../types/index.js";
2
+ export interface MarkdownReportInput {
3
+ task: string;
4
+ sessionId: string;
5
+ startedAt: string;
6
+ changedFiles: string[];
7
+ risk: RiskAnalysis;
8
+ verificationCommands: string[];
9
+ verificationEvidence: VerificationEvidence[];
10
+ tooling: {
11
+ projscan: ToolAdapterResult;
12
+ agentloopkit: ToolAdapterResult;
13
+ };
14
+ }
15
+ export declare function renderMarkdownReport(input: MarkdownReportInput): string;
16
+ //# sourceMappingURL=markdown-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-report.d.ts","sourceRoot":"","sources":["../../src/renderers/markdown-report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE/F,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,oBAAoB,EAAE,oBAAoB,EAAE,CAAC;IAC7C,OAAO,EAAE;QACP,QAAQ,EAAE,iBAAiB,CAAC;QAC5B,YAAY,EAAE,iBAAiB,CAAC;KACjC,CAAC;CACH;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM,CAoCvE"}
@@ -0,0 +1,80 @@
1
+ export function renderMarkdownReport(input) {
2
+ return `# AgentFlight Proof Report
3
+
4
+ ## Task
5
+ ${input.task}
6
+
7
+ ## Session
8
+ - Session ID: ${input.sessionId}
9
+ - Started: ${input.startedAt}
10
+
11
+ ## Changed Files
12
+ ${renderList(input.changedFiles, "No changed files detected.")}
13
+
14
+ ## Risk Summary
15
+ - Level: ${input.risk.level}
16
+ - Changed files: ${input.risk.changedFiles}
17
+ ${renderList(input.risk.reasons)}
18
+
19
+ ## Verification Evidence
20
+ ${renderVerification(input)}
21
+
22
+ ## Review Focus
23
+ ${renderReviewFocus(input.risk)}
24
+
25
+ ## Recommendation
26
+ ${renderRecommendation(input.risk, input.verificationEvidence)}
27
+
28
+ ## Next Action
29
+ ${renderNextAction(input)}
30
+
31
+ ## Tooling
32
+ - ProjScan: ${formatTool(input.tooling.projscan)}
33
+ - AgentLoopKit: ${formatTool(input.tooling.agentloopkit)}
34
+
35
+ Generated by AgentFlight, powered by ProjScan and AgentLoopKit where available.
36
+ `;
37
+ }
38
+ function renderList(items, empty = "None.") {
39
+ return items.length ? items.map((item) => `- ${item}`).join("\n") : empty;
40
+ }
41
+ function renderVerification(input) {
42
+ if (input.verificationEvidence.length === 0) {
43
+ const commands = input.verificationCommands.length
44
+ ? `\n\nSuggested commands:\n${renderList(input.verificationCommands)}`
45
+ : "";
46
+ return `No verification evidence recorded.${commands}`;
47
+ }
48
+ return input.verificationEvidence
49
+ .map((evidence) => `- ${evidence.command}: ${evidence.status}`)
50
+ .join("\n");
51
+ }
52
+ function renderReviewFocus(risk) {
53
+ return risk.categories.length
54
+ ? risk.categories
55
+ .map((summary) => `- ${summary.category}: ${summary.files.join(", ")}`)
56
+ .join("\n")
57
+ : "- Confirm the session has meaningful changes before review.";
58
+ }
59
+ function renderRecommendation(risk, evidence) {
60
+ if (evidence.length === 0) {
61
+ return "Do not claim completion yet. Run the suggested verification commands and regenerate the report.";
62
+ }
63
+ if (risk.level === "high") {
64
+ return "Request careful human review focused on the high-risk file categories before merging.";
65
+ }
66
+ return "Review the changed files and verification evidence before handoff.";
67
+ }
68
+ function renderNextAction(input) {
69
+ if (input.verificationEvidence.length === 0 && input.verificationCommands.length > 0) {
70
+ return `Run ${input.verificationCommands[0]} and capture the result.`;
71
+ }
72
+ return "Prepare a scoped handoff for the next agent or reviewer.";
73
+ }
74
+ function formatTool(result) {
75
+ const status = result.available ? "available" : "unavailable";
76
+ const version = result.version ? ` ${result.version}` : "";
77
+ const warnings = result.warnings.length ? ` (${result.warnings.join("; ")})` : "";
78
+ return `${status}${version}${warnings}`;
79
+ }
80
+ //# sourceMappingURL=markdown-report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-report.js","sourceRoot":"","sources":["../../src/renderers/markdown-report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { RiskLevel } from "../types/index.js";
2
+ export interface ResumePromptInput {
3
+ task: string;
4
+ sessionId: string;
5
+ branch: string | null;
6
+ changedFiles: string[];
7
+ riskLevel: RiskLevel;
8
+ riskReasons: string[];
9
+ verificationGaps: string[];
10
+ nextAction: string;
11
+ }
12
+ export declare function renderResumePrompt(input: ResumePromptInput): string;
13
+ //# sourceMappingURL=resume-prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resume-prompt.d.ts","sourceRoot":"","sources":["../../src/renderers/resume-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CA6BnE"}
@@ -0,0 +1,34 @@
1
+ export function renderResumePrompt(input) {
2
+ return `Continue this AgentFlight-recorded coding session safely.
3
+
4
+ ## Task
5
+ ${input.task}
6
+
7
+ ## Current State
8
+ - Session: ${input.sessionId}
9
+ - Git branch: ${input.branch ?? "unknown"}
10
+ - Risk level: ${input.riskLevel}
11
+
12
+ ## Changed Files
13
+ ${renderList(input.changedFiles, "No changed files detected.")}
14
+
15
+ ## Risks
16
+ ${renderList(input.riskReasons, "No specific risks detected yet.")}
17
+
18
+ ## Verification Gaps
19
+ ${renderList(input.verificationGaps, "No verification gaps recorded.")}
20
+
21
+ ## Next Recommended Action
22
+ ${input.nextAction}
23
+
24
+ ## Constraints
25
+ - Do not start unrelated work.
26
+ - Do not claim completion without running proof.
27
+ - Run relevant verification.
28
+ - Keep changes scoped.
29
+ `;
30
+ }
31
+ function renderList(items, empty) {
32
+ return items.length ? items.map((item) => `- ${item}`).join("\n") : empty;
33
+ }
34
+ //# sourceMappingURL=resume-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resume-prompt.js","sourceRoot":"","sources":["../../src/renderers/resume-prompt.ts"],"names":[],"mappings":"AAaA,MAAM,UAAU,kBAAkB,CAAC,KAAwB;IACzD,OAAO;;;EAGP,KAAK,CAAC,IAAI;;;aAGC,KAAK,CAAC,SAAS;gBACZ,KAAK,CAAC,MAAM,IAAI,SAAS;gBACzB,KAAK,CAAC,SAAS;;;EAG7B,UAAU,CAAC,KAAK,CAAC,YAAY,EAAE,4BAA4B,CAAC;;;EAG5D,UAAU,CAAC,KAAK,CAAC,WAAW,EAAE,iCAAiC,CAAC;;;EAGhE,UAAU,CAAC,KAAK,CAAC,gBAAgB,EAAE,gCAAgC,CAAC;;;EAGpE,KAAK,CAAC,UAAU;;;;;;;CAOjB,CAAC;AACF,CAAC;AAED,SAAS,UAAU,CAAC,KAAe,EAAE,KAAa;IAChD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5E,CAAC"}
@@ -0,0 +1,93 @@
1
+ export type AgentFlightEngineMode = "npx" | "local";
2
+ export interface AgentFlightConfig {
3
+ version: 1;
4
+ projectName: string;
5
+ createdAt: string;
6
+ engines: {
7
+ projscan: {
8
+ enabled: boolean;
9
+ mode: AgentFlightEngineMode;
10
+ };
11
+ agentloopkit: {
12
+ enabled: boolean;
13
+ mode: AgentFlightEngineMode;
14
+ };
15
+ };
16
+ verification: {
17
+ commands: string[];
18
+ };
19
+ privacy: {
20
+ localOnly: true;
21
+ telemetry: false;
22
+ };
23
+ }
24
+ export interface AgentFlightPaths {
25
+ root: string;
26
+ config: string;
27
+ sessions: string;
28
+ reports: string;
29
+ current: string;
30
+ currentSession: string;
31
+ currentHandoff: string;
32
+ currentResumePrompt: string;
33
+ }
34
+ export interface GitInfo {
35
+ branch: string | null;
36
+ commit: string | null;
37
+ dirty: boolean;
38
+ changedFiles: string[];
39
+ }
40
+ export interface AgentFlightSession {
41
+ id: string;
42
+ task: {
43
+ title: string;
44
+ };
45
+ startedAt: string;
46
+ repoRoot: string;
47
+ git: GitInfo;
48
+ packageManager: string | null;
49
+ repoSummary?: string;
50
+ verificationCommands: string[];
51
+ tools: {
52
+ projscan: ToolAdapterResult;
53
+ agentloopkit: ToolAdapterResult;
54
+ };
55
+ }
56
+ export type RiskCategory = "auth" | "billing/payments" | "database/migrations" | "security/secrets" | "config" | "tests" | "docs" | "frontend" | "backend/api" | "dependencies" | "unknown";
57
+ export type RiskLevel = "low" | "medium" | "high" | "unknown";
58
+ export interface RiskCategorySummary {
59
+ category: RiskCategory;
60
+ files: string[];
61
+ }
62
+ export interface RiskAnalysis {
63
+ level: RiskLevel;
64
+ changedFiles: number;
65
+ categories: RiskCategorySummary[];
66
+ reasons: string[];
67
+ }
68
+ export interface ToolAdapterResult {
69
+ available: boolean;
70
+ version?: string;
71
+ summary?: string;
72
+ warnings: string[];
73
+ rawOutputPath?: string;
74
+ taskLinked?: boolean;
75
+ }
76
+ export interface VerificationEvidence {
77
+ command: string;
78
+ status: "pass" | "fail" | "not-run";
79
+ output?: string;
80
+ startedAt?: string;
81
+ finishedAt?: string;
82
+ }
83
+ export interface DoctorCheck {
84
+ name: string;
85
+ status: "ok" | "warning" | "error";
86
+ message: string;
87
+ suggestedFix?: string;
88
+ }
89
+ export interface DoctorResult {
90
+ status: "ok" | "warning" | "error";
91
+ checks: DoctorCheck[];
92
+ }
93
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,66 @@
1
+ {
2
+ "name": "agentflight",
3
+ "version": "0.1.0",
4
+ "description": "Local-first flight recorder for AI coding agents.",
5
+ "type": "module",
6
+ "main": "./dist/cli.js",
7
+ "types": "./dist/cli.d.ts",
8
+ "bin": {
9
+ "agentflight": "./dist/cli.js"
10
+ },
11
+ "files": [
12
+ "dist",
13
+ "README.md",
14
+ "LICENSE"
15
+ ],
16
+ "scripts": {
17
+ "build": "tsc -p tsconfig.build.json",
18
+ "test": "vitest run",
19
+ "typecheck": "tsc --noEmit -p tsconfig.json",
20
+ "lint": "eslint .",
21
+ "format": "prettier --write .",
22
+ "format:check": "prettier --check .",
23
+ "check": "npm run typecheck && npm run lint && npm run test",
24
+ "dev": "tsx src/cli.ts",
25
+ "agentflight": "tsx src/cli.ts",
26
+ "projscan": "projscan start --intent \"Build AgentFlight, a local-first flight recorder for AI coding agents\"",
27
+ "agentloopkit:doctor": "agentloopkit doctor",
28
+ "verify": "npm run typecheck && npm run lint && npm test && npm run build"
29
+ },
30
+ "repository": {
31
+ "type": "git",
32
+ "url": "git+https://github.com/abhiyoheswaran1/AgentFlight.git"
33
+ },
34
+ "keywords": [
35
+ "ai",
36
+ "coding-agents",
37
+ "cli",
38
+ "developer-tools",
39
+ "local-first",
40
+ "observability"
41
+ ],
42
+ "author": "Baseframe Labs",
43
+ "license": "Apache-2.0",
44
+ "engines": {
45
+ "node": ">=20"
46
+ },
47
+ "bugs": {
48
+ "url": "https://github.com/abhiyoheswaran1/AgentFlight/issues"
49
+ },
50
+ "homepage": "https://github.com/abhiyoheswaran1/AgentFlight#readme",
51
+ "devDependencies": {
52
+ "@eslint/js": "^10.0.1",
53
+ "@types/node": "^25.9.3",
54
+ "agentloopkit": "^0.28.7",
55
+ "eslint": "^10.5.0",
56
+ "prettier": "^3.8.4",
57
+ "projscan": "^4.3.1",
58
+ "tsx": "^4.22.4",
59
+ "typescript": "^6.0.3",
60
+ "typescript-eslint": "^8.61.0",
61
+ "vitest": "^4.1.8"
62
+ },
63
+ "dependencies": {
64
+ "commander": "^15.0.0"
65
+ }
66
+ }