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":"doctor.d.ts","sourceRoot":"","sources":["../../src/core/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEnE,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,OAAO,EAAE;QACP,IAAI,EAAE,OAAO,CAAC;QACd,KAAK,EAAE,OAAO,CAAC;QACf,SAAS,EAAE,OAAO,CAAC;QACnB,IAAI,EAAE,OAAO,CAAC;KACf,CAAC;CACH;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,qBAAqB,GAAG,YAAY,CAkI/E"}
@@ -0,0 +1,68 @@
1
+ export function evaluateDoctorChecks(input) {
2
+ const checks = [];
3
+ const nodeMajor = parseNodeMajor(input.nodeVersion);
4
+ checks.push(nodeMajor >= 20
5
+ ? ok("Node.js version", `${input.nodeVersion} satisfies AgentFlight's Node.js 20+ target.`)
6
+ : error("Node.js version", `${input.nodeVersion} is below AgentFlight's Node.js 20+ target.`, "Install Node.js 20 or newer."));
7
+ checks.push(input.npmVersion
8
+ ? ok("npm availability", `npm ${input.npmVersion} is available.`)
9
+ : error("npm availability", "npm is not available.", "Install npm with Node.js 20 or newer."));
10
+ checks.push(input.gitAvailable
11
+ ? ok("git availability", "git is available.")
12
+ : warning("git availability", "git is not available or this repo cannot run git commands.", "Install git or run AgentFlight inside a git repository."));
13
+ checks.push(input.repoRoot
14
+ ? ok("repository root", input.repoRoot)
15
+ : error("repository root", "Unable to determine repository root.", "Run AgentFlight from inside a git repository or project directory."));
16
+ checks.push(input.packageManager
17
+ ? ok("package manager", input.packageManager)
18
+ : warning("package manager", "No package manager lockfile was detected.", "Run npm install or add a package manager lockfile."));
19
+ checks.push(input.agentFlightExists
20
+ ? ok(".agentflight presence", ".agentflight exists.")
21
+ : warning(".agentflight presence", ".agentflight has not been initialized.", "Run agentflight init."));
22
+ checks.push(input.configValid
23
+ ? ok("config validity", ".agentflight/config.json is valid.")
24
+ : error("config validity", ".agentflight/config.json is missing or invalid.", "Run agentflight init or fix config.json."));
25
+ checks.push(input.writable
26
+ ? ok(".agentflight writable", ".agentflight is writable.")
27
+ : error(".agentflight writable", ".agentflight is not writable.", "Check filesystem permissions."));
28
+ checks.push(input.currentSessionExists
29
+ ? ok("current session", "A current session exists.")
30
+ : warning("current session", "No current session exists.", 'Run agentflight start --task "...".'));
31
+ checks.push(input.projscanAvailable
32
+ ? ok("ProjScan availability", "ProjScan is available.")
33
+ : warning("ProjScan availability", "ProjScan is not currently available.", "Install projscan locally or allow AgentFlight to use npx projscan@latest."));
34
+ checks.push(input.agentloopkitAvailable
35
+ ? ok("AgentLoopKit availability", "AgentLoopKit is available.")
36
+ : warning("AgentLoopKit availability", "AgentLoopKit is not currently available.", "Install agentloopkit locally or allow AgentFlight to use npx agentloopkit@latest."));
37
+ for (const script of ["test", "build", "typecheck", "lint"]) {
38
+ checks.push(input.scripts[script]
39
+ ? ok(`${script} script`, `npm run ${script} is configured.`)
40
+ : warning(`${script} script`, `npm run ${script} is not configured.`, `Add a ${script} script to package.json.`));
41
+ }
42
+ return {
43
+ status: checks.some((check) => check.status === "error")
44
+ ? "error"
45
+ : checks.some((check) => check.status === "warning")
46
+ ? "warning"
47
+ : "ok",
48
+ checks
49
+ };
50
+ }
51
+ function parseNodeMajor(version) {
52
+ const match = /^v?(\d+)/.exec(version);
53
+ return match ? Number(match[1]) : 0;
54
+ }
55
+ function ok(name, message) {
56
+ return { name, status: "ok", message };
57
+ }
58
+ function warning(name, message, suggestedFix) {
59
+ return suggestedFix
60
+ ? { name, status: "warning", message, suggestedFix }
61
+ : { name, status: "warning", message };
62
+ }
63
+ function error(name, message, suggestedFix) {
64
+ return suggestedFix
65
+ ? { name, status: "error", message, suggestedFix }
66
+ : { name, status: "error", message };
67
+ }
68
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/core/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export type SafeWriteStatus = "created" | "overwritten" | "skipped";
2
+ export interface SafeWriteResult {
3
+ path: string;
4
+ status: SafeWriteStatus;
5
+ }
6
+ export interface SafeWriteOptions {
7
+ overwrite?: boolean;
8
+ }
9
+ export declare function pathExists(path: string): Promise<boolean>;
10
+ export declare function ensureDir(path: string): Promise<void>;
11
+ export declare function readJsonFile<T>(path: string): Promise<T>;
12
+ export declare function writeJsonFileSafe(path: string, value: unknown, options?: SafeWriteOptions): Promise<SafeWriteResult>;
13
+ export declare function writeTextFileSafe(path: string, value: string, options?: SafeWriteOptions): Promise<SafeWriteResult>;
14
+ //# sourceMappingURL=fs-safe.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,31 @@
1
+ import { constants } from "node:fs";
2
+ import { access, mkdir, readFile, writeFile } from "node:fs/promises";
3
+ import { dirname } from "node:path";
4
+ export async function pathExists(path) {
5
+ try {
6
+ await access(path, constants.F_OK);
7
+ return true;
8
+ }
9
+ catch {
10
+ return false;
11
+ }
12
+ }
13
+ export async function ensureDir(path) {
14
+ await mkdir(path, { recursive: true });
15
+ }
16
+ export async function readJsonFile(path) {
17
+ return JSON.parse(await readFile(path, "utf8"));
18
+ }
19
+ export async function writeJsonFileSafe(path, value, options = {}) {
20
+ return writeTextFileSafe(path, `${JSON.stringify(value, null, 2)}\n`, options);
21
+ }
22
+ export async function writeTextFileSafe(path, value, options = {}) {
23
+ await mkdir(dirname(path), { recursive: true });
24
+ const exists = await pathExists(path);
25
+ if (exists && options.overwrite !== true) {
26
+ return { path, status: "skipped" };
27
+ }
28
+ await writeFile(path, value, "utf8");
29
+ return { path, status: exists ? "overwritten" : "created" };
30
+ }
31
+ //# sourceMappingURL=fs-safe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-safe.js","sourceRoot":"","sources":["../../src/core/fs-safe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY;IAC1C,MAAM,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAI,IAAY;IAChD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAM,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAY,EACZ,KAAc,EACd,UAA4B,EAAE;IAE9B,OAAO,iBAAiB,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAY,EACZ,KAAa,EACb,UAA4B,EAAE;IAE9B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,MAAM,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QACzC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACrC,CAAC;IAED,MAAM,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACrC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { CommandRunner } from "./process.js";
2
+ import type { GitInfo } from "../types/index.js";
3
+ export declare function getRepositoryRoot(cwd: string, run?: CommandRunner): Promise<string>;
4
+ export declare function getGitInfo(repoRoot: string, run?: CommandRunner): Promise<GitInfo>;
5
+ export declare function listChangedFiles(repoRoot: string, run?: CommandRunner): Promise<string[]>;
6
+ export declare function parseGitStatusFiles(output: string): string[];
7
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +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;AAEjD,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,CAelB;AAED,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,GAAG,GAAE,aAA0B,GAC9B,OAAO,CAAC,MAAM,EAAE,CAAC,CAMnB;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAW5D"}
@@ -0,0 +1,40 @@
1
+ import { runCommand } from "./process.js";
2
+ export async function getRepositoryRoot(cwd, run = runCommand) {
3
+ const result = await run("git", ["rev-parse", "--show-toplevel"], { cwd, timeoutMs: 10_000 });
4
+ return result.exitCode === 0 && result.stdout.trim() ? result.stdout.trim() : cwd;
5
+ }
6
+ export async function getGitInfo(repoRoot, run = runCommand) {
7
+ const [branch, commit, status] = await Promise.all([
8
+ run("git", ["branch", "--show-current"], { cwd: repoRoot, timeoutMs: 10_000 }),
9
+ run("git", ["rev-parse", "--short", "HEAD"], { cwd: repoRoot, timeoutMs: 10_000 }),
10
+ run("git", ["status", "--porcelain", "-uall"], { cwd: repoRoot, timeoutMs: 10_000 })
11
+ ]);
12
+ const changedFiles = status.exitCode === 0 ? parseGitStatusFiles(status.stdout) : [];
13
+ return {
14
+ branch: branch.exitCode === 0 && branch.stdout.trim() ? branch.stdout.trim() : null,
15
+ commit: commit.exitCode === 0 && commit.stdout.trim() ? commit.stdout.trim() : null,
16
+ dirty: changedFiles.length > 0,
17
+ changedFiles
18
+ };
19
+ }
20
+ export async function listChangedFiles(repoRoot, run = runCommand) {
21
+ const result = await run("git", ["status", "--porcelain", "-uall"], {
22
+ cwd: repoRoot,
23
+ timeoutMs: 10_000
24
+ });
25
+ return result.exitCode === 0 ? parseGitStatusFiles(result.stdout) : [];
26
+ }
27
+ export function parseGitStatusFiles(output) {
28
+ return output
29
+ .split("\n")
30
+ .filter((line) => line.trim().length > 0)
31
+ .map((line) => {
32
+ const pathPart = line.slice(3).trim();
33
+ const renameMatch = /.+ -> (.+)$/.exec(pathPart);
34
+ if (renameMatch?.[1])
35
+ return renameMatch[1];
36
+ return pathPart;
37
+ })
38
+ .filter(Boolean);
39
+ }
40
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/core/git.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,GAAW,EACX,MAAqB,UAAU;IAE/B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,iBAAiB,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9F,OAAO,MAAM,CAAC,QAAQ,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;AACpF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,QAAgB,EAChB,MAAqB,UAAU;IAE/B,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACjD,GAAG,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;QAC9E,GAAG,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;QAClF,GAAG,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;KACrF,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAErF,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,QAAQ,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI;QACnF,MAAM,EAAE,MAAM,CAAC,QAAQ,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI;QACnF,KAAK,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC;QAC9B,YAAY;KACb,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAAgB,EAChB,MAAqB,UAAU;IAE/B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE;QAClE,GAAG,EAAE,QAAQ;QACb,SAAS,EAAE,MAAM;KAClB,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO,MAAM;SACV,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;SACxC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC;YAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;QAC5C,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;SACD,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface CommandOutput {
2
+ output: string;
3
+ }
4
+ export declare function formatToolAvailability(label: string, available: boolean): string;
5
+ export declare function renderStatus(status: "ok" | "warning" | "error"): string;
6
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/core/output.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,CAEhF;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,IAAI,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAIvE"}
@@ -0,0 +1,11 @@
1
+ export function formatToolAvailability(label, available) {
2
+ return `${label}: ${available ? "available" : "unavailable"}`;
3
+ }
4
+ export function renderStatus(status) {
5
+ if (status === "ok")
6
+ return "OK";
7
+ if (status === "warning")
8
+ return "Warning";
9
+ return "Error";
10
+ }
11
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/core/output.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,sBAAsB,CAAC,KAAa,EAAE,SAAkB;IACtE,OAAO,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAkC;IAC7D,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACjC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { AgentFlightPaths } from "../types/index.js";
2
+ export declare function resolveAgentFlightPaths(repoRoot: string): AgentFlightPaths;
3
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/core/paths.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAa1E"}
@@ -0,0 +1,15 @@
1
+ import { join } from "node:path";
2
+ export function resolveAgentFlightPaths(repoRoot) {
3
+ const root = join(repoRoot, ".agentflight");
4
+ return {
5
+ root,
6
+ config: join(root, "config.json"),
7
+ sessions: join(root, "sessions"),
8
+ reports: join(root, "reports"),
9
+ current: join(root, "current"),
10
+ currentSession: join(root, "current", "session.json"),
11
+ currentHandoff: join(root, "current", "handoff.md"),
12
+ currentResumePrompt: join(root, "current", "resume-prompt.md")
13
+ };
14
+ }
15
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/core/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAE5C,OAAO;QACL,IAAI;QACJ,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;QACjC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC;QAChC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;QAC9B,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;QAC9B,cAAc,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,cAAc,CAAC;QACrD,cAAc,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC;QACnD,mBAAmB,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,kBAAkB,CAAC;KAC/D,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface CommandResult {
2
+ exitCode: number;
3
+ stdout: string;
4
+ stderr: string;
5
+ }
6
+ export type CommandRunner = (command: string, args: string[], options?: {
7
+ cwd?: string | undefined;
8
+ timeoutMs?: number | undefined;
9
+ }) => Promise<CommandResult>;
10
+ export declare const runCommand: CommandRunner;
11
+ //# sourceMappingURL=process.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/core/process.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,aAAa,GAAG,CAC1B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,KACnE,OAAO,CAAC,aAAa,CAAC,CAAC;AAE5B,eAAO,MAAM,UAAU,EAAE,aA4BxB,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { execFile } from "node:child_process";
2
+ import { promisify } from "node:util";
3
+ const execFileAsync = promisify(execFile);
4
+ export const runCommand = async (command, args, options = {}) => {
5
+ try {
6
+ const result = await execFileAsync(command, args, {
7
+ cwd: options.cwd,
8
+ timeout: options.timeoutMs ?? 15_000,
9
+ maxBuffer: 1024 * 1024,
10
+ shell: false
11
+ });
12
+ return {
13
+ exitCode: 0,
14
+ stdout: result.stdout,
15
+ stderr: result.stderr
16
+ };
17
+ }
18
+ catch (error) {
19
+ const failure = error;
20
+ return {
21
+ exitCode: typeof failure.code === "number" ? failure.code : 1,
22
+ stdout: failure.stdout ?? "",
23
+ stderr: failure.stderr ?? failure.message ?? "Command failed."
24
+ };
25
+ }
26
+ };
27
+ //# sourceMappingURL=process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/core/process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAc1C,MAAM,CAAC,MAAM,UAAU,GAAkB,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE;IAC7E,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE;YAChD,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,OAAO,EAAE,OAAO,CAAC,SAAS,IAAI,MAAM;YACpC,SAAS,EAAE,IAAI,GAAG,IAAI;YACtB,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;QAEH,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAKf,CAAC;QAEF,OAAO;YACL,QAAQ,EAAE,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7D,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,IAAI,iBAAiB;SAC/D,CAAC;IACJ,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { PackageJsonLike } from "./verification.js";
2
+ export declare function readPackageJson(repoRoot: string): Promise<PackageJsonLike>;
3
+ export declare function detectPackageManager(repoRoot: string): Promise<string | null>;
4
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/core/project.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAMhF;AAED,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOnF"}
@@ -0,0 +1,25 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { pathExists } from "./fs-safe.js";
4
+ export async function readPackageJson(repoRoot) {
5
+ try {
6
+ return JSON.parse(await readFile(join(repoRoot, "package.json"), "utf8"));
7
+ }
8
+ catch {
9
+ return {};
10
+ }
11
+ }
12
+ export async function detectPackageManager(repoRoot) {
13
+ if (await pathExists(join(repoRoot, "package-lock.json")))
14
+ return "npm";
15
+ if (await pathExists(join(repoRoot, "pnpm-lock.yaml")))
16
+ return "pnpm";
17
+ if (await pathExists(join(repoRoot, "yarn.lock")))
18
+ return "yarn";
19
+ if (await pathExists(join(repoRoot, "bun.lockb")))
20
+ return "bun";
21
+ if (await pathExists(join(repoRoot, "package.json")))
22
+ return "npm";
23
+ return null;
24
+ }
25
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/core/project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAgB;IACpD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAoB,CAAC;IAC/F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,QAAgB;IACzD,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACxE,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IACtE,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IACjE,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAChE,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACnE,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { RiskAnalysis, RiskCategory } from "../types/index.js";
2
+ export declare function categorizeFile(file: string): RiskCategory;
3
+ export declare function analyzeRisk(files: string[]): RiskAnalysis;
4
+ //# sourceMappingURL=risk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"risk.d.ts","sourceRoot":"","sources":["../../src/core/risk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAkC,MAAM,mBAAmB,CAAC;AAYpG,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CA4CzD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,CA8BzD"}
@@ -0,0 +1,110 @@
1
+ const highRiskCategories = new Set([
2
+ "auth",
3
+ "billing/payments",
4
+ "database/migrations",
5
+ "security/secrets",
6
+ "config"
7
+ ]);
8
+ const mediumRiskCategories = new Set(["backend/api", "dependencies"]);
9
+ export function categorizeFile(file) {
10
+ const normalized = file.replaceAll("\\", "/").toLowerCase();
11
+ if (/(^|\/)\.env($|\.)/.test(normalized)) {
12
+ return "security/secrets";
13
+ }
14
+ if (/(^|\/)(test|tests|__tests__|spec)(\/|$)|\.(test|spec)\.[cm]?[jt]sx?$/.test(normalized)) {
15
+ return "tests";
16
+ }
17
+ if (/(^|\/)(doc|docs)(\/|$)|\.(md|mdx|txt)$/.test(normalized)) {
18
+ return "docs";
19
+ }
20
+ if (/(^|\/)(auth|authentication|oauth|permission|permissions)(\/|[-_.])/.test(normalized)) {
21
+ return "auth";
22
+ }
23
+ if (/(payment|payments|billing|stripe|checkout|invoice|invoices)/.test(normalized)) {
24
+ return "billing/payments";
25
+ }
26
+ if (/(^|\/)(migration|migrations|db\/migrate|database\/migrations)(\/|$)/.test(normalized)) {
27
+ return "database/migrations";
28
+ }
29
+ if (/secret|secrets|credential|credentials|token|tokens/.test(normalized)) {
30
+ return "security/secrets";
31
+ }
32
+ if (/(^|\/)(package-lock\.json|pnpm-lock\.yaml|yarn\.lock|package\.json)$/.test(normalized) ||
33
+ /(^|\/)(deps|dependencies)(\/|$)/.test(normalized)) {
34
+ return "dependencies";
35
+ }
36
+ if (/(^|\/)(\.github|\.gitlab|ci|config|configs)(\/|$)/.test(normalized) ||
37
+ /(tsconfig|eslint|prettier|vite|vitest|rollup|webpack|babel|dockerfile)/.test(normalized)) {
38
+ return "config";
39
+ }
40
+ if (/(^|\/)(components|ui|pages|app|styles)(\/|$)|\.(tsx|jsx|css|scss)$/.test(normalized)) {
41
+ return "frontend";
42
+ }
43
+ if (/(^|\/)(api|routes|controllers|server|backend)(\/|$)/.test(normalized)) {
44
+ return "backend/api";
45
+ }
46
+ return "unknown";
47
+ }
48
+ export function analyzeRisk(files) {
49
+ if (files.length === 0) {
50
+ return {
51
+ level: "unknown",
52
+ changedFiles: 0,
53
+ categories: [],
54
+ reasons: ["No changed files detected yet."]
55
+ };
56
+ }
57
+ const grouped = new Map();
58
+ for (const file of files) {
59
+ const category = categorizeFile(file);
60
+ grouped.set(category, [...(grouped.get(category) ?? []), file]);
61
+ }
62
+ const categories = [...grouped.entries()].map(([category, categoryFiles]) => ({
63
+ category,
64
+ files: categoryFiles
65
+ }));
66
+ const level = determineRiskLevel(categories);
67
+ return {
68
+ level,
69
+ changedFiles: files.length,
70
+ categories,
71
+ reasons: buildReasons(categories, level)
72
+ };
73
+ }
74
+ function determineRiskLevel(categories) {
75
+ if (categories.some((summary) => highRiskCategories.has(summary.category)))
76
+ return "high";
77
+ if (categories.some((summary) => mediumRiskCategories.has(summary.category)))
78
+ return "medium";
79
+ if (categories.every((summary) => summary.category === "docs" ||
80
+ summary.category === "tests" ||
81
+ summary.category === "frontend")) {
82
+ return "low";
83
+ }
84
+ return "medium";
85
+ }
86
+ function buildReasons(categories, level) {
87
+ const present = new Set(categories.map((summary) => summary.category));
88
+ const reasons = [];
89
+ if (present.has("auth"))
90
+ reasons.push("Authentication-sensitive files changed.");
91
+ if (present.has("billing/payments"))
92
+ reasons.push("Billing or payment files changed.");
93
+ if (present.has("database/migrations"))
94
+ reasons.push("Database migration files changed.");
95
+ if (present.has("security/secrets"))
96
+ reasons.push("Secret or credential-adjacent files changed.");
97
+ if (present.has("config"))
98
+ reasons.push("Configuration or CI files changed.");
99
+ if (present.has("backend/api"))
100
+ reasons.push("Backend or API files changed.");
101
+ if (present.has("dependencies"))
102
+ reasons.push("Dependency or package metadata changed.");
103
+ if (reasons.length === 0) {
104
+ reasons.push(level === "low"
105
+ ? "Only low-risk docs, tests, or isolated UI files changed."
106
+ : "Risk is based on changed file categories.");
107
+ }
108
+ return reasons;
109
+ }
110
+ //# sourceMappingURL=risk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"risk.js","sourceRoot":"","sources":["../../src/core/risk.ts"],"names":[],"mappings":"AAEA,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAe;IAC/C,MAAM;IACN,kBAAkB;IAClB,qBAAqB;IACrB,kBAAkB;IAClB,QAAQ;CACT,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAe,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC;AAEpF,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAE5D,IAAI,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACzC,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,IAAI,sEAAsE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5F,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,wCAAwC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9D,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,oEAAoE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1F,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,6DAA6D,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACnF,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,IAAI,qEAAqE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3F,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IACD,IAAI,oDAAoD,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1E,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,IACE,sEAAsE,CAAC,IAAI,CAAC,UAAU,CAAC;QACvF,iCAAiC,CAAC,IAAI,CAAC,UAAU,CAAC,EAClD,CAAC;QACD,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,IACE,mDAAmD,CAAC,IAAI,CAAC,UAAU,CAAC;QACpE,wEAAwE,CAAC,IAAI,CAAC,UAAU,CAAC,EACzF,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,oEAAoE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1F,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,IAAI,qDAAqD,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3E,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAe;IACzC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,KAAK,EAAE,SAAS;YAChB,YAAY,EAAE,CAAC;YACf,UAAU,EAAE,EAAE;YACd,OAAO,EAAE,CAAC,gCAAgC,CAAC;SAC5C,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAA0B,CAAC;IAClD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,UAAU,GAA0B,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAClE,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9B,QAAQ;QACR,KAAK,EAAE,aAAa;KACrB,CAAC,CACH,CAAC;IAEF,MAAM,KAAK,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAC7C,OAAO;QACL,KAAK;QACL,YAAY,EAAE,KAAK,CAAC,MAAM;QAC1B,UAAU;QACV,OAAO,EAAE,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC;KACzC,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,UAAiC;IAC3D,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IAC1F,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC9F,IACE,UAAU,CAAC,KAAK,CACd,CAAC,OAAO,EAAE,EAAE,CACV,OAAO,CAAC,QAAQ,KAAK,MAAM;QAC3B,OAAO,CAAC,QAAQ,KAAK,OAAO;QAC5B,OAAO,CAAC,QAAQ,KAAK,UAAU,CAClC,EACD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,YAAY,CAAC,UAAiC,EAAE,KAAgB;IACvE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvE,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACjF,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IACvF,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IAC1F,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IAClG,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IAC9E,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC9E,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IAEzF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CACV,KAAK,KAAK,KAAK;YACb,CAAC,CAAC,0DAA0D;YAC5D,CAAC,CAAC,2CAA2C,CAChD,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { AgentFlightSession, GitInfo, ToolAdapterResult } from "../types/index.js";
2
+ export interface BuildSessionRecordOptions {
3
+ repoRoot: string;
4
+ task: string;
5
+ now?: Date | undefined;
6
+ git: GitInfo;
7
+ packageManager: string | null;
8
+ repoSummary?: string | undefined;
9
+ verificationCommands?: string[] | undefined;
10
+ tools?: {
11
+ projscan: ToolAdapterResult;
12
+ agentloopkit: ToolAdapterResult;
13
+ } | undefined;
14
+ }
15
+ export type StartSessionOptions = BuildSessionRecordOptions;
16
+ export interface StartSessionResult {
17
+ session: AgentFlightSession;
18
+ sessionPath: string;
19
+ currentSessionPath: string;
20
+ handoffPath: string;
21
+ }
22
+ export declare function buildSessionRecord(options: BuildSessionRecordOptions): AgentFlightSession;
23
+ export declare function startSession(options: StartSessionOptions): Promise<StartSessionResult>;
24
+ export declare function createSessionId(now: Date, task: string): string;
25
+ export declare function slugify(value: string): string;
26
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAExF,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACvB,GAAG,EAAE,OAAO,CAAC;IACb,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,oBAAoB,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5C,KAAK,CAAC,EACF;QACE,QAAQ,EAAE,iBAAiB,CAAC;QAC5B,YAAY,EAAE,iBAAiB,CAAC;KACjC,GACD,SAAS,CAAC;CACf;AAED,MAAM,MAAM,mBAAmB,GAAG,yBAAyB,CAAC;AAE5D,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACrB;AAOD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,kBAAkB,CAuBzF;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAe5F;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ7C"}
@@ -0,0 +1,83 @@
1
+ import { basename } from "node:path";
2
+ import { writeJsonFileSafe, writeTextFileSafe } from "./fs-safe.js";
3
+ import { resolveAgentFlightPaths } from "./paths.js";
4
+ const unavailableTool = {
5
+ available: false,
6
+ warnings: ["Not inspected for this session."]
7
+ };
8
+ export function buildSessionRecord(options) {
9
+ const now = options.now ?? new Date();
10
+ const session = {
11
+ id: createSessionId(now, options.task),
12
+ task: {
13
+ title: options.task
14
+ },
15
+ startedAt: now.toISOString(),
16
+ repoRoot: options.repoRoot,
17
+ git: options.git,
18
+ packageManager: options.packageManager,
19
+ verificationCommands: options.verificationCommands ?? [],
20
+ tools: options.tools ?? {
21
+ projscan: unavailableTool,
22
+ agentloopkit: unavailableTool
23
+ }
24
+ };
25
+ if (options.repoSummary !== undefined) {
26
+ session.repoSummary = options.repoSummary;
27
+ }
28
+ return session;
29
+ }
30
+ export async function startSession(options) {
31
+ const session = buildSessionRecord(options);
32
+ const paths = resolveAgentFlightPaths(options.repoRoot);
33
+ const sessionPath = `${paths.sessions}/${session.id}.json`;
34
+ await writeJsonFileSafe(sessionPath, session);
35
+ await writeJsonFileSafe(paths.currentSession, session, { overwrite: true });
36
+ await writeTextFileSafe(paths.currentHandoff, renderInitialHandoff(session), { overwrite: true });
37
+ return {
38
+ session,
39
+ sessionPath,
40
+ currentSessionPath: paths.currentSession,
41
+ handoffPath: paths.currentHandoff
42
+ };
43
+ }
44
+ export function createSessionId(now, task) {
45
+ return `af-${formatDateForId(now)}-${slugify(task)}`;
46
+ }
47
+ export function slugify(value) {
48
+ const slug = value
49
+ .toLowerCase()
50
+ .replace(/[^a-z0-9]+/g, "-")
51
+ .replace(/^-+|-+$/g, "")
52
+ .slice(0, 64);
53
+ return slug.length > 0 ? slug : "session";
54
+ }
55
+ function formatDateForId(now) {
56
+ const iso = now.toISOString();
57
+ return `${iso.slice(0, 10).replaceAll("-", "")}-${iso.slice(11, 19).replaceAll(":", "")}`;
58
+ }
59
+ function renderInitialHandoff(session) {
60
+ const proof = session.verificationCommands.length
61
+ ? session.verificationCommands.map((command) => `- ${command}`).join("\n")
62
+ : "- No verification commands detected yet.";
63
+ return `# AgentFlight Handoff
64
+
65
+ ## Task
66
+ ${session.task.title}
67
+
68
+ ## Session
69
+ - ID: ${session.id}
70
+ - Project: ${basename(session.repoRoot)}
71
+ - Started: ${session.startedAt}
72
+ - Git branch: ${session.git.branch ?? "unknown"}
73
+ - Git commit: ${session.git.commit ?? "unknown"}
74
+ - Dirty at start: ${session.git.dirty ? "yes" : "no"}
75
+ - Package manager: ${session.packageManager ?? "unknown"}
76
+
77
+ ## Suggested proof
78
+ ${proof}
79
+
80
+ Now run your coding agent normally. Keep changes scoped and record proof before claiming completion.
81
+ `;
82
+ }
83
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export interface PackageJsonLike {
2
+ scripts?: Record<string, string>;
3
+ }
4
+ export declare function detectVerificationCommands(packageJson: PackageJsonLike): string[];
5
+ //# sourceMappingURL=verification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification.d.ts","sourceRoot":"","sources":["../../src/core/verification.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,eAAe,GAAG,MAAM,EAAE,CAUjF"}
@@ -0,0 +1,14 @@
1
+ export function detectVerificationCommands(packageJson) {
2
+ const scripts = packageJson.scripts ?? {};
3
+ const commands = [];
4
+ if (scripts.typecheck)
5
+ commands.push("npm run typecheck");
6
+ if (scripts.lint)
7
+ commands.push("npm run lint");
8
+ if (scripts.test)
9
+ commands.push("npm test");
10
+ if (scripts.build)
11
+ commands.push("npm run build");
12
+ return commands;
13
+ }
14
+ //# sourceMappingURL=verification.js.map