mcp-agent-foundry 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +477 -0
- package/dist/cli/install-skills.d.ts +11 -0
- package/dist/cli/install-skills.d.ts.map +1 -0
- package/dist/cli/install-skills.js +143 -0
- package/dist/cli/install-skills.js.map +1 -0
- package/dist/cli/recovery-commands.d.ts +41 -0
- package/dist/cli/recovery-commands.d.ts.map +1 -0
- package/dist/cli/recovery-commands.js +241 -0
- package/dist/cli/recovery-commands.js.map +1 -0
- package/dist/cli/setup-wizard.d.ts +25 -0
- package/dist/cli/setup-wizard.d.ts.map +1 -0
- package/dist/cli/setup-wizard.js +1417 -0
- package/dist/cli/setup-wizard.js.map +1 -0
- package/dist/cli/test-connection.d.ts +45 -0
- package/dist/cli/test-connection.d.ts.map +1 -0
- package/dist/cli/test-connection.js +317 -0
- package/dist/cli/test-connection.js.map +1 -0
- package/dist/cli.d.ts +75 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +704 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/defaults.d.ts +57 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +99 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +14 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +22 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/manager.d.ts +184 -0
- package/dist/config/manager.d.ts.map +1 -0
- package/dist/config/manager.js +347 -0
- package/dist/config/manager.js.map +1 -0
- package/dist/config/merger.d.ts +76 -0
- package/dist/config/merger.d.ts.map +1 -0
- package/dist/config/merger.js +189 -0
- package/dist/config/merger.js.map +1 -0
- package/dist/config/schema.d.ts +20 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +20 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/validator.d.ts +254 -0
- package/dist/config/validator.d.ts.map +1 -0
- package/dist/config/validator.js +363 -0
- package/dist/config/validator.js.map +1 -0
- package/dist/config/worktree-defaults.d.ts +23 -0
- package/dist/config/worktree-defaults.d.ts.map +1 -0
- package/dist/config/worktree-defaults.js +78 -0
- package/dist/config/worktree-defaults.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/tools/compare-agents.d.ts +25 -0
- package/dist/mcp/tools/compare-agents.d.ts.map +1 -0
- package/dist/mcp/tools/compare-agents.js +177 -0
- package/dist/mcp/tools/compare-agents.js.map +1 -0
- package/dist/mcp/tools/critique-plan.d.ts +26 -0
- package/dist/mcp/tools/critique-plan.d.ts.map +1 -0
- package/dist/mcp/tools/critique-plan.js +162 -0
- package/dist/mcp/tools/critique-plan.js.map +1 -0
- package/dist/mcp/tools/design-feedback.d.ts +26 -0
- package/dist/mcp/tools/design-feedback.d.ts.map +1 -0
- package/dist/mcp/tools/design-feedback.js +216 -0
- package/dist/mcp/tools/design-feedback.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +50 -0
- package/dist/mcp/tools/index.d.ts.map +1 -0
- package/dist/mcp/tools/index.js +191 -0
- package/dist/mcp/tools/index.js.map +1 -0
- package/dist/mcp/tools/invoke-agent.d.ts +25 -0
- package/dist/mcp/tools/invoke-agent.d.ts.map +1 -0
- package/dist/mcp/tools/invoke-agent.js +141 -0
- package/dist/mcp/tools/invoke-agent.js.map +1 -0
- package/dist/mcp/tools/review-code.d.ts +25 -0
- package/dist/mcp/tools/review-code.d.ts.map +1 -0
- package/dist/mcp/tools/review-code.js +170 -0
- package/dist/mcp/tools/review-code.js.map +1 -0
- package/dist/mcp/tools/tasks/claim-next-task.d.ts +22 -0
- package/dist/mcp/tools/tasks/claim-next-task.d.ts.map +1 -0
- package/dist/mcp/tools/tasks/claim-next-task.js +203 -0
- package/dist/mcp/tools/tasks/claim-next-task.js.map +1 -0
- package/dist/mcp/tools/tasks/create-routed-task.d.ts +17 -0
- package/dist/mcp/tools/tasks/create-routed-task.d.ts.map +1 -0
- package/dist/mcp/tools/tasks/create-routed-task.js +178 -0
- package/dist/mcp/tools/tasks/create-routed-task.js.map +1 -0
- package/dist/mcp/tools/tasks/execute-pipeline.d.ts +22 -0
- package/dist/mcp/tools/tasks/execute-pipeline.d.ts.map +1 -0
- package/dist/mcp/tools/tasks/execute-pipeline.js +401 -0
- package/dist/mcp/tools/tasks/execute-pipeline.js.map +1 -0
- package/dist/mcp/tools/tasks/execute-task.d.ts +32 -0
- package/dist/mcp/tools/tasks/execute-task.d.ts.map +1 -0
- package/dist/mcp/tools/tasks/execute-task.js +284 -0
- package/dist/mcp/tools/tasks/execute-task.js.map +1 -0
- package/dist/mcp/tools/tasks/get-pipeline-status.d.ts +26 -0
- package/dist/mcp/tools/tasks/get-pipeline-status.d.ts.map +1 -0
- package/dist/mcp/tools/tasks/get-pipeline-status.js +460 -0
- package/dist/mcp/tools/tasks/get-pipeline-status.js.map +1 -0
- package/dist/mcp/tools/tasks/index.d.ts +36 -0
- package/dist/mcp/tools/tasks/index.d.ts.map +1 -0
- package/dist/mcp/tools/tasks/index.js +66 -0
- package/dist/mcp/tools/tasks/index.js.map +1 -0
- package/dist/mcp/tools/worktree/cleanup-worktrees.d.ts +17 -0
- package/dist/mcp/tools/worktree/cleanup-worktrees.d.ts.map +1 -0
- package/dist/mcp/tools/worktree/cleanup-worktrees.js +147 -0
- package/dist/mcp/tools/worktree/cleanup-worktrees.js.map +1 -0
- package/dist/mcp/tools/worktree/get-worktree-status.d.ts +17 -0
- package/dist/mcp/tools/worktree/get-worktree-status.d.ts.map +1 -0
- package/dist/mcp/tools/worktree/get-worktree-status.js +123 -0
- package/dist/mcp/tools/worktree/get-worktree-status.js.map +1 -0
- package/dist/mcp/tools/worktree/index.d.ts +41 -0
- package/dist/mcp/tools/worktree/index.d.ts.map +1 -0
- package/dist/mcp/tools/worktree/index.js +69 -0
- package/dist/mcp/tools/worktree/index.js.map +1 -0
- package/dist/mcp/tools/worktree/list-worktrees.d.ts +17 -0
- package/dist/mcp/tools/worktree/list-worktrees.d.ts.map +1 -0
- package/dist/mcp/tools/worktree/list-worktrees.js +136 -0
- package/dist/mcp/tools/worktree/list-worktrees.js.map +1 -0
- package/dist/mcp/tools/worktree/resolve-conflicts.d.ts +19 -0
- package/dist/mcp/tools/worktree/resolve-conflicts.d.ts.map +1 -0
- package/dist/mcp/tools/worktree/resolve-conflicts.js +228 -0
- package/dist/mcp/tools/worktree/resolve-conflicts.js.map +1 -0
- package/dist/mcp/transport/stdio.d.ts +13 -0
- package/dist/mcp/transport/stdio.d.ts.map +1 -0
- package/dist/mcp/transport/stdio.js +15 -0
- package/dist/mcp/transport/stdio.js.map +1 -0
- package/dist/observability/logger.d.ts +137 -0
- package/dist/observability/logger.d.ts.map +1 -0
- package/dist/observability/logger.js +235 -0
- package/dist/observability/logger.js.map +1 -0
- package/dist/observability/metrics.d.ts +250 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/metrics.js +364 -0
- package/dist/observability/metrics.js.map +1 -0
- package/dist/persistence/index.d.ts +9 -0
- package/dist/persistence/index.d.ts.map +1 -0
- package/dist/persistence/index.js +9 -0
- package/dist/persistence/index.js.map +1 -0
- package/dist/persistence/state-schema.d.ts +116 -0
- package/dist/persistence/state-schema.d.ts.map +1 -0
- package/dist/persistence/state-schema.js +28 -0
- package/dist/persistence/state-schema.js.map +1 -0
- package/dist/persistence/state-store.d.ts +111 -0
- package/dist/persistence/state-store.d.ts.map +1 -0
- package/dist/persistence/state-store.js +291 -0
- package/dist/persistence/state-store.js.map +1 -0
- package/dist/providers/anthropic.d.ts +164 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +500 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/base.d.ts +151 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +227 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/gemini.d.ts +85 -0
- package/dist/providers/gemini.d.ts.map +1 -0
- package/dist/providers/gemini.js +414 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/kimi.d.ts +19 -0
- package/dist/providers/kimi.d.ts.map +1 -0
- package/dist/providers/kimi.js +20 -0
- package/dist/providers/kimi.js.map +1 -0
- package/dist/providers/manager.d.ts +160 -0
- package/dist/providers/manager.d.ts.map +1 -0
- package/dist/providers/manager.js +264 -0
- package/dist/providers/manager.js.map +1 -0
- package/dist/providers/ollama.d.ts +83 -0
- package/dist/providers/ollama.d.ts.map +1 -0
- package/dist/providers/ollama.js +453 -0
- package/dist/providers/ollama.js.map +1 -0
- package/dist/providers/openai.d.ts +96 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +457 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/zai.d.ts +19 -0
- package/dist/providers/zai.d.ts.map +1 -0
- package/dist/providers/zai.js +20 -0
- package/dist/providers/zai.js.map +1 -0
- package/dist/router/context-manager.d.ts +2 -0
- package/dist/router/context-manager.d.ts.map +1 -0
- package/dist/router/context-manager.js +3 -0
- package/dist/router/context-manager.js.map +1 -0
- package/dist/router/engine.d.ts +169 -0
- package/dist/router/engine.d.ts.map +1 -0
- package/dist/router/engine.js +435 -0
- package/dist/router/engine.js.map +1 -0
- package/dist/router/pattern-executor.d.ts +317 -0
- package/dist/router/pattern-executor.d.ts.map +1 -0
- package/dist/router/pattern-executor.js +571 -0
- package/dist/router/pattern-executor.js.map +1 -0
- package/dist/router/role-resolver.d.ts +59 -0
- package/dist/router/role-resolver.d.ts.map +1 -0
- package/dist/router/role-resolver.js +95 -0
- package/dist/router/role-resolver.js.map +1 -0
- package/dist/server.d.ts +32 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +223 -0
- package/dist/server.js.map +1 -0
- package/dist/startup.d.ts +78 -0
- package/dist/startup.d.ts.map +1 -0
- package/dist/startup.js +107 -0
- package/dist/startup.js.map +1 -0
- package/dist/tasks/coordinator.d.ts +141 -0
- package/dist/tasks/coordinator.d.ts.map +1 -0
- package/dist/tasks/coordinator.js +331 -0
- package/dist/tasks/coordinator.js.map +1 -0
- package/dist/tasks/index.d.ts +13 -0
- package/dist/tasks/index.d.ts.map +1 -0
- package/dist/tasks/index.js +13 -0
- package/dist/tasks/index.js.map +1 -0
- package/dist/tasks/persistent-state-coordinator.d.ts +89 -0
- package/dist/tasks/persistent-state-coordinator.d.ts.map +1 -0
- package/dist/tasks/persistent-state-coordinator.js +371 -0
- package/dist/tasks/persistent-state-coordinator.js.map +1 -0
- package/dist/tasks/pipeline-manager.d.ts +103 -0
- package/dist/tasks/pipeline-manager.d.ts.map +1 -0
- package/dist/tasks/pipeline-manager.js +358 -0
- package/dist/tasks/pipeline-manager.js.map +1 -0
- package/dist/tasks/state-coordinator.d.ts +79 -0
- package/dist/tasks/state-coordinator.d.ts.map +1 -0
- package/dist/tasks/state-coordinator.js +200 -0
- package/dist/tasks/state-coordinator.js.map +1 -0
- package/dist/tasks/worker-mode.d.ts +65 -0
- package/dist/tasks/worker-mode.d.ts.map +1 -0
- package/dist/tasks/worker-mode.js +208 -0
- package/dist/tasks/worker-mode.js.map +1 -0
- package/dist/translation/errors.d.ts +203 -0
- package/dist/translation/errors.d.ts.map +1 -0
- package/dist/translation/errors.js +477 -0
- package/dist/translation/errors.js.map +1 -0
- package/dist/translation/index.d.ts +12 -0
- package/dist/translation/index.d.ts.map +1 -0
- package/dist/translation/index.js +32 -0
- package/dist/translation/index.js.map +1 -0
- package/dist/translation/messages.d.ts +295 -0
- package/dist/translation/messages.d.ts.map +1 -0
- package/dist/translation/messages.js +557 -0
- package/dist/translation/messages.js.map +1 -0
- package/dist/translation/streaming.d.ts +226 -0
- package/dist/translation/streaming.d.ts.map +1 -0
- package/dist/translation/streaming.js +520 -0
- package/dist/translation/streaming.js.map +1 -0
- package/dist/translation/tools.d.ts +209 -0
- package/dist/translation/tools.d.ts.map +1 -0
- package/dist/translation/tools.js +331 -0
- package/dist/translation/tools.js.map +1 -0
- package/dist/types.d.ts +747 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +86 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/circuit-breaker.d.ts +175 -0
- package/dist/utils/circuit-breaker.d.ts.map +1 -0
- package/dist/utils/circuit-breaker.js +315 -0
- package/dist/utils/circuit-breaker.js.map +1 -0
- package/dist/utils/env.d.ts +2 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +3 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/git.d.ts +58 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +197 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/index.d.ts +9 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +9 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/merge-ordering.d.ts +45 -0
- package/dist/utils/merge-ordering.d.ts.map +1 -0
- package/dist/utils/merge-ordering.js +128 -0
- package/dist/utils/merge-ordering.js.map +1 -0
- package/dist/utils/retry.d.ts +106 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +188 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/worktrees/branch-manager.d.ts +55 -0
- package/dist/worktrees/branch-manager.d.ts.map +1 -0
- package/dist/worktrees/branch-manager.js +129 -0
- package/dist/worktrees/branch-manager.js.map +1 -0
- package/dist/worktrees/conflict-handler.d.ts +72 -0
- package/dist/worktrees/conflict-handler.d.ts.map +1 -0
- package/dist/worktrees/conflict-handler.js +287 -0
- package/dist/worktrees/conflict-handler.js.map +1 -0
- package/dist/worktrees/conflict-parser.d.ts +28 -0
- package/dist/worktrees/conflict-parser.d.ts.map +1 -0
- package/dist/worktrees/conflict-parser.js +140 -0
- package/dist/worktrees/conflict-parser.js.map +1 -0
- package/dist/worktrees/index.d.ts +20 -0
- package/dist/worktrees/index.d.ts.map +1 -0
- package/dist/worktrees/index.js +20 -0
- package/dist/worktrees/index.js.map +1 -0
- package/dist/worktrees/instructions.d.ts +20 -0
- package/dist/worktrees/instructions.d.ts.map +1 -0
- package/dist/worktrees/instructions.js +84 -0
- package/dist/worktrees/instructions.js.map +1 -0
- package/dist/worktrees/manager.d.ts +76 -0
- package/dist/worktrees/manager.d.ts.map +1 -0
- package/dist/worktrees/manager.js +277 -0
- package/dist/worktrees/manager.js.map +1 -0
- package/dist/worktrees/pipeline-merge-orchestrator.d.ts +55 -0
- package/dist/worktrees/pipeline-merge-orchestrator.d.ts.map +1 -0
- package/dist/worktrees/pipeline-merge-orchestrator.js +221 -0
- package/dist/worktrees/pipeline-merge-orchestrator.js.map +1 -0
- package/dist/worktrees/pool.d.ts +95 -0
- package/dist/worktrees/pool.d.ts.map +1 -0
- package/dist/worktrees/pool.js +271 -0
- package/dist/worktrees/pool.js.map +1 -0
- package/dist/worktrees/recovery.d.ts +94 -0
- package/dist/worktrees/recovery.d.ts.map +1 -0
- package/dist/worktrees/recovery.js +371 -0
- package/dist/worktrees/recovery.js.map +1 -0
- package/dist/worktrees/resource-manager.d.ts +74 -0
- package/dist/worktrees/resource-manager.d.ts.map +1 -0
- package/dist/worktrees/resource-manager.js +228 -0
- package/dist/worktrees/resource-manager.js.map +1 -0
- package/package.json +88 -0
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Manager for AgentRouter
|
|
3
|
+
*
|
|
4
|
+
* Handles loading, merging, validating, and watching configuration files.
|
|
5
|
+
* Supports multiple config sources with priority-based merging and
|
|
6
|
+
* environment variable interpolation.
|
|
7
|
+
*/
|
|
8
|
+
import { EventEmitter } from 'events';
|
|
9
|
+
import { watch } from 'fs';
|
|
10
|
+
import { readFile, access, constants } from 'fs/promises';
|
|
11
|
+
import { parse as parseYAML } from 'yaml';
|
|
12
|
+
import { ConfigurationError, } from '../types.js';
|
|
13
|
+
import { DEFAULT_CONFIG, getAllConfigPaths } from './defaults.js';
|
|
14
|
+
import { ConfigMerger } from './merger.js';
|
|
15
|
+
import { ConfigValidator } from './validator.js';
|
|
16
|
+
/**
|
|
17
|
+
* Configuration manager with hot reload support.
|
|
18
|
+
* Extends EventEmitter for change notifications.
|
|
19
|
+
*/
|
|
20
|
+
export class ConfigManager extends EventEmitter {
|
|
21
|
+
config;
|
|
22
|
+
validator;
|
|
23
|
+
merger;
|
|
24
|
+
configPaths;
|
|
25
|
+
watchers = [];
|
|
26
|
+
options;
|
|
27
|
+
loadedPaths = new Set();
|
|
28
|
+
/**
|
|
29
|
+
* Private constructor - use static load() method to create instances.
|
|
30
|
+
*/
|
|
31
|
+
constructor(options = {}) {
|
|
32
|
+
super();
|
|
33
|
+
this.validator = new ConfigValidator();
|
|
34
|
+
this.merger = new ConfigMerger();
|
|
35
|
+
this.options = {
|
|
36
|
+
configPath: options.configPath ?? '',
|
|
37
|
+
watch: options.watch ?? true,
|
|
38
|
+
allowMissingEnv: options.allowMissingEnv ?? false,
|
|
39
|
+
};
|
|
40
|
+
// Build config paths list with CLI override at highest priority
|
|
41
|
+
const basePaths = getAllConfigPaths();
|
|
42
|
+
this.configPaths = this.options.configPath
|
|
43
|
+
? [this.options.configPath, ...basePaths]
|
|
44
|
+
: basePaths;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Load configuration and create a ConfigManager instance.
|
|
48
|
+
* This is the primary way to create a ConfigManager.
|
|
49
|
+
*
|
|
50
|
+
* @param options - Configuration options
|
|
51
|
+
* @returns Promise resolving to initialized ConfigManager
|
|
52
|
+
* @throws ConfigurationError if config loading fails
|
|
53
|
+
*/
|
|
54
|
+
static async load(options = {}) {
|
|
55
|
+
const manager = new ConfigManager(options);
|
|
56
|
+
await manager.loadConfig();
|
|
57
|
+
if (manager.options.watch) {
|
|
58
|
+
manager.watchConfig();
|
|
59
|
+
}
|
|
60
|
+
return manager;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Load and merge configuration from all sources.
|
|
64
|
+
* Config files are loaded in reverse priority order (lowest first)
|
|
65
|
+
* so that higher priority configs override lower ones.
|
|
66
|
+
*/
|
|
67
|
+
async loadConfig() {
|
|
68
|
+
// Start with default config
|
|
69
|
+
let merged = structuredClone(DEFAULT_CONFIG);
|
|
70
|
+
this.loadedPaths.clear();
|
|
71
|
+
// Load configs in reverse priority order (lowest to highest)
|
|
72
|
+
// System configs first, then user configs, then project configs
|
|
73
|
+
const reversedPaths = [...this.configPaths].reverse();
|
|
74
|
+
for (const configPath of reversedPaths) {
|
|
75
|
+
try {
|
|
76
|
+
// Check if file exists
|
|
77
|
+
await access(configPath, constants.R_OK);
|
|
78
|
+
// Read and parse YAML
|
|
79
|
+
const content = await readFile(configPath, 'utf-8');
|
|
80
|
+
const parsed = parseYAML(content);
|
|
81
|
+
if (parsed === null || parsed === undefined) {
|
|
82
|
+
// Empty file, skip
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
// Validate as partial config (not all fields required)
|
|
86
|
+
this.validator.validatePartialConfig(parsed);
|
|
87
|
+
// Interpolate environment variables
|
|
88
|
+
const interpolated = this.interpolateEnv(parsed);
|
|
89
|
+
// Merge into accumulated config
|
|
90
|
+
merged = this.merger.merge(merged, interpolated);
|
|
91
|
+
this.loadedPaths.add(configPath);
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
// ENOENT is expected for non-existent config files
|
|
95
|
+
if (error.code === 'ENOENT') {
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
// For explicitly provided config path, throw error
|
|
99
|
+
if (configPath === this.options.configPath) {
|
|
100
|
+
throw new ConfigurationError(`Failed to load config from ${configPath}: ${error.message}`, error);
|
|
101
|
+
}
|
|
102
|
+
// For other paths, log warning but continue
|
|
103
|
+
console.warn(`Warning: Failed to load config from ${configPath}:`, error.message);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Final validation of merged config
|
|
107
|
+
this.config = this.validator.validate(merged);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Interpolate environment variables in configuration values.
|
|
111
|
+
* Replaces ${VAR_NAME} patterns with the corresponding env value.
|
|
112
|
+
*
|
|
113
|
+
* @param obj - Object to interpolate
|
|
114
|
+
* @returns Object with interpolated values
|
|
115
|
+
* @throws ConfigurationError if required env var is missing
|
|
116
|
+
*/
|
|
117
|
+
interpolateEnv(obj) {
|
|
118
|
+
if (typeof obj === 'string') {
|
|
119
|
+
return obj.replace(/\$\{([^}]+)\}/g, (match, envVar) => {
|
|
120
|
+
const value = process.env[envVar];
|
|
121
|
+
if (value === undefined) {
|
|
122
|
+
if (this.options.allowMissingEnv) {
|
|
123
|
+
// Keep the placeholder for missing env vars
|
|
124
|
+
return match;
|
|
125
|
+
}
|
|
126
|
+
throw new ConfigurationError(`Environment variable ${envVar} is not set`);
|
|
127
|
+
}
|
|
128
|
+
return value;
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
if (Array.isArray(obj)) {
|
|
132
|
+
return obj.map((item) => this.interpolateEnv(item));
|
|
133
|
+
}
|
|
134
|
+
if (typeof obj === 'object' && obj !== null) {
|
|
135
|
+
return Object.fromEntries(Object.entries(obj).map(([key, value]) => [
|
|
136
|
+
key,
|
|
137
|
+
this.interpolateEnv(value),
|
|
138
|
+
]));
|
|
139
|
+
}
|
|
140
|
+
return obj;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Watch loaded config files for changes.
|
|
144
|
+
* Emits 'change' event when config is successfully reloaded.
|
|
145
|
+
* Emits 'error' event when reload fails.
|
|
146
|
+
*/
|
|
147
|
+
watchConfig() {
|
|
148
|
+
// Watch all paths that were successfully loaded
|
|
149
|
+
for (const configPath of this.loadedPaths) {
|
|
150
|
+
try {
|
|
151
|
+
const watcher = watch(configPath, async (eventType) => {
|
|
152
|
+
if (eventType === 'change') {
|
|
153
|
+
console.log(`Config file changed: ${configPath}`);
|
|
154
|
+
try {
|
|
155
|
+
await this.loadConfig();
|
|
156
|
+
this.emit('change', this.config);
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
console.error('Failed to reload config:', error.message);
|
|
160
|
+
this.emit('error', error, configPath);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
this.watchers.push(watcher);
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
// File might not exist or be watchable, that's okay
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// Also watch paths that didn't exist - they might be created
|
|
171
|
+
for (const configPath of this.configPaths) {
|
|
172
|
+
if (this.loadedPaths.has(configPath)) {
|
|
173
|
+
continue; // Already watching
|
|
174
|
+
}
|
|
175
|
+
try {
|
|
176
|
+
const watcher = watch(configPath, async (eventType) => {
|
|
177
|
+
if (eventType === 'rename' || eventType === 'change') {
|
|
178
|
+
console.log(`Config file created: ${configPath}`);
|
|
179
|
+
try {
|
|
180
|
+
await this.loadConfig();
|
|
181
|
+
this.emit('change', this.config);
|
|
182
|
+
// Restart watchers to include new file
|
|
183
|
+
this.stopWatching();
|
|
184
|
+
this.watchConfig();
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
console.error('Failed to reload config:', error.message);
|
|
188
|
+
this.emit('error', error, configPath);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
this.watchers.push(watcher);
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
// File or directory doesn't exist, that's okay
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Stop watching config files.
|
|
201
|
+
*/
|
|
202
|
+
stopWatching() {
|
|
203
|
+
for (const watcher of this.watchers) {
|
|
204
|
+
watcher.close();
|
|
205
|
+
}
|
|
206
|
+
this.watchers = [];
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Manually reload configuration.
|
|
210
|
+
* Useful when programmatically updating config files.
|
|
211
|
+
*
|
|
212
|
+
* @returns Promise resolving when reload is complete
|
|
213
|
+
* @throws ConfigurationError if reload fails
|
|
214
|
+
*/
|
|
215
|
+
async reload() {
|
|
216
|
+
await this.loadConfig();
|
|
217
|
+
this.emit('change', this.config);
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Close the ConfigManager and stop watching files.
|
|
221
|
+
* Should be called when shutting down.
|
|
222
|
+
*/
|
|
223
|
+
close() {
|
|
224
|
+
this.stopWatching();
|
|
225
|
+
this.removeAllListeners();
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Get the full configuration object.
|
|
229
|
+
*
|
|
230
|
+
* @returns Complete configuration
|
|
231
|
+
*/
|
|
232
|
+
get() {
|
|
233
|
+
return this.config;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Get the version string from config.
|
|
237
|
+
*
|
|
238
|
+
* @returns Config version
|
|
239
|
+
*/
|
|
240
|
+
getVersion() {
|
|
241
|
+
return this.config.version;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Get all role configurations.
|
|
245
|
+
*
|
|
246
|
+
* @returns Map of role names to role configs
|
|
247
|
+
*/
|
|
248
|
+
getRoles() {
|
|
249
|
+
return this.config.roles;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Get a specific role configuration.
|
|
253
|
+
*
|
|
254
|
+
* @param roleName - Name of the role
|
|
255
|
+
* @returns Role configuration or undefined if not found
|
|
256
|
+
*/
|
|
257
|
+
getRole(roleName) {
|
|
258
|
+
return this.config.roles[roleName];
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Get all provider configurations.
|
|
262
|
+
*
|
|
263
|
+
* @returns Map of provider names to provider configs
|
|
264
|
+
*/
|
|
265
|
+
getProviders() {
|
|
266
|
+
return this.config.providers;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Get a specific provider configuration.
|
|
270
|
+
*
|
|
271
|
+
* @param providerName - Name of the provider
|
|
272
|
+
* @returns Provider configuration or undefined if not found
|
|
273
|
+
*/
|
|
274
|
+
getProvider(providerName) {
|
|
275
|
+
return this.config.providers[providerName];
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Get default configuration values.
|
|
279
|
+
*
|
|
280
|
+
* @returns Default config values
|
|
281
|
+
*/
|
|
282
|
+
getDefaults() {
|
|
283
|
+
return this.config.defaults;
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Get list of available role names.
|
|
287
|
+
*
|
|
288
|
+
* @returns Array of role names
|
|
289
|
+
*/
|
|
290
|
+
getRoleNames() {
|
|
291
|
+
return Object.keys(this.config.roles);
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Get list of available provider names.
|
|
295
|
+
*
|
|
296
|
+
* @returns Array of provider names
|
|
297
|
+
*/
|
|
298
|
+
getProviderNames() {
|
|
299
|
+
return Object.keys(this.config.providers);
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Check if a role exists.
|
|
303
|
+
*
|
|
304
|
+
* @param roleName - Name of the role to check
|
|
305
|
+
* @returns True if role exists
|
|
306
|
+
*/
|
|
307
|
+
hasRole(roleName) {
|
|
308
|
+
return roleName in this.config.roles;
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Check if a provider exists.
|
|
312
|
+
*
|
|
313
|
+
* @param providerName - Name of the provider to check
|
|
314
|
+
* @returns True if provider exists
|
|
315
|
+
*/
|
|
316
|
+
hasProvider(providerName) {
|
|
317
|
+
return providerName in this.config.providers;
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Get the paths of all loaded config files.
|
|
321
|
+
*
|
|
322
|
+
* @returns Array of loaded config file paths
|
|
323
|
+
*/
|
|
324
|
+
getLoadedPaths() {
|
|
325
|
+
return [...this.loadedPaths];
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Get all config search paths (including unloaded).
|
|
329
|
+
*
|
|
330
|
+
* @returns Array of all config paths that are searched
|
|
331
|
+
*/
|
|
332
|
+
getSearchPaths() {
|
|
333
|
+
return [...this.configPaths];
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Convenience function to load configuration.
|
|
338
|
+
* Creates a ConfigManager and returns the config object.
|
|
339
|
+
*
|
|
340
|
+
* @param options - Configuration options
|
|
341
|
+
* @returns Promise resolving to the loaded Config
|
|
342
|
+
*/
|
|
343
|
+
export async function loadConfig(options = {}) {
|
|
344
|
+
const manager = await ConfigManager.load({ ...options, watch: false });
|
|
345
|
+
return manager.get();
|
|
346
|
+
}
|
|
347
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Merger for AgentRouter
|
|
3
|
+
*
|
|
4
|
+
* Provides utilities for deep merging configuration objects.
|
|
5
|
+
* Used by ConfigManager to combine configs from multiple sources.
|
|
6
|
+
*/
|
|
7
|
+
import type { Config } from '../types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Configuration merger utility class.
|
|
10
|
+
* Handles deep merging of configuration objects with specific merge rules.
|
|
11
|
+
*/
|
|
12
|
+
export declare class ConfigMerger {
|
|
13
|
+
/**
|
|
14
|
+
* Deep merge two configuration objects.
|
|
15
|
+
* Source values override target values.
|
|
16
|
+
* Objects are merged recursively, arrays are replaced.
|
|
17
|
+
*
|
|
18
|
+
* @param target - Base configuration
|
|
19
|
+
* @param source - Configuration to merge on top
|
|
20
|
+
* @returns Merged configuration
|
|
21
|
+
*/
|
|
22
|
+
merge(target: Config, source: Partial<Config>): Config;
|
|
23
|
+
/**
|
|
24
|
+
* Merge default configuration values.
|
|
25
|
+
*
|
|
26
|
+
* @param target - Base defaults
|
|
27
|
+
* @param source - Defaults to merge
|
|
28
|
+
* @returns Merged defaults
|
|
29
|
+
*/
|
|
30
|
+
private mergeDefaults;
|
|
31
|
+
/**
|
|
32
|
+
* Merge role configurations.
|
|
33
|
+
* Roles from source are merged into target.
|
|
34
|
+
* Individual role properties are deep merged.
|
|
35
|
+
*
|
|
36
|
+
* @param target - Base roles
|
|
37
|
+
* @param source - Roles to merge
|
|
38
|
+
* @returns Merged roles
|
|
39
|
+
*/
|
|
40
|
+
private mergeRoles;
|
|
41
|
+
/**
|
|
42
|
+
* Merge a single role configuration.
|
|
43
|
+
*
|
|
44
|
+
* @param target - Base role config
|
|
45
|
+
* @param source - Role config to merge
|
|
46
|
+
* @returns Merged role config
|
|
47
|
+
*/
|
|
48
|
+
private mergeRoleConfig;
|
|
49
|
+
/**
|
|
50
|
+
* Merge provider configurations.
|
|
51
|
+
* Providers from source are merged into target.
|
|
52
|
+
* Individual provider properties are deep merged.
|
|
53
|
+
*
|
|
54
|
+
* @param target - Base providers
|
|
55
|
+
* @param source - Providers to merge
|
|
56
|
+
* @returns Merged providers
|
|
57
|
+
*/
|
|
58
|
+
private mergeProviders;
|
|
59
|
+
/**
|
|
60
|
+
* Merge a single provider configuration.
|
|
61
|
+
*
|
|
62
|
+
* @param target - Base provider config
|
|
63
|
+
* @param source - Provider config to merge
|
|
64
|
+
* @returns Merged provider config
|
|
65
|
+
*/
|
|
66
|
+
private mergeProviderConfig;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Convenience function to merge two configs.
|
|
70
|
+
*
|
|
71
|
+
* @param target - Base configuration
|
|
72
|
+
* @param source - Configuration to merge on top
|
|
73
|
+
* @returns Merged configuration
|
|
74
|
+
*/
|
|
75
|
+
export declare function mergeConfigs(target: Config, source: Partial<Config>): Config;
|
|
76
|
+
//# sourceMappingURL=merger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merger.d.ts","sourceRoot":"","sources":["../../src/config/merger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAA6C,MAAM,aAAa,CAAC;AAErF;;;GAGG;AACH,qBAAa,YAAY;IACvB;;;;;;;;OAQG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM;IAStD;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;IAarB;;;;;;;;OAQG;IACH,OAAO,CAAC,UAAU;IAsBlB;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAqCvB;;;;;;;;OAQG;IACH,OAAO,CAAC,cAAc;IAsBtB;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;CA0C5B;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAG5E"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Merger for AgentRouter
|
|
3
|
+
*
|
|
4
|
+
* Provides utilities for deep merging configuration objects.
|
|
5
|
+
* Used by ConfigManager to combine configs from multiple sources.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Configuration merger utility class.
|
|
9
|
+
* Handles deep merging of configuration objects with specific merge rules.
|
|
10
|
+
*/
|
|
11
|
+
export class ConfigMerger {
|
|
12
|
+
/**
|
|
13
|
+
* Deep merge two configuration objects.
|
|
14
|
+
* Source values override target values.
|
|
15
|
+
* Objects are merged recursively, arrays are replaced.
|
|
16
|
+
*
|
|
17
|
+
* @param target - Base configuration
|
|
18
|
+
* @param source - Configuration to merge on top
|
|
19
|
+
* @returns Merged configuration
|
|
20
|
+
*/
|
|
21
|
+
merge(target, source) {
|
|
22
|
+
return {
|
|
23
|
+
version: source.version ?? target.version,
|
|
24
|
+
defaults: this.mergeDefaults(target.defaults, source.defaults),
|
|
25
|
+
roles: this.mergeRoles(target.roles, source.roles),
|
|
26
|
+
providers: this.mergeProviders(target.providers, source.providers),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Merge default configuration values.
|
|
31
|
+
*
|
|
32
|
+
* @param target - Base defaults
|
|
33
|
+
* @param source - Defaults to merge
|
|
34
|
+
* @returns Merged defaults
|
|
35
|
+
*/
|
|
36
|
+
mergeDefaults(target, source) {
|
|
37
|
+
if (!source) {
|
|
38
|
+
return { ...target };
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
temperature: source.temperature ?? target.temperature,
|
|
42
|
+
max_tokens: source.max_tokens ?? target.max_tokens,
|
|
43
|
+
timeout_ms: source.timeout_ms ?? target.timeout_ms,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Merge role configurations.
|
|
48
|
+
* Roles from source are merged into target.
|
|
49
|
+
* Individual role properties are deep merged.
|
|
50
|
+
*
|
|
51
|
+
* @param target - Base roles
|
|
52
|
+
* @param source - Roles to merge
|
|
53
|
+
* @returns Merged roles
|
|
54
|
+
*/
|
|
55
|
+
mergeRoles(target, source) {
|
|
56
|
+
if (!source) {
|
|
57
|
+
return { ...target };
|
|
58
|
+
}
|
|
59
|
+
const result = { ...target };
|
|
60
|
+
for (const [roleName, roleConfig] of Object.entries(source)) {
|
|
61
|
+
const existingRole = result[roleName];
|
|
62
|
+
if (existingRole) {
|
|
63
|
+
// Merge existing role
|
|
64
|
+
result[roleName] = this.mergeRoleConfig(existingRole, roleConfig);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
// Add new role
|
|
68
|
+
result[roleName] = { ...roleConfig };
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return result;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Merge a single role configuration.
|
|
75
|
+
*
|
|
76
|
+
* @param target - Base role config
|
|
77
|
+
* @param source - Role config to merge
|
|
78
|
+
* @returns Merged role config
|
|
79
|
+
*/
|
|
80
|
+
mergeRoleConfig(target, source) {
|
|
81
|
+
const result = {
|
|
82
|
+
provider: source.provider ?? target.provider,
|
|
83
|
+
model: source.model ?? target.model,
|
|
84
|
+
};
|
|
85
|
+
// Optional fields - only set if defined in either source or target
|
|
86
|
+
const systemPrompt = source.system_prompt ?? target.system_prompt;
|
|
87
|
+
if (systemPrompt !== undefined) {
|
|
88
|
+
result.system_prompt = systemPrompt;
|
|
89
|
+
}
|
|
90
|
+
const temperature = source.temperature ?? target.temperature;
|
|
91
|
+
if (temperature !== undefined) {
|
|
92
|
+
result.temperature = temperature;
|
|
93
|
+
}
|
|
94
|
+
const maxTokens = source.max_tokens ?? target.max_tokens;
|
|
95
|
+
if (maxTokens !== undefined) {
|
|
96
|
+
result.max_tokens = maxTokens;
|
|
97
|
+
}
|
|
98
|
+
const timeoutMs = source.timeout_ms ?? target.timeout_ms;
|
|
99
|
+
if (timeoutMs !== undefined) {
|
|
100
|
+
result.timeout_ms = timeoutMs;
|
|
101
|
+
}
|
|
102
|
+
// Fallback config - replace entirely if provided
|
|
103
|
+
if (source.fallback !== undefined) {
|
|
104
|
+
result.fallback = { ...source.fallback };
|
|
105
|
+
}
|
|
106
|
+
else if (target.fallback !== undefined) {
|
|
107
|
+
result.fallback = { ...target.fallback };
|
|
108
|
+
}
|
|
109
|
+
return result;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Merge provider configurations.
|
|
113
|
+
* Providers from source are merged into target.
|
|
114
|
+
* Individual provider properties are deep merged.
|
|
115
|
+
*
|
|
116
|
+
* @param target - Base providers
|
|
117
|
+
* @param source - Providers to merge
|
|
118
|
+
* @returns Merged providers
|
|
119
|
+
*/
|
|
120
|
+
mergeProviders(target, source) {
|
|
121
|
+
if (!source) {
|
|
122
|
+
return { ...target };
|
|
123
|
+
}
|
|
124
|
+
const result = { ...target };
|
|
125
|
+
for (const [providerName, providerConfig] of Object.entries(source)) {
|
|
126
|
+
const existingProvider = result[providerName];
|
|
127
|
+
if (existingProvider) {
|
|
128
|
+
// Merge existing provider
|
|
129
|
+
result[providerName] = this.mergeProviderConfig(existingProvider, providerConfig);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
// Add new provider
|
|
133
|
+
result[providerName] = { ...providerConfig };
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return result;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Merge a single provider configuration.
|
|
140
|
+
*
|
|
141
|
+
* @param target - Base provider config
|
|
142
|
+
* @param source - Provider config to merge
|
|
143
|
+
* @returns Merged provider config
|
|
144
|
+
*/
|
|
145
|
+
mergeProviderConfig(target, source) {
|
|
146
|
+
const result = {};
|
|
147
|
+
// Merge all optional fields - only set if defined
|
|
148
|
+
const apiKey = source.api_key ?? target.api_key;
|
|
149
|
+
if (apiKey !== undefined) {
|
|
150
|
+
result.api_key = apiKey;
|
|
151
|
+
}
|
|
152
|
+
const baseUrl = source.base_url ?? target.base_url;
|
|
153
|
+
if (baseUrl !== undefined) {
|
|
154
|
+
result.base_url = baseUrl;
|
|
155
|
+
}
|
|
156
|
+
const organization = source.organization ?? target.organization;
|
|
157
|
+
if (organization !== undefined) {
|
|
158
|
+
result.organization = organization;
|
|
159
|
+
}
|
|
160
|
+
const project = source.project ?? target.project;
|
|
161
|
+
if (project !== undefined) {
|
|
162
|
+
result.project = project;
|
|
163
|
+
}
|
|
164
|
+
const location = source.location ?? target.location;
|
|
165
|
+
if (location !== undefined) {
|
|
166
|
+
result.location = location;
|
|
167
|
+
}
|
|
168
|
+
// Headers are merged (source overrides target keys)
|
|
169
|
+
if (source.headers || target.headers) {
|
|
170
|
+
result.headers = {
|
|
171
|
+
...target.headers,
|
|
172
|
+
...source.headers,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
return result;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Convenience function to merge two configs.
|
|
180
|
+
*
|
|
181
|
+
* @param target - Base configuration
|
|
182
|
+
* @param source - Configuration to merge on top
|
|
183
|
+
* @returns Merged configuration
|
|
184
|
+
*/
|
|
185
|
+
export function mergeConfigs(target, source) {
|
|
186
|
+
const merger = new ConfigMerger();
|
|
187
|
+
return merger.merge(target, source);
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=merger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merger.js","sourceRoot":"","sources":["../../src/config/merger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON Schema Export for AgentRouter Configuration
|
|
3
|
+
*
|
|
4
|
+
* Re-exports the configuration JSON Schema for external use,
|
|
5
|
+
* such as IDE validation, documentation generation, or schema.json files.
|
|
6
|
+
*/
|
|
7
|
+
import { configSchema } from './validator.js';
|
|
8
|
+
/**
|
|
9
|
+
* JSON Schema for AgentRouter configuration.
|
|
10
|
+
* Can be used for:
|
|
11
|
+
* - IDE validation (VS Code, JetBrains)
|
|
12
|
+
* - Documentation generation
|
|
13
|
+
* - External tooling
|
|
14
|
+
*/
|
|
15
|
+
export { configSchema };
|
|
16
|
+
/**
|
|
17
|
+
* Export as default for direct import.
|
|
18
|
+
*/
|
|
19
|
+
export default configSchema;
|
|
20
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;;;;;GAMG;AACH,OAAO,EAAE,YAAY,EAAE,CAAC;AAExB;;GAEG;AACH,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON Schema Export for AgentRouter Configuration
|
|
3
|
+
*
|
|
4
|
+
* Re-exports the configuration JSON Schema for external use,
|
|
5
|
+
* such as IDE validation, documentation generation, or schema.json files.
|
|
6
|
+
*/
|
|
7
|
+
import { configSchema } from './validator.js';
|
|
8
|
+
/**
|
|
9
|
+
* JSON Schema for AgentRouter configuration.
|
|
10
|
+
* Can be used for:
|
|
11
|
+
* - IDE validation (VS Code, JetBrains)
|
|
12
|
+
* - Documentation generation
|
|
13
|
+
* - External tooling
|
|
14
|
+
*/
|
|
15
|
+
export { configSchema };
|
|
16
|
+
/**
|
|
17
|
+
* Export as default for direct import.
|
|
18
|
+
*/
|
|
19
|
+
export default configSchema;
|
|
20
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;;;;;GAMG;AACH,OAAO,EAAE,YAAY,EAAE,CAAC;AAExB;;GAEG;AACH,eAAe,YAAY,CAAC"}
|