@netlify/axis 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. package/README.md +977 -0
  2. package/dist/adapters/base/acp-adapter.d.ts +44 -0
  3. package/dist/adapters/base/acp-adapter.d.ts.map +1 -0
  4. package/dist/adapters/base/acp-adapter.js +559 -0
  5. package/dist/adapters/base/acp-adapter.js.map +1 -0
  6. package/dist/adapters/base/agent-adapter.d.ts +132 -0
  7. package/dist/adapters/base/agent-adapter.d.ts.map +1 -0
  8. package/dist/adapters/base/agent-adapter.js +212 -0
  9. package/dist/adapters/base/agent-adapter.js.map +1 -0
  10. package/dist/adapters/claude-code.d.ts +3 -0
  11. package/dist/adapters/claude-code.d.ts.map +1 -0
  12. package/dist/adapters/claude-code.js +138 -0
  13. package/dist/adapters/claude-code.js.map +1 -0
  14. package/dist/adapters/claude-sdk.d.ts +11 -0
  15. package/dist/adapters/claude-sdk.d.ts.map +1 -0
  16. package/dist/adapters/claude-sdk.js +46 -0
  17. package/dist/adapters/claude-sdk.js.map +1 -0
  18. package/dist/adapters/codex.d.ts +3 -0
  19. package/dist/adapters/codex.d.ts.map +1 -0
  20. package/dist/adapters/codex.js +183 -0
  21. package/dist/adapters/codex.js.map +1 -0
  22. package/dist/adapters/gemini-acp.d.ts +11 -0
  23. package/dist/adapters/gemini-acp.d.ts.map +1 -0
  24. package/dist/adapters/gemini-acp.js +60 -0
  25. package/dist/adapters/gemini-acp.js.map +1 -0
  26. package/dist/adapters/gemini.d.ts +3 -0
  27. package/dist/adapters/gemini.d.ts.map +1 -0
  28. package/dist/adapters/gemini.js +222 -0
  29. package/dist/adapters/gemini.js.map +1 -0
  30. package/dist/adapters/goose.d.ts +3 -0
  31. package/dist/adapters/goose.d.ts.map +1 -0
  32. package/dist/adapters/goose.js +9 -0
  33. package/dist/adapters/goose.js.map +1 -0
  34. package/dist/adapters/registry.d.ts +7 -0
  35. package/dist/adapters/registry.d.ts.map +1 -0
  36. package/dist/adapters/registry.js +37 -0
  37. package/dist/adapters/registry.js.map +1 -0
  38. package/dist/adapters/utils/mcp.d.ts +23 -0
  39. package/dist/adapters/utils/mcp.d.ts.map +1 -0
  40. package/dist/adapters/utils/mcp.js +114 -0
  41. package/dist/adapters/utils/mcp.js.map +1 -0
  42. package/dist/adapters/utils/resolve.d.ts +20 -0
  43. package/dist/adapters/utils/resolve.d.ts.map +1 -0
  44. package/dist/adapters/utils/resolve.js +48 -0
  45. package/dist/adapters/utils/resolve.js.map +1 -0
  46. package/dist/adapters/utils/skills.d.ts +17 -0
  47. package/dist/adapters/utils/skills.d.ts.map +1 -0
  48. package/dist/adapters/utils/skills.js +52 -0
  49. package/dist/adapters/utils/skills.js.map +1 -0
  50. package/dist/adapters/utils/token-estimator.d.ts +21 -0
  51. package/dist/adapters/utils/token-estimator.d.ts.map +1 -0
  52. package/dist/adapters/utils/token-estimator.js +37 -0
  53. package/dist/adapters/utils/token-estimator.js.map +1 -0
  54. package/dist/baselines/diff.d.ts +9 -0
  55. package/dist/baselines/diff.d.ts.map +1 -0
  56. package/dist/baselines/diff.js +83 -0
  57. package/dist/baselines/diff.js.map +1 -0
  58. package/dist/baselines/index.d.ts +3 -0
  59. package/dist/baselines/index.d.ts.map +1 -0
  60. package/dist/baselines/index.js +3 -0
  61. package/dist/baselines/index.js.map +1 -0
  62. package/dist/baselines/store.d.ts +19 -0
  63. package/dist/baselines/store.d.ts.map +1 -0
  64. package/dist/baselines/store.js +104 -0
  65. package/dist/baselines/store.js.map +1 -0
  66. package/dist/cli.d.ts +3 -0
  67. package/dist/cli.d.ts.map +1 -0
  68. package/dist/cli.js +487 -0
  69. package/dist/cli.js.map +1 -0
  70. package/dist/config/loader.d.ts +8 -0
  71. package/dist/config/loader.d.ts.map +1 -0
  72. package/dist/config/loader.js +99 -0
  73. package/dist/config/loader.js.map +1 -0
  74. package/dist/config/validator.d.ts +11 -0
  75. package/dist/config/validator.d.ts.map +1 -0
  76. package/dist/config/validator.js +203 -0
  77. package/dist/config/validator.js.map +1 -0
  78. package/dist/docs-site/_astro/cli.DDWZtG0-.css +1 -0
  79. package/dist/docs-site/cli/index.html +18 -0
  80. package/dist/docs-site/configuration/index.html +121 -0
  81. package/dist/docs-site/content-assets.mjs +1 -0
  82. package/dist/docs-site/content-modules.mjs +1 -0
  83. package/dist/docs-site/data-store.json +9 -0
  84. package/dist/docs-site/index.html +69 -0
  85. package/dist/docs-site/quickstart/index.html +59 -0
  86. package/dist/docs-site/running/index.html +87 -0
  87. package/dist/docs-site/scoring/index.html +135 -0
  88. package/dist/index.d.ts +19 -0
  89. package/dist/index.d.ts.map +1 -0
  90. package/dist/index.js +15 -0
  91. package/dist/index.js.map +1 -0
  92. package/dist/report-ui/index.html +291 -0
  93. package/dist/report-ui/mock-data.json +298 -0
  94. package/dist/reports/html.d.ts +7 -0
  95. package/dist/reports/html.d.ts.map +1 -0
  96. package/dist/reports/html.js +27 -0
  97. package/dist/reports/html.js.map +1 -0
  98. package/dist/reports/reader.d.ts +21 -0
  99. package/dist/reports/reader.d.ts.map +1 -0
  100. package/dist/reports/reader.js +110 -0
  101. package/dist/reports/reader.js.map +1 -0
  102. package/dist/reports/writer.d.ts +14 -0
  103. package/dist/reports/writer.d.ts.map +1 -0
  104. package/dist/reports/writer.js +106 -0
  105. package/dist/reports/writer.js.map +1 -0
  106. package/dist/runner/lifecycle.d.ts +10 -0
  107. package/dist/runner/lifecycle.d.ts.map +1 -0
  108. package/dist/runner/lifecycle.js +58 -0
  109. package/dist/runner/lifecycle.js.map +1 -0
  110. package/dist/runner/runner.d.ts +34 -0
  111. package/dist/runner/runner.d.ts.map +1 -0
  112. package/dist/runner/runner.js +330 -0
  113. package/dist/runner/runner.js.map +1 -0
  114. package/dist/scoring/category-score.d.ts +52 -0
  115. package/dist/scoring/category-score.d.ts.map +1 -0
  116. package/dist/scoring/category-score.js +157 -0
  117. package/dist/scoring/category-score.js.map +1 -0
  118. package/dist/scoring/composite.d.ts +5 -0
  119. package/dist/scoring/composite.d.ts.map +1 -0
  120. package/dist/scoring/composite.js +24 -0
  121. package/dist/scoring/composite.js.map +1 -0
  122. package/dist/scoring/deep-eval.d.ts +25 -0
  123. package/dist/scoring/deep-eval.d.ts.map +1 -0
  124. package/dist/scoring/deep-eval.js +382 -0
  125. package/dist/scoring/deep-eval.js.map +1 -0
  126. package/dist/scoring/goal-achievement.d.ts +5 -0
  127. package/dist/scoring/goal-achievement.d.ts.map +1 -0
  128. package/dist/scoring/goal-achievement.js +241 -0
  129. package/dist/scoring/goal-achievement.js.map +1 -0
  130. package/dist/scoring/index.d.ts +22 -0
  131. package/dist/scoring/index.d.ts.map +1 -0
  132. package/dist/scoring/index.js +115 -0
  133. package/dist/scoring/index.js.map +1 -0
  134. package/dist/scoring/parse-json.d.ts +6 -0
  135. package/dist/scoring/parse-json.d.ts.map +1 -0
  136. package/dist/scoring/parse-json.js +18 -0
  137. package/dist/scoring/parse-json.js.map +1 -0
  138. package/dist/scoring/sparse-index.d.ts +15 -0
  139. package/dist/scoring/sparse-index.d.ts.map +1 -0
  140. package/dist/scoring/sparse-index.js +338 -0
  141. package/dist/scoring/sparse-index.js.map +1 -0
  142. package/dist/scoring/triage.d.ts +15 -0
  143. package/dist/scoring/triage.d.ts.map +1 -0
  144. package/dist/scoring/triage.js +204 -0
  145. package/dist/scoring/triage.js.map +1 -0
  146. package/dist/skills/resolver.d.ts +19 -0
  147. package/dist/skills/resolver.d.ts.map +1 -0
  148. package/dist/skills/resolver.js +95 -0
  149. package/dist/skills/resolver.js.map +1 -0
  150. package/dist/transcript/categorize.d.ts +24 -0
  151. package/dist/transcript/categorize.d.ts.map +1 -0
  152. package/dist/transcript/categorize.js +233 -0
  153. package/dist/transcript/categorize.js.map +1 -0
  154. package/dist/transcript/classify.d.ts +7 -0
  155. package/dist/transcript/classify.d.ts.map +1 -0
  156. package/dist/transcript/classify.js +32 -0
  157. package/dist/transcript/classify.js.map +1 -0
  158. package/dist/transcript/extract.d.ts +24 -0
  159. package/dist/transcript/extract.d.ts.map +1 -0
  160. package/dist/transcript/extract.js +266 -0
  161. package/dist/transcript/extract.js.map +1 -0
  162. package/dist/transcript/index.d.ts +3 -0
  163. package/dist/transcript/index.d.ts.map +1 -0
  164. package/dist/transcript/index.js +2 -0
  165. package/dist/transcript/index.js.map +1 -0
  166. package/dist/transcript/normalize.d.ts +15 -0
  167. package/dist/transcript/normalize.d.ts.map +1 -0
  168. package/dist/transcript/normalize.js +160 -0
  169. package/dist/transcript/normalize.js.map +1 -0
  170. package/dist/transcript/types.d.ts +92 -0
  171. package/dist/transcript/types.d.ts.map +1 -0
  172. package/dist/transcript/types.js +2 -0
  173. package/dist/transcript/types.js.map +1 -0
  174. package/dist/transcript/urls.d.ts +10 -0
  175. package/dist/transcript/urls.d.ts.map +1 -0
  176. package/dist/transcript/urls.js +31 -0
  177. package/dist/transcript/urls.js.map +1 -0
  178. package/dist/types/agent.d.ts +80 -0
  179. package/dist/types/agent.d.ts.map +1 -0
  180. package/dist/types/agent.js +2 -0
  181. package/dist/types/agent.js.map +1 -0
  182. package/dist/types/baseline.d.ts +65 -0
  183. package/dist/types/baseline.d.ts.map +1 -0
  184. package/dist/types/baseline.js +2 -0
  185. package/dist/types/baseline.js.map +1 -0
  186. package/dist/types/config.d.ts +76 -0
  187. package/dist/types/config.d.ts.map +1 -0
  188. package/dist/types/config.js +2 -0
  189. package/dist/types/config.js.map +1 -0
  190. package/dist/types/index.d.ts +8 -0
  191. package/dist/types/index.d.ts.map +1 -0
  192. package/dist/types/index.js +8 -0
  193. package/dist/types/index.js.map +1 -0
  194. package/dist/types/output.d.ts +70 -0
  195. package/dist/types/output.d.ts.map +1 -0
  196. package/dist/types/output.js +15 -0
  197. package/dist/types/output.js.map +1 -0
  198. package/dist/types/report.d.ts +37 -0
  199. package/dist/types/report.d.ts.map +1 -0
  200. package/dist/types/report.js +2 -0
  201. package/dist/types/report.js.map +1 -0
  202. package/dist/types/scenario.d.ts +23 -0
  203. package/dist/types/scenario.d.ts.map +1 -0
  204. package/dist/types/scenario.js +2 -0
  205. package/dist/types/scenario.js.map +1 -0
  206. package/dist/types/scoring.d.ts +176 -0
  207. package/dist/types/scoring.d.ts.map +1 -0
  208. package/dist/types/scoring.js +2 -0
  209. package/dist/types/scoring.js.map +1 -0
  210. package/dist/ui/AnimatedTokens.d.ts +29 -0
  211. package/dist/ui/AnimatedTokens.d.ts.map +1 -0
  212. package/dist/ui/AnimatedTokens.js +53 -0
  213. package/dist/ui/AnimatedTokens.js.map +1 -0
  214. package/dist/ui/App.d.ts +6 -0
  215. package/dist/ui/App.d.ts.map +1 -0
  216. package/dist/ui/App.js +16 -0
  217. package/dist/ui/App.js.map +1 -0
  218. package/dist/ui/LiveDuration.d.ts +20 -0
  219. package/dist/ui/LiveDuration.d.ts.map +1 -0
  220. package/dist/ui/LiveDuration.js +31 -0
  221. package/dist/ui/LiveDuration.js.map +1 -0
  222. package/dist/ui/LiveStatus.d.ts +7 -0
  223. package/dist/ui/LiveStatus.d.ts.map +1 -0
  224. package/dist/ui/LiveStatus.js +52 -0
  225. package/dist/ui/LiveStatus.js.map +1 -0
  226. package/dist/ui/format.d.ts +29 -0
  227. package/dist/ui/format.d.ts.map +1 -0
  228. package/dist/ui/format.js +514 -0
  229. package/dist/ui/format.js.map +1 -0
  230. package/package.json +65 -0
@@ -0,0 +1,114 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ /**
4
+ * Write .mcp.json for Claude Code (project-scoped, placed in workspace root).
5
+ * Claude Code auto-discovers this file when it starts in the workspace directory.
6
+ */
7
+ export function writeClaudeMcpConfig(workspace, servers) {
8
+ const mcpServers = {};
9
+ for (const [name, server] of Object.entries(servers)) {
10
+ if (server.type === "stdio") {
11
+ const entry = { command: server.command };
12
+ if (server.args?.length)
13
+ entry.args = server.args;
14
+ if (server.env && Object.keys(server.env).length > 0)
15
+ entry.env = server.env;
16
+ mcpServers[name] = entry;
17
+ }
18
+ else {
19
+ const entry = { type: "http", url: server.url };
20
+ if (server.headers && Object.keys(server.headers).length > 0)
21
+ entry.headers = server.headers;
22
+ mcpServers[name] = entry;
23
+ }
24
+ }
25
+ fs.writeFileSync(path.join(workspace, ".mcp.json"), JSON.stringify({ mcpServers }, null, 2) + "\n");
26
+ }
27
+ /**
28
+ * Write config.toml for Codex (placed in CODEX_HOME).
29
+ * Hand-generates TOML to avoid a library dependency.
30
+ */
31
+ export function writeCodexMcpConfig(codexHome, servers) {
32
+ const lines = [];
33
+ for (const [name, server] of Object.entries(servers)) {
34
+ lines.push(`[mcp_servers.${name}]`);
35
+ if (server.type === "stdio") {
36
+ lines.push(`command = ${tomlString(server.command)}`);
37
+ if (server.args?.length) {
38
+ lines.push(`args = [${server.args.map(tomlString).join(", ")}]`);
39
+ }
40
+ if (server.env && Object.keys(server.env).length > 0) {
41
+ lines.push("");
42
+ lines.push(`[mcp_servers.${name}.env]`);
43
+ for (const [k, v] of Object.entries(server.env)) {
44
+ lines.push(`${k} = ${tomlString(v)}`);
45
+ }
46
+ }
47
+ }
48
+ else {
49
+ lines.push(`type = "http"`);
50
+ lines.push(`url = ${tomlString(server.url)}`);
51
+ if (server.headers && Object.keys(server.headers).length > 0) {
52
+ lines.push("");
53
+ lines.push(`[mcp_servers.${name}.headers]`);
54
+ for (const [k, v] of Object.entries(server.headers)) {
55
+ lines.push(`${k} = ${tomlString(v)}`);
56
+ }
57
+ }
58
+ }
59
+ lines.push("");
60
+ }
61
+ fs.writeFileSync(path.join(codexHome, "config.toml"), lines.join("\n"));
62
+ }
63
+ /**
64
+ * Write settings.json for Gemini CLI (placed in GEMINI_CLI_HOME).
65
+ * Gemini auto-discovers this file from its home directory.
66
+ *
67
+ * Always writes context discovery settings to prevent Gemini from
68
+ * scanning the workspace directory tree on startup — AXIS workspaces
69
+ * are ephemeral temp dirs with no meaningful project structure.
70
+ *
71
+ * MCP servers are merged in when provided.
72
+ */
73
+ export function writeGeminiSettings(geminiHome, servers) {
74
+ const settings = {
75
+ // Prevent workspace scanning — AXIS workspaces are ephemeral and empty.
76
+ // Without this, Gemini explores the directory tree before addressing the prompt.
77
+ context: {
78
+ discoveryMaxDirs: 0,
79
+ memoryBoundaryMarkers: [],
80
+ },
81
+ };
82
+ if (servers && Object.keys(servers).length > 0) {
83
+ const mcpServers = {};
84
+ for (const [name, server] of Object.entries(servers)) {
85
+ if (server.type === "stdio") {
86
+ const entry = { command: server.command };
87
+ if (server.args?.length)
88
+ entry.args = server.args;
89
+ if (server.env && Object.keys(server.env).length > 0)
90
+ entry.env = server.env;
91
+ mcpServers[name] = entry;
92
+ }
93
+ else {
94
+ const entry = { type: "http", url: server.url };
95
+ if (server.headers && Object.keys(server.headers).length > 0)
96
+ entry.headers = server.headers;
97
+ mcpServers[name] = entry;
98
+ }
99
+ }
100
+ settings.mcpServers = mcpServers;
101
+ }
102
+ fs.writeFileSync(path.join(geminiHome, "settings.json"), JSON.stringify(settings, null, 2) + "\n");
103
+ }
104
+ /** Escape a string for TOML (basic string with backslash escaping). */
105
+ function tomlString(value) {
106
+ const escaped = value
107
+ .replace(/\\/g, "\\\\")
108
+ .replace(/"/g, '\\"')
109
+ .replace(/\n/g, "\\n")
110
+ .replace(/\r/g, "\\r")
111
+ .replace(/\t/g, "\\t");
112
+ return `"${escaped}"`;
113
+ }
114
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../src/adapters/utils/mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export interface ResolvedCommand {
2
+ /** The binary to pass to spawn() — either the CLI name or "npx". */
3
+ command: string;
4
+ /** Args to prepend before the adapter's own args — empty for direct, ["--yes", "<pkg>"] for npx. */
5
+ prefixArgs: string[];
6
+ }
7
+ /**
8
+ * Check if a CLI command is available on PATH.
9
+ * Returns true if `<cmd> --version` exits with code 0, false otherwise.
10
+ */
11
+ export declare function isCommandAvailable(cmd: string): Promise<boolean>;
12
+ /**
13
+ * Resolve how to invoke a CLI adapter.
14
+ *
15
+ * 1. Try the bare command (fast path, zero overhead).
16
+ * 2. If not found, fall back to npx with the adapter's npm package.
17
+ * 3. If npx is also not available, throw with install instructions.
18
+ */
19
+ export declare function resolveCommand(adapterName: string, cliCommand: string): Promise<ResolvedCommand>;
20
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../src/adapters/utils/resolve.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,oGAAoG;IACpG,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAWD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQhE;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAoBtG"}
@@ -0,0 +1,48 @@
1
+ import { spawn } from "node:child_process";
2
+ /** Map of adapter names to their npm package names for npx fallback. */
3
+ const NPX_PACKAGES = {
4
+ "claude-sdk": "@agentclientprotocol/claude-agent-acp",
5
+ "claude-code": "@anthropic-ai/claude-code",
6
+ codex: "@openai/codex",
7
+ gemini: "@google/gemini-cli",
8
+ "gemini-acp": "@google/gemini-cli",
9
+ };
10
+ /**
11
+ * Check if a CLI command is available on PATH.
12
+ * Returns true if `<cmd> --version` exits with code 0, false otherwise.
13
+ */
14
+ export function isCommandAvailable(cmd) {
15
+ return new Promise((resolve) => {
16
+ const child = spawn(cmd, ["--version"], {
17
+ stdio: ["ignore", "ignore", "ignore"],
18
+ });
19
+ child.on("error", () => resolve(false));
20
+ child.on("close", (code) => resolve(code === 0));
21
+ });
22
+ }
23
+ /**
24
+ * Resolve how to invoke a CLI adapter.
25
+ *
26
+ * 1. Try the bare command (fast path, zero overhead).
27
+ * 2. If not found, fall back to npx with the adapter's npm package.
28
+ * 3. If npx is also not available, throw with install instructions.
29
+ */
30
+ export async function resolveCommand(adapterName, cliCommand) {
31
+ // Fast path: binary exists on PATH
32
+ if (await isCommandAvailable(cliCommand)) {
33
+ return { command: cliCommand, prefixArgs: [] };
34
+ }
35
+ // Fallback: npx
36
+ const pkg = NPX_PACKAGES[adapterName];
37
+ if (!pkg) {
38
+ throw new Error(`"${cliCommand}" not found on PATH. Install it globally or add it to your PATH.`);
39
+ }
40
+ if (!(await isCommandAvailable("npx"))) {
41
+ throw new Error(`"${cliCommand}" not found and npx is not available. Install it with: npm install -g ${pkg}`);
42
+ }
43
+ return {
44
+ command: "npx",
45
+ prefixArgs: ["--yes", pkg],
46
+ };
47
+ }
48
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/adapters/utils/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAS3C,wEAAwE;AACxE,MAAM,YAAY,GAA2B;IAC3C,YAAY,EAAE,uCAAuC;IACrD,aAAa,EAAE,2BAA2B;IAC1C,KAAK,EAAE,eAAe;IACtB,MAAM,EAAE,oBAAoB;IAC5B,YAAY,EAAE,oBAAoB;CACnC,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,EAAE;YACtC,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;SACtC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACxC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,WAAmB,EAAE,UAAkB;IAC1E,mCAAmC;IACnC,IAAI,MAAM,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC;QACzC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IACjD,CAAC;IAED,gBAAgB;IAChB,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IACtC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,IAAI,UAAU,kEAAkE,CAAC,CAAC;IACpG,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,IAAI,UAAU,yEAAyE,GAAG,EAAE,CAAC,CAAC;IAChH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC;KAC3B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { ResolvedSkill } from "../../types/config.js";
2
+ /**
3
+ * Write skills for Claude Code.
4
+ * Copies each skill directory to {workspace}/.claude/skills/{name}/
5
+ */
6
+ export declare function writeClaudeSkills(workspace: string, skills: ResolvedSkill[]): void;
7
+ /**
8
+ * Write skills for Codex.
9
+ * Copies each skill directory to {workspace}/.agents/skills/{name}/
10
+ */
11
+ export declare function writeCodexSkills(workspace: string, skills: ResolvedSkill[]): void;
12
+ /**
13
+ * Write skills for Gemini CLI.
14
+ * Copies each skill directory to {geminiHome}/skills/{name}/
15
+ */
16
+ export declare function writeGeminiSkills(geminiHome: string, skills: ResolvedSkill[]): void;
17
+ //# sourceMappingURL=skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../../src/adapters/utils/skills.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAK3D;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAKlF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAKjF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAKnF"}
@@ -0,0 +1,52 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ /** Directories to skip when copying skill directories. */
4
+ const SKIP_DIRS = new Set([".git", ".github", "node_modules"]);
5
+ /**
6
+ * Write skills for Claude Code.
7
+ * Copies each skill directory to {workspace}/.claude/skills/{name}/
8
+ */
9
+ export function writeClaudeSkills(workspace, skills) {
10
+ for (const skill of skills) {
11
+ const target = path.join(workspace, ".claude", "skills", skill.name);
12
+ copyDirRecursive(skill.path, target);
13
+ }
14
+ }
15
+ /**
16
+ * Write skills for Codex.
17
+ * Copies each skill directory to {workspace}/.agents/skills/{name}/
18
+ */
19
+ export function writeCodexSkills(workspace, skills) {
20
+ for (const skill of skills) {
21
+ const target = path.join(workspace, ".agents", "skills", skill.name);
22
+ copyDirRecursive(skill.path, target);
23
+ }
24
+ }
25
+ /**
26
+ * Write skills for Gemini CLI.
27
+ * Copies each skill directory to {geminiHome}/skills/{name}/
28
+ */
29
+ export function writeGeminiSkills(geminiHome, skills) {
30
+ for (const skill of skills) {
31
+ const target = path.join(geminiHome, "skills", skill.name);
32
+ copyDirRecursive(skill.path, target);
33
+ }
34
+ }
35
+ /** Recursively copy a directory, skipping .git, .github, and node_modules. */
36
+ function copyDirRecursive(src, dest) {
37
+ fs.mkdirSync(dest, { recursive: true });
38
+ const entries = fs.readdirSync(src, { withFileTypes: true });
39
+ for (const entry of entries) {
40
+ const srcPath = path.join(src, entry.name);
41
+ const destPath = path.join(dest, entry.name);
42
+ if (entry.isDirectory()) {
43
+ if (SKIP_DIRS.has(entry.name))
44
+ continue;
45
+ copyDirRecursive(srcPath, destPath);
46
+ }
47
+ else {
48
+ fs.copyFileSync(srcPath, destPath);
49
+ }
50
+ }
51
+ }
52
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/adapters/utils/skills.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,0DAA0D;AAC1D,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;AAE/D;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAiB,EAAE,MAAuB;IAC1E,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACrE,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAiB,EAAE,MAAuB;IACzE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACrE,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAkB,EAAE,MAAuB;IAC3E,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3D,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,SAAS,gBAAgB,CAAC,GAAW,EAAE,IAAY;IACjD,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAE7C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,SAAS;YACxC,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Conservative, streaming token estimator used to drive the live UI counter.
3
+ *
4
+ * Typical LLM tokenizers produce ~1 token per 4 characters of English text. We
5
+ * deliberately use `chars / 5` so the estimate stays below the true count —
6
+ * the real `tokenUsage` (which includes input and cache tokens we never see on
7
+ * the wire) always exceeds this running estimate, letting the UI smoothly
8
+ * count up to the final value without ever reversing.
9
+ *
10
+ * `onProgress` is throttled to only fire when the estimate has grown by at
11
+ * least `MIN_DELTA` tokens, which avoids flooding `onJobUpdate` on very busy
12
+ * streams.
13
+ */
14
+ export interface TokenEstimator {
15
+ /** Append assistant text. Triggers `onProgress` when the estimate grows enough. */
16
+ addText(text: string): void;
17
+ /** Current conservative token estimate. */
18
+ current(): number;
19
+ }
20
+ export declare function createTokenEstimator(onProgress?: (estimatedTokens: number) => void): TokenEstimator;
21
+ //# sourceMappingURL=token-estimator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-estimator.d.ts","sourceRoot":"","sources":["../../../src/adapters/utils/token-estimator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAQH,MAAM,WAAW,cAAc;IAC7B,mFAAmF;IACnF,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,2CAA2C;IAC3C,OAAO,IAAI,MAAM,CAAC;CACnB;AAED,wBAAgB,oBAAoB,CAAC,UAAU,CAAC,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,IAAI,GAAG,cAAc,CAkBnG"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Conservative, streaming token estimator used to drive the live UI counter.
3
+ *
4
+ * Typical LLM tokenizers produce ~1 token per 4 characters of English text. We
5
+ * deliberately use `chars / 5` so the estimate stays below the true count —
6
+ * the real `tokenUsage` (which includes input and cache tokens we never see on
7
+ * the wire) always exceeds this running estimate, letting the UI smoothly
8
+ * count up to the final value without ever reversing.
9
+ *
10
+ * `onProgress` is throttled to only fire when the estimate has grown by at
11
+ * least `MIN_DELTA` tokens, which avoids flooding `onJobUpdate` on very busy
12
+ * streams.
13
+ */
14
+ /** Characters per estimated token. Intentionally higher than the real ratio. */
15
+ const CHARS_PER_TOKEN = 5;
16
+ /** Minimum token delta before emitting a progress update. */
17
+ const MIN_DELTA = 5;
18
+ export function createTokenEstimator(onProgress) {
19
+ let chars = 0;
20
+ let lastEmitted = 0;
21
+ return {
22
+ addText(text) {
23
+ if (!text)
24
+ return;
25
+ chars += text.length;
26
+ const estimate = Math.ceil(chars / CHARS_PER_TOKEN);
27
+ if (estimate - lastEmitted >= MIN_DELTA) {
28
+ lastEmitted = estimate;
29
+ onProgress?.(estimate);
30
+ }
31
+ },
32
+ current() {
33
+ return Math.ceil(chars / CHARS_PER_TOKEN);
34
+ },
35
+ };
36
+ }
37
+ //# sourceMappingURL=token-estimator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-estimator.js","sourceRoot":"","sources":["../../../src/adapters/utils/token-estimator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,gFAAgF;AAChF,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B,6DAA6D;AAC7D,MAAM,SAAS,GAAG,CAAC,CAAC;AASpB,MAAM,UAAU,oBAAoB,CAAC,UAA8C;IACjF,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,OAAO;QACL,OAAO,CAAC,IAAY;YAClB,IAAI,CAAC,IAAI;gBAAE,OAAO;YAClB,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC;YACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC,CAAC;YACpD,IAAI,QAAQ,GAAG,WAAW,IAAI,SAAS,EAAE,CAAC;gBACxC,WAAW,GAAG,QAAQ,CAAC;gBACvB,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QACD,OAAO;YACL,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC,CAAC;QAC5C,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Baseline, BaselineDiff } from "../types/baseline.js";
2
+ import type { ReportManifest } from "../types/report.js";
3
+ /**
4
+ * Compare a report against a baseline.
5
+ * Only scenarios×agents present in BOTH baseline and report are compared.
6
+ * Scenarios in report but not baseline are counted as "new" (informational).
7
+ */
8
+ export declare function diffBaseline(baseline: Baseline, report: ReportManifest): BaselineDiff;
9
+ //# sourceMappingURL=diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/baselines/diff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAqB,MAAM,sBAAsB,CAAC;AACtF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAKzD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,GAAG,YAAY,CA+ErF"}
@@ -0,0 +1,83 @@
1
+ /** Noise tolerance: deltas within this range are treated as unchanged. */
2
+ const NOISE_THRESHOLD = 1;
3
+ /**
4
+ * Compare a report against a baseline.
5
+ * Only scenarios×agents present in BOTH baseline and report are compared.
6
+ * Scenarios in report but not baseline are counted as "new" (informational).
7
+ */
8
+ export function diffBaseline(baseline, report) {
9
+ const entries = [];
10
+ const newScenarioKeys = new Set();
11
+ for (const result of report.results) {
12
+ // Skip unscored or failed results
13
+ if (!result.score || result.error)
14
+ continue;
15
+ const baselineScenario = baseline.results[result.scenarioKey];
16
+ if (!baselineScenario) {
17
+ newScenarioKeys.add(result.scenarioKey);
18
+ continue;
19
+ }
20
+ const baselineEntry = baselineScenario[result.agentName];
21
+ if (!baselineEntry) {
22
+ // Agent not in baseline for this scenario — treat as new
23
+ newScenarioKeys.add(result.scenarioKey);
24
+ continue;
25
+ }
26
+ const delta = result.score.axisScore - baselineEntry.axisScore;
27
+ entries.push({
28
+ scenarioKey: result.scenarioKey,
29
+ agentName: result.agentName,
30
+ baseline: baselineEntry.axisScore,
31
+ current: result.score.axisScore,
32
+ delta,
33
+ categories: {
34
+ goalAchievement: {
35
+ baseline: baselineEntry.goalAchievement,
36
+ current: result.score.goalAchievement.score,
37
+ delta: result.score.goalAchievement.score - baselineEntry.goalAchievement,
38
+ },
39
+ environment: {
40
+ baseline: baselineEntry.environment,
41
+ current: result.score.environment.score,
42
+ delta: result.score.environment.score - baselineEntry.environment,
43
+ },
44
+ service: {
45
+ baseline: baselineEntry.service,
46
+ current: result.score.service.score,
47
+ delta: result.score.service.score - baselineEntry.service,
48
+ },
49
+ agent: {
50
+ baseline: baselineEntry.agent,
51
+ current: result.score.agent.score,
52
+ delta: result.score.agent.score - baselineEntry.agent,
53
+ },
54
+ },
55
+ });
56
+ }
57
+ let improved = 0;
58
+ let regressed = 0;
59
+ let unchanged = 0;
60
+ for (const entry of entries) {
61
+ if (Math.abs(entry.delta) <= NOISE_THRESHOLD) {
62
+ unchanged++;
63
+ }
64
+ else if (entry.delta > 0) {
65
+ improved++;
66
+ }
67
+ else {
68
+ regressed++;
69
+ }
70
+ }
71
+ return {
72
+ baselineName: baseline.name,
73
+ reportId: report.reportId,
74
+ entries,
75
+ summary: {
76
+ improved,
77
+ regressed,
78
+ unchanged,
79
+ newScenarios: newScenarioKeys.size,
80
+ },
81
+ };
82
+ }
83
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/baselines/diff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { setBaseline, readBaseline, listBaselines, deleteBaseline, DEFAULT_BASELINE_NAME } from "./store.js";
2
+ export { diffBaseline } from "./diff.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/baselines/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAC7G,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { setBaseline, readBaseline, listBaselines, deleteBaseline, DEFAULT_BASELINE_NAME } from "./store.js";
2
+ export { diffBaseline } from "./diff.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/baselines/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAC7G,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { Baseline } from "../types/baseline.js";
2
+ import type { ReportManifest } from "../types/report.js";
3
+ /** Default baseline name used when no name is specified. */
4
+ export declare const DEFAULT_BASELINE_NAME = "default";
5
+ export declare function validateBaselineName(name: string): void;
6
+ /**
7
+ * Set (create or merge) a baseline from a report manifest.
8
+ * Only scored, non-failed results are included.
9
+ * Existing entries for scenarios not in this report are preserved.
10
+ * If `name` is omitted, uses the default baseline.
11
+ */
12
+ export declare function setBaseline(configDir: string, report: ReportManifest, name?: string): Baseline;
13
+ /** Read a baseline by name. Returns null if not found. Defaults to the default baseline. */
14
+ export declare function readBaseline(configDir: string, name?: string): Baseline | null;
15
+ /** List all baselines, sorted by updatedAt (newest first). */
16
+ export declare function listBaselines(configDir: string): Baseline[];
17
+ /** Delete a baseline. Returns true if it existed. Defaults to the default baseline. */
18
+ export declare function deleteBaseline(configDir: string, name?: string): boolean;
19
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/baselines/store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAKzD,4DAA4D;AAC5D,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAE/C,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAOvD;AAUD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,GAAE,MAA8B,GAAG,QAAQ,CAgDrH;AAED,4FAA4F;AAC5F,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,GAAE,MAA8B,GAAG,QAAQ,GAAG,IAAI,CAQrG;AAED,8DAA8D;AAC9D,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,EAAE,CAkB3D;AAED,uFAAuF;AACvF,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,GAAE,MAA8B,GAAG,OAAO,CAQ/F"}
@@ -0,0 +1,104 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ const BASELINE_NAME_RE = /^[a-zA-Z0-9_-]+$/;
4
+ const MAX_NAME_LENGTH = 64;
5
+ /** Default baseline name used when no name is specified. */
6
+ export const DEFAULT_BASELINE_NAME = "default";
7
+ export function validateBaselineName(name) {
8
+ if (!name || name.length > MAX_NAME_LENGTH || !BASELINE_NAME_RE.test(name)) {
9
+ throw new Error(`Invalid baseline name "${name}". ` +
10
+ `Names must be 1-${MAX_NAME_LENGTH} characters using only letters, numbers, hyphens, and underscores.`);
11
+ }
12
+ }
13
+ function baselinesDir(configDir) {
14
+ return path.join(configDir, ".axis", "baselines");
15
+ }
16
+ function baselinePath(configDir, name) {
17
+ return path.join(baselinesDir(configDir), `${name}.json`);
18
+ }
19
+ /**
20
+ * Set (create or merge) a baseline from a report manifest.
21
+ * Only scored, non-failed results are included.
22
+ * Existing entries for scenarios not in this report are preserved.
23
+ * If `name` is omitted, uses the default baseline.
24
+ */
25
+ export function setBaseline(configDir, report, name = DEFAULT_BASELINE_NAME) {
26
+ validateBaselineName(name);
27
+ const now = new Date().toISOString();
28
+ const existing = readBaseline(configDir, name);
29
+ const baseline = existing ?? {
30
+ name,
31
+ createdAt: now,
32
+ updatedAt: now,
33
+ results: {},
34
+ };
35
+ let merged = 0;
36
+ for (const result of report.results) {
37
+ // Skip unscored or failed results
38
+ if (!result.score || result.error)
39
+ continue;
40
+ const entry = {
41
+ axisScore: result.score.axisScore,
42
+ goalAchievement: result.score.goalAchievement.score,
43
+ environment: result.score.environment.score,
44
+ service: result.score.service.score,
45
+ agent: result.score.agent.score,
46
+ durationMs: result.durationMs,
47
+ tokens: (result.tokenUsage?.input ?? 0) + (result.tokenUsage?.output ?? 0) + (result.tokenUsage?.cacheReadInput ?? 0),
48
+ fromReportId: report.reportId,
49
+ timestamp: report.timestamp,
50
+ };
51
+ if (!baseline.results[result.scenarioKey]) {
52
+ baseline.results[result.scenarioKey] = {};
53
+ }
54
+ baseline.results[result.scenarioKey][result.agentName] = entry;
55
+ merged++;
56
+ }
57
+ // Only write if we actually merged results (or created a new baseline)
58
+ if (merged > 0 || !existing) {
59
+ baseline.updatedAt = now;
60
+ const dir = baselinesDir(configDir);
61
+ fs.mkdirSync(dir, { recursive: true });
62
+ const filePath = baselinePath(configDir, name);
63
+ fs.writeFileSync(filePath, JSON.stringify(baseline, null, 2) + "\n");
64
+ }
65
+ return baseline;
66
+ }
67
+ /** Read a baseline by name. Returns null if not found. Defaults to the default baseline. */
68
+ export function readBaseline(configDir, name = DEFAULT_BASELINE_NAME) {
69
+ validateBaselineName(name);
70
+ const filePath = baselinePath(configDir, name);
71
+ if (!fs.existsSync(filePath))
72
+ return null;
73
+ const data = JSON.parse(fs.readFileSync(filePath, "utf-8"));
74
+ return data;
75
+ }
76
+ /** List all baselines, sorted by updatedAt (newest first). */
77
+ export function listBaselines(configDir) {
78
+ const dir = baselinesDir(configDir);
79
+ if (!fs.existsSync(dir))
80
+ return [];
81
+ const files = fs.readdirSync(dir).filter((f) => f.endsWith(".json"));
82
+ const baselines = [];
83
+ for (const file of files) {
84
+ try {
85
+ const data = JSON.parse(fs.readFileSync(path.join(dir, file), "utf-8"));
86
+ baselines.push(data);
87
+ }
88
+ catch {
89
+ // Skip corrupted files
90
+ }
91
+ }
92
+ baselines.sort((a, b) => b.updatedAt.localeCompare(a.updatedAt));
93
+ return baselines;
94
+ }
95
+ /** Delete a baseline. Returns true if it existed. Defaults to the default baseline. */
96
+ export function deleteBaseline(configDir, name = DEFAULT_BASELINE_NAME) {
97
+ validateBaselineName(name);
98
+ const filePath = baselinePath(configDir, name);
99
+ if (!fs.existsSync(filePath))
100
+ return false;
101
+ fs.unlinkSync(filePath);
102
+ return true;
103
+ }
104
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/baselines/store.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}