axiom 0.46.1 → 0.48.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/bin.js +10 -21
- package/dist/bin.js.map +1 -1
- package/dist/{chunk-5VYTOAMX.js → chunk-2XPPXCZ6.js} +5 -20
- package/dist/{chunk-5VYTOAMX.js.map → chunk-2XPPXCZ6.js.map} +1 -1
- package/dist/{chunk-T4FBJ252.js → chunk-3VKWOZAQ.js} +2 -19
- package/dist/chunk-3VKWOZAQ.js.map +1 -0
- package/dist/{chunk-PRTN7TFT.js → chunk-4TKUTT24.js} +1 -7
- package/dist/{chunk-PRTN7TFT.js.map → chunk-4TKUTT24.js.map} +1 -1
- package/dist/{chunk-EQPNZ33J.js → chunk-73F2PMAH.js} +2 -7
- package/dist/chunk-73F2PMAH.js.map +1 -0
- package/dist/{chunk-J4EMMBGG.js → chunk-FGLJO4BD.js} +3 -7
- package/dist/chunk-FGLJO4BD.js.map +1 -0
- package/dist/{chunk-CLH5OLB6.js → chunk-FWPCBQBZ.js} +3 -7
- package/dist/{chunk-CLH5OLB6.js.map → chunk-FWPCBQBZ.js.map} +1 -1
- package/dist/{chunk-2ZOTV5UO.js → chunk-GLBE32GY.js} +14 -43
- package/dist/chunk-GLBE32GY.js.map +1 -0
- package/dist/{chunk-S65FSMB3.js → chunk-ISSDOC43.js} +1 -6
- package/dist/{chunk-S65FSMB3.js.map → chunk-ISSDOC43.js.map} +1 -1
- package/dist/{chunk-7BZLDNJ6.js → chunk-K3QLV6H6.js} +24 -70
- package/dist/chunk-K3QLV6H6.js.map +1 -0
- package/dist/{chunk-4VNFFUM5.js → chunk-KEXKKQVW.js} +2 -20
- package/dist/{chunk-X2LH7XLM.js → chunk-MM5FFQJT.js} +1 -6
- package/dist/{chunk-X2LH7XLM.js.map → chunk-MM5FFQJT.js.map} +1 -1
- package/dist/{chunk-ABKGUI3F.js → chunk-OFLP2IHA.js} +5 -10
- package/dist/chunk-OFLP2IHA.js.map +1 -0
- package/dist/{chunk-SJE2BW6S.js → chunk-XUPVDNRV.js} +3 -7
- package/dist/{chunk-SJE2BW6S.js.map → chunk-XUPVDNRV.js.map} +1 -1
- package/dist/{chunk-4J5TYBER.js → chunk-XVXJZJJN.js} +10 -17
- package/dist/chunk-XVXJZJJN.js.map +1 -0
- package/dist/config.js +3 -8
- package/dist/config.js.map +1 -1
- package/dist/docs/README.md +13 -0
- package/dist/docs/config/README.md +19 -0
- package/dist/docs/config/functions/defineConfig.md +41 -0
- package/dist/docs/config/interfaces/AxiomConfig.md +139 -0
- package/dist/docs/config/type-aliases/AxiomEvalInstrumentationHook.md +34 -0
- package/dist/docs/evals/README.md +29 -0
- package/dist/docs/evals/classes/AxiomReporter.md +153 -0
- package/dist/docs/evals/functions/Eval.md +80 -0
- package/dist/docs/evals/interfaces/EvalBuilder.md +114 -0
- package/dist/docs/evals/interfaces/EvalContextData.md +65 -0
- package/dist/docs/evals/online/README.md +19 -0
- package/dist/docs/evals/online/functions/onlineEval.md +95 -0
- package/dist/docs/evals/online/type-aliases/OnlineEvalParams.md +77 -0
- package/dist/docs/evals/online/type-aliases/OnlineEvalScorerEntry.md +23 -0
- package/dist/docs/evals/online/type-aliases/OnlineEvalScorerInput.md +23 -0
- package/dist/docs/evals/online/type-aliases/SampledOnlineEvalScorer.md +35 -0
- package/dist/docs/evals/online/type-aliases/ScorerSampling.md +21 -0
- package/dist/docs/evals/type-aliases/Case.md +89 -0
- package/dist/docs/evals/type-aliases/Chat.md +69 -0
- package/dist/docs/evals/type-aliases/EvalParams.md +97 -0
- package/dist/docs/evals/type-aliases/EvalTask.md +58 -0
- package/dist/docs/evals/type-aliases/Evaluation.md +131 -0
- package/dist/docs/evals/type-aliases/Task.md +45 -0
- package/dist/docs/feedback/README.md +26 -0
- package/dist/docs/feedback/functions/createFeedbackClient.md +35 -0
- package/dist/docs/feedback/type-aliases/FeedbackClient.md +19 -0
- package/dist/docs/feedback/type-aliases/FeedbackConfig.md +45 -0
- package/dist/docs/feedback/type-aliases/FeedbackErrorContext.md +21 -0
- package/dist/docs/feedback/type-aliases/FeedbackEvent.md +11 -0
- package/dist/docs/feedback/type-aliases/FeedbackInput.md +11 -0
- package/dist/docs/feedback/type-aliases/FeedbackLinks.md +59 -0
- package/dist/docs/feedback/type-aliases/FeedbackSettings.md +29 -0
- package/dist/docs/feedback/type-aliases/SendFeedbackFn.md +25 -0
- package/dist/docs/feedback/variables/Feedback.md +155 -0
- package/dist/docs/index/README.md +51 -0
- package/dist/docs/index/functions/axiomAIMiddleware.md +61 -0
- package/dist/docs/index/functions/axiomAIMiddlewareV1.md +15 -0
- package/dist/docs/index/functions/axiomAIMiddlewareV2.md +15 -0
- package/dist/docs/index/functions/axiomAIMiddlewareV3.md +15 -0
- package/dist/docs/index/functions/createAppScope.md +73 -0
- package/dist/docs/index/functions/experimental_parse.md +37 -0
- package/dist/docs/index/functions/getGlobalTracer.md +16 -0
- package/dist/docs/index/functions/initAxiomAI.md +35 -0
- package/dist/docs/index/functions/resetAxiomAI.md +15 -0
- package/dist/docs/index/functions/withSpan.md +41 -0
- package/dist/docs/index/functions/wrapAISDKModel.md +33 -0
- package/dist/docs/index/functions/wrapTool.md +37 -0
- package/dist/docs/index/functions/wrapTools.md +31 -0
- package/dist/docs/index/interfaces/AxiomTelemetryConfig.md +7 -0
- package/dist/docs/index/interfaces/experimental_AxiomPromptMetadata.md +53 -0
- package/dist/docs/index/interfaces/experimental_ParsedMessage.md +83 -0
- package/dist/docs/index/type-aliases/AxiomAIRedactionPolicy.md +21 -0
- package/dist/docs/index/type-aliases/WithSpanOptions.md +35 -0
- package/dist/docs/index/type-aliases/experimental_InferContext.md +19 -0
- package/dist/docs/index/type-aliases/experimental_InferSchema.md +17 -0
- package/dist/docs/index/type-aliases/experimental_ParsedMessagesArray.md +32 -0
- package/dist/docs/index/type-aliases/experimental_Prompt.md +90 -0
- package/dist/docs/index/type-aliases/experimental_TSchema.md +21 -0
- package/dist/docs/index/variables/RedactionPolicy.md +41 -0
- package/dist/docs/index/variables/experimental_Type.md +263 -0
- package/dist/docs/index/variables/onlineEval.md +13 -0
- package/dist/evals/custom-runner.js +5 -7
- package/dist/evals/custom-runner.js.map +1 -1
- package/dist/evals/online.d.ts +2 -2
- package/dist/evals/online.js +6 -11
- package/dist/evals/online.js.map +1 -1
- package/dist/evals.d.ts +3 -8
- package/dist/evals.js +14 -44
- package/dist/evals.js.map +1 -1
- package/dist/{handlebars-AIP3BZD5.js → handlebars-LMQRDB6O.js} +3 -49
- package/dist/{handlebars-AIP3BZD5.js.map → handlebars-LMQRDB6O.js.map} +1 -1
- package/dist/index.d.ts +3 -8
- package/dist/index.js +17 -28
- package/dist/index.js.map +1 -1
- package/dist/{name-validation.d-7RgcKR9Z.d.cts → name-validation.d-BKPGh6r3.d.ts} +2 -2
- package/dist/{run-vitest-2Z3UD5FV.js → run-vitest-SXLVVZVU.js} +19 -15
- package/dist/run-vitest-SXLVVZVU.js.map +1 -0
- package/dist/{evals → scorers}/aggregations.js +2 -2
- package/dist/{evals → scorers}/scorers.d.ts +3 -3
- package/dist/{chunk-5SARKRYI.js → scorers/scorers.js} +6 -9
- package/dist/scorers/scorers.js.map +1 -0
- package/dist/{token-XOW2YWKA.js → token-VMQNN6SC.js} +4 -6
- package/dist/{token-XOW2YWKA.js.map → token-VMQNN6SC.js.map} +1 -1
- package/dist/token-util-FVSEGA3I.js +6 -0
- package/dist/token-util-FVSEGA3I.js.map +1 -0
- package/package.json +23 -62
- package/dist/app-scope-BgNUnFZY.d.cts +0 -127
- package/dist/bin.cjs +0 -3317
- package/dist/bin.cjs.map +0 -1
- package/dist/bin.d.cts +0 -6
- package/dist/chunk-2ZOTV5UO.js.map +0 -1
- package/dist/chunk-4J5TYBER.js.map +0 -1
- package/dist/chunk-4VNFFUM5.js.map +0 -1
- package/dist/chunk-5SARKRYI.js.map +0 -1
- package/dist/chunk-7BZLDNJ6.js.map +0 -1
- package/dist/chunk-ABKGUI3F.js.map +0 -1
- package/dist/chunk-EQPNZ33J.js.map +0 -1
- package/dist/chunk-HCJKRSW4.js +0 -28
- package/dist/chunk-HCJKRSW4.js.map +0 -1
- package/dist/chunk-J4EMMBGG.js.map +0 -1
- package/dist/chunk-T4FBJ252.js.map +0 -1
- package/dist/config-6PyyriW8.d.cts +0 -206
- package/dist/config.cjs +0 -36
- package/dist/config.cjs.map +0 -1
- package/dist/config.d.cts +0 -3
- package/dist/evals/aggregations.cjs +0 -71
- package/dist/evals/aggregations.cjs.map +0 -1
- package/dist/evals/aggregations.d.cts +0 -93
- package/dist/evals/custom-runner.cjs +0 -114
- package/dist/evals/custom-runner.cjs.map +0 -1
- package/dist/evals/custom-runner.d.cts +0 -17
- package/dist/evals/online.cjs +0 -842
- package/dist/evals/online.cjs.map +0 -1
- package/dist/evals/online.d.cts +0 -134
- package/dist/evals/scorers.cjs +0 -389
- package/dist/evals/scorers.cjs.map +0 -1
- package/dist/evals/scorers.d.cts +0 -53
- package/dist/evals/scorers.js +0 -15
- package/dist/evals/scorers.js.map +0 -1
- package/dist/evals.cjs +0 -3459
- package/dist/evals.cjs.map +0 -1
- package/dist/evals.d.cts +0 -355
- package/dist/feedback.cjs +0 -173
- package/dist/feedback.cjs.map +0 -1
- package/dist/feedback.d.cts +0 -166
- package/dist/index.cjs +0 -10171
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -400
- package/dist/name-validation.d-DzPxDeTs.d.ts +0 -118
- package/dist/run-vitest-2Z3UD5FV.js.map +0 -1
- package/dist/token-util-GALWBVLF.js +0 -6
- /package/dist/{evals/aggregations.js.map → chunk-KEXKKQVW.js.map} +0 -0
- /package/dist/{evals → scorers}/aggregations.d.ts +0 -0
- /package/dist/{token-util-GALWBVLF.js.map → scorers/aggregations.js.map} +0 -0
package/README.md
CHANGED
|
@@ -83,7 +83,7 @@ For running scorers in production (without vitest dependency):
|
|
|
83
83
|
|
|
84
84
|
```ts
|
|
85
85
|
import { withSpan } from 'axiom/ai';
|
|
86
|
-
import { Scorer } from 'axiom/ai/
|
|
86
|
+
import { Scorer } from 'axiom/ai/scorers';
|
|
87
87
|
import { onlineEval } from 'axiom/ai/evals/online';
|
|
88
88
|
|
|
89
89
|
const formatScorer = Scorer('format-check', ({ output }: { output: string }) => {
|
package/dist/bin.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
extractOverrides,
|
|
4
4
|
loadEvalCommand
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-2XPPXCZ6.js";
|
|
6
6
|
import {
|
|
7
7
|
OAuth,
|
|
8
8
|
fetchOrganizations,
|
|
@@ -14,27 +14,20 @@ import {
|
|
|
14
14
|
startCallbackServer,
|
|
15
15
|
verifyToken,
|
|
16
16
|
waitForCallback
|
|
17
|
-
} from "./chunk-
|
|
18
|
-
import "./chunk-
|
|
17
|
+
} from "./chunk-3VKWOZAQ.js";
|
|
18
|
+
import "./chunk-GLBE32GY.js";
|
|
19
19
|
import {
|
|
20
20
|
AxiomCLIError
|
|
21
|
-
} from "./chunk-
|
|
22
|
-
import "./chunk-
|
|
23
|
-
import "./chunk-
|
|
24
|
-
import "./chunk-
|
|
25
|
-
import
|
|
26
|
-
init_esm_shims
|
|
27
|
-
} from "./chunk-4VNFFUM5.js";
|
|
21
|
+
} from "./chunk-ISSDOC43.js";
|
|
22
|
+
import "./chunk-K3QLV6H6.js";
|
|
23
|
+
import "./chunk-MM5FFQJT.js";
|
|
24
|
+
import "./chunk-4TKUTT24.js";
|
|
25
|
+
import "./chunk-KEXKKQVW.js";
|
|
28
26
|
|
|
29
27
|
// src/bin.ts
|
|
30
|
-
init_esm_shims();
|
|
31
28
|
import { Command as Command2 } from "commander";
|
|
32
29
|
|
|
33
|
-
// src/cli/commands/auth.command.ts
|
|
34
|
-
init_esm_shims();
|
|
35
|
-
|
|
36
30
|
// src/cli/commands/auth-login.command.ts
|
|
37
|
-
init_esm_shims();
|
|
38
31
|
var BASE_HOSTNAME = "axiom.co";
|
|
39
32
|
var getApiUrl = (hostname) => {
|
|
40
33
|
return `https://api.${hostname}`;
|
|
@@ -186,7 +179,6 @@ function loadAuthLoginCommand(auth, root) {
|
|
|
186
179
|
}
|
|
187
180
|
|
|
188
181
|
// src/cli/commands/auth-logout.command.ts
|
|
189
|
-
init_esm_shims();
|
|
190
182
|
async function logoutCommand(alias) {
|
|
191
183
|
const config = await loadGlobalConfig();
|
|
192
184
|
const profileToRemove = alias || config.active_profile;
|
|
@@ -231,7 +223,6 @@ function loadAuthLogoutCommand(auth, root) {
|
|
|
231
223
|
}
|
|
232
224
|
|
|
233
225
|
// src/cli/commands/auth-status.command.ts
|
|
234
|
-
init_esm_shims();
|
|
235
226
|
async function statusCommand() {
|
|
236
227
|
const config = await loadGlobalConfig();
|
|
237
228
|
if (Object.keys(config.profiles).length === 0) {
|
|
@@ -296,7 +287,6 @@ function loadAuthStatusCommand(auth, program2) {
|
|
|
296
287
|
}
|
|
297
288
|
|
|
298
289
|
// src/cli/commands/auth-switch.command.ts
|
|
299
|
-
init_esm_shims();
|
|
300
290
|
async function promptSelect2(message, choices) {
|
|
301
291
|
console.log(`
|
|
302
292
|
${message}`);
|
|
@@ -395,12 +385,11 @@ function loadAuthCommand(program2) {
|
|
|
395
385
|
import pkg from "@next/env";
|
|
396
386
|
|
|
397
387
|
// src/cli/commands/version.command.ts
|
|
398
|
-
init_esm_shims();
|
|
399
388
|
import { Command } from "commander";
|
|
400
389
|
var loadVersionCommand = (program2) => {
|
|
401
390
|
return program2.addCommand(
|
|
402
391
|
new Command("version").description("cli version").action(() => {
|
|
403
|
-
console.log("0.
|
|
392
|
+
console.log("0.48.0");
|
|
404
393
|
})
|
|
405
394
|
);
|
|
406
395
|
};
|
|
@@ -410,7 +399,7 @@ var { loadEnvConfig } = pkg;
|
|
|
410
399
|
loadEnvConfig(process.cwd());
|
|
411
400
|
var { cleanedArgv, overrides } = extractOverrides(process.argv.slice(2));
|
|
412
401
|
var program = new Command2();
|
|
413
|
-
program.name("axiom").description("Axiom's CLI to manage your objects and run evals").version("0.
|
|
402
|
+
program.name("axiom").description("Axiom's CLI to manage your objects and run evals").version("0.48.0");
|
|
414
403
|
program.hook("preAction", async (_, actionCommand) => {
|
|
415
404
|
const commandName = actionCommand.name();
|
|
416
405
|
const parentCommand = actionCommand.parent;
|
package/dist/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/bin.ts","../src/cli/commands/auth.command.ts","../src/cli/commands/auth-login.command.ts","../src/cli/commands/auth-logout.command.ts","../src/cli/commands/auth-status.command.ts","../src/cli/commands/auth-switch.command.ts","../src/cli/commands/version.command.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { Command } from 'commander';\nimport { loadEvalCommand } from './cli/commands/eval.command';\nimport { loadAuthCommand } from './cli/commands/auth.command';\nimport { extractOverrides } from './cli/utils/parse-flag-overrides';\nimport { setupGlobalAuth } from './cli/auth/global-auth';\n\n// Load environment variables using @next/env\nimport pkg from '@next/env';\nimport { loadVersionCommand } from './cli/commands/version.command';\nconst { loadEnvConfig } = pkg;\n\n// Load .env files from the current working directory\nloadEnvConfig(process.cwd());\n\nconst { cleanedArgv, overrides } = extractOverrides(process.argv.slice(2));\n\nexport const program = new Command();\n\nprogram\n .name('axiom')\n .description(\"Axiom's CLI to manage your objects and run evals\")\n .version(__SDK_VERSION__);\n\n// Global auth hook - runs before all commands except auth commands\nprogram.hook('preAction', async (_, actionCommand: Command) => {\n // Skip auth setup for auth commands and version command\n // Check both the command name and parent command name for nested commands\n const commandName = actionCommand.name();\n const parentCommand = actionCommand.parent;\n const parentName = parentCommand?.name();\n\n if (commandName === 'auth' || parentName === 'auth' || commandName === 'version') {\n return;\n }\n\n try {\n await setupGlobalAuth();\n } catch (error) {\n if (error instanceof Error) {\n console.error(`\\n❌ ${error.message}\\n`);\n } else {\n console.error(`\\n❌ Unexpected error: ${String(error)}\\n`);\n }\n process.exit(1);\n }\n});\n\nloadAuthCommand(program);\nloadEvalCommand(program, overrides);\nloadVersionCommand(program);\n\n// Parse cleaned argv (without --flag.* arguments)\nprogram.parse(['node', 'axiom', ...cleanedArgv]);\n","import type { Command } from 'commander';\nimport { loadAuthLoginCommand } from './auth-login.command';\nimport { loadAuthLogoutCommand } from './auth-logout.command';\nimport { loadAuthStatusCommand } from './auth-status.command';\nimport { loadAuthSwitchCommand } from './auth-switch.command';\n\nexport function loadAuthCommand(program: Command): void {\n const auth = program.command('auth').description('Manage authentication with Axiom');\n\n loadAuthLoginCommand(auth, program);\n loadAuthLogoutCommand(auth, program);\n loadAuthStatusCommand(auth, program);\n loadAuthSwitchCommand(auth, program);\n}\n","import type { Command } from 'commander';\nimport { OAuth } from '../auth/oauth';\nimport { startCallbackServer, waitForCallback } from '../auth/callback-server';\nimport { getGlobalConfigPath, loadGlobalConfig, saveGlobalConfig } from '../auth/config';\nimport { fetchOrganizations, verifyToken } from '../auth/api';\nimport { AxiomCLIError } from '../../util/errors';\n\nconst BASE_HOSTNAME = 'axiom.co';\n\nconst getApiUrl = (hostname: string) => {\n return `https://api.${hostname}`;\n};\n\nconst getOauthUrl = (hostname: string) => {\n return `https://login.${hostname}`;\n};\n\nasync function promptSelect<T>(\n message: string,\n choices: Array<{ name: string; value: T }>,\n): Promise<T> {\n console.log(`\\n${message}`);\n choices.forEach((choice, index) => {\n console.log(` ${index + 1}. ${choice.name}`);\n });\n\n const readline = await import('readline');\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n const askQuestion = () => {\n rl.question(`\\nSelect (1-${choices.length}): `, (answer) => {\n const index = parseInt(answer.trim(), 10) - 1;\n if (index >= 0 && index < choices.length) {\n rl.close();\n resolve(choices[index].value);\n } else {\n console.log('Invalid selection. Please try again.');\n askQuestion();\n }\n });\n };\n askQuestion();\n });\n}\n\nasync function promptInput(message: string, defaultValue?: string): Promise<string> {\n const readline = await import('readline');\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n const prompt = defaultValue ? `${message} (${defaultValue}): ` : `${message}: `;\n rl.question(prompt, (answer) => {\n rl.close();\n resolve(answer.trim() || defaultValue || '');\n });\n });\n}\n\nasync function openBrowser(url: string): Promise<void> {\n const { default: open } = await import('open');\n await open(url);\n}\n\nexport async function loginCommand(hostname: string): Promise<void> {\n try {\n console.log('🔐 Starting authentication flow...\\n');\n\n const codeVerifier = OAuth.generateCodeVerifier();\n const codeChallenge = OAuth.generateCodeChallenge(codeVerifier);\n const state = OAuth.generateState();\n const oauth = new OAuth(getOauthUrl(hostname));\n\n const { server, url: redirectUri } = await startCallbackServer();\n console.log(`✓ Started local callback server on ${redirectUri}\\n`);\n\n const authUrl = oauth.buildAuthUrl({\n redirectUri,\n state,\n codeChallenge,\n });\n\n console.log('Opening browser for authentication...');\n console.log(`If the browser doesn't open, visit: ${authUrl}\\n`);\n\n try {\n await openBrowser(authUrl);\n } catch {\n console.log('Could not open browser automatically.\\n');\n }\n\n console.log('Waiting for authentication...');\n const { code } = await waitForCallback(server, state);\n\n console.log('✓ Authentication successful, exchanging code for token...\\n');\n\n const accessToken = await oauth.exchangeCodeForToken({\n code,\n redirectUri,\n codeVerifier,\n });\n\n console.log('✓ Token received, fetching organizations...\\n');\n\n const organizations = await fetchOrganizations(accessToken, getApiUrl(hostname));\n\n if (organizations.length === 0) {\n throw new AxiomCLIError('No organizations found for this account');\n }\n\n let selectedOrgId: string;\n if (organizations.length === 1) {\n selectedOrgId = organizations[0].id;\n console.log(`✓ Using organization: ${organizations[0].name}\\n`);\n } else {\n selectedOrgId = await promptSelect(\n 'Select an organization:',\n organizations.map((org) => ({\n name: `${org.name} (${org.id})`,\n value: org.id,\n })),\n );\n }\n\n const selectedOrg = organizations.find((org) => org.id === selectedOrgId)!;\n const defaultAlias = selectedOrg.slug || selectedOrg.name.toLowerCase().replace(/\\s+/g, '-');\n\n const alias = await promptInput('Enter profile alias', defaultAlias);\n\n console.log('\\n✓ Verifying credentials...\\n');\n const isValid = await verifyToken(accessToken, selectedOrgId, getApiUrl(hostname));\n\n if (!isValid) {\n throw new AxiomCLIError('Token verification failed');\n }\n\n const config = await loadGlobalConfig();\n config.active_profile = alias;\n config.profiles[alias] = {\n url: getApiUrl(hostname),\n token: accessToken,\n org_id: selectedOrgId,\n };\n\n await saveGlobalConfig(config);\n\n console.log(`✓ Successfully logged in as ${alias}`);\n console.log(`✓ Configuration saved to ${getGlobalConfigPath()}\\n`);\n } catch (error) {\n if (error instanceof AxiomCLIError) {\n throw error;\n }\n throw new AxiomCLIError(`Login failed: ${(error as Error).message}`);\n }\n}\n\nexport function loadAuthLoginCommand(auth: Command, root: Command): void {\n [auth, root].forEach((program) => {\n program\n .command('login')\n .description('Authenticate with Axiom')\n .option('--hostname <hostname>', 'Axiom hostname (default: axiom.co)')\n .action(async (options) => {\n try {\n await loginCommand(options.hostname ?? BASE_HOSTNAME);\n } catch (error) {\n if (error instanceof AxiomCLIError) {\n console.error(`\\n❌ Error: ${error.message}\\n`);\n } else {\n console.error(`\\n❌ Unexpected error: ${(error as Error).message}\\n`);\n }\n process.exit(1);\n }\n });\n });\n}\n","import type { Command } from 'commander';\nimport { loadGlobalConfig, saveGlobalConfig } from '../auth/config';\nimport { AxiomCLIError } from '../../util/errors';\n\nexport async function logoutCommand(alias?: string): Promise<void> {\n const config = await loadGlobalConfig();\n\n const profileToRemove = alias || config.active_profile;\n\n if (!profileToRemove) {\n throw new AxiomCLIError('No active profile. Use --alias to specify which profile to remove.');\n }\n\n if (!config.profiles[profileToRemove]) {\n throw new AxiomCLIError(`Profile \"${profileToRemove}\" not found`);\n }\n\n delete config.profiles[profileToRemove];\n\n if (config.active_profile === profileToRemove) {\n const remainingProfiles = Object.keys(config.profiles);\n config.active_profile = remainingProfiles.length > 0 ? remainingProfiles[0] : undefined;\n }\n\n await saveGlobalConfig(config);\n\n console.log(`✓ Logged out from ${profileToRemove}`);\n if (config.active_profile) {\n console.log(`✓ Active profile is now: ${config.active_profile}`);\n } else {\n console.log('No active profiles remaining. Run \"axiom auth login\" to authenticate.');\n }\n}\n\nexport function loadAuthLogoutCommand(auth: Command, root: Command): void {\n [auth, root].forEach((program) => {\n program\n .command('logout')\n .description('Remove authentication credentials')\n .option('-a, --alias <alias>', 'Profile alias to remove')\n .action(async (options) => {\n try {\n await logoutCommand(options.alias);\n } catch (error) {\n if (error instanceof AxiomCLIError) {\n console.error(`\\n❌ Error: ${error.message}\\n`);\n } else {\n console.error(`\\n❌ Unexpected error: ${(error as Error).message}\\n`);\n }\n process.exit(1);\n }\n });\n });\n}\n","import type { Command } from 'commander';\nimport { loadGlobalConfig, getActiveProfile } from '../auth/config';\nimport { verifyToken } from '../auth/api';\nimport { AxiomCLIError } from '../../util/errors';\n\nexport async function statusCommand(): Promise<void> {\n const config = await loadGlobalConfig();\n\n if (Object.keys(config.profiles).length === 0) {\n console.log('No authenticated profiles found.');\n console.log('Run \"axiom auth login\" to authenticate.');\n return;\n }\n\n console.log('\\nAuthentication Status:\\n');\n\n for (const [alias, profile] of Object.entries(config.profiles)) {\n const isActive = config.active_profile === alias;\n const marker = isActive ? '→' : ' ';\n\n try {\n const isValid = await verifyToken(profile.token, profile.org_id, profile.url);\n const status = isValid ? '✓' : '✗';\n const statusText = isValid ? 'Valid' : 'Invalid';\n\n console.log(`${marker} ${status} ${alias}`);\n console.log(` URL: ${profile.url}`);\n console.log(` Org ID: ${profile.org_id}`);\n console.log(` Status: ${statusText}`);\n if (isActive) {\n console.log(` (Active)`);\n }\n console.log();\n } catch (error) {\n console.log(`${marker} ✗ ${alias}`);\n console.log(` URL: ${profile.url}`);\n console.log(` Org ID: ${profile.org_id}`);\n console.log(` Status: Error - ${(error as Error).message}`);\n if (isActive) {\n console.log(` (Active)`);\n }\n console.log();\n }\n }\n\n const activeProfile = getActiveProfile(config);\n if (process.env.AXIOM_TOKEN) {\n console.log('Note: Using AXIOM_TOKEN environment variable (overrides config file)\\n');\n } else if (activeProfile && config.active_profile) {\n console.log(`Active profile: ${config.active_profile}\\n`);\n }\n}\n\nexport function loadAuthStatusCommand(auth: Command, program: Command): void {\n [auth, program].forEach((program) => {\n program\n .command('status')\n .description('Check authentication status for all profiles')\n .action(async () => {\n try {\n await statusCommand();\n } catch (error) {\n if (error instanceof AxiomCLIError) {\n console.error(`\\n❌ Error: ${error.message}\\n`);\n } else {\n console.error(`\\n❌ Unexpected error: ${(error as Error).message}\\n`);\n }\n process.exit(1);\n }\n });\n });\n}\n","import type { Command } from 'commander';\nimport { loadGlobalConfig, saveGlobalConfig } from '../auth/config';\nimport { AxiomCLIError } from '../../util/errors';\n\nasync function promptSelect<T>(\n message: string,\n choices: Array<{ name: string; value: T }>,\n): Promise<T> {\n console.log(`\\n${message}`);\n choices.forEach((choice, index) => {\n console.log(` ${index + 1}. ${choice.name}`);\n });\n\n const readline = await import('readline');\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n const askQuestion = () => {\n rl.question(`\\nSelect (1-${choices.length}): `, (answer) => {\n const index = parseInt(answer.trim(), 10) - 1;\n if (index >= 0 && index < choices.length) {\n rl.close();\n resolve(choices[index].value);\n } else {\n console.log('Invalid selection. Please try again.');\n askQuestion();\n }\n });\n };\n askQuestion();\n });\n}\n\nexport async function switchCommand(alias?: string): Promise<void> {\n const config = await loadGlobalConfig();\n\n if (Object.keys(config.profiles).length === 0) {\n throw new AxiomCLIError(\n 'No authenticated profiles found. Run \"axiom auth login\" to authenticate.',\n );\n }\n\n let selectedAlias: string;\n\n if (alias) {\n // Use provided alias\n if (!config.profiles[alias]) {\n throw new AxiomCLIError(`Profile \"${alias}\" not found`);\n }\n selectedAlias = alias;\n } else {\n // Prompt for selection\n const profiles = Object.entries(config.profiles).map(([alias, profile]) => ({\n name: `${alias} (${profile.url})`,\n value: alias,\n }));\n\n if (profiles.length === 1) {\n selectedAlias = profiles[0].value;\n console.log(`✓ Using profile: ${selectedAlias}\\n`);\n } else {\n selectedAlias = await promptSelect('Select a profile to switch to:', profiles);\n }\n }\n\n // Check if already active\n if (config.active_profile === selectedAlias) {\n console.log(`✓ Profile \"${selectedAlias}\" is already active\\n`);\n return;\n }\n\n // Set as active\n config.active_profile = selectedAlias;\n await saveGlobalConfig(config);\n\n console.log(`✓ Switched to profile: ${selectedAlias}\\n`);\n}\n\nexport function loadAuthSwitchCommand(auth: Command, root: Command): void {\n [auth, root].forEach((program) => {\n program\n .command('switch')\n .description('Switch to a different profile')\n .argument('[alias]', 'Profile alias to switch to')\n .action(async (alias?: string) => {\n try {\n await switchCommand(alias);\n } catch (error) {\n if (error instanceof AxiomCLIError) {\n console.error(`\\n❌ Error: ${error.message}\\n`);\n } else {\n console.error(`\\n❌ Unexpected error: ${(error as Error).message}\\n`);\n }\n process.exit(1);\n }\n });\n });\n}\n","import { Command } from 'commander';\n\nexport const loadVersionCommand = (program: Command) => {\n return program.addCommand(\n new Command('version').description('cli version').action(() => {\n console.log(__SDK_VERSION__);\n }),\n );\n};\n"],"mappings":"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","names":["Command","program","program","program","promptSelect","alias","program","program","program","Command"]}
|
|
1
|
+
{"version":3,"sources":["../src/bin.ts","../src/cli/commands/auth-login.command.ts","../src/cli/commands/auth-logout.command.ts","../src/cli/commands/auth-status.command.ts","../src/cli/commands/auth-switch.command.ts","../src/cli/commands/auth.command.ts","../src/cli/commands/version.command.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { Command } from 'commander';\nimport { loadEvalCommand } from './cli/commands/eval.command';\nimport { loadAuthCommand } from './cli/commands/auth.command';\nimport { extractOverrides } from './cli/utils/parse-flag-overrides';\nimport { setupGlobalAuth } from './cli/auth/global-auth';\n\n// Load environment variables using @next/env\nimport pkg from '@next/env';\nimport { loadVersionCommand } from './cli/commands/version.command';\nconst { loadEnvConfig } = pkg;\n\n// Load .env files from the current working directory\nloadEnvConfig(process.cwd());\n\nconst { cleanedArgv, overrides } = extractOverrides(process.argv.slice(2));\n\nexport const program = new Command();\n\nprogram\n .name('axiom')\n .description(\"Axiom's CLI to manage your objects and run evals\")\n .version(__SDK_VERSION__);\n\n// Global auth hook - runs before all commands except auth commands\nprogram.hook('preAction', async (_, actionCommand: Command) => {\n // Skip auth setup for auth commands and version command\n // Check both the command name and parent command name for nested commands\n const commandName = actionCommand.name();\n const parentCommand = actionCommand.parent;\n const parentName = parentCommand?.name();\n\n if (commandName === 'auth' || parentName === 'auth' || commandName === 'version') {\n return;\n }\n\n try {\n await setupGlobalAuth();\n } catch (error) {\n if (error instanceof Error) {\n console.error(`\\n❌ ${error.message}\\n`);\n } else {\n console.error(`\\n❌ Unexpected error: ${String(error)}\\n`);\n }\n process.exit(1);\n }\n});\n\nloadAuthCommand(program);\nloadEvalCommand(program, overrides);\nloadVersionCommand(program);\n\n// Parse cleaned argv (without --flag.* arguments)\nprogram.parse(['node', 'axiom', ...cleanedArgv]);\n","import type { Command } from 'commander';\nimport { OAuth } from '../auth/oauth';\nimport { startCallbackServer, waitForCallback } from '../auth/callback-server';\nimport { getGlobalConfigPath, loadGlobalConfig, saveGlobalConfig } from '../auth/config';\nimport { fetchOrganizations, verifyToken } from '../auth/api';\nimport { AxiomCLIError } from '../../util/errors';\n\nconst BASE_HOSTNAME = 'axiom.co';\n\nconst getApiUrl = (hostname: string) => {\n return `https://api.${hostname}`;\n};\n\nconst getOauthUrl = (hostname: string) => {\n return `https://login.${hostname}`;\n};\n\nasync function promptSelect<T>(\n message: string,\n choices: Array<{ name: string; value: T }>,\n): Promise<T> {\n console.log(`\\n${message}`);\n choices.forEach((choice, index) => {\n console.log(` ${index + 1}. ${choice.name}`);\n });\n\n const readline = await import('readline');\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n const askQuestion = () => {\n rl.question(`\\nSelect (1-${choices.length}): `, (answer) => {\n const index = parseInt(answer.trim(), 10) - 1;\n if (index >= 0 && index < choices.length) {\n rl.close();\n resolve(choices[index].value);\n } else {\n console.log('Invalid selection. Please try again.');\n askQuestion();\n }\n });\n };\n askQuestion();\n });\n}\n\nasync function promptInput(message: string, defaultValue?: string): Promise<string> {\n const readline = await import('readline');\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n const prompt = defaultValue ? `${message} (${defaultValue}): ` : `${message}: `;\n rl.question(prompt, (answer) => {\n rl.close();\n resolve(answer.trim() || defaultValue || '');\n });\n });\n}\n\nasync function openBrowser(url: string): Promise<void> {\n const { default: open } = await import('open');\n await open(url);\n}\n\nexport async function loginCommand(hostname: string): Promise<void> {\n try {\n console.log('🔐 Starting authentication flow...\\n');\n\n const codeVerifier = OAuth.generateCodeVerifier();\n const codeChallenge = OAuth.generateCodeChallenge(codeVerifier);\n const state = OAuth.generateState();\n const oauth = new OAuth(getOauthUrl(hostname));\n\n const { server, url: redirectUri } = await startCallbackServer();\n console.log(`✓ Started local callback server on ${redirectUri}\\n`);\n\n const authUrl = oauth.buildAuthUrl({\n redirectUri,\n state,\n codeChallenge,\n });\n\n console.log('Opening browser for authentication...');\n console.log(`If the browser doesn't open, visit: ${authUrl}\\n`);\n\n try {\n await openBrowser(authUrl);\n } catch {\n console.log('Could not open browser automatically.\\n');\n }\n\n console.log('Waiting for authentication...');\n const { code } = await waitForCallback(server, state);\n\n console.log('✓ Authentication successful, exchanging code for token...\\n');\n\n const accessToken = await oauth.exchangeCodeForToken({\n code,\n redirectUri,\n codeVerifier,\n });\n\n console.log('✓ Token received, fetching organizations...\\n');\n\n const organizations = await fetchOrganizations(accessToken, getApiUrl(hostname));\n\n if (organizations.length === 0) {\n throw new AxiomCLIError('No organizations found for this account');\n }\n\n let selectedOrgId: string;\n if (organizations.length === 1) {\n selectedOrgId = organizations[0].id;\n console.log(`✓ Using organization: ${organizations[0].name}\\n`);\n } else {\n selectedOrgId = await promptSelect(\n 'Select an organization:',\n organizations.map((org) => ({\n name: `${org.name} (${org.id})`,\n value: org.id,\n })),\n );\n }\n\n const selectedOrg = organizations.find((org) => org.id === selectedOrgId)!;\n const defaultAlias = selectedOrg.slug || selectedOrg.name.toLowerCase().replace(/\\s+/g, '-');\n\n const alias = await promptInput('Enter profile alias', defaultAlias);\n\n console.log('\\n✓ Verifying credentials...\\n');\n const isValid = await verifyToken(accessToken, selectedOrgId, getApiUrl(hostname));\n\n if (!isValid) {\n throw new AxiomCLIError('Token verification failed');\n }\n\n const config = await loadGlobalConfig();\n config.active_profile = alias;\n config.profiles[alias] = {\n url: getApiUrl(hostname),\n token: accessToken,\n org_id: selectedOrgId,\n };\n\n await saveGlobalConfig(config);\n\n console.log(`✓ Successfully logged in as ${alias}`);\n console.log(`✓ Configuration saved to ${getGlobalConfigPath()}\\n`);\n } catch (error) {\n if (error instanceof AxiomCLIError) {\n throw error;\n }\n throw new AxiomCLIError(`Login failed: ${(error as Error).message}`);\n }\n}\n\nexport function loadAuthLoginCommand(auth: Command, root: Command): void {\n [auth, root].forEach((program) => {\n program\n .command('login')\n .description('Authenticate with Axiom')\n .option('--hostname <hostname>', 'Axiom hostname (default: axiom.co)')\n .action(async (options) => {\n try {\n await loginCommand(options.hostname ?? BASE_HOSTNAME);\n } catch (error) {\n if (error instanceof AxiomCLIError) {\n console.error(`\\n❌ Error: ${error.message}\\n`);\n } else {\n console.error(`\\n❌ Unexpected error: ${(error as Error).message}\\n`);\n }\n process.exit(1);\n }\n });\n });\n}\n","import type { Command } from 'commander';\nimport { loadGlobalConfig, saveGlobalConfig } from '../auth/config';\nimport { AxiomCLIError } from '../../util/errors';\n\nexport async function logoutCommand(alias?: string): Promise<void> {\n const config = await loadGlobalConfig();\n\n const profileToRemove = alias || config.active_profile;\n\n if (!profileToRemove) {\n throw new AxiomCLIError('No active profile. Use --alias to specify which profile to remove.');\n }\n\n if (!config.profiles[profileToRemove]) {\n throw new AxiomCLIError(`Profile \"${profileToRemove}\" not found`);\n }\n\n delete config.profiles[profileToRemove];\n\n if (config.active_profile === profileToRemove) {\n const remainingProfiles = Object.keys(config.profiles);\n config.active_profile = remainingProfiles.length > 0 ? remainingProfiles[0] : undefined;\n }\n\n await saveGlobalConfig(config);\n\n console.log(`✓ Logged out from ${profileToRemove}`);\n if (config.active_profile) {\n console.log(`✓ Active profile is now: ${config.active_profile}`);\n } else {\n console.log('No active profiles remaining. Run \"axiom auth login\" to authenticate.');\n }\n}\n\nexport function loadAuthLogoutCommand(auth: Command, root: Command): void {\n [auth, root].forEach((program) => {\n program\n .command('logout')\n .description('Remove authentication credentials')\n .option('-a, --alias <alias>', 'Profile alias to remove')\n .action(async (options) => {\n try {\n await logoutCommand(options.alias);\n } catch (error) {\n if (error instanceof AxiomCLIError) {\n console.error(`\\n❌ Error: ${error.message}\\n`);\n } else {\n console.error(`\\n❌ Unexpected error: ${(error as Error).message}\\n`);\n }\n process.exit(1);\n }\n });\n });\n}\n","import type { Command } from 'commander';\nimport { loadGlobalConfig, getActiveProfile } from '../auth/config';\nimport { verifyToken } from '../auth/api';\nimport { AxiomCLIError } from '../../util/errors';\n\nexport async function statusCommand(): Promise<void> {\n const config = await loadGlobalConfig();\n\n if (Object.keys(config.profiles).length === 0) {\n console.log('No authenticated profiles found.');\n console.log('Run \"axiom auth login\" to authenticate.');\n return;\n }\n\n console.log('\\nAuthentication Status:\\n');\n\n for (const [alias, profile] of Object.entries(config.profiles)) {\n const isActive = config.active_profile === alias;\n const marker = isActive ? '→' : ' ';\n\n try {\n const isValid = await verifyToken(profile.token, profile.org_id, profile.url);\n const status = isValid ? '✓' : '✗';\n const statusText = isValid ? 'Valid' : 'Invalid';\n\n console.log(`${marker} ${status} ${alias}`);\n console.log(` URL: ${profile.url}`);\n console.log(` Org ID: ${profile.org_id}`);\n console.log(` Status: ${statusText}`);\n if (isActive) {\n console.log(` (Active)`);\n }\n console.log();\n } catch (error) {\n console.log(`${marker} ✗ ${alias}`);\n console.log(` URL: ${profile.url}`);\n console.log(` Org ID: ${profile.org_id}`);\n console.log(` Status: Error - ${(error as Error).message}`);\n if (isActive) {\n console.log(` (Active)`);\n }\n console.log();\n }\n }\n\n const activeProfile = getActiveProfile(config);\n if (process.env.AXIOM_TOKEN) {\n console.log('Note: Using AXIOM_TOKEN environment variable (overrides config file)\\n');\n } else if (activeProfile && config.active_profile) {\n console.log(`Active profile: ${config.active_profile}\\n`);\n }\n}\n\nexport function loadAuthStatusCommand(auth: Command, program: Command): void {\n [auth, program].forEach((program) => {\n program\n .command('status')\n .description('Check authentication status for all profiles')\n .action(async () => {\n try {\n await statusCommand();\n } catch (error) {\n if (error instanceof AxiomCLIError) {\n console.error(`\\n❌ Error: ${error.message}\\n`);\n } else {\n console.error(`\\n❌ Unexpected error: ${(error as Error).message}\\n`);\n }\n process.exit(1);\n }\n });\n });\n}\n","import type { Command } from 'commander';\nimport { loadGlobalConfig, saveGlobalConfig } from '../auth/config';\nimport { AxiomCLIError } from '../../util/errors';\n\nasync function promptSelect<T>(\n message: string,\n choices: Array<{ name: string; value: T }>,\n): Promise<T> {\n console.log(`\\n${message}`);\n choices.forEach((choice, index) => {\n console.log(` ${index + 1}. ${choice.name}`);\n });\n\n const readline = await import('readline');\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n const askQuestion = () => {\n rl.question(`\\nSelect (1-${choices.length}): `, (answer) => {\n const index = parseInt(answer.trim(), 10) - 1;\n if (index >= 0 && index < choices.length) {\n rl.close();\n resolve(choices[index].value);\n } else {\n console.log('Invalid selection. Please try again.');\n askQuestion();\n }\n });\n };\n askQuestion();\n });\n}\n\nexport async function switchCommand(alias?: string): Promise<void> {\n const config = await loadGlobalConfig();\n\n if (Object.keys(config.profiles).length === 0) {\n throw new AxiomCLIError(\n 'No authenticated profiles found. Run \"axiom auth login\" to authenticate.',\n );\n }\n\n let selectedAlias: string;\n\n if (alias) {\n // Use provided alias\n if (!config.profiles[alias]) {\n throw new AxiomCLIError(`Profile \"${alias}\" not found`);\n }\n selectedAlias = alias;\n } else {\n // Prompt for selection\n const profiles = Object.entries(config.profiles).map(([alias, profile]) => ({\n name: `${alias} (${profile.url})`,\n value: alias,\n }));\n\n if (profiles.length === 1) {\n selectedAlias = profiles[0].value;\n console.log(`✓ Using profile: ${selectedAlias}\\n`);\n } else {\n selectedAlias = await promptSelect('Select a profile to switch to:', profiles);\n }\n }\n\n // Check if already active\n if (config.active_profile === selectedAlias) {\n console.log(`✓ Profile \"${selectedAlias}\" is already active\\n`);\n return;\n }\n\n // Set as active\n config.active_profile = selectedAlias;\n await saveGlobalConfig(config);\n\n console.log(`✓ Switched to profile: ${selectedAlias}\\n`);\n}\n\nexport function loadAuthSwitchCommand(auth: Command, root: Command): void {\n [auth, root].forEach((program) => {\n program\n .command('switch')\n .description('Switch to a different profile')\n .argument('[alias]', 'Profile alias to switch to')\n .action(async (alias?: string) => {\n try {\n await switchCommand(alias);\n } catch (error) {\n if (error instanceof AxiomCLIError) {\n console.error(`\\n❌ Error: ${error.message}\\n`);\n } else {\n console.error(`\\n❌ Unexpected error: ${(error as Error).message}\\n`);\n }\n process.exit(1);\n }\n });\n });\n}\n","import type { Command } from 'commander';\nimport { loadAuthLoginCommand } from './auth-login.command';\nimport { loadAuthLogoutCommand } from './auth-logout.command';\nimport { loadAuthStatusCommand } from './auth-status.command';\nimport { loadAuthSwitchCommand } from './auth-switch.command';\n\nexport function loadAuthCommand(program: Command): void {\n const auth = program.command('auth').description('Manage authentication with Axiom');\n\n loadAuthLoginCommand(auth, program);\n loadAuthLogoutCommand(auth, program);\n loadAuthStatusCommand(auth, program);\n loadAuthSwitchCommand(auth, program);\n}\n","import { Command } from 'commander';\n\nexport const loadVersionCommand = (program: Command) => {\n return program.addCommand(\n new Command('version').description('cli version').action(() => {\n console.log(__SDK_VERSION__);\n }),\n );\n};\n"],"mappings":"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","names":["Command","program","program","program","promptSelect","alias","program","program","program","Command"]}
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
createPartialDefaults,
|
|
3
3
|
getAuthContext,
|
|
4
4
|
validateConfig
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-3VKWOZAQ.js";
|
|
6
6
|
import {
|
|
7
7
|
EVAL_CONTEXT,
|
|
8
8
|
assertZodV4,
|
|
@@ -16,17 +16,13 @@ import {
|
|
|
16
16
|
putOnSpan,
|
|
17
17
|
setGlobalFlagOverrides,
|
|
18
18
|
withEvalContext
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-GLBE32GY.js";
|
|
20
20
|
import {
|
|
21
21
|
AxiomCLIError,
|
|
22
22
|
errorToString
|
|
23
|
-
} from "./chunk-
|
|
24
|
-
import {
|
|
25
|
-
init_esm_shims
|
|
26
|
-
} from "./chunk-4VNFFUM5.js";
|
|
23
|
+
} from "./chunk-ISSDOC43.js";
|
|
27
24
|
|
|
28
25
|
// src/cli/utils/parse-flag-overrides.ts
|
|
29
|
-
init_esm_shims();
|
|
30
26
|
import "zod";
|
|
31
27
|
import { readFileSync } from "fs";
|
|
32
28
|
import { resolve } from "path";
|
|
@@ -172,11 +168,7 @@ function extractOverrides(argv) {
|
|
|
172
168
|
return { cleanedArgv, overrides };
|
|
173
169
|
}
|
|
174
170
|
|
|
175
|
-
// ../../node_modules/.pnpm/tinyrainbow@2.0.0/node_modules/tinyrainbow/dist/node.js
|
|
176
|
-
init_esm_shims();
|
|
177
|
-
|
|
178
171
|
// ../../node_modules/.pnpm/tinyrainbow@2.0.0/node_modules/tinyrainbow/dist/chunk-BVHSVHOK.js
|
|
179
|
-
init_esm_shims();
|
|
180
172
|
var f = {
|
|
181
173
|
reset: [0, 0],
|
|
182
174
|
bold: [1, 22, "\x1B[22m\x1B[1m"],
|
|
@@ -261,16 +253,11 @@ var r = process.env.FORCE_TTY !== void 0 || s(1);
|
|
|
261
253
|
var u = p(r);
|
|
262
254
|
|
|
263
255
|
// src/cli/commands/eval.command.ts
|
|
264
|
-
init_esm_shims();
|
|
265
256
|
import { Command, Argument, Option } from "commander";
|
|
266
257
|
import { customAlphabet } from "nanoid";
|
|
267
258
|
import { lstatSync } from "fs";
|
|
268
259
|
|
|
269
|
-
// src/cli/utils/eval-context-runner.ts
|
|
270
|
-
init_esm_shims();
|
|
271
|
-
|
|
272
260
|
// src/context.ts
|
|
273
|
-
init_esm_shims();
|
|
274
261
|
function overrideFlags(partial) {
|
|
275
262
|
const current = getEvalContext();
|
|
276
263
|
if (!current) {
|
|
@@ -307,13 +294,11 @@ async function runEvalWithContext(overrides, runFn) {
|
|
|
307
294
|
}
|
|
308
295
|
|
|
309
296
|
// src/cli/utils/glob-utils.ts
|
|
310
|
-
init_esm_shims();
|
|
311
297
|
function isGlob(str) {
|
|
312
298
|
return /[*?[\]{}!]/.test(str);
|
|
313
299
|
}
|
|
314
300
|
|
|
315
301
|
// src/config/loader.ts
|
|
316
|
-
init_esm_shims();
|
|
317
302
|
import { loadConfig as c12LoadConfig } from "c12";
|
|
318
303
|
import { defu } from "defu";
|
|
319
304
|
function customMerger(target, source) {
|
|
@@ -437,7 +422,7 @@ var loadEvalCommand = (program, flagOverrides = {}) => {
|
|
|
437
422
|
consoleUrl = options.consoleUrl;
|
|
438
423
|
let runVitestModule;
|
|
439
424
|
try {
|
|
440
|
-
runVitestModule = await import("./run-vitest-
|
|
425
|
+
runVitestModule = await import("./run-vitest-SXLVVZVU.js");
|
|
441
426
|
} catch (err) {
|
|
442
427
|
if (err && typeof err === "object" && "code" in err && (err.code === "ERR_MODULE_NOT_FOUND" || err.code === "MODULE_NOT_FOUND")) {
|
|
443
428
|
throw new AxiomCLIError("Failed to load vitest.");
|
|
@@ -480,4 +465,4 @@ export {
|
|
|
480
465
|
getConsoleUrl,
|
|
481
466
|
loadEvalCommand
|
|
482
467
|
};
|
|
483
|
-
//# sourceMappingURL=chunk-
|
|
468
|
+
//# sourceMappingURL=chunk-2XPPXCZ6.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/utils/parse-flag-overrides.ts","../../../node_modules/.pnpm/tinyrainbow@2.0.0/node_modules/tinyrainbow/dist/node.js","../../../node_modules/.pnpm/tinyrainbow@2.0.0/node_modules/tinyrainbow/dist/chunk-BVHSVHOK.js","../src/cli/commands/eval.command.ts","../src/cli/utils/eval-context-runner.ts","../src/context.ts","../src/cli/utils/glob-utils.ts","../src/config/loader.ts"],"sourcesContent":["import { type ZodError, type ZodObject, type z } from 'zod';\nimport { formatZodErrors, generateFlagExamples } from './format-zod-errors.js';\nimport { readFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport { dotNotationToNested, isValidPath, parsePath } from '../../util/dot-path.js';\nimport { makeDeepPartial } from '../../util/deep-partial-schema.js';\nimport { assertZodV4 } from '../../util/zod-internals.js';\n\nexport interface FlagOverrides {\n [key: string]: any;\n}\n\nconst FLAG_RE = /^--flag\\.([^=]+)(?:=(.*))?$/;\nconst CONFIG_RE = /^--flags-config(?:=(.*))?$/;\n\nfunction ensureNoSpaceSeparatedSyntax(\n flagName: string,\n value: string | undefined,\n nextToken: string | undefined,\n flagType: 'flag' | 'config',\n): void {\n if (value === undefined && nextToken !== undefined) {\n if (\n flagType === 'flag' &&\n !nextToken.startsWith('-') &&\n nextToken !== 'true' &&\n nextToken !== 'false'\n ) {\n console.error(`❌ Invalid syntax: --flag.${flagName} ${nextToken}`);\n console.error(`💡 Use: --flag.${flagName}=${nextToken}`);\n process.exit(1);\n } else if (flagType === 'config' && !nextToken.startsWith('-')) {\n console.error(`❌ Invalid syntax: --flags-config ${nextToken}`);\n console.error(`💡 Use: --flags-config=${nextToken}`);\n process.exit(1);\n }\n }\n}\n\n/**\n * Extract and validate flag overrides using a Zod schema\n */\nexport function extractAndValidateFlagOverrides<S extends z.ZodObject<any>>(\n argv: string[],\n flagSchema?: S,\n): {\n cleanedArgv: string[];\n overrides: S extends ZodObject<any> ? z.output<S> : FlagOverrides;\n} {\n if (flagSchema) {\n assertZodV4(flagSchema, 'flagSchema');\n }\n\n const { cleanedArgv, overrides } = extractOverrides(argv);\n\n if (flagSchema && Object.keys(overrides).length > 0) {\n // Use deep partial schema - allows partial nested objects\n const deepPartialSchema = makeDeepPartial(flagSchema as ZodObject<any>);\n const result = deepPartialSchema.safeParse(overrides);\n\n if (!result.success) {\n console.error('❌ Invalid flags:');\n console.error(formatZodErrors(result.error));\n\n const examples = generateFlagExamples(result.error);\n if (examples.length > 0) {\n console.error('\\n💡 Examples:');\n examples.forEach((example) => console.error(` ${example}`));\n }\n\n process.exit(1);\n }\n\n return { cleanedArgv, overrides: result.data as any };\n }\n\n return { cleanedArgv, overrides: overrides as any };\n}\n\nexport type FlagValidationError =\n | { type: 'invalid_path'; path: string }\n | { type: 'invalid_value'; zodError: ZodError };\n\nexport interface FlagValidationResult {\n success: boolean;\n errors: FlagValidationError[];\n}\n\n/**\n * Validate already-parsed flag overrides against a Zod schema.\n * Returns validation result without side effects (no console output, no process.exit).\n *\n * @param overrides - Flag overrides in dot-notation form (e.g., { 'model.temperature': 0.7 })\n * @param flagSchema - Zod schema to validate against\n * @returns Validation result with any errors found\n */\nexport function collectFlagValidationErrors(\n overrides: FlagOverrides,\n flagSchema?: unknown,\n): FlagValidationResult {\n // No schema provided = no validation, any flags allowed\n if (!flagSchema || Object.keys(overrides).length === 0) {\n return { success: true, errors: [] };\n }\n\n assertZodV4(flagSchema, 'flagSchema');\n\n const schema = flagSchema as any;\n const errors: FlagValidationError[] = [];\n\n // First pass: check all paths exist in schema\n for (const dotPath of Object.keys(overrides)) {\n const segments = parsePath(dotPath);\n if (!isValidPath(schema, segments)) {\n errors.push({ type: 'invalid_path', path: dotPath });\n }\n }\n\n // If there are invalid paths, don't proceed to value validation\n if (errors.length > 0) {\n return { success: false, errors };\n }\n\n // Second pass: validate values using nested object approach with deep partial\n // This allows providing only some flags without requiring all nested objects\n const nestedObject = dotNotationToNested(overrides);\n const deepPartialSchema = makeDeepPartial(schema);\n const result = deepPartialSchema.safeParse(nestedObject);\n\n if (!result.success) {\n errors.push({ type: 'invalid_value', zodError: result.error });\n }\n\n return { success: errors.length === 0, errors };\n}\n\n/**\n * Print flag validation errors to console and exit.\n */\nexport function printFlagValidationErrorsAndExit(errors: FlagValidationError[]): never {\n console.error('❌ Invalid CLI flags:');\n\n for (const error of errors) {\n if (error.type === 'invalid_path') {\n console.error(` • flag '${error.path}': Invalid flag path`);\n } else {\n console.error(formatZodErrors(error.zodError));\n\n const examples = generateFlagExamples(error.zodError);\n if (examples.length > 0) {\n console.error('\\n💡 Valid examples:');\n examples.forEach((example) => console.error(` ${example}`));\n }\n }\n }\n\n process.exit(1);\n}\n\n/**\n * Validate already-parsed flag overrides against a Zod schema.\n * Use this when you have flag overrides in dot-notation form (e.g., { 'model.temperature': 0.7 })\n * and want to validate them against a schema before running evals.\n *\n * @param overrides - Flag overrides in dot-notation form\n * @param flagSchema - Zod schema to validate against\n */\nexport function validateFlagOverrides(overrides: FlagOverrides, flagSchema?: unknown): void {\n const result = collectFlagValidationErrors(overrides, flagSchema);\n if (!result.success) {\n printFlagValidationErrorsAndExit(result.errors);\n }\n}\n\n/**\n * Coerce string values to appropriate types.\n * Priority: boolean -> number -> JSON -> string\n */\nfunction coerceValue(raw: string): any {\n // Handle explicit boolean strings\n if (raw === 'true') return true;\n if (raw === 'false') return false;\n\n // Try number conversion\n const num = Number(raw);\n if (!Number.isNaN(num) && raw.trim() === num.toString()) {\n return num;\n }\n\n // Try JSON parsing (for objects/arrays)\n try {\n return JSON.parse(raw);\n } catch {\n // Fallback to string\n return raw;\n }\n}\n\n/**\n * Load and parse a JSON config file\n */\nfunction loadConfigFile(path: string): any {\n const abs = resolve(process.cwd(), path);\n try {\n const contents = readFileSync(abs, 'utf8');\n const parsed = JSON.parse(contents);\n\n if (typeof parsed !== 'object' || Array.isArray(parsed) || parsed === null) {\n console.error(\n `❌ Flags config must be a JSON object, got ${Array.isArray(parsed) ? 'array' : typeof parsed}`,\n );\n process.exit(1);\n }\n\n return parsed;\n } catch (err: any) {\n console.error(`❌ Could not read or parse flags config \"${path}\": ${err.message}`);\n process.exit(1);\n }\n}\n\n/**\n * Extract flag overrides with support for both CLI flags and config files.\n *\n * Supports CLI flags:\n * - --flag.temperature=0.9\n * - --flag.dryRun=true | false\n * - --flag.foo={\"bar\":1} (JSON literal)\n * - --flag.bare (interpreted as true)\n *\n * Or config file:\n * - --flags-config=path/to/config.json\n *\n * Enforces exclusive mode - cannot use both --flags-config and --flag.* together.\n */\nexport function extractOverrides(argv: string[]): {\n cleanedArgv: string[];\n overrides: FlagOverrides;\n} {\n const cleanedArgv: string[] = [];\n const overrides: FlagOverrides = {};\n let configPath: string | null = null;\n let hasCliFlags = false;\n let configPathCount = 0;\n\n for (let i = 0; i < argv.length; i++) {\n const token = argv[i];\n const configMatch = token.match(CONFIG_RE);\n const flagMatch = token.match(FLAG_RE);\n\n if (configMatch) {\n // Handle --flags-config\n configPathCount++;\n if (configPathCount > 1) {\n console.error('❌ Only one --flags-config can be supplied.');\n process.exit(1);\n }\n\n const value = configMatch[1]; // undefined means no equals sign\n const nextToken = argv.length > i + 1 ? argv[i + 1] : undefined;\n\n ensureNoSpaceSeparatedSyntax('flags-config', value, nextToken, 'config');\n\n if (!value) {\n console.error('❌ --flags-config requires a file path');\n console.error('💡 Use: --flags-config=path/to/config.json');\n process.exit(1);\n }\n\n configPath = value;\n\n // Don't add to cleanedArgv\n } else if (flagMatch) {\n // Handle --flag.*\n hasCliFlags = true;\n\n const key = flagMatch[1];\n const value = flagMatch[2]; // undefined means bare flag (boolean true)\n const nextToken = argv.length > i + 1 ? argv[i + 1] : undefined;\n\n ensureNoSpaceSeparatedSyntax(key, value, nextToken, 'flag');\n\n // If no value, treat as boolean true\n const finalValue = value === undefined ? 'true' : value;\n overrides[key] = coerceValue(finalValue);\n\n // Don't add to cleanedArgv\n } else {\n cleanedArgv.push(token);\n }\n }\n\n if (configPath && hasCliFlags) {\n console.error('❌ Cannot use both --flags-config and --flag.* arguments together.');\n console.error('Choose one approach:');\n console.error(' • Config file: --flags-config=my-flags.json');\n console.error(' • CLI flags: --flag.temperature=0.9 --flag.model=gpt-4o');\n process.exit(1);\n }\n\n if (configPath) {\n const configOverrides = loadConfigFile(configPath);\n return { cleanedArgv, overrides: configOverrides };\n }\n\n return { cleanedArgv, overrides };\n}\n","import {\n a as e,\n b as t,\n c as o\n} from \"./chunk-BVHSVHOK.js\";\n\n// src/node.ts\nimport { isatty as s } from \"tty\";\nvar r = process.env.FORCE_TTY !== void 0 || s(1);\nfunction n() {\n return t(r);\n}\nfunction a() {\n return o(r);\n}\nvar u = o(r);\nexport {\n a as createColors,\n u as default,\n e as getDefaultColors,\n n as isSupported\n};\n","// src/index.ts\nvar f = {\n reset: [0, 0],\n bold: [1, 22, \"\\x1B[22m\\x1B[1m\"],\n dim: [2, 22, \"\\x1B[22m\\x1B[2m\"],\n italic: [3, 23],\n underline: [4, 24],\n inverse: [7, 27],\n hidden: [8, 28],\n strikethrough: [9, 29],\n black: [30, 39],\n red: [31, 39],\n green: [32, 39],\n yellow: [33, 39],\n blue: [34, 39],\n magenta: [35, 39],\n cyan: [36, 39],\n white: [37, 39],\n gray: [90, 39],\n bgBlack: [40, 49],\n bgRed: [41, 49],\n bgGreen: [42, 49],\n bgYellow: [43, 49],\n bgBlue: [44, 49],\n bgMagenta: [45, 49],\n bgCyan: [46, 49],\n bgWhite: [47, 49],\n blackBright: [90, 39],\n redBright: [91, 39],\n greenBright: [92, 39],\n yellowBright: [93, 39],\n blueBright: [94, 39],\n magentaBright: [95, 39],\n cyanBright: [96, 39],\n whiteBright: [97, 39],\n bgBlackBright: [100, 49],\n bgRedBright: [101, 49],\n bgGreenBright: [102, 49],\n bgYellowBright: [103, 49],\n bgBlueBright: [104, 49],\n bgMagentaBright: [105, 49],\n bgCyanBright: [106, 49],\n bgWhiteBright: [107, 49]\n}, h = Object.entries(f);\nfunction a(n) {\n return String(n);\n}\na.open = \"\";\na.close = \"\";\nvar B = /* @__PURE__ */ h.reduce(\n (n, [e]) => (n[e] = a, n),\n { isColorSupported: !1 }\n);\nfunction m() {\n return { ...B };\n}\nfunction C(n = !1) {\n let e = typeof process != \"undefined\" ? process : void 0, i = (e == null ? void 0 : e.env) || {}, g = (e == null ? void 0 : e.argv) || [];\n return !(\"NO_COLOR\" in i || g.includes(\"--no-color\")) && (\"FORCE_COLOR\" in i || g.includes(\"--color\") || (e == null ? void 0 : e.platform) === \"win32\" || n && i.TERM !== \"dumb\" || \"CI\" in i) || typeof window != \"undefined\" && !!window.chrome;\n}\nfunction p(n = !1) {\n let e = C(n), i = (r, t, c, o) => {\n let l = \"\", s = 0;\n do\n l += r.substring(s, o) + c, s = o + t.length, o = r.indexOf(t, s);\n while (~o);\n return l + r.substring(s);\n }, g = (r, t, c = r) => {\n let o = (l) => {\n let s = String(l), b = s.indexOf(t, r.length);\n return ~b ? r + i(s, t, c, b) + t : r + s + t;\n };\n return o.open = r, o.close = t, o;\n }, u = {\n isColorSupported: e\n }, d = (r) => `\\x1B[${r}m`;\n for (let [r, t] of h)\n u[r] = e ? g(\n d(t[0]),\n d(t[1]),\n t[2]\n ) : a;\n return u;\n}\n\nexport {\n m as a,\n C as b,\n p as c\n};\n","import { Command, Argument, Option } from 'commander';\nimport { customAlphabet } from 'nanoid';\nimport { lstatSync } from 'node:fs';\nimport { runEvalWithContext } from '../utils/eval-context-runner';\nimport { validateFlagOverrides, type FlagOverrides } from '../utils/parse-flag-overrides';\nimport { isGlob } from '../utils/glob-utils';\nimport { loadConfig } from '../../config/loader';\nimport { AxiomCLIError } from '../../util/errors';\nimport { getAuthContext } from '../auth/global-auth';\nimport c from 'tinyrainbow';\n\nconst createRunId = customAlphabet('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', 10);\n\n// Module-level storage for console URL override\nlet consoleUrl: string | undefined;\nexport function getConsoleUrl(): string | undefined {\n return consoleUrl;\n}\n/**\n * Gets default token from auth context or falls back to env var\n */\nfunction getDefaultToken(value: unknown): string | undefined {\n if (typeof value === 'string') {\n return value;\n }\n const authContext = getAuthContext();\n return authContext?.token || process.env.AXIOM_TOKEN;\n}\n\n/**\n * Gets default URL from auth context or falls back to env var\n */\nfunction getDefaultUrl(value: unknown): string {\n if (typeof value === 'string') {\n return value;\n }\n const authContext = getAuthContext();\n return authContext?.url || process.env.AXIOM_URL || 'https://api.axiom.co';\n}\n\n/**\n * Gets default organization id from auth context or falls back to env var\n */\nfunction getDefaultOrgId(value: unknown): string | undefined {\n if (typeof value === 'string') {\n return value;\n }\n const authContext = getAuthContext();\n return authContext?.orgId ?? process.env.AXIOM_ORG_ID;\n}\n\nexport const loadEvalCommand = (program: Command, flagOverrides: FlagOverrides = {}) => {\n return program.addCommand(\n new Command('eval')\n .description('run evals locally')\n .addArgument(\n new Argument('[target]', 'file, directory, glob pattern, or eval name').default(\n '.',\n 'any *.eval.ts file in current directory',\n ),\n )\n .option('-w, --watch true', 'keep server running and watch for changes', false)\n .option('-t, --token <TOKEN>', 'axiom token', getDefaultToken)\n .option('-d, --dataset <DATASET>', 'axiom dataset name')\n .option('-u, --url <AXIOM URL>', 'axiom url', getDefaultUrl)\n .option('-o, --org-id <ORG ID>', 'axiom organization id', getDefaultOrgId)\n .option('-b, --baseline <BASELINE ID>', 'id of baseline evaluation to compare against')\n .option('--debug', 'run locally without any network operations', false)\n .option('--list', 'list evaluations and test cases without running them', false)\n /** Hides the option from the help output, but still allows it to be passed */\n .addOption(new Option('-c, --console-url <URL>', 'console url override').hideHelp())\n .action(async (target: string, options) => {\n try {\n // Propagate debug mode to processes that we can't reach otherwise (e.g., reporter, app instrumentation)\n if (options.debug) {\n process.env.AXIOM_DEBUG = 'true';\n }\n\n let include: string[] = [];\n let exclude: string[] | undefined;\n let testNamePattern: RegExp | undefined;\n\n const isGlobPattern = isGlob(target);\n\n // Load config file first to get defaults\n const { config: loadedConfig } = await loadConfig('.');\n\n // Validate CLI flags against schema\n validateFlagOverrides(flagOverrides, loadedConfig.eval.flagSchema);\n\n // Override config with CLI options if provided\n const config = {\n ...loadedConfig,\n eval: {\n ...loadedConfig.eval,\n ...(options.token && { token: options.token }),\n ...(options.url && { url: options.url }),\n ...(options.dataset && { dataset: options.dataset }),\n ...(options.orgId && { orgId: options.orgId }),\n },\n };\n\n if (isGlobPattern) {\n // Handle glob patterns like \"**/*.eval.ts\" or \"**/my-feature/*\"\n include = [target];\n } else {\n try {\n // Try to treat as file/directory path\n const stat = lstatSync(target);\n if (stat.isDirectory()) {\n include = config?.eval?.include || [];\n } else {\n // Single file\n include = [target];\n }\n } catch {\n // Path doesn't exist, treat as eval name\n testNamePattern = new RegExp(target, 'i');\n // Use config include patterns when searching by name\n include = config?.eval?.include || [];\n }\n }\n\n exclude = config?.eval?.exclude;\n\n if (!config?.eval?.instrumentation) {\n console.warn(\n c.yellow(\n '⚠ App instrumentation (`eval.instrumentation` in `axiom.config.ts`) not configured. Using default provider.',\n ),\n );\n console.log('');\n }\n\n const runId = createRunId();\n\n consoleUrl = options.consoleUrl;\n\n // Dynamic import to avoid loading vitest at CLI startup (breaks `npx axiom login`)\n let runVitestModule;\n try {\n runVitestModule = await import('../../evals/run-vitest');\n } catch (err: unknown) {\n if (\n err &&\n typeof err === 'object' &&\n 'code' in err &&\n (err.code === 'ERR_MODULE_NOT_FOUND' || err.code === 'MODULE_NOT_FOUND')\n ) {\n throw new AxiomCLIError('Failed to load vitest.');\n }\n throw err;\n }\n const { runVitest } = runVitestModule;\n\n await runEvalWithContext(flagOverrides, async () => {\n return runVitest('.', {\n watch: options.watch,\n baseline: options.baseline,\n include,\n exclude,\n testNamePattern,\n debug: options.debug,\n list: options.list,\n overrides: flagOverrides,\n config,\n runId,\n consoleUrl: options.consoleUrl,\n });\n });\n } catch (error) {\n if (error instanceof AxiomCLIError) {\n console.error(`\\n❌ ${error.message}\\n`);\n process.exit(1);\n }\n throw error;\n }\n }),\n );\n};\n","import { overrideFlags } from '../../context';\nimport { withEvalContext } from '../../evals/context/storage';\nimport { setGlobalFlagOverrides } from '../../evals/context/global-flags';\nimport type { FlagOverrides } from './parse-flag-overrides';\n\n/**\n * Run evaluation with flag overrides applied to the context.\n * This ensures flag overrides are established before any test files load.\n *\n * @param overrides - Flag overrides from CLI parsing\n * @param runFn - Function that runs the evaluation (typically runVitest)\n */\nexport async function runEvalWithContext<T>(\n overrides: FlagOverrides,\n runFn: () => Promise<T>,\n): Promise<T> {\n setGlobalFlagOverrides(overrides);\n\n return withEvalContext({ initialFlags: overrides }, async () => {\n // TODO: is this necessary? given the `setGlobalFlagOverrides` call above?\n if (Object.keys(overrides).length > 0) {\n overrideFlags(overrides);\n }\n\n return runFn();\n });\n}\n","import { getEvalContext, putOnSpan, EVAL_CONTEXT } from './evals/context/storage';\n\n/**\n * Override flag values for the current evaluation context with trace-specific isolation.\n * Now creates overlay contexts to prevent overrides from leaking to sibling operations.\n *\n * @internal - For framework use only. Use scope.overrideFlags() for typed flag access.\n * @param partial - Partial flag overrides\n */\nexport function overrideFlags(partial: Record<string, any>): void {\n const current = getEvalContext();\n\n if (!current) {\n if (process.env.NODE_ENV !== 'test') {\n console.warn('overrideFlags called outside of evaluation context');\n }\n return;\n }\n\n // Create overlay context instead of mutating the current one\n const overlayContext = {\n ...current,\n flags: { ...current.flags, ...partial }, // Merge for backwards compatibility\n parent: current,\n overrides: { ...partial },\n };\n\n // We need to update the current ALS context in place\n const currentCtx = EVAL_CONTEXT.get();\n if (currentCtx) {\n // Update current context to overlay\n Object.assign(currentCtx, overlayContext);\n }\n\n // Write all overridden flags to span\n for (const [key, value] of Object.entries(partial)) {\n putOnSpan('flag', key, value);\n }\n}\n","/**\n * Simple glob detection utility\n * Detects if a string contains glob pattern characters\n */\nexport function isGlob(str: string): boolean {\n // Check for glob characters: * ? [ ] { } !\n return /[*?[\\]{}!]/.test(str);\n}\n","import { loadConfig as c12LoadConfig } from 'c12';\nimport { defu } from 'defu';\nimport {\n createPartialDefaults,\n validateConfig,\n type AxiomConfig,\n type ResolvedAxiomConfig,\n} from './index';\nimport { AxiomCLIError, errorToString } from '../util/errors';\n\n/**\n * Custom merger that uses defu but overrides include/exclude arrays instead of merging them\n */\nfunction customMerger(target: any, source: any): any {\n const merged = defu(source, target);\n\n // If source explicitly has eval.include, override it instead of merging\n if (source?.eval && 'include' in source.eval) {\n merged.eval.include = source.eval.include;\n }\n\n // If source explicitly has eval.flagSchema, use it directly (defu mangles Zod objects)\n if (source?.eval && 'flagSchema' in source.eval) {\n merged.eval.flagSchema = source.eval.flagSchema;\n }\n\n return merged;\n}\n\n/**\n * Result of loading a config file\n */\nexport interface LoadConfigResult {\n config: ResolvedAxiomConfig;\n}\n\n/**\n * Load Axiom configuration from axiom.config.ts (or .js, .mjs, etc.)\n *\n * @param cwd - The directory to search for config file (defaults to process.cwd())\n * @returns The loaded config and the path to the config file (if found)\n *\n * @example\n * ```typescript\n * const { config } = await loadConfig();\n * ```\n */\nexport async function loadConfig(cwd: string = process.cwd()): Promise<LoadConfigResult> {\n try {\n const defaults = createPartialDefaults();\n\n const result = await c12LoadConfig<AxiomConfig>({\n name: 'axiom',\n cwd,\n // Support common config file extensions\n configFile: 'axiom.config',\n // Don't use defaultConfig - we'll merge manually to control array behavior\n // Disable configs other than .ts/.js/.mts/.mjs/.cts/.cjs\n rcFile: false,\n globalRc: false,\n packageJson: false,\n giget: false,\n });\n\n // Manually merge with defaults, overriding `include` instead of merging\n const mergedConfig = customMerger(defaults, result.config);\n const validatedConfig = validateConfig(mergedConfig);\n\n return {\n config: validatedConfig,\n };\n } catch (error) {\n if (error instanceof AxiomCLIError) {\n throw error;\n }\n // c12 throws if config file has errors\n throw new AxiomCLIError(`Failed to load config file: ${errorToString(error)}`);\n }\n}\n"],"mappings":"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","names":["r","s","u"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli/utils/parse-flag-overrides.ts","../../../node_modules/.pnpm/tinyrainbow@2.0.0/node_modules/tinyrainbow/dist/chunk-BVHSVHOK.js","../../../node_modules/.pnpm/tinyrainbow@2.0.0/node_modules/tinyrainbow/dist/node.js","../src/cli/commands/eval.command.ts","../src/context.ts","../src/cli/utils/eval-context-runner.ts","../src/cli/utils/glob-utils.ts","../src/config/loader.ts"],"sourcesContent":["import { type ZodError, type ZodObject, type z } from 'zod';\nimport { formatZodErrors, generateFlagExamples } from './format-zod-errors.js';\nimport { readFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport { dotNotationToNested, isValidPath, parsePath } from '../../util/dot-path.js';\nimport { makeDeepPartial } from '../../util/deep-partial-schema.js';\nimport { assertZodV4 } from '../../util/zod-internals.js';\n\nexport interface FlagOverrides {\n [key: string]: any;\n}\n\nconst FLAG_RE = /^--flag\\.([^=]+)(?:=(.*))?$/;\nconst CONFIG_RE = /^--flags-config(?:=(.*))?$/;\n\nfunction ensureNoSpaceSeparatedSyntax(\n flagName: string,\n value: string | undefined,\n nextToken: string | undefined,\n flagType: 'flag' | 'config',\n): void {\n if (value === undefined && nextToken !== undefined) {\n if (\n flagType === 'flag' &&\n !nextToken.startsWith('-') &&\n nextToken !== 'true' &&\n nextToken !== 'false'\n ) {\n console.error(`❌ Invalid syntax: --flag.${flagName} ${nextToken}`);\n console.error(`💡 Use: --flag.${flagName}=${nextToken}`);\n process.exit(1);\n } else if (flagType === 'config' && !nextToken.startsWith('-')) {\n console.error(`❌ Invalid syntax: --flags-config ${nextToken}`);\n console.error(`💡 Use: --flags-config=${nextToken}`);\n process.exit(1);\n }\n }\n}\n\n/**\n * Extract and validate flag overrides using a Zod schema\n */\nexport function extractAndValidateFlagOverrides<S extends z.ZodObject<any>>(\n argv: string[],\n flagSchema?: S,\n): {\n cleanedArgv: string[];\n overrides: S extends ZodObject<any> ? z.output<S> : FlagOverrides;\n} {\n if (flagSchema) {\n assertZodV4(flagSchema, 'flagSchema');\n }\n\n const { cleanedArgv, overrides } = extractOverrides(argv);\n\n if (flagSchema && Object.keys(overrides).length > 0) {\n // Use deep partial schema - allows partial nested objects\n const deepPartialSchema = makeDeepPartial(flagSchema as ZodObject<any>);\n const result = deepPartialSchema.safeParse(overrides);\n\n if (!result.success) {\n console.error('❌ Invalid flags:');\n console.error(formatZodErrors(result.error));\n\n const examples = generateFlagExamples(result.error);\n if (examples.length > 0) {\n console.error('\\n💡 Examples:');\n examples.forEach((example) => console.error(` ${example}`));\n }\n\n process.exit(1);\n }\n\n return { cleanedArgv, overrides: result.data as any };\n }\n\n return { cleanedArgv, overrides: overrides as any };\n}\n\nexport type FlagValidationError =\n | { type: 'invalid_path'; path: string }\n | { type: 'invalid_value'; zodError: ZodError };\n\nexport interface FlagValidationResult {\n success: boolean;\n errors: FlagValidationError[];\n}\n\n/**\n * Validate already-parsed flag overrides against a Zod schema.\n * Returns validation result without side effects (no console output, no process.exit).\n *\n * @param overrides - Flag overrides in dot-notation form (e.g., { 'model.temperature': 0.7 })\n * @param flagSchema - Zod schema to validate against\n * @returns Validation result with any errors found\n */\nexport function collectFlagValidationErrors(\n overrides: FlagOverrides,\n flagSchema?: unknown,\n): FlagValidationResult {\n // No schema provided = no validation, any flags allowed\n if (!flagSchema || Object.keys(overrides).length === 0) {\n return { success: true, errors: [] };\n }\n\n assertZodV4(flagSchema, 'flagSchema');\n\n const schema = flagSchema as any;\n const errors: FlagValidationError[] = [];\n\n // First pass: check all paths exist in schema\n for (const dotPath of Object.keys(overrides)) {\n const segments = parsePath(dotPath);\n if (!isValidPath(schema, segments)) {\n errors.push({ type: 'invalid_path', path: dotPath });\n }\n }\n\n // If there are invalid paths, don't proceed to value validation\n if (errors.length > 0) {\n return { success: false, errors };\n }\n\n // Second pass: validate values using nested object approach with deep partial\n // This allows providing only some flags without requiring all nested objects\n const nestedObject = dotNotationToNested(overrides);\n const deepPartialSchema = makeDeepPartial(schema);\n const result = deepPartialSchema.safeParse(nestedObject);\n\n if (!result.success) {\n errors.push({ type: 'invalid_value', zodError: result.error });\n }\n\n return { success: errors.length === 0, errors };\n}\n\n/**\n * Print flag validation errors to console and exit.\n */\nexport function printFlagValidationErrorsAndExit(errors: FlagValidationError[]): never {\n console.error('❌ Invalid CLI flags:');\n\n for (const error of errors) {\n if (error.type === 'invalid_path') {\n console.error(` • flag '${error.path}': Invalid flag path`);\n } else {\n console.error(formatZodErrors(error.zodError));\n\n const examples = generateFlagExamples(error.zodError);\n if (examples.length > 0) {\n console.error('\\n💡 Valid examples:');\n examples.forEach((example) => console.error(` ${example}`));\n }\n }\n }\n\n process.exit(1);\n}\n\n/**\n * Validate already-parsed flag overrides against a Zod schema.\n * Use this when you have flag overrides in dot-notation form (e.g., { 'model.temperature': 0.7 })\n * and want to validate them against a schema before running evals.\n *\n * @param overrides - Flag overrides in dot-notation form\n * @param flagSchema - Zod schema to validate against\n */\nexport function validateFlagOverrides(overrides: FlagOverrides, flagSchema?: unknown): void {\n const result = collectFlagValidationErrors(overrides, flagSchema);\n if (!result.success) {\n printFlagValidationErrorsAndExit(result.errors);\n }\n}\n\n/**\n * Coerce string values to appropriate types.\n * Priority: boolean -> number -> JSON -> string\n */\nfunction coerceValue(raw: string): any {\n // Handle explicit boolean strings\n if (raw === 'true') return true;\n if (raw === 'false') return false;\n\n // Try number conversion\n const num = Number(raw);\n if (!Number.isNaN(num) && raw.trim() === num.toString()) {\n return num;\n }\n\n // Try JSON parsing (for objects/arrays)\n try {\n return JSON.parse(raw);\n } catch {\n // Fallback to string\n return raw;\n }\n}\n\n/**\n * Load and parse a JSON config file\n */\nfunction loadConfigFile(path: string): any {\n const abs = resolve(process.cwd(), path);\n try {\n const contents = readFileSync(abs, 'utf8');\n const parsed = JSON.parse(contents);\n\n if (typeof parsed !== 'object' || Array.isArray(parsed) || parsed === null) {\n console.error(\n `❌ Flags config must be a JSON object, got ${Array.isArray(parsed) ? 'array' : typeof parsed}`,\n );\n process.exit(1);\n }\n\n return parsed;\n } catch (err: any) {\n console.error(`❌ Could not read or parse flags config \"${path}\": ${err.message}`);\n process.exit(1);\n }\n}\n\n/**\n * Extract flag overrides with support for both CLI flags and config files.\n *\n * Supports CLI flags:\n * - --flag.temperature=0.9\n * - --flag.dryRun=true | false\n * - --flag.foo={\"bar\":1} (JSON literal)\n * - --flag.bare (interpreted as true)\n *\n * Or config file:\n * - --flags-config=path/to/config.json\n *\n * Enforces exclusive mode - cannot use both --flags-config and --flag.* together.\n */\nexport function extractOverrides(argv: string[]): {\n cleanedArgv: string[];\n overrides: FlagOverrides;\n} {\n const cleanedArgv: string[] = [];\n const overrides: FlagOverrides = {};\n let configPath: string | null = null;\n let hasCliFlags = false;\n let configPathCount = 0;\n\n for (let i = 0; i < argv.length; i++) {\n const token = argv[i];\n const configMatch = token.match(CONFIG_RE);\n const flagMatch = token.match(FLAG_RE);\n\n if (configMatch) {\n // Handle --flags-config\n configPathCount++;\n if (configPathCount > 1) {\n console.error('❌ Only one --flags-config can be supplied.');\n process.exit(1);\n }\n\n const value = configMatch[1]; // undefined means no equals sign\n const nextToken = argv.length > i + 1 ? argv[i + 1] : undefined;\n\n ensureNoSpaceSeparatedSyntax('flags-config', value, nextToken, 'config');\n\n if (!value) {\n console.error('❌ --flags-config requires a file path');\n console.error('💡 Use: --flags-config=path/to/config.json');\n process.exit(1);\n }\n\n configPath = value;\n\n // Don't add to cleanedArgv\n } else if (flagMatch) {\n // Handle --flag.*\n hasCliFlags = true;\n\n const key = flagMatch[1];\n const value = flagMatch[2]; // undefined means bare flag (boolean true)\n const nextToken = argv.length > i + 1 ? argv[i + 1] : undefined;\n\n ensureNoSpaceSeparatedSyntax(key, value, nextToken, 'flag');\n\n // If no value, treat as boolean true\n const finalValue = value === undefined ? 'true' : value;\n overrides[key] = coerceValue(finalValue);\n\n // Don't add to cleanedArgv\n } else {\n cleanedArgv.push(token);\n }\n }\n\n if (configPath && hasCliFlags) {\n console.error('❌ Cannot use both --flags-config and --flag.* arguments together.');\n console.error('Choose one approach:');\n console.error(' • Config file: --flags-config=my-flags.json');\n console.error(' • CLI flags: --flag.temperature=0.9 --flag.model=gpt-4o');\n process.exit(1);\n }\n\n if (configPath) {\n const configOverrides = loadConfigFile(configPath);\n return { cleanedArgv, overrides: configOverrides };\n }\n\n return { cleanedArgv, overrides };\n}\n","// src/index.ts\nvar f = {\n reset: [0, 0],\n bold: [1, 22, \"\\x1B[22m\\x1B[1m\"],\n dim: [2, 22, \"\\x1B[22m\\x1B[2m\"],\n italic: [3, 23],\n underline: [4, 24],\n inverse: [7, 27],\n hidden: [8, 28],\n strikethrough: [9, 29],\n black: [30, 39],\n red: [31, 39],\n green: [32, 39],\n yellow: [33, 39],\n blue: [34, 39],\n magenta: [35, 39],\n cyan: [36, 39],\n white: [37, 39],\n gray: [90, 39],\n bgBlack: [40, 49],\n bgRed: [41, 49],\n bgGreen: [42, 49],\n bgYellow: [43, 49],\n bgBlue: [44, 49],\n bgMagenta: [45, 49],\n bgCyan: [46, 49],\n bgWhite: [47, 49],\n blackBright: [90, 39],\n redBright: [91, 39],\n greenBright: [92, 39],\n yellowBright: [93, 39],\n blueBright: [94, 39],\n magentaBright: [95, 39],\n cyanBright: [96, 39],\n whiteBright: [97, 39],\n bgBlackBright: [100, 49],\n bgRedBright: [101, 49],\n bgGreenBright: [102, 49],\n bgYellowBright: [103, 49],\n bgBlueBright: [104, 49],\n bgMagentaBright: [105, 49],\n bgCyanBright: [106, 49],\n bgWhiteBright: [107, 49]\n}, h = Object.entries(f);\nfunction a(n) {\n return String(n);\n}\na.open = \"\";\na.close = \"\";\nvar B = /* @__PURE__ */ h.reduce(\n (n, [e]) => (n[e] = a, n),\n { isColorSupported: !1 }\n);\nfunction m() {\n return { ...B };\n}\nfunction C(n = !1) {\n let e = typeof process != \"undefined\" ? process : void 0, i = (e == null ? void 0 : e.env) || {}, g = (e == null ? void 0 : e.argv) || [];\n return !(\"NO_COLOR\" in i || g.includes(\"--no-color\")) && (\"FORCE_COLOR\" in i || g.includes(\"--color\") || (e == null ? void 0 : e.platform) === \"win32\" || n && i.TERM !== \"dumb\" || \"CI\" in i) || typeof window != \"undefined\" && !!window.chrome;\n}\nfunction p(n = !1) {\n let e = C(n), i = (r, t, c, o) => {\n let l = \"\", s = 0;\n do\n l += r.substring(s, o) + c, s = o + t.length, o = r.indexOf(t, s);\n while (~o);\n return l + r.substring(s);\n }, g = (r, t, c = r) => {\n let o = (l) => {\n let s = String(l), b = s.indexOf(t, r.length);\n return ~b ? r + i(s, t, c, b) + t : r + s + t;\n };\n return o.open = r, o.close = t, o;\n }, u = {\n isColorSupported: e\n }, d = (r) => `\\x1B[${r}m`;\n for (let [r, t] of h)\n u[r] = e ? g(\n d(t[0]),\n d(t[1]),\n t[2]\n ) : a;\n return u;\n}\n\nexport {\n m as a,\n C as b,\n p as c\n};\n","import {\n a as e,\n b as t,\n c as o\n} from \"./chunk-BVHSVHOK.js\";\n\n// src/node.ts\nimport { isatty as s } from \"tty\";\nvar r = process.env.FORCE_TTY !== void 0 || s(1);\nfunction n() {\n return t(r);\n}\nfunction a() {\n return o(r);\n}\nvar u = o(r);\nexport {\n a as createColors,\n u as default,\n e as getDefaultColors,\n n as isSupported\n};\n","import { Command, Argument, Option } from 'commander';\nimport { customAlphabet } from 'nanoid';\nimport { lstatSync } from 'node:fs';\nimport { runEvalWithContext } from '../utils/eval-context-runner';\nimport { validateFlagOverrides, type FlagOverrides } from '../utils/parse-flag-overrides';\nimport { isGlob } from '../utils/glob-utils';\nimport { loadConfig } from '../../config/loader';\nimport { AxiomCLIError } from '../../util/errors';\nimport { getAuthContext } from '../auth/global-auth';\nimport c from 'tinyrainbow';\n\nconst createRunId = customAlphabet('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', 10);\n\n// Module-level storage for console URL override\nlet consoleUrl: string | undefined;\nexport function getConsoleUrl(): string | undefined {\n return consoleUrl;\n}\n/**\n * Gets default token from auth context or falls back to env var\n */\nfunction getDefaultToken(value: unknown): string | undefined {\n if (typeof value === 'string') {\n return value;\n }\n const authContext = getAuthContext();\n return authContext?.token || process.env.AXIOM_TOKEN;\n}\n\n/**\n * Gets default URL from auth context or falls back to env var\n */\nfunction getDefaultUrl(value: unknown): string {\n if (typeof value === 'string') {\n return value;\n }\n const authContext = getAuthContext();\n return authContext?.url || process.env.AXIOM_URL || 'https://api.axiom.co';\n}\n\n/**\n * Gets default organization id from auth context or falls back to env var\n */\nfunction getDefaultOrgId(value: unknown): string | undefined {\n if (typeof value === 'string') {\n return value;\n }\n const authContext = getAuthContext();\n return authContext?.orgId ?? process.env.AXIOM_ORG_ID;\n}\n\nexport const loadEvalCommand = (program: Command, flagOverrides: FlagOverrides = {}) => {\n return program.addCommand(\n new Command('eval')\n .description('run evals locally')\n .addArgument(\n new Argument('[target]', 'file, directory, glob pattern, or eval name').default(\n '.',\n 'any *.eval.ts file in current directory',\n ),\n )\n .option('-w, --watch true', 'keep server running and watch for changes', false)\n .option('-t, --token <TOKEN>', 'axiom token', getDefaultToken)\n .option('-d, --dataset <DATASET>', 'axiom dataset name')\n .option('-u, --url <AXIOM URL>', 'axiom url', getDefaultUrl)\n .option('-o, --org-id <ORG ID>', 'axiom organization id', getDefaultOrgId)\n .option('-b, --baseline <BASELINE ID>', 'id of baseline evaluation to compare against')\n .option('--debug', 'run locally without any network operations', false)\n .option('--list', 'list evaluations and test cases without running them', false)\n /** Hides the option from the help output, but still allows it to be passed */\n .addOption(new Option('-c, --console-url <URL>', 'console url override').hideHelp())\n .action(async (target: string, options) => {\n try {\n // Propagate debug mode to processes that we can't reach otherwise (e.g., reporter, app instrumentation)\n if (options.debug) {\n process.env.AXIOM_DEBUG = 'true';\n }\n\n let include: string[] = [];\n let exclude: string[] | undefined;\n let testNamePattern: RegExp | undefined;\n\n const isGlobPattern = isGlob(target);\n\n // Load config file first to get defaults\n const { config: loadedConfig } = await loadConfig('.');\n\n // Validate CLI flags against schema\n validateFlagOverrides(flagOverrides, loadedConfig.eval.flagSchema);\n\n // Override config with CLI options if provided\n const config = {\n ...loadedConfig,\n eval: {\n ...loadedConfig.eval,\n ...(options.token && { token: options.token }),\n ...(options.url && { url: options.url }),\n ...(options.dataset && { dataset: options.dataset }),\n ...(options.orgId && { orgId: options.orgId }),\n },\n };\n\n if (isGlobPattern) {\n // Handle glob patterns like \"**/*.eval.ts\" or \"**/my-feature/*\"\n include = [target];\n } else {\n try {\n // Try to treat as file/directory path\n const stat = lstatSync(target);\n if (stat.isDirectory()) {\n include = config?.eval?.include || [];\n } else {\n // Single file\n include = [target];\n }\n } catch {\n // Path doesn't exist, treat as eval name\n testNamePattern = new RegExp(target, 'i');\n // Use config include patterns when searching by name\n include = config?.eval?.include || [];\n }\n }\n\n exclude = config?.eval?.exclude;\n\n if (!config?.eval?.instrumentation) {\n console.warn(\n c.yellow(\n '⚠ App instrumentation (`eval.instrumentation` in `axiom.config.ts`) not configured. Using default provider.',\n ),\n );\n console.log('');\n }\n\n const runId = createRunId();\n\n consoleUrl = options.consoleUrl;\n\n // Dynamic import to avoid loading vitest at CLI startup (breaks `npx axiom login`)\n let runVitestModule;\n try {\n runVitestModule = await import('../../evals/run-vitest');\n } catch (err: unknown) {\n if (\n err &&\n typeof err === 'object' &&\n 'code' in err &&\n (err.code === 'ERR_MODULE_NOT_FOUND' || err.code === 'MODULE_NOT_FOUND')\n ) {\n throw new AxiomCLIError('Failed to load vitest.');\n }\n throw err;\n }\n const { runVitest } = runVitestModule;\n\n await runEvalWithContext(flagOverrides, async () => {\n return runVitest('.', {\n watch: options.watch,\n baseline: options.baseline,\n include,\n exclude,\n testNamePattern,\n debug: options.debug,\n list: options.list,\n overrides: flagOverrides,\n config,\n runId,\n consoleUrl: options.consoleUrl,\n });\n });\n } catch (error) {\n if (error instanceof AxiomCLIError) {\n console.error(`\\n❌ ${error.message}\\n`);\n process.exit(1);\n }\n throw error;\n }\n }),\n );\n};\n","import { getEvalContext, putOnSpan, EVAL_CONTEXT } from './evals/context/storage';\n\n/**\n * Override flag values for the current evaluation context with trace-specific isolation.\n * Now creates overlay contexts to prevent overrides from leaking to sibling operations.\n *\n * @internal - For framework use only. Use scope.overrideFlags() for typed flag access.\n * @param partial - Partial flag overrides\n */\nexport function overrideFlags(partial: Record<string, any>): void {\n const current = getEvalContext();\n\n if (!current) {\n if (process.env.NODE_ENV !== 'test') {\n console.warn('overrideFlags called outside of evaluation context');\n }\n return;\n }\n\n // Create overlay context instead of mutating the current one\n const overlayContext = {\n ...current,\n flags: { ...current.flags, ...partial }, // Merge for backwards compatibility\n parent: current,\n overrides: { ...partial },\n };\n\n // We need to update the current ALS context in place\n const currentCtx = EVAL_CONTEXT.get();\n if (currentCtx) {\n // Update current context to overlay\n Object.assign(currentCtx, overlayContext);\n }\n\n // Write all overridden flags to span\n for (const [key, value] of Object.entries(partial)) {\n putOnSpan('flag', key, value);\n }\n}\n","import { overrideFlags } from '../../context';\nimport { withEvalContext } from '../../evals/context/storage';\nimport { setGlobalFlagOverrides } from '../../evals/context/global-flags';\nimport type { FlagOverrides } from './parse-flag-overrides';\n\n/**\n * Run evaluation with flag overrides applied to the context.\n * This ensures flag overrides are established before any test files load.\n *\n * @param overrides - Flag overrides from CLI parsing\n * @param runFn - Function that runs the evaluation (typically runVitest)\n */\nexport async function runEvalWithContext<T>(\n overrides: FlagOverrides,\n runFn: () => Promise<T>,\n): Promise<T> {\n setGlobalFlagOverrides(overrides);\n\n return withEvalContext({ initialFlags: overrides }, async () => {\n // TODO: is this necessary? given the `setGlobalFlagOverrides` call above?\n if (Object.keys(overrides).length > 0) {\n overrideFlags(overrides);\n }\n\n return runFn();\n });\n}\n","/**\n * Simple glob detection utility\n * Detects if a string contains glob pattern characters\n */\nexport function isGlob(str: string): boolean {\n // Check for glob characters: * ? [ ] { } !\n return /[*?[\\]{}!]/.test(str);\n}\n","import { loadConfig as c12LoadConfig } from 'c12';\nimport { defu } from 'defu';\nimport {\n createPartialDefaults,\n validateConfig,\n type AxiomConfig,\n type ResolvedAxiomConfig,\n} from './index';\nimport { AxiomCLIError, errorToString } from '../util/errors';\n\n/**\n * Custom merger that uses defu but overrides include/exclude arrays instead of merging them\n */\nfunction customMerger(target: any, source: any): any {\n const merged = defu(source, target);\n\n // If source explicitly has eval.include, override it instead of merging\n if (source?.eval && 'include' in source.eval) {\n merged.eval.include = source.eval.include;\n }\n\n // If source explicitly has eval.flagSchema, use it directly (defu mangles Zod objects)\n if (source?.eval && 'flagSchema' in source.eval) {\n merged.eval.flagSchema = source.eval.flagSchema;\n }\n\n return merged;\n}\n\n/**\n * Result of loading a config file\n */\nexport interface LoadConfigResult {\n config: ResolvedAxiomConfig;\n}\n\n/**\n * Load Axiom configuration from axiom.config.ts (or .js, .mjs, etc.)\n *\n * @param cwd - The directory to search for config file (defaults to process.cwd())\n * @returns The loaded config and the path to the config file (if found)\n *\n * @example\n * ```typescript\n * const { config } = await loadConfig();\n * ```\n */\nexport async function loadConfig(cwd: string = process.cwd()): Promise<LoadConfigResult> {\n try {\n const defaults = createPartialDefaults();\n\n const result = await c12LoadConfig<AxiomConfig>({\n name: 'axiom',\n cwd,\n // Support common config file extensions\n configFile: 'axiom.config',\n // Don't use defaultConfig - we'll merge manually to control array behavior\n // Disable configs other than .ts/.js/.mts/.mjs/.cts/.cjs\n rcFile: false,\n globalRc: false,\n packageJson: false,\n giget: false,\n });\n\n // Manually merge with defaults, overriding `include` instead of merging\n const mergedConfig = customMerger(defaults, result.config);\n const validatedConfig = validateConfig(mergedConfig);\n\n return {\n config: validatedConfig,\n };\n } catch (error) {\n if (error instanceof AxiomCLIError) {\n throw error;\n }\n // c12 throws if config file has errors\n throw new AxiomCLIError(`Failed to load config file: ${errorToString(error)}`);\n }\n}\n"],"mappings":"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","names":["r","s","u"]}
|
|
@@ -1,15 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AxiomCLIError
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import {
|
|
5
|
-
init_esm_shims
|
|
6
|
-
} from "./chunk-4VNFFUM5.js";
|
|
7
|
-
|
|
8
|
-
// src/cli/auth/global-auth.ts
|
|
9
|
-
init_esm_shims();
|
|
3
|
+
} from "./chunk-ISSDOC43.js";
|
|
10
4
|
|
|
11
5
|
// src/cli/auth/config.ts
|
|
12
|
-
init_esm_shims();
|
|
13
6
|
import { promises as fs } from "fs";
|
|
14
7
|
import path from "path";
|
|
15
8
|
import os from "os";
|
|
@@ -81,17 +74,9 @@ async function setupGlobalAuth() {
|
|
|
81
74
|
}
|
|
82
75
|
|
|
83
76
|
// src/config/index.ts
|
|
84
|
-
init_esm_shims();
|
|
85
77
|
import "zod";
|
|
86
78
|
|
|
87
|
-
// src/cli/auth/index.ts
|
|
88
|
-
init_esm_shims();
|
|
89
|
-
|
|
90
|
-
// src/cli/auth/types.ts
|
|
91
|
-
init_esm_shims();
|
|
92
|
-
|
|
93
79
|
// src/cli/auth/oauth.ts
|
|
94
|
-
init_esm_shims();
|
|
95
80
|
import { randomBytes, createHash } from "crypto";
|
|
96
81
|
var OAUTH_CLIENT_ID = "264d906a404efc209b027f6595e6b616";
|
|
97
82
|
var OAUTH_AUTH_PATH = "/oauth/authorize";
|
|
@@ -146,7 +131,6 @@ var OAuth = class {
|
|
|
146
131
|
};
|
|
147
132
|
|
|
148
133
|
// src/cli/auth/api.ts
|
|
149
|
-
init_esm_shims();
|
|
150
134
|
async function fetchOrganizations(token, apiBaseUrl) {
|
|
151
135
|
const response = await fetch(`${apiBaseUrl}/v2/orgs`, {
|
|
152
136
|
headers: {
|
|
@@ -174,7 +158,6 @@ async function verifyToken(token, orgId, apiBaseUrl) {
|
|
|
174
158
|
}
|
|
175
159
|
|
|
176
160
|
// src/cli/auth/callback-server.ts
|
|
177
|
-
init_esm_shims();
|
|
178
161
|
import http from "http";
|
|
179
162
|
function escapeHtml(text) {
|
|
180
163
|
const map = {
|
|
@@ -423,4 +406,4 @@ export {
|
|
|
423
406
|
createPartialDefaults,
|
|
424
407
|
validateConfig
|
|
425
408
|
};
|
|
426
|
-
//# sourceMappingURL=chunk-
|
|
409
|
+
//# sourceMappingURL=chunk-3VKWOZAQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/auth/config.ts","../src/cli/auth/global-auth.ts","../src/config/index.ts","../src/cli/auth/oauth.ts","../src/cli/auth/api.ts","../src/cli/auth/callback-server.ts"],"sourcesContent":["import { promises as fs } from 'fs';\nimport path from 'path';\nimport os from 'os';\nimport type { Config, Profile } from './types';\n\nconst CONFIG_FILENAME = 'config.json';\nconst CONFIG_DIR_NAME = 'axiom';\n\n/**\n * Gets the OS-appropriate config directory path.\n * - Linux/Unix: ~/.config/axiom\n * - macOS: ~/Library/Application Support/axiom\n * - Windows: %APPDATA%\\axiom\n */\nexport function getConfigDir(): string {\n const platform = process.platform;\n const homeDir = os.homedir();\n\n // Linux/Unix: ~/.config/axiom (or $XDG_CONFIG_HOME/axiom if set)\n const xdgConfigHome = process.env.XDG_CONFIG_HOME;\n if (xdgConfigHome) {\n return path.join(xdgConfigHome, CONFIG_DIR_NAME);\n }\n\n if (platform === 'win32') {\n // Windows: %APPDATA%\\axiom\n const appData = process.env.APPDATA;\n if (appData) {\n return path.join(appData, CONFIG_DIR_NAME);\n }\n // Fallback to home directory if APPDATA is not set\n return path.join(homeDir, 'AppData', 'Roaming', CONFIG_DIR_NAME);\n }\n\n return path.join(homeDir, '.config', CONFIG_DIR_NAME);\n}\n\n/**\n * Gets the full path to the config file.\n */\nexport function getGlobalConfigPath(): string {\n return path.join(getConfigDir(), CONFIG_FILENAME);\n}\n\nexport async function loadGlobalConfig(): Promise<Config> {\n const configPath = getGlobalConfigPath();\n try {\n const content = await fs.readFile(configPath, 'utf-8');\n return JSON.parse(content);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n return { profiles: {} };\n }\n throw error;\n }\n}\n\nexport async function saveGlobalConfig(config: Config): Promise<void> {\n const configPath = getGlobalConfigPath();\n const configDir = path.dirname(configPath);\n const content = JSON.stringify(config, null, 2);\n\n // Ensure config directory exists\n await fs.mkdir(configDir, { recursive: true, mode: 0o700 });\n\n // Write config file\n await fs.writeFile(configPath, content, 'utf-8');\n\n // Set restrictive permissions (read/write for owner only)\n // Note: chmod is a no-op on Windows, but that's fine\n await fs.chmod(configPath, 0o600);\n}\n\nexport function getActiveProfile(config: Config): Profile | null {\n // Get from config\n const profileName = config.active_profile;\n if (!profileName) return null;\n\n const profile = config.profiles[profileName];\n if (!profile) return null;\n\n return profile;\n}\n","import { loadGlobalConfig, getActiveProfile } from './config';\n\nexport interface AuthContext {\n readonly token: string;\n readonly url: string;\n readonly orgId: string;\n}\n\n/**\n * Module-level store for auth context.\n * This provides explicit, type-safe access to auth credentials.\n */\nlet authContext: AuthContext | null = null;\n\n/**\n * Gets the current auth context.\n * Returns null if auth hasn't been set up yet.\n */\nexport function getAuthContext(): AuthContext | null {\n return authContext;\n}\n\n/**\n * Sets up authentication context by loading config and storing it.\n *\n * @throws {AxiomCLIError} If no active profile is found\n */\nexport async function setupGlobalAuth(): Promise<AuthContext | null> {\n const config = await loadGlobalConfig();\n const profile = getActiveProfile(config);\n if (profile) {\n // Store in module-level context for explicit access\n authContext = {\n token: profile.token,\n url: profile.url,\n orgId: profile.org_id,\n };\n }\n\n return authContext;\n}\n\n/**\n * Resets the auth context (useful for testing).\n */\nexport function resetAuthContext(): void {\n authContext = null;\n}\n","import type { TracerProvider } from '@opentelemetry/api';\nimport { type z } from 'zod';\nimport { AxiomCLIError } from '../util/errors';\nimport { getAuthContext } from '../cli/auth';\n\n/**\n * Utility type to make all properties in T required recursively.\n * Keeps the types as-is but removes the optionality.\n */\ntype DeepRequired<T> =\n T extends Array<infer U>\n ? Array<U>\n : T extends (...args: any[]) => any\n ? T\n : T extends object\n ? {\n [P in keyof T]-?: DeepRequired<T[P]>;\n }\n : T;\n\n/**\n * Axiom API connection configuration\n */\nexport interface AxiomConnectionConfig {\n /**\n * Axiom API URL\n * @default 'https://api.axiom.co'\n * @example 'https://api.axiom.co'\n */\n url?: string;\n\n /**\n * Axiom Edge URL for ingest and query operations.\n * When set, this URL is used for sending traces and querying data,\n * while the regular `url` is used for API/console operations.\n * Falls back to `url` if not specified.\n * @example 'https://eu-central-1.aws.edge.axiom.co'\n */\n edgeUrl?: string;\n\n /**\n * Axiom API token (can be undefined if not set)\n * @example process.env.AXIOM_TOKEN\n */\n token?: string | undefined;\n\n /**\n * Axiom dataset name\n * @example process.env.AXIOM_DATASET\n */\n dataset?: string;\n\n /**\n * Axiom organization ID\n * @example process.env.AXIOM_ORG_ID\n */\n orgId?: string;\n}\n\n/**\n * Options passed to the instrumentation hook\n * - url: string\n * - token: string\n * - dataset: string\n */\nexport interface AxiomEvalInstrumentationOptions {\n url: string;\n edgeUrl: string;\n token: string;\n dataset: string;\n orgId?: string;\n}\n\n/**\n * Result returned from the instrumentation hook\n */\nexport interface AxiomEvalInstrumentationResult {\n /**\n * TracerProvider to be flushed when eval finishes.\n *\n * If you use the NodeSDK or register your provider globally, you don't need to return it\n * here as the NodeSDK automatically flushes the global provider.\n *\n * Only return a provider if you want Axiom to explicitly flush it for you and it's not\n * registered as the global tracer provider.\n */\n provider?: TracerProvider;\n}\n\nexport type SyncAxiomEvalInstrumentationHook = (\n options: AxiomEvalInstrumentationOptions,\n) => AxiomEvalInstrumentationResult;\n\nexport type AsyncAxiomEvalInstrumentationHook = (\n options: AxiomEvalInstrumentationOptions,\n) => Promise<AxiomEvalInstrumentationResult>;\n\n/**\n * Hook function to initialize application OpenTelemetry instrumentation.\n * Called before eval execution with resolved Axiom connection details.\n *\n * @param options - Configuration options\n * @param options.url - Axiom API URL\n * @param options.token - Axiom API token\n * @param options.dataset - Axiom dataset name\n * @returns TracerProvider or Promise resolving to TracerProvider\n *\n * @example\n * ```typescript\n * instrumentation: ({ url, token, dataset }) => {\n * return setupAppInstrumentation({ url, token, dataset });\n * }\n * ```\n */\nexport type AxiomEvalInstrumentationHook = (\n options: AxiomEvalInstrumentationOptions,\n) => AxiomEvalInstrumentationResult | Promise<AxiomEvalInstrumentationResult>;\n\n/**\n * Axiom AI SDK base configuration (user-facing, all optional)\n */\nexport const DEFAULT_EVAL_INCLUDE = ['**/*.eval.{ts,js,mts,mjs,cts,cjs}'] as const;\n\nexport interface AxiomConfigBase {\n /**\n * Eval configuration settings\n *\n * @example\n * ```typescript\n * eval: {\n * url: process.env.AXIOM_URL,\n * token: process.env.AXIOM_TOKEN,\n * dataset: process.env.AXIOM_DATASET\n * }\n * ```\n */\n eval?: AxiomConnectionConfig & {\n /**\n * Zod schema for flag validation.\n * When provided, CLI flags (--flag.*) are validated against this schema\n * before eval execution begins.\n *\n * @example\n * ```typescript\n * import { z } from 'zod';\n *\n * export default defineConfig({\n * eval: {\n * flagSchema: z.object({\n * model: z.object({\n * temperature: z.number().min(0).max(2).default(0.7),\n * name: z.string().default('gpt-4o'),\n * }),\n * }),\n * }\n * });\n * ```\n */\n flagSchema?: z.ZodObject<any> | null;\n /**\n * Optional hook to initialize application OpenTelemetry instrumentation.\n * Called before eval execution with resolved Axiom connection details.\n * Return your configured tracer provider/tracer (or void) after registering them.\n */\n instrumentation?: AxiomEvalInstrumentationHook | null;\n /**\n * Timeout for eval execution in milliseconds\n * @default 60000\n */\n timeoutMs?: number;\n /**\n * Glob patterns to include when running evals\n * @default ['**\\/*.eval.{ts,js,mts,mjs,cts,cjs}']\n * @example ['**\\/*.eval.ts', 'tests/**\\/*.test.ts']\n */\n include?: string[];\n /**\n * Glob patterns to exclude when running evals\n * @default ['**\\/node_modules/**', '**\\/dist/**', '**\\/build/**']\n * @example ['**\\/node_modules/**', '**\\/.next/**']\n */\n exclude?: string[];\n };\n}\n\n/**\n * Resolved Axiom AI SDK configuration with all required keys.\n * This is the type returned after merging user config with defaults.\n *\n * Uses DeepRequired to ensure all optional properties from AxiomConfigBase\n * become required, preventing missing properties in the resolved config.\n */\nexport type ResolvedAxiomConfig = DeepRequired<AxiomConfigBase>;\n\n/**\n * Axiom AI SDK configuration with optional environment-specific overrides.\n *\n * Supports c12 environment overrides using $development, $production, etc.\n *\n * @example\n * ```typescript\n * export default defineConfig({\n * eval: {\n * url: process.env.AXIOM_URL,\n * token: process.env.AXIOM_TOKEN,\n * dataset: process.env.AXIOM_DATASET,\n * },\n * })\n * ```\n */\nexport interface AxiomConfig extends AxiomConfigBase {\n /**\n * Allow c12 environment-specific overrides ($development, $production, $test etc.)\n * but don't show them in autocomplete for now\n */\n [key: `$${string}`]: Partial<AxiomConfigBase> | undefined;\n}\n\n/**\n * Type-safe helper for defining Axiom configuration.\n *\n * @param config - The configuration object\n * @returns The same configuration object with type checking\n *\n * @example\n * ```typescript\n * import { defineConfig } from 'axiom/ai/config';\n *\n * export default defineConfig({\n * eval: {\n * url: process.env.AXIOM_URL,\n * token: process.env.AXIOM_TOKEN,\n * dataset: process.env.AXIOM_DATASET,\n * include: ['**\\/*.eval.{ts,js}'],\n * instrumentation: ({ url, token, dataset }) => setupAppInstrumentation({ url, token, dataset }),\n * },\n * });\n * ```\n */\nexport function defineConfig(config: AxiomConfig): AxiomConfig {\n return config;\n}\n\n/**\n * Create partial default configuration from auth context or environment variables.\n * Does not throw if required values are missing - validation happens after merge.\n *\n * @returns Partial configuration with defaults and auth/env var values\n * @internal\n */\nexport function createPartialDefaults(): Partial<AxiomConfigBase> {\n // Try to get auth context first (available when running via CLI)\n // Fall back to process.env for backward compatibility (e.g., when used outside CLI)\n let token: string | undefined;\n let url: string | undefined;\n let orgId: string | undefined;\n\n try {\n const authContext = getAuthContext();\n if (authContext) {\n token = authContext.token;\n url = authContext.url;\n orgId = authContext.orgId;\n }\n } catch {\n // Auth context not available, fall back to env vars\n }\n\n // Fall back to process.env if auth context not available\n token = token || process.env.AXIOM_TOKEN;\n url = url || process.env.AXIOM_URL;\n orgId = orgId || process.env.AXIOM_ORG_ID;\n\n // Edge URL for ingest and query operations\n const edgeUrl = process.env.AXIOM_EDGE_URL;\n\n return {\n eval: {\n url: url || 'https://api.axiom.co',\n edgeUrl: edgeUrl,\n orgId,\n token,\n dataset: process.env.AXIOM_DATASET,\n flagSchema: undefined,\n instrumentation: null,\n include: [...DEFAULT_EVAL_INCLUDE],\n exclude: [],\n timeoutMs: 60_000,\n },\n };\n}\n\n/**\n * Validates and returns a fully resolved Axiom configuration.\n *\n * @param config - Partial configuration to validate\n * @returns Fully resolved configuration with all required fields\n * @throws {AxiomCLIError} If required fields are missing or invalid\n * @internal\n */\nexport function validateConfig(config: Partial<AxiomConfigBase>): ResolvedAxiomConfig {\n const errors: string[] = [];\n const isDebug = process.env.AXIOM_DEBUG === 'true';\n\n if (!isDebug) {\n if (!config.eval?.token) {\n errors.push(\n 'eval.token is required (set in axiom.config.ts or AXIOM_TOKEN environment variable)',\n );\n }\n if (!config.eval?.dataset) {\n errors.push(\n 'eval.dataset is required (set in axiom.config.ts or AXIOM_DATASET environment variable)',\n );\n }\n\n if (!config.eval?.url) {\n console.log(\n 'eval.url was not specified. Defaulting to `https://api.axiom.co`. Please set it in axiom.config.ts or AXIOM_URL environment variable if you want to use a different endpoint.',\n );\n }\n }\n\n const instrumentation = config.eval?.instrumentation;\n if (\n instrumentation !== null &&\n instrumentation !== undefined &&\n typeof instrumentation !== 'function'\n ) {\n errors.push(\n 'eval.instrumentation must be a function returning OTEL setup information or null.',\n );\n }\n\n if (errors.length > 0) {\n throw new AxiomCLIError(`Invalid Axiom configuration:\\n - ${errors.join('\\n - ')}`);\n }\n\n return config as ResolvedAxiomConfig;\n}\n","import { randomBytes, createHash } from 'crypto';\nimport type { OAuthTokenResponse } from './types';\n\nconst OAUTH_CLIENT_ID = '264d906a404efc209b027f6595e6b616';\nconst OAUTH_AUTH_PATH = '/oauth/authorize';\nconst OAUTH_TOKEN_PATH = '/oauth/token';\n\nexport interface BuildAuthUrlParams {\n redirectUri: string;\n state: string;\n codeChallenge: string;\n}\n\nexport interface ExchangeCodeParams {\n code: string;\n redirectUri: string;\n codeVerifier: string;\n}\n\nexport class OAuth {\n constructor(private readonly oauthBaseUrl: string) {}\n\n static generateCodeVerifier(): string {\n return randomBytes(32).toString('base64url');\n }\n\n static generateCodeChallenge(verifier: string): string {\n return createHash('sha256').update(verifier).digest('base64url');\n }\n\n static generateState(): string {\n return randomBytes(16).toString('hex');\n }\n\n public buildAuthUrl(params: BuildAuthUrlParams): string {\n const url = new URL(OAUTH_AUTH_PATH, this.oauthBaseUrl);\n url.searchParams.set('client_id', OAUTH_CLIENT_ID);\n url.searchParams.set('redirect_uri', params.redirectUri);\n url.searchParams.set('response_type', 'code');\n url.searchParams.set('state', params.state);\n url.searchParams.set('code_challenge', params.codeChallenge);\n url.searchParams.set('code_challenge_method', 'S256');\n url.searchParams.set('scope', '*');\n return url.toString();\n }\n\n public async exchangeCodeForToken(params: ExchangeCodeParams): Promise<string> {\n const tokenUrl = new URL(OAUTH_TOKEN_PATH, this.oauthBaseUrl);\n\n const body = new URLSearchParams({\n grant_type: 'authorization_code',\n client_id: OAUTH_CLIENT_ID,\n code: params.code,\n redirect_uri: params.redirectUri,\n code_verifier: params.codeVerifier,\n });\n\n const response = await fetch(tokenUrl.toString(), {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: body.toString(),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`Token exchange failed: ${response.status} ${errorText}`);\n }\n\n const data: OAuthTokenResponse = await response.json();\n return data.access_token;\n }\n}\n","import { AxiomCLIError } from '../../util/errors';\nimport type { Organization } from './types';\n\nexport async function fetchOrganizations(\n token: string,\n apiBaseUrl: string,\n): Promise<Organization[]> {\n const response = await fetch(`${apiBaseUrl}/v2/orgs`, {\n headers: {\n Authorization: `Bearer ${token}`,\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n throw new AxiomCLIError(\n `Failed to fetch organizations: ${response.status} ${response.statusText}`,\n );\n }\n\n const data = await response.json();\n return data as Organization[];\n}\n\nexport async function verifyToken(\n token: string,\n orgId: string,\n apiBaseUrl: string,\n): Promise<boolean> {\n const response = await fetch(`${apiBaseUrl}/v2/user`, {\n headers: {\n Authorization: `Bearer ${token}`,\n 'X-Axiom-Org-Id': orgId,\n 'Content-Type': 'application/json',\n },\n });\n\n return response.ok;\n}\n","import http, { type IncomingMessage, type ServerResponse } from 'http';\nimport type { AddressInfo } from 'net';\n\nfunction escapeHtml(text: string): string {\n const map: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`',\n };\n return text.replace(/[&<>\"']/g, (m) => map[m] || m);\n}\n\nconst SVG_LOGO = `<svg width=\"124\" height=\"24\" viewBox=\"0 0 124 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"logo\">\n<path d=\"M42.9919 16.8116H36.3696L35.5537 19.1572C35.4209 19.539 34.9714 19.8513 34.5548 19.8513H30.9779C30.5614 19.8513 30.3459 19.5449 30.499 19.1703L36.9816 3.31644C37.1346 2.9419 37.6009 2.63546 38.0174 2.63546H41.3718C41.7883 2.63546 42.2541 2.94207 42.4067 3.3168L48.8634 19.17C49.016 19.5447 48.8 19.8513 48.3835 19.8513H44.8067C44.3901 19.8513 43.9406 19.539 43.8078 19.1572L42.9919 16.8116ZM41.8232 13.4223L39.6807 7.18148L37.5383 13.4223H41.8232ZM64.1105 19.8513C63.694 19.8513 63.1767 19.5694 62.9611 19.2247L59.9029 14.3369L56.8447 19.2247C56.6291 19.5694 56.1119 19.8513 55.6953 19.8513H51.3392C50.9227 19.8513 50.7754 19.5801 51.0119 19.2486L56.8978 11.0013L51.5315 3.24414C51.2999 2.90937 51.4513 2.63546 51.8679 2.63546H55.89C56.3066 2.63546 56.8268 2.91563 57.0461 3.25807L59.9029 7.71959L62.7343 3.25955C62.9522 2.9163 63.4713 2.63546 63.8879 2.63546H67.938C68.3545 2.63546 68.5048 2.90868 68.272 3.24261L62.8801 10.9743L68.7935 19.2489C69.0303 19.5802 68.8832 19.8513 68.4666 19.8513H64.1105ZM76.525 19.119C76.525 19.5218 76.1841 19.8513 75.7675 19.8513H72.5522C72.1356 19.8513 71.7947 19.5218 71.7947 19.119V3.36771C71.7947 2.96498 72.1356 2.63546 72.5522 2.63546H75.7675C76.1841 2.63546 76.525 2.96498 76.525 3.36771V19.119ZM79.3736 11.1896C79.3736 6.18625 83.2688 2.15134 89.2511 2.15134C95.2334 2.15134 99.1289 6.18625 99.1289 11.1896C99.1289 16.2199 95.2334 20.2548 89.2511 20.2548C83.2688 20.2548 79.3736 16.2199 79.3736 11.1896ZM94.2873 11.1896C94.2873 8.58038 92.3953 6.21307 89.2511 6.21307C86.1349 6.21307 84.2149 8.58038 84.2149 11.1896C84.2149 13.7989 86.1349 16.2199 89.2511 16.2199C92.3675 16.2199 94.2873 13.7989 94.2873 11.1896ZM119.318 19.8513C118.902 19.8513 118.517 19.5245 118.463 19.1251L117.225 9.89847L113.65 19.1652C113.505 19.5426 113.045 19.8513 112.628 19.8513H111.055C110.638 19.8513 110.179 19.5423 110.034 19.1645L106.457 9.81766L105.218 19.125C105.165 19.5245 104.781 19.8513 104.364 19.8513H101.344C100.927 19.8513 100.633 19.5249 100.69 19.1259L102.932 3.3609C102.988 2.96191 103.376 2.63546 103.792 2.63546H106.59C107.007 2.63546 107.469 2.94351 107.617 3.32002L111.827 14.041L116.064 3.31949C116.213 2.94327 116.676 2.63546 117.092 2.63546H119.89C120.307 2.63546 120.694 2.96191 120.751 3.3609L122.993 19.1259C123.05 19.5249 122.755 19.8513 122.339 19.8513H119.318ZM23.9616 15.6531L18.8054 6.97021C18.5689 6.57115 17.9863 6.24465 17.5106 6.24465H14.2915C13.5433 6.24465 13.2365 5.73171 13.6097 5.1048L15.375 2.13986C15.5151 1.90455 15.5148 1.61487 15.3743 1.37981C15.2337 1.14476 14.9741 1 14.6933 1H10.2025C9.72681 1 9.14291 1.32577 8.90491 1.72395L0.17865 16.3217C-0.0594434 16.7199 -0.0595348 17.3715 0.178285 17.7698L2.42362 21.5297C2.79777 22.1561 3.41129 22.1569 3.78699 21.5313L5.54143 18.6103C5.91722 17.9847 6.53065 17.9854 6.9048 18.6119L8.49538 21.2754C8.7332 21.6737 9.317 21.9995 9.79273 21.9995H20.1698C20.6455 21.9995 21.2293 21.6737 21.4672 21.2754L23.959 17.1028C24.1968 16.7045 24.198 16.0521 23.9616 15.6531ZM16.9981 15.2352C17.3699 15.8629 17.0619 16.3765 16.3136 16.3765H8.24192C7.49372 16.3765 7.1876 15.864 7.56175 15.2375L11.6007 8.47417C11.9748 7.84772 12.5869 7.84774 12.9611 8.47421L16.9981 15.2352Z\" fill=\"#121224\"/>\n</svg>`;\n\nfunction renderCallbackPage(error?: string): string {\n const errorClass = error ? ' class=\"error\"' : '';\n const errorMessage = error ? escapeHtml(error) : '';\n\n return `<!doctype html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n <title>Axiom</title>\n <link rel=\"icon\" href=\"https://app.axiom.co/static/favicon.ico\">\n <meta name=\"description\" content=\"Axiom CLI\">\n <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n <style>\n html,\n body,\n .root {\n width: 100%;\n height: 100%;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n }\n body {\n color: #334155;\n font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji;\n font-size: 14px;\n font-weight: 500;\n font-variant: tabular-nums;\n line-height: 1.5;\n background-color: #fff;\n font-feature-settings: \"tnum\";\n margin: 0;\n }\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n margin-top: 0;\n margin-bottom: .5em;\n font-weight: 500;\n }\n p {\n margin-top: 0;\n margin-bottom: 1em;\n }\n h2 {\n font-size: 16px;\n font-weight: 600;\n }\n .root {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n .logo {\n width: 92px;\n float: left;\n position: absolute;\n top: 16px;\n left: 16px;\n }\n .center p {\n padding: 8px 0;\n }\n .error .center {\n color: #bf0e08;\n }\n </style>\n</head>\n<body${errorClass}>\n <div class=\"root\">\n <a class=\"\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://axiom.co\">\n ${SVG_LOGO}\n </svg>\n </a>\n <div class=\"center\">\n ${\n error\n ? `<h2 id=\"msg\">Login failed</h2>\n <p id=\"details\">${errorMessage}</p>`\n : `<h2 id=\"msg\">Login successful</h2>\n <p id=\"details\">You can close this page and return to your CLI.</p>`\n }\n </div>\n </div>\n <script>\n window.history.replaceState({}, '', \\`\\${window.location.pathname}\\`);\n </script>\n</body>\n</html>`;\n}\n\nexport interface CallbackServerResult {\n server: http.Server;\n port: number;\n url: string;\n}\n\nexport async function startCallbackServer(): Promise<CallbackServerResult> {\n return new Promise((resolve) => {\n const server = http.createServer();\n server.listen(0, '127.0.0.1', () => {\n const address = server.address() as AddressInfo;\n resolve({\n server,\n port: address.port,\n url: `http://127.0.0.1:${address.port}`,\n });\n });\n });\n}\n\nexport interface CallbackResult {\n code: string;\n}\n\nexport async function waitForCallback(\n server: http.Server,\n expectedState: string,\n): Promise<CallbackResult> {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(\n () => {\n server.close();\n reject(new Error('Authentication timeout after 5 minutes'));\n },\n 5 * 60 * 1000,\n ); // 5 minute timeout\n\n server.on('request', (req: IncomingMessage, res: ServerResponse) => {\n const url = new URL(req.url || '', `http://${req.headers.host}`);\n const code = url.searchParams.get('code');\n const state = url.searchParams.get('state');\n const error = url.searchParams.get('error');\n const errorDescription = url.searchParams.get('error_description');\n\n if (error) {\n const errorMsg = errorDescription || error;\n res.writeHead(400, { 'Content-Type': 'text/html' });\n res.end(renderCallbackPage(errorMsg));\n clearTimeout(timeout);\n server.close();\n reject(new Error(`OAuth error: ${errorMsg}`));\n return;\n }\n\n if (!code || !state) {\n res.writeHead(400, { 'Content-Type': 'text/html' });\n res.end(renderCallbackPage('Missing code or state parameter'));\n return;\n }\n\n if (state !== expectedState) {\n res.writeHead(400, { 'Content-Type': 'text/html' });\n res.end(renderCallbackPage('Invalid state parameter (CSRF protection)'));\n clearTimeout(timeout);\n server.close();\n reject(new Error('Invalid state parameter'));\n return;\n }\n\n res.writeHead(200, { 'Content-Type': 'text/html' });\n res.end(renderCallbackPage());\n\n clearTimeout(timeout);\n server.close();\n resolve({ code });\n });\n });\n}\n"],"mappings":"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","names":["authContext"]}
|