@evalops/maestro 0.10.11 → 0.10.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/cli/args.d.ts.map +1 -1
  2. package/dist/cli/args.js +4 -1
  3. package/dist/cli/args.js.map +1 -1
  4. package/dist/cli/commands/config.d.ts.map +1 -1
  5. package/dist/cli/commands/config.js +3 -2
  6. package/dist/cli/commands/config.js.map +1 -1
  7. package/dist/cli/commands/evalops.d.ts +1 -1
  8. package/dist/cli/commands/evalops.d.ts.map +1 -1
  9. package/dist/cli/commands/evalops.js +23 -2
  10. package/dist/cli/commands/evalops.js.map +1 -1
  11. package/dist/cli/commands/init.d.ts +1 -0
  12. package/dist/cli/commands/init.d.ts.map +1 -1
  13. package/dist/cli/commands/init.js +28 -2
  14. package/dist/cli/commands/init.js.map +1 -1
  15. package/dist/cli.js +180 -34
  16. package/dist/evalops/agent-bootstrap.d.ts.map +1 -1
  17. package/dist/evalops/agent-bootstrap.js +118 -21
  18. package/dist/evalops/agent-bootstrap.js.map +1 -1
  19. package/dist/main.js +1 -1
  20. package/dist/main.js.map +1 -1
  21. package/dist/models/builtin.d.ts.map +1 -1
  22. package/dist/models/builtin.js +2 -3
  23. package/dist/models/builtin.js.map +1 -1
  24. package/dist/oauth/evalops.d.ts.map +1 -1
  25. package/dist/oauth/evalops.js +2 -1
  26. package/dist/oauth/evalops.js.map +1 -1
  27. package/dist/platform/core-services.d.ts +1 -0
  28. package/dist/platform/core-services.d.ts.map +1 -1
  29. package/dist/platform/core-services.js +1 -0
  30. package/dist/platform/core-services.js.map +1 -1
  31. package/dist/providers/auth.d.ts +1 -1
  32. package/dist/providers/auth.d.ts.map +1 -1
  33. package/dist/providers/auth.js +30 -2
  34. package/dist/providers/auth.js.map +1 -1
  35. package/dist/providers/evalops-managed.d.ts +1 -0
  36. package/dist/providers/evalops-managed.d.ts.map +1 -1
  37. package/dist/providers/evalops-managed.js +1 -0
  38. package/dist/providers/evalops-managed.js.map +1 -1
  39. package/dist/version.json +2 -2
  40. package/node_modules/@evalops/contracts/package.json +1 -1
  41. package/node_modules/@evalops/tui/package.json +1 -1
  42. package/package.json +3 -3
@@ -1,5 +1,23 @@
1
1
  import chalk from "chalk";
2
2
  import { bootstrapEvalOpsAgent, } from "../../evalops/agent-bootstrap.js";
3
+ import { muted, sectionHeading } from "../../style/theme.js";
4
+ export function formatInitHelp() {
5
+ return `${sectionHeading("maestro init")}${muted(` maestro init Login, create or reuse an API key, and register this agent
6
+ maestro init --rotate-key Replace the stored agent MCP API key
7
+ maestro init --mcp-url <url> Override the EvalOps agent MCP endpoint
8
+ maestro init --json Emit machine-readable bootstrap output
9
+
10
+ Options
11
+ --agent-type <type> Agent type to register, defaults to maestro
12
+ --surface <surface> Surface to register, defaults to cli
13
+ --workspace, --workspace-id <id> Workspace to associate with the registration
14
+ --scope <scope[,scope...]> Registration scopes to request
15
+ --key-scope <scope[,scope...]> API key scopes to request
16
+ --expires-in-days <days> API key TTL in days
17
+ --force-login Re-run EvalOps OAuth before bootstrapping
18
+ --manifest-url <url> Override the agent MCP manifest URL
19
+ --ttl-seconds <seconds> Registration TTL in seconds`)}`;
20
+ }
3
21
  function readValue(args, index, flag) {
4
22
  const value = args[index + 1];
5
23
  if (!value || value.startsWith("-")) {
@@ -91,6 +109,10 @@ export function parseInitArgs(args) {
91
109
  return options;
92
110
  }
93
111
  export async function handleInitCommand(args = []) {
112
+ if (args.includes("--help") || args.includes("-h")) {
113
+ console.log(formatInitHelp());
114
+ return;
115
+ }
94
116
  let options;
95
117
  try {
96
118
  options = parseInitArgs(args);
@@ -105,15 +127,19 @@ export async function handleInitCommand(args = []) {
105
127
  const result = await bootstrapEvalOpsAgent(options, {
106
128
  onAuthUrl: (url) => {
107
129
  if (options.json) {
130
+ console.error("Open this URL in your browser to authenticate with EvalOps:");
131
+ console.error(url);
108
132
  return;
109
133
  }
110
134
  console.log(chalk.yellow("Open this URL in your browser to authenticate with EvalOps:"));
111
135
  console.log(chalk.underline(url));
112
136
  },
113
137
  onStatus: (status) => {
114
- if (!options.json) {
115
- console.log(chalk.dim(status.message));
138
+ if (options.json) {
139
+ console.error(status.message);
140
+ return;
116
141
  }
142
+ console.log(chalk.dim(status.message));
117
143
  },
118
144
  });
119
145
  if (options.json) {
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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","sourcesContent":["import chalk from \"chalk\";\nimport {\n\ttype EvalOpsInitOptions,\n\tbootstrapEvalOpsAgent,\n} from \"../../evalops/agent-bootstrap.js\";\n\nfunction readValue(args: string[], index: number, flag: string): string {\n\tconst value = args[index + 1];\n\tif (!value || value.startsWith(\"-\")) {\n\t\tthrow new Error(`${flag} requires a value`);\n\t}\n\treturn value;\n}\n\nfunction parsePositiveInteger(value: string, flag: string): number {\n\tconst parsed = Number.parseInt(value, 10);\n\tif (!Number.isInteger(parsed) || parsed <= 0) {\n\t\tthrow new Error(`${flag} must be a positive integer`);\n\t}\n\treturn parsed;\n}\n\nfunction appendScopes(existing: string[] | undefined, value: string): string[] {\n\treturn [\n\t\t...(existing ?? []),\n\t\t...value\n\t\t\t.split(\",\")\n\t\t\t.map((entry) => entry.trim())\n\t\t\t.filter((entry) => entry.length > 0),\n\t];\n}\n\nexport function parseInitArgs(args: string[]): EvalOpsInitOptions {\n\tconst options: EvalOpsInitOptions = {};\n\tfor (let i = 0; i < args.length; i++) {\n\t\tconst arg = args[i];\n\t\tswitch (arg) {\n\t\t\tcase \"--agent-mcp-url\":\n\t\t\tcase \"--mcp-url\":\n\t\t\t\toptions.mcpUrl = readValue(args, i, arg);\n\t\t\t\ti++;\n\t\t\t\tbreak;\n\t\t\tcase \"--agent-type\":\n\t\t\t\toptions.agentType = readValue(args, i, arg);\n\t\t\t\ti++;\n\t\t\t\tbreak;\n\t\t\tcase \"--api-key-scope\":\n\t\t\tcase \"--key-scope\":\n\t\t\t\toptions.apiKeyScopes = appendScopes(\n\t\t\t\t\toptions.apiKeyScopes,\n\t\t\t\t\treadValue(args, i, arg),\n\t\t\t\t);\n\t\t\t\ti++;\n\t\t\t\tbreak;\n\t\t\tcase \"--expires-in-days\":\n\t\t\t\toptions.expiresInDays = parsePositiveInteger(\n\t\t\t\t\treadValue(args, i, arg),\n\t\t\t\t\targ,\n\t\t\t\t);\n\t\t\t\ti++;\n\t\t\t\tbreak;\n\t\t\tcase \"--force-login\":\n\t\t\t\toptions.forceLogin = true;\n\t\t\t\tbreak;\n\t\t\tcase \"--json\":\n\t\t\t\toptions.json = true;\n\t\t\t\tbreak;\n\t\t\tcase \"--key-name\":\n\t\t\t\toptions.keyName = readValue(args, i, arg);\n\t\t\t\ti++;\n\t\t\t\tbreak;\n\t\t\tcase \"--manifest-url\":\n\t\t\t\toptions.manifestUrl = readValue(args, i, arg);\n\t\t\t\ti++;\n\t\t\t\tbreak;\n\t\t\tcase \"--register-scope\":\n\t\t\tcase \"--scope\":\n\t\t\t\toptions.registerScopes = appendScopes(\n\t\t\t\t\toptions.registerScopes,\n\t\t\t\t\treadValue(args, i, arg),\n\t\t\t\t);\n\t\t\t\ti++;\n\t\t\t\tbreak;\n\t\t\tcase \"--rotate-key\":\n\t\t\t\toptions.rotateKey = true;\n\t\t\t\tbreak;\n\t\t\tcase \"--surface\":\n\t\t\t\toptions.surface = readValue(args, i, arg);\n\t\t\t\ti++;\n\t\t\t\tbreak;\n\t\t\tcase \"--ttl-seconds\":\n\t\t\t\toptions.ttlSeconds = parsePositiveInteger(readValue(args, i, arg), arg);\n\t\t\t\ti++;\n\t\t\t\tbreak;\n\t\t\tcase \"--workspace\":\n\t\t\tcase \"--workspace-id\":\n\t\t\t\toptions.workspaceId = readValue(args, i, arg);\n\t\t\t\ti++;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tif (arg?.startsWith(\"-\")) {\n\t\t\t\t\tthrow new Error(`Unknown maestro init option: ${arg}`);\n\t\t\t\t}\n\t\t\t\tthrow new Error(`Unexpected maestro init argument: ${arg}`);\n\t\t}\n\t}\n\treturn options;\n}\n\nexport async function handleInitCommand(args: string[] = []): Promise<void> {\n\tlet options: EvalOpsInitOptions;\n\ttry {\n\t\toptions = parseInitArgs(args);\n\t} catch (error) {\n\t\tconsole.error(\n\t\t\tchalk.red(error instanceof Error ? error.message : String(error)),\n\t\t);\n\t\tprocess.exit(1);\n\t}\n\n\tif (!options.json) {\n\t\tconsole.log(chalk.bold(\"Maestro EvalOps Init\"));\n\t}\n\n\tconst result = await bootstrapEvalOpsAgent(options, {\n\t\tonAuthUrl: (url) => {\n\t\t\tif (options.json) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconsole.log(\n\t\t\t\tchalk.yellow(\n\t\t\t\t\t\"Open this URL in your browser to authenticate with EvalOps:\",\n\t\t\t\t),\n\t\t\t);\n\t\t\tconsole.log(chalk.underline(url));\n\t\t},\n\t\tonStatus: (status) => {\n\t\t\tif (!options.json) {\n\t\t\t\tconsole.log(chalk.dim(status.message));\n\t\t\t}\n\t\t},\n\t});\n\n\tif (options.json) {\n\t\tconsole.log(JSON.stringify(result, null, 2));\n\t\treturn;\n\t}\n\n\tconsole.log(chalk.green(\"EvalOps agent bootstrap complete.\"));\n\tconsole.log(chalk.dim(`MCP endpoint: ${result.endpoint}`));\n\tif (result.organizationId) {\n\t\tconsole.log(chalk.dim(`Organization: ${result.organizationId}`));\n\t}\n\tif (result.agentId) {\n\t\tconsole.log(chalk.dim(`Agent: ${result.agentId}`));\n\t}\n\tif (result.runId) {\n\t\tconsole.log(chalk.dim(`Run: ${result.runId}`));\n\t}\n\tif (result.keyPrefix) {\n\t\tconst keyMode = result.apiKeyCreated ? \"created\" : \"reused\";\n\t\tconsole.log(chalk.dim(`API key ${keyMode}: ${result.keyPrefix}`));\n\t}\n\tconsole.log(\n\t\tchalk.dim(\n\t\t\t\"Stored EvalOps MCP credentials locally for future Maestro sessions.\",\n\t\t),\n\t);\n}\n"]}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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","sourcesContent":["import chalk from \"chalk\";\nimport {\n\ttype EvalOpsInitOptions,\n\tbootstrapEvalOpsAgent,\n} from \"../../evalops/agent-bootstrap.js\";\nimport { muted, sectionHeading } from \"../../style/theme.js\";\n\nexport function formatInitHelp(): string {\n\treturn `${sectionHeading(\"maestro init\")}${muted(\n\t\t` maestro init Login, create or reuse an API key, and register this agent\n maestro init --rotate-key Replace the stored agent MCP API key\n maestro init --mcp-url <url> Override the EvalOps agent MCP endpoint\n maestro init --json Emit machine-readable bootstrap output\n\nOptions\n --agent-type <type> Agent type to register, defaults to maestro\n --surface <surface> Surface to register, defaults to cli\n --workspace, --workspace-id <id> Workspace to associate with the registration\n --scope <scope[,scope...]> Registration scopes to request\n --key-scope <scope[,scope...]> API key scopes to request\n --expires-in-days <days> API key TTL in days\n --force-login Re-run EvalOps OAuth before bootstrapping\n --manifest-url <url> Override the agent MCP manifest URL\n --ttl-seconds <seconds> Registration TTL in seconds`,\n\t)}`;\n}\n\nfunction readValue(args: string[], index: number, flag: string): string {\n\tconst value = args[index + 1];\n\tif (!value || value.startsWith(\"-\")) {\n\t\tthrow new Error(`${flag} requires a value`);\n\t}\n\treturn value;\n}\n\nfunction parsePositiveInteger(value: string, flag: string): number {\n\tconst parsed = Number.parseInt(value, 10);\n\tif (!Number.isInteger(parsed) || parsed <= 0) {\n\t\tthrow new Error(`${flag} must be a positive integer`);\n\t}\n\treturn parsed;\n}\n\nfunction appendScopes(existing: string[] | undefined, value: string): string[] {\n\treturn [\n\t\t...(existing ?? []),\n\t\t...value\n\t\t\t.split(\",\")\n\t\t\t.map((entry) => entry.trim())\n\t\t\t.filter((entry) => entry.length > 0),\n\t];\n}\n\nexport function parseInitArgs(args: string[]): EvalOpsInitOptions {\n\tconst options: EvalOpsInitOptions = {};\n\tfor (let i = 0; i < args.length; i++) {\n\t\tconst arg = args[i];\n\t\tswitch (arg) {\n\t\t\tcase \"--agent-mcp-url\":\n\t\t\tcase \"--mcp-url\":\n\t\t\t\toptions.mcpUrl = readValue(args, i, arg);\n\t\t\t\ti++;\n\t\t\t\tbreak;\n\t\t\tcase \"--agent-type\":\n\t\t\t\toptions.agentType = readValue(args, i, arg);\n\t\t\t\ti++;\n\t\t\t\tbreak;\n\t\t\tcase \"--api-key-scope\":\n\t\t\tcase \"--key-scope\":\n\t\t\t\toptions.apiKeyScopes = appendScopes(\n\t\t\t\t\toptions.apiKeyScopes,\n\t\t\t\t\treadValue(args, i, arg),\n\t\t\t\t);\n\t\t\t\ti++;\n\t\t\t\tbreak;\n\t\t\tcase \"--expires-in-days\":\n\t\t\t\toptions.expiresInDays = parsePositiveInteger(\n\t\t\t\t\treadValue(args, i, arg),\n\t\t\t\t\targ,\n\t\t\t\t);\n\t\t\t\ti++;\n\t\t\t\tbreak;\n\t\t\tcase \"--force-login\":\n\t\t\t\toptions.forceLogin = true;\n\t\t\t\tbreak;\n\t\t\tcase \"--json\":\n\t\t\t\toptions.json = true;\n\t\t\t\tbreak;\n\t\t\tcase \"--key-name\":\n\t\t\t\toptions.keyName = readValue(args, i, arg);\n\t\t\t\ti++;\n\t\t\t\tbreak;\n\t\t\tcase \"--manifest-url\":\n\t\t\t\toptions.manifestUrl = readValue(args, i, arg);\n\t\t\t\ti++;\n\t\t\t\tbreak;\n\t\t\tcase \"--register-scope\":\n\t\t\tcase \"--scope\":\n\t\t\t\toptions.registerScopes = appendScopes(\n\t\t\t\t\toptions.registerScopes,\n\t\t\t\t\treadValue(args, i, arg),\n\t\t\t\t);\n\t\t\t\ti++;\n\t\t\t\tbreak;\n\t\t\tcase \"--rotate-key\":\n\t\t\t\toptions.rotateKey = true;\n\t\t\t\tbreak;\n\t\t\tcase \"--surface\":\n\t\t\t\toptions.surface = readValue(args, i, arg);\n\t\t\t\ti++;\n\t\t\t\tbreak;\n\t\t\tcase \"--ttl-seconds\":\n\t\t\t\toptions.ttlSeconds = parsePositiveInteger(readValue(args, i, arg), arg);\n\t\t\t\ti++;\n\t\t\t\tbreak;\n\t\t\tcase \"--workspace\":\n\t\t\tcase \"--workspace-id\":\n\t\t\t\toptions.workspaceId = readValue(args, i, arg);\n\t\t\t\ti++;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tif (arg?.startsWith(\"-\")) {\n\t\t\t\t\tthrow new Error(`Unknown maestro init option: ${arg}`);\n\t\t\t\t}\n\t\t\t\tthrow new Error(`Unexpected maestro init argument: ${arg}`);\n\t\t}\n\t}\n\treturn options;\n}\n\nexport async function handleInitCommand(args: string[] = []): Promise<void> {\n\tif (args.includes(\"--help\") || args.includes(\"-h\")) {\n\t\tconsole.log(formatInitHelp());\n\t\treturn;\n\t}\n\n\tlet options: EvalOpsInitOptions;\n\ttry {\n\t\toptions = parseInitArgs(args);\n\t} catch (error) {\n\t\tconsole.error(\n\t\t\tchalk.red(error instanceof Error ? error.message : String(error)),\n\t\t);\n\t\tprocess.exit(1);\n\t}\n\n\tif (!options.json) {\n\t\tconsole.log(chalk.bold(\"Maestro EvalOps Init\"));\n\t}\n\n\tconst result = await bootstrapEvalOpsAgent(options, {\n\t\tonAuthUrl: (url) => {\n\t\t\tif (options.json) {\n\t\t\t\tconsole.error(\n\t\t\t\t\t\"Open this URL in your browser to authenticate with EvalOps:\",\n\t\t\t\t);\n\t\t\t\tconsole.error(url);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconsole.log(\n\t\t\t\tchalk.yellow(\n\t\t\t\t\t\"Open this URL in your browser to authenticate with EvalOps:\",\n\t\t\t\t),\n\t\t\t);\n\t\t\tconsole.log(chalk.underline(url));\n\t\t},\n\t\tonStatus: (status) => {\n\t\t\tif (options.json) {\n\t\t\t\tconsole.error(status.message);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconsole.log(chalk.dim(status.message));\n\t\t},\n\t});\n\n\tif (options.json) {\n\t\tconsole.log(JSON.stringify(result, null, 2));\n\t\treturn;\n\t}\n\n\tconsole.log(chalk.green(\"EvalOps agent bootstrap complete.\"));\n\tconsole.log(chalk.dim(`MCP endpoint: ${result.endpoint}`));\n\tif (result.organizationId) {\n\t\tconsole.log(chalk.dim(`Organization: ${result.organizationId}`));\n\t}\n\tif (result.agentId) {\n\t\tconsole.log(chalk.dim(`Agent: ${result.agentId}`));\n\t}\n\tif (result.runId) {\n\t\tconsole.log(chalk.dim(`Run: ${result.runId}`));\n\t}\n\tif (result.keyPrefix) {\n\t\tconst keyMode = result.apiKeyCreated ? \"created\" : \"reused\";\n\t\tconsole.log(chalk.dim(`API key ${keyMode}: ${result.keyPrefix}`));\n\t}\n\tconsole.log(\n\t\tchalk.dim(\n\t\t\t\"Stored EvalOps MCP credentials locally for future Maestro sessions.\",\n\t\t),\n\t);\n}\n"]}
package/dist/cli.js CHANGED
@@ -48369,6 +48369,7 @@ function assertEvalOpsManagedGatewayEnabled() {
48369
48369
  }
48370
48370
  throw new Error("EvalOps managed gateway access is currently disabled by dynamic config.");
48371
48371
  }
48372
+ var DEFAULT_EVALOPS_MANAGED_GATEWAY_BASE_URL = "https://llm-gateway.evalops.dev/v1";
48372
48373
  var ALL_EVALOPS_MANAGED_PROVIDER_DEFINITIONS;
48373
48374
  var managedProvidersByID;
48374
48375
  var init_evalops_managed = __esm2(() => {
@@ -49292,6 +49293,7 @@ var init_core_services = __esm2(() => {
49292
49293
  };
49293
49294
  PLATFORM_HTTP_ROUTES = {
49294
49295
  identity: {
49296
+ apiKeys: "/v1/api-keys",
49295
49297
  authGoogleStart: "/v1/auth/google/start",
49296
49298
  deviceChallenges: "/v1/device-challenges",
49297
49299
  devices: "/v1/devices",
@@ -51193,7 +51195,8 @@ async function loginEvalOps(onAuthUrl, onStatus) {
51193
51195
  const result = await Promise.race([
51194
51196
  getResult(),
51195
51197
  new Promise((_, reject) => {
51196
- setTimeout(() => reject(new Error("EvalOps login timed out after 5 minutes")), 5 * 60 * 1e3);
51198
+ const timeout = setTimeout(() => reject(new Error("EvalOps login timed out after 5 minutes")), 5 * 60 * 1e3);
51199
+ timeout.unref?.();
51197
51200
  })
51198
51201
  ]);
51199
51202
  const deviceId = await enrollDesktopDeviceIdentity(identityBaseUrl, result.accessToken, process.env.npm_package_version);
@@ -70082,7 +70085,7 @@ var init_models_generated = __esm2(() => {
70082
70085
  });
70083
70086
  function getManagedGatewayBaseUrl() {
70084
70087
  const configured2 = process.env.MAESTRO_LLM_GATEWAY_URL?.trim();
70085
- return configured2 || DEFAULT_MANAGED_GATEWAY_BASE_URL;
70088
+ return configured2 || DEFAULT_EVALOPS_MANAGED_GATEWAY_BASE_URL;
70086
70089
  }
70087
70090
  function getManagedGatewayBaseUrlForApi(api) {
70088
70091
  const managedBaseUrl = getManagedGatewayBaseUrl();
@@ -70200,7 +70203,6 @@ function getProviders() {
70200
70203
  function getModels(provider) {
70201
70204
  return getBuiltinModels()[provider] || [];
70202
70205
  }
70203
- var DEFAULT_MANAGED_GATEWAY_BASE_URL = "http://127.0.0.1:8081/v1";
70204
70206
  var ANTHROPIC_OPUS_46_OVERLAY;
70205
70207
  var OPENROUTER_RESPONSES_OVERLAY;
70206
70208
  var GROQ_RESPONSES_OVERLAY;
@@ -85992,6 +85994,25 @@ function isRecord8(value) {
85992
85994
  function getNonEmptyString(value) {
85993
85995
  return typeof value === "string" && value.trim().length > 0 ? value.trim() : void 0;
85994
85996
  }
85997
+ function getStringArray2(value) {
85998
+ return Array.isArray(value) ? value.map((entry2) => typeof entry2 === "string" ? entry2.trim() : "").filter((entry2) => entry2.length > 0) : [];
85999
+ }
86000
+ function isFutureTimestamp(value) {
86001
+ const timestamp3 = getNonEmptyString(value);
86002
+ return !timestamp3 || Date.parse(timestamp3) > Date.now();
86003
+ }
86004
+ function resolveEvalOpsAgentMcpAPIKey(metadata) {
86005
+ const agentMcp = isRecord8(metadata?.agentMcp) ? metadata.agentMcp : void 0;
86006
+ const apiKey = getNonEmptyString(agentMcp?.apiKey);
86007
+ if (!apiKey || !isFutureTimestamp(agentMcp?.expiresAt)) {
86008
+ return;
86009
+ }
86010
+ const scopes = getStringArray2(agentMcp?.scopes);
86011
+ if (scopes.length > 0 && !scopes.includes("llm_gateway:invoke")) {
86012
+ return;
86013
+ }
86014
+ return apiKey;
86015
+ }
85995
86016
  function resolveEvalOpsOrganizationId(metadata) {
85996
86017
  const candidate = getNonEmptyString(metadata?.organizationId);
85997
86018
  if (candidate && candidate.trim().length > 0) {
@@ -86073,10 +86094,15 @@ function createAuthResolver(options) {
86073
86094
  };
86074
86095
  }
86075
86096
  if (isEvalOpsManagedProvider(provider) && options.mode !== "api-key") {
86097
+ const credentials = loadOAuthCredentials("evalops");
86098
+ const agentAPIKey = resolveEvalOpsAgentMcpAPIKey(credentials?.metadata);
86099
+ if (agentAPIKey) {
86100
+ return buildEvalOpsCredential(provider, agentAPIKey, "evalops_agent_key_file", credentials?.metadata);
86101
+ }
86076
86102
  const oauthToken = await getOAuthToken("evalops");
86077
86103
  if (oauthToken) {
86078
- const credentials = loadOAuthCredentials("evalops");
86079
- return buildEvalOpsCredential(provider, oauthToken, "evalops_oauth_file", credentials?.metadata);
86104
+ const refreshedCredentials = loadOAuthCredentials("evalops");
86105
+ return buildEvalOpsCredential(provider, oauthToken, "evalops_oauth_file", refreshedCredentials?.metadata ?? credentials?.metadata);
86080
86106
  }
86081
86107
  }
86082
86108
  if (isOpenAICodexProvider(provider) && options.mode !== "api-key") {
@@ -87122,6 +87148,42 @@ function normalizeManifestUrl(url) {
87122
87148
  }
87123
87149
  return parsed.toString();
87124
87150
  }
87151
+ function resolveIdentityBaseUrl(credentials, endpoint) {
87152
+ const configured2 = getEnvValue3([
87153
+ "MAESTRO_IDENTITY_URL",
87154
+ "EVALOPS_IDENTITY_URL",
87155
+ "MAESTRO_PLATFORM_BASE_URL",
87156
+ "MAESTRO_EVALOPS_BASE_URL",
87157
+ "EVALOPS_BASE_URL"
87158
+ ]);
87159
+ const stored = typeof credentials?.metadata?.identityBaseUrl === "string" ? credentials.metadata.identityBaseUrl : void 0;
87160
+ const derived = identityBaseUrlFromMcpEndpoint(endpoint?.endpoint);
87161
+ const storedBeforeDerived = endpoint ? !endpoint.preferDerivedIdentity && isCustomMcpEndpoint(endpoint.endpoint) : false;
87162
+ return normalizeBaseUrl2(configured2 ?? endpoint?.identityBaseUrl ?? (endpoint?.preferDerivedIdentity ? derived : void 0) ?? (storedBeforeDerived ? stored : void 0) ?? derived ?? stored ?? DEFAULT_IDENTITY_BASE_URL, Object.values(PLATFORM_HTTP_ROUTES.identity));
87163
+ }
87164
+ function isCustomMcpEndpoint(endpoint) {
87165
+ const parsed = new URL(normalizeBaseUrl2(endpoint));
87166
+ return parsed.hostname !== "app.evalops.dev" && parsed.hostname !== "staging.evalops.dev";
87167
+ }
87168
+ function identityBaseUrlFromMcpEndpoint(endpoint) {
87169
+ if (!endpoint) {
87170
+ return;
87171
+ }
87172
+ const parsed = new URL(normalizeBaseUrl2(endpoint));
87173
+ if (parsed.hostname === "app.evalops.dev") {
87174
+ return DEFAULT_IDENTITY_BASE_URL;
87175
+ }
87176
+ if (parsed.hostname === "staging.evalops.dev") {
87177
+ return "https://api.staging.evalops.dev";
87178
+ }
87179
+ if (parsed.hostname.startsWith("app.")) {
87180
+ parsed.hostname = `identity.${parsed.hostname.slice("app.".length)}`;
87181
+ }
87182
+ parsed.pathname = "";
87183
+ parsed.search = "";
87184
+ parsed.hash = "";
87185
+ return normalizeBaseUrl2(parsed.toString());
87186
+ }
87125
87187
  async function resolveEndpointFromManifest(manifestUrl, fetchImpl) {
87126
87188
  const response = await fetchImpl(manifestUrl, {
87127
87189
  headers: { accept: "application/json" }
@@ -87130,16 +87192,27 @@ async function resolveEndpointFromManifest(manifestUrl, fetchImpl) {
87130
87192
  throw new Error(`Failed to fetch EvalOps MCP manifest (${response.status} ${response.statusText})`);
87131
87193
  }
87132
87194
  const payload = await response.json();
87133
- const protocol = isRecord9(payload) && isRecord9(payload.protocol) ? payload.protocol : void 0;
87195
+ const payloadRecord = isRecord9(payload) ? payload : void 0;
87196
+ const protocol = payloadRecord && isRecord9(payloadRecord.protocol) ? payloadRecord.protocol : void 0;
87134
87197
  const endpoint = nonEmptyString(protocol?.endpoint);
87135
87198
  if (!endpoint) {
87136
87199
  throw new Error("EvalOps MCP manifest did not include protocol.endpoint");
87137
87200
  }
87138
- return { endpoint: normalizeMcpEndpoint(endpoint), manifestUrl };
87201
+ const identity = payloadRecord?.identity;
87202
+ const identityBaseUrl = nonEmptyString(isRecord9(identity) ? identity.base_url : void 0) ?? nonEmptyString(isRecord9(identity) ? identity.baseUrl : void 0) ?? nonEmptyString(isRecord9(identity) ? identity.url : void 0) ?? nonEmptyString(payloadRecord?.identity_base_url) ?? nonEmptyString(payloadRecord?.identityBaseUrl);
87203
+ return {
87204
+ endpoint: normalizeMcpEndpoint(endpoint),
87205
+ identityBaseUrl,
87206
+ manifestUrl,
87207
+ preferDerivedIdentity: true
87208
+ };
87139
87209
  }
87140
87210
  async function resolveAgentMcpEndpoint(options, deps) {
87141
87211
  if (options.mcpUrl) {
87142
- return { endpoint: normalizeMcpEndpoint(options.mcpUrl) };
87212
+ return {
87213
+ endpoint: normalizeMcpEndpoint(options.mcpUrl),
87214
+ preferDerivedIdentity: true
87215
+ };
87143
87216
  }
87144
87217
  if (options.manifestUrl) {
87145
87218
  return resolveEndpointFromManifest(normalizeManifestUrl(options.manifestUrl), deps.fetch);
@@ -87150,7 +87223,10 @@ async function resolveAgentMcpEndpoint(options, deps) {
87150
87223
  "MAESTRO_EVALOPS_AGENT_MCP_URL"
87151
87224
  ]);
87152
87225
  if (configuredMcpUrl) {
87153
- return { endpoint: normalizeMcpEndpoint(configuredMcpUrl) };
87226
+ return {
87227
+ endpoint: normalizeMcpEndpoint(configuredMcpUrl),
87228
+ preferDerivedIdentity: true
87229
+ };
87154
87230
  }
87155
87231
  const configuredManifestUrl = getEnvValue3([
87156
87232
  "MAESTRO_PLATFORM_MCP_MANIFEST_URL",
@@ -87253,25 +87329,45 @@ function buildKeyName(options, now2) {
87253
87329
  const host = hostname().replace(/[^a-zA-Z0-9._-]+/gu, "-").slice(0, 48);
87254
87330
  return `maestro-init-${host || "local"}-${now2.toISOString().slice(0, 10)}`;
87255
87331
  }
87256
- async function createAgentAPIKey(options, endpoint, oauthToken, createClient, now2) {
87257
- const output = await callMcpTool(createClient, endpoint, "", "evalops_create_api_key", {
87258
- name: buildKeyName(options, now2),
87259
- scopes: options.apiKeyScopes ?? DEFAULT_API_KEY_SCOPES,
87260
- user_token: oauthToken,
87261
- ...positiveInteger(options.expiresInDays) ? { expires_in_days: options.expiresInDays } : {}
87332
+ async function createAgentAPIKey(options, identityBaseUrl, oauthToken, fetchImpl, now2) {
87333
+ const expiresInDays = positiveInteger(options.expiresInDays);
87334
+ const expiresAt = expiresInDays ? new Date(now2.getTime() + expiresInDays * 24 * 60 * 60 * 1e3).toISOString() : void 0;
87335
+ const response = await fetchImpl(`${identityBaseUrl}${PLATFORM_HTTP_ROUTES.identity.apiKeys}`, {
87336
+ method: "POST",
87337
+ headers: {
87338
+ Authorization: `Bearer ${oauthToken}`,
87339
+ "Content-Type": "application/json"
87340
+ },
87341
+ body: JSON.stringify({
87342
+ name: buildKeyName(options, now2),
87343
+ scopes: options.apiKeyScopes ?? DEFAULT_API_KEY_SCOPES,
87344
+ ...expiresAt ? { expires_at: expiresAt } : {}
87345
+ })
87262
87346
  });
87263
- if (!nonEmptyString(output.api_key)) {
87347
+ const output = await response.json().catch(() => ({}));
87348
+ if (!response.ok) {
87349
+ throw new Error(typeof output.error === "string" && output.error.trim() ? output.error : `EvalOps API key creation failed (${response.status})`);
87350
+ }
87351
+ const key = isRecord9(output.key) ? output.key : void 0;
87352
+ const normalized = {
87353
+ api_key: nonEmptyString(output.api_key) ?? "",
87354
+ expires_at: nonEmptyString(output.expires_at) ?? nonEmptyString(key?.expires_at),
87355
+ key_id: nonEmptyString(output.key_id) ?? nonEmptyString(key?.id),
87356
+ name: nonEmptyString(output.name) ?? nonEmptyString(key?.name),
87357
+ prefix: nonEmptyString(output.prefix) ?? nonEmptyString(key?.prefix),
87358
+ scopes: stringArray(output.scopes) ?? stringArray(key?.scopes) ?? stringArray(output.scopes_granted)
87359
+ };
87360
+ if (!nonEmptyString(normalized.api_key)) {
87264
87361
  throw new Error("EvalOps API key creation did not return api_key");
87265
87362
  }
87266
- return output;
87363
+ return normalized;
87267
87364
  }
87268
87365
  async function registerAgent(options, endpoint, apiKey, createClient) {
87269
- const output = await callMcpTool(createClient, endpoint, "", "evalops_register", {
87366
+ const output = await callMcpTool(createClient, endpoint, apiKey, "evalops_register", {
87270
87367
  agent_type: options.agentType ?? DEFAULT_AGENT_TYPE,
87271
87368
  capabilities: ["maestro:init", "maestro:cli"],
87272
- scopes: options.registerScopes ?? DEFAULT_REGISTER_SCOPES,
87369
+ ...options.registerScopes?.length ? { scopes: options.registerScopes } : {},
87273
87370
  surface: options.surface ?? DEFAULT_SURFACE2,
87274
- user_token: apiKey,
87275
87371
  ...positiveInteger(options.ttlSeconds) ? { ttl_seconds: options.ttlSeconds } : {},
87276
87372
  ...options.workspaceId ? { workspace_id: options.workspaceId } : {}
87277
87373
  });
@@ -87317,13 +87413,14 @@ async function bootstrapEvalOpsAgent(options = {}, dependencies = {}) {
87317
87413
  const endpoint = await resolveAgentMcpEndpoint(options, deps);
87318
87414
  const credentialsBeforeKey = deps.loadCredentials("evalops");
87319
87415
  const stored = getStoredAgentMcpMetadata(credentialsBeforeKey);
87416
+ const identityBaseUrl = resolveIdentityBaseUrl(credentialsBeforeKey, endpoint);
87320
87417
  const now2 = deps.now();
87321
87418
  let apiKey = stored && !options.rotateKey ? stored.apiKey : void 0;
87322
87419
  let keyOutput;
87323
87420
  let apiKeyCreated = false;
87324
87421
  if (!apiKey) {
87325
87422
  deps.onStatus({ message: "Creating EvalOps agent API key" });
87326
- keyOutput = await createAgentAPIKey(options, endpoint.endpoint, oauthToken, deps.createMcpClient, now2);
87423
+ keyOutput = await createAgentAPIKey(options, identityBaseUrl, oauthToken, deps.fetch, now2);
87327
87424
  apiKey = keyOutput.api_key;
87328
87425
  apiKeyCreated = true;
87329
87426
  } else {
@@ -87340,7 +87437,7 @@ async function bootstrapEvalOpsAgent(options = {}, dependencies = {}) {
87340
87437
  deps.onStatus({
87341
87438
  message: "Stored EvalOps agent API key failed; rotating and retrying"
87342
87439
  });
87343
- keyOutput = await createAgentAPIKey({ ...options, rotateKey: true }, endpoint.endpoint, oauthToken, deps.createMcpClient, now2);
87440
+ keyOutput = await createAgentAPIKey({ ...options, rotateKey: true }, identityBaseUrl, oauthToken, deps.fetch, now2);
87344
87441
  apiKey = keyOutput.api_key;
87345
87442
  apiKeyCreated = true;
87346
87443
  registerOutput = await registerAgent(options, endpoint.endpoint, apiKey, deps.createMcpClient);
@@ -87386,23 +87483,25 @@ async function bootstrapEvalOpsAgent(options = {}, dependencies = {}) {
87386
87483
  };
87387
87484
  }
87388
87485
  var DEFAULT_AGENT_MCP_BASE_URL = "https://app.evalops.dev";
87486
+ var DEFAULT_IDENTITY_BASE_URL = "https://identity.evalops.dev";
87389
87487
  var AGENT_MCP_MANIFEST_PATH = "/.well-known/evalops/agent-mcp.json";
87390
87488
  var AGENT_MCP_PATH = "/mcp";
87391
87489
  var DEFAULT_AGENT_TYPE = "maestro";
87392
87490
  var DEFAULT_SURFACE2 = "cli";
87393
- var DEFAULT_REGISTER_SCOPES;
87394
87491
  var DEFAULT_API_KEY_SCOPES;
87395
87492
  var init_agent_bootstrap = __esm2(() => {
87396
87493
  init_oauth();
87397
87494
  init_storage();
87398
87495
  init_package_metadata();
87399
87496
  init_client();
87400
- DEFAULT_REGISTER_SCOPES = ["llm_gateway:invoke"];
87497
+ init_core_services();
87401
87498
  DEFAULT_API_KEY_SCOPES = [
87402
87499
  "agent:register",
87403
87500
  "agent:heartbeat",
87404
87501
  "governance:evaluate",
87502
+ "llm_gateway:invoke",
87405
87503
  "memories:read",
87504
+ "memories:write",
87406
87505
  "meter:record"
87407
87506
  ];
87408
87507
  });
@@ -132398,7 +132497,7 @@ function parseArgs(args) {
132398
132497
  result.subcommand = nextArg;
132399
132498
  i2++;
132400
132499
  }
132401
- if (arg === "remote" || arg === "hosted-runner" || arg === "init") {
132500
+ if (arg === "remote" || arg === "hosted-runner" || arg === "init" || arg === "evalops") {
132402
132501
  result.commandArgs = args.slice(i2 + 1);
132403
132502
  break;
132404
132503
  }
@@ -140907,7 +141006,7 @@ function getString(value, field) {
140907
141006
  const trimmed = value.trim();
140908
141007
  return trimmed || void 0;
140909
141008
  }
140910
- function getStringArray2(value, field) {
141009
+ function getStringArray3(value, field) {
140911
141010
  if (value === void 0 || value === null) {
140912
141011
  return;
140913
141012
  }
@@ -140936,7 +141035,7 @@ function parseHostedRunnerDrainInput(body) {
140936
141035
  return {
140937
141036
  reason: getString(record.reason, "reason") ?? getString(record.stop_reason, "stop_reason"),
140938
141037
  requestedBy: getString(record.requested_by, "requested_by") ?? getString(record.requestedBy, "requestedBy"),
140939
- exportPaths: getStringArray2(record.export_paths, "export_paths") ?? getStringArray2(record.exportPaths, "exportPaths")
141038
+ exportPaths: getStringArray3(record.export_paths, "export_paths") ?? getStringArray3(record.exportPaths, "exportPaths")
140940
141039
  };
140941
141040
  }
140942
141041
  function isWithinPath(root, target) {
@@ -169780,7 +169879,7 @@ __export2(exports_config, {
169780
169879
  buildConfigShowSections: () => buildConfigShowSections
169781
169880
  });
169782
169881
  function getManagedGatewayBaseUrl2() {
169783
- return process.env.MAESTRO_LLM_GATEWAY_URL?.trim() || "http://127.0.0.1:8081/v1";
169882
+ return process.env.MAESTRO_LLM_GATEWAY_URL?.trim() || DEFAULT_EVALOPS_MANAGED_GATEWAY_BASE_URL;
169784
169883
  }
169785
169884
  function getManagedGatewayProviderPresets() {
169786
169885
  return getEvalOpsManagedProviderDefinitions().map((definition) => ({
@@ -170643,8 +170742,26 @@ var init_openai3 = __esm2(() => {
170643
170742
  var exports_init = {};
170644
170743
  __export2(exports_init, {
170645
170744
  parseInitArgs: () => parseInitArgs,
170646
- handleInitCommand: () => handleInitCommand2
170745
+ handleInitCommand: () => handleInitCommand2,
170746
+ formatInitHelp: () => formatInitHelp
170647
170747
  });
170748
+ function formatInitHelp() {
170749
+ return `${sectionHeading("maestro init")}${muted(` maestro init Login, create or reuse an API key, and register this agent
170750
+ maestro init --rotate-key Replace the stored agent MCP API key
170751
+ maestro init --mcp-url <url> Override the EvalOps agent MCP endpoint
170752
+ maestro init --json Emit machine-readable bootstrap output
170753
+
170754
+ Options
170755
+ --agent-type <type> Agent type to register, defaults to maestro
170756
+ --surface <surface> Surface to register, defaults to cli
170757
+ --workspace, --workspace-id <id> Workspace to associate with the registration
170758
+ --scope <scope[,scope...]> Registration scopes to request
170759
+ --key-scope <scope[,scope...]> API key scopes to request
170760
+ --expires-in-days <days> API key TTL in days
170761
+ --force-login Re-run EvalOps OAuth before bootstrapping
170762
+ --manifest-url <url> Override the agent MCP manifest URL
170763
+ --ttl-seconds <seconds> Registration TTL in seconds`)}`;
170764
+ }
170648
170765
  function readValue(args, index2, flag) {
170649
170766
  const value = args[index2 + 1];
170650
170767
  if (!value || value.startsWith("-")) {
@@ -170733,6 +170850,10 @@ function parseInitArgs(args) {
170733
170850
  return options;
170734
170851
  }
170735
170852
  async function handleInitCommand2(args = []) {
170853
+ if (args.includes("--help") || args.includes("-h")) {
170854
+ console.log(formatInitHelp());
170855
+ return;
170856
+ }
170736
170857
  let options;
170737
170858
  try {
170738
170859
  options = parseInitArgs(args);
@@ -170746,15 +170867,19 @@ async function handleInitCommand2(args = []) {
170746
170867
  const result = await bootstrapEvalOpsAgent(options, {
170747
170868
  onAuthUrl: (url) => {
170748
170869
  if (options.json) {
170870
+ console.error("Open this URL in your browser to authenticate with EvalOps:");
170871
+ console.error(url);
170749
170872
  return;
170750
170873
  }
170751
170874
  console.log(chalk62.yellow("Open this URL in your browser to authenticate with EvalOps:"));
170752
170875
  console.log(chalk62.underline(url));
170753
170876
  },
170754
170877
  onStatus: (status) => {
170755
- if (!options.json) {
170756
- console.log(chalk62.dim(status.message));
170878
+ if (options.json) {
170879
+ console.error(status.message);
170880
+ return;
170757
170881
  }
170882
+ console.log(chalk62.dim(status.message));
170758
170883
  }
170759
170884
  });
170760
170885
  if (options.json) {
@@ -170780,16 +170905,17 @@ async function handleInitCommand2(args = []) {
170780
170905
  }
170781
170906
  var init_init = __esm2(() => {
170782
170907
  init_agent_bootstrap();
170908
+ init_theme2();
170783
170909
  });
170784
170910
  var exports_evalops = {};
170785
170911
  __export2(exports_evalops, {
170786
170912
  handleEvalOpsCommand: () => handleEvalOpsCommand
170787
170913
  });
170788
- async function handleEvalOpsCommand(subcommand) {
170914
+ async function handleEvalOpsCommand(subcommand, args = []) {
170789
170915
  switch (subcommand) {
170790
170916
  case "init": {
170791
170917
  const { handleInitCommand: handleInitCommand3 } = await Promise.resolve().then(() => (init_init(), exports_init));
170792
- await handleInitCommand3();
170918
+ await handleInitCommand3(args);
170793
170919
  return;
170794
170920
  }
170795
170921
  case "login":
@@ -170832,6 +170958,7 @@ async function handleStatus3() {
170832
170958
  const remainingMs = Math.max(0, (credentials?.expires ?? Date.now()) - Date.now());
170833
170959
  const minutes = Math.round(remainingMs / 6e4);
170834
170960
  const metadata = credentials?.metadata;
170961
+ const agentMcp = getStoredEvalOpsAgentMcpMetadata();
170835
170962
  const organizationId = typeof metadata?.organizationId === "string" ? metadata.organizationId : void 0;
170836
170963
  const providerRef = metadata?.providerRef && typeof metadata.providerRef === "object" && !Array.isArray(metadata.providerRef) ? metadata.providerRef : void 0;
170837
170964
  console.log(chalk63.green("Stored EvalOps credentials detected."));
@@ -170843,9 +170970,28 @@ async function handleStatus3() {
170843
170970
  const environment = typeof providerRef.environment === "string" ? providerRef.environment : "prod";
170844
170971
  console.log(chalk63.dim(`Provider ref: ${provider}/${environment}`));
170845
170972
  }
170973
+ if (agentMcp) {
170974
+ console.log(chalk63.green("EvalOps agent session configured."));
170975
+ console.log(chalk63.dim(`MCP endpoint: ${agentMcp.endpoint}`));
170976
+ if (agentMcp.agentId) {
170977
+ console.log(chalk63.dim(`Agent: ${agentMcp.agentId}`));
170978
+ }
170979
+ if (agentMcp.runId) {
170980
+ console.log(chalk63.dim(`Run: ${agentMcp.runId}`));
170981
+ }
170982
+ if (agentMcp.keyPrefix) {
170983
+ console.log(chalk63.dim(`API key: ${agentMcp.keyPrefix}`));
170984
+ }
170985
+ if (agentMcp.sessionExpiresAt) {
170986
+ console.log(chalk63.dim(`Session expires: ${agentMcp.sessionExpiresAt}`));
170987
+ }
170988
+ } else {
170989
+ console.log(chalk63.yellow('No EvalOps agent session yet. Run "maestro init".'));
170990
+ }
170846
170991
  console.log(chalk63.dim(`Access token expires in ~${minutes} minute${minutes === 1 ? "" : "s"} (auto-refresh enabled).`));
170847
170992
  }
170848
170993
  var init_evalops2 = __esm2(() => {
170994
+ init_agent_bootstrap();
170849
170995
  init_oauth();
170850
170996
  init_storage();
170851
170997
  });
@@ -175862,7 +176008,7 @@ Available commands:`));
175862
176008
  }
175863
176009
  if (parsed.command === "evalops") {
175864
176010
  const { handleEvalOpsCommand: handleEvalOpsCommand2 } = await Promise.resolve().then(() => (init_evalops2(), exports_evalops));
175865
- await handleEvalOpsCommand2(parsed.subcommand);
176011
+ await handleEvalOpsCommand2(parsed.subcommand, parsed.commandArgs ?? []);
175866
176012
  return;
175867
176013
  }
175868
176014
  if (parsed.command === "init") {
@@ -1 +1 @@
1
- {"version":3,"file":"agent-bootstrap.d.ts","sourceRoot":"","sources":["../../src/evalops/agent-bootstrap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-bootstrap.d.ts","sourceRoot":"","sources":["../../src/evalops/agent-bootstrap.ts"],"names":[],"mappings":"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"}