@evalops/maestro 0.10.11 → 0.10.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/dist/agent/transport/tool-execution-bridge.d.ts.map +1 -1
  2. package/dist/agent/transport/tool-execution-bridge.js +4 -0
  3. package/dist/agent/transport/tool-execution-bridge.js.map +1 -1
  4. package/dist/audit/logger.d.ts +1 -1
  5. package/dist/cli/args.d.ts.map +1 -1
  6. package/dist/cli/args.js +5 -1
  7. package/dist/cli/args.js.map +1 -1
  8. package/dist/cli/commands/config.d.ts.map +1 -1
  9. package/dist/cli/commands/config.js +3 -2
  10. package/dist/cli/commands/config.js.map +1 -1
  11. package/dist/cli/commands/evalops.d.ts +2 -1
  12. package/dist/cli/commands/evalops.d.ts.map +1 -1
  13. package/dist/cli/commands/evalops.js +9 -29
  14. package/dist/cli/commands/evalops.js.map +1 -1
  15. package/dist/cli/commands/init.d.ts +3 -1
  16. package/dist/cli/commands/init.d.ts.map +1 -1
  17. package/dist/cli/commands/init.js +61 -21
  18. package/dist/cli/commands/init.js.map +1 -1
  19. package/dist/cli/commands/status.d.ts +2 -0
  20. package/dist/cli/commands/status.d.ts.map +1 -0
  21. package/dist/cli/commands/status.js +11 -0
  22. package/dist/cli/commands/status.js.map +1 -0
  23. package/dist/cli/help.d.ts.map +1 -1
  24. package/dist/cli/help.js +3 -0
  25. package/dist/cli/help.js.map +1 -1
  26. package/dist/cli-tui/tui-renderer/attachment-controller.d.ts.map +1 -1
  27. package/dist/cli-tui/tui-renderer/attachment-controller.js +18 -1
  28. package/dist/cli-tui/tui-renderer/attachment-controller.js.map +1 -1
  29. package/dist/cli.js +2316 -1716
  30. package/dist/evalops/agent-bootstrap.d.ts +9 -0
  31. package/dist/evalops/agent-bootstrap.d.ts.map +1 -1
  32. package/dist/evalops/agent-bootstrap.js +254 -36
  33. package/dist/evalops/agent-bootstrap.js.map +1 -1
  34. package/dist/evalops/managed-context.d.ts +34 -0
  35. package/dist/evalops/managed-context.d.ts.map +1 -0
  36. package/dist/evalops/managed-context.js +183 -0
  37. package/dist/evalops/managed-context.js.map +1 -0
  38. package/dist/main.d.ts.map +1 -1
  39. package/dist/main.js +6 -1
  40. package/dist/main.js.map +1 -1
  41. package/dist/memory/auto-extraction.d.ts.map +1 -1
  42. package/dist/memory/auto-extraction.js +58 -0
  43. package/dist/memory/auto-extraction.js.map +1 -1
  44. package/dist/memory/backend.d.ts +1 -0
  45. package/dist/memory/backend.d.ts.map +1 -1
  46. package/dist/memory/backend.js.map +1 -1
  47. package/dist/memory/service-client.d.ts +1 -0
  48. package/dist/memory/service-client.d.ts.map +1 -1
  49. package/dist/memory/service-client.js +32 -8
  50. package/dist/memory/service-client.js.map +1 -1
  51. package/dist/models/builtin.d.ts.map +1 -1
  52. package/dist/models/builtin.js +2 -3
  53. package/dist/models/builtin.js.map +1 -1
  54. package/dist/oauth/evalops.d.ts.map +1 -1
  55. package/dist/oauth/evalops.js +2 -1
  56. package/dist/oauth/evalops.js.map +1 -1
  57. package/dist/oauth/storage.d.ts +1 -0
  58. package/dist/oauth/storage.d.ts.map +1 -1
  59. package/dist/oauth/storage.js +6 -0
  60. package/dist/oauth/storage.js.map +1 -1
  61. package/dist/platform/client.d.ts.map +1 -1
  62. package/dist/platform/client.js +3 -0
  63. package/dist/platform/client.js.map +1 -1
  64. package/dist/platform/core-services.d.ts +1 -0
  65. package/dist/platform/core-services.d.ts.map +1 -1
  66. package/dist/platform/core-services.js +1 -0
  67. package/dist/platform/core-services.js.map +1 -1
  68. package/dist/platform/tool-execution-client.d.ts.map +1 -1
  69. package/dist/platform/tool-execution-client.js +3 -0
  70. package/dist/platform/tool-execution-client.js.map +1 -1
  71. package/dist/providers/auth.d.ts +1 -1
  72. package/dist/providers/auth.d.ts.map +1 -1
  73. package/dist/providers/auth.js +30 -2
  74. package/dist/providers/auth.js.map +1 -1
  75. package/dist/providers/evalops-managed.d.ts +1 -0
  76. package/dist/providers/evalops-managed.d.ts.map +1 -1
  77. package/dist/providers/evalops-managed.js +1 -0
  78. package/dist/providers/evalops-managed.js.map +1 -1
  79. package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
  80. package/dist/telemetry/maestro-event-bus.js +16 -47
  81. package/dist/telemetry/maestro-event-bus.js.map +1 -1
  82. package/dist/telemetry.d.ts.map +1 -1
  83. package/dist/telemetry.js +98 -2
  84. package/dist/telemetry.js.map +1 -1
  85. package/dist/version.json +2 -2
  86. package/node_modules/@evalops/contracts/package.json +1 -1
  87. package/node_modules/@evalops/tui/package.json +1 -1
  88. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport chalk from \"chalk\";\nimport { PATHS } from \"../../config/constants.js\";\nimport {\n\ttype ConfigInspection,\n\ttype ConfigValidationResult,\n\tgetConfigHierarchy,\n\tinspectConfig,\n\tvalidateConfig,\n} from \"../../models/registry.js\";\nimport {\n\tbadge,\n\tmuted,\n\tsectionHeading,\n\tseparator as themedSeparator,\n} from \"../../style/theme.js\";\n// Use the UMD build to avoid ESM subpath resolution issues in some environments\nimport { parseJsonc } from \"../../utils/jsonc-umd.js\";\nimport { getHomeDir } from \"../../utils/path-expansion.js\";\n\nimport type { Api } from \"../../agent/types.js\";\nimport { getEnvVarsForProvider } from \"../../providers/api-keys.js\";\nimport {\n\tgetEvalOpsManagedProviderDefinitions,\n\tisEvalOpsManagedProvider,\n} from \"../../providers/evalops-managed.js\";\n\ntype ProviderPreset = {\n\tid: string;\n\tname: string;\n\tapi: Api;\n\tdefaultModel: string;\n\tbaseUrl?: string;\n\trequiresApiKey: boolean;\n\tapiKeyEnv?: string;\n\tnote?: string;\n\tcontextWindow?: number;\n\tmaxTokens?: number;\n};\n\nfunction getManagedGatewayBaseUrl(): string {\n\treturn (\n\t\tprocess.env.MAESTRO_LLM_GATEWAY_URL?.trim() || \"http://127.0.0.1:8081/v1\"\n\t);\n}\n\nfunction getManagedGatewayProviderPresets(): ProviderPreset[] {\n\treturn getEvalOpsManagedProviderDefinitions().map((definition) => ({\n\t\tid: definition.id,\n\t\tname: definition.name,\n\t\tapi: definition.api,\n\t\tdefaultModel: definition.defaultModel,\n\t\tbaseUrl: getManagedGatewayBaseUrl(),\n\t\trequiresApiKey: false,\n\t\tnote: definition.note,\n\t}));\n}\n\nexport function getProviderPresets(): ProviderPreset[] {\n\treturn [\n\t\t{\n\t\t\tid: \"anthropic\",\n\t\t\tname: \"Anthropic (Claude)\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tdefaultModel: \"claude-opus-4-6\",\n\t\t\tbaseUrl: \"https://api.anthropic.com\",\n\t\t\trequiresApiKey: true,\n\t\t\tapiKeyEnv: \"ANTHROPIC_API_KEY\",\n\t\t\tcontextWindow: 1000000,\n\t\t\tmaxTokens: 128000,\n\t\t},\n\t\t{\n\t\t\tid: \"openai\",\n\t\t\tname: \"OpenAI (Responses)\",\n\t\t\tapi: \"openai-responses\",\n\t\t\tdefaultModel: \"gpt-4o-mini\",\n\t\t\tbaseUrl: \"https://api.openai.com/v1\",\n\t\t\trequiresApiKey: true,\n\t\t\tapiKeyEnv: \"OPENAI_API_KEY\",\n\t\t},\n\t\t{\n\t\t\tid: \"groq\",\n\t\t\tname: \"Groq\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tdefaultModel: \"llama-3.3-70b-versatile\",\n\t\t\tbaseUrl: \"https://api.groq.com/openai/v1\",\n\t\t\trequiresApiKey: true,\n\t\t\tapiKeyEnv: \"GROQ_API_KEY\",\n\t\t},\n\t\t{\n\t\t\tid: \"openrouter\",\n\t\t\tname: \"OpenRouter\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tdefaultModel: \"openai/o4-mini\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\trequiresApiKey: true,\n\t\t\tapiKeyEnv: \"OPENROUTER_API_KEY\",\n\t\t\tnote: \"Supports many upstreams; accepts OpenAI-compatible keys\",\n\t\t},\n\t\t...getManagedGatewayProviderPresets(),\n\t\t{\n\t\t\tid: \"google-gemini\",\n\t\t\tname: \"Google Gemini API\",\n\t\t\tapi: \"google-generative-ai\",\n\t\t\tdefaultModel: \"gemini-2.0-flash\",\n\t\t\tbaseUrl: \"https://generativelanguage.googleapis.com/v1beta\",\n\t\t\trequiresApiKey: true,\n\t\t\tapiKeyEnv: \"GEMINI_API_KEY\",\n\t\t},\n\t\t{\n\t\t\tid: \"google-gemini-cli\",\n\t\t\tname: \"Google Gemini CLI (Cloud Code Assist)\",\n\t\t\tapi: \"google-gemini-cli\",\n\t\t\tdefaultModel: \"gemini-2.5-flash\",\n\t\t\tbaseUrl: \"https://cloudcode-pa.googleapis.com\",\n\t\t\trequiresApiKey: false,\n\t\t\tnote: \"Requires OAuth via /login (token includes projectId)\",\n\t\t},\n\t\t{\n\t\t\tid: \"google-antigravity\",\n\t\t\tname: \"Google Antigravity (Sandbox)\",\n\t\t\tapi: \"google-gemini-cli\",\n\t\t\tdefaultModel: \"gemini-3-pro-high\",\n\t\t\tbaseUrl: \"https://daily-cloudcode-pa.sandbox.googleapis.com\",\n\t\t\trequiresApiKey: false,\n\t\t\tnote: \"Requires OAuth via /login (token includes projectId)\",\n\t\t},\n\t\t{\n\t\t\tid: \"vertex-ai\",\n\t\t\tname: \"Google Vertex AI (Claude/Gemini)\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tdefaultModel: \"claude-3-7-sonnet@20250219\",\n\t\t\tbaseUrl: \"https://us-central1-aiplatform.googleapis.com/v1beta1\",\n\t\t\trequiresApiKey: false,\n\t\t\tnote: \"Uses ADC; set GOOGLE_APPLICATION_CREDENTIALS or gcloud login\",\n\t\t},\n\t\t{\n\t\t\tid: \"bedrock\",\n\t\t\tname: \"AWS Bedrock\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tdefaultModel: \"anthropic.claude-3-7-sonnet-20250219-v1:0\",\n\t\t\trequiresApiKey: false,\n\t\t\tnote: \"Uses AWS credentials + region envs\",\n\t\t},\n\t\t{\n\t\t\tid: \"mistral\",\n\t\t\tname: \"Mistral\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tdefaultModel: \"mistral-large-latest\",\n\t\t\tbaseUrl: \"https://api.mistral.ai/v1\",\n\t\t\trequiresApiKey: true,\n\t\t\tapiKeyEnv: \"MISTRAL_API_KEY\",\n\t\t},\n\t\t{\n\t\t\tid: \"lmstudio\",\n\t\t\tname: \"LM Studio (local)\",\n\t\t\tapi: \"openai-responses\",\n\t\t\tdefaultModel: \"lmstudio/gemma-3n\",\n\t\t\tbaseUrl: \"http://127.0.0.1:1234/v1\",\n\t\t\trequiresApiKey: false,\n\t\t},\n\t\t{\n\t\t\tid: \"ollama\",\n\t\t\tname: \"Ollama (local)\",\n\t\t\tapi: \"openai-responses\",\n\t\t\tdefaultModel: \"ollama/llama3.2\",\n\t\t\tbaseUrl: \"http://localhost:11434/v1\",\n\t\t\trequiresApiKey: false,\n\t\t},\n\t];\n}\n\nexport interface ConfigShowRenderOptions {\n\thierarchy: string[];\n\thomeDir?: string;\n\tdisableColors?: boolean;\n}\n\n// Adapted from ansi-regex (MIT) to cover CSI and OSC escape sequences.\nconst ANSI_STRING_TERMINATORS = \"(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)\";\nconst ANSI_OSC_SEQUENCE = `(?:\\\\u001B\\\\][\\\\s\\\\S]*?${ANSI_STRING_TERMINATORS})`;\nconst ANSI_CSI_SEQUENCE =\n\t\"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:\\\\d{1,4}(?:[;:]\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]\";\nconst ANSI_ESCAPE_SEQUENCE = new RegExp(\n\t`${ANSI_OSC_SEQUENCE}|${ANSI_CSI_SEQUENCE}`,\n\t\"g\",\n);\n\nfunction stripAnsi(value: string): string {\n\treturn value.replace(ANSI_ESCAPE_SEQUENCE, \"\");\n}\n\nconst normalizeForCompare = (value: string): string =>\n\tprocess.platform === \"win32\" ? value.toLowerCase() : value;\n\nfunction replaceHomePrefix(path: string, homeDir: string): string {\n\tconst normalizedPath = path.replace(/\\\\/g, \"/\");\n\tconst normalizedHome = homeDir.replace(/\\\\/g, \"/\");\n\tconst pathCheck = normalizeForCompare(normalizedPath);\n\tconst homeCheck = normalizeForCompare(normalizedHome);\n\tif (pathCheck === homeCheck) {\n\t\treturn \"~\";\n\t}\n\tif (pathCheck.startsWith(`${homeCheck}/`)) {\n\t\treturn `~${normalizedPath.slice(normalizedHome.length)}`;\n\t}\n\treturn path;\n}\n\nexport function buildConfigShowSections(\n\tinspection: ConfigInspection,\n\toptions: ConfigShowRenderOptions,\n): string[] {\n\tconst homeDir = options.homeDir ?? getHomeDir();\n\tconst rel = (path: string) => replaceHomePrefix(path, homeDir);\n\tconst output: string[] = [];\n\n\toutput.push(sectionHeading(\"Configuration Inspection\"));\n\toutput.push(\"\");\n\toutput.push(badge(\"Config Sources\", undefined, \"info\"));\n\tfor (const source of inspection.sources) {\n\t\tconst status = source.exists\n\t\t\t? badge(\"present\", undefined, \"success\")\n\t\t\t: badge(\"missing\", undefined, \"warn\");\n\t\tconst mark = options.hierarchy.includes(source.path) ? \"•\" : \" \";\n\t\toutput.push(` ${mark} ${status} ${muted(rel(source.path))}`);\n\t}\n\toutput.push(\"\");\n\n\tif (inspection.providers.length > 0) {\n\t\toutput.push(\n\t\t\tbadge(`Providers (${inspection.providers.length})`, undefined, \"info\"),\n\t\t);\n\t\tfor (const provider of inspection.providers) {\n\t\t\tconst isOverrideOnly = provider.modelCount === 0;\n\t\t\tconst heading = `${chalk.cyan(provider.id)} ${muted(\n\t\t\t\t`(${provider.modelCount} models)`,\n\t\t\t)}`;\n\t\t\tconst enabledBadge = provider.enabled\n\t\t\t\t? badge(\"enabled\", undefined, \"success\")\n\t\t\t\t: badge(\"disabled\", undefined, \"warn\");\n\t\t\tconst metaBadges: string[] = [];\n\t\t\tif (isOverrideOnly) {\n\t\t\t\tmetaBadges.push(badge(\"override-only\", undefined, \"info\"));\n\t\t\t\tif (provider.apiKeySource) {\n\t\t\t\t\tmetaBadges.push(badge(\"API key\", provider.apiKeySource, \"success\"));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst keyBadge = provider.apiKeySource\n\t\t\t\t\t? badge(\"API key\", provider.apiKeySource, \"success\")\n\t\t\t\t\t: badge(\"API key missing\", undefined, \"warn\");\n\t\t\t\tmetaBadges.push(keyBadge);\n\t\t\t}\n\t\t\tmetaBadges.push(enabledBadge);\n\t\t\tconst metaLine = metaBadges.join(` ${themedSeparator()} `);\n\t\t\toutput.push(` ${heading} ${themedSeparator()} ${metaLine}`);\n\t\t\toutput.push(` ${muted(provider.name)}`);\n\t\t\toutput.push(` ${muted(`Base URL: ${provider.baseUrl}`)}`);\n\t\t\tif (provider.options && Object.keys(provider.options).length > 0) {\n\t\t\t\toutput.push(muted(` Options: ${JSON.stringify(provider.options)}`));\n\t\t\t}\n\t\t\tif (provider.models.length <= 3) {\n\t\t\t\tfor (const model of provider.models) {\n\t\t\t\t\toutput.push(muted(` • ${formatModelLabel(model)}`));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst firstModel = provider.models[0];\n\t\t\t\tconst secondModel = provider.models[1];\n\t\t\t\tif (firstModel) {\n\t\t\t\t\toutput.push(muted(` • ${formatModelLabel(firstModel)}`));\n\t\t\t\t}\n\t\t\t\tif (secondModel) {\n\t\t\t\t\toutput.push(muted(` • ${formatModelLabel(secondModel)}`));\n\t\t\t\t}\n\t\t\t\toutput.push(muted(` ... and ${provider.models.length - 2} more`));\n\t\t\t}\n\t\t\toutput.push(\"\");\n\t\t}\n\t} else {\n\t\toutput.push(`${badge(\"No providers configured\", undefined, \"warn\")}`);\n\t\toutput.push(\"\");\n\t}\n\n\tif (inspection.fileReferences.length > 0) {\n\t\toutput.push(\n\t\t\tbadge(\n\t\t\t\t`File References (${inspection.fileReferences.length})`,\n\t\t\t\tundefined,\n\t\t\t\t\"info\",\n\t\t\t),\n\t\t);\n\t\tfor (const ref of inspection.fileReferences) {\n\t\t\tconst status = ref.exists\n\t\t\t\t? badge(\"present\", undefined, \"success\")\n\t\t\t\t: badge(\"missing\", undefined, \"danger\");\n\t\t\tconst size = ref.size ? ` (${formatBytes(ref.size)})` : \"\";\n\t\t\toutput.push(` ${status} ${muted(rel(ref.path))}${muted(size)}`);\n\t\t}\n\t\toutput.push(\"\");\n\t}\n\n\tif (inspection.envVars.length > 0) {\n\t\toutput.push(\n\t\t\tbadge(\n\t\t\t\t`Environment Variables (${inspection.envVars.length})`,\n\t\t\t\tundefined,\n\t\t\t\t\"info\",\n\t\t\t),\n\t\t);\n\t\tfor (const envVar of inspection.envVars) {\n\t\t\tconst status = envVar.set\n\t\t\t\t? badge(\"set\", undefined, \"success\")\n\t\t\t\t: badge(\"missing\", undefined, \"warn\");\n\t\t\tconst value = envVar.maskedValue ? envVar.maskedValue : \"(not set)\";\n\t\t\toutput.push(` ${status} ${chalk.cyan(envVar.name)}: ${muted(value)}`);\n\t\t}\n\t\toutput.push(\"\");\n\t}\n\n\tif (options.disableColors) {\n\t\treturn output.map((line) => stripAnsi(line));\n\t}\n\treturn output;\n}\n\n/**\n * Handle `maestro config validate` command\n */\nexport async function handleConfigValidate(): Promise<void> {\n\tconsole.log(sectionHeading(\"Validating Configuration\"));\n\n\tconst result: ConfigValidationResult = validateConfig();\n\tconst homeDir = getHomeDir();\n\n\t// Show config files\n\tif (result.summary.configFiles.length > 0) {\n\t\tconsole.log(muted(\"Config Files:\"));\n\t\tfor (const file of result.summary.configFiles) {\n\t\t\tconst relPath = replaceHomePrefix(file, homeDir);\n\t\t\tconsole.log(muted(` • ${relPath}`));\n\t\t}\n\t\tconsole.log();\n\t}\n\n\t// Show errors\n\tif (result.errors.length > 0) {\n\t\tconsole.log(badge(\"[ERROR] Errors\", undefined, \"danger\"));\n\t\tfor (const error of result.errors) {\n\t\t\tconsole.log(chalk.red(` • ${error}`));\n\t\t}\n\t\tconsole.log();\n\t}\n\n\t// Show warnings\n\tif (result.warnings.length > 0) {\n\t\tconsole.log(badge(\"[WARN] Warnings\", undefined, \"warn\"));\n\t\tfor (const warning of result.warnings) {\n\t\t\tconsole.log(chalk.yellow(` • ${warning}`));\n\t\t}\n\t\tconsole.log();\n\t}\n\n\t// Show summary\n\tconsole.log(muted(\"Summary:\"));\n\tconsole.log(\n\t\tmuted(` • ${badge(\"Providers\", String(result.summary.providers))}`),\n\t);\n\tconsole.log(muted(` • ${badge(\"Models\", String(result.summary.models))}`));\n\tconsole.log(\n\t\tmuted(\n\t\t\t` • ${badge(\n\t\t\t\t\"File References\",\n\t\t\t\tString(result.summary.fileReferences.length),\n\t\t\t)}`,\n\t\t),\n\t);\n\tconsole.log(\n\t\tmuted(\n\t\t\t` • ${badge(\n\t\t\t\t\"Environment Variables\",\n\t\t\t\tString(result.summary.envVars.length),\n\t\t\t)}`,\n\t\t),\n\t);\n\tconsole.log();\n\n\t// Final verdict\n\tif (result.valid) {\n\t\tconsole.log(`${badge(\"Configuration is valid\", undefined, \"success\")}\\n`);\n\t\tprocess.exit(0);\n\t} else {\n\t\tconsole.log(`${badge(\"Configuration has errors\", undefined, \"danger\")}\\n`);\n\t\tprocess.exit(1);\n\t}\n}\n\n/**\n * Legacy renderer for `maestro config show`\n */\nfunction renderConfigShowLegacy(\n\tinspection: ConfigInspection,\n\thierarchy: string[],\n\thomeDir: string,\n): void {\n\tconsole.log(sectionHeading(\"Configuration Inspection\"));\n\n\t// Show config sources\n\tconsole.log(badge(\"Config Sources\", undefined, \"info\"));\n\tfor (const source of inspection.sources) {\n\t\tconst relPath = replaceHomePrefix(source.path, homeDir);\n\t\tconst status = source.exists\n\t\t\t? badge(\"present\", undefined, \"success\")\n\t\t\t: badge(\"missing\", undefined, \"warn\");\n\t\tconst mark = hierarchy.includes(source.path) ? \"•\" : \" \";\n\t\tconsole.log(` ${mark} ${status} ${muted(relPath)}`);\n\t}\n\tconsole.log();\n\n\t// Show providers\n\tif (inspection.providers.length > 0) {\n\t\tconsole.log(\n\t\t\tbadge(`Providers (${inspection.providers.length})`, undefined, \"info\"),\n\t\t);\n\t\tfor (const provider of inspection.providers) {\n\t\t\tconst isOverrideOnly = provider.modelCount === 0;\n\t\t\tconst heading = `${chalk.cyan(provider.id)} ${muted(\n\t\t\t\t`(${provider.modelCount} models)`,\n\t\t\t)}`;\n\t\t\tconst enabledBadge = provider.enabled\n\t\t\t\t? badge(\"enabled\", undefined, \"success\")\n\t\t\t\t: badge(\"disabled\", undefined, \"warn\");\n\t\t\tconst metaBadges: string[] = [];\n\t\t\tif (isOverrideOnly) {\n\t\t\t\tmetaBadges.push(badge(\"override-only\", undefined, \"info\"));\n\t\t\t\tif (provider.apiKeySource) {\n\t\t\t\t\tmetaBadges.push(badge(\"API key\", provider.apiKeySource, \"success\"));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst keyBadge = provider.apiKeySource\n\t\t\t\t\t? badge(\"API key\", provider.apiKeySource, \"success\")\n\t\t\t\t\t: badge(\"API key missing\", undefined, \"warn\");\n\t\t\t\tmetaBadges.push(keyBadge);\n\t\t\t}\n\t\t\tmetaBadges.push(enabledBadge);\n\t\t\tconst metaLine = metaBadges.join(` ${themedSeparator()} `);\n\n\t\t\tconsole.log(` ${heading} ${themedSeparator()} ${metaLine}`);\n\t\t\tconsole.log(` ${muted(provider.name)}`);\n\t\t\tconsole.log(` ${muted(`Base URL: ${provider.baseUrl}`)}`);\n\t\t\tif (provider.options && Object.keys(provider.options).length > 0) {\n\t\t\t\tconsole.log(muted(` Options: ${JSON.stringify(provider.options)}`));\n\t\t\t}\n\n\t\t\t// Show models\n\t\t\tif (provider.models.length <= 3) {\n\t\t\t\tfor (const model of provider.models) {\n\t\t\t\t\tconsole.log(muted(` • ${formatModelLabel(model)}`));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst firstModel = provider.models[0];\n\t\t\t\tconst secondModel = provider.models[1];\n\t\t\t\tif (firstModel) {\n\t\t\t\t\tconsole.log(muted(` • ${formatModelLabel(firstModel)}`));\n\t\t\t\t}\n\t\t\t\tif (secondModel) {\n\t\t\t\t\tconsole.log(muted(` • ${formatModelLabel(secondModel)}`));\n\t\t\t\t}\n\t\t\t\tconsole.log(muted(` ... and ${provider.models.length - 2} more`));\n\t\t\t}\n\t\t\tconsole.log();\n\t\t}\n\t} else {\n\t\tconsole.log(`${badge(\"No providers configured\", undefined, \"warn\")}\\n`);\n\t}\n\n\t// Show file references\n\tif (inspection.fileReferences.length > 0) {\n\t\tconsole.log(\n\t\t\tbadge(\n\t\t\t\t`File References (${inspection.fileReferences.length})`,\n\t\t\t\tundefined,\n\t\t\t\t\"info\",\n\t\t\t),\n\t\t);\n\t\tfor (const ref of inspection.fileReferences) {\n\t\t\tconst relPath = replaceHomePrefix(ref.path, homeDir);\n\t\t\tconst status = ref.exists\n\t\t\t\t? badge(\"present\", undefined, \"success\")\n\t\t\t\t: badge(\"missing\", undefined, \"danger\");\n\t\t\tconst size = ref.size ? ` (${formatBytes(ref.size)})` : \"\";\n\t\t\tconsole.log(` ${status} ${muted(relPath)}${muted(size)}`);\n\t\t}\n\t\tconsole.log();\n\t}\n\n\t// Show environment variables\n\tif (inspection.envVars.length > 0) {\n\t\tconsole.log(\n\t\t\tbadge(\n\t\t\t\t`Environment Variables (${inspection.envVars.length})`,\n\t\t\t\tundefined,\n\t\t\t\t\"info\",\n\t\t\t),\n\t\t);\n\t\tfor (const envVar of inspection.envVars) {\n\t\t\tconst status = envVar.set\n\t\t\t\t? badge(\"set\", undefined, \"success\")\n\t\t\t\t: badge(\"missing\", undefined, \"warn\");\n\t\t\tconst value = envVar.maskedValue ? envVar.maskedValue : \"(not set)\";\n\t\t\tconsole.log(` ${status} ${chalk.cyan(envVar.name)}: ${muted(value)}`);\n\t\t}\n\t\tconsole.log();\n\t}\n}\n\n/**\n * Handle `maestro config show` command\n */\nexport async function handleConfigShow(): Promise<void> {\n\tconst inspection: ConfigInspection = inspectConfig();\n\tconst hierarchy = getConfigHierarchy();\n\tconst homeDir = getHomeDir();\n\tconst layoutPref = (\n\t\tprocess.env.MAESTRO_CONFIG_SHOW_LAYOUT ?? \"v2\"\n\t).toLowerCase();\n\n\tif (layoutPref === \"legacy\") {\n\t\trenderConfigShowLegacy(inspection, hierarchy, homeDir);\n\t} else {\n\t\tconst lines = buildConfigShowSections(inspection, {\n\t\t\thierarchy,\n\t\t\thomeDir,\n\t\t\tdisableColors: !process.stdout.isTTY,\n\t\t});\n\t\tfor (const line of lines) {\n\t\t\tconsole.log(line);\n\t\t}\n\t}\n\n\tprocess.exit(0);\n}\n\n/**\n * Handle `maestro config init` command\n */\nexport async function handleConfigInit(): Promise<void> {\n\tconsole.log(sectionHeading(\"Initialize Maestro Configuration\"));\n\n\tconst readline = await import(\"node:readline/promises\");\n\tconst rl = readline.createInterface({\n\t\tinput: process.stdin,\n\t\toutput: process.stdout,\n\t});\n\n\ttry {\n\t\tconst providerPresets = getProviderPresets();\n\n\t\t// Determine config location\n\t\tconst configDir = join(process.cwd(), \".maestro\");\n\t\tconst configPath = join(configDir, \"config.json\");\n\t\tconst promptsDir = join(configDir, \"prompts\");\n\n\t\t// Check if config already exists\n\t\tif (existsSync(configPath)) {\n\t\t\tconst overwrite = await rl.question(\n\t\t\t\tchalk.yellow(\n\t\t\t\t\t`Config already exists at ${configPath}. Overwrite? (y/N): `,\n\t\t\t\t),\n\t\t\t);\n\t\t\tif (overwrite.toLowerCase() !== \"y\") {\n\t\t\t\tconsole.log(muted(\"\\nCancelled.\"));\n\t\t\t\trl.close();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// Optional flag: --preset <id> to skip menu\n\t\tconst args = process.argv.slice(2);\n\t\tconst presetFlagIndex = args.findIndex(\n\t\t\t(arg) => arg === \"--preset\" || arg === \"-p\",\n\t\t);\n\t\tconst presetId =\n\t\t\tpresetFlagIndex >= 0 ? (args[presetFlagIndex + 1] ?? \"\") : \"\";\n\n\t\t// Step 1: Choose provider\n\t\tconsole.log(`\\n${badge(\"1. Choose your provider\", undefined, \"info\")}`);\n\t\tproviderPresets.forEach((preset, idx) => {\n\t\t\tconst note = preset.note ? chalk.dim(` — ${preset.note}`) : \"\";\n\t\t\tconsole.log(` ${idx + 1}) ${preset.name}${note}`);\n\t\t});\n\n\t\tlet preset: ProviderPreset | undefined;\n\t\tif (presetId) {\n\t\t\tconst found = providerPresets.find(\n\t\t\t\t(p) => p.id.toLowerCase() === presetId.toLowerCase(),\n\t\t\t);\n\t\t\tif (!found) {\n\t\t\t\tconsole.log(\n\t\t\t\t\tchalk.yellow(\n\t\t\t\t\t\t`\\nUnknown preset \"${presetId}\", falling back to menu selection.`,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpreset = found;\n\t\t\t\tconsole.log(chalk.green(`\\nUsing preset: ${preset.name}`));\n\t\t\t}\n\t\t}\n\n\t\tif (!preset) {\n\t\t\tconst providerChoice = await rl.question(\n\t\t\t\tchalk.cyan(`\\nProvider (1-${providerPresets.length}): `),\n\t\t\t);\n\n\t\t\tconst presetIndex =\n\t\t\t\tNumber.parseInt(providerChoice.trim(), 10) - 1 >= 0 &&\n\t\t\t\tNumber.parseInt(providerChoice.trim(), 10) - 1 < providerPresets.length\n\t\t\t\t\t? Number.parseInt(providerChoice.trim(), 10) - 1\n\t\t\t\t\t: 0;\n\t\t\tpreset = providerPresets[presetIndex] ?? providerPresets[0];\n\t\t}\n\n\t\t// At this point preset is guaranteed to be defined because providerPresets is non-empty\n\t\tif (!preset) {\n\t\t\tthrow new Error(\"No provider presets available\");\n\t\t}\n\n\t\tconst {\n\t\t\tid: providerId,\n\t\t\tname: providerName,\n\t\t\tbaseUrl,\n\t\t\tapi: apiType,\n\t\t} = preset;\n\t\tconst { defaultModel } = preset;\n\t\tconst requiresApiKey = preset.requiresApiKey;\n\n\t\tlet useEnv = true;\n\t\tlet apiKeyField: { apiKeyEnv?: string; apiKey?: string } = {};\n\t\tif (requiresApiKey) {\n\t\t\tconsole.log(\n\t\t\t\t`\\n${badge(\n\t\t\t\t\t\"2. How would you like to provide your API key?\",\n\t\t\t\t\tundefined,\n\t\t\t\t\t\"info\",\n\t\t\t\t)}`,\n\t\t\t);\n\t\t\tconsole.log(\" 1) Environment variable (recommended)\");\n\t\t\tconsole.log(\" 2) Direct in config (not recommended)\");\n\n\t\t\tconst keyChoice = await rl.question(chalk.cyan(\"\\nChoice (1-2): \"));\n\t\t\tuseEnv = keyChoice.trim() !== \"2\";\n\n\t\t\tif (useEnv) {\n\t\t\t\tconst fallbackEnv =\n\t\t\t\t\tgetEnvVarsForProvider(providerId)[0] ??\n\t\t\t\t\t`${providerId.toUpperCase().replace(/[^A-Z0-9]/g, \"_\")}_API_KEY`;\n\t\t\t\tconst envVarName = preset.apiKeyEnv ?? fallbackEnv;\n\t\t\t\tapiKeyField = { apiKeyEnv: envVarName };\n\t\t\t\tconsole.log(chalk.dim(`\\nUsing environment variable: ${envVarName}`));\n\t\t\t} else {\n\t\t\t\tconst apiKey = await rl.question(chalk.cyan(\"\\nEnter API key: \"));\n\t\t\t\tapiKeyField = { apiKey: apiKey.trim() };\n\t\t\t}\n\t\t} else {\n\t\t\tuseEnv = false;\n\t\t\tconst noKeyMessage = isEvalOpsManagedProvider(providerId)\n\t\t\t\t? \"\\nManaged gateway preset does not use a local API key. Run maestro evalops login after setup.\"\n\t\t\t\t: \"\\nLocal providers do not require API keys. Skipping step.\";\n\t\t\tconsole.log(chalk.dim(noKeyMessage));\n\t\t}\n\n\t\t// Step 3: Use file references for prompts\n\t\tconsole.log(\n\t\t\t`\\n${badge(\n\t\t\t\t\"3. Would you like to use file references for prompts?\",\n\t\t\t\tundefined,\n\t\t\t\t\"info\",\n\t\t\t)}`,\n\t\t);\n\t\tconsole.log(\" This creates a prompts/ folder for better organization.\");\n\n\t\tconst useFiles = await rl.question(\n\t\t\tchalk.cyan(\"\\nUse file references? (Y/n): \"),\n\t\t);\n\t\tconst createPrompts = useFiles.toLowerCase() !== \"n\";\n\n\t\t// Create directories\n\t\tmkdirSync(configDir, { recursive: true });\n\t\tif (createPrompts) {\n\t\t\tmkdirSync(promptsDir, { recursive: true });\n\t\t}\n\n\t\t// Create config\n\t\tconst config: LocalConfigFile = {\n\t\t\t$schema: \"https://composer-cli.dev/config.schema.json\",\n\t\t\tproviders: [\n\t\t\t\t{\n\t\t\t\t\tid: providerId,\n\t\t\t\t\tname: providerName,\n\t\t\t\t\t...(baseUrl && { baseUrl }),\n\t\t\t\t\tapi: apiType,\n\t\t\t\t\t...apiKeyField,\n\t\t\t\t\tmodels: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: defaultModel,\n\t\t\t\t\t\t\tname: createPrompts\n\t\t\t\t\t\t\t\t? \"{file:./prompts/system.md}\"\n\t\t\t\t\t\t\t\t: \"Default assistant\",\n\t\t\t\t\t\t\tcontextWindow: preset?.contextWindow ?? 200000,\n\t\t\t\t\t\t\tmaxTokens: preset?.maxTokens ?? 8192,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\n\t\t// Write config\n\t\twriteFileSync(configPath, JSON.stringify(config, null, 2));\n\t\tconsole.log(`\\n${badge(\"Created config\", configPath, \"success\")}`);\n\n\t\t// Create example prompt file\n\t\tif (createPrompts) {\n\t\t\tconst systemPromptPath = join(promptsDir, \"system.md\");\n\t\t\tconst examplePrompt = `# System Prompt\n\nYou are a helpful AI coding assistant.\n\n## Guidelines\n\n- Write clean, maintainable code\n- Follow best practices\n- Provide clear explanations\n- Test your suggestions\n\n## Style\n\n- Be concise but thorough\n- Use examples when helpful\n- Ask clarifying questions when needed\n`;\n\t\t\twriteFileSync(systemPromptPath, examplePrompt);\n\t\t\tconsole.log(badge(\"Created prompt\", systemPromptPath, \"success\"));\n\t\t}\n\n\t\t// Create .env.example if using environment variables\n\t\tif (useEnv) {\n\t\t\tconst envExamplePath = join(process.cwd(), \".env.example\");\n\t\t\tconst envVarName = apiKeyField.apiKeyEnv ?? \"\";\n\t\t\tconst envContent = existsSync(envExamplePath)\n\t\t\t\t? `\\n# Added by maestro init\\n${envVarName}=your-api-key-here\\n`\n\t\t\t\t: `# Maestro Configuration\\n${envVarName}=your-api-key-here\\n`;\n\n\t\t\tif (existsSync(envExamplePath)) {\n\t\t\t\tconst fs = await import(\"node:fs/promises\");\n\t\t\t\tawait fs.appendFile(envExamplePath, envContent);\n\t\t\t} else {\n\t\t\t\twriteFileSync(envExamplePath, envContent);\n\t\t\t}\n\t\t\tconsole.log(badge(\"Updated .env.example\", undefined, \"success\"));\n\t\t}\n\n\t\t// Show next steps\n\t\tconsole.log(sectionHeading(\"Configuration initialized successfully!\"));\n\t\tconsole.log(muted(\"Next steps:\"));\n\n\t\tif (useEnv) {\n\t\t\tconst envVarName = apiKeyField.apiKeyEnv ?? \"\";\n\t\t\tconsole.log(muted(` 1. Set ${envVarName} in your environment`));\n\t\t}\n\t\tif (createPrompts) {\n\t\t\tconsole.log(muted(\" 2. Edit .maestro/prompts/system.md\"));\n\t\t}\n\t\tconsole.log(muted(\" 3. Run: maestro models list\"));\n\t\tconsole.log(muted(' 4. Start using: maestro \"your prompt\"\\n'));\n\n\t\trl.close();\n\t} catch (error) {\n\t\trl.close();\n\t\tthrow error;\n\t}\n}\n\ntype LocalProviderTemplate = {\n\tid: string;\n\tname: string;\n\tbaseUrl: string;\n\tapi: string;\n\tmodel: {\n\t\tid: string;\n\t\tname: string;\n\t\tcontextWindow: number;\n\t\tmaxTokens: number;\n\t};\n};\n\nconst LOCAL_PROVIDER_TEMPLATES: Record<string, LocalProviderTemplate> = {\n\tlmstudio: {\n\t\tid: \"lmstudio\",\n\t\tname: \"LM Studio (local)\",\n\t\tbaseUrl: \"http://127.0.0.1:1234/v1\",\n\t\tapi: \"openai-responses\",\n\t\tmodel: {\n\t\t\tid: \"lmstudio/gemma-3n\",\n\t\t\tname: \"Gemma 3n (local)\",\n\t\t\tcontextWindow: 200_000,\n\t\t\tmaxTokens: 8192,\n\t\t},\n\t},\n\tollama: {\n\t\tid: \"ollama\",\n\t\tname: \"Ollama (local)\",\n\t\tbaseUrl: \"http://localhost:11434/v1\",\n\t\tapi: \"openai-responses\",\n\t\tmodel: {\n\t\t\tid: \"ollama/llama3.1\",\n\t\t\tname: \"Llama 3.1 (local)\",\n\t\t\tcontextWindow: 128_000,\n\t\t\tmaxTokens: 8192,\n\t\t},\n\t},\n};\n\ninterface LocalConfigFile {\n\t$schema?: string;\n\tproviders?: Array<{\n\t\tid: string;\n\t\tname: string;\n\t\tapi: string;\n\t\tbaseUrl?: string;\n\t\tmodels: Array<{\n\t\t\tid: string;\n\t\t\tname: string;\n\t\t\tcontextWindow: number;\n\t\t\tmaxTokens: number;\n\t\t\tinput?: Array<\"text\" | \"image\">;\n\t\t}>;\n\t\toptions?: Record<string, unknown>;\n\t}>;\n}\n\nfunction loadLocalConfig(path: string): LocalConfigFile {\n\tif (!existsSync(path)) {\n\t\treturn {\n\t\t\t$schema: \"https://composer-cli.dev/config.schema.json\",\n\t\t\tproviders: [],\n\t\t};\n\t}\n\tconst raw = readFileSync(path, \"utf-8\");\n\ttry {\n\t\tconst parsed = parseJsonc(raw, [], {\n\t\t\tallowTrailingComma: true,\n\t\t\tdisallowComments: false,\n\t\t});\n\t\tif (!parsed || typeof parsed !== \"object\") {\n\t\t\treturn {\n\t\t\t\t$schema: \"https://composer-cli.dev/config.schema.json\",\n\t\t\t\tproviders: [],\n\t\t\t};\n\t\t}\n\t\treturn parsed as LocalConfigFile;\n\t} catch (error) {\n\t\tthrow new Error(\n\t\t\t`Failed to parse ${path}: ${error instanceof Error ? error.message : String(error)}`,\n\t\t);\n\t}\n}\n\nfunction upsertLocalProvider(\n\tconfig: LocalConfigFile,\n\tprovider: LocalProviderTemplate,\n\toverrides: {\n\t\tid: string;\n\t\tname: string;\n\t\tbaseUrl: string;\n\t\tmodelId: string;\n\t\tmodelName: string;\n\t\tcontextWindow: number;\n\t\tmaxTokens: number;\n\t},\n): void {\n\tif (!Array.isArray(config.providers)) {\n\t\tconfig.providers = [];\n\t}\n\ttype ProviderEntry = NonNullable<LocalConfigFile[\"providers\"]>[number];\n\tconst entry: ProviderEntry = {\n\t\tid: overrides.id,\n\t\tname: overrides.name,\n\t\tapi: provider.api,\n\t\tbaseUrl: overrides.baseUrl,\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tid: overrides.modelId,\n\t\t\t\tname: overrides.modelName,\n\t\t\t\tcontextWindow: overrides.contextWindow,\n\t\t\t\tmaxTokens: overrides.maxTokens,\n\t\t\t\tinput: [\"text\"] as Array<\"text\" | \"image\">,\n\t\t\t},\n\t\t],\n\t};\n\tconst existingIndex = config.providers.findIndex(\n\t\t(p) => p?.id === overrides.id,\n\t);\n\tif (existingIndex >= 0) {\n\t\tconfig.providers[existingIndex] = entry;\n\t} else {\n\t\tconfig.providers.push(entry);\n\t}\n}\n\nasync function checkLocalEndpoint(\n\tname: string,\n\tbaseUrl: string,\n): Promise<string> {\n\ttry {\n\t\tconst url = new URL(baseUrl);\n\t\turl.pathname = \"/models\";\n\t\tconst response = await fetch(url.toString(), { method: \"GET\" });\n\t\tif (response.ok) {\n\t\t\treturn `${badge(name, undefined, \"success\")} ${chalk.dim(\n\t\t\t\t`responded with ${response.status}`,\n\t\t\t)}`;\n\t\t}\n\t\treturn `${badge(name, undefined, \"warn\")} ${chalk.dim(\n\t\t\t`HTTP ${response.status}`,\n\t\t)}`;\n\t} catch (error) {\n\t\treturn `${badge(name, undefined, \"danger\")} ${chalk.dim(\n\t\t\terror instanceof Error ? error.message : String(error),\n\t\t)}`;\n\t}\n}\n\nexport async function handleConfigLocal(): Promise<void> {\n\tconsole.log(sectionHeading(\"Local provider helper\"));\n\tconst readline = await import(\"node:readline/promises\");\n\tconst rl = readline.createInterface({\n\t\tinput: process.stdin,\n\t\toutput: process.stdout,\n\t});\n\n\ttry {\n\t\tconsole.log(\" 1) Add LM Studio provider\");\n\t\tconsole.log(\" 2) Add Ollama provider\");\n\t\tconsole.log(\" 3) Check local endpoints\");\n\t\tconsole.log(\" 4) Cancel\");\n\t\tconst choice = (await rl.question(chalk.cyan(\"\\nChoice (1-4): \"))).trim();\n\n\t\tif (choice === \"4\") {\n\t\t\tconsole.log(muted(\"\\nCancelled.\"));\n\t\t\trl.close();\n\t\t\treturn;\n\t\t}\n\n\t\tif (choice === \"3\") {\n\t\t\tconst lmstudioTemplate = LOCAL_PROVIDER_TEMPLATES.lmstudio;\n\t\t\tconst ollamaTemplate = LOCAL_PROVIDER_TEMPLATES.ollama;\n\t\t\tconst targets = [\n\t\t\t\t...(lmstudioTemplate\n\t\t\t\t\t? [{ name: \"LM Studio\", url: lmstudioTemplate.baseUrl }]\n\t\t\t\t\t: []),\n\t\t\t\t...(ollamaTemplate\n\t\t\t\t\t? [{ name: \"Ollama\", url: ollamaTemplate.baseUrl }]\n\t\t\t\t\t: []),\n\t\t\t];\n\t\t\tfor (const target of targets) {\n\t\t\t\tconsole.log(await checkLocalEndpoint(target.name, target.url));\n\t\t\t}\n\t\t\trl.close();\n\t\t\treturn;\n\t\t}\n\n\t\tconst templateKey = choice === \"2\" ? \"ollama\" : \"lmstudio\";\n\t\tconst template = LOCAL_PROVIDER_TEMPLATES[templateKey];\n\t\tif (!template) {\n\t\t\tconsole.log(chalk.red(`\\nUnknown template: ${templateKey}`));\n\t\t\trl.close();\n\t\t\treturn;\n\t\t}\n\n\t\tconst scope = (\n\t\t\tawait rl.question(\n\t\t\t\tchalk.cyan(\n\t\t\t\t\t\"\\nSave provider to:\\n 1) Project (.maestro/local.json)\\n 2) Home (~/.maestro/local.json)\\n\\nChoice (1-2): \",\n\t\t\t\t),\n\t\t\t)\n\t\t).trim();\n\t\tconst targetDir =\n\t\t\tscope === \"2\" ? PATHS.MAESTRO_HOME : join(process.cwd(), \".maestro\");\n\t\tmkdirSync(targetDir, { recursive: true });\n\t\tconst localPath = join(targetDir, \"local.json\");\n\t\tconst config = loadLocalConfig(localPath);\n\n\t\tconst providerId =\n\t\t\t(\n\t\t\t\tawait rl.question(chalk.cyan(`\\nProvider id (${template.id}): `))\n\t\t\t).trim() || template.id;\n\t\tconst providerName =\n\t\t\t(\n\t\t\t\tawait rl.question(chalk.cyan(`Provider name (${template.name}): `))\n\t\t\t).trim() || template.name;\n\t\tconst baseUrl =\n\t\t\t(\n\t\t\t\tawait rl.question(chalk.cyan(`Base URL (${template.baseUrl}): `))\n\t\t\t).trim() || template.baseUrl;\n\t\tconst modelId =\n\t\t\t(\n\t\t\t\tawait rl.question(chalk.cyan(`Model id (${template.model.id}): `))\n\t\t\t).trim() || template.model.id;\n\t\tconst modelName =\n\t\t\t(\n\t\t\t\tawait rl.question(chalk.cyan(`Model name (${template.model.name}): `))\n\t\t\t).trim() || template.model.name;\n\t\tconst contextWindowAnswer = (\n\t\t\tawait rl.question(\n\t\t\t\tchalk.cyan(`Context window (${template.model.contextWindow}): `),\n\t\t\t)\n\t\t).trim();\n\t\tconst maxTokensAnswer = (\n\t\t\tawait rl.question(\n\t\t\t\tchalk.cyan(`Max output tokens (${template.model.maxTokens}): `),\n\t\t\t)\n\t\t).trim();\n\t\tconst contextWindow =\n\t\t\tNumber.parseInt(contextWindowAnswer, 10) || template.model.contextWindow;\n\t\tconst maxTokens =\n\t\t\tNumber.parseInt(maxTokensAnswer, 10) || template.model.maxTokens;\n\n\t\tupsertLocalProvider(config, template, {\n\t\t\tid: providerId,\n\t\t\tname: providerName,\n\t\t\tbaseUrl,\n\t\t\tmodelId,\n\t\t\tmodelName,\n\t\t\tcontextWindow,\n\t\t\tmaxTokens,\n\t\t});\n\t\tif (!config.$schema) {\n\t\t\tconfig.$schema = \"https://composer-cli.dev/config.schema.json\";\n\t\t}\n\t\twriteFileSync(localPath, JSON.stringify(config, null, 2));\n\t\tconsole.log(`\\n${badge(\"Updated local config\", localPath, \"success\")}`);\n\t\tconsole.log(\n\t\t\tmuted(\n\t\t\t\t\"Reload your models (/model) after starting the local runtime to use the new provider.\",\n\t\t\t),\n\t\t);\n\t\tconsole.log(\n\t\t\tmuted(\"Tip: run `maestro config local` again to check connectivity.\"),\n\t\t);\n\n\t\trl.close();\n\t} catch (error) {\n\t\trl.close();\n\t\tthrow error;\n\t}\n}\n\n/**\n * Format bytes to human-readable string\n */\nfunction formatBytes(bytes: number): string {\n\tconst units = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\"];\n\tlet index = 0;\n\tlet value = bytes;\n\twhile (value >= 1024 && index < units.length - 1) {\n\t\tvalue /= 1024;\n\t\tindex += 1;\n\t}\n\treturn `${value.toFixed(1)} ${units[index]}`;\n}\n\nfunction formatModelLabel(model: {\n\tid: string;\n\treasoning?: boolean;\n\tinput?: string[];\n}): string {\n\tconst caps: string[] = [];\n\tif (model.reasoning) {\n\t\tcaps.push(\"thinking\");\n\t}\n\tif (model.input?.includes(\"image\")) {\n\t\tcaps.push(\"vision\");\n\t}\n\tconst suffix = caps.length ? ` ${chalk.dim(`[${caps.join(\", \")}]`)}` : \"\";\n\treturn `${model.id}${suffix}`;\n}\n"]}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport chalk from \"chalk\";\nimport { PATHS } from \"../../config/constants.js\";\nimport {\n\ttype ConfigInspection,\n\ttype ConfigValidationResult,\n\tgetConfigHierarchy,\n\tinspectConfig,\n\tvalidateConfig,\n} from \"../../models/registry.js\";\nimport {\n\tbadge,\n\tmuted,\n\tsectionHeading,\n\tseparator as themedSeparator,\n} from \"../../style/theme.js\";\n// Use the UMD build to avoid ESM subpath resolution issues in some environments\nimport { parseJsonc } from \"../../utils/jsonc-umd.js\";\nimport { getHomeDir } from \"../../utils/path-expansion.js\";\n\nimport type { Api } from \"../../agent/types.js\";\nimport { getEnvVarsForProvider } from \"../../providers/api-keys.js\";\nimport {\n\tDEFAULT_EVALOPS_MANAGED_GATEWAY_BASE_URL,\n\tgetEvalOpsManagedProviderDefinitions,\n\tisEvalOpsManagedProvider,\n} from \"../../providers/evalops-managed.js\";\n\ntype ProviderPreset = {\n\tid: string;\n\tname: string;\n\tapi: Api;\n\tdefaultModel: string;\n\tbaseUrl?: string;\n\trequiresApiKey: boolean;\n\tapiKeyEnv?: string;\n\tnote?: string;\n\tcontextWindow?: number;\n\tmaxTokens?: number;\n};\n\nfunction getManagedGatewayBaseUrl(): string {\n\treturn (\n\t\tprocess.env.MAESTRO_LLM_GATEWAY_URL?.trim() ||\n\t\tDEFAULT_EVALOPS_MANAGED_GATEWAY_BASE_URL\n\t);\n}\n\nfunction getManagedGatewayProviderPresets(): ProviderPreset[] {\n\treturn getEvalOpsManagedProviderDefinitions().map((definition) => ({\n\t\tid: definition.id,\n\t\tname: definition.name,\n\t\tapi: definition.api,\n\t\tdefaultModel: definition.defaultModel,\n\t\tbaseUrl: getManagedGatewayBaseUrl(),\n\t\trequiresApiKey: false,\n\t\tnote: definition.note,\n\t}));\n}\n\nexport function getProviderPresets(): ProviderPreset[] {\n\treturn [\n\t\t{\n\t\t\tid: \"anthropic\",\n\t\t\tname: \"Anthropic (Claude)\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tdefaultModel: \"claude-opus-4-6\",\n\t\t\tbaseUrl: \"https://api.anthropic.com\",\n\t\t\trequiresApiKey: true,\n\t\t\tapiKeyEnv: \"ANTHROPIC_API_KEY\",\n\t\t\tcontextWindow: 1000000,\n\t\t\tmaxTokens: 128000,\n\t\t},\n\t\t{\n\t\t\tid: \"openai\",\n\t\t\tname: \"OpenAI (Responses)\",\n\t\t\tapi: \"openai-responses\",\n\t\t\tdefaultModel: \"gpt-4o-mini\",\n\t\t\tbaseUrl: \"https://api.openai.com/v1\",\n\t\t\trequiresApiKey: true,\n\t\t\tapiKeyEnv: \"OPENAI_API_KEY\",\n\t\t},\n\t\t{\n\t\t\tid: \"groq\",\n\t\t\tname: \"Groq\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tdefaultModel: \"llama-3.3-70b-versatile\",\n\t\t\tbaseUrl: \"https://api.groq.com/openai/v1\",\n\t\t\trequiresApiKey: true,\n\t\t\tapiKeyEnv: \"GROQ_API_KEY\",\n\t\t},\n\t\t{\n\t\t\tid: \"openrouter\",\n\t\t\tname: \"OpenRouter\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tdefaultModel: \"openai/o4-mini\",\n\t\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\t\trequiresApiKey: true,\n\t\t\tapiKeyEnv: \"OPENROUTER_API_KEY\",\n\t\t\tnote: \"Supports many upstreams; accepts OpenAI-compatible keys\",\n\t\t},\n\t\t...getManagedGatewayProviderPresets(),\n\t\t{\n\t\t\tid: \"google-gemini\",\n\t\t\tname: \"Google Gemini API\",\n\t\t\tapi: \"google-generative-ai\",\n\t\t\tdefaultModel: \"gemini-2.0-flash\",\n\t\t\tbaseUrl: \"https://generativelanguage.googleapis.com/v1beta\",\n\t\t\trequiresApiKey: true,\n\t\t\tapiKeyEnv: \"GEMINI_API_KEY\",\n\t\t},\n\t\t{\n\t\t\tid: \"google-gemini-cli\",\n\t\t\tname: \"Google Gemini CLI (Cloud Code Assist)\",\n\t\t\tapi: \"google-gemini-cli\",\n\t\t\tdefaultModel: \"gemini-2.5-flash\",\n\t\t\tbaseUrl: \"https://cloudcode-pa.googleapis.com\",\n\t\t\trequiresApiKey: false,\n\t\t\tnote: \"Requires OAuth via /login (token includes projectId)\",\n\t\t},\n\t\t{\n\t\t\tid: \"google-antigravity\",\n\t\t\tname: \"Google Antigravity (Sandbox)\",\n\t\t\tapi: \"google-gemini-cli\",\n\t\t\tdefaultModel: \"gemini-3-pro-high\",\n\t\t\tbaseUrl: \"https://daily-cloudcode-pa.sandbox.googleapis.com\",\n\t\t\trequiresApiKey: false,\n\t\t\tnote: \"Requires OAuth via /login (token includes projectId)\",\n\t\t},\n\t\t{\n\t\t\tid: \"vertex-ai\",\n\t\t\tname: \"Google Vertex AI (Claude/Gemini)\",\n\t\t\tapi: \"anthropic-messages\",\n\t\t\tdefaultModel: \"claude-3-7-sonnet@20250219\",\n\t\t\tbaseUrl: \"https://us-central1-aiplatform.googleapis.com/v1beta1\",\n\t\t\trequiresApiKey: false,\n\t\t\tnote: \"Uses ADC; set GOOGLE_APPLICATION_CREDENTIALS or gcloud login\",\n\t\t},\n\t\t{\n\t\t\tid: \"bedrock\",\n\t\t\tname: \"AWS Bedrock\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tdefaultModel: \"anthropic.claude-3-7-sonnet-20250219-v1:0\",\n\t\t\trequiresApiKey: false,\n\t\t\tnote: \"Uses AWS credentials + region envs\",\n\t\t},\n\t\t{\n\t\t\tid: \"mistral\",\n\t\t\tname: \"Mistral\",\n\t\t\tapi: \"openai-completions\",\n\t\t\tdefaultModel: \"mistral-large-latest\",\n\t\t\tbaseUrl: \"https://api.mistral.ai/v1\",\n\t\t\trequiresApiKey: true,\n\t\t\tapiKeyEnv: \"MISTRAL_API_KEY\",\n\t\t},\n\t\t{\n\t\t\tid: \"lmstudio\",\n\t\t\tname: \"LM Studio (local)\",\n\t\t\tapi: \"openai-responses\",\n\t\t\tdefaultModel: \"lmstudio/gemma-3n\",\n\t\t\tbaseUrl: \"http://127.0.0.1:1234/v1\",\n\t\t\trequiresApiKey: false,\n\t\t},\n\t\t{\n\t\t\tid: \"ollama\",\n\t\t\tname: \"Ollama (local)\",\n\t\t\tapi: \"openai-responses\",\n\t\t\tdefaultModel: \"ollama/llama3.2\",\n\t\t\tbaseUrl: \"http://localhost:11434/v1\",\n\t\t\trequiresApiKey: false,\n\t\t},\n\t];\n}\n\nexport interface ConfigShowRenderOptions {\n\thierarchy: string[];\n\thomeDir?: string;\n\tdisableColors?: boolean;\n}\n\n// Adapted from ansi-regex (MIT) to cover CSI and OSC escape sequences.\nconst ANSI_STRING_TERMINATORS = \"(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)\";\nconst ANSI_OSC_SEQUENCE = `(?:\\\\u001B\\\\][\\\\s\\\\S]*?${ANSI_STRING_TERMINATORS})`;\nconst ANSI_CSI_SEQUENCE =\n\t\"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:\\\\d{1,4}(?:[;:]\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]\";\nconst ANSI_ESCAPE_SEQUENCE = new RegExp(\n\t`${ANSI_OSC_SEQUENCE}|${ANSI_CSI_SEQUENCE}`,\n\t\"g\",\n);\n\nfunction stripAnsi(value: string): string {\n\treturn value.replace(ANSI_ESCAPE_SEQUENCE, \"\");\n}\n\nconst normalizeForCompare = (value: string): string =>\n\tprocess.platform === \"win32\" ? value.toLowerCase() : value;\n\nfunction replaceHomePrefix(path: string, homeDir: string): string {\n\tconst normalizedPath = path.replace(/\\\\/g, \"/\");\n\tconst normalizedHome = homeDir.replace(/\\\\/g, \"/\");\n\tconst pathCheck = normalizeForCompare(normalizedPath);\n\tconst homeCheck = normalizeForCompare(normalizedHome);\n\tif (pathCheck === homeCheck) {\n\t\treturn \"~\";\n\t}\n\tif (pathCheck.startsWith(`${homeCheck}/`)) {\n\t\treturn `~${normalizedPath.slice(normalizedHome.length)}`;\n\t}\n\treturn path;\n}\n\nexport function buildConfigShowSections(\n\tinspection: ConfigInspection,\n\toptions: ConfigShowRenderOptions,\n): string[] {\n\tconst homeDir = options.homeDir ?? getHomeDir();\n\tconst rel = (path: string) => replaceHomePrefix(path, homeDir);\n\tconst output: string[] = [];\n\n\toutput.push(sectionHeading(\"Configuration Inspection\"));\n\toutput.push(\"\");\n\toutput.push(badge(\"Config Sources\", undefined, \"info\"));\n\tfor (const source of inspection.sources) {\n\t\tconst status = source.exists\n\t\t\t? badge(\"present\", undefined, \"success\")\n\t\t\t: badge(\"missing\", undefined, \"warn\");\n\t\tconst mark = options.hierarchy.includes(source.path) ? \"•\" : \" \";\n\t\toutput.push(` ${mark} ${status} ${muted(rel(source.path))}`);\n\t}\n\toutput.push(\"\");\n\n\tif (inspection.providers.length > 0) {\n\t\toutput.push(\n\t\t\tbadge(`Providers (${inspection.providers.length})`, undefined, \"info\"),\n\t\t);\n\t\tfor (const provider of inspection.providers) {\n\t\t\tconst isOverrideOnly = provider.modelCount === 0;\n\t\t\tconst heading = `${chalk.cyan(provider.id)} ${muted(\n\t\t\t\t`(${provider.modelCount} models)`,\n\t\t\t)}`;\n\t\t\tconst enabledBadge = provider.enabled\n\t\t\t\t? badge(\"enabled\", undefined, \"success\")\n\t\t\t\t: badge(\"disabled\", undefined, \"warn\");\n\t\t\tconst metaBadges: string[] = [];\n\t\t\tif (isOverrideOnly) {\n\t\t\t\tmetaBadges.push(badge(\"override-only\", undefined, \"info\"));\n\t\t\t\tif (provider.apiKeySource) {\n\t\t\t\t\tmetaBadges.push(badge(\"API key\", provider.apiKeySource, \"success\"));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst keyBadge = provider.apiKeySource\n\t\t\t\t\t? badge(\"API key\", provider.apiKeySource, \"success\")\n\t\t\t\t\t: badge(\"API key missing\", undefined, \"warn\");\n\t\t\t\tmetaBadges.push(keyBadge);\n\t\t\t}\n\t\t\tmetaBadges.push(enabledBadge);\n\t\t\tconst metaLine = metaBadges.join(` ${themedSeparator()} `);\n\t\t\toutput.push(` ${heading} ${themedSeparator()} ${metaLine}`);\n\t\t\toutput.push(` ${muted(provider.name)}`);\n\t\t\toutput.push(` ${muted(`Base URL: ${provider.baseUrl}`)}`);\n\t\t\tif (provider.options && Object.keys(provider.options).length > 0) {\n\t\t\t\toutput.push(muted(` Options: ${JSON.stringify(provider.options)}`));\n\t\t\t}\n\t\t\tif (provider.models.length <= 3) {\n\t\t\t\tfor (const model of provider.models) {\n\t\t\t\t\toutput.push(muted(` • ${formatModelLabel(model)}`));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst firstModel = provider.models[0];\n\t\t\t\tconst secondModel = provider.models[1];\n\t\t\t\tif (firstModel) {\n\t\t\t\t\toutput.push(muted(` • ${formatModelLabel(firstModel)}`));\n\t\t\t\t}\n\t\t\t\tif (secondModel) {\n\t\t\t\t\toutput.push(muted(` • ${formatModelLabel(secondModel)}`));\n\t\t\t\t}\n\t\t\t\toutput.push(muted(` ... and ${provider.models.length - 2} more`));\n\t\t\t}\n\t\t\toutput.push(\"\");\n\t\t}\n\t} else {\n\t\toutput.push(`${badge(\"No providers configured\", undefined, \"warn\")}`);\n\t\toutput.push(\"\");\n\t}\n\n\tif (inspection.fileReferences.length > 0) {\n\t\toutput.push(\n\t\t\tbadge(\n\t\t\t\t`File References (${inspection.fileReferences.length})`,\n\t\t\t\tundefined,\n\t\t\t\t\"info\",\n\t\t\t),\n\t\t);\n\t\tfor (const ref of inspection.fileReferences) {\n\t\t\tconst status = ref.exists\n\t\t\t\t? badge(\"present\", undefined, \"success\")\n\t\t\t\t: badge(\"missing\", undefined, \"danger\");\n\t\t\tconst size = ref.size ? ` (${formatBytes(ref.size)})` : \"\";\n\t\t\toutput.push(` ${status} ${muted(rel(ref.path))}${muted(size)}`);\n\t\t}\n\t\toutput.push(\"\");\n\t}\n\n\tif (inspection.envVars.length > 0) {\n\t\toutput.push(\n\t\t\tbadge(\n\t\t\t\t`Environment Variables (${inspection.envVars.length})`,\n\t\t\t\tundefined,\n\t\t\t\t\"info\",\n\t\t\t),\n\t\t);\n\t\tfor (const envVar of inspection.envVars) {\n\t\t\tconst status = envVar.set\n\t\t\t\t? badge(\"set\", undefined, \"success\")\n\t\t\t\t: badge(\"missing\", undefined, \"warn\");\n\t\t\tconst value = envVar.maskedValue ? envVar.maskedValue : \"(not set)\";\n\t\t\toutput.push(` ${status} ${chalk.cyan(envVar.name)}: ${muted(value)}`);\n\t\t}\n\t\toutput.push(\"\");\n\t}\n\n\tif (options.disableColors) {\n\t\treturn output.map((line) => stripAnsi(line));\n\t}\n\treturn output;\n}\n\n/**\n * Handle `maestro config validate` command\n */\nexport async function handleConfigValidate(): Promise<void> {\n\tconsole.log(sectionHeading(\"Validating Configuration\"));\n\n\tconst result: ConfigValidationResult = validateConfig();\n\tconst homeDir = getHomeDir();\n\n\t// Show config files\n\tif (result.summary.configFiles.length > 0) {\n\t\tconsole.log(muted(\"Config Files:\"));\n\t\tfor (const file of result.summary.configFiles) {\n\t\t\tconst relPath = replaceHomePrefix(file, homeDir);\n\t\t\tconsole.log(muted(` • ${relPath}`));\n\t\t}\n\t\tconsole.log();\n\t}\n\n\t// Show errors\n\tif (result.errors.length > 0) {\n\t\tconsole.log(badge(\"[ERROR] Errors\", undefined, \"danger\"));\n\t\tfor (const error of result.errors) {\n\t\t\tconsole.log(chalk.red(` • ${error}`));\n\t\t}\n\t\tconsole.log();\n\t}\n\n\t// Show warnings\n\tif (result.warnings.length > 0) {\n\t\tconsole.log(badge(\"[WARN] Warnings\", undefined, \"warn\"));\n\t\tfor (const warning of result.warnings) {\n\t\t\tconsole.log(chalk.yellow(` • ${warning}`));\n\t\t}\n\t\tconsole.log();\n\t}\n\n\t// Show summary\n\tconsole.log(muted(\"Summary:\"));\n\tconsole.log(\n\t\tmuted(` • ${badge(\"Providers\", String(result.summary.providers))}`),\n\t);\n\tconsole.log(muted(` • ${badge(\"Models\", String(result.summary.models))}`));\n\tconsole.log(\n\t\tmuted(\n\t\t\t` • ${badge(\n\t\t\t\t\"File References\",\n\t\t\t\tString(result.summary.fileReferences.length),\n\t\t\t)}`,\n\t\t),\n\t);\n\tconsole.log(\n\t\tmuted(\n\t\t\t` • ${badge(\n\t\t\t\t\"Environment Variables\",\n\t\t\t\tString(result.summary.envVars.length),\n\t\t\t)}`,\n\t\t),\n\t);\n\tconsole.log();\n\n\t// Final verdict\n\tif (result.valid) {\n\t\tconsole.log(`${badge(\"Configuration is valid\", undefined, \"success\")}\\n`);\n\t\tprocess.exit(0);\n\t} else {\n\t\tconsole.log(`${badge(\"Configuration has errors\", undefined, \"danger\")}\\n`);\n\t\tprocess.exit(1);\n\t}\n}\n\n/**\n * Legacy renderer for `maestro config show`\n */\nfunction renderConfigShowLegacy(\n\tinspection: ConfigInspection,\n\thierarchy: string[],\n\thomeDir: string,\n): void {\n\tconsole.log(sectionHeading(\"Configuration Inspection\"));\n\n\t// Show config sources\n\tconsole.log(badge(\"Config Sources\", undefined, \"info\"));\n\tfor (const source of inspection.sources) {\n\t\tconst relPath = replaceHomePrefix(source.path, homeDir);\n\t\tconst status = source.exists\n\t\t\t? badge(\"present\", undefined, \"success\")\n\t\t\t: badge(\"missing\", undefined, \"warn\");\n\t\tconst mark = hierarchy.includes(source.path) ? \"•\" : \" \";\n\t\tconsole.log(` ${mark} ${status} ${muted(relPath)}`);\n\t}\n\tconsole.log();\n\n\t// Show providers\n\tif (inspection.providers.length > 0) {\n\t\tconsole.log(\n\t\t\tbadge(`Providers (${inspection.providers.length})`, undefined, \"info\"),\n\t\t);\n\t\tfor (const provider of inspection.providers) {\n\t\t\tconst isOverrideOnly = provider.modelCount === 0;\n\t\t\tconst heading = `${chalk.cyan(provider.id)} ${muted(\n\t\t\t\t`(${provider.modelCount} models)`,\n\t\t\t)}`;\n\t\t\tconst enabledBadge = provider.enabled\n\t\t\t\t? badge(\"enabled\", undefined, \"success\")\n\t\t\t\t: badge(\"disabled\", undefined, \"warn\");\n\t\t\tconst metaBadges: string[] = [];\n\t\t\tif (isOverrideOnly) {\n\t\t\t\tmetaBadges.push(badge(\"override-only\", undefined, \"info\"));\n\t\t\t\tif (provider.apiKeySource) {\n\t\t\t\t\tmetaBadges.push(badge(\"API key\", provider.apiKeySource, \"success\"));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst keyBadge = provider.apiKeySource\n\t\t\t\t\t? badge(\"API key\", provider.apiKeySource, \"success\")\n\t\t\t\t\t: badge(\"API key missing\", undefined, \"warn\");\n\t\t\t\tmetaBadges.push(keyBadge);\n\t\t\t}\n\t\t\tmetaBadges.push(enabledBadge);\n\t\t\tconst metaLine = metaBadges.join(` ${themedSeparator()} `);\n\n\t\t\tconsole.log(` ${heading} ${themedSeparator()} ${metaLine}`);\n\t\t\tconsole.log(` ${muted(provider.name)}`);\n\t\t\tconsole.log(` ${muted(`Base URL: ${provider.baseUrl}`)}`);\n\t\t\tif (provider.options && Object.keys(provider.options).length > 0) {\n\t\t\t\tconsole.log(muted(` Options: ${JSON.stringify(provider.options)}`));\n\t\t\t}\n\n\t\t\t// Show models\n\t\t\tif (provider.models.length <= 3) {\n\t\t\t\tfor (const model of provider.models) {\n\t\t\t\t\tconsole.log(muted(` • ${formatModelLabel(model)}`));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst firstModel = provider.models[0];\n\t\t\t\tconst secondModel = provider.models[1];\n\t\t\t\tif (firstModel) {\n\t\t\t\t\tconsole.log(muted(` • ${formatModelLabel(firstModel)}`));\n\t\t\t\t}\n\t\t\t\tif (secondModel) {\n\t\t\t\t\tconsole.log(muted(` • ${formatModelLabel(secondModel)}`));\n\t\t\t\t}\n\t\t\t\tconsole.log(muted(` ... and ${provider.models.length - 2} more`));\n\t\t\t}\n\t\t\tconsole.log();\n\t\t}\n\t} else {\n\t\tconsole.log(`${badge(\"No providers configured\", undefined, \"warn\")}\\n`);\n\t}\n\n\t// Show file references\n\tif (inspection.fileReferences.length > 0) {\n\t\tconsole.log(\n\t\t\tbadge(\n\t\t\t\t`File References (${inspection.fileReferences.length})`,\n\t\t\t\tundefined,\n\t\t\t\t\"info\",\n\t\t\t),\n\t\t);\n\t\tfor (const ref of inspection.fileReferences) {\n\t\t\tconst relPath = replaceHomePrefix(ref.path, homeDir);\n\t\t\tconst status = ref.exists\n\t\t\t\t? badge(\"present\", undefined, \"success\")\n\t\t\t\t: badge(\"missing\", undefined, \"danger\");\n\t\t\tconst size = ref.size ? ` (${formatBytes(ref.size)})` : \"\";\n\t\t\tconsole.log(` ${status} ${muted(relPath)}${muted(size)}`);\n\t\t}\n\t\tconsole.log();\n\t}\n\n\t// Show environment variables\n\tif (inspection.envVars.length > 0) {\n\t\tconsole.log(\n\t\t\tbadge(\n\t\t\t\t`Environment Variables (${inspection.envVars.length})`,\n\t\t\t\tundefined,\n\t\t\t\t\"info\",\n\t\t\t),\n\t\t);\n\t\tfor (const envVar of inspection.envVars) {\n\t\t\tconst status = envVar.set\n\t\t\t\t? badge(\"set\", undefined, \"success\")\n\t\t\t\t: badge(\"missing\", undefined, \"warn\");\n\t\t\tconst value = envVar.maskedValue ? envVar.maskedValue : \"(not set)\";\n\t\t\tconsole.log(` ${status} ${chalk.cyan(envVar.name)}: ${muted(value)}`);\n\t\t}\n\t\tconsole.log();\n\t}\n}\n\n/**\n * Handle `maestro config show` command\n */\nexport async function handleConfigShow(): Promise<void> {\n\tconst inspection: ConfigInspection = inspectConfig();\n\tconst hierarchy = getConfigHierarchy();\n\tconst homeDir = getHomeDir();\n\tconst layoutPref = (\n\t\tprocess.env.MAESTRO_CONFIG_SHOW_LAYOUT ?? \"v2\"\n\t).toLowerCase();\n\n\tif (layoutPref === \"legacy\") {\n\t\trenderConfigShowLegacy(inspection, hierarchy, homeDir);\n\t} else {\n\t\tconst lines = buildConfigShowSections(inspection, {\n\t\t\thierarchy,\n\t\t\thomeDir,\n\t\t\tdisableColors: !process.stdout.isTTY,\n\t\t});\n\t\tfor (const line of lines) {\n\t\t\tconsole.log(line);\n\t\t}\n\t}\n\n\tprocess.exit(0);\n}\n\n/**\n * Handle `maestro config init` command\n */\nexport async function handleConfigInit(): Promise<void> {\n\tconsole.log(sectionHeading(\"Initialize Maestro Configuration\"));\n\n\tconst readline = await import(\"node:readline/promises\");\n\tconst rl = readline.createInterface({\n\t\tinput: process.stdin,\n\t\toutput: process.stdout,\n\t});\n\n\ttry {\n\t\tconst providerPresets = getProviderPresets();\n\n\t\t// Determine config location\n\t\tconst configDir = join(process.cwd(), \".maestro\");\n\t\tconst configPath = join(configDir, \"config.json\");\n\t\tconst promptsDir = join(configDir, \"prompts\");\n\n\t\t// Check if config already exists\n\t\tif (existsSync(configPath)) {\n\t\t\tconst overwrite = await rl.question(\n\t\t\t\tchalk.yellow(\n\t\t\t\t\t`Config already exists at ${configPath}. Overwrite? (y/N): `,\n\t\t\t\t),\n\t\t\t);\n\t\t\tif (overwrite.toLowerCase() !== \"y\") {\n\t\t\t\tconsole.log(muted(\"\\nCancelled.\"));\n\t\t\t\trl.close();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// Optional flag: --preset <id> to skip menu\n\t\tconst args = process.argv.slice(2);\n\t\tconst presetFlagIndex = args.findIndex(\n\t\t\t(arg) => arg === \"--preset\" || arg === \"-p\",\n\t\t);\n\t\tconst presetId =\n\t\t\tpresetFlagIndex >= 0 ? (args[presetFlagIndex + 1] ?? \"\") : \"\";\n\n\t\t// Step 1: Choose provider\n\t\tconsole.log(`\\n${badge(\"1. Choose your provider\", undefined, \"info\")}`);\n\t\tproviderPresets.forEach((preset, idx) => {\n\t\t\tconst note = preset.note ? chalk.dim(` — ${preset.note}`) : \"\";\n\t\t\tconsole.log(` ${idx + 1}) ${preset.name}${note}`);\n\t\t});\n\n\t\tlet preset: ProviderPreset | undefined;\n\t\tif (presetId) {\n\t\t\tconst found = providerPresets.find(\n\t\t\t\t(p) => p.id.toLowerCase() === presetId.toLowerCase(),\n\t\t\t);\n\t\t\tif (!found) {\n\t\t\t\tconsole.log(\n\t\t\t\t\tchalk.yellow(\n\t\t\t\t\t\t`\\nUnknown preset \"${presetId}\", falling back to menu selection.`,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpreset = found;\n\t\t\t\tconsole.log(chalk.green(`\\nUsing preset: ${preset.name}`));\n\t\t\t}\n\t\t}\n\n\t\tif (!preset) {\n\t\t\tconst providerChoice = await rl.question(\n\t\t\t\tchalk.cyan(`\\nProvider (1-${providerPresets.length}): `),\n\t\t\t);\n\n\t\t\tconst presetIndex =\n\t\t\t\tNumber.parseInt(providerChoice.trim(), 10) - 1 >= 0 &&\n\t\t\t\tNumber.parseInt(providerChoice.trim(), 10) - 1 < providerPresets.length\n\t\t\t\t\t? Number.parseInt(providerChoice.trim(), 10) - 1\n\t\t\t\t\t: 0;\n\t\t\tpreset = providerPresets[presetIndex] ?? providerPresets[0];\n\t\t}\n\n\t\t// At this point preset is guaranteed to be defined because providerPresets is non-empty\n\t\tif (!preset) {\n\t\t\tthrow new Error(\"No provider presets available\");\n\t\t}\n\n\t\tconst {\n\t\t\tid: providerId,\n\t\t\tname: providerName,\n\t\t\tbaseUrl,\n\t\t\tapi: apiType,\n\t\t} = preset;\n\t\tconst { defaultModel } = preset;\n\t\tconst requiresApiKey = preset.requiresApiKey;\n\n\t\tlet useEnv = true;\n\t\tlet apiKeyField: { apiKeyEnv?: string; apiKey?: string } = {};\n\t\tif (requiresApiKey) {\n\t\t\tconsole.log(\n\t\t\t\t`\\n${badge(\n\t\t\t\t\t\"2. How would you like to provide your API key?\",\n\t\t\t\t\tundefined,\n\t\t\t\t\t\"info\",\n\t\t\t\t)}`,\n\t\t\t);\n\t\t\tconsole.log(\" 1) Environment variable (recommended)\");\n\t\t\tconsole.log(\" 2) Direct in config (not recommended)\");\n\n\t\t\tconst keyChoice = await rl.question(chalk.cyan(\"\\nChoice (1-2): \"));\n\t\t\tuseEnv = keyChoice.trim() !== \"2\";\n\n\t\t\tif (useEnv) {\n\t\t\t\tconst fallbackEnv =\n\t\t\t\t\tgetEnvVarsForProvider(providerId)[0] ??\n\t\t\t\t\t`${providerId.toUpperCase().replace(/[^A-Z0-9]/g, \"_\")}_API_KEY`;\n\t\t\t\tconst envVarName = preset.apiKeyEnv ?? fallbackEnv;\n\t\t\t\tapiKeyField = { apiKeyEnv: envVarName };\n\t\t\t\tconsole.log(chalk.dim(`\\nUsing environment variable: ${envVarName}`));\n\t\t\t} else {\n\t\t\t\tconst apiKey = await rl.question(chalk.cyan(\"\\nEnter API key: \"));\n\t\t\t\tapiKeyField = { apiKey: apiKey.trim() };\n\t\t\t}\n\t\t} else {\n\t\t\tuseEnv = false;\n\t\t\tconst noKeyMessage = isEvalOpsManagedProvider(providerId)\n\t\t\t\t? \"\\nManaged gateway preset does not use a local API key. Run maestro evalops login after setup.\"\n\t\t\t\t: \"\\nLocal providers do not require API keys. Skipping step.\";\n\t\t\tconsole.log(chalk.dim(noKeyMessage));\n\t\t}\n\n\t\t// Step 3: Use file references for prompts\n\t\tconsole.log(\n\t\t\t`\\n${badge(\n\t\t\t\t\"3. Would you like to use file references for prompts?\",\n\t\t\t\tundefined,\n\t\t\t\t\"info\",\n\t\t\t)}`,\n\t\t);\n\t\tconsole.log(\" This creates a prompts/ folder for better organization.\");\n\n\t\tconst useFiles = await rl.question(\n\t\t\tchalk.cyan(\"\\nUse file references? (Y/n): \"),\n\t\t);\n\t\tconst createPrompts = useFiles.toLowerCase() !== \"n\";\n\n\t\t// Create directories\n\t\tmkdirSync(configDir, { recursive: true });\n\t\tif (createPrompts) {\n\t\t\tmkdirSync(promptsDir, { recursive: true });\n\t\t}\n\n\t\t// Create config\n\t\tconst config: LocalConfigFile = {\n\t\t\t$schema: \"https://composer-cli.dev/config.schema.json\",\n\t\t\tproviders: [\n\t\t\t\t{\n\t\t\t\t\tid: providerId,\n\t\t\t\t\tname: providerName,\n\t\t\t\t\t...(baseUrl && { baseUrl }),\n\t\t\t\t\tapi: apiType,\n\t\t\t\t\t...apiKeyField,\n\t\t\t\t\tmodels: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: defaultModel,\n\t\t\t\t\t\t\tname: createPrompts\n\t\t\t\t\t\t\t\t? \"{file:./prompts/system.md}\"\n\t\t\t\t\t\t\t\t: \"Default assistant\",\n\t\t\t\t\t\t\tcontextWindow: preset?.contextWindow ?? 200000,\n\t\t\t\t\t\t\tmaxTokens: preset?.maxTokens ?? 8192,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\n\t\t// Write config\n\t\twriteFileSync(configPath, JSON.stringify(config, null, 2));\n\t\tconsole.log(`\\n${badge(\"Created config\", configPath, \"success\")}`);\n\n\t\t// Create example prompt file\n\t\tif (createPrompts) {\n\t\t\tconst systemPromptPath = join(promptsDir, \"system.md\");\n\t\t\tconst examplePrompt = `# System Prompt\n\nYou are a helpful AI coding assistant.\n\n## Guidelines\n\n- Write clean, maintainable code\n- Follow best practices\n- Provide clear explanations\n- Test your suggestions\n\n## Style\n\n- Be concise but thorough\n- Use examples when helpful\n- Ask clarifying questions when needed\n`;\n\t\t\twriteFileSync(systemPromptPath, examplePrompt);\n\t\t\tconsole.log(badge(\"Created prompt\", systemPromptPath, \"success\"));\n\t\t}\n\n\t\t// Create .env.example if using environment variables\n\t\tif (useEnv) {\n\t\t\tconst envExamplePath = join(process.cwd(), \".env.example\");\n\t\t\tconst envVarName = apiKeyField.apiKeyEnv ?? \"\";\n\t\t\tconst envContent = existsSync(envExamplePath)\n\t\t\t\t? `\\n# Added by maestro init\\n${envVarName}=your-api-key-here\\n`\n\t\t\t\t: `# Maestro Configuration\\n${envVarName}=your-api-key-here\\n`;\n\n\t\t\tif (existsSync(envExamplePath)) {\n\t\t\t\tconst fs = await import(\"node:fs/promises\");\n\t\t\t\tawait fs.appendFile(envExamplePath, envContent);\n\t\t\t} else {\n\t\t\t\twriteFileSync(envExamplePath, envContent);\n\t\t\t}\n\t\t\tconsole.log(badge(\"Updated .env.example\", undefined, \"success\"));\n\t\t}\n\n\t\t// Show next steps\n\t\tconsole.log(sectionHeading(\"Configuration initialized successfully!\"));\n\t\tconsole.log(muted(\"Next steps:\"));\n\n\t\tif (useEnv) {\n\t\t\tconst envVarName = apiKeyField.apiKeyEnv ?? \"\";\n\t\t\tconsole.log(muted(` 1. Set ${envVarName} in your environment`));\n\t\t}\n\t\tif (createPrompts) {\n\t\t\tconsole.log(muted(\" 2. Edit .maestro/prompts/system.md\"));\n\t\t}\n\t\tconsole.log(muted(\" 3. Run: maestro models list\"));\n\t\tconsole.log(muted(' 4. Start using: maestro \"your prompt\"\\n'));\n\n\t\trl.close();\n\t} catch (error) {\n\t\trl.close();\n\t\tthrow error;\n\t}\n}\n\ntype LocalProviderTemplate = {\n\tid: string;\n\tname: string;\n\tbaseUrl: string;\n\tapi: string;\n\tmodel: {\n\t\tid: string;\n\t\tname: string;\n\t\tcontextWindow: number;\n\t\tmaxTokens: number;\n\t};\n};\n\nconst LOCAL_PROVIDER_TEMPLATES: Record<string, LocalProviderTemplate> = {\n\tlmstudio: {\n\t\tid: \"lmstudio\",\n\t\tname: \"LM Studio (local)\",\n\t\tbaseUrl: \"http://127.0.0.1:1234/v1\",\n\t\tapi: \"openai-responses\",\n\t\tmodel: {\n\t\t\tid: \"lmstudio/gemma-3n\",\n\t\t\tname: \"Gemma 3n (local)\",\n\t\t\tcontextWindow: 200_000,\n\t\t\tmaxTokens: 8192,\n\t\t},\n\t},\n\tollama: {\n\t\tid: \"ollama\",\n\t\tname: \"Ollama (local)\",\n\t\tbaseUrl: \"http://localhost:11434/v1\",\n\t\tapi: \"openai-responses\",\n\t\tmodel: {\n\t\t\tid: \"ollama/llama3.1\",\n\t\t\tname: \"Llama 3.1 (local)\",\n\t\t\tcontextWindow: 128_000,\n\t\t\tmaxTokens: 8192,\n\t\t},\n\t},\n};\n\ninterface LocalConfigFile {\n\t$schema?: string;\n\tproviders?: Array<{\n\t\tid: string;\n\t\tname: string;\n\t\tapi: string;\n\t\tbaseUrl?: string;\n\t\tmodels: Array<{\n\t\t\tid: string;\n\t\t\tname: string;\n\t\t\tcontextWindow: number;\n\t\t\tmaxTokens: number;\n\t\t\tinput?: Array<\"text\" | \"image\">;\n\t\t}>;\n\t\toptions?: Record<string, unknown>;\n\t}>;\n}\n\nfunction loadLocalConfig(path: string): LocalConfigFile {\n\tif (!existsSync(path)) {\n\t\treturn {\n\t\t\t$schema: \"https://composer-cli.dev/config.schema.json\",\n\t\t\tproviders: [],\n\t\t};\n\t}\n\tconst raw = readFileSync(path, \"utf-8\");\n\ttry {\n\t\tconst parsed = parseJsonc(raw, [], {\n\t\t\tallowTrailingComma: true,\n\t\t\tdisallowComments: false,\n\t\t});\n\t\tif (!parsed || typeof parsed !== \"object\") {\n\t\t\treturn {\n\t\t\t\t$schema: \"https://composer-cli.dev/config.schema.json\",\n\t\t\t\tproviders: [],\n\t\t\t};\n\t\t}\n\t\treturn parsed as LocalConfigFile;\n\t} catch (error) {\n\t\tthrow new Error(\n\t\t\t`Failed to parse ${path}: ${error instanceof Error ? error.message : String(error)}`,\n\t\t);\n\t}\n}\n\nfunction upsertLocalProvider(\n\tconfig: LocalConfigFile,\n\tprovider: LocalProviderTemplate,\n\toverrides: {\n\t\tid: string;\n\t\tname: string;\n\t\tbaseUrl: string;\n\t\tmodelId: string;\n\t\tmodelName: string;\n\t\tcontextWindow: number;\n\t\tmaxTokens: number;\n\t},\n): void {\n\tif (!Array.isArray(config.providers)) {\n\t\tconfig.providers = [];\n\t}\n\ttype ProviderEntry = NonNullable<LocalConfigFile[\"providers\"]>[number];\n\tconst entry: ProviderEntry = {\n\t\tid: overrides.id,\n\t\tname: overrides.name,\n\t\tapi: provider.api,\n\t\tbaseUrl: overrides.baseUrl,\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tid: overrides.modelId,\n\t\t\t\tname: overrides.modelName,\n\t\t\t\tcontextWindow: overrides.contextWindow,\n\t\t\t\tmaxTokens: overrides.maxTokens,\n\t\t\t\tinput: [\"text\"] as Array<\"text\" | \"image\">,\n\t\t\t},\n\t\t],\n\t};\n\tconst existingIndex = config.providers.findIndex(\n\t\t(p) => p?.id === overrides.id,\n\t);\n\tif (existingIndex >= 0) {\n\t\tconfig.providers[existingIndex] = entry;\n\t} else {\n\t\tconfig.providers.push(entry);\n\t}\n}\n\nasync function checkLocalEndpoint(\n\tname: string,\n\tbaseUrl: string,\n): Promise<string> {\n\ttry {\n\t\tconst url = new URL(baseUrl);\n\t\turl.pathname = \"/models\";\n\t\tconst response = await fetch(url.toString(), { method: \"GET\" });\n\t\tif (response.ok) {\n\t\t\treturn `${badge(name, undefined, \"success\")} ${chalk.dim(\n\t\t\t\t`responded with ${response.status}`,\n\t\t\t)}`;\n\t\t}\n\t\treturn `${badge(name, undefined, \"warn\")} ${chalk.dim(\n\t\t\t`HTTP ${response.status}`,\n\t\t)}`;\n\t} catch (error) {\n\t\treturn `${badge(name, undefined, \"danger\")} ${chalk.dim(\n\t\t\terror instanceof Error ? error.message : String(error),\n\t\t)}`;\n\t}\n}\n\nexport async function handleConfigLocal(): Promise<void> {\n\tconsole.log(sectionHeading(\"Local provider helper\"));\n\tconst readline = await import(\"node:readline/promises\");\n\tconst rl = readline.createInterface({\n\t\tinput: process.stdin,\n\t\toutput: process.stdout,\n\t});\n\n\ttry {\n\t\tconsole.log(\" 1) Add LM Studio provider\");\n\t\tconsole.log(\" 2) Add Ollama provider\");\n\t\tconsole.log(\" 3) Check local endpoints\");\n\t\tconsole.log(\" 4) Cancel\");\n\t\tconst choice = (await rl.question(chalk.cyan(\"\\nChoice (1-4): \"))).trim();\n\n\t\tif (choice === \"4\") {\n\t\t\tconsole.log(muted(\"\\nCancelled.\"));\n\t\t\trl.close();\n\t\t\treturn;\n\t\t}\n\n\t\tif (choice === \"3\") {\n\t\t\tconst lmstudioTemplate = LOCAL_PROVIDER_TEMPLATES.lmstudio;\n\t\t\tconst ollamaTemplate = LOCAL_PROVIDER_TEMPLATES.ollama;\n\t\t\tconst targets = [\n\t\t\t\t...(lmstudioTemplate\n\t\t\t\t\t? [{ name: \"LM Studio\", url: lmstudioTemplate.baseUrl }]\n\t\t\t\t\t: []),\n\t\t\t\t...(ollamaTemplate\n\t\t\t\t\t? [{ name: \"Ollama\", url: ollamaTemplate.baseUrl }]\n\t\t\t\t\t: []),\n\t\t\t];\n\t\t\tfor (const target of targets) {\n\t\t\t\tconsole.log(await checkLocalEndpoint(target.name, target.url));\n\t\t\t}\n\t\t\trl.close();\n\t\t\treturn;\n\t\t}\n\n\t\tconst templateKey = choice === \"2\" ? \"ollama\" : \"lmstudio\";\n\t\tconst template = LOCAL_PROVIDER_TEMPLATES[templateKey];\n\t\tif (!template) {\n\t\t\tconsole.log(chalk.red(`\\nUnknown template: ${templateKey}`));\n\t\t\trl.close();\n\t\t\treturn;\n\t\t}\n\n\t\tconst scope = (\n\t\t\tawait rl.question(\n\t\t\t\tchalk.cyan(\n\t\t\t\t\t\"\\nSave provider to:\\n 1) Project (.maestro/local.json)\\n 2) Home (~/.maestro/local.json)\\n\\nChoice (1-2): \",\n\t\t\t\t),\n\t\t\t)\n\t\t).trim();\n\t\tconst targetDir =\n\t\t\tscope === \"2\" ? PATHS.MAESTRO_HOME : join(process.cwd(), \".maestro\");\n\t\tmkdirSync(targetDir, { recursive: true });\n\t\tconst localPath = join(targetDir, \"local.json\");\n\t\tconst config = loadLocalConfig(localPath);\n\n\t\tconst providerId =\n\t\t\t(\n\t\t\t\tawait rl.question(chalk.cyan(`\\nProvider id (${template.id}): `))\n\t\t\t).trim() || template.id;\n\t\tconst providerName =\n\t\t\t(\n\t\t\t\tawait rl.question(chalk.cyan(`Provider name (${template.name}): `))\n\t\t\t).trim() || template.name;\n\t\tconst baseUrl =\n\t\t\t(\n\t\t\t\tawait rl.question(chalk.cyan(`Base URL (${template.baseUrl}): `))\n\t\t\t).trim() || template.baseUrl;\n\t\tconst modelId =\n\t\t\t(\n\t\t\t\tawait rl.question(chalk.cyan(`Model id (${template.model.id}): `))\n\t\t\t).trim() || template.model.id;\n\t\tconst modelName =\n\t\t\t(\n\t\t\t\tawait rl.question(chalk.cyan(`Model name (${template.model.name}): `))\n\t\t\t).trim() || template.model.name;\n\t\tconst contextWindowAnswer = (\n\t\t\tawait rl.question(\n\t\t\t\tchalk.cyan(`Context window (${template.model.contextWindow}): `),\n\t\t\t)\n\t\t).trim();\n\t\tconst maxTokensAnswer = (\n\t\t\tawait rl.question(\n\t\t\t\tchalk.cyan(`Max output tokens (${template.model.maxTokens}): `),\n\t\t\t)\n\t\t).trim();\n\t\tconst contextWindow =\n\t\t\tNumber.parseInt(contextWindowAnswer, 10) || template.model.contextWindow;\n\t\tconst maxTokens =\n\t\t\tNumber.parseInt(maxTokensAnswer, 10) || template.model.maxTokens;\n\n\t\tupsertLocalProvider(config, template, {\n\t\t\tid: providerId,\n\t\t\tname: providerName,\n\t\t\tbaseUrl,\n\t\t\tmodelId,\n\t\t\tmodelName,\n\t\t\tcontextWindow,\n\t\t\tmaxTokens,\n\t\t});\n\t\tif (!config.$schema) {\n\t\t\tconfig.$schema = \"https://composer-cli.dev/config.schema.json\";\n\t\t}\n\t\twriteFileSync(localPath, JSON.stringify(config, null, 2));\n\t\tconsole.log(`\\n${badge(\"Updated local config\", localPath, \"success\")}`);\n\t\tconsole.log(\n\t\t\tmuted(\n\t\t\t\t\"Reload your models (/model) after starting the local runtime to use the new provider.\",\n\t\t\t),\n\t\t);\n\t\tconsole.log(\n\t\t\tmuted(\"Tip: run `maestro config local` again to check connectivity.\"),\n\t\t);\n\n\t\trl.close();\n\t} catch (error) {\n\t\trl.close();\n\t\tthrow error;\n\t}\n}\n\n/**\n * Format bytes to human-readable string\n */\nfunction formatBytes(bytes: number): string {\n\tconst units = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\"];\n\tlet index = 0;\n\tlet value = bytes;\n\twhile (value >= 1024 && index < units.length - 1) {\n\t\tvalue /= 1024;\n\t\tindex += 1;\n\t}\n\treturn `${value.toFixed(1)} ${units[index]}`;\n}\n\nfunction formatModelLabel(model: {\n\tid: string;\n\treasoning?: boolean;\n\tinput?: string[];\n}): string {\n\tconst caps: string[] = [];\n\tif (model.reasoning) {\n\t\tcaps.push(\"thinking\");\n\t}\n\tif (model.input?.includes(\"image\")) {\n\t\tcaps.push(\"vision\");\n\t}\n\tconst suffix = caps.length ? ` ${chalk.dim(`[${caps.join(\", \")}]`)}` : \"\";\n\treturn `${model.id}${suffix}`;\n}\n"]}
@@ -1,2 +1,3 @@
1
- export declare function handleEvalOpsCommand(subcommand?: string): Promise<void>;
1
+ export declare function handleEvalOpsCommand(subcommand?: string, args?: string[]): Promise<void>;
2
+ export declare function handleEvalOpsStatus(): Promise<void>;
2
3
  //# sourceMappingURL=evalops.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"evalops.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/evalops.ts"],"names":[],"mappings":"AAIA,wBAAsB,oBAAoB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwB7E"}
1
+ {"version":3,"file":"evalops.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/evalops.ts"],"names":[],"mappings":"AAOA,wBAAsB,oBAAoB,CACzC,UAAU,CAAC,EAAE,MAAM,EACnB,IAAI,GAAE,MAAM,EAAO,GACjB,OAAO,CAAC,IAAI,CAAC,CAwBf;AA0BD,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAiBzD"}
@@ -1,11 +1,11 @@
1
1
  import chalk from "chalk";
2
+ import { formatManagedEvalOpsStatus, resolveManagedEvalOpsContext, } from "../../evalops/managed-context.js";
2
3
  import { hasOAuthCredentials, login, logout } from "../../oauth/index.js";
3
- import { loadOAuthCredentials } from "../../oauth/storage.js";
4
- export async function handleEvalOpsCommand(subcommand) {
4
+ export async function handleEvalOpsCommand(subcommand, args = []) {
5
5
  switch (subcommand) {
6
6
  case "init": {
7
7
  const { handleInitCommand } = await import("./init.js");
8
- await handleInitCommand();
8
+ await handleInitCommand(args);
9
9
  return;
10
10
  }
11
11
  case "login":
@@ -15,7 +15,7 @@ export async function handleEvalOpsCommand(subcommand) {
15
15
  await handleLogout();
16
16
  return;
17
17
  case "status":
18
- await handleStatus();
18
+ await handleEvalOpsStatus();
19
19
  return;
20
20
  default:
21
21
  console.error(chalk.red('Unknown evalops subcommand. Try "maestro init" for setup, or "maestro evalops login", "logout", or "status".'));
@@ -38,37 +38,17 @@ async function handleLogout() {
38
38
  await logout("evalops");
39
39
  console.log(chalk.green("Removed stored EvalOps credentials."));
40
40
  }
41
- async function handleStatus() {
41
+ export async function handleEvalOpsStatus() {
42
42
  if (!hasOAuthCredentials("evalops")) {
43
43
  console.log(chalk.yellow("No stored EvalOps credentials."));
44
44
  console.log(chalk.dim('Run "maestro evalops login" to authenticate with EvalOps.'));
45
45
  return;
46
46
  }
47
- const credentials = loadOAuthCredentials("evalops");
48
- const remainingMs = Math.max(0, (credentials?.expires ?? Date.now()) - Date.now());
49
- const minutes = Math.round(remainingMs / 60_000);
50
- const metadata = credentials?.metadata;
51
- const organizationId = typeof metadata?.organizationId === "string"
52
- ? metadata.organizationId
53
- : undefined;
54
- const providerRef = metadata?.providerRef &&
55
- typeof metadata.providerRef === "object" &&
56
- !Array.isArray(metadata.providerRef)
57
- ? metadata.providerRef
58
- : undefined;
59
47
  console.log(chalk.green("Stored EvalOps credentials detected."));
60
- if (organizationId) {
61
- console.log(chalk.dim(`Organization: ${organizationId}`));
48
+ const context = resolveManagedEvalOpsContext();
49
+ console.log(formatManagedEvalOpsStatus(context));
50
+ if (!context.managed) {
51
+ console.log(chalk.yellow('No EvalOps agent session yet. Run "maestro init".'));
62
52
  }
63
- if (providerRef) {
64
- const provider = typeof providerRef.provider === "string"
65
- ? providerRef.provider
66
- : "openai";
67
- const environment = typeof providerRef.environment === "string"
68
- ? providerRef.environment
69
- : "prod";
70
- console.log(chalk.dim(`Provider ref: ${provider}/${environment}`));
71
- }
72
- console.log(chalk.dim(`Access token expires in ~${minutes} minute${minutes === 1 ? "" : "s"} (auto-refresh enabled).`));
73
53
  }
74
54
  //# sourceMappingURL=evalops.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"evalops.js","sourceRoot":"","sources":["../../../src/cli/commands/evalops.ts"],"names":[],"mappings":"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","sourcesContent":["import chalk from \"chalk\";\nimport { hasOAuthCredentials, login, logout } from \"../../oauth/index.js\";\nimport { loadOAuthCredentials } from \"../../oauth/storage.js\";\n\nexport async function handleEvalOpsCommand(subcommand?: string): Promise<void> {\n\tswitch (subcommand) {\n\t\tcase \"init\": {\n\t\t\tconst { handleInitCommand } = await import(\"./init.js\");\n\t\t\tawait handleInitCommand();\n\t\t\treturn;\n\t\t}\n\t\tcase \"login\":\n\t\t\tawait handleLogin();\n\t\t\treturn;\n\t\tcase \"logout\":\n\t\t\tawait handleLogout();\n\t\t\treturn;\n\t\tcase \"status\":\n\t\t\tawait handleStatus();\n\t\t\treturn;\n\t\tdefault:\n\t\t\tconsole.error(\n\t\t\t\tchalk.red(\n\t\t\t\t\t'Unknown evalops subcommand. Try \"maestro init\" for setup, or \"maestro evalops login\", \"logout\", or \"status\".',\n\t\t\t\t),\n\t\t\t);\n\t\t\tprocess.exit(1);\n\t}\n}\n\nasync function handleLogin(): Promise<void> {\n\tconsole.log(chalk.bold(\"Maestro EvalOps Login\"));\n\tawait login(\"evalops\", {\n\t\tonAuthUrl: (url) => {\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) => console.log(chalk.dim(status)),\n\t});\n\tconsole.log(chalk.green(\"EvalOps credentials saved successfully.\"));\n\tconsole.log(\n\t\tchalk.dim('Try \"maestro --provider evalops --model gpt-4o-mini\".'),\n\t);\n}\n\nasync function handleLogout(): Promise<void> {\n\tawait logout(\"evalops\");\n\tconsole.log(chalk.green(\"Removed stored EvalOps credentials.\"));\n}\n\nasync function handleStatus(): Promise<void> {\n\tif (!hasOAuthCredentials(\"evalops\")) {\n\t\tconsole.log(chalk.yellow(\"No stored EvalOps credentials.\"));\n\t\tconsole.log(\n\t\t\tchalk.dim('Run \"maestro evalops login\" to authenticate with EvalOps.'),\n\t\t);\n\t\treturn;\n\t}\n\n\tconst credentials = loadOAuthCredentials(\"evalops\");\n\tconst remainingMs = Math.max(\n\t\t0,\n\t\t(credentials?.expires ?? Date.now()) - Date.now(),\n\t);\n\tconst minutes = Math.round(remainingMs / 60_000);\n\tconst metadata = credentials?.metadata;\n\tconst organizationId =\n\t\ttypeof metadata?.organizationId === \"string\"\n\t\t\t? metadata.organizationId\n\t\t\t: undefined;\n\tconst providerRef =\n\t\tmetadata?.providerRef &&\n\t\ttypeof metadata.providerRef === \"object\" &&\n\t\t!Array.isArray(metadata.providerRef)\n\t\t\t? (metadata.providerRef as Record<string, unknown>)\n\t\t\t: undefined;\n\n\tconsole.log(chalk.green(\"Stored EvalOps credentials detected.\"));\n\tif (organizationId) {\n\t\tconsole.log(chalk.dim(`Organization: ${organizationId}`));\n\t}\n\tif (providerRef) {\n\t\tconst provider =\n\t\t\ttypeof providerRef.provider === \"string\"\n\t\t\t\t? providerRef.provider\n\t\t\t\t: \"openai\";\n\t\tconst environment =\n\t\t\ttypeof providerRef.environment === \"string\"\n\t\t\t\t? providerRef.environment\n\t\t\t\t: \"prod\";\n\t\tconsole.log(chalk.dim(`Provider ref: ${provider}/${environment}`));\n\t}\n\tconsole.log(\n\t\tchalk.dim(\n\t\t\t`Access token expires in ~${minutes} minute${minutes === 1 ? \"\" : \"s\"} (auto-refresh enabled).`,\n\t\t),\n\t);\n}\n"]}
1
+ {"version":3,"file":"evalops.js","sourceRoot":"","sources":["../../../src/cli/commands/evalops.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACN,0BAA0B,EAC1B,4BAA4B,GAC5B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE1E,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACzC,UAAmB,EACnB,OAAiB,EAAE;IAEnB,QAAQ,UAAU,EAAE,CAAC;QACpB,KAAK,MAAM,CAAC,CAAC,CAAC;YACb,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;YACxD,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO;QACR,CAAC;QACD,KAAK,OAAO;YACX,MAAM,WAAW,EAAE,CAAC;YACpB,OAAO;QACR,KAAK,QAAQ;YACZ,MAAM,YAAY,EAAE,CAAC;YACrB,OAAO;QACR,KAAK,QAAQ;YACZ,MAAM,mBAAmB,EAAE,CAAC;YAC5B,OAAO;QACR;YACC,OAAO,CAAC,KAAK,CACZ,KAAK,CAAC,GAAG,CACR,8GAA8G,CAC9G,CACD,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACF,CAAC;AAED,KAAK,UAAU,WAAW;IACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;IACjD,MAAM,KAAK,CAAC,SAAS,EAAE;QACtB,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;YAClB,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,MAAM,CACX,6DAA6D,CAC7D,CACD,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,CAAC;QACD,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;KACpD,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAClE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY;IAC1B,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACxC,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,GAAG,CAAC,2DAA2D,CAAC,CACtE,CAAC;QACF,OAAO;IACR,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,4BAA4B,EAAE,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAC;IACjD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,MAAM,CAAC,mDAAmD,CAAC,CACjE,CAAC;IACH,CAAC;AACF,CAAC","sourcesContent":["import chalk from \"chalk\";\nimport {\n\tformatManagedEvalOpsStatus,\n\tresolveManagedEvalOpsContext,\n} from \"../../evalops/managed-context.js\";\nimport { hasOAuthCredentials, login, logout } from \"../../oauth/index.js\";\n\nexport async function handleEvalOpsCommand(\n\tsubcommand?: string,\n\targs: string[] = [],\n): Promise<void> {\n\tswitch (subcommand) {\n\t\tcase \"init\": {\n\t\t\tconst { handleInitCommand } = await import(\"./init.js\");\n\t\t\tawait handleInitCommand(args);\n\t\t\treturn;\n\t\t}\n\t\tcase \"login\":\n\t\t\tawait handleLogin();\n\t\t\treturn;\n\t\tcase \"logout\":\n\t\t\tawait handleLogout();\n\t\t\treturn;\n\t\tcase \"status\":\n\t\t\tawait handleEvalOpsStatus();\n\t\t\treturn;\n\t\tdefault:\n\t\t\tconsole.error(\n\t\t\t\tchalk.red(\n\t\t\t\t\t'Unknown evalops subcommand. Try \"maestro init\" for setup, or \"maestro evalops login\", \"logout\", or \"status\".',\n\t\t\t\t),\n\t\t\t);\n\t\t\tprocess.exit(1);\n\t}\n}\n\nasync function handleLogin(): Promise<void> {\n\tconsole.log(chalk.bold(\"Maestro EvalOps Login\"));\n\tawait login(\"evalops\", {\n\t\tonAuthUrl: (url) => {\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) => console.log(chalk.dim(status)),\n\t});\n\tconsole.log(chalk.green(\"EvalOps credentials saved successfully.\"));\n\tconsole.log(\n\t\tchalk.dim('Try \"maestro --provider evalops --model gpt-4o-mini\".'),\n\t);\n}\n\nasync function handleLogout(): Promise<void> {\n\tawait logout(\"evalops\");\n\tconsole.log(chalk.green(\"Removed stored EvalOps credentials.\"));\n}\n\nexport async function handleEvalOpsStatus(): Promise<void> {\n\tif (!hasOAuthCredentials(\"evalops\")) {\n\t\tconsole.log(chalk.yellow(\"No stored EvalOps credentials.\"));\n\t\tconsole.log(\n\t\t\tchalk.dim('Run \"maestro evalops login\" to authenticate with EvalOps.'),\n\t\t);\n\t\treturn;\n\t}\n\n\tconsole.log(chalk.green(\"Stored EvalOps credentials detected.\"));\n\tconst context = resolveManagedEvalOpsContext();\n\tconsole.log(formatManagedEvalOpsStatus(context));\n\tif (!context.managed) {\n\t\tconsole.log(\n\t\t\tchalk.yellow('No EvalOps agent session yet. Run \"maestro init\".'),\n\t\t);\n\t}\n}\n"]}
@@ -1,4 +1,6 @@
1
- import { type EvalOpsInitOptions } from "../../evalops/agent-bootstrap.js";
1
+ import { type EvalOpsInitOptions, bootstrapEvalOpsAgent } from "../../evalops/agent-bootstrap.js";
2
+ export declare function formatInitHelp(): string;
2
3
  export declare function parseInitArgs(args: string[]): EvalOpsInitOptions;
4
+ export declare function formatInitSuccess(result: Awaited<ReturnType<typeof bootstrapEvalOpsAgent>>): string;
3
5
  export declare function handleInitCommand(args?: string[]): Promise<void>;
4
6
  //# sourceMappingURL=init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AACA,OAAO,EACN,KAAK,kBAAkB,EAEvB,MAAM,kCAAkC,CAAC;AA4B1C,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,kBAAkB,CA2EhE;AAED,wBAAsB,iBAAiB,CAAC,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA2D1E"}
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,CAkBvC;AA4BD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,kBAAkB,CA2EhE;AAMD,wBAAgB,iBAAiB,CAChC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,GACvD,MAAM,CAoCR;AAED,wBAAsB,iBAAiB,CAAC,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA+C1E"}
@@ -1,5 +1,23 @@
1
1
  import chalk from "chalk";
2
2
  import { bootstrapEvalOpsAgent, } from "../../evalops/agent-bootstrap.js";
3
+ import { muted, sectionHeading } from "../../style/theme.js";
4
+ export function formatInitHelp() {
5
+ return `${sectionHeading("maestro init")}${muted(` maestro init Login, create or reuse an API key, and register this agent
6
+ maestro init --rotate-key Replace the stored agent MCP API key
7
+ maestro init --mcp-url <url> Override the EvalOps agent MCP endpoint
8
+ maestro init --json Emit machine-readable bootstrap output
9
+
10
+ Options
11
+ --agent-type <type> Agent type to register, defaults to maestro
12
+ --surface <surface> Surface to register, defaults to cli
13
+ --workspace, --workspace-id <id> Workspace to associate with the registration
14
+ --scope <scope[,scope...]> Registration scopes to request
15
+ --key-scope <scope[,scope...]> API key scopes to request
16
+ --expires-in-days <days> API key TTL in days
17
+ --force-login Re-run EvalOps OAuth before bootstrapping
18
+ --manifest-url <url> Override the agent MCP manifest URL
19
+ --ttl-seconds <seconds> Registration TTL in seconds`)}`;
20
+ }
3
21
  function readValue(args, index, flag) {
4
22
  const value = args[index + 1];
5
23
  if (!value || value.startsWith("-")) {
@@ -90,7 +108,43 @@ export function parseInitArgs(args) {
90
108
  }
91
109
  return options;
92
110
  }
111
+ function checkLine(text) {
112
+ return `${chalk.green("✓")} ${text}`;
113
+ }
114
+ export function formatInitSuccess(result) {
115
+ const keyMode = result.apiKeyCreated ? "Created" : "Reused";
116
+ const authenticatedAs = result.authenticatedAs ?? "EvalOps";
117
+ const governedActions = result.governedActionsLoaded ?? 0;
118
+ const lines = [
119
+ chalk.bold("EvalOps Maestro bootstrap"),
120
+ "",
121
+ checkLine(`Authenticated as ${authenticatedAs}`),
122
+ checkLine(`${keyMode} managed inference key`),
123
+ checkLine("Registered local agent runtime"),
124
+ checkLine(`Loaded ${governedActions} governed actions`),
125
+ checkLine(result.approvalPolicyAttached
126
+ ? "Attached default approval policy"
127
+ : "Queued approval policy review"),
128
+ checkLine(result.traceIngestionStarted
129
+ ? "Started trace ingestion"
130
+ : "Requested trace ingestion"),
131
+ checkLine(result.governedInferenceCheckRan
132
+ ? "Ran first governed inference check"
133
+ : "Queued first governed inference check"),
134
+ checkLine(result.evidenceEventPublished
135
+ ? "Published evidence event"
136
+ : "Queued evidence event"),
137
+ "",
138
+ "Open console:",
139
+ result.consoleUrl ?? "https://app.evalops.dev/overview?env=production",
140
+ ];
141
+ return lines.join("\n");
142
+ }
93
143
  export async function handleInitCommand(args = []) {
144
+ if (args.includes("--help") || args.includes("-h")) {
145
+ console.log(formatInitHelp());
146
+ return;
147
+ }
94
148
  let options;
95
149
  try {
96
150
  options = parseInitArgs(args);
@@ -99,42 +153,28 @@ export async function handleInitCommand(args = []) {
99
153
  console.error(chalk.red(error instanceof Error ? error.message : String(error)));
100
154
  process.exit(1);
101
155
  }
102
- if (!options.json) {
103
- console.log(chalk.bold("Maestro EvalOps Init"));
104
- }
105
156
  const result = await bootstrapEvalOpsAgent(options, {
106
157
  onAuthUrl: (url) => {
107
158
  if (options.json) {
159
+ console.error("Open this URL in your browser to authenticate with EvalOps:");
160
+ console.error(url);
108
161
  return;
109
162
  }
110
163
  console.log(chalk.yellow("Open this URL in your browser to authenticate with EvalOps:"));
111
164
  console.log(chalk.underline(url));
112
165
  },
113
166
  onStatus: (status) => {
114
- if (!options.json) {
115
- console.log(chalk.dim(status.message));
167
+ if (options.json) {
168
+ console.error(status.message);
169
+ return;
116
170
  }
171
+ console.log(chalk.dim(status.message));
117
172
  },
118
173
  });
119
174
  if (options.json) {
120
175
  console.log(JSON.stringify(result, null, 2));
121
176
  return;
122
177
  }
123
- console.log(chalk.green("EvalOps agent bootstrap complete."));
124
- console.log(chalk.dim(`MCP endpoint: ${result.endpoint}`));
125
- if (result.organizationId) {
126
- console.log(chalk.dim(`Organization: ${result.organizationId}`));
127
- }
128
- if (result.agentId) {
129
- console.log(chalk.dim(`Agent: ${result.agentId}`));
130
- }
131
- if (result.runId) {
132
- console.log(chalk.dim(`Run: ${result.runId}`));
133
- }
134
- if (result.keyPrefix) {
135
- const keyMode = result.apiKeyCreated ? "created" : "reused";
136
- console.log(chalk.dim(`API key ${keyMode}: ${result.keyPrefix}`));
137
- }
138
- console.log(chalk.dim("Stored EvalOps MCP credentials locally for future Maestro sessions."));
178
+ console.log(formatInitSuccess(result));
139
179
  }
140
180
  //# sourceMappingURL=init.js.map