@evalops/maestro 0.10.17 → 0.10.18

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.
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AACA,OAAO,EACN,KAAK,kBAAkB,EACvB,qBAAqB,EACrB,MAAM,kCAAkC,CAAC;AAG1C,wBAAgB,cAAc,IAAI,MAAM,CAuBvC;AA4BD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,kBAAkB,CA+FhE;AAMD,wBAAgB,iBAAiB,CAChC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,GACvD,MAAM,CAuCR;AAED,wBAAsB,iBAAiB,CAAC,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA+C1E"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AACA,OAAO,EACN,KAAK,kBAAkB,EACvB,qBAAqB,EACrB,MAAM,kCAAkC,CAAC;AAG1C,wBAAgB,cAAc,IAAI,MAAM,CAwBvC;AA4BD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAuGhE;AAMD,wBAAgB,iBAAiB,CAChC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,GACvD,MAAM,CAuCR;AAED,wBAAsB,iBAAiB,CAAC,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA+C1E"}
@@ -15,6 +15,7 @@ Options
15
15
  --trace-mode <mode> none, mcp_events, or otlp
16
16
  --memory-mode <mode> none, read_only, durable, or cerebro
17
17
  --runtime-owner <owner> external or evalops
18
+ --capability <cap[,cap...]> Agent capability to declare; repeatable
18
19
  --workspace, --workspace-id <id> Workspace to associate with the registration
19
20
  --scope <scope[,scope...]> Registration scopes to request
20
21
  --key-scope <scope[,scope...]> API key scopes to request
@@ -65,6 +66,11 @@ export function parseInitArgs(args) {
65
66
  options.apiKeyScopes = appendScopes(options.apiKeyScopes, readValue(args, i, arg));
66
67
  i++;
67
68
  break;
69
+ case "--capabilities":
70
+ case "--capability":
71
+ options.capabilities = appendScopes(options.capabilities, readValue(args, i, arg));
72
+ i++;
73
+ break;
68
74
  case "--expires-in-days":
69
75
  options.expiresInDays = parsePositiveInteger(readValue(args, i, arg), arg);
70
76
  i++;
@@ -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\";\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 --integration-profile <profile> mcp_only, mcp_otlp, managed_runtime, sdk_integrated, or provider_proxy\n --shim-type <type> native_mcp, command_wrapper, hook, provider_proxy, sdk, or mcp_firewall_proxy\n --trace-mode <mode> none, mcp_events, or otlp\n --memory-mode <mode> none, read_only, durable, or cerebro\n --runtime-owner <owner> external or evalops\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 \"--integration-profile\":\n\t\t\t\toptions.integrationProfile = readValue(args, i, arg);\n\t\t\t\ti++;\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 \"--memory-mode\":\n\t\t\t\toptions.memoryMode = 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 \"--runtime-owner\":\n\t\t\t\toptions.runtimeOwner = readValue(args, i, arg);\n\t\t\t\ti++;\n\t\t\t\tbreak;\n\t\t\tcase \"--shim-type\":\n\t\t\t\toptions.shimType = readValue(args, i, arg);\n\t\t\t\ti++;\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 \"--trace-mode\":\n\t\t\t\toptions.traceMode = 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\nfunction checkLine(text: string): string {\n\treturn `${chalk.green(\"✓\")} ${text}`;\n}\n\nexport function formatInitSuccess(\n\tresult: Awaited<ReturnType<typeof bootstrapEvalOpsAgent>>,\n): string {\n\tconst keyMode = result.apiKeyCreated ? \"Created\" : \"Reused\";\n\tconst authenticatedAs = result.authenticatedAs ?? \"EvalOps\";\n\tconst governedActions = result.governedActionsLoaded ?? 0;\n\tconst lines = [\n\t\tchalk.bold(\"EvalOps Maestro bootstrap\"),\n\t\t\"\",\n\t\tcheckLine(`Authenticated as ${authenticatedAs}`),\n\t\tcheckLine(`${keyMode} managed inference key`),\n\t\tcheckLine(\"Registered local agent runtime\"),\n\t\tcheckLine(\n\t\t\t`Integration profile ${result.integrationProfile ?? \"managed_runtime\"} via ${result.shimType ?? \"sdk\"}`,\n\t\t),\n\t\tcheckLine(`Loaded ${governedActions} governed actions`),\n\t\tcheckLine(\n\t\t\tresult.approvalPolicyAttached\n\t\t\t\t? \"Attached default approval policy\"\n\t\t\t\t: \"Queued approval policy review\",\n\t\t),\n\t\tcheckLine(\n\t\t\tresult.traceIngestionStarted\n\t\t\t\t? \"Started trace ingestion\"\n\t\t\t\t: \"Requested trace ingestion\",\n\t\t),\n\t\tcheckLine(\n\t\t\tresult.governedInferenceCheckRan\n\t\t\t\t? \"Ran first governed inference check\"\n\t\t\t\t: \"Queued first governed inference check\",\n\t\t),\n\t\tcheckLine(\n\t\t\tresult.evidenceEventPublished\n\t\t\t\t? \"Published evidence event\"\n\t\t\t\t: \"Queued evidence event\",\n\t\t),\n\t\t\"\",\n\t\t\"Open console:\",\n\t\tresult.consoleUrl ?? \"https://app.evalops.dev/overview?env=production\",\n\t];\n\treturn lines.join(\"\\n\");\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\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(formatInitSuccess(result));\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 --integration-profile <profile> mcp_only, mcp_otlp, managed_runtime, sdk_integrated, or provider_proxy\n --shim-type <type> native_mcp, command_wrapper, hook, provider_proxy, sdk, or mcp_firewall_proxy\n --trace-mode <mode> none, mcp_events, or otlp\n --memory-mode <mode> none, read_only, durable, or cerebro\n --runtime-owner <owner> external or evalops\n --capability <cap[,cap...]> Agent capability to declare; repeatable\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 \"--capabilities\":\n\t\t\tcase \"--capability\":\n\t\t\t\toptions.capabilities = appendScopes(\n\t\t\t\t\toptions.capabilities,\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 \"--integration-profile\":\n\t\t\t\toptions.integrationProfile = readValue(args, i, arg);\n\t\t\t\ti++;\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 \"--memory-mode\":\n\t\t\t\toptions.memoryMode = 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 \"--runtime-owner\":\n\t\t\t\toptions.runtimeOwner = readValue(args, i, arg);\n\t\t\t\ti++;\n\t\t\t\tbreak;\n\t\t\tcase \"--shim-type\":\n\t\t\t\toptions.shimType = readValue(args, i, arg);\n\t\t\t\ti++;\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 \"--trace-mode\":\n\t\t\t\toptions.traceMode = 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\nfunction checkLine(text: string): string {\n\treturn `${chalk.green(\"✓\")} ${text}`;\n}\n\nexport function formatInitSuccess(\n\tresult: Awaited<ReturnType<typeof bootstrapEvalOpsAgent>>,\n): string {\n\tconst keyMode = result.apiKeyCreated ? \"Created\" : \"Reused\";\n\tconst authenticatedAs = result.authenticatedAs ?? \"EvalOps\";\n\tconst governedActions = result.governedActionsLoaded ?? 0;\n\tconst lines = [\n\t\tchalk.bold(\"EvalOps Maestro bootstrap\"),\n\t\t\"\",\n\t\tcheckLine(`Authenticated as ${authenticatedAs}`),\n\t\tcheckLine(`${keyMode} managed inference key`),\n\t\tcheckLine(\"Registered local agent runtime\"),\n\t\tcheckLine(\n\t\t\t`Integration profile ${result.integrationProfile ?? \"managed_runtime\"} via ${result.shimType ?? \"sdk\"}`,\n\t\t),\n\t\tcheckLine(`Loaded ${governedActions} governed actions`),\n\t\tcheckLine(\n\t\t\tresult.approvalPolicyAttached\n\t\t\t\t? \"Attached default approval policy\"\n\t\t\t\t: \"Queued approval policy review\",\n\t\t),\n\t\tcheckLine(\n\t\t\tresult.traceIngestionStarted\n\t\t\t\t? \"Started trace ingestion\"\n\t\t\t\t: \"Requested trace ingestion\",\n\t\t),\n\t\tcheckLine(\n\t\t\tresult.governedInferenceCheckRan\n\t\t\t\t? \"Ran first governed inference check\"\n\t\t\t\t: \"Queued first governed inference check\",\n\t\t),\n\t\tcheckLine(\n\t\t\tresult.evidenceEventPublished\n\t\t\t\t? \"Published evidence event\"\n\t\t\t\t: \"Queued evidence event\",\n\t\t),\n\t\t\"\",\n\t\t\"Open console:\",\n\t\tresult.consoleUrl ?? \"https://app.evalops.dev/overview?env=production\",\n\t];\n\treturn lines.join(\"\\n\");\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\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(formatInitSuccess(result));\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAyBA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,QAyNxC"}
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAyBA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,QA0NxC"}
package/dist/cli/help.js CHANGED
@@ -174,6 +174,7 @@ export function printHelp(version) {
174
174
  const initSection = `${sectionHeading("maestro init")}${muted(` maestro init Login, create or reuse an API key, and register this agent
175
175
  maestro init --rotate-key Replace the stored agent MCP API key
176
176
  maestro init --mcp-url <url> Override the EvalOps agent MCP endpoint
177
+ maestro init --capability code:write Declare an agent-registry capability
177
178
  maestro init --json Emit machine-readable bootstrap output`)}`;
178
179
  const hostedRunnerSection = `${sectionHeading("maestro hosted-runner")}${muted(` maestro hosted-runner --runner-session-id <id> --workspace-root <path> [--listen 0.0.0.0:8080]
179
180
 
@@ -1 +1 @@
1
- {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview CLI Help Output Module\n *\n * This module generates and displays the `--help` output for the Maestro CLI.\n * It provides a comprehensive overview of:\n *\n * - **Usage syntax** and common invocation patterns\n * - **Command-line options** for provider, model, session management, etc.\n * - **Environment variables** for API keys and configuration\n * - **Available tools** and their capabilities\n * - **Subcommands** like `maestro exec` for headless execution\n * - **Session management** commands and workflows\n *\n * ## Styling\n *\n * The output uses the application's theme system for consistent terminal styling:\n * - `heading()` - Main title styling\n * - `sectionHeading()` - Section headers\n * - `muted()` - De-emphasized text for descriptions\n * - `badge()` - Highlighted tips and hints\n *\n * @module cli/help\n */\nimport { badge, heading, muted, sectionHeading } from \"../style/theme.js\";\n\n/**\n * Prints the complete CLI help message to stdout.\n *\n * This function is invoked when the user runs `maestro --help` or `maestro -h`.\n * It formats and displays all available options, commands, and usage examples\n * using the terminal theme for consistent styling.\n *\n * @param version - The current Maestro version string (e.g., \"1.2.3\")\n *\n * @example\n * ```typescript\n * import { printHelp } from \"./help.js\";\n * import { version } from \"../../package.json\";\n *\n * if (args.includes(\"--help\")) {\n * printHelp(version);\n * process.exit(0);\n * }\n * ```\n */\nexport function printHelp(version: string) {\n\tconst header = `${heading(\"Maestro\")} ${muted(\n\t\t`v${version} by EvalOps — AI coding assistant with read, list, search, diff, bash, edit, write, todo tools`,\n\t)}`;\n\tconst usage = `${sectionHeading(\"Usage\")}${muted(\n\t\t\"maestro [options] [messages...]\",\n\t)}`;\n\tconst options = `${sectionHeading(\"Options\")}${[\n\t\t\"--provider <name> Provider name (default: anthropic)\",\n\t\t\"-m, --model <id> Model ID (default: claude-sonnet-4-5)\",\n\t\t\"--task-budget <tokens> API-side Anthropic task budget in tokens\",\n\t\t\"--models <patterns> Comma-separated patterns for Ctrl+P model cycling\",\n\t\t\"--tools <names> Comma-separated tool names to enable (e.g., read,search,list,find)\",\n\t\t\"--api-key <key> API key (defaults to env vars)\",\n\t\t\"--system-prompt <text> System prompt (default: coding assistant prompt)\",\n\t\t\"--append-system-prompt <text> Append instructions to the system prompt\",\n\t\t\"--mode <mode> Output mode: text (default), json, or rpc\",\n\t\t\"--auth <mode> Credential mode: auto (default), api-key, claude\",\n\t\t\"--approval-mode <mode> Action approvals: prompt (default in TUI), auto, fail\",\n\t\t\"--sandbox <mode> Sandbox mode: docker, local, none (see docs/SAFETY.md)\",\n\t\t\"--port <n> Port for `maestro web` (defaults to PORT env or 8080)\",\n\t\t\"--continue, -c Continue previous session\",\n\t\t\"--resume, -r Select a session to resume\",\n\t\t\"--session <path> Use specific session file\",\n\t\t\"--no-session Don't save session (ephemeral)\",\n\t\t\"--safe-mode Enable extra safety restrictions\",\n\t\t\"--help, -h Show this help\",\n\t]\n\t\t.map((line) => ` ${muted(line)}`)\n\t\t.join(\"\\n\")}`;\n\tconst examples = `${sectionHeading(\"Examples\")}${muted(\n\t\t` # Interactive mode (no messages = interactive TUI)\n maestro\n\n # Single message\n maestro \"List all .ts files in src/\"\n\n # Multiple messages\n maestro \"Read package.json\" \"What dependencies do we have?\"\n\n # Continue previous session\n maestro --continue \"What did we discuss?\"\n\n # Use different model\n maestro --provider openai --model gpt-4o-mini \"Help me refactor this code\"\n\n # Use Codex subscription models after \\`maestro codex login\\`\n maestro --provider openai-codex --model gpt-5.5 \"Plan this migration\"\n\n # Bootstrap EvalOps login, API key, and agent registration in one flow\n maestro init\n\n # Use EvalOps managed gateway models after \\`maestro init\\`\n maestro --provider evalops --model gpt-4o-mini \"Say hello in one sentence\"\n\n # Confirm managed mode sinks and EvalOps org identity\n maestro status\n\n # Export a portable session log\n maestro export <session-id> ./session.jsonl --format jsonl\n\n # Export a portable JSON archive with secret redaction\n maestro export <session-id> ./session.json --format json --redact-secrets\n\n # Import a portable session log into this workspace\n maestro import ./session.json\n\n # Start a hosted EvalOps runner session and wait for attach readiness\n maestro remote start --workspace ws_123 --repo evalops/foo --branch main --ttl 90m --wait --verify\n\n # Run a single-session hosted runtime pod entrypoint\n maestro hosted-runner --runner-session-id mrs_abc --workspace-root /workspace --listen 0.0.0.0:8080\n\n # Show usage analytics for the last 7 days\n maestro stats\n\n # Show usage analytics for one session\n maestro stats --session <session-id>`,\n\t)}`;\n\tconst env = `${sectionHeading(\"Environment Variables:\")}${muted(\n\t\t` GEMINI_API_KEY - Google Gemini API key\n OPENAI_API_KEY - OpenAI API key\n OPENAI_CODEX_TOKEN - OpenAI Codex ChatGPT access token\n OPENAI_CODEX_ACCOUNT_ID - ChatGPT account id when using a raw Codex token\n ANTHROPIC_API_KEY - Anthropic API key\n CLAUDE_CODE_TOKEN - Claude Code access token for --auth claude\n ANTHROPIC_OAUTH_TOKEN - Alternate env for Claude Code bearer tokens\n MAESTRO_AGENT_DIR - Session storage directory (default: ~/.maestro/agent)\n MAESTRO_SANDBOX_MODE - Sandbox mode: docker, local, none (default: none)\n MAESTRO_CHANGELOG - Set to off/false/hide/hidden/skip/0 to hide startup changelog banner\n MAESTRO_TUI_MINIMAL - Set to 1/true to disable animations and reduce TUI effects (SSH-friendly)\n MAESTRO_TUI_TOOL_MAX_CHARS - Max chars shown per tool output panel (0 = unlimited)\n MAESTRO_TUI_TOOL_MAX_LINES - Max lines shown per tool output panel (0 = unlimited)\n MAESTRO_MEMORY_BASE - Durable memory service base URL\n MAESTRO_MEMORY_ACCESS_TOKEN - Override bearer token for durable memory service\n MAESTRO_MEMORY_TEAM_ID - Optional team scope for durable memory service\n MAESTRO_SHARED_MEMORY_BASE - Shared memory base URL (Cloudflare Durable Objects worker)\n MAESTRO_SHARED_MEMORY_API_KEY - API key for shared memory service\n MAESTRO_REMOTE_RUNNER_URL - Hosted runner control-plane URL (default: https://runner.evalops.dev)\n MAESTRO_REMOTE_RUNNER_TOKEN - Hosted runner bearer token override\n MAESTRO_REMOTE_RUNNER_ORG_ID - EvalOps organization id for hosted runner sessions\n MAESTRO_REMOTE_RUNNER_WORKSPACE_ID - EvalOps workspace id for hosted runner sessions\n CODING_AGENT_DIR - Legacy session directory override (fallback)`,\n\t)}`;\n\tconst execSection = `${sectionHeading(\"maestro exec\")}${muted(\n\t\t` maestro exec \"Summarize recent changes\" --json\n\n Flags:\n --json Stream JSONL thread/turn events\n --output-schema <file|json> Validate final assistant JSON against a schema\n --output-last-message <path> Write the final assistant message to disk\n --full-auto | --read-only Force approval policy (auto or fail)\n --sandbox <mode> Run in sandbox: docker, local, none\n --resume <sessionId> Resume a prior exec session by id\n --last Resume the most recent exec session`,\n\t)}`;\n\tconst webSection = `${sectionHeading(\"maestro web\")}${muted(\n\t\t` # Start the bundled web UI + API server\n maestro web\n\n # Use a custom port\n maestro web --port 3000`,\n\t)}`;\n\tconst portabilitySection = `${sectionHeading(\"Session Portability\")}${muted(\n\t\t` maestro export <session-id> [output-path] --format json|jsonl [--redact-secrets]\n maestro import <file.json|file.jsonl>\n\n Notes:\n - json preserves the full session in a portable wrapper object\n - jsonl preserves the append-only session log verbatim unless redaction is requested\n - --redact-secrets scrubs detected credentials from exported payloads\n - import restores the session into the current workspace session directory`,\n\t)}`;\n\tconst memorySection = `${sectionHeading(\"maestro memory\")}${muted(\n\t\t` maestro memory [status] Show shared memory service status\n maestro memory session <id> Show per-session metrics\n maestro memory audit <id> [n] Show recent sync audit entries\n maestro memory export <id> Export metrics log as JSONL\n maestro memory watch [id] [ms] Poll status/metrics continuously`,\n\t)}`;\n\tconst remoteSection = `${sectionHeading(\"maestro remote\")}${muted(\n\t\t` maestro remote start --workspace <id> --repo <repo> --branch <branch> [--ttl 90m] [--wait] [--verify]\n maestro remote list --workspace <id> [--state running]\n maestro remote attach <session-id> [--verify] [--print-env]\n maestro remote extend <session-id> --ttl 2h\n maestro remote stop <session-id> [--reason <text>]`,\n\t)}`;\n\tconst initSection = `${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\t)}`;\n\tconst hostedRunnerSection = `${sectionHeading(\"maestro hosted-runner\")}${muted(\n\t\t` maestro hosted-runner --runner-session-id <id> --workspace-root <path> [--listen 0.0.0.0:8080]\n\n Env mode:\n MAESTRO_RUNNER_SESSION_ID=mrs_abc MAESTRO_WORKSPACE_ROOT=/workspace maestro hosted-runner`,\n\t)}`;\n\tconst sessionsSection = `${sectionHeading(\"Session Metadata\")}${muted(\n\t\t` /session favorite|unfavorite Toggle favorite for current session\n /session summary \"<text>\" Save a manual summary for current session\n /sessions summarize <id> Auto-summarize a saved session`,\n\t)}`;\n\tconst sessionsDiscovery = `${sectionHeading(\"Session Commands\")}${muted(\n\t\t` /session [info|favorite|unfavorite|summary \"<text>\"]\n /sessions [list|load <id>|favorite <id>|unfavorite <id>|summarize <id>]\n (Also available via TUI command palette)`,\n\t)}`;\n\tconst tools = `${sectionHeading(\"Available Tools\")}${muted(\n\t\t` read - Read file contents\n list - List files in a directory\n find - Fast file search using fd (glob patterns)\n search - Search files with ripgrep-style filtering\n parallel_ripgrep - Run multiple ripgrep patterns in parallel and merge line ranges\n diff - Show git diffs (workspace, staged, or ranges)\n bash - Execute bash commands\n edit - Edit files with find/replace\n write - Write files (creates/overwrites)\n todo - Create TodoWrite-style checklists\n\n Read-only tools: read,list,find,search,parallel_ripgrep,diff,status\n Example: maestro --tools read,list,find,search,parallel_ripgrep,diff \"Analyze this code\"`,\n\t)}`;\n\n\tconst frameworkSection = `${sectionHeading(\"Framework Preference\")}${muted(\n\t\t` /framework <id> Set default stack (fastapi, express, node)\n /framework <id> --workspace Set workspace-scoped default\n /framework list Show available options\n Precedence: policy (locked) > policy > env override > env default > workspace > user file > none`,\n\t)}`;\n\n\tconsole.log(\n\t\t[\n\t\t\theader,\n\t\t\tusage,\n\t\t\toptions,\n\t\t\texamples,\n\t\t\tenv,\n\t\t\texecSection,\n\t\t\twebSection,\n\t\t\tportabilitySection,\n\t\t\tmemorySection,\n\t\t\tinitSection,\n\t\t\tremoteSection,\n\t\t\thostedRunnerSection,\n\t\t\tsessionsSection,\n\t\t\tsessionsDiscovery,\n\t\t\t`${sectionHeading(\"Tips\")}${badge(\n\t\t\t\t\"Need models?\",\n\t\t\t\t\"maestro models list\",\n\t\t\t\t\"info\",\n\t\t\t)}`,\n\t\t\tframeworkSection,\n\t\t\ttools,\n\t\t].join(\"\\n\\n\"),\n\t);\n}\n"]}
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview CLI Help Output Module\n *\n * This module generates and displays the `--help` output for the Maestro CLI.\n * It provides a comprehensive overview of:\n *\n * - **Usage syntax** and common invocation patterns\n * - **Command-line options** for provider, model, session management, etc.\n * - **Environment variables** for API keys and configuration\n * - **Available tools** and their capabilities\n * - **Subcommands** like `maestro exec` for headless execution\n * - **Session management** commands and workflows\n *\n * ## Styling\n *\n * The output uses the application's theme system for consistent terminal styling:\n * - `heading()` - Main title styling\n * - `sectionHeading()` - Section headers\n * - `muted()` - De-emphasized text for descriptions\n * - `badge()` - Highlighted tips and hints\n *\n * @module cli/help\n */\nimport { badge, heading, muted, sectionHeading } from \"../style/theme.js\";\n\n/**\n * Prints the complete CLI help message to stdout.\n *\n * This function is invoked when the user runs `maestro --help` or `maestro -h`.\n * It formats and displays all available options, commands, and usage examples\n * using the terminal theme for consistent styling.\n *\n * @param version - The current Maestro version string (e.g., \"1.2.3\")\n *\n * @example\n * ```typescript\n * import { printHelp } from \"./help.js\";\n * import { version } from \"../../package.json\";\n *\n * if (args.includes(\"--help\")) {\n * printHelp(version);\n * process.exit(0);\n * }\n * ```\n */\nexport function printHelp(version: string) {\n\tconst header = `${heading(\"Maestro\")} ${muted(\n\t\t`v${version} by EvalOps — AI coding assistant with read, list, search, diff, bash, edit, write, todo tools`,\n\t)}`;\n\tconst usage = `${sectionHeading(\"Usage\")}${muted(\n\t\t\"maestro [options] [messages...]\",\n\t)}`;\n\tconst options = `${sectionHeading(\"Options\")}${[\n\t\t\"--provider <name> Provider name (default: anthropic)\",\n\t\t\"-m, --model <id> Model ID (default: claude-sonnet-4-5)\",\n\t\t\"--task-budget <tokens> API-side Anthropic task budget in tokens\",\n\t\t\"--models <patterns> Comma-separated patterns for Ctrl+P model cycling\",\n\t\t\"--tools <names> Comma-separated tool names to enable (e.g., read,search,list,find)\",\n\t\t\"--api-key <key> API key (defaults to env vars)\",\n\t\t\"--system-prompt <text> System prompt (default: coding assistant prompt)\",\n\t\t\"--append-system-prompt <text> Append instructions to the system prompt\",\n\t\t\"--mode <mode> Output mode: text (default), json, or rpc\",\n\t\t\"--auth <mode> Credential mode: auto (default), api-key, claude\",\n\t\t\"--approval-mode <mode> Action approvals: prompt (default in TUI), auto, fail\",\n\t\t\"--sandbox <mode> Sandbox mode: docker, local, none (see docs/SAFETY.md)\",\n\t\t\"--port <n> Port for `maestro web` (defaults to PORT env or 8080)\",\n\t\t\"--continue, -c Continue previous session\",\n\t\t\"--resume, -r Select a session to resume\",\n\t\t\"--session <path> Use specific session file\",\n\t\t\"--no-session Don't save session (ephemeral)\",\n\t\t\"--safe-mode Enable extra safety restrictions\",\n\t\t\"--help, -h Show this help\",\n\t]\n\t\t.map((line) => ` ${muted(line)}`)\n\t\t.join(\"\\n\")}`;\n\tconst examples = `${sectionHeading(\"Examples\")}${muted(\n\t\t` # Interactive mode (no messages = interactive TUI)\n maestro\n\n # Single message\n maestro \"List all .ts files in src/\"\n\n # Multiple messages\n maestro \"Read package.json\" \"What dependencies do we have?\"\n\n # Continue previous session\n maestro --continue \"What did we discuss?\"\n\n # Use different model\n maestro --provider openai --model gpt-4o-mini \"Help me refactor this code\"\n\n # Use Codex subscription models after \\`maestro codex login\\`\n maestro --provider openai-codex --model gpt-5.5 \"Plan this migration\"\n\n # Bootstrap EvalOps login, API key, and agent registration in one flow\n maestro init\n\n # Use EvalOps managed gateway models after \\`maestro init\\`\n maestro --provider evalops --model gpt-4o-mini \"Say hello in one sentence\"\n\n # Confirm managed mode sinks and EvalOps org identity\n maestro status\n\n # Export a portable session log\n maestro export <session-id> ./session.jsonl --format jsonl\n\n # Export a portable JSON archive with secret redaction\n maestro export <session-id> ./session.json --format json --redact-secrets\n\n # Import a portable session log into this workspace\n maestro import ./session.json\n\n # Start a hosted EvalOps runner session and wait for attach readiness\n maestro remote start --workspace ws_123 --repo evalops/foo --branch main --ttl 90m --wait --verify\n\n # Run a single-session hosted runtime pod entrypoint\n maestro hosted-runner --runner-session-id mrs_abc --workspace-root /workspace --listen 0.0.0.0:8080\n\n # Show usage analytics for the last 7 days\n maestro stats\n\n # Show usage analytics for one session\n maestro stats --session <session-id>`,\n\t)}`;\n\tconst env = `${sectionHeading(\"Environment Variables:\")}${muted(\n\t\t` GEMINI_API_KEY - Google Gemini API key\n OPENAI_API_KEY - OpenAI API key\n OPENAI_CODEX_TOKEN - OpenAI Codex ChatGPT access token\n OPENAI_CODEX_ACCOUNT_ID - ChatGPT account id when using a raw Codex token\n ANTHROPIC_API_KEY - Anthropic API key\n CLAUDE_CODE_TOKEN - Claude Code access token for --auth claude\n ANTHROPIC_OAUTH_TOKEN - Alternate env for Claude Code bearer tokens\n MAESTRO_AGENT_DIR - Session storage directory (default: ~/.maestro/agent)\n MAESTRO_SANDBOX_MODE - Sandbox mode: docker, local, none (default: none)\n MAESTRO_CHANGELOG - Set to off/false/hide/hidden/skip/0 to hide startup changelog banner\n MAESTRO_TUI_MINIMAL - Set to 1/true to disable animations and reduce TUI effects (SSH-friendly)\n MAESTRO_TUI_TOOL_MAX_CHARS - Max chars shown per tool output panel (0 = unlimited)\n MAESTRO_TUI_TOOL_MAX_LINES - Max lines shown per tool output panel (0 = unlimited)\n MAESTRO_MEMORY_BASE - Durable memory service base URL\n MAESTRO_MEMORY_ACCESS_TOKEN - Override bearer token for durable memory service\n MAESTRO_MEMORY_TEAM_ID - Optional team scope for durable memory service\n MAESTRO_SHARED_MEMORY_BASE - Shared memory base URL (Cloudflare Durable Objects worker)\n MAESTRO_SHARED_MEMORY_API_KEY - API key for shared memory service\n MAESTRO_REMOTE_RUNNER_URL - Hosted runner control-plane URL (default: https://runner.evalops.dev)\n MAESTRO_REMOTE_RUNNER_TOKEN - Hosted runner bearer token override\n MAESTRO_REMOTE_RUNNER_ORG_ID - EvalOps organization id for hosted runner sessions\n MAESTRO_REMOTE_RUNNER_WORKSPACE_ID - EvalOps workspace id for hosted runner sessions\n CODING_AGENT_DIR - Legacy session directory override (fallback)`,\n\t)}`;\n\tconst execSection = `${sectionHeading(\"maestro exec\")}${muted(\n\t\t` maestro exec \"Summarize recent changes\" --json\n\n Flags:\n --json Stream JSONL thread/turn events\n --output-schema <file|json> Validate final assistant JSON against a schema\n --output-last-message <path> Write the final assistant message to disk\n --full-auto | --read-only Force approval policy (auto or fail)\n --sandbox <mode> Run in sandbox: docker, local, none\n --resume <sessionId> Resume a prior exec session by id\n --last Resume the most recent exec session`,\n\t)}`;\n\tconst webSection = `${sectionHeading(\"maestro web\")}${muted(\n\t\t` # Start the bundled web UI + API server\n maestro web\n\n # Use a custom port\n maestro web --port 3000`,\n\t)}`;\n\tconst portabilitySection = `${sectionHeading(\"Session Portability\")}${muted(\n\t\t` maestro export <session-id> [output-path] --format json|jsonl [--redact-secrets]\n maestro import <file.json|file.jsonl>\n\n Notes:\n - json preserves the full session in a portable wrapper object\n - jsonl preserves the append-only session log verbatim unless redaction is requested\n - --redact-secrets scrubs detected credentials from exported payloads\n - import restores the session into the current workspace session directory`,\n\t)}`;\n\tconst memorySection = `${sectionHeading(\"maestro memory\")}${muted(\n\t\t` maestro memory [status] Show shared memory service status\n maestro memory session <id> Show per-session metrics\n maestro memory audit <id> [n] Show recent sync audit entries\n maestro memory export <id> Export metrics log as JSONL\n maestro memory watch [id] [ms] Poll status/metrics continuously`,\n\t)}`;\n\tconst remoteSection = `${sectionHeading(\"maestro remote\")}${muted(\n\t\t` maestro remote start --workspace <id> --repo <repo> --branch <branch> [--ttl 90m] [--wait] [--verify]\n maestro remote list --workspace <id> [--state running]\n maestro remote attach <session-id> [--verify] [--print-env]\n maestro remote extend <session-id> --ttl 2h\n maestro remote stop <session-id> [--reason <text>]`,\n\t)}`;\n\tconst initSection = `${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 --capability code:write Declare an agent-registry capability\n maestro init --json Emit machine-readable bootstrap output`,\n\t)}`;\n\tconst hostedRunnerSection = `${sectionHeading(\"maestro hosted-runner\")}${muted(\n\t\t` maestro hosted-runner --runner-session-id <id> --workspace-root <path> [--listen 0.0.0.0:8080]\n\n Env mode:\n MAESTRO_RUNNER_SESSION_ID=mrs_abc MAESTRO_WORKSPACE_ROOT=/workspace maestro hosted-runner`,\n\t)}`;\n\tconst sessionsSection = `${sectionHeading(\"Session Metadata\")}${muted(\n\t\t` /session favorite|unfavorite Toggle favorite for current session\n /session summary \"<text>\" Save a manual summary for current session\n /sessions summarize <id> Auto-summarize a saved session`,\n\t)}`;\n\tconst sessionsDiscovery = `${sectionHeading(\"Session Commands\")}${muted(\n\t\t` /session [info|favorite|unfavorite|summary \"<text>\"]\n /sessions [list|load <id>|favorite <id>|unfavorite <id>|summarize <id>]\n (Also available via TUI command palette)`,\n\t)}`;\n\tconst tools = `${sectionHeading(\"Available Tools\")}${muted(\n\t\t` read - Read file contents\n list - List files in a directory\n find - Fast file search using fd (glob patterns)\n search - Search files with ripgrep-style filtering\n parallel_ripgrep - Run multiple ripgrep patterns in parallel and merge line ranges\n diff - Show git diffs (workspace, staged, or ranges)\n bash - Execute bash commands\n edit - Edit files with find/replace\n write - Write files (creates/overwrites)\n todo - Create TodoWrite-style checklists\n\n Read-only tools: read,list,find,search,parallel_ripgrep,diff,status\n Example: maestro --tools read,list,find,search,parallel_ripgrep,diff \"Analyze this code\"`,\n\t)}`;\n\n\tconst frameworkSection = `${sectionHeading(\"Framework Preference\")}${muted(\n\t\t` /framework <id> Set default stack (fastapi, express, node)\n /framework <id> --workspace Set workspace-scoped default\n /framework list Show available options\n Precedence: policy (locked) > policy > env override > env default > workspace > user file > none`,\n\t)}`;\n\n\tconsole.log(\n\t\t[\n\t\t\theader,\n\t\t\tusage,\n\t\t\toptions,\n\t\t\texamples,\n\t\t\tenv,\n\t\t\texecSection,\n\t\t\twebSection,\n\t\t\tportabilitySection,\n\t\t\tmemorySection,\n\t\t\tinitSection,\n\t\t\tremoteSection,\n\t\t\thostedRunnerSection,\n\t\t\tsessionsSection,\n\t\t\tsessionsDiscovery,\n\t\t\t`${sectionHeading(\"Tips\")}${badge(\n\t\t\t\t\"Need models?\",\n\t\t\t\t\"maestro models list\",\n\t\t\t\t\"info\",\n\t\t\t)}`,\n\t\t\tframeworkSection,\n\t\t\ttools,\n\t\t].join(\"\\n\\n\"),\n\t);\n}\n"]}
package/dist/cli.js CHANGED
@@ -53109,7 +53109,7 @@ async function resolvePlatformServiceConfig(options) {
53109
53109
  if (!organizationId && options.requireOrganizationId !== false) {
53110
53110
  return null;
53111
53111
  }
53112
- const token = await resolvePlatformToken(options.tokenEnvVars);
53112
+ const token = options.allowOAuthTokenFallback === false ? getEnvValue3(options.tokenEnvVars ?? []) : await resolvePlatformToken(options.tokenEnvVars);
53113
53113
  if (!token && options.requireToken !== false) {
53114
53114
  return null;
53115
53115
  }
@@ -87668,6 +87668,23 @@ function memoryModeForOptions(options) {
87668
87668
  function runtimeOwnerForOptions(options) {
87669
87669
  return nonEmptyString2(options.runtimeOwner) ?? (integrationProfileForOptions(options) === "managed_runtime" ? "evalops" : "external");
87670
87670
  }
87671
+ function capabilitiesForOptions(options) {
87672
+ const requested = stringArray(options.capabilities);
87673
+ const defaults = (options.agentType ?? DEFAULT_AGENT_TYPE) === DEFAULT_AGENT_TYPE ? DEFAULT_MAESTRO_AGENT_CAPABILITIES : DEFAULT_AGENT_NEUTRAL_CAPABILITIES;
87674
+ const out = [];
87675
+ const seen = /* @__PURE__ */ new Set();
87676
+ for (const capability of requested ?? defaults) {
87677
+ const normalized = nonEmptyString2(capability);
87678
+ if (!normalized)
87679
+ continue;
87680
+ const key = normalized.toLowerCase();
87681
+ if (seen.has(key))
87682
+ continue;
87683
+ seen.add(key);
87684
+ out.push(normalized);
87685
+ }
87686
+ return out;
87687
+ }
87671
87688
  async function createAgentAPIKey(options, identityBaseUrl, oauthToken, fetchImpl, now2) {
87672
87689
  const expiresInDays = positiveInteger(options.expiresInDays);
87673
87690
  const expiresAt = expiresInDays ? new Date(now2.getTime() + expiresInDays * 24 * 60 * 60 * 1e3).toISOString() : void 0;
@@ -87704,7 +87721,7 @@ async function createAgentAPIKey(options, identityBaseUrl, oauthToken, fetchImpl
87704
87721
  async function registerAgent(options, client) {
87705
87722
  const output = await callConnectedMcpTool(client, "evalops_register", {
87706
87723
  agent_type: options.agentType ?? DEFAULT_AGENT_TYPE,
87707
- capabilities: ["maestro:init", "maestro:cli"],
87724
+ capabilities: capabilitiesForOptions(options),
87708
87725
  integration_profile: integrationProfileForOptions(options),
87709
87726
  memory_mode: memoryModeForOptions(options),
87710
87727
  runtime_owner: runtimeOwnerForOptions(options),
@@ -87960,6 +87977,8 @@ var AGENT_MCP_MANIFEST_PATH = "/.well-known/evalops/agent-mcp.json";
87960
87977
  var AGENT_MCP_PATH = "/mcp";
87961
87978
  var DEFAULT_AGENT_TYPE = "maestro";
87962
87979
  var DEFAULT_SURFACE2 = "cli";
87980
+ var DEFAULT_AGENT_NEUTRAL_CAPABILITIES;
87981
+ var DEFAULT_MAESTRO_AGENT_CAPABILITIES;
87963
87982
  var DEFAULT_API_KEY_SCOPES;
87964
87983
  var init_agent_bootstrap = __esm2(() => {
87965
87984
  init_oauth();
@@ -87967,6 +87986,27 @@ var init_agent_bootstrap = __esm2(() => {
87967
87986
  init_package_metadata();
87968
87987
  init_client();
87969
87988
  init_core_services();
87989
+ DEFAULT_AGENT_NEUTRAL_CAPABILITIES = [
87990
+ "mcp",
87991
+ "tool.use",
87992
+ "responses:create"
87993
+ ];
87994
+ DEFAULT_MAESTRO_AGENT_CAPABILITIES = [
87995
+ "maestro:init",
87996
+ "maestro:cli",
87997
+ "conversation:manage",
87998
+ "workflow:orchestrate",
87999
+ "code:write",
88000
+ "code:review",
88001
+ "code:test",
88002
+ "shell",
88003
+ "git",
88004
+ "fs",
88005
+ "mcp",
88006
+ "tool.use",
88007
+ "research",
88008
+ "responses:create"
88009
+ ];
87970
88010
  DEFAULT_API_KEY_SCOPES = [
87971
88011
  "agent:register",
87972
88012
  "agent:heartbeat",
@@ -136856,6 +136896,7 @@ function printHelp(version3) {
136856
136896
  const initSection = `${sectionHeading("maestro init")}${muted(` maestro init Login, create or reuse an API key, and register this agent
136857
136897
  maestro init --rotate-key Replace the stored agent MCP API key
136858
136898
  maestro init --mcp-url <url> Override the EvalOps agent MCP endpoint
136899
+ maestro init --capability code:write Declare an agent-registry capability
136859
136900
  maestro init --json Emit machine-readable bootstrap output`)}`;
136860
136901
  const hostedRunnerSection = `${sectionHeading("maestro hosted-runner")}${muted(` maestro hosted-runner --runner-session-id <id> --workspace-root <path> [--listen 0.0.0.0:8080]
136861
136902
 
@@ -170459,6 +170500,7 @@ Options
170459
170500
  --trace-mode <mode> none, mcp_events, or otlp
170460
170501
  --memory-mode <mode> none, read_only, durable, or cerebro
170461
170502
  --runtime-owner <owner> external or evalops
170503
+ --capability <cap[,cap...]> Agent capability to declare; repeatable
170462
170504
  --workspace, --workspace-id <id> Workspace to associate with the registration
170463
170505
  --scope <scope[,scope...]> Registration scopes to request
170464
170506
  --key-scope <scope[,scope...]> API key scopes to request
@@ -170506,6 +170548,11 @@ function parseInitArgs(args) {
170506
170548
  options.apiKeyScopes = appendScopes(options.apiKeyScopes, readValue(args, i2, arg));
170507
170549
  i2++;
170508
170550
  break;
170551
+ case "--capabilities":
170552
+ case "--capability":
170553
+ options.capabilities = appendScopes(options.capabilities, readValue(args, i2, arg));
170554
+ i2++;
170555
+ break;
170509
170556
  case "--expires-in-days":
170510
170557
  options.expiresInDays = parsePositiveInteger(readValue(args, i2, arg), arg);
170511
170558
  i2++;
@@ -4,6 +4,7 @@ import { loadOAuthCredentials, saveOAuthCredentials } from "../oauth/storage.js"
4
4
  export interface EvalOpsInitOptions {
5
5
  agentType?: string;
6
6
  apiKeyScopes?: string[];
7
+ capabilities?: string[];
7
8
  expiresInDays?: number;
8
9
  forceLogin?: boolean;
9
10
  integrationProfile?: string;
@@ -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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"}
@@ -12,6 +12,27 @@ const AGENT_MCP_MANIFEST_PATH = "/.well-known/evalops/agent-mcp.json";
12
12
  const AGENT_MCP_PATH = "/mcp";
13
13
  const DEFAULT_AGENT_TYPE = "maestro";
14
14
  const DEFAULT_SURFACE = "cli";
15
+ const DEFAULT_AGENT_NEUTRAL_CAPABILITIES = [
16
+ "mcp",
17
+ "tool.use",
18
+ "responses:create",
19
+ ];
20
+ const DEFAULT_MAESTRO_AGENT_CAPABILITIES = [
21
+ "maestro:init",
22
+ "maestro:cli",
23
+ "conversation:manage",
24
+ "workflow:orchestrate",
25
+ "code:write",
26
+ "code:review",
27
+ "code:test",
28
+ "shell",
29
+ "git",
30
+ "fs",
31
+ "mcp",
32
+ "tool.use",
33
+ "research",
34
+ "responses:create",
35
+ ];
15
36
  const DEFAULT_API_KEY_SCOPES = [
16
37
  "agent:register",
17
38
  "agent:heartbeat",
@@ -334,6 +355,25 @@ function runtimeOwnerForOptions(options) {
334
355
  ? "evalops"
335
356
  : "external"));
336
357
  }
358
+ function capabilitiesForOptions(options) {
359
+ const requested = stringArray(options.capabilities);
360
+ const defaults = (options.agentType ?? DEFAULT_AGENT_TYPE) === DEFAULT_AGENT_TYPE
361
+ ? DEFAULT_MAESTRO_AGENT_CAPABILITIES
362
+ : DEFAULT_AGENT_NEUTRAL_CAPABILITIES;
363
+ const out = [];
364
+ const seen = new Set();
365
+ for (const capability of requested ?? defaults) {
366
+ const normalized = nonEmptyString(capability);
367
+ if (!normalized)
368
+ continue;
369
+ const key = normalized.toLowerCase();
370
+ if (seen.has(key))
371
+ continue;
372
+ seen.add(key);
373
+ out.push(normalized);
374
+ }
375
+ return out;
376
+ }
337
377
  async function createAgentAPIKey(options, identityBaseUrl, oauthToken, fetchImpl, now) {
338
378
  const expiresInDays = positiveInteger(options.expiresInDays);
339
379
  const expiresAt = expiresInDays
@@ -378,7 +418,7 @@ async function createAgentAPIKey(options, identityBaseUrl, oauthToken, fetchImpl
378
418
  async function registerAgent(options, client) {
379
419
  const output = await callConnectedMcpTool(client, "evalops_register", {
380
420
  agent_type: options.agentType ?? DEFAULT_AGENT_TYPE,
381
- capabilities: ["maestro:init", "maestro:cli"],
421
+ capabilities: capabilitiesForOptions(options),
382
422
  integration_profile: integrationProfileForOptions(options),
383
423
  memory_mode: memoryModeForOptions(options),
384
424
  runtime_owner: runtimeOwnerForOptions(options),
@@ -1 +1 @@
1
- {"version":3,"file":"agent-bootstrap.js","sourceRoot":"","sources":["../../src/evalops/agent-bootstrap.ts"],"names":[],"mappings":"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","sourcesContent":["import { hostname } from \"node:os\";\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport type { CallToolResult } from \"@modelcontextprotocol/sdk/types.js\";\nimport { getOAuthToken, hasOAuthCredentials, login } from \"../oauth/index.js\";\nimport {\n\ttype OAuthCredentials,\n\tloadOAuthCredentials,\n\tsaveOAuthCredentials,\n} from \"../oauth/storage.js\";\nimport { getPackageVersion } from \"../package-metadata.js\";\nimport { getEnvValue, normalizeBaseUrl } from \"../platform/client.js\";\nimport { PLATFORM_HTTP_ROUTES } from \"../platform/core-services.js\";\n\nconst DEFAULT_AGENT_MCP_BASE_URL = \"https://app.evalops.dev\";\nconst DEFAULT_IDENTITY_BASE_URL = \"https://identity.evalops.dev\";\nconst AGENT_MCP_MANIFEST_PATH = \"/.well-known/evalops/agent-mcp.json\";\nconst AGENT_MCP_PATH = \"/mcp\";\nconst DEFAULT_AGENT_TYPE = \"maestro\";\nconst DEFAULT_SURFACE = \"cli\";\nconst DEFAULT_API_KEY_SCOPES = [\n\t\"agent:register\",\n\t\"agent:heartbeat\",\n\t\"governance:evaluate\",\n\t\"llm_gateway:invoke\",\n\t\"memories:read\",\n\t\"memories:write\",\n\t\"meter:record\",\n];\n\nexport interface EvalOpsInitOptions {\n\tagentType?: string;\n\tapiKeyScopes?: string[];\n\texpiresInDays?: number;\n\tforceLogin?: boolean;\n\tintegrationProfile?: string;\n\tjson?: boolean;\n\tkeyName?: string;\n\tmanifestUrl?: string;\n\tmemoryMode?: string;\n\tmcpUrl?: string;\n\tregisterScopes?: string[];\n\trotateKey?: boolean;\n\truntimeOwner?: string;\n\tshimType?: string;\n\tsurface?: string;\n\ttraceMode?: string;\n\tttlSeconds?: number;\n\tworkspaceId?: string;\n}\n\nexport interface EvalOpsAgentMcpMetadata {\n\tagentId?: string;\n\tapiKey?: string;\n\tcreatedAt: string;\n\tendpoint: string;\n\texpiresAt?: string;\n\tintegrationProfile?: string;\n\tkeyId?: string;\n\tkeyName?: string;\n\tkeyPrefix?: string;\n\tmanifestUrl?: string;\n\tmemoryMode?: string;\n\tregisteredAt: string;\n\tregistryVisible?: boolean;\n\trunId?: string;\n\truntimeOwner?: string;\n\tscopes?: string[];\n\tsessionExpiresAt?: string;\n\tshimType?: string;\n\tsurface: string;\n\ttraceMode?: string;\n\ttype: \"agent-mcp\";\n\tworkspaceId?: string;\n}\n\nexport interface EvalOpsInitResult {\n\tagentId?: string;\n\tapiKeyCreated: boolean;\n\tapprovalPolicyAttached?: boolean;\n\tauthenticatedAs?: string;\n\tconsoleUrl?: string;\n\tendpoint: string;\n\tevidenceEventPublished?: boolean;\n\tevidenceEvents?: number;\n\tgovernedActionsLoaded?: number;\n\tgovernedInferenceCheckRan?: boolean;\n\tintegrationProfile?: string;\n\tkeyPrefix?: string;\n\tmanifestUrl?: string;\n\tmemoryMode?: string;\n\torganizationId?: string;\n\tregistryVisible?: boolean;\n\triskFindings?: number;\n\trunId?: string;\n\truntimeOwner?: string;\n\tscopesGranted?: string[];\n\tsessionExpiresAt?: string;\n\tshimType?: string;\n\tstored: boolean;\n\ttraceIngestionStarted?: boolean;\n\ttraceMode?: string;\n}\n\nexport interface EvalOpsInitStatus {\n\tmessage: string;\n}\n\nexport interface EvalOpsInitDependencies {\n\tcreateMcpClient?: (endpoint: string, bearerToken: string) => EvalOpsMcpClient;\n\tfetch?: typeof fetch;\n\tgetOAuthToken?: typeof getOAuthToken;\n\thasOAuthCredentials?: typeof hasOAuthCredentials;\n\tloadCredentials?: typeof loadOAuthCredentials;\n\tlogin?: typeof login;\n\tnow?: () => Date;\n\tonAuthUrl?: (url: string) => void;\n\tonStatus?: (status: EvalOpsInitStatus) => void;\n\tsaveCredentials?: typeof saveOAuthCredentials;\n}\n\nexport interface EvalOpsMcpClient {\n\tcallTool(\n\t\tname: string,\n\t\targs: Record<string, unknown>,\n\t): Promise<CallToolResult>;\n\tclose(): Promise<void>;\n\tconnect(): Promise<void>;\n}\n\ninterface CreateAPIKeyOutput {\n\tapi_key: string;\n\texpires_at?: string;\n\tkey_id?: string;\n\tname?: string;\n\tprefix?: string;\n\tscopes?: string[];\n}\n\ninterface CreateAPIKeyHTTPOutput extends Partial<CreateAPIKeyOutput> {\n\terror?: string;\n\tkey?: Record<string, unknown>;\n\tscopes_granted?: unknown;\n}\n\ninterface RegisterOutput {\n\tagent_id?: string;\n\texpires_at?: string;\n\tintegration_profile?: string;\n\tmemory_mode?: string;\n\tregistered?: boolean;\n\tregistry_visible?: boolean;\n\trun_id?: string;\n\truntime_owner?: string;\n\tscopes_denied?: string[];\n\tscopes_granted?: string[];\n\tshim_type?: string;\n\ttrace_mode?: string;\n}\n\ninterface CheckActionOutput {\n\tdecision?: string;\n\trisk_level?: string;\n\treasons?: string[];\n}\n\ninterface ControlPlaneSummaryOutput {\n\tevidence?: unknown[];\n\tfindings?: unknown[];\n\tmetrics?: {\n\t\tapproval_required_tools?: number;\n\t\thigh_risk_tools?: number;\n\t\ttotal_tools?: number;\n\t};\n\tpolicy_controls?: unknown[];\n\ttools?: unknown[];\n}\n\ninterface AgentMcpEndpoint {\n\tendpoint: string;\n\tidentityBaseUrl?: string;\n\tmanifestUrl?: string;\n\tpreferDerivedIdentity?: boolean;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction nonEmptyString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" && value.trim().length > 0\n\t\t? value.trim()\n\t\t: undefined;\n}\n\nfunction stringArray(value: unknown): string[] | undefined {\n\tif (!Array.isArray(value)) {\n\t\treturn undefined;\n\t}\n\tconst values = value\n\t\t.map((entry) => nonEmptyString(entry))\n\t\t.filter((entry): entry is string => Boolean(entry));\n\treturn values.length > 0 ? values : undefined;\n}\n\nfunction positiveInteger(value: number | undefined): number | undefined {\n\treturn typeof value === \"number\" && Number.isInteger(value) && value > 0\n\t\t? value\n\t\t: undefined;\n}\n\nfunction getStoredAgentMcpMetadata(\n\tcredentials: OAuthCredentials | null,\n): EvalOpsAgentMcpMetadata | undefined {\n\tconst metadata = credentials?.metadata;\n\tconst agentMcp = isRecord(metadata?.agentMcp) ? metadata.agentMcp : undefined;\n\tconst apiKey = nonEmptyString(agentMcp?.apiKey);\n\tconst endpoint = nonEmptyString(agentMcp?.endpoint);\n\tconst registeredAt = nonEmptyString(agentMcp?.registeredAt);\n\tconst createdAt = nonEmptyString(agentMcp?.createdAt);\n\tconst surface = nonEmptyString(agentMcp?.surface);\n\tif (!apiKey || !endpoint || !registeredAt || !createdAt || !surface) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\ttype: \"agent-mcp\",\n\t\tapiKey,\n\t\tcreatedAt,\n\t\tendpoint,\n\t\tregisteredAt,\n\t\tsurface,\n\t\tagentId: nonEmptyString(agentMcp?.agentId),\n\t\texpiresAt: nonEmptyString(agentMcp?.expiresAt),\n\t\tintegrationProfile: nonEmptyString(agentMcp?.integrationProfile),\n\t\tkeyId: nonEmptyString(agentMcp?.keyId),\n\t\tkeyName: nonEmptyString(agentMcp?.keyName),\n\t\tkeyPrefix: nonEmptyString(agentMcp?.keyPrefix),\n\t\tmanifestUrl: nonEmptyString(agentMcp?.manifestUrl),\n\t\tmemoryMode: nonEmptyString(agentMcp?.memoryMode),\n\t\tregistryVisible:\n\t\t\ttypeof agentMcp?.registryVisible === \"boolean\"\n\t\t\t\t? agentMcp.registryVisible\n\t\t\t\t: undefined,\n\t\trunId: nonEmptyString(agentMcp?.runId),\n\t\truntimeOwner: nonEmptyString(agentMcp?.runtimeOwner),\n\t\tscopes: stringArray(agentMcp?.scopes),\n\t\tsessionExpiresAt: nonEmptyString(agentMcp?.sessionExpiresAt),\n\t\tshimType: nonEmptyString(agentMcp?.shimType),\n\t\ttraceMode: nonEmptyString(agentMcp?.traceMode),\n\t\tworkspaceId: nonEmptyString(agentMcp?.workspaceId),\n\t};\n}\n\nexport function getStoredEvalOpsAgentMcpMetadata():\n\t| EvalOpsAgentMcpMetadata\n\t| undefined {\n\treturn getStoredAgentMcpMetadata(loadOAuthCredentials(\"evalops\"));\n}\n\nfunction normalizeMcpEndpoint(url: string): string {\n\tconst normalized = normalizeBaseUrl(url);\n\tconst parsed = new URL(normalized);\n\tif (\n\t\tparsed.pathname === \"\" ||\n\t\tparsed.pathname === \"/\" ||\n\t\tparsed.pathname === AGENT_MCP_MANIFEST_PATH\n\t) {\n\t\tparsed.pathname = AGENT_MCP_PATH;\n\t\tparsed.search = \"\";\n\t\tparsed.hash = \"\";\n\t}\n\treturn normalizeBaseUrl(parsed.toString());\n}\n\nfunction normalizeManifestUrl(url: string): string {\n\tconst normalized = normalizeBaseUrl(url);\n\tconst parsed = new URL(normalized);\n\tif (parsed.pathname === \"\" || parsed.pathname === \"/\") {\n\t\tparsed.pathname = AGENT_MCP_MANIFEST_PATH;\n\t}\n\treturn parsed.toString();\n}\n\nfunction resolveIdentityBaseUrl(\n\tcredentials: OAuthCredentials | null,\n\tendpoint?: AgentMcpEndpoint,\n): string {\n\tconst configured = getEnvValue([\n\t\t\"MAESTRO_IDENTITY_URL\",\n\t\t\"EVALOPS_IDENTITY_URL\",\n\t\t\"MAESTRO_PLATFORM_BASE_URL\",\n\t\t\"MAESTRO_EVALOPS_BASE_URL\",\n\t\t\"EVALOPS_BASE_URL\",\n\t]);\n\tconst stored =\n\t\ttypeof credentials?.metadata?.identityBaseUrl === \"string\"\n\t\t\t? credentials.metadata.identityBaseUrl\n\t\t\t: undefined;\n\tconst derived = identityBaseUrlFromMcpEndpoint(endpoint?.endpoint);\n\tconst storedBeforeDerived = endpoint\n\t\t? !endpoint.preferDerivedIdentity && isCustomMcpEndpoint(endpoint.endpoint)\n\t\t: false;\n\treturn normalizeBaseUrl(\n\t\tconfigured ??\n\t\t\tendpoint?.identityBaseUrl ??\n\t\t\t(endpoint?.preferDerivedIdentity ? derived : undefined) ??\n\t\t\t(storedBeforeDerived ? stored : undefined) ??\n\t\t\tderived ??\n\t\t\tstored ??\n\t\t\tDEFAULT_IDENTITY_BASE_URL,\n\t\tObject.values(PLATFORM_HTTP_ROUTES.identity),\n\t);\n}\n\nfunction isCustomMcpEndpoint(endpoint: string): boolean {\n\tconst parsed = new URL(normalizeBaseUrl(endpoint));\n\treturn (\n\t\tparsed.hostname !== \"app.evalops.dev\" &&\n\t\tparsed.hostname !== \"staging.evalops.dev\"\n\t);\n}\n\nfunction identityBaseUrlFromMcpEndpoint(\n\tendpoint: string | undefined,\n): string | undefined {\n\tif (!endpoint) {\n\t\treturn undefined;\n\t}\n\tconst parsed = new URL(normalizeBaseUrl(endpoint));\n\tif (parsed.hostname === \"app.evalops.dev\") {\n\t\treturn DEFAULT_IDENTITY_BASE_URL;\n\t}\n\tif (parsed.hostname === \"staging.evalops.dev\") {\n\t\treturn \"https://api.staging.evalops.dev\";\n\t}\n\tif (parsed.hostname.startsWith(\"app.\")) {\n\t\tparsed.hostname = `identity.${parsed.hostname.slice(\"app.\".length)}`;\n\t}\n\tparsed.pathname = \"\";\n\tparsed.search = \"\";\n\tparsed.hash = \"\";\n\treturn normalizeBaseUrl(parsed.toString());\n}\n\nasync function resolveEndpointFromManifest(\n\tmanifestUrl: string,\n\tfetchImpl: typeof fetch,\n): Promise<AgentMcpEndpoint> {\n\tconst response = await fetchImpl(manifestUrl, {\n\t\theaders: { accept: \"application/json\" },\n\t});\n\tif (!response.ok) {\n\t\tthrow new Error(\n\t\t\t`Failed to fetch EvalOps MCP manifest (${response.status} ${response.statusText})`,\n\t\t);\n\t}\n\tconst payload = (await response.json()) as unknown;\n\tconst payloadRecord = isRecord(payload) ? payload : undefined;\n\tconst protocol =\n\t\tpayloadRecord && isRecord(payloadRecord.protocol)\n\t\t\t? payloadRecord.protocol\n\t\t\t: undefined;\n\tconst endpoint = nonEmptyString(protocol?.endpoint);\n\tif (!endpoint) {\n\t\tthrow new Error(\"EvalOps MCP manifest did not include protocol.endpoint\");\n\t}\n\tconst identity = payloadRecord?.identity;\n\tconst identityBaseUrl =\n\t\tnonEmptyString(isRecord(identity) ? identity.base_url : undefined) ??\n\t\tnonEmptyString(isRecord(identity) ? identity.baseUrl : undefined) ??\n\t\tnonEmptyString(isRecord(identity) ? identity.url : undefined) ??\n\t\tnonEmptyString(payloadRecord?.identity_base_url) ??\n\t\tnonEmptyString(payloadRecord?.identityBaseUrl);\n\treturn {\n\t\tendpoint: normalizeMcpEndpoint(endpoint),\n\t\tidentityBaseUrl,\n\t\tmanifestUrl,\n\t\tpreferDerivedIdentity: true,\n\t};\n}\n\nasync function resolveAgentMcpEndpoint(\n\toptions: EvalOpsInitOptions,\n\tdeps: Required<Pick<EvalOpsInitDependencies, \"fetch\" | \"loadCredentials\">>,\n): Promise<AgentMcpEndpoint> {\n\tif (options.mcpUrl) {\n\t\treturn {\n\t\t\tendpoint: normalizeMcpEndpoint(options.mcpUrl),\n\t\t\tpreferDerivedIdentity: true,\n\t\t};\n\t}\n\tif (options.manifestUrl) {\n\t\treturn resolveEndpointFromManifest(\n\t\t\tnormalizeManifestUrl(options.manifestUrl),\n\t\t\tdeps.fetch,\n\t\t);\n\t}\n\n\tconst configuredMcpUrl = getEnvValue([\n\t\t\"MAESTRO_PLATFORM_MCP_URL\",\n\t\t\"MAESTRO_AGENT_MCP_URL\",\n\t\t\"MAESTRO_EVALOPS_AGENT_MCP_URL\",\n\t]);\n\tif (configuredMcpUrl) {\n\t\treturn {\n\t\t\tendpoint: normalizeMcpEndpoint(configuredMcpUrl),\n\t\t\tpreferDerivedIdentity: true,\n\t\t};\n\t}\n\n\tconst configuredManifestUrl = getEnvValue([\n\t\t\"MAESTRO_PLATFORM_MCP_MANIFEST_URL\",\n\t\t\"MAESTRO_AGENT_MCP_MANIFEST_URL\",\n\t\t\"MAESTRO_EVALOPS_AGENT_MCP_MANIFEST_URL\",\n\t]);\n\tif (configuredManifestUrl) {\n\t\treturn resolveEndpointFromManifest(\n\t\t\tnormalizeManifestUrl(configuredManifestUrl),\n\t\t\tdeps.fetch,\n\t\t);\n\t}\n\n\tconst stored = getStoredAgentMcpMetadata(deps.loadCredentials(\"evalops\"));\n\tif (stored?.endpoint) {\n\t\treturn {\n\t\t\tendpoint: normalizeMcpEndpoint(stored.endpoint),\n\t\t\tmanifestUrl: stored.manifestUrl,\n\t\t};\n\t}\n\n\treturn resolveEndpointFromManifest(\n\t\t`${DEFAULT_AGENT_MCP_BASE_URL}${AGENT_MCP_MANIFEST_PATH}`,\n\t\tdeps.fetch,\n\t);\n}\n\nfunction createDefaultMcpClient(\n\tendpoint: string,\n\tbearerToken: string,\n): EvalOpsMcpClient {\n\tconst client = new Client(\n\t\t{\n\t\t\tname: \"maestro\",\n\t\t\tversion: getPackageVersion(),\n\t\t},\n\t\t{\n\t\t\tcapabilities: {},\n\t\t},\n\t);\n\tconst headers = {\n\t\taccept: \"application/json, text/event-stream\",\n\t\t\"content-type\": \"application/json\",\n\t\t...(bearerToken ? { authorization: `Bearer ${bearerToken}` } : {}),\n\t};\n\tconst transport = new StreamableHTTPClientTransport(new URL(endpoint), {\n\t\trequestInit: {\n\t\t\theaders,\n\t\t},\n\t});\n\treturn {\n\t\tcallTool: (name, args) =>\n\t\t\tclient.callTool({\n\t\t\t\tname,\n\t\t\t\targuments: args,\n\t\t\t}) as Promise<CallToolResult>,\n\t\tclose: () => client.close(),\n\t\tconnect: () => client.connect(transport),\n\t};\n}\n\nasync function callConnectedMcpTool<T>(\n\tclient: EvalOpsMcpClient,\n\ttoolName: string,\n\targs: Record<string, unknown>,\n): Promise<T> {\n\tconst result = await client.callTool(toolName, args);\n\tif (result.isError) {\n\t\tthrow new Error(`${toolName} returned an MCP error`);\n\t}\n\treturn parseToolOutput<T>(toolName, result);\n}\n\nfunction parseToolOutput<T>(toolName: string, result: CallToolResult): T {\n\tconst structuredContent = isRecord(result.structuredContent)\n\t\t? result.structuredContent\n\t\t: undefined;\n\tif (structuredContent) {\n\t\treturn structuredContent as T;\n\t}\n\tconst text = Array.isArray(result.content)\n\t\t? result.content\n\t\t\t\t.map((entry) =>\n\t\t\t\t\tentry.type === \"text\" && typeof entry.text === \"string\"\n\t\t\t\t\t\t? entry.text\n\t\t\t\t\t\t: undefined,\n\t\t\t\t)\n\t\t\t\t.find((entry): entry is string => Boolean(entry))\n\t\t: undefined;\n\tif (text) {\n\t\tconst parsed = JSON.parse(text) as unknown;\n\t\tif (isRecord(parsed)) {\n\t\t\treturn parsed as T;\n\t\t}\n\t}\n\tthrow new Error(`${toolName} did not return structured JSON output`);\n}\n\nasync function ensureEvalOpsLogin(\n\toptions: EvalOpsInitOptions,\n\tdeps: Required<\n\t\tPick<\n\t\t\tEvalOpsInitDependencies,\n\t\t\t| \"getOAuthToken\"\n\t\t\t| \"hasOAuthCredentials\"\n\t\t\t| \"login\"\n\t\t\t| \"onAuthUrl\"\n\t\t\t| \"onStatus\"\n\t\t>\n\t>,\n): Promise<string> {\n\tif (options.forceLogin || !deps.hasOAuthCredentials(\"evalops\")) {\n\t\tdeps.onStatus({ message: \"Opening EvalOps login\" });\n\t\tawait deps.login(\"evalops\", {\n\t\t\tonAuthUrl: deps.onAuthUrl,\n\t\t\tonStatus: (message) => deps.onStatus({ message }),\n\t\t});\n\t}\n\n\tlet token = await deps.getOAuthToken(\"evalops\");\n\tif (!token) {\n\t\tdeps.onStatus({ message: \"Refreshing EvalOps login\" });\n\t\tawait deps.login(\"evalops\", {\n\t\t\tonAuthUrl: deps.onAuthUrl,\n\t\t\tonStatus: (message) => deps.onStatus({ message }),\n\t\t});\n\t\ttoken = await deps.getOAuthToken(\"evalops\");\n\t}\n\tif (!token) {\n\t\tthrow new Error(\"EvalOps login did not produce an access token\");\n\t}\n\treturn token;\n}\n\nfunction buildKeyName(options: EvalOpsInitOptions, now: Date): string {\n\tif (options.keyName?.trim()) {\n\t\treturn options.keyName.trim();\n\t}\n\tconst host = hostname()\n\t\t.replace(/[^a-zA-Z0-9._-]+/gu, \"-\")\n\t\t.slice(0, 48);\n\treturn `maestro-init-${host || \"local\"}-${now.toISOString().slice(0, 10)}`;\n}\n\nfunction integrationProfileForOptions(options: EvalOpsInitOptions): string {\n\treturn (\n\t\tnonEmptyString(options.integrationProfile) ??\n\t\t(options.agentType && options.agentType !== DEFAULT_AGENT_TYPE\n\t\t\t? \"mcp_otlp\"\n\t\t\t: \"managed_runtime\")\n\t);\n}\n\nfunction shimTypeForOptions(options: EvalOpsInitOptions): string {\n\treturn (\n\t\tnonEmptyString(options.shimType) ??\n\t\t(integrationProfileForOptions(options) === \"managed_runtime\"\n\t\t\t? \"sdk\"\n\t\t\t: \"native_mcp\")\n\t);\n}\n\nfunction traceModeForOptions(options: EvalOpsInitOptions): string {\n\treturn (\n\t\tnonEmptyString(options.traceMode) ??\n\t\t(integrationProfileForOptions(options) === \"mcp_only\"\n\t\t\t? \"mcp_events\"\n\t\t\t: \"otlp\")\n\t);\n}\n\nfunction memoryModeForOptions(options: EvalOpsInitOptions): string {\n\treturn (\n\t\tnonEmptyString(options.memoryMode) ??\n\t\t(integrationProfileForOptions(options) === \"managed_runtime\"\n\t\t\t? \"durable\"\n\t\t\t: \"none\")\n\t);\n}\n\nfunction runtimeOwnerForOptions(options: EvalOpsInitOptions): string {\n\treturn (\n\t\tnonEmptyString(options.runtimeOwner) ??\n\t\t(integrationProfileForOptions(options) === \"managed_runtime\"\n\t\t\t? \"evalops\"\n\t\t\t: \"external\")\n\t);\n}\n\nasync function createAgentAPIKey(\n\toptions: EvalOpsInitOptions,\n\tidentityBaseUrl: string,\n\toauthToken: string,\n\tfetchImpl: typeof fetch,\n\tnow: Date,\n): Promise<CreateAPIKeyOutput> {\n\tconst expiresInDays = positiveInteger(options.expiresInDays);\n\tconst expiresAt = expiresInDays\n\t\t? new Date(\n\t\t\t\tnow.getTime() + expiresInDays * 24 * 60 * 60 * 1000,\n\t\t\t).toISOString()\n\t\t: undefined;\n\tconst response = await fetchImpl(\n\t\t`${identityBaseUrl}${PLATFORM_HTTP_ROUTES.identity.apiKeys}`,\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${oauthToken}`,\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t\tbody: JSON.stringify({\n\t\t\t\tname: buildKeyName(options, now),\n\t\t\t\tscopes: options.apiKeyScopes ?? DEFAULT_API_KEY_SCOPES,\n\t\t\t\t...(expiresAt ? { expires_at: expiresAt } : {}),\n\t\t\t}),\n\t\t},\n\t);\n\tconst output = (await response\n\t\t.json()\n\t\t.catch(() => ({}))) as CreateAPIKeyHTTPOutput;\n\tif (!response.ok) {\n\t\tthrow new Error(\n\t\t\ttypeof output.error === \"string\" && output.error.trim()\n\t\t\t\t? output.error\n\t\t\t\t: `EvalOps API key creation failed (${response.status})`,\n\t\t);\n\t}\n\tconst key = isRecord(output.key) ? output.key : undefined;\n\tconst normalized: CreateAPIKeyOutput = {\n\t\tapi_key: nonEmptyString(output.api_key) ?? \"\",\n\t\texpires_at:\n\t\t\tnonEmptyString(output.expires_at) ?? nonEmptyString(key?.expires_at),\n\t\tkey_id: nonEmptyString(output.key_id) ?? nonEmptyString(key?.id),\n\t\tname: nonEmptyString(output.name) ?? nonEmptyString(key?.name),\n\t\tprefix: nonEmptyString(output.prefix) ?? nonEmptyString(key?.prefix),\n\t\tscopes:\n\t\t\tstringArray(output.scopes) ??\n\t\t\tstringArray(key?.scopes) ??\n\t\t\tstringArray(output.scopes_granted),\n\t};\n\tif (!nonEmptyString(normalized.api_key)) {\n\t\tthrow new Error(\"EvalOps API key creation did not return api_key\");\n\t}\n\treturn normalized;\n}\n\nasync function registerAgent(\n\toptions: EvalOpsInitOptions,\n\tclient: EvalOpsMcpClient,\n): Promise<RegisterOutput> {\n\tconst output = await callConnectedMcpTool<RegisterOutput>(\n\t\tclient,\n\t\t\"evalops_register\",\n\t\t{\n\t\t\tagent_type: options.agentType ?? DEFAULT_AGENT_TYPE,\n\t\t\tcapabilities: [\"maestro:init\", \"maestro:cli\"],\n\t\t\tintegration_profile: integrationProfileForOptions(options),\n\t\t\tmemory_mode: memoryModeForOptions(options),\n\t\t\truntime_owner: runtimeOwnerForOptions(options),\n\t\t\t...(options.registerScopes?.length\n\t\t\t\t? { scopes: options.registerScopes }\n\t\t\t\t: {}),\n\t\t\tshim_type: shimTypeForOptions(options),\n\t\t\tsurface: options.surface ?? DEFAULT_SURFACE,\n\t\t\ttrace_mode: traceModeForOptions(options),\n\t\t\t...(positiveInteger(options.ttlSeconds)\n\t\t\t\t? { ttl_seconds: options.ttlSeconds }\n\t\t\t\t: {}),\n\t\t\t...(options.workspaceId ? { workspace_id: options.workspaceId } : {}),\n\t\t},\n\t);\n\tif (output.registered !== true || !nonEmptyString(output.agent_id)) {\n\t\tthrow new Error(\"EvalOps agent registration did not return an agent_id\");\n\t}\n\treturn output;\n}\n\nasync function runGovernedInferenceCheck(\n\tclient: EvalOpsMcpClient,\n): Promise<CheckActionOutput> {\n\treturn callConnectedMcpTool<CheckActionOutput>(\n\t\tclient,\n\t\t\"evalops_check_action\",\n\t\t{\n\t\t\taction_type: \"llm_gateway.invoke\",\n\t\t\taction_payload: \"maestro init first governed inference check\",\n\t\t\tdeclared_risk_level: \"low\",\n\t\t},\n\t);\n}\n\nasync function loadControlPlaneSummary(\n\tclient: EvalOpsMcpClient,\n): Promise<ControlPlaneSummaryOutput> {\n\treturn callConnectedMcpTool<ControlPlaneSummaryOutput>(\n\t\tclient,\n\t\t\"evalops_control_plane_summary\",\n\t\t{},\n\t);\n}\n\nfunction organizationIdFromCredentials(\n\tcredentials: OAuthCredentials | null,\n): string | undefined {\n\treturn (\n\t\tnonEmptyString(credentials?.metadata?.organizationId) ??\n\t\tnonEmptyString(credentials?.metadata?.organization_id)\n\t);\n}\n\nfunction authenticatedAsFromCredentials(\n\tcredentials: OAuthCredentials | null,\n): string | undefined {\n\tconst metadata = credentials?.metadata;\n\tconst user = isRecord(metadata?.user) ? metadata.user : undefined;\n\treturn (\n\t\tnonEmptyString(metadata?.email) ??\n\t\tnonEmptyString(metadata?.preferred_username) ??\n\t\tnonEmptyString(metadata?.preferredUsername) ??\n\t\tnonEmptyString(metadata?.user) ??\n\t\tnonEmptyString(user?.email) ??\n\t\tnonEmptyString(user?.name)\n\t);\n}\n\nfunction consoleUrlFromEndpoint(endpoint: string): string {\n\tconst parsed = new URL(endpoint);\n\tparsed.pathname = \"/overview\";\n\tparsed.search = \"\";\n\tparsed.hash = \"\";\n\tconst env =\n\t\tparsed.hostname === \"app.evalops.dev\"\n\t\t\t? \"production\"\n\t\t\t: parsed.hostname === \"staging.evalops.dev\"\n\t\t\t\t? \"staging\"\n\t\t\t\t: \"local\";\n\tparsed.searchParams.set(\"env\", env);\n\treturn parsed.toString();\n}\n\nfunction countHighRiskFindings(summary: ControlPlaneSummaryOutput): number {\n\tconst findings = Array.isArray(summary.findings) ? summary.findings : [];\n\tconst findingCount = findings.filter((finding) => {\n\t\tconst record = isRecord(finding) ? finding : undefined;\n\t\tconst severity = nonEmptyString(record?.severity)?.toLowerCase();\n\t\treturn severity === \"critical\" || severity === \"high\";\n\t}).length;\n\tconst metricCount = summary.metrics?.high_risk_tools;\n\tif (typeof metricCount === \"number\" && Number.isFinite(metricCount)) {\n\t\treturn Math.max(findingCount, Math.max(0, Math.trunc(metricCount)));\n\t}\n\treturn findingCount;\n}\n\nfunction hasPolicyControl(summary: ControlPlaneSummaryOutput): boolean {\n\tconst approvalRequired = summary.metrics?.approval_required_tools ?? 0;\n\tif (approvalRequired > 0) {\n\t\treturn true;\n\t}\n\tconst controls = Array.isArray(summary.policy_controls)\n\t\t? summary.policy_controls\n\t\t: [];\n\treturn controls.some((control) => {\n\t\tconst record = isRecord(control) ? control : undefined;\n\t\treturn /approval|policy|starter/i.test(\n\t\t\t[\n\t\t\t\tnonEmptyString(record?.label),\n\t\t\t\tnonEmptyString(record?.value),\n\t\t\t\tnonEmptyString(record?.detail),\n\t\t\t]\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(\" \"),\n\t\t);\n\t});\n}\n\nfunction hasTraceEvidence(summary: ControlPlaneSummaryOutput): boolean {\n\tconst evidence = Array.isArray(summary.evidence) ? summary.evidence : [];\n\treturn evidence.some((entry) => {\n\t\tconst record = isRecord(entry) ? entry : undefined;\n\t\treturn Boolean(\n\t\t\tnonEmptyString(record?.trace) ??\n\t\t\t\tnonEmptyString(record?.trace_id) ??\n\t\t\t\tnonEmptyString(record?.traceId),\n\t\t);\n\t});\n}\n\nfunction governedActionCount(summary: ControlPlaneSummaryOutput): number {\n\tconst metricTotal = summary.metrics?.total_tools;\n\tif (typeof metricTotal === \"number\" && Number.isFinite(metricTotal)) {\n\t\treturn Math.max(0, Math.trunc(metricTotal));\n\t}\n\treturn Array.isArray(summary.tools) ? summary.tools.length : 0;\n}\n\nfunction saveBootstrapMetadata(\n\tcredentials: OAuthCredentials,\n\tagentMcp: EvalOpsAgentMcpMetadata,\n\tsaveCredentials: typeof saveOAuthCredentials,\n): void {\n\tsaveCredentials(\"evalops\", {\n\t\t...credentials,\n\t\tmetadata: {\n\t\t\t...credentials.metadata,\n\t\t\tagentId: agentMcp.agentId ?? credentials.metadata?.agentId,\n\t\t\trunId: agentMcp.runId ?? credentials.metadata?.runId,\n\t\t\tsurface: agentMcp.surface,\n\t\t\tagentMcp,\n\t\t},\n\t});\n}\n\nexport async function bootstrapEvalOpsAgent(\n\toptions: EvalOpsInitOptions = {},\n\tdependencies: EvalOpsInitDependencies = {},\n): Promise<EvalOpsInitResult> {\n\tconst deps = {\n\t\tcreateMcpClient: dependencies.createMcpClient ?? createDefaultMcpClient,\n\t\tfetch: dependencies.fetch ?? fetch,\n\t\tgetOAuthToken: dependencies.getOAuthToken ?? getOAuthToken,\n\t\thasOAuthCredentials:\n\t\t\tdependencies.hasOAuthCredentials ?? hasOAuthCredentials,\n\t\tloadCredentials: dependencies.loadCredentials ?? loadOAuthCredentials,\n\t\tlogin: dependencies.login ?? login,\n\t\tnow: dependencies.now ?? (() => new Date()),\n\t\tonAuthUrl:\n\t\t\tdependencies.onAuthUrl ??\n\t\t\t((url: string) => {\n\t\t\t\tprocess.stdout.write(`${url}\\n`);\n\t\t\t}),\n\t\tonStatus: dependencies.onStatus ?? (() => undefined),\n\t\tsaveCredentials: dependencies.saveCredentials ?? saveOAuthCredentials,\n\t};\n\n\tconst oauthToken = await ensureEvalOpsLogin(options, deps);\n\tconst endpoint = await resolveAgentMcpEndpoint(options, deps);\n\tconst credentialsBeforeKey = deps.loadCredentials(\"evalops\");\n\tconst stored = getStoredAgentMcpMetadata(credentialsBeforeKey);\n\tconst identityBaseUrl = resolveIdentityBaseUrl(\n\t\tcredentialsBeforeKey,\n\t\tendpoint,\n\t);\n\tconst now = deps.now();\n\n\tlet apiKey = stored && !options.rotateKey ? stored.apiKey : undefined;\n\tlet keyOutput: CreateAPIKeyOutput | undefined;\n\tlet apiKeyCreated = false;\n\n\tif (!apiKey) {\n\t\tdeps.onStatus({ message: \"Creating EvalOps agent API key\" });\n\t\tkeyOutput = await createAgentAPIKey(\n\t\t\toptions,\n\t\t\tidentityBaseUrl,\n\t\t\toauthToken,\n\t\t\tdeps.fetch,\n\t\t\tnow,\n\t\t);\n\t\tapiKey = keyOutput.api_key;\n\t\tapiKeyCreated = true;\n\t} else {\n\t\tdeps.onStatus({ message: \"Reusing stored EvalOps agent API key\" });\n\t}\n\n\tdeps.onStatus({ message: \"Registering Maestro with EvalOps agent MCP\" });\n\tlet registerOutput: RegisterOutput;\n\tlet client: EvalOpsMcpClient;\n\tconst openAndRegister = async (token: string) => {\n\t\tconst mcpClient = deps.createMcpClient(endpoint.endpoint, token);\n\t\tawait mcpClient.connect();\n\t\ttry {\n\t\t\tconst output = await registerAgent(options, mcpClient);\n\t\t\treturn { client: mcpClient, registerOutput: output };\n\t\t} catch (error) {\n\t\t\tawait mcpClient.close().catch(() => undefined);\n\t\t\tthrow error;\n\t\t}\n\t};\n\ttry {\n\t\t({ client, registerOutput } = await openAndRegister(apiKey));\n\t} catch (error) {\n\t\tif (apiKeyCreated) {\n\t\t\tthrow error;\n\t\t}\n\t\tdeps.onStatus({\n\t\t\tmessage: \"Stored EvalOps agent API key failed; rotating and retrying\",\n\t\t});\n\t\tkeyOutput = await createAgentAPIKey(\n\t\t\t{ ...options, rotateKey: true },\n\t\t\tidentityBaseUrl,\n\t\t\toauthToken,\n\t\t\tdeps.fetch,\n\t\t\tnow,\n\t\t);\n\t\tapiKey = keyOutput.api_key;\n\t\tapiKeyCreated = true;\n\t\t({ client, registerOutput } = await openAndRegister(apiKey));\n\t}\n\n\tlet governedInferenceCheck: CheckActionOutput = {};\n\tlet controlPlaneSummary: ControlPlaneSummaryOutput = {};\n\ttry {\n\t\tdeps.onStatus({ message: \"Running first governed inference check\" });\n\t\tgovernedInferenceCheck = await runGovernedInferenceCheck(client);\n\t} catch (error) {\n\t\tconst reason = error instanceof Error ? error.message : String(error);\n\t\tdeps.onStatus({\n\t\t\tmessage: `EvalOps governed inference check unavailable; continuing bootstrap (${reason})`,\n\t\t});\n\t}\n\ttry {\n\t\tdeps.onStatus({ message: \"Loading EvalOps control-plane proof\" });\n\t\tcontrolPlaneSummary = await loadControlPlaneSummary(client);\n\t} catch (error) {\n\t\tconst reason = error instanceof Error ? error.message : String(error);\n\t\tdeps.onStatus({\n\t\t\tmessage: `EvalOps control-plane proof unavailable; continuing bootstrap (${reason})`,\n\t\t});\n\t} finally {\n\t\tawait client.close().catch(() => undefined);\n\t}\n\n\tconst credentials = deps.loadCredentials(\"evalops\");\n\tif (!credentials) {\n\t\tthrow new Error(\"EvalOps OAuth credentials disappeared during init\");\n\t}\n\tconst keyPrefix = nonEmptyString(keyOutput?.prefix) ?? stored?.keyPrefix;\n\tconst scopes = keyOutput?.scopes ?? stored?.scopes;\n\tconst integrationProfile =\n\t\tnonEmptyString(registerOutput.integration_profile) ??\n\t\tintegrationProfileForOptions(options);\n\tconst memoryMode =\n\t\tnonEmptyString(registerOutput.memory_mode) ?? memoryModeForOptions(options);\n\tconst runtimeOwner =\n\t\tnonEmptyString(registerOutput.runtime_owner) ??\n\t\truntimeOwnerForOptions(options);\n\tconst shimType =\n\t\tnonEmptyString(registerOutput.shim_type) ?? shimTypeForOptions(options);\n\tconst traceMode =\n\t\tnonEmptyString(registerOutput.trace_mode) ?? traceModeForOptions(options);\n\tconst agentMcp: EvalOpsAgentMcpMetadata = {\n\t\ttype: \"agent-mcp\",\n\t\tapiKey,\n\t\tcreatedAt: (apiKeyCreated\n\t\t\t? now\n\t\t\t: new Date(stored?.createdAt ?? now)\n\t\t).toISOString(),\n\t\tendpoint: endpoint.endpoint,\n\t\tregisteredAt: deps.now().toISOString(),\n\t\tsurface: options.surface ?? DEFAULT_SURFACE,\n\t\tagentId: registerOutput.agent_id,\n\t\texpiresAt: nonEmptyString(keyOutput?.expires_at) ?? stored?.expiresAt,\n\t\tintegrationProfile,\n\t\tkeyId: nonEmptyString(keyOutput?.key_id) ?? stored?.keyId,\n\t\tkeyName: nonEmptyString(keyOutput?.name) ?? stored?.keyName,\n\t\tkeyPrefix,\n\t\tmanifestUrl: endpoint.manifestUrl,\n\t\tmemoryMode,\n\t\tregistryVisible: registerOutput.registry_visible,\n\t\trunId: registerOutput.run_id,\n\t\truntimeOwner,\n\t\tscopes,\n\t\tsessionExpiresAt: registerOutput.expires_at,\n\t\tshimType,\n\t\ttraceMode,\n\t\tworkspaceId:\n\t\t\toptions.workspaceId ?? organizationIdFromCredentials(credentials),\n\t};\n\tsaveBootstrapMetadata(credentials, agentMcp, deps.saveCredentials);\n\n\treturn {\n\t\tagentId: registerOutput.agent_id,\n\t\tapiKeyCreated,\n\t\tapprovalPolicyAttached: hasPolicyControl(controlPlaneSummary),\n\t\tauthenticatedAs: authenticatedAsFromCredentials(credentials),\n\t\tconsoleUrl: consoleUrlFromEndpoint(endpoint.endpoint),\n\t\tendpoint: endpoint.endpoint,\n\t\tevidenceEventPublished: (controlPlaneSummary.evidence ?? []).length > 0,\n\t\tevidenceEvents: (controlPlaneSummary.evidence ?? []).length,\n\t\tgovernedActionsLoaded: governedActionCount(controlPlaneSummary),\n\t\tgovernedInferenceCheckRan: Boolean(governedInferenceCheck.decision),\n\t\tintegrationProfile,\n\t\tkeyPrefix,\n\t\tmanifestUrl: endpoint.manifestUrl,\n\t\tmemoryMode,\n\t\torganizationId: organizationIdFromCredentials(credentials),\n\t\tregistryVisible: registerOutput.registry_visible,\n\t\triskFindings: countHighRiskFindings(controlPlaneSummary),\n\t\trunId: registerOutput.run_id,\n\t\truntimeOwner,\n\t\tscopesGranted: registerOutput.scopes_granted,\n\t\tsessionExpiresAt: registerOutput.expires_at,\n\t\tshimType,\n\t\tstored: true,\n\t\ttraceIngestionStarted: hasTraceEvidence(controlPlaneSummary),\n\t\ttraceMode,\n\t};\n}\n"]}
1
+ {"version":3,"file":"agent-bootstrap.js","sourceRoot":"","sources":["../../src/evalops/agent-bootstrap.ts"],"names":[],"mappings":"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","sourcesContent":["import { hostname } from \"node:os\";\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport type { CallToolResult } from \"@modelcontextprotocol/sdk/types.js\";\nimport { getOAuthToken, hasOAuthCredentials, login } from \"../oauth/index.js\";\nimport {\n\ttype OAuthCredentials,\n\tloadOAuthCredentials,\n\tsaveOAuthCredentials,\n} from \"../oauth/storage.js\";\nimport { getPackageVersion } from \"../package-metadata.js\";\nimport { getEnvValue, normalizeBaseUrl } from \"../platform/client.js\";\nimport { PLATFORM_HTTP_ROUTES } from \"../platform/core-services.js\";\n\nconst DEFAULT_AGENT_MCP_BASE_URL = \"https://app.evalops.dev\";\nconst DEFAULT_IDENTITY_BASE_URL = \"https://identity.evalops.dev\";\nconst AGENT_MCP_MANIFEST_PATH = \"/.well-known/evalops/agent-mcp.json\";\nconst AGENT_MCP_PATH = \"/mcp\";\nconst DEFAULT_AGENT_TYPE = \"maestro\";\nconst DEFAULT_SURFACE = \"cli\";\nconst DEFAULT_AGENT_NEUTRAL_CAPABILITIES = [\n\t\"mcp\",\n\t\"tool.use\",\n\t\"responses:create\",\n];\nconst DEFAULT_MAESTRO_AGENT_CAPABILITIES = [\n\t\"maestro:init\",\n\t\"maestro:cli\",\n\t\"conversation:manage\",\n\t\"workflow:orchestrate\",\n\t\"code:write\",\n\t\"code:review\",\n\t\"code:test\",\n\t\"shell\",\n\t\"git\",\n\t\"fs\",\n\t\"mcp\",\n\t\"tool.use\",\n\t\"research\",\n\t\"responses:create\",\n];\nconst DEFAULT_API_KEY_SCOPES = [\n\t\"agent:register\",\n\t\"agent:heartbeat\",\n\t\"governance:evaluate\",\n\t\"llm_gateway:invoke\",\n\t\"memories:read\",\n\t\"memories:write\",\n\t\"meter:record\",\n];\n\nexport interface EvalOpsInitOptions {\n\tagentType?: string;\n\tapiKeyScopes?: string[];\n\tcapabilities?: string[];\n\texpiresInDays?: number;\n\tforceLogin?: boolean;\n\tintegrationProfile?: string;\n\tjson?: boolean;\n\tkeyName?: string;\n\tmanifestUrl?: string;\n\tmemoryMode?: string;\n\tmcpUrl?: string;\n\tregisterScopes?: string[];\n\trotateKey?: boolean;\n\truntimeOwner?: string;\n\tshimType?: string;\n\tsurface?: string;\n\ttraceMode?: string;\n\tttlSeconds?: number;\n\tworkspaceId?: string;\n}\n\nexport interface EvalOpsAgentMcpMetadata {\n\tagentId?: string;\n\tapiKey?: string;\n\tcreatedAt: string;\n\tendpoint: string;\n\texpiresAt?: string;\n\tintegrationProfile?: string;\n\tkeyId?: string;\n\tkeyName?: string;\n\tkeyPrefix?: string;\n\tmanifestUrl?: string;\n\tmemoryMode?: string;\n\tregisteredAt: string;\n\tregistryVisible?: boolean;\n\trunId?: string;\n\truntimeOwner?: string;\n\tscopes?: string[];\n\tsessionExpiresAt?: string;\n\tshimType?: string;\n\tsurface: string;\n\ttraceMode?: string;\n\ttype: \"agent-mcp\";\n\tworkspaceId?: string;\n}\n\nexport interface EvalOpsInitResult {\n\tagentId?: string;\n\tapiKeyCreated: boolean;\n\tapprovalPolicyAttached?: boolean;\n\tauthenticatedAs?: string;\n\tconsoleUrl?: string;\n\tendpoint: string;\n\tevidenceEventPublished?: boolean;\n\tevidenceEvents?: number;\n\tgovernedActionsLoaded?: number;\n\tgovernedInferenceCheckRan?: boolean;\n\tintegrationProfile?: string;\n\tkeyPrefix?: string;\n\tmanifestUrl?: string;\n\tmemoryMode?: string;\n\torganizationId?: string;\n\tregistryVisible?: boolean;\n\triskFindings?: number;\n\trunId?: string;\n\truntimeOwner?: string;\n\tscopesGranted?: string[];\n\tsessionExpiresAt?: string;\n\tshimType?: string;\n\tstored: boolean;\n\ttraceIngestionStarted?: boolean;\n\ttraceMode?: string;\n}\n\nexport interface EvalOpsInitStatus {\n\tmessage: string;\n}\n\nexport interface EvalOpsInitDependencies {\n\tcreateMcpClient?: (endpoint: string, bearerToken: string) => EvalOpsMcpClient;\n\tfetch?: typeof fetch;\n\tgetOAuthToken?: typeof getOAuthToken;\n\thasOAuthCredentials?: typeof hasOAuthCredentials;\n\tloadCredentials?: typeof loadOAuthCredentials;\n\tlogin?: typeof login;\n\tnow?: () => Date;\n\tonAuthUrl?: (url: string) => void;\n\tonStatus?: (status: EvalOpsInitStatus) => void;\n\tsaveCredentials?: typeof saveOAuthCredentials;\n}\n\nexport interface EvalOpsMcpClient {\n\tcallTool(\n\t\tname: string,\n\t\targs: Record<string, unknown>,\n\t): Promise<CallToolResult>;\n\tclose(): Promise<void>;\n\tconnect(): Promise<void>;\n}\n\ninterface CreateAPIKeyOutput {\n\tapi_key: string;\n\texpires_at?: string;\n\tkey_id?: string;\n\tname?: string;\n\tprefix?: string;\n\tscopes?: string[];\n}\n\ninterface CreateAPIKeyHTTPOutput extends Partial<CreateAPIKeyOutput> {\n\terror?: string;\n\tkey?: Record<string, unknown>;\n\tscopes_granted?: unknown;\n}\n\ninterface RegisterOutput {\n\tagent_id?: string;\n\texpires_at?: string;\n\tintegration_profile?: string;\n\tmemory_mode?: string;\n\tregistered?: boolean;\n\tregistry_visible?: boolean;\n\trun_id?: string;\n\truntime_owner?: string;\n\tscopes_denied?: string[];\n\tscopes_granted?: string[];\n\tshim_type?: string;\n\ttrace_mode?: string;\n}\n\ninterface CheckActionOutput {\n\tdecision?: string;\n\trisk_level?: string;\n\treasons?: string[];\n}\n\ninterface ControlPlaneSummaryOutput {\n\tevidence?: unknown[];\n\tfindings?: unknown[];\n\tmetrics?: {\n\t\tapproval_required_tools?: number;\n\t\thigh_risk_tools?: number;\n\t\ttotal_tools?: number;\n\t};\n\tpolicy_controls?: unknown[];\n\ttools?: unknown[];\n}\n\ninterface AgentMcpEndpoint {\n\tendpoint: string;\n\tidentityBaseUrl?: string;\n\tmanifestUrl?: string;\n\tpreferDerivedIdentity?: boolean;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction nonEmptyString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" && value.trim().length > 0\n\t\t? value.trim()\n\t\t: undefined;\n}\n\nfunction stringArray(value: unknown): string[] | undefined {\n\tif (!Array.isArray(value)) {\n\t\treturn undefined;\n\t}\n\tconst values = value\n\t\t.map((entry) => nonEmptyString(entry))\n\t\t.filter((entry): entry is string => Boolean(entry));\n\treturn values.length > 0 ? values : undefined;\n}\n\nfunction positiveInteger(value: number | undefined): number | undefined {\n\treturn typeof value === \"number\" && Number.isInteger(value) && value > 0\n\t\t? value\n\t\t: undefined;\n}\n\nfunction getStoredAgentMcpMetadata(\n\tcredentials: OAuthCredentials | null,\n): EvalOpsAgentMcpMetadata | undefined {\n\tconst metadata = credentials?.metadata;\n\tconst agentMcp = isRecord(metadata?.agentMcp) ? metadata.agentMcp : undefined;\n\tconst apiKey = nonEmptyString(agentMcp?.apiKey);\n\tconst endpoint = nonEmptyString(agentMcp?.endpoint);\n\tconst registeredAt = nonEmptyString(agentMcp?.registeredAt);\n\tconst createdAt = nonEmptyString(agentMcp?.createdAt);\n\tconst surface = nonEmptyString(agentMcp?.surface);\n\tif (!apiKey || !endpoint || !registeredAt || !createdAt || !surface) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\ttype: \"agent-mcp\",\n\t\tapiKey,\n\t\tcreatedAt,\n\t\tendpoint,\n\t\tregisteredAt,\n\t\tsurface,\n\t\tagentId: nonEmptyString(agentMcp?.agentId),\n\t\texpiresAt: nonEmptyString(agentMcp?.expiresAt),\n\t\tintegrationProfile: nonEmptyString(agentMcp?.integrationProfile),\n\t\tkeyId: nonEmptyString(agentMcp?.keyId),\n\t\tkeyName: nonEmptyString(agentMcp?.keyName),\n\t\tkeyPrefix: nonEmptyString(agentMcp?.keyPrefix),\n\t\tmanifestUrl: nonEmptyString(agentMcp?.manifestUrl),\n\t\tmemoryMode: nonEmptyString(agentMcp?.memoryMode),\n\t\tregistryVisible:\n\t\t\ttypeof agentMcp?.registryVisible === \"boolean\"\n\t\t\t\t? agentMcp.registryVisible\n\t\t\t\t: undefined,\n\t\trunId: nonEmptyString(agentMcp?.runId),\n\t\truntimeOwner: nonEmptyString(agentMcp?.runtimeOwner),\n\t\tscopes: stringArray(agentMcp?.scopes),\n\t\tsessionExpiresAt: nonEmptyString(agentMcp?.sessionExpiresAt),\n\t\tshimType: nonEmptyString(agentMcp?.shimType),\n\t\ttraceMode: nonEmptyString(agentMcp?.traceMode),\n\t\tworkspaceId: nonEmptyString(agentMcp?.workspaceId),\n\t};\n}\n\nexport function getStoredEvalOpsAgentMcpMetadata():\n\t| EvalOpsAgentMcpMetadata\n\t| undefined {\n\treturn getStoredAgentMcpMetadata(loadOAuthCredentials(\"evalops\"));\n}\n\nfunction normalizeMcpEndpoint(url: string): string {\n\tconst normalized = normalizeBaseUrl(url);\n\tconst parsed = new URL(normalized);\n\tif (\n\t\tparsed.pathname === \"\" ||\n\t\tparsed.pathname === \"/\" ||\n\t\tparsed.pathname === AGENT_MCP_MANIFEST_PATH\n\t) {\n\t\tparsed.pathname = AGENT_MCP_PATH;\n\t\tparsed.search = \"\";\n\t\tparsed.hash = \"\";\n\t}\n\treturn normalizeBaseUrl(parsed.toString());\n}\n\nfunction normalizeManifestUrl(url: string): string {\n\tconst normalized = normalizeBaseUrl(url);\n\tconst parsed = new URL(normalized);\n\tif (parsed.pathname === \"\" || parsed.pathname === \"/\") {\n\t\tparsed.pathname = AGENT_MCP_MANIFEST_PATH;\n\t}\n\treturn parsed.toString();\n}\n\nfunction resolveIdentityBaseUrl(\n\tcredentials: OAuthCredentials | null,\n\tendpoint?: AgentMcpEndpoint,\n): string {\n\tconst configured = getEnvValue([\n\t\t\"MAESTRO_IDENTITY_URL\",\n\t\t\"EVALOPS_IDENTITY_URL\",\n\t\t\"MAESTRO_PLATFORM_BASE_URL\",\n\t\t\"MAESTRO_EVALOPS_BASE_URL\",\n\t\t\"EVALOPS_BASE_URL\",\n\t]);\n\tconst stored =\n\t\ttypeof credentials?.metadata?.identityBaseUrl === \"string\"\n\t\t\t? credentials.metadata.identityBaseUrl\n\t\t\t: undefined;\n\tconst derived = identityBaseUrlFromMcpEndpoint(endpoint?.endpoint);\n\tconst storedBeforeDerived = endpoint\n\t\t? !endpoint.preferDerivedIdentity && isCustomMcpEndpoint(endpoint.endpoint)\n\t\t: false;\n\treturn normalizeBaseUrl(\n\t\tconfigured ??\n\t\t\tendpoint?.identityBaseUrl ??\n\t\t\t(endpoint?.preferDerivedIdentity ? derived : undefined) ??\n\t\t\t(storedBeforeDerived ? stored : undefined) ??\n\t\t\tderived ??\n\t\t\tstored ??\n\t\t\tDEFAULT_IDENTITY_BASE_URL,\n\t\tObject.values(PLATFORM_HTTP_ROUTES.identity),\n\t);\n}\n\nfunction isCustomMcpEndpoint(endpoint: string): boolean {\n\tconst parsed = new URL(normalizeBaseUrl(endpoint));\n\treturn (\n\t\tparsed.hostname !== \"app.evalops.dev\" &&\n\t\tparsed.hostname !== \"staging.evalops.dev\"\n\t);\n}\n\nfunction identityBaseUrlFromMcpEndpoint(\n\tendpoint: string | undefined,\n): string | undefined {\n\tif (!endpoint) {\n\t\treturn undefined;\n\t}\n\tconst parsed = new URL(normalizeBaseUrl(endpoint));\n\tif (parsed.hostname === \"app.evalops.dev\") {\n\t\treturn DEFAULT_IDENTITY_BASE_URL;\n\t}\n\tif (parsed.hostname === \"staging.evalops.dev\") {\n\t\treturn \"https://api.staging.evalops.dev\";\n\t}\n\tif (parsed.hostname.startsWith(\"app.\")) {\n\t\tparsed.hostname = `identity.${parsed.hostname.slice(\"app.\".length)}`;\n\t}\n\tparsed.pathname = \"\";\n\tparsed.search = \"\";\n\tparsed.hash = \"\";\n\treturn normalizeBaseUrl(parsed.toString());\n}\n\nasync function resolveEndpointFromManifest(\n\tmanifestUrl: string,\n\tfetchImpl: typeof fetch,\n): Promise<AgentMcpEndpoint> {\n\tconst response = await fetchImpl(manifestUrl, {\n\t\theaders: { accept: \"application/json\" },\n\t});\n\tif (!response.ok) {\n\t\tthrow new Error(\n\t\t\t`Failed to fetch EvalOps MCP manifest (${response.status} ${response.statusText})`,\n\t\t);\n\t}\n\tconst payload = (await response.json()) as unknown;\n\tconst payloadRecord = isRecord(payload) ? payload : undefined;\n\tconst protocol =\n\t\tpayloadRecord && isRecord(payloadRecord.protocol)\n\t\t\t? payloadRecord.protocol\n\t\t\t: undefined;\n\tconst endpoint = nonEmptyString(protocol?.endpoint);\n\tif (!endpoint) {\n\t\tthrow new Error(\"EvalOps MCP manifest did not include protocol.endpoint\");\n\t}\n\tconst identity = payloadRecord?.identity;\n\tconst identityBaseUrl =\n\t\tnonEmptyString(isRecord(identity) ? identity.base_url : undefined) ??\n\t\tnonEmptyString(isRecord(identity) ? identity.baseUrl : undefined) ??\n\t\tnonEmptyString(isRecord(identity) ? identity.url : undefined) ??\n\t\tnonEmptyString(payloadRecord?.identity_base_url) ??\n\t\tnonEmptyString(payloadRecord?.identityBaseUrl);\n\treturn {\n\t\tendpoint: normalizeMcpEndpoint(endpoint),\n\t\tidentityBaseUrl,\n\t\tmanifestUrl,\n\t\tpreferDerivedIdentity: true,\n\t};\n}\n\nasync function resolveAgentMcpEndpoint(\n\toptions: EvalOpsInitOptions,\n\tdeps: Required<Pick<EvalOpsInitDependencies, \"fetch\" | \"loadCredentials\">>,\n): Promise<AgentMcpEndpoint> {\n\tif (options.mcpUrl) {\n\t\treturn {\n\t\t\tendpoint: normalizeMcpEndpoint(options.mcpUrl),\n\t\t\tpreferDerivedIdentity: true,\n\t\t};\n\t}\n\tif (options.manifestUrl) {\n\t\treturn resolveEndpointFromManifest(\n\t\t\tnormalizeManifestUrl(options.manifestUrl),\n\t\t\tdeps.fetch,\n\t\t);\n\t}\n\n\tconst configuredMcpUrl = getEnvValue([\n\t\t\"MAESTRO_PLATFORM_MCP_URL\",\n\t\t\"MAESTRO_AGENT_MCP_URL\",\n\t\t\"MAESTRO_EVALOPS_AGENT_MCP_URL\",\n\t]);\n\tif (configuredMcpUrl) {\n\t\treturn {\n\t\t\tendpoint: normalizeMcpEndpoint(configuredMcpUrl),\n\t\t\tpreferDerivedIdentity: true,\n\t\t};\n\t}\n\n\tconst configuredManifestUrl = getEnvValue([\n\t\t\"MAESTRO_PLATFORM_MCP_MANIFEST_URL\",\n\t\t\"MAESTRO_AGENT_MCP_MANIFEST_URL\",\n\t\t\"MAESTRO_EVALOPS_AGENT_MCP_MANIFEST_URL\",\n\t]);\n\tif (configuredManifestUrl) {\n\t\treturn resolveEndpointFromManifest(\n\t\t\tnormalizeManifestUrl(configuredManifestUrl),\n\t\t\tdeps.fetch,\n\t\t);\n\t}\n\n\tconst stored = getStoredAgentMcpMetadata(deps.loadCredentials(\"evalops\"));\n\tif (stored?.endpoint) {\n\t\treturn {\n\t\t\tendpoint: normalizeMcpEndpoint(stored.endpoint),\n\t\t\tmanifestUrl: stored.manifestUrl,\n\t\t};\n\t}\n\n\treturn resolveEndpointFromManifest(\n\t\t`${DEFAULT_AGENT_MCP_BASE_URL}${AGENT_MCP_MANIFEST_PATH}`,\n\t\tdeps.fetch,\n\t);\n}\n\nfunction createDefaultMcpClient(\n\tendpoint: string,\n\tbearerToken: string,\n): EvalOpsMcpClient {\n\tconst client = new Client(\n\t\t{\n\t\t\tname: \"maestro\",\n\t\t\tversion: getPackageVersion(),\n\t\t},\n\t\t{\n\t\t\tcapabilities: {},\n\t\t},\n\t);\n\tconst headers = {\n\t\taccept: \"application/json, text/event-stream\",\n\t\t\"content-type\": \"application/json\",\n\t\t...(bearerToken ? { authorization: `Bearer ${bearerToken}` } : {}),\n\t};\n\tconst transport = new StreamableHTTPClientTransport(new URL(endpoint), {\n\t\trequestInit: {\n\t\t\theaders,\n\t\t},\n\t});\n\treturn {\n\t\tcallTool: (name, args) =>\n\t\t\tclient.callTool({\n\t\t\t\tname,\n\t\t\t\targuments: args,\n\t\t\t}) as Promise<CallToolResult>,\n\t\tclose: () => client.close(),\n\t\tconnect: () => client.connect(transport),\n\t};\n}\n\nasync function callConnectedMcpTool<T>(\n\tclient: EvalOpsMcpClient,\n\ttoolName: string,\n\targs: Record<string, unknown>,\n): Promise<T> {\n\tconst result = await client.callTool(toolName, args);\n\tif (result.isError) {\n\t\tthrow new Error(`${toolName} returned an MCP error`);\n\t}\n\treturn parseToolOutput<T>(toolName, result);\n}\n\nfunction parseToolOutput<T>(toolName: string, result: CallToolResult): T {\n\tconst structuredContent = isRecord(result.structuredContent)\n\t\t? result.structuredContent\n\t\t: undefined;\n\tif (structuredContent) {\n\t\treturn structuredContent as T;\n\t}\n\tconst text = Array.isArray(result.content)\n\t\t? result.content\n\t\t\t\t.map((entry) =>\n\t\t\t\t\tentry.type === \"text\" && typeof entry.text === \"string\"\n\t\t\t\t\t\t? entry.text\n\t\t\t\t\t\t: undefined,\n\t\t\t\t)\n\t\t\t\t.find((entry): entry is string => Boolean(entry))\n\t\t: undefined;\n\tif (text) {\n\t\tconst parsed = JSON.parse(text) as unknown;\n\t\tif (isRecord(parsed)) {\n\t\t\treturn parsed as T;\n\t\t}\n\t}\n\tthrow new Error(`${toolName} did not return structured JSON output`);\n}\n\nasync function ensureEvalOpsLogin(\n\toptions: EvalOpsInitOptions,\n\tdeps: Required<\n\t\tPick<\n\t\t\tEvalOpsInitDependencies,\n\t\t\t| \"getOAuthToken\"\n\t\t\t| \"hasOAuthCredentials\"\n\t\t\t| \"login\"\n\t\t\t| \"onAuthUrl\"\n\t\t\t| \"onStatus\"\n\t\t>\n\t>,\n): Promise<string> {\n\tif (options.forceLogin || !deps.hasOAuthCredentials(\"evalops\")) {\n\t\tdeps.onStatus({ message: \"Opening EvalOps login\" });\n\t\tawait deps.login(\"evalops\", {\n\t\t\tonAuthUrl: deps.onAuthUrl,\n\t\t\tonStatus: (message) => deps.onStatus({ message }),\n\t\t});\n\t}\n\n\tlet token = await deps.getOAuthToken(\"evalops\");\n\tif (!token) {\n\t\tdeps.onStatus({ message: \"Refreshing EvalOps login\" });\n\t\tawait deps.login(\"evalops\", {\n\t\t\tonAuthUrl: deps.onAuthUrl,\n\t\t\tonStatus: (message) => deps.onStatus({ message }),\n\t\t});\n\t\ttoken = await deps.getOAuthToken(\"evalops\");\n\t}\n\tif (!token) {\n\t\tthrow new Error(\"EvalOps login did not produce an access token\");\n\t}\n\treturn token;\n}\n\nfunction buildKeyName(options: EvalOpsInitOptions, now: Date): string {\n\tif (options.keyName?.trim()) {\n\t\treturn options.keyName.trim();\n\t}\n\tconst host = hostname()\n\t\t.replace(/[^a-zA-Z0-9._-]+/gu, \"-\")\n\t\t.slice(0, 48);\n\treturn `maestro-init-${host || \"local\"}-${now.toISOString().slice(0, 10)}`;\n}\n\nfunction integrationProfileForOptions(options: EvalOpsInitOptions): string {\n\treturn (\n\t\tnonEmptyString(options.integrationProfile) ??\n\t\t(options.agentType && options.agentType !== DEFAULT_AGENT_TYPE\n\t\t\t? \"mcp_otlp\"\n\t\t\t: \"managed_runtime\")\n\t);\n}\n\nfunction shimTypeForOptions(options: EvalOpsInitOptions): string {\n\treturn (\n\t\tnonEmptyString(options.shimType) ??\n\t\t(integrationProfileForOptions(options) === \"managed_runtime\"\n\t\t\t? \"sdk\"\n\t\t\t: \"native_mcp\")\n\t);\n}\n\nfunction traceModeForOptions(options: EvalOpsInitOptions): string {\n\treturn (\n\t\tnonEmptyString(options.traceMode) ??\n\t\t(integrationProfileForOptions(options) === \"mcp_only\"\n\t\t\t? \"mcp_events\"\n\t\t\t: \"otlp\")\n\t);\n}\n\nfunction memoryModeForOptions(options: EvalOpsInitOptions): string {\n\treturn (\n\t\tnonEmptyString(options.memoryMode) ??\n\t\t(integrationProfileForOptions(options) === \"managed_runtime\"\n\t\t\t? \"durable\"\n\t\t\t: \"none\")\n\t);\n}\n\nfunction runtimeOwnerForOptions(options: EvalOpsInitOptions): string {\n\treturn (\n\t\tnonEmptyString(options.runtimeOwner) ??\n\t\t(integrationProfileForOptions(options) === \"managed_runtime\"\n\t\t\t? \"evalops\"\n\t\t\t: \"external\")\n\t);\n}\n\nfunction capabilitiesForOptions(options: EvalOpsInitOptions): string[] {\n\tconst requested = stringArray(options.capabilities);\n\tconst defaults =\n\t\t(options.agentType ?? DEFAULT_AGENT_TYPE) === DEFAULT_AGENT_TYPE\n\t\t\t? DEFAULT_MAESTRO_AGENT_CAPABILITIES\n\t\t\t: DEFAULT_AGENT_NEUTRAL_CAPABILITIES;\n\tconst out: string[] = [];\n\tconst seen = new Set<string>();\n\tfor (const capability of requested ?? defaults) {\n\t\tconst normalized = nonEmptyString(capability);\n\t\tif (!normalized) continue;\n\t\tconst key = normalized.toLowerCase();\n\t\tif (seen.has(key)) continue;\n\t\tseen.add(key);\n\t\tout.push(normalized);\n\t}\n\treturn out;\n}\n\nasync function createAgentAPIKey(\n\toptions: EvalOpsInitOptions,\n\tidentityBaseUrl: string,\n\toauthToken: string,\n\tfetchImpl: typeof fetch,\n\tnow: Date,\n): Promise<CreateAPIKeyOutput> {\n\tconst expiresInDays = positiveInteger(options.expiresInDays);\n\tconst expiresAt = expiresInDays\n\t\t? new Date(\n\t\t\t\tnow.getTime() + expiresInDays * 24 * 60 * 60 * 1000,\n\t\t\t).toISOString()\n\t\t: undefined;\n\tconst response = await fetchImpl(\n\t\t`${identityBaseUrl}${PLATFORM_HTTP_ROUTES.identity.apiKeys}`,\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${oauthToken}`,\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t\tbody: JSON.stringify({\n\t\t\t\tname: buildKeyName(options, now),\n\t\t\t\tscopes: options.apiKeyScopes ?? DEFAULT_API_KEY_SCOPES,\n\t\t\t\t...(expiresAt ? { expires_at: expiresAt } : {}),\n\t\t\t}),\n\t\t},\n\t);\n\tconst output = (await response\n\t\t.json()\n\t\t.catch(() => ({}))) as CreateAPIKeyHTTPOutput;\n\tif (!response.ok) {\n\t\tthrow new Error(\n\t\t\ttypeof output.error === \"string\" && output.error.trim()\n\t\t\t\t? output.error\n\t\t\t\t: `EvalOps API key creation failed (${response.status})`,\n\t\t);\n\t}\n\tconst key = isRecord(output.key) ? output.key : undefined;\n\tconst normalized: CreateAPIKeyOutput = {\n\t\tapi_key: nonEmptyString(output.api_key) ?? \"\",\n\t\texpires_at:\n\t\t\tnonEmptyString(output.expires_at) ?? nonEmptyString(key?.expires_at),\n\t\tkey_id: nonEmptyString(output.key_id) ?? nonEmptyString(key?.id),\n\t\tname: nonEmptyString(output.name) ?? nonEmptyString(key?.name),\n\t\tprefix: nonEmptyString(output.prefix) ?? nonEmptyString(key?.prefix),\n\t\tscopes:\n\t\t\tstringArray(output.scopes) ??\n\t\t\tstringArray(key?.scopes) ??\n\t\t\tstringArray(output.scopes_granted),\n\t};\n\tif (!nonEmptyString(normalized.api_key)) {\n\t\tthrow new Error(\"EvalOps API key creation did not return api_key\");\n\t}\n\treturn normalized;\n}\n\nasync function registerAgent(\n\toptions: EvalOpsInitOptions,\n\tclient: EvalOpsMcpClient,\n): Promise<RegisterOutput> {\n\tconst output = await callConnectedMcpTool<RegisterOutput>(\n\t\tclient,\n\t\t\"evalops_register\",\n\t\t{\n\t\t\tagent_type: options.agentType ?? DEFAULT_AGENT_TYPE,\n\t\t\tcapabilities: capabilitiesForOptions(options),\n\t\t\tintegration_profile: integrationProfileForOptions(options),\n\t\t\tmemory_mode: memoryModeForOptions(options),\n\t\t\truntime_owner: runtimeOwnerForOptions(options),\n\t\t\t...(options.registerScopes?.length\n\t\t\t\t? { scopes: options.registerScopes }\n\t\t\t\t: {}),\n\t\t\tshim_type: shimTypeForOptions(options),\n\t\t\tsurface: options.surface ?? DEFAULT_SURFACE,\n\t\t\ttrace_mode: traceModeForOptions(options),\n\t\t\t...(positiveInteger(options.ttlSeconds)\n\t\t\t\t? { ttl_seconds: options.ttlSeconds }\n\t\t\t\t: {}),\n\t\t\t...(options.workspaceId ? { workspace_id: options.workspaceId } : {}),\n\t\t},\n\t);\n\tif (output.registered !== true || !nonEmptyString(output.agent_id)) {\n\t\tthrow new Error(\"EvalOps agent registration did not return an agent_id\");\n\t}\n\treturn output;\n}\n\nasync function runGovernedInferenceCheck(\n\tclient: EvalOpsMcpClient,\n): Promise<CheckActionOutput> {\n\treturn callConnectedMcpTool<CheckActionOutput>(\n\t\tclient,\n\t\t\"evalops_check_action\",\n\t\t{\n\t\t\taction_type: \"llm_gateway.invoke\",\n\t\t\taction_payload: \"maestro init first governed inference check\",\n\t\t\tdeclared_risk_level: \"low\",\n\t\t},\n\t);\n}\n\nasync function loadControlPlaneSummary(\n\tclient: EvalOpsMcpClient,\n): Promise<ControlPlaneSummaryOutput> {\n\treturn callConnectedMcpTool<ControlPlaneSummaryOutput>(\n\t\tclient,\n\t\t\"evalops_control_plane_summary\",\n\t\t{},\n\t);\n}\n\nfunction organizationIdFromCredentials(\n\tcredentials: OAuthCredentials | null,\n): string | undefined {\n\treturn (\n\t\tnonEmptyString(credentials?.metadata?.organizationId) ??\n\t\tnonEmptyString(credentials?.metadata?.organization_id)\n\t);\n}\n\nfunction authenticatedAsFromCredentials(\n\tcredentials: OAuthCredentials | null,\n): string | undefined {\n\tconst metadata = credentials?.metadata;\n\tconst user = isRecord(metadata?.user) ? metadata.user : undefined;\n\treturn (\n\t\tnonEmptyString(metadata?.email) ??\n\t\tnonEmptyString(metadata?.preferred_username) ??\n\t\tnonEmptyString(metadata?.preferredUsername) ??\n\t\tnonEmptyString(metadata?.user) ??\n\t\tnonEmptyString(user?.email) ??\n\t\tnonEmptyString(user?.name)\n\t);\n}\n\nfunction consoleUrlFromEndpoint(endpoint: string): string {\n\tconst parsed = new URL(endpoint);\n\tparsed.pathname = \"/overview\";\n\tparsed.search = \"\";\n\tparsed.hash = \"\";\n\tconst env =\n\t\tparsed.hostname === \"app.evalops.dev\"\n\t\t\t? \"production\"\n\t\t\t: parsed.hostname === \"staging.evalops.dev\"\n\t\t\t\t? \"staging\"\n\t\t\t\t: \"local\";\n\tparsed.searchParams.set(\"env\", env);\n\treturn parsed.toString();\n}\n\nfunction countHighRiskFindings(summary: ControlPlaneSummaryOutput): number {\n\tconst findings = Array.isArray(summary.findings) ? summary.findings : [];\n\tconst findingCount = findings.filter((finding) => {\n\t\tconst record = isRecord(finding) ? finding : undefined;\n\t\tconst severity = nonEmptyString(record?.severity)?.toLowerCase();\n\t\treturn severity === \"critical\" || severity === \"high\";\n\t}).length;\n\tconst metricCount = summary.metrics?.high_risk_tools;\n\tif (typeof metricCount === \"number\" && Number.isFinite(metricCount)) {\n\t\treturn Math.max(findingCount, Math.max(0, Math.trunc(metricCount)));\n\t}\n\treturn findingCount;\n}\n\nfunction hasPolicyControl(summary: ControlPlaneSummaryOutput): boolean {\n\tconst approvalRequired = summary.metrics?.approval_required_tools ?? 0;\n\tif (approvalRequired > 0) {\n\t\treturn true;\n\t}\n\tconst controls = Array.isArray(summary.policy_controls)\n\t\t? summary.policy_controls\n\t\t: [];\n\treturn controls.some((control) => {\n\t\tconst record = isRecord(control) ? control : undefined;\n\t\treturn /approval|policy|starter/i.test(\n\t\t\t[\n\t\t\t\tnonEmptyString(record?.label),\n\t\t\t\tnonEmptyString(record?.value),\n\t\t\t\tnonEmptyString(record?.detail),\n\t\t\t]\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(\" \"),\n\t\t);\n\t});\n}\n\nfunction hasTraceEvidence(summary: ControlPlaneSummaryOutput): boolean {\n\tconst evidence = Array.isArray(summary.evidence) ? summary.evidence : [];\n\treturn evidence.some((entry) => {\n\t\tconst record = isRecord(entry) ? entry : undefined;\n\t\treturn Boolean(\n\t\t\tnonEmptyString(record?.trace) ??\n\t\t\t\tnonEmptyString(record?.trace_id) ??\n\t\t\t\tnonEmptyString(record?.traceId),\n\t\t);\n\t});\n}\n\nfunction governedActionCount(summary: ControlPlaneSummaryOutput): number {\n\tconst metricTotal = summary.metrics?.total_tools;\n\tif (typeof metricTotal === \"number\" && Number.isFinite(metricTotal)) {\n\t\treturn Math.max(0, Math.trunc(metricTotal));\n\t}\n\treturn Array.isArray(summary.tools) ? summary.tools.length : 0;\n}\n\nfunction saveBootstrapMetadata(\n\tcredentials: OAuthCredentials,\n\tagentMcp: EvalOpsAgentMcpMetadata,\n\tsaveCredentials: typeof saveOAuthCredentials,\n): void {\n\tsaveCredentials(\"evalops\", {\n\t\t...credentials,\n\t\tmetadata: {\n\t\t\t...credentials.metadata,\n\t\t\tagentId: agentMcp.agentId ?? credentials.metadata?.agentId,\n\t\t\trunId: agentMcp.runId ?? credentials.metadata?.runId,\n\t\t\tsurface: agentMcp.surface,\n\t\t\tagentMcp,\n\t\t},\n\t});\n}\n\nexport async function bootstrapEvalOpsAgent(\n\toptions: EvalOpsInitOptions = {},\n\tdependencies: EvalOpsInitDependencies = {},\n): Promise<EvalOpsInitResult> {\n\tconst deps = {\n\t\tcreateMcpClient: dependencies.createMcpClient ?? createDefaultMcpClient,\n\t\tfetch: dependencies.fetch ?? fetch,\n\t\tgetOAuthToken: dependencies.getOAuthToken ?? getOAuthToken,\n\t\thasOAuthCredentials:\n\t\t\tdependencies.hasOAuthCredentials ?? hasOAuthCredentials,\n\t\tloadCredentials: dependencies.loadCredentials ?? loadOAuthCredentials,\n\t\tlogin: dependencies.login ?? login,\n\t\tnow: dependencies.now ?? (() => new Date()),\n\t\tonAuthUrl:\n\t\t\tdependencies.onAuthUrl ??\n\t\t\t((url: string) => {\n\t\t\t\tprocess.stdout.write(`${url}\\n`);\n\t\t\t}),\n\t\tonStatus: dependencies.onStatus ?? (() => undefined),\n\t\tsaveCredentials: dependencies.saveCredentials ?? saveOAuthCredentials,\n\t};\n\n\tconst oauthToken = await ensureEvalOpsLogin(options, deps);\n\tconst endpoint = await resolveAgentMcpEndpoint(options, deps);\n\tconst credentialsBeforeKey = deps.loadCredentials(\"evalops\");\n\tconst stored = getStoredAgentMcpMetadata(credentialsBeforeKey);\n\tconst identityBaseUrl = resolveIdentityBaseUrl(\n\t\tcredentialsBeforeKey,\n\t\tendpoint,\n\t);\n\tconst now = deps.now();\n\n\tlet apiKey = stored && !options.rotateKey ? stored.apiKey : undefined;\n\tlet keyOutput: CreateAPIKeyOutput | undefined;\n\tlet apiKeyCreated = false;\n\n\tif (!apiKey) {\n\t\tdeps.onStatus({ message: \"Creating EvalOps agent API key\" });\n\t\tkeyOutput = await createAgentAPIKey(\n\t\t\toptions,\n\t\t\tidentityBaseUrl,\n\t\t\toauthToken,\n\t\t\tdeps.fetch,\n\t\t\tnow,\n\t\t);\n\t\tapiKey = keyOutput.api_key;\n\t\tapiKeyCreated = true;\n\t} else {\n\t\tdeps.onStatus({ message: \"Reusing stored EvalOps agent API key\" });\n\t}\n\n\tdeps.onStatus({ message: \"Registering Maestro with EvalOps agent MCP\" });\n\tlet registerOutput: RegisterOutput;\n\tlet client: EvalOpsMcpClient;\n\tconst openAndRegister = async (token: string) => {\n\t\tconst mcpClient = deps.createMcpClient(endpoint.endpoint, token);\n\t\tawait mcpClient.connect();\n\t\ttry {\n\t\t\tconst output = await registerAgent(options, mcpClient);\n\t\t\treturn { client: mcpClient, registerOutput: output };\n\t\t} catch (error) {\n\t\t\tawait mcpClient.close().catch(() => undefined);\n\t\t\tthrow error;\n\t\t}\n\t};\n\ttry {\n\t\t({ client, registerOutput } = await openAndRegister(apiKey));\n\t} catch (error) {\n\t\tif (apiKeyCreated) {\n\t\t\tthrow error;\n\t\t}\n\t\tdeps.onStatus({\n\t\t\tmessage: \"Stored EvalOps agent API key failed; rotating and retrying\",\n\t\t});\n\t\tkeyOutput = await createAgentAPIKey(\n\t\t\t{ ...options, rotateKey: true },\n\t\t\tidentityBaseUrl,\n\t\t\toauthToken,\n\t\t\tdeps.fetch,\n\t\t\tnow,\n\t\t);\n\t\tapiKey = keyOutput.api_key;\n\t\tapiKeyCreated = true;\n\t\t({ client, registerOutput } = await openAndRegister(apiKey));\n\t}\n\n\tlet governedInferenceCheck: CheckActionOutput = {};\n\tlet controlPlaneSummary: ControlPlaneSummaryOutput = {};\n\ttry {\n\t\tdeps.onStatus({ message: \"Running first governed inference check\" });\n\t\tgovernedInferenceCheck = await runGovernedInferenceCheck(client);\n\t} catch (error) {\n\t\tconst reason = error instanceof Error ? error.message : String(error);\n\t\tdeps.onStatus({\n\t\t\tmessage: `EvalOps governed inference check unavailable; continuing bootstrap (${reason})`,\n\t\t});\n\t}\n\ttry {\n\t\tdeps.onStatus({ message: \"Loading EvalOps control-plane proof\" });\n\t\tcontrolPlaneSummary = await loadControlPlaneSummary(client);\n\t} catch (error) {\n\t\tconst reason = error instanceof Error ? error.message : String(error);\n\t\tdeps.onStatus({\n\t\t\tmessage: `EvalOps control-plane proof unavailable; continuing bootstrap (${reason})`,\n\t\t});\n\t} finally {\n\t\tawait client.close().catch(() => undefined);\n\t}\n\n\tconst credentials = deps.loadCredentials(\"evalops\");\n\tif (!credentials) {\n\t\tthrow new Error(\"EvalOps OAuth credentials disappeared during init\");\n\t}\n\tconst keyPrefix = nonEmptyString(keyOutput?.prefix) ?? stored?.keyPrefix;\n\tconst scopes = keyOutput?.scopes ?? stored?.scopes;\n\tconst integrationProfile =\n\t\tnonEmptyString(registerOutput.integration_profile) ??\n\t\tintegrationProfileForOptions(options);\n\tconst memoryMode =\n\t\tnonEmptyString(registerOutput.memory_mode) ?? memoryModeForOptions(options);\n\tconst runtimeOwner =\n\t\tnonEmptyString(registerOutput.runtime_owner) ??\n\t\truntimeOwnerForOptions(options);\n\tconst shimType =\n\t\tnonEmptyString(registerOutput.shim_type) ?? shimTypeForOptions(options);\n\tconst traceMode =\n\t\tnonEmptyString(registerOutput.trace_mode) ?? traceModeForOptions(options);\n\tconst agentMcp: EvalOpsAgentMcpMetadata = {\n\t\ttype: \"agent-mcp\",\n\t\tapiKey,\n\t\tcreatedAt: (apiKeyCreated\n\t\t\t? now\n\t\t\t: new Date(stored?.createdAt ?? now)\n\t\t).toISOString(),\n\t\tendpoint: endpoint.endpoint,\n\t\tregisteredAt: deps.now().toISOString(),\n\t\tsurface: options.surface ?? DEFAULT_SURFACE,\n\t\tagentId: registerOutput.agent_id,\n\t\texpiresAt: nonEmptyString(keyOutput?.expires_at) ?? stored?.expiresAt,\n\t\tintegrationProfile,\n\t\tkeyId: nonEmptyString(keyOutput?.key_id) ?? stored?.keyId,\n\t\tkeyName: nonEmptyString(keyOutput?.name) ?? stored?.keyName,\n\t\tkeyPrefix,\n\t\tmanifestUrl: endpoint.manifestUrl,\n\t\tmemoryMode,\n\t\tregistryVisible: registerOutput.registry_visible,\n\t\trunId: registerOutput.run_id,\n\t\truntimeOwner,\n\t\tscopes,\n\t\tsessionExpiresAt: registerOutput.expires_at,\n\t\tshimType,\n\t\ttraceMode,\n\t\tworkspaceId:\n\t\t\toptions.workspaceId ?? organizationIdFromCredentials(credentials),\n\t};\n\tsaveBootstrapMetadata(credentials, agentMcp, deps.saveCredentials);\n\n\treturn {\n\t\tagentId: registerOutput.agent_id,\n\t\tapiKeyCreated,\n\t\tapprovalPolicyAttached: hasPolicyControl(controlPlaneSummary),\n\t\tauthenticatedAs: authenticatedAsFromCredentials(credentials),\n\t\tconsoleUrl: consoleUrlFromEndpoint(endpoint.endpoint),\n\t\tendpoint: endpoint.endpoint,\n\t\tevidenceEventPublished: (controlPlaneSummary.evidence ?? []).length > 0,\n\t\tevidenceEvents: (controlPlaneSummary.evidence ?? []).length,\n\t\tgovernedActionsLoaded: governedActionCount(controlPlaneSummary),\n\t\tgovernedInferenceCheckRan: Boolean(governedInferenceCheck.decision),\n\t\tintegrationProfile,\n\t\tkeyPrefix,\n\t\tmanifestUrl: endpoint.manifestUrl,\n\t\tmemoryMode,\n\t\torganizationId: organizationIdFromCredentials(credentials),\n\t\tregistryVisible: registerOutput.registry_visible,\n\t\triskFindings: countHighRiskFindings(controlPlaneSummary),\n\t\trunId: registerOutput.run_id,\n\t\truntimeOwner,\n\t\tscopesGranted: registerOutput.scopes_granted,\n\t\tsessionExpiresAt: registerOutput.expires_at,\n\t\tshimType,\n\t\tstored: true,\n\t\ttraceIngestionStarted: hasTraceEvidence(controlPlaneSummary),\n\t\ttraceMode,\n\t};\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -3,5 +3,6 @@ export { SessionManager } from "./session/manager.js";
3
3
  export { askUserTool, bashTool, backgroundTasksTool, codingTools, editTool, notebookEditTool, readTool, todoTool, writeTool, ToolResultCache, createToolResultCache, getGlobalToolResultCache, } from "./tools/index.js";
4
4
  export { recordEvaluationResult, recordToolExecution, } from "./telemetry.js";
5
5
  export * from "./sdk-tools.js";
6
+ export * from "./platform/a2a-client.js";
6
7
  export { DistributedLockManager, createLockManager, getGlobalLockManager, resetGlobalLockManager, withLock, type LockResult, type LockInfo, type LockOptions, type LockManagerConfig, } from "./db/distributed-lock-manager.js";
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACN,WAAW,EACX,QAAQ,EACR,mBAAmB,EACnB,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,SAAS,EAET,eAAe,EACf,qBAAqB,EACrB,wBAAwB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,sBAAsB,EACtB,mBAAmB,GACnB,MAAM,gBAAgB,CAAC;AAGxB,cAAc,gBAAgB,CAAC;AAG/B,OAAO,EACN,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,QAAQ,EACR,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,iBAAiB,GACtB,MAAM,kCAAkC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACN,WAAW,EACX,QAAQ,EACR,mBAAmB,EACnB,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,SAAS,EAET,eAAe,EACf,qBAAqB,EACrB,wBAAwB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,sBAAsB,EACtB,mBAAmB,GACnB,MAAM,gBAAgB,CAAC;AAGxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AAGzC,OAAO,EACN,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,QAAQ,EACR,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,iBAAiB,GACtB,MAAM,kCAAkC,CAAC"}
package/dist/index.js CHANGED
@@ -6,6 +6,7 @@ ToolResultCache, createToolResultCache, getGlobalToolResultCache, } from "./tool
6
6
  export { recordEvaluationResult, recordToolExecution, } from "./telemetry.js";
7
7
  // SDK tool types for external consumers
8
8
  export * from "./sdk-tools.js";
9
+ export * from "./platform/a2a-client.js";
9
10
  // Distributed lock manager for concurrent operations
10
11
  export { DistributedLockManager, createLockManager, getGlobalLockManager, resetGlobalLockManager, withLock, } from "./db/distributed-lock-manager.js";
11
12
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACN,WAAW,EACX,QAAQ,EACR,mBAAmB,EACnB,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,SAAS;AACT,sBAAsB;AACtB,eAAe,EACf,qBAAqB,EACrB,wBAAwB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,sBAAsB,EACtB,mBAAmB,GACnB,MAAM,gBAAgB,CAAC;AAExB,wCAAwC;AACxC,cAAc,gBAAgB,CAAC;AAE/B,qDAAqD;AACrD,OAAO,EACN,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,QAAQ,GAKR,MAAM,kCAAkC,CAAC","sourcesContent":["export { main } from \"./main.js\";\nexport { SessionManager } from \"./session/manager.js\";\nexport {\n\taskUserTool,\n\tbashTool,\n\tbackgroundTasksTool,\n\tcodingTools,\n\teditTool,\n\tnotebookEditTool,\n\treadTool,\n\ttodoTool,\n\twriteTool,\n\t// Tool result caching\n\tToolResultCache,\n\tcreateToolResultCache,\n\tgetGlobalToolResultCache,\n} from \"./tools/index.js\";\nexport {\n\trecordEvaluationResult,\n\trecordToolExecution,\n} from \"./telemetry.js\";\n\n// SDK tool types for external consumers\nexport * from \"./sdk-tools.js\";\n\n// Distributed lock manager for concurrent operations\nexport {\n\tDistributedLockManager,\n\tcreateLockManager,\n\tgetGlobalLockManager,\n\tresetGlobalLockManager,\n\twithLock,\n\ttype LockResult,\n\ttype LockInfo,\n\ttype LockOptions,\n\ttype LockManagerConfig,\n} from \"./db/distributed-lock-manager.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACN,WAAW,EACX,QAAQ,EACR,mBAAmB,EACnB,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,SAAS;AACT,sBAAsB;AACtB,eAAe,EACf,qBAAqB,EACrB,wBAAwB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,sBAAsB,EACtB,mBAAmB,GACnB,MAAM,gBAAgB,CAAC;AAExB,wCAAwC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AAEzC,qDAAqD;AACrD,OAAO,EACN,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,QAAQ,GAKR,MAAM,kCAAkC,CAAC","sourcesContent":["export { main } from \"./main.js\";\nexport { SessionManager } from \"./session/manager.js\";\nexport {\n\taskUserTool,\n\tbashTool,\n\tbackgroundTasksTool,\n\tcodingTools,\n\teditTool,\n\tnotebookEditTool,\n\treadTool,\n\ttodoTool,\n\twriteTool,\n\t// Tool result caching\n\tToolResultCache,\n\tcreateToolResultCache,\n\tgetGlobalToolResultCache,\n} from \"./tools/index.js\";\nexport {\n\trecordEvaluationResult,\n\trecordToolExecution,\n} from \"./telemetry.js\";\n\n// SDK tool types for external consumers\nexport * from \"./sdk-tools.js\";\nexport * from \"./platform/a2a-client.js\";\n\n// Distributed lock manager for concurrent operations\nexport {\n\tDistributedLockManager,\n\tcreateLockManager,\n\tgetGlobalLockManager,\n\tresetGlobalLockManager,\n\twithLock,\n\ttype LockResult,\n\ttype LockInfo,\n\ttype LockOptions,\n\ttype LockManagerConfig,\n} from \"./db/distributed-lock-manager.js\";\n"]}
@@ -0,0 +1,98 @@
1
+ import { type PlatformServiceConfig } from "./client.js";
2
+ export interface A2AServiceConfig extends PlatformServiceConfig {
3
+ agentId?: string;
4
+ sessionId?: string;
5
+ actorId?: string;
6
+ }
7
+ export interface A2AAgentCard {
8
+ name: string;
9
+ description: string;
10
+ supportedInterfaces: A2AAgentInterface[];
11
+ provider?: {
12
+ url: string;
13
+ organization: string;
14
+ };
15
+ version: string;
16
+ capabilities: {
17
+ streaming?: boolean;
18
+ pushNotifications?: boolean;
19
+ extendedAgentCard?: boolean;
20
+ };
21
+ defaultInputModes: string[];
22
+ defaultOutputModes: string[];
23
+ skills: A2AAgentSkill[];
24
+ }
25
+ export interface A2AAgentInterface {
26
+ url: string;
27
+ protocolBinding: string;
28
+ tenant?: string;
29
+ protocolVersion: string;
30
+ }
31
+ export interface A2AAgentSkill {
32
+ id: string;
33
+ name: string;
34
+ description: string;
35
+ tags: string[];
36
+ examples?: string[];
37
+ inputModes?: string[];
38
+ outputModes?: string[];
39
+ }
40
+ export interface A2APart {
41
+ text?: string;
42
+ url?: string;
43
+ data?: unknown;
44
+ metadata?: Record<string, unknown>;
45
+ filename?: string;
46
+ mediaType?: string;
47
+ }
48
+ export interface A2AMessage {
49
+ messageId: string;
50
+ contextId?: string;
51
+ taskId?: string;
52
+ role: "ROLE_USER" | "ROLE_AGENT" | "user" | "agent";
53
+ parts: A2APart[];
54
+ metadata?: Record<string, unknown>;
55
+ extensions?: string[];
56
+ referenceTaskIds?: string[];
57
+ }
58
+ export interface A2ATaskStatus {
59
+ state: string;
60
+ message?: A2AMessage;
61
+ timestamp?: string;
62
+ }
63
+ export interface A2ATask {
64
+ id: string;
65
+ contextId?: string;
66
+ status: A2ATaskStatus;
67
+ history?: A2AMessage[];
68
+ metadata?: Record<string, unknown>;
69
+ }
70
+ export interface SendA2AMessageInput {
71
+ message: A2AMessage;
72
+ configuration?: {
73
+ acceptedOutputModes?: string[];
74
+ returnImmediately?: boolean;
75
+ };
76
+ metadata?: Record<string, unknown>;
77
+ }
78
+ export interface SendA2AMessageResult {
79
+ task: A2ATask;
80
+ }
81
+ export declare function resolveA2AServiceConfig(overrides?: Partial<A2AServiceConfig>): Promise<A2AServiceConfig | null>;
82
+ export declare function buildA2AUserMessage(input: {
83
+ text: string;
84
+ messageId: string;
85
+ contextId?: string;
86
+ taskId?: string;
87
+ metadata?: Record<string, unknown>;
88
+ }): A2AMessage;
89
+ export declare function discoverA2AAgentCard(config: A2AServiceConfig, options?: {
90
+ signal?: AbortSignal;
91
+ }): Promise<A2AAgentCard>;
92
+ export declare function sendA2AMessage(config: A2AServiceConfig, input: SendA2AMessageInput, options?: {
93
+ signal?: AbortSignal;
94
+ }): Promise<SendA2AMessageResult>;
95
+ export declare function getA2ATask(config: A2AServiceConfig, taskId: string, options?: {
96
+ signal?: AbortSignal;
97
+ }): Promise<A2ATask>;
98
+ //# sourceMappingURL=a2a-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a2a-client.d.ts","sourceRoot":"","sources":["../../src/platform/a2a-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,200 @@
1
+ import { fetchDownstream } from "../utils/downstream-http.js";
2
+ import { buildPlatformJsonHeaders, getEnvValue, resolvePlatformServiceConfig, trimString, } from "./client.js";
3
+ const DEFAULT_TIMEOUT_MS = 2_500;
4
+ const DEFAULT_MAX_ATTEMPTS = 2;
5
+ const A2A_BASE_URL_ENV_VARS = [
6
+ "MAESTRO_PLATFORM_A2A_URL",
7
+ "MAESTRO_A2A_URL",
8
+ "MAESTRO_AGENT_RUNTIME_SERVICE_URL",
9
+ "PLATFORM_AGENT_RUNTIME_URL",
10
+ "AGENT_RUNTIME_SERVICE_URL",
11
+ "MAESTRO_PLATFORM_BASE_URL",
12
+ "MAESTRO_EVALOPS_BASE_URL",
13
+ "EVALOPS_BASE_URL",
14
+ ];
15
+ const A2A_TOKEN_ENV_VARS = [
16
+ "MAESTRO_PLATFORM_A2A_TOKEN",
17
+ "MAESTRO_A2A_TOKEN",
18
+ "MAESTRO_AGENT_RUNTIME_SERVICE_TOKEN",
19
+ "AGENT_RUNTIME_SERVICE_TOKEN",
20
+ ];
21
+ const A2A_ORGANIZATION_ENV_VARS = [
22
+ "MAESTRO_PLATFORM_A2A_ORG_ID",
23
+ "MAESTRO_A2A_ORG_ID",
24
+ "MAESTRO_AGENT_RUNTIME_ORG_ID",
25
+ "AGENT_RUNTIME_ORGANIZATION_ID",
26
+ "MAESTRO_EVALOPS_ORG_ID",
27
+ "EVALOPS_ORGANIZATION_ID",
28
+ "EVALOPS_ORG_ID",
29
+ "MAESTRO_ENTERPRISE_ORG_ID",
30
+ ];
31
+ const A2A_WORKSPACE_ENV_VARS = [
32
+ "MAESTRO_PLATFORM_A2A_WORKSPACE_ID",
33
+ "MAESTRO_A2A_WORKSPACE_ID",
34
+ "MAESTRO_AGENT_RUNTIME_WORKSPACE_ID",
35
+ "AGENT_RUNTIME_WORKSPACE_ID",
36
+ "MAESTRO_EVALOPS_WORKSPACE_ID",
37
+ "MAESTRO_WORKSPACE_ID",
38
+ "EVALOPS_WORKSPACE_ID",
39
+ ];
40
+ const A2A_TIMEOUT_ENV_VARS = [
41
+ "MAESTRO_PLATFORM_A2A_TIMEOUT_MS",
42
+ "MAESTRO_A2A_TIMEOUT_MS",
43
+ "MAESTRO_AGENT_RUNTIME_TIMEOUT_MS",
44
+ "AGENT_RUNTIME_SERVICE_TIMEOUT_MS",
45
+ ];
46
+ const A2A_MAX_ATTEMPTS_ENV_VARS = [
47
+ "MAESTRO_PLATFORM_A2A_MAX_ATTEMPTS",
48
+ "MAESTRO_A2A_MAX_ATTEMPTS",
49
+ "MAESTRO_AGENT_RUNTIME_MAX_ATTEMPTS",
50
+ "AGENT_RUNTIME_SERVICE_MAX_ATTEMPTS",
51
+ ];
52
+ const A2A_BASE_URL_SUFFIXES = [
53
+ "/.well-known/agent-card.json",
54
+ "/message:send",
55
+ "/message:stream",
56
+ ];
57
+ function normalizeA2ABaseUrl(baseUrl) {
58
+ let normalized = baseUrl.trim().replace(/\/+$/u, "");
59
+ for (const suffix of A2A_BASE_URL_SUFFIXES) {
60
+ if (normalized.endsWith(suffix)) {
61
+ normalized = normalized.slice(0, -suffix.length).replace(/\/+$/u, "");
62
+ }
63
+ }
64
+ return normalized;
65
+ }
66
+ export async function resolveA2AServiceConfig(overrides = {}) {
67
+ const config = await resolvePlatformServiceConfig({
68
+ baseUrlEnvVars: A2A_BASE_URL_ENV_VARS,
69
+ tokenEnvVars: A2A_TOKEN_ENV_VARS,
70
+ organizationEnvVars: A2A_ORGANIZATION_ENV_VARS,
71
+ workspaceEnvVars: A2A_WORKSPACE_ENV_VARS,
72
+ timeoutEnvVars: A2A_TIMEOUT_ENV_VARS,
73
+ maxAttemptsEnvVars: A2A_MAX_ATTEMPTS_ENV_VARS,
74
+ baseUrlSuffixes: A2A_BASE_URL_SUFFIXES,
75
+ defaultTimeoutMs: DEFAULT_TIMEOUT_MS,
76
+ defaultMaxAttempts: DEFAULT_MAX_ATTEMPTS,
77
+ requireBaseUrl: false,
78
+ requireOrganizationId: false,
79
+ requireToken: false,
80
+ allowOAuthTokenFallback: false,
81
+ });
82
+ const baseUrl = trimString(overrides.baseUrl ?? config?.baseUrl);
83
+ const workspaceId = trimString(overrides.workspaceId ?? config?.workspaceId);
84
+ if (!baseUrl || !workspaceId) {
85
+ return null;
86
+ }
87
+ return {
88
+ ...(config ?? {
89
+ baseUrl,
90
+ timeoutMs: DEFAULT_TIMEOUT_MS,
91
+ maxAttempts: DEFAULT_MAX_ATTEMPTS,
92
+ }),
93
+ baseUrl: normalizeA2ABaseUrl(baseUrl),
94
+ organizationId: trimString(overrides.organizationId ?? config?.organizationId) ??
95
+ config?.organizationId,
96
+ workspaceId,
97
+ token: trimString(overrides.token ?? config?.token) ?? config?.token,
98
+ timeoutMs: overrides.timeoutMs ?? config?.timeoutMs ?? DEFAULT_TIMEOUT_MS,
99
+ maxAttempts: overrides.maxAttempts ?? config?.maxAttempts ?? DEFAULT_MAX_ATTEMPTS,
100
+ agentId: trimString(overrides.agentId) ??
101
+ getEnvValue(["MAESTRO_AGENT_ID", "MAESTRO_EVALOPS_AGENT_ID"]) ??
102
+ "maestro",
103
+ sessionId: trimString(overrides.sessionId) ?? getEnvValue(["MAESTRO_SESSION_ID"]),
104
+ actorId: trimString(overrides.actorId) ??
105
+ getEnvValue(["MAESTRO_USER_ID", "MAESTRO_ACTOR_ID"]),
106
+ };
107
+ }
108
+ export function buildA2AUserMessage(input) {
109
+ return {
110
+ messageId: input.messageId,
111
+ contextId: input.contextId,
112
+ taskId: input.taskId,
113
+ role: "ROLE_USER",
114
+ parts: [{ text: input.text, mediaType: "text/plain" }],
115
+ metadata: input.metadata,
116
+ };
117
+ }
118
+ export async function discoverA2AAgentCard(config, options = {}) {
119
+ const response = await fetchDownstream(`${config.baseUrl}/.well-known/agent-card.json`, {
120
+ method: "GET",
121
+ headers: buildA2AHeaders(config),
122
+ signal: options.signal,
123
+ }, {
124
+ serviceName: "platform-a2a",
125
+ failureMode: "required",
126
+ timeoutMs: config.timeoutMs,
127
+ maxAttempts: config.maxAttempts,
128
+ });
129
+ await throwForA2AError(response, "discover agent card");
130
+ return (await response.json());
131
+ }
132
+ export async function sendA2AMessage(config, input, options = {}) {
133
+ const body = {
134
+ ...input,
135
+ message: {
136
+ ...input.message,
137
+ metadata: {
138
+ ...(input.message.metadata ?? {}),
139
+ workspaceId: config.workspaceId,
140
+ agentId: config.agentId,
141
+ sessionId: config.sessionId,
142
+ actorId: config.actorId,
143
+ },
144
+ },
145
+ };
146
+ const response = await fetchDownstream(`${config.baseUrl}/message:send`, {
147
+ method: "POST",
148
+ headers: buildA2AHeaders(config),
149
+ body: JSON.stringify(body),
150
+ signal: options.signal,
151
+ }, {
152
+ serviceName: "platform-a2a",
153
+ failureMode: "required",
154
+ timeoutMs: config.timeoutMs,
155
+ maxAttempts: config.maxAttempts,
156
+ });
157
+ await throwForA2AError(response, "send message");
158
+ return (await response.json());
159
+ }
160
+ export async function getA2ATask(config, taskId, options = {}) {
161
+ const trimmedTaskId = trimString(taskId);
162
+ if (!trimmedTaskId) {
163
+ throw new Error("A2A task id is required");
164
+ }
165
+ const response = await fetchDownstream(`${config.baseUrl}/tasks/${encodeURIComponent(trimmedTaskId)}`, {
166
+ method: "GET",
167
+ headers: buildA2AHeaders(config),
168
+ signal: options.signal,
169
+ }, {
170
+ serviceName: "platform-a2a",
171
+ failureMode: "required",
172
+ timeoutMs: config.timeoutMs,
173
+ maxAttempts: config.maxAttempts,
174
+ });
175
+ await throwForA2AError(response, "get task");
176
+ return (await response.json());
177
+ }
178
+ function buildA2AHeaders(config) {
179
+ return buildPlatformJsonHeaders(config, {
180
+ "X-EvalOps-Workspace-Id": config.workspaceId,
181
+ "X-EvalOps-Agent-Id": config.agentId,
182
+ "X-EvalOps-Session-Id": config.sessionId,
183
+ "X-EvalOps-Actor-Id": config.actorId,
184
+ });
185
+ }
186
+ async function throwForA2AError(response, operation) {
187
+ if (response.ok) {
188
+ return;
189
+ }
190
+ let detail = "";
191
+ try {
192
+ const payload = (await response.json());
193
+ detail = payload.error?.message ?? payload.error?.code ?? "";
194
+ }
195
+ catch {
196
+ detail = await response.text().catch(() => "");
197
+ }
198
+ throw new Error(`Platform A2A ${operation} failed with ${response.status}${detail ? `: ${detail}` : ""}`);
199
+ }
200
+ //# sourceMappingURL=a2a-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a2a-client.js","sourceRoot":"","sources":["../../src/platform/a2a-client.ts"],"names":[],"mappings":"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","sourcesContent":["import { fetchDownstream } from \"../utils/downstream-http.js\";\nimport {\n\ttype PlatformServiceConfig,\n\tbuildPlatformJsonHeaders,\n\tgetEnvValue,\n\tresolvePlatformServiceConfig,\n\ttrimString,\n} from \"./client.js\";\n\nconst DEFAULT_TIMEOUT_MS = 2_500;\nconst DEFAULT_MAX_ATTEMPTS = 2;\n\nconst A2A_BASE_URL_ENV_VARS = [\n\t\"MAESTRO_PLATFORM_A2A_URL\",\n\t\"MAESTRO_A2A_URL\",\n\t\"MAESTRO_AGENT_RUNTIME_SERVICE_URL\",\n\t\"PLATFORM_AGENT_RUNTIME_URL\",\n\t\"AGENT_RUNTIME_SERVICE_URL\",\n\t\"MAESTRO_PLATFORM_BASE_URL\",\n\t\"MAESTRO_EVALOPS_BASE_URL\",\n\t\"EVALOPS_BASE_URL\",\n] as const;\n\nconst A2A_TOKEN_ENV_VARS = [\n\t\"MAESTRO_PLATFORM_A2A_TOKEN\",\n\t\"MAESTRO_A2A_TOKEN\",\n\t\"MAESTRO_AGENT_RUNTIME_SERVICE_TOKEN\",\n\t\"AGENT_RUNTIME_SERVICE_TOKEN\",\n] as const;\n\nconst A2A_ORGANIZATION_ENV_VARS = [\n\t\"MAESTRO_PLATFORM_A2A_ORG_ID\",\n\t\"MAESTRO_A2A_ORG_ID\",\n\t\"MAESTRO_AGENT_RUNTIME_ORG_ID\",\n\t\"AGENT_RUNTIME_ORGANIZATION_ID\",\n\t\"MAESTRO_EVALOPS_ORG_ID\",\n\t\"EVALOPS_ORGANIZATION_ID\",\n\t\"EVALOPS_ORG_ID\",\n\t\"MAESTRO_ENTERPRISE_ORG_ID\",\n] as const;\n\nconst A2A_WORKSPACE_ENV_VARS = [\n\t\"MAESTRO_PLATFORM_A2A_WORKSPACE_ID\",\n\t\"MAESTRO_A2A_WORKSPACE_ID\",\n\t\"MAESTRO_AGENT_RUNTIME_WORKSPACE_ID\",\n\t\"AGENT_RUNTIME_WORKSPACE_ID\",\n\t\"MAESTRO_EVALOPS_WORKSPACE_ID\",\n\t\"MAESTRO_WORKSPACE_ID\",\n\t\"EVALOPS_WORKSPACE_ID\",\n] as const;\n\nconst A2A_TIMEOUT_ENV_VARS = [\n\t\"MAESTRO_PLATFORM_A2A_TIMEOUT_MS\",\n\t\"MAESTRO_A2A_TIMEOUT_MS\",\n\t\"MAESTRO_AGENT_RUNTIME_TIMEOUT_MS\",\n\t\"AGENT_RUNTIME_SERVICE_TIMEOUT_MS\",\n] as const;\n\nconst A2A_MAX_ATTEMPTS_ENV_VARS = [\n\t\"MAESTRO_PLATFORM_A2A_MAX_ATTEMPTS\",\n\t\"MAESTRO_A2A_MAX_ATTEMPTS\",\n\t\"MAESTRO_AGENT_RUNTIME_MAX_ATTEMPTS\",\n\t\"AGENT_RUNTIME_SERVICE_MAX_ATTEMPTS\",\n] as const;\n\nconst A2A_BASE_URL_SUFFIXES = [\n\t\"/.well-known/agent-card.json\",\n\t\"/message:send\",\n\t\"/message:stream\",\n] as const;\n\nexport interface A2AServiceConfig extends PlatformServiceConfig {\n\tagentId?: string;\n\tsessionId?: string;\n\tactorId?: string;\n}\n\nexport interface A2AAgentCard {\n\tname: string;\n\tdescription: string;\n\tsupportedInterfaces: A2AAgentInterface[];\n\tprovider?: {\n\t\turl: string;\n\t\torganization: string;\n\t};\n\tversion: string;\n\tcapabilities: {\n\t\tstreaming?: boolean;\n\t\tpushNotifications?: boolean;\n\t\textendedAgentCard?: boolean;\n\t};\n\tdefaultInputModes: string[];\n\tdefaultOutputModes: string[];\n\tskills: A2AAgentSkill[];\n}\n\nexport interface A2AAgentInterface {\n\turl: string;\n\tprotocolBinding: string;\n\ttenant?: string;\n\tprotocolVersion: string;\n}\n\nexport interface A2AAgentSkill {\n\tid: string;\n\tname: string;\n\tdescription: string;\n\ttags: string[];\n\texamples?: string[];\n\tinputModes?: string[];\n\toutputModes?: string[];\n}\n\nexport interface A2APart {\n\ttext?: string;\n\turl?: string;\n\tdata?: unknown;\n\tmetadata?: Record<string, unknown>;\n\tfilename?: string;\n\tmediaType?: string;\n}\n\nexport interface A2AMessage {\n\tmessageId: string;\n\tcontextId?: string;\n\ttaskId?: string;\n\trole: \"ROLE_USER\" | \"ROLE_AGENT\" | \"user\" | \"agent\";\n\tparts: A2APart[];\n\tmetadata?: Record<string, unknown>;\n\textensions?: string[];\n\treferenceTaskIds?: string[];\n}\n\nexport interface A2ATaskStatus {\n\tstate: string;\n\tmessage?: A2AMessage;\n\ttimestamp?: string;\n}\n\nexport interface A2ATask {\n\tid: string;\n\tcontextId?: string;\n\tstatus: A2ATaskStatus;\n\thistory?: A2AMessage[];\n\tmetadata?: Record<string, unknown>;\n}\n\nexport interface SendA2AMessageInput {\n\tmessage: A2AMessage;\n\tconfiguration?: {\n\t\tacceptedOutputModes?: string[];\n\t\treturnImmediately?: boolean;\n\t};\n\tmetadata?: Record<string, unknown>;\n}\n\nexport interface SendA2AMessageResult {\n\ttask: A2ATask;\n}\n\nfunction normalizeA2ABaseUrl(baseUrl: string): string {\n\tlet normalized = baseUrl.trim().replace(/\\/+$/u, \"\");\n\tfor (const suffix of A2A_BASE_URL_SUFFIXES) {\n\t\tif (normalized.endsWith(suffix)) {\n\t\t\tnormalized = normalized.slice(0, -suffix.length).replace(/\\/+$/u, \"\");\n\t\t}\n\t}\n\treturn normalized;\n}\n\nexport async function resolveA2AServiceConfig(\n\toverrides: Partial<A2AServiceConfig> = {},\n): Promise<A2AServiceConfig | null> {\n\tconst config = await resolvePlatformServiceConfig({\n\t\tbaseUrlEnvVars: A2A_BASE_URL_ENV_VARS,\n\t\ttokenEnvVars: A2A_TOKEN_ENV_VARS,\n\t\torganizationEnvVars: A2A_ORGANIZATION_ENV_VARS,\n\t\tworkspaceEnvVars: A2A_WORKSPACE_ENV_VARS,\n\t\ttimeoutEnvVars: A2A_TIMEOUT_ENV_VARS,\n\t\tmaxAttemptsEnvVars: A2A_MAX_ATTEMPTS_ENV_VARS,\n\t\tbaseUrlSuffixes: A2A_BASE_URL_SUFFIXES,\n\t\tdefaultTimeoutMs: DEFAULT_TIMEOUT_MS,\n\t\tdefaultMaxAttempts: DEFAULT_MAX_ATTEMPTS,\n\t\trequireBaseUrl: false,\n\t\trequireOrganizationId: false,\n\t\trequireToken: false,\n\t\tallowOAuthTokenFallback: false,\n\t});\n\tconst baseUrl = trimString(overrides.baseUrl ?? config?.baseUrl);\n\tconst workspaceId = trimString(overrides.workspaceId ?? config?.workspaceId);\n\tif (!baseUrl || !workspaceId) {\n\t\treturn null;\n\t}\n\treturn {\n\t\t...(config ?? {\n\t\t\tbaseUrl,\n\t\t\ttimeoutMs: DEFAULT_TIMEOUT_MS,\n\t\t\tmaxAttempts: DEFAULT_MAX_ATTEMPTS,\n\t\t}),\n\t\tbaseUrl: normalizeA2ABaseUrl(baseUrl),\n\t\torganizationId:\n\t\t\ttrimString(overrides.organizationId ?? config?.organizationId) ??\n\t\t\tconfig?.organizationId,\n\t\tworkspaceId,\n\t\ttoken: trimString(overrides.token ?? config?.token) ?? config?.token,\n\t\ttimeoutMs: overrides.timeoutMs ?? config?.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n\t\tmaxAttempts:\n\t\t\toverrides.maxAttempts ?? config?.maxAttempts ?? DEFAULT_MAX_ATTEMPTS,\n\t\tagentId:\n\t\t\ttrimString(overrides.agentId) ??\n\t\t\tgetEnvValue([\"MAESTRO_AGENT_ID\", \"MAESTRO_EVALOPS_AGENT_ID\"]) ??\n\t\t\t\"maestro\",\n\t\tsessionId:\n\t\t\ttrimString(overrides.sessionId) ?? getEnvValue([\"MAESTRO_SESSION_ID\"]),\n\t\tactorId:\n\t\t\ttrimString(overrides.actorId) ??\n\t\t\tgetEnvValue([\"MAESTRO_USER_ID\", \"MAESTRO_ACTOR_ID\"]),\n\t};\n}\n\nexport function buildA2AUserMessage(input: {\n\ttext: string;\n\tmessageId: string;\n\tcontextId?: string;\n\ttaskId?: string;\n\tmetadata?: Record<string, unknown>;\n}): A2AMessage {\n\treturn {\n\t\tmessageId: input.messageId,\n\t\tcontextId: input.contextId,\n\t\ttaskId: input.taskId,\n\t\trole: \"ROLE_USER\",\n\t\tparts: [{ text: input.text, mediaType: \"text/plain\" }],\n\t\tmetadata: input.metadata,\n\t};\n}\n\nexport async function discoverA2AAgentCard(\n\tconfig: A2AServiceConfig,\n\toptions: { signal?: AbortSignal } = {},\n): Promise<A2AAgentCard> {\n\tconst response = await fetchDownstream(\n\t\t`${config.baseUrl}/.well-known/agent-card.json`,\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\theaders: buildA2AHeaders(config),\n\t\t\tsignal: options.signal,\n\t\t},\n\t\t{\n\t\t\tserviceName: \"platform-a2a\",\n\t\t\tfailureMode: \"required\",\n\t\t\ttimeoutMs: config.timeoutMs,\n\t\t\tmaxAttempts: config.maxAttempts,\n\t\t},\n\t);\n\tawait throwForA2AError(response, \"discover agent card\");\n\treturn (await response.json()) as A2AAgentCard;\n}\n\nexport async function sendA2AMessage(\n\tconfig: A2AServiceConfig,\n\tinput: SendA2AMessageInput,\n\toptions: { signal?: AbortSignal } = {},\n): Promise<SendA2AMessageResult> {\n\tconst body = {\n\t\t...input,\n\t\tmessage: {\n\t\t\t...input.message,\n\t\t\tmetadata: {\n\t\t\t\t...(input.message.metadata ?? {}),\n\t\t\t\tworkspaceId: config.workspaceId,\n\t\t\t\tagentId: config.agentId,\n\t\t\t\tsessionId: config.sessionId,\n\t\t\t\tactorId: config.actorId,\n\t\t\t},\n\t\t},\n\t};\n\tconst response = await fetchDownstream(\n\t\t`${config.baseUrl}/message:send`,\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\theaders: buildA2AHeaders(config),\n\t\t\tbody: JSON.stringify(body),\n\t\t\tsignal: options.signal,\n\t\t},\n\t\t{\n\t\t\tserviceName: \"platform-a2a\",\n\t\t\tfailureMode: \"required\",\n\t\t\ttimeoutMs: config.timeoutMs,\n\t\t\tmaxAttempts: config.maxAttempts,\n\t\t},\n\t);\n\tawait throwForA2AError(response, \"send message\");\n\treturn (await response.json()) as SendA2AMessageResult;\n}\n\nexport async function getA2ATask(\n\tconfig: A2AServiceConfig,\n\ttaskId: string,\n\toptions: { signal?: AbortSignal } = {},\n): Promise<A2ATask> {\n\tconst trimmedTaskId = trimString(taskId);\n\tif (!trimmedTaskId) {\n\t\tthrow new Error(\"A2A task id is required\");\n\t}\n\tconst response = await fetchDownstream(\n\t\t`${config.baseUrl}/tasks/${encodeURIComponent(trimmedTaskId)}`,\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\theaders: buildA2AHeaders(config),\n\t\t\tsignal: options.signal,\n\t\t},\n\t\t{\n\t\t\tserviceName: \"platform-a2a\",\n\t\t\tfailureMode: \"required\",\n\t\t\ttimeoutMs: config.timeoutMs,\n\t\t\tmaxAttempts: config.maxAttempts,\n\t\t},\n\t);\n\tawait throwForA2AError(response, \"get task\");\n\treturn (await response.json()) as A2ATask;\n}\n\nfunction buildA2AHeaders(config: A2AServiceConfig): Record<string, string> {\n\treturn buildPlatformJsonHeaders(config, {\n\t\t\"X-EvalOps-Workspace-Id\": config.workspaceId,\n\t\t\"X-EvalOps-Agent-Id\": config.agentId,\n\t\t\"X-EvalOps-Session-Id\": config.sessionId,\n\t\t\"X-EvalOps-Actor-Id\": config.actorId,\n\t});\n}\n\nasync function throwForA2AError(\n\tresponse: Response,\n\toperation: string,\n): Promise<void> {\n\tif (response.ok) {\n\t\treturn;\n\t}\n\tlet detail = \"\";\n\ttry {\n\t\tconst payload = (await response.json()) as {\n\t\t\terror?: { code?: string; message?: string };\n\t\t};\n\t\tdetail = payload.error?.message ?? payload.error?.code ?? \"\";\n\t} catch {\n\t\tdetail = await response.text().catch(() => \"\");\n\t}\n\tthrow new Error(\n\t\t`Platform A2A ${operation} failed with ${response.status}${\n\t\t\tdetail ? `: ${detail}` : \"\"\n\t\t}`,\n\t);\n}\n"]}
@@ -25,6 +25,7 @@ export interface ResolvePlatformServiceConfigOptions {
25
25
  requireBaseUrl?: boolean;
26
26
  requireOrganizationId?: boolean;
27
27
  requireToken?: boolean;
28
+ allowOAuthTokenFallback?: boolean;
28
29
  }
29
30
  export interface PlatformRequestOptions {
30
31
  serviceName: string;
@@ -43,6 +44,7 @@ export declare function resolveWorkspaceId(envVars?: readonly string[]): string
43
44
  export declare function resolveConfiguredToken(envVars?: readonly string[]): string | undefined;
44
45
  export declare function resolvePlatformToken(envVars?: readonly string[]): Promise<string | undefined>;
45
46
  export declare function resolvePlatformServiceConfig(options: ResolvePlatformServiceConfigOptions): Promise<PlatformServiceConfig | null>;
47
+ export declare function buildPlatformJsonHeaders(config: Pick<PlatformServiceConfig, "organizationId" | "token">, extraHeaders?: Record<string, string | undefined>): Record<string, string>;
46
48
  export declare function buildPlatformConnectHeaders(config: Pick<PlatformServiceConfig, "organizationId" | "token">, extraHeaders?: Record<string, string | undefined>): Record<string, string>;
47
49
  export declare function postPlatformConnect(config: PlatformServiceConfig, path: string, body: Record<string, unknown>, options: PlatformRequestOptions, headers?: Record<string, string | undefined>): Promise<Response>;
48
50
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/platform/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/platform/client.ts"],"names":[],"mappings":"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"}
@@ -88,7 +88,9 @@ export async function resolvePlatformServiceConfig(options) {
88
88
  if (!organizationId && options.requireOrganizationId !== false) {
89
89
  return null;
90
90
  }
91
- const token = await resolvePlatformToken(options.tokenEnvVars);
91
+ const token = options.allowOAuthTokenFallback === false
92
+ ? getEnvValue(options.tokenEnvVars ?? [])
93
+ : await resolvePlatformToken(options.tokenEnvVars);
92
94
  if (!token && options.requireToken !== false) {
93
95
  return null;
94
96
  }
@@ -105,7 +107,7 @@ export async function resolvePlatformServiceConfig(options) {
105
107
  maxAttempts: parsePositiveInt(getEnvValue(options.maxAttemptsEnvVars ?? []), options.defaultMaxAttempts ?? DEFAULT_PLATFORM_MAX_ATTEMPTS),
106
108
  };
107
109
  }
108
- function buildPlatformJsonHeaders(config, extraHeaders) {
110
+ export function buildPlatformJsonHeaders(config, extraHeaders) {
109
111
  return Object.fromEntries(Object.entries({
110
112
  ...(config.token ? { Authorization: `Bearer ${config.token}` } : {}),
111
113
  "Content-Type": "application/json",
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/platform/client.ts"],"names":[],"mappings":"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","sourcesContent":["import { getOAuthToken } from \"../oauth/index.js\";\nimport { loadOAuthCredentials } from \"../oauth/storage.js\";\nimport {\n\ttype DownstreamFailureMode,\n\tfetchDownstream,\n} from \"../utils/downstream-http.js\";\n\nexport const CONNECT_PROTOCOL_VERSION = \"1\";\nexport const DEFAULT_PLATFORM_TIMEOUT_MS = 2_000;\nexport const DEFAULT_PLATFORM_MAX_ATTEMPTS = 2;\n\nexport interface PlatformServiceConfig {\n\tbaseUrl: string;\n\ttoken?: string;\n\torganizationId?: string;\n\tteamId?: string;\n\tworkspaceId?: string;\n\ttimeoutMs: number;\n\tmaxAttempts: number;\n}\n\nexport interface ResolvePlatformServiceConfigOptions {\n\tbaseUrlEnvVars: readonly string[];\n\ttokenEnvVars?: readonly string[];\n\torganizationEnvVars?: readonly string[];\n\tteamEnvVars?: readonly string[];\n\tworkspaceEnvVars?: readonly string[];\n\ttimeoutEnvVars?: readonly string[];\n\tmaxAttemptsEnvVars?: readonly string[];\n\tbaseUrlSuffixes?: readonly string[];\n\tdefaultTimeoutMs?: number;\n\tdefaultMaxAttempts?: number;\n\trequireBaseUrl?: boolean;\n\trequireOrganizationId?: boolean;\n\trequireToken?: boolean;\n}\n\nexport interface PlatformRequestOptions {\n\tserviceName: string;\n\tfailureMode: DownstreamFailureMode;\n\ttimeoutMs: number;\n\tmaxAttempts?: number;\n\tsignal?: AbortSignal;\n}\n\nconst SHARED_PLATFORM_BASE_URL_ENV_VARS = [\n\t\"MAESTRO_PLATFORM_BASE_URL\",\n\t\"MAESTRO_EVALOPS_BASE_URL\",\n\t\"EVALOPS_BASE_URL\",\n] as const;\n\nconst DEFAULT_TOKEN_ENV_VARS = [\n\t\"MAESTRO_EVALOPS_ACCESS_TOKEN\",\n\t\"EVALOPS_TOKEN\",\n] as const;\n\nconst DEFAULT_ORGANIZATION_ENV_VARS = [\n\t\"MAESTRO_EVALOPS_ORG_ID\",\n\t\"EVALOPS_ORGANIZATION_ID\",\n\t\"EVALOPS_ORG_ID\",\n\t\"MAESTRO_ENTERPRISE_ORG_ID\",\n\t\"MAESTRO_LLM_GATEWAY_ORG_ID\",\n\t\"MAESTRO_REMOTE_RUNNER_ORG_ID\",\n] as const;\n\nconst DEFAULT_TEAM_ENV_VARS = [\n\t\"MAESTRO_EVALOPS_TEAM_ID\",\n\t\"MAESTRO_LLM_GATEWAY_TEAM_ID\",\n] as const;\n\nexport function trimString(value: string | undefined): string | undefined {\n\tconst trimmed = value?.trim();\n\treturn trimmed ? trimmed : undefined;\n}\n\nexport function getEnvValue(names: readonly string[]): string | undefined {\n\tfor (const name of names) {\n\t\tconst value = trimString(process.env[name]);\n\t\tif (value) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nexport function parsePositiveInt(\n\tvalue: string | undefined,\n\tfallback: number,\n): number {\n\tconst parsed = Number.parseInt(value ?? \"\", 10);\n\treturn Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;\n}\n\nexport function normalizeBaseUrl(\n\tbaseUrl: string,\n\tsuffixes: readonly string[] = [],\n): string {\n\tlet normalized = baseUrl.trim().replace(/\\/+$/u, \"\");\n\tfor (const suffix of suffixes) {\n\t\tif (normalized.endsWith(suffix)) {\n\t\t\tnormalized = normalized.slice(0, -suffix.length).replace(/\\/+$/u, \"\");\n\t\t}\n\t}\n\treturn normalized;\n}\n\nexport function resolveOrganizationId(\n\tenvVars: readonly string[] = DEFAULT_ORGANIZATION_ENV_VARS,\n): string | undefined {\n\tconst envOrgId = getEnvValue(envVars);\n\tif (envOrgId) {\n\t\treturn envOrgId;\n\t}\n\tconst stored = loadOAuthCredentials(\"evalops\")?.metadata?.organizationId;\n\treturn typeof stored === \"string\" ? trimString(stored) : undefined;\n}\n\nexport function resolveTeamId(\n\tenvVars: readonly string[] = DEFAULT_TEAM_ENV_VARS,\n): string | undefined {\n\treturn getEnvValue(envVars);\n}\n\nexport function resolveWorkspaceId(\n\tenvVars: readonly string[] = DEFAULT_ORGANIZATION_ENV_VARS,\n): string | undefined {\n\treturn getEnvValue(envVars) ?? resolveOrganizationId();\n}\n\nexport function resolveConfiguredToken(\n\tenvVars: readonly string[] = DEFAULT_TOKEN_ENV_VARS,\n): string | undefined {\n\tconst envToken = getEnvValue(envVars);\n\tif (envToken) {\n\t\treturn envToken;\n\t}\n\tconst stored = loadOAuthCredentials(\"evalops\")?.access;\n\treturn typeof stored === \"string\" ? trimString(stored) : undefined;\n}\n\nexport async function resolvePlatformToken(\n\tenvVars: readonly string[] = DEFAULT_TOKEN_ENV_VARS,\n): Promise<string | undefined> {\n\treturn getEnvValue(envVars) ?? (await getOAuthToken(\"evalops\")) ?? undefined;\n}\n\nexport async function resolvePlatformServiceConfig(\n\toptions: ResolvePlatformServiceConfigOptions,\n): Promise<PlatformServiceConfig | null> {\n\tconst baseUrl = getEnvValue([\n\t\t...options.baseUrlEnvVars,\n\t\t...SHARED_PLATFORM_BASE_URL_ENV_VARS,\n\t]);\n\tif (!baseUrl && options.requireBaseUrl !== false) {\n\t\treturn null;\n\t}\n\n\tconst organizationId = resolveOrganizationId(options.organizationEnvVars);\n\tif (!organizationId && options.requireOrganizationId !== false) {\n\t\treturn null;\n\t}\n\n\tconst token = await resolvePlatformToken(options.tokenEnvVars);\n\tif (!token && options.requireToken !== false) {\n\t\treturn null;\n\t}\n\n\tconst workspaceId = options.workspaceEnvVars\n\t\t? resolveWorkspaceId(options.workspaceEnvVars)\n\t\t: organizationId;\n\n\treturn {\n\t\tbaseUrl: normalizeBaseUrl(baseUrl ?? \"\", options.baseUrlSuffixes),\n\t\t...(token ? { token } : {}),\n\t\t...(organizationId ? { organizationId } : {}),\n\t\tteamId: resolveTeamId(options.teamEnvVars),\n\t\t...(workspaceId ? { workspaceId } : {}),\n\t\ttimeoutMs: parsePositiveInt(\n\t\t\tgetEnvValue(options.timeoutEnvVars ?? []),\n\t\t\toptions.defaultTimeoutMs ?? DEFAULT_PLATFORM_TIMEOUT_MS,\n\t\t),\n\t\tmaxAttempts: parsePositiveInt(\n\t\t\tgetEnvValue(options.maxAttemptsEnvVars ?? []),\n\t\t\toptions.defaultMaxAttempts ?? DEFAULT_PLATFORM_MAX_ATTEMPTS,\n\t\t),\n\t};\n}\n\nfunction buildPlatformJsonHeaders(\n\tconfig: Pick<PlatformServiceConfig, \"organizationId\" | \"token\">,\n\textraHeaders?: Record<string, string | undefined>,\n): Record<string, string> {\n\treturn Object.fromEntries(\n\t\tObject.entries({\n\t\t\t...(config.token ? { Authorization: `Bearer ${config.token}` } : {}),\n\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t...(config.organizationId\n\t\t\t\t? { \"X-Organization-ID\": config.organizationId }\n\t\t\t\t: {}),\n\t\t\t...(extraHeaders ?? {}),\n\t\t}).filter(\n\t\t\t(entry): entry is [string, string] =>\n\t\t\t\ttypeof entry[1] === \"string\" && entry[1].trim().length > 0,\n\t\t),\n\t);\n}\n\nexport function buildPlatformConnectHeaders(\n\tconfig: Pick<PlatformServiceConfig, \"organizationId\" | \"token\">,\n\textraHeaders?: Record<string, string | undefined>,\n): Record<string, string> {\n\treturn buildPlatformJsonHeaders(config, {\n\t\t\"Connect-Protocol-Version\": CONNECT_PROTOCOL_VERSION,\n\t\t...(extraHeaders ?? {}),\n\t});\n}\n\nexport async function postPlatformConnect(\n\tconfig: PlatformServiceConfig,\n\tpath: string,\n\tbody: Record<string, unknown>,\n\toptions: PlatformRequestOptions,\n\theaders?: Record<string, string | undefined>,\n): Promise<Response> {\n\treturn fetchDownstream(\n\t\t`${config.baseUrl}${path}`,\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\theaders: buildPlatformConnectHeaders(config, headers),\n\t\t\tbody: JSON.stringify(body),\n\t\t\tsignal: options.signal,\n\t\t},\n\t\t{\n\t\t\tserviceName: options.serviceName,\n\t\t\tfailureMode: options.failureMode,\n\t\t\ttimeoutMs: options.timeoutMs,\n\t\t\tmaxAttempts: options.maxAttempts,\n\t\t},\n\t);\n}\n"]}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/platform/client.ts"],"names":[],"mappings":"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","sourcesContent":["import { getOAuthToken } from \"../oauth/index.js\";\nimport { loadOAuthCredentials } from \"../oauth/storage.js\";\nimport {\n\ttype DownstreamFailureMode,\n\tfetchDownstream,\n} from \"../utils/downstream-http.js\";\n\nexport const CONNECT_PROTOCOL_VERSION = \"1\";\nexport const DEFAULT_PLATFORM_TIMEOUT_MS = 2_000;\nexport const DEFAULT_PLATFORM_MAX_ATTEMPTS = 2;\n\nexport interface PlatformServiceConfig {\n\tbaseUrl: string;\n\ttoken?: string;\n\torganizationId?: string;\n\tteamId?: string;\n\tworkspaceId?: string;\n\ttimeoutMs: number;\n\tmaxAttempts: number;\n}\n\nexport interface ResolvePlatformServiceConfigOptions {\n\tbaseUrlEnvVars: readonly string[];\n\ttokenEnvVars?: readonly string[];\n\torganizationEnvVars?: readonly string[];\n\tteamEnvVars?: readonly string[];\n\tworkspaceEnvVars?: readonly string[];\n\ttimeoutEnvVars?: readonly string[];\n\tmaxAttemptsEnvVars?: readonly string[];\n\tbaseUrlSuffixes?: readonly string[];\n\tdefaultTimeoutMs?: number;\n\tdefaultMaxAttempts?: number;\n\trequireBaseUrl?: boolean;\n\trequireOrganizationId?: boolean;\n\trequireToken?: boolean;\n\tallowOAuthTokenFallback?: boolean;\n}\n\nexport interface PlatformRequestOptions {\n\tserviceName: string;\n\tfailureMode: DownstreamFailureMode;\n\ttimeoutMs: number;\n\tmaxAttempts?: number;\n\tsignal?: AbortSignal;\n}\n\nconst SHARED_PLATFORM_BASE_URL_ENV_VARS = [\n\t\"MAESTRO_PLATFORM_BASE_URL\",\n\t\"MAESTRO_EVALOPS_BASE_URL\",\n\t\"EVALOPS_BASE_URL\",\n] as const;\n\nconst DEFAULT_TOKEN_ENV_VARS = [\n\t\"MAESTRO_EVALOPS_ACCESS_TOKEN\",\n\t\"EVALOPS_TOKEN\",\n] as const;\n\nconst DEFAULT_ORGANIZATION_ENV_VARS = [\n\t\"MAESTRO_EVALOPS_ORG_ID\",\n\t\"EVALOPS_ORGANIZATION_ID\",\n\t\"EVALOPS_ORG_ID\",\n\t\"MAESTRO_ENTERPRISE_ORG_ID\",\n\t\"MAESTRO_LLM_GATEWAY_ORG_ID\",\n\t\"MAESTRO_REMOTE_RUNNER_ORG_ID\",\n] as const;\n\nconst DEFAULT_TEAM_ENV_VARS = [\n\t\"MAESTRO_EVALOPS_TEAM_ID\",\n\t\"MAESTRO_LLM_GATEWAY_TEAM_ID\",\n] as const;\n\nexport function trimString(value: string | undefined): string | undefined {\n\tconst trimmed = value?.trim();\n\treturn trimmed ? trimmed : undefined;\n}\n\nexport function getEnvValue(names: readonly string[]): string | undefined {\n\tfor (const name of names) {\n\t\tconst value = trimString(process.env[name]);\n\t\tif (value) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nexport function parsePositiveInt(\n\tvalue: string | undefined,\n\tfallback: number,\n): number {\n\tconst parsed = Number.parseInt(value ?? \"\", 10);\n\treturn Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;\n}\n\nexport function normalizeBaseUrl(\n\tbaseUrl: string,\n\tsuffixes: readonly string[] = [],\n): string {\n\tlet normalized = baseUrl.trim().replace(/\\/+$/u, \"\");\n\tfor (const suffix of suffixes) {\n\t\tif (normalized.endsWith(suffix)) {\n\t\t\tnormalized = normalized.slice(0, -suffix.length).replace(/\\/+$/u, \"\");\n\t\t}\n\t}\n\treturn normalized;\n}\n\nexport function resolveOrganizationId(\n\tenvVars: readonly string[] = DEFAULT_ORGANIZATION_ENV_VARS,\n): string | undefined {\n\tconst envOrgId = getEnvValue(envVars);\n\tif (envOrgId) {\n\t\treturn envOrgId;\n\t}\n\tconst stored = loadOAuthCredentials(\"evalops\")?.metadata?.organizationId;\n\treturn typeof stored === \"string\" ? trimString(stored) : undefined;\n}\n\nexport function resolveTeamId(\n\tenvVars: readonly string[] = DEFAULT_TEAM_ENV_VARS,\n): string | undefined {\n\treturn getEnvValue(envVars);\n}\n\nexport function resolveWorkspaceId(\n\tenvVars: readonly string[] = DEFAULT_ORGANIZATION_ENV_VARS,\n): string | undefined {\n\treturn getEnvValue(envVars) ?? resolveOrganizationId();\n}\n\nexport function resolveConfiguredToken(\n\tenvVars: readonly string[] = DEFAULT_TOKEN_ENV_VARS,\n): string | undefined {\n\tconst envToken = getEnvValue(envVars);\n\tif (envToken) {\n\t\treturn envToken;\n\t}\n\tconst stored = loadOAuthCredentials(\"evalops\")?.access;\n\treturn typeof stored === \"string\" ? trimString(stored) : undefined;\n}\n\nexport async function resolvePlatformToken(\n\tenvVars: readonly string[] = DEFAULT_TOKEN_ENV_VARS,\n): Promise<string | undefined> {\n\treturn getEnvValue(envVars) ?? (await getOAuthToken(\"evalops\")) ?? undefined;\n}\n\nexport async function resolvePlatformServiceConfig(\n\toptions: ResolvePlatformServiceConfigOptions,\n): Promise<PlatformServiceConfig | null> {\n\tconst baseUrl = getEnvValue([\n\t\t...options.baseUrlEnvVars,\n\t\t...SHARED_PLATFORM_BASE_URL_ENV_VARS,\n\t]);\n\tif (!baseUrl && options.requireBaseUrl !== false) {\n\t\treturn null;\n\t}\n\n\tconst organizationId = resolveOrganizationId(options.organizationEnvVars);\n\tif (!organizationId && options.requireOrganizationId !== false) {\n\t\treturn null;\n\t}\n\n\tconst token =\n\t\toptions.allowOAuthTokenFallback === false\n\t\t\t? getEnvValue(options.tokenEnvVars ?? [])\n\t\t\t: await resolvePlatformToken(options.tokenEnvVars);\n\tif (!token && options.requireToken !== false) {\n\t\treturn null;\n\t}\n\n\tconst workspaceId = options.workspaceEnvVars\n\t\t? resolveWorkspaceId(options.workspaceEnvVars)\n\t\t: organizationId;\n\n\treturn {\n\t\tbaseUrl: normalizeBaseUrl(baseUrl ?? \"\", options.baseUrlSuffixes),\n\t\t...(token ? { token } : {}),\n\t\t...(organizationId ? { organizationId } : {}),\n\t\tteamId: resolveTeamId(options.teamEnvVars),\n\t\t...(workspaceId ? { workspaceId } : {}),\n\t\ttimeoutMs: parsePositiveInt(\n\t\t\tgetEnvValue(options.timeoutEnvVars ?? []),\n\t\t\toptions.defaultTimeoutMs ?? DEFAULT_PLATFORM_TIMEOUT_MS,\n\t\t),\n\t\tmaxAttempts: parsePositiveInt(\n\t\t\tgetEnvValue(options.maxAttemptsEnvVars ?? []),\n\t\t\toptions.defaultMaxAttempts ?? DEFAULT_PLATFORM_MAX_ATTEMPTS,\n\t\t),\n\t};\n}\n\nexport function buildPlatformJsonHeaders(\n\tconfig: Pick<PlatformServiceConfig, \"organizationId\" | \"token\">,\n\textraHeaders?: Record<string, string | undefined>,\n): Record<string, string> {\n\treturn Object.fromEntries(\n\t\tObject.entries({\n\t\t\t...(config.token ? { Authorization: `Bearer ${config.token}` } : {}),\n\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t...(config.organizationId\n\t\t\t\t? { \"X-Organization-ID\": config.organizationId }\n\t\t\t\t: {}),\n\t\t\t...(extraHeaders ?? {}),\n\t\t}).filter(\n\t\t\t(entry): entry is [string, string] =>\n\t\t\t\ttypeof entry[1] === \"string\" && entry[1].trim().length > 0,\n\t\t),\n\t);\n}\n\nexport function buildPlatformConnectHeaders(\n\tconfig: Pick<PlatformServiceConfig, \"organizationId\" | \"token\">,\n\textraHeaders?: Record<string, string | undefined>,\n): Record<string, string> {\n\treturn buildPlatformJsonHeaders(config, {\n\t\t\"Connect-Protocol-Version\": CONNECT_PROTOCOL_VERSION,\n\t\t...(extraHeaders ?? {}),\n\t});\n}\n\nexport async function postPlatformConnect(\n\tconfig: PlatformServiceConfig,\n\tpath: string,\n\tbody: Record<string, unknown>,\n\toptions: PlatformRequestOptions,\n\theaders?: Record<string, string | undefined>,\n): Promise<Response> {\n\treturn fetchDownstream(\n\t\t`${config.baseUrl}${path}`,\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\theaders: buildPlatformConnectHeaders(config, headers),\n\t\t\tbody: JSON.stringify(body),\n\t\t\tsignal: options.signal,\n\t\t},\n\t\t{\n\t\t\tserviceName: options.serviceName,\n\t\t\tfailureMode: options.failureMode,\n\t\t\ttimeoutMs: options.timeoutMs,\n\t\t\tmaxAttempts: options.maxAttempts,\n\t\t},\n\t);\n}\n"]}
package/dist/version.json CHANGED
@@ -1,4 +1,4 @@
1
1
  {
2
- "version": "0.10.17",
3
- "notes": "Maestro by EvalOps - Deterministic coding agent with TUI/CLI and Web UI for AI-assisted development v0.10.17 is now available."
2
+ "version": "0.10.18",
3
+ "notes": "Maestro by EvalOps - Deterministic coding agent with TUI/CLI and Web UI for AI-assisted development v0.10.18 is now available."
4
4
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@evalops/contracts",
3
- "version": "0.10.17",
3
+ "version": "0.10.18",
4
4
  "description": "Shared Maestro contracts for frontend/backend integration",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@evalops/tui",
3
- "version": "0.10.17",
3
+ "version": "0.10.18",
4
4
  "description": "Terminal UI library with differential rendering for Maestro",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@evalops/maestro",
3
3
  "description": "Maestro by EvalOps - Deterministic coding agent with TUI/CLI and Web UI for AI-assisted development",
4
- "version": "0.10.17",
4
+ "version": "0.10.18",
5
5
  "private": false,
6
6
  "type": "module",
7
7
  "workspaces": [
@@ -127,8 +127,8 @@
127
127
  "@aws-sdk/client-bedrock-runtime": "^3.1020.0",
128
128
  "@crosscopy/clipboard": "^0.2.8",
129
129
  "@daytonaio/sdk": "^0.155.0",
130
- "@evalops/contracts": "^0.10.17",
131
- "@evalops/tui": "^0.10.17",
130
+ "@evalops/contracts": "^0.10.18",
131
+ "@evalops/tui": "^0.10.18",
132
132
  "@modelcontextprotocol/sdk": "^1.29.0",
133
133
  "@opentelemetry/api": "^1.9.1",
134
134
  "@opentelemetry/auto-instrumentations-node": "^0.74.0",