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,250 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Metrics Collection Module
|
|
3
|
+
*
|
|
4
|
+
* Simple in-memory metrics collection for AgentRouter observability.
|
|
5
|
+
* Tracks:
|
|
6
|
+
* - Request counts (by role, provider, status)
|
|
7
|
+
* - Latency histograms with percentile calculations (by role, provider)
|
|
8
|
+
* - Token usage (input, output by provider)
|
|
9
|
+
* - Error counts (by type, provider)
|
|
10
|
+
* - Circuit breaker state changes
|
|
11
|
+
*
|
|
12
|
+
* No external dependencies - pure TypeScript implementation.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Token usage statistics for a provider.
|
|
16
|
+
*/
|
|
17
|
+
export interface TokenStats {
|
|
18
|
+
input: number;
|
|
19
|
+
output: number;
|
|
20
|
+
total: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Latency statistics with percentiles.
|
|
24
|
+
*/
|
|
25
|
+
export interface LatencyStats {
|
|
26
|
+
count: number;
|
|
27
|
+
min: number;
|
|
28
|
+
max: number;
|
|
29
|
+
mean: number;
|
|
30
|
+
p50: number;
|
|
31
|
+
p95: number;
|
|
32
|
+
p99: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Circuit breaker state.
|
|
36
|
+
*/
|
|
37
|
+
export type CircuitBreakerState = 'closed' | 'open' | 'half-open';
|
|
38
|
+
/**
|
|
39
|
+
* Circuit breaker state change event.
|
|
40
|
+
*/
|
|
41
|
+
export interface CircuitBreakerEvent {
|
|
42
|
+
provider: string;
|
|
43
|
+
previousState: CircuitBreakerState;
|
|
44
|
+
newState: CircuitBreakerState;
|
|
45
|
+
timestamp: number;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Request status for metrics tracking.
|
|
49
|
+
*/
|
|
50
|
+
export type RequestStatus = 'success' | 'error' | 'timeout' | 'rate_limited';
|
|
51
|
+
/**
|
|
52
|
+
* Input for recording a request.
|
|
53
|
+
*/
|
|
54
|
+
export interface RequestRecord {
|
|
55
|
+
role: string;
|
|
56
|
+
provider: string;
|
|
57
|
+
status: RequestStatus;
|
|
58
|
+
durationMs: number;
|
|
59
|
+
tokens?: {
|
|
60
|
+
input: number;
|
|
61
|
+
output: number;
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Aggregated metrics snapshot.
|
|
66
|
+
*/
|
|
67
|
+
export interface Metrics {
|
|
68
|
+
requests: {
|
|
69
|
+
total: number;
|
|
70
|
+
byRole: Map<string, number>;
|
|
71
|
+
byProvider: Map<string, number>;
|
|
72
|
+
byStatus: Map<string, number>;
|
|
73
|
+
};
|
|
74
|
+
latency: {
|
|
75
|
+
p50: number;
|
|
76
|
+
p95: number;
|
|
77
|
+
p99: number;
|
|
78
|
+
byProvider: Map<string, LatencyStats>;
|
|
79
|
+
byRole: Map<string, LatencyStats>;
|
|
80
|
+
};
|
|
81
|
+
tokens: {
|
|
82
|
+
input: number;
|
|
83
|
+
output: number;
|
|
84
|
+
byProvider: Map<string, TokenStats>;
|
|
85
|
+
};
|
|
86
|
+
errors: {
|
|
87
|
+
total: number;
|
|
88
|
+
byType: Map<string, number>;
|
|
89
|
+
byProvider: Map<string, number>;
|
|
90
|
+
};
|
|
91
|
+
circuitBreaker: {
|
|
92
|
+
stateChanges: CircuitBreakerEvent[];
|
|
93
|
+
currentStates: Map<string, CircuitBreakerState>;
|
|
94
|
+
};
|
|
95
|
+
startTime: number;
|
|
96
|
+
lastUpdated: number;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* JSON-serializable metrics format.
|
|
100
|
+
*/
|
|
101
|
+
export interface MetricsJSON {
|
|
102
|
+
requests: {
|
|
103
|
+
total: number;
|
|
104
|
+
byRole: Record<string, number>;
|
|
105
|
+
byProvider: Record<string, number>;
|
|
106
|
+
byStatus: Record<string, number>;
|
|
107
|
+
};
|
|
108
|
+
latency: {
|
|
109
|
+
p50: number;
|
|
110
|
+
p95: number;
|
|
111
|
+
p99: number;
|
|
112
|
+
byProvider: Record<string, LatencyStats>;
|
|
113
|
+
byRole: Record<string, LatencyStats>;
|
|
114
|
+
};
|
|
115
|
+
tokens: {
|
|
116
|
+
input: number;
|
|
117
|
+
output: number;
|
|
118
|
+
byProvider: Record<string, TokenStats>;
|
|
119
|
+
};
|
|
120
|
+
errors: {
|
|
121
|
+
total: number;
|
|
122
|
+
byType: Record<string, number>;
|
|
123
|
+
byProvider: Record<string, number>;
|
|
124
|
+
};
|
|
125
|
+
circuitBreaker: {
|
|
126
|
+
stateChanges: CircuitBreakerEvent[];
|
|
127
|
+
currentStates: Record<string, CircuitBreakerState>;
|
|
128
|
+
};
|
|
129
|
+
startTime: number;
|
|
130
|
+
lastUpdated: number;
|
|
131
|
+
uptimeMs: number;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Metrics collector for tracking AgentRouter performance and usage.
|
|
135
|
+
*
|
|
136
|
+
* Thread-safe for single-threaded Node.js runtime.
|
|
137
|
+
* Maintains rolling latency data for percentile calculations.
|
|
138
|
+
*
|
|
139
|
+
* @example
|
|
140
|
+
* ```typescript
|
|
141
|
+
* const metrics = new MetricsCollector();
|
|
142
|
+
*
|
|
143
|
+
* // Record a successful request
|
|
144
|
+
* metrics.recordRequest({
|
|
145
|
+
* role: 'coder',
|
|
146
|
+
* provider: 'anthropic',
|
|
147
|
+
* status: 'success',
|
|
148
|
+
* durationMs: 1234,
|
|
149
|
+
* tokens: { input: 100, output: 500 }
|
|
150
|
+
* });
|
|
151
|
+
*
|
|
152
|
+
* // Record an error
|
|
153
|
+
* metrics.recordError('RateLimitError', 'openai');
|
|
154
|
+
*
|
|
155
|
+
* // Get metrics snapshot
|
|
156
|
+
* const snapshot = metrics.getMetrics();
|
|
157
|
+
* console.log(`Total requests: ${snapshot.requests.total}`);
|
|
158
|
+
* console.log(`P95 latency: ${snapshot.latency.p95}ms`);
|
|
159
|
+
* ```
|
|
160
|
+
*/
|
|
161
|
+
export declare class MetricsCollector {
|
|
162
|
+
private requestCount;
|
|
163
|
+
private requestsByRole;
|
|
164
|
+
private requestsByProvider;
|
|
165
|
+
private requestsByStatus;
|
|
166
|
+
private latencyValues;
|
|
167
|
+
private latencyByProvider;
|
|
168
|
+
private latencyByRole;
|
|
169
|
+
private totalInputTokens;
|
|
170
|
+
private totalOutputTokens;
|
|
171
|
+
private tokensByProvider;
|
|
172
|
+
private errorCount;
|
|
173
|
+
private errorsByType;
|
|
174
|
+
private errorsByProvider;
|
|
175
|
+
private circuitBreakerEvents;
|
|
176
|
+
private circuitBreakerStates;
|
|
177
|
+
private readonly startTime;
|
|
178
|
+
private lastUpdated;
|
|
179
|
+
private readonly maxLatencySamples;
|
|
180
|
+
private readonly maxCircuitBreakerEvents;
|
|
181
|
+
/**
|
|
182
|
+
* Create a new MetricsCollector.
|
|
183
|
+
*
|
|
184
|
+
* @param options Configuration options
|
|
185
|
+
* @param options.maxLatencySamples Maximum number of latency samples to keep (default: 10000)
|
|
186
|
+
* @param options.maxCircuitBreakerEvents Maximum circuit breaker events to keep (default: 1000)
|
|
187
|
+
*/
|
|
188
|
+
constructor(options?: {
|
|
189
|
+
maxLatencySamples?: number;
|
|
190
|
+
maxCircuitBreakerEvents?: number;
|
|
191
|
+
});
|
|
192
|
+
/**
|
|
193
|
+
* Record a completed request.
|
|
194
|
+
*
|
|
195
|
+
* @param record Request details to record
|
|
196
|
+
*/
|
|
197
|
+
recordRequest(record: RequestRecord): void;
|
|
198
|
+
/**
|
|
199
|
+
* Record an error occurrence.
|
|
200
|
+
*
|
|
201
|
+
* @param errorType The type/class of the error
|
|
202
|
+
* @param provider The provider that produced the error (optional)
|
|
203
|
+
*/
|
|
204
|
+
recordError(errorType: string, provider?: string): void;
|
|
205
|
+
/**
|
|
206
|
+
* Record a circuit breaker state change.
|
|
207
|
+
*
|
|
208
|
+
* @param provider The provider whose circuit breaker changed
|
|
209
|
+
* @param previousState The previous state
|
|
210
|
+
* @param newState The new state
|
|
211
|
+
*/
|
|
212
|
+
recordCircuitBreakerChange(provider: string, previousState: CircuitBreakerState, newState: CircuitBreakerState): void;
|
|
213
|
+
/**
|
|
214
|
+
* Get the current metrics snapshot.
|
|
215
|
+
*
|
|
216
|
+
* @returns Aggregated metrics with calculated percentiles
|
|
217
|
+
*/
|
|
218
|
+
getMetrics(): Metrics;
|
|
219
|
+
/**
|
|
220
|
+
* Reset all metrics to initial state.
|
|
221
|
+
* Useful for testing or periodic resets.
|
|
222
|
+
*/
|
|
223
|
+
reset(): void;
|
|
224
|
+
/**
|
|
225
|
+
* Export metrics as a JSON string.
|
|
226
|
+
*
|
|
227
|
+
* @returns JSON string representation of all metrics
|
|
228
|
+
*/
|
|
229
|
+
toJSON(): string;
|
|
230
|
+
/**
|
|
231
|
+
* Get a summary string suitable for logging.
|
|
232
|
+
*
|
|
233
|
+
* @returns Human-readable summary of key metrics
|
|
234
|
+
*/
|
|
235
|
+
getSummary(): string;
|
|
236
|
+
private incrementMap;
|
|
237
|
+
private addLatencySample;
|
|
238
|
+
private addLatencySampleToMap;
|
|
239
|
+
private calculateLatencyStatsByKey;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Default metrics collector instance for the agent-router package.
|
|
243
|
+
* Pre-configured and ready to use.
|
|
244
|
+
*/
|
|
245
|
+
export declare const metrics: MetricsCollector;
|
|
246
|
+
/**
|
|
247
|
+
* Re-export for convenience.
|
|
248
|
+
*/
|
|
249
|
+
export default metrics;
|
|
250
|
+
//# sourceMappingURL=metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/observability/metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Metrics Collection Module
|
|
3
|
+
*
|
|
4
|
+
* Simple in-memory metrics collection for AgentRouter observability.
|
|
5
|
+
* Tracks:
|
|
6
|
+
* - Request counts (by role, provider, status)
|
|
7
|
+
* - Latency histograms with percentile calculations (by role, provider)
|
|
8
|
+
* - Token usage (input, output by provider)
|
|
9
|
+
* - Error counts (by type, provider)
|
|
10
|
+
* - Circuit breaker state changes
|
|
11
|
+
*
|
|
12
|
+
* No external dependencies - pure TypeScript implementation.
|
|
13
|
+
*/
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// Utilities
|
|
16
|
+
// ============================================================================
|
|
17
|
+
/**
|
|
18
|
+
* Calculate percentile from a sorted array of numbers.
|
|
19
|
+
*/
|
|
20
|
+
function calculatePercentile(sortedValues, percentile) {
|
|
21
|
+
if (sortedValues.length === 0)
|
|
22
|
+
return 0;
|
|
23
|
+
if (sortedValues.length === 1)
|
|
24
|
+
return sortedValues[0];
|
|
25
|
+
const index = (percentile / 100) * (sortedValues.length - 1);
|
|
26
|
+
const lower = Math.floor(index);
|
|
27
|
+
const upper = Math.ceil(index);
|
|
28
|
+
if (lower === upper)
|
|
29
|
+
return sortedValues[lower];
|
|
30
|
+
const fraction = index - lower;
|
|
31
|
+
return sortedValues[lower] + fraction * (sortedValues[upper] - sortedValues[lower]);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Calculate latency statistics from an array of latency values.
|
|
35
|
+
*/
|
|
36
|
+
function calculateLatencyStats(values) {
|
|
37
|
+
if (values.length === 0) {
|
|
38
|
+
return { count: 0, min: 0, max: 0, mean: 0, p50: 0, p95: 0, p99: 0 };
|
|
39
|
+
}
|
|
40
|
+
const sorted = [...values].sort((a, b) => a - b);
|
|
41
|
+
const sum = values.reduce((acc, val) => acc + val, 0);
|
|
42
|
+
return {
|
|
43
|
+
count: values.length,
|
|
44
|
+
min: sorted[0],
|
|
45
|
+
max: sorted[sorted.length - 1],
|
|
46
|
+
mean: sum / values.length,
|
|
47
|
+
p50: calculatePercentile(sorted, 50),
|
|
48
|
+
p95: calculatePercentile(sorted, 95),
|
|
49
|
+
p99: calculatePercentile(sorted, 99),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Convert a Map to a plain object for JSON serialization.
|
|
54
|
+
*/
|
|
55
|
+
function mapToObject(map) {
|
|
56
|
+
const obj = {};
|
|
57
|
+
for (const [key, value] of map) {
|
|
58
|
+
obj[key] = value;
|
|
59
|
+
}
|
|
60
|
+
return obj;
|
|
61
|
+
}
|
|
62
|
+
// ============================================================================
|
|
63
|
+
// MetricsCollector Class
|
|
64
|
+
// ============================================================================
|
|
65
|
+
/**
|
|
66
|
+
* Metrics collector for tracking AgentRouter performance and usage.
|
|
67
|
+
*
|
|
68
|
+
* Thread-safe for single-threaded Node.js runtime.
|
|
69
|
+
* Maintains rolling latency data for percentile calculations.
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```typescript
|
|
73
|
+
* const metrics = new MetricsCollector();
|
|
74
|
+
*
|
|
75
|
+
* // Record a successful request
|
|
76
|
+
* metrics.recordRequest({
|
|
77
|
+
* role: 'coder',
|
|
78
|
+
* provider: 'anthropic',
|
|
79
|
+
* status: 'success',
|
|
80
|
+
* durationMs: 1234,
|
|
81
|
+
* tokens: { input: 100, output: 500 }
|
|
82
|
+
* });
|
|
83
|
+
*
|
|
84
|
+
* // Record an error
|
|
85
|
+
* metrics.recordError('RateLimitError', 'openai');
|
|
86
|
+
*
|
|
87
|
+
* // Get metrics snapshot
|
|
88
|
+
* const snapshot = metrics.getMetrics();
|
|
89
|
+
* console.log(`Total requests: ${snapshot.requests.total}`);
|
|
90
|
+
* console.log(`P95 latency: ${snapshot.latency.p95}ms`);
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
export class MetricsCollector {
|
|
94
|
+
// Request counts
|
|
95
|
+
requestCount = 0;
|
|
96
|
+
requestsByRole = new Map();
|
|
97
|
+
requestsByProvider = new Map();
|
|
98
|
+
requestsByStatus = new Map();
|
|
99
|
+
// Latency tracking (store raw values for percentile calculation)
|
|
100
|
+
latencyValues = [];
|
|
101
|
+
latencyByProvider = new Map();
|
|
102
|
+
latencyByRole = new Map();
|
|
103
|
+
// Token tracking
|
|
104
|
+
totalInputTokens = 0;
|
|
105
|
+
totalOutputTokens = 0;
|
|
106
|
+
tokensByProvider = new Map();
|
|
107
|
+
// Error tracking
|
|
108
|
+
errorCount = 0;
|
|
109
|
+
errorsByType = new Map();
|
|
110
|
+
errorsByProvider = new Map();
|
|
111
|
+
// Circuit breaker tracking
|
|
112
|
+
circuitBreakerEvents = [];
|
|
113
|
+
circuitBreakerStates = new Map();
|
|
114
|
+
// Timing
|
|
115
|
+
startTime;
|
|
116
|
+
lastUpdated;
|
|
117
|
+
// Configuration
|
|
118
|
+
maxLatencySamples;
|
|
119
|
+
maxCircuitBreakerEvents;
|
|
120
|
+
/**
|
|
121
|
+
* Create a new MetricsCollector.
|
|
122
|
+
*
|
|
123
|
+
* @param options Configuration options
|
|
124
|
+
* @param options.maxLatencySamples Maximum number of latency samples to keep (default: 10000)
|
|
125
|
+
* @param options.maxCircuitBreakerEvents Maximum circuit breaker events to keep (default: 1000)
|
|
126
|
+
*/
|
|
127
|
+
constructor(options) {
|
|
128
|
+
this.startTime = Date.now();
|
|
129
|
+
this.lastUpdated = this.startTime;
|
|
130
|
+
this.maxLatencySamples = options?.maxLatencySamples ?? 10000;
|
|
131
|
+
this.maxCircuitBreakerEvents = options?.maxCircuitBreakerEvents ?? 1000;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Record a completed request.
|
|
135
|
+
*
|
|
136
|
+
* @param record Request details to record
|
|
137
|
+
*/
|
|
138
|
+
recordRequest(record) {
|
|
139
|
+
this.lastUpdated = Date.now();
|
|
140
|
+
// Increment request counts
|
|
141
|
+
this.requestCount++;
|
|
142
|
+
this.incrementMap(this.requestsByRole, record.role);
|
|
143
|
+
this.incrementMap(this.requestsByProvider, record.provider);
|
|
144
|
+
this.incrementMap(this.requestsByStatus, record.status);
|
|
145
|
+
// Record latency
|
|
146
|
+
this.addLatencySample(this.latencyValues, record.durationMs);
|
|
147
|
+
this.addLatencySampleToMap(this.latencyByProvider, record.provider, record.durationMs);
|
|
148
|
+
this.addLatencySampleToMap(this.latencyByRole, record.role, record.durationMs);
|
|
149
|
+
// Record tokens if provided
|
|
150
|
+
if (record.tokens) {
|
|
151
|
+
this.totalInputTokens += record.tokens.input;
|
|
152
|
+
this.totalOutputTokens += record.tokens.output;
|
|
153
|
+
const providerTokens = this.tokensByProvider.get(record.provider) ?? {
|
|
154
|
+
input: 0,
|
|
155
|
+
output: 0,
|
|
156
|
+
total: 0,
|
|
157
|
+
};
|
|
158
|
+
providerTokens.input += record.tokens.input;
|
|
159
|
+
providerTokens.output += record.tokens.output;
|
|
160
|
+
providerTokens.total += record.tokens.input + record.tokens.output;
|
|
161
|
+
this.tokensByProvider.set(record.provider, providerTokens);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Record an error occurrence.
|
|
166
|
+
*
|
|
167
|
+
* @param errorType The type/class of the error
|
|
168
|
+
* @param provider The provider that produced the error (optional)
|
|
169
|
+
*/
|
|
170
|
+
recordError(errorType, provider) {
|
|
171
|
+
this.lastUpdated = Date.now();
|
|
172
|
+
this.errorCount++;
|
|
173
|
+
this.incrementMap(this.errorsByType, errorType);
|
|
174
|
+
if (provider) {
|
|
175
|
+
this.incrementMap(this.errorsByProvider, provider);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Record a circuit breaker state change.
|
|
180
|
+
*
|
|
181
|
+
* @param provider The provider whose circuit breaker changed
|
|
182
|
+
* @param previousState The previous state
|
|
183
|
+
* @param newState The new state
|
|
184
|
+
*/
|
|
185
|
+
recordCircuitBreakerChange(provider, previousState, newState) {
|
|
186
|
+
this.lastUpdated = Date.now();
|
|
187
|
+
const event = {
|
|
188
|
+
provider,
|
|
189
|
+
previousState,
|
|
190
|
+
newState,
|
|
191
|
+
timestamp: Date.now(),
|
|
192
|
+
};
|
|
193
|
+
this.circuitBreakerEvents.push(event);
|
|
194
|
+
this.circuitBreakerStates.set(provider, newState);
|
|
195
|
+
// Trim old events if needed
|
|
196
|
+
if (this.circuitBreakerEvents.length > this.maxCircuitBreakerEvents) {
|
|
197
|
+
this.circuitBreakerEvents = this.circuitBreakerEvents.slice(-this.maxCircuitBreakerEvents);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Get the current metrics snapshot.
|
|
202
|
+
*
|
|
203
|
+
* @returns Aggregated metrics with calculated percentiles
|
|
204
|
+
*/
|
|
205
|
+
getMetrics() {
|
|
206
|
+
const globalLatencyStats = calculateLatencyStats(this.latencyValues);
|
|
207
|
+
return {
|
|
208
|
+
requests: {
|
|
209
|
+
total: this.requestCount,
|
|
210
|
+
byRole: new Map(this.requestsByRole),
|
|
211
|
+
byProvider: new Map(this.requestsByProvider),
|
|
212
|
+
byStatus: new Map(this.requestsByStatus),
|
|
213
|
+
},
|
|
214
|
+
latency: {
|
|
215
|
+
p50: globalLatencyStats.p50,
|
|
216
|
+
p95: globalLatencyStats.p95,
|
|
217
|
+
p99: globalLatencyStats.p99,
|
|
218
|
+
byProvider: this.calculateLatencyStatsByKey(this.latencyByProvider),
|
|
219
|
+
byRole: this.calculateLatencyStatsByKey(this.latencyByRole),
|
|
220
|
+
},
|
|
221
|
+
tokens: {
|
|
222
|
+
input: this.totalInputTokens,
|
|
223
|
+
output: this.totalOutputTokens,
|
|
224
|
+
byProvider: new Map(this.tokensByProvider),
|
|
225
|
+
},
|
|
226
|
+
errors: {
|
|
227
|
+
total: this.errorCount,
|
|
228
|
+
byType: new Map(this.errorsByType),
|
|
229
|
+
byProvider: new Map(this.errorsByProvider),
|
|
230
|
+
},
|
|
231
|
+
circuitBreaker: {
|
|
232
|
+
stateChanges: [...this.circuitBreakerEvents],
|
|
233
|
+
currentStates: new Map(this.circuitBreakerStates),
|
|
234
|
+
},
|
|
235
|
+
startTime: this.startTime,
|
|
236
|
+
lastUpdated: this.lastUpdated,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Reset all metrics to initial state.
|
|
241
|
+
* Useful for testing or periodic resets.
|
|
242
|
+
*/
|
|
243
|
+
reset() {
|
|
244
|
+
this.requestCount = 0;
|
|
245
|
+
this.requestsByRole.clear();
|
|
246
|
+
this.requestsByProvider.clear();
|
|
247
|
+
this.requestsByStatus.clear();
|
|
248
|
+
this.latencyValues = [];
|
|
249
|
+
this.latencyByProvider.clear();
|
|
250
|
+
this.latencyByRole.clear();
|
|
251
|
+
this.totalInputTokens = 0;
|
|
252
|
+
this.totalOutputTokens = 0;
|
|
253
|
+
this.tokensByProvider.clear();
|
|
254
|
+
this.errorCount = 0;
|
|
255
|
+
this.errorsByType.clear();
|
|
256
|
+
this.errorsByProvider.clear();
|
|
257
|
+
this.circuitBreakerEvents = [];
|
|
258
|
+
this.circuitBreakerStates.clear();
|
|
259
|
+
this.lastUpdated = Date.now();
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Export metrics as a JSON string.
|
|
263
|
+
*
|
|
264
|
+
* @returns JSON string representation of all metrics
|
|
265
|
+
*/
|
|
266
|
+
toJSON() {
|
|
267
|
+
const metrics = this.getMetrics();
|
|
268
|
+
const globalLatencyStats = calculateLatencyStats(this.latencyValues);
|
|
269
|
+
const jsonMetrics = {
|
|
270
|
+
requests: {
|
|
271
|
+
total: metrics.requests.total,
|
|
272
|
+
byRole: mapToObject(metrics.requests.byRole),
|
|
273
|
+
byProvider: mapToObject(metrics.requests.byProvider),
|
|
274
|
+
byStatus: mapToObject(metrics.requests.byStatus),
|
|
275
|
+
},
|
|
276
|
+
latency: {
|
|
277
|
+
p50: globalLatencyStats.p50,
|
|
278
|
+
p95: globalLatencyStats.p95,
|
|
279
|
+
p99: globalLatencyStats.p99,
|
|
280
|
+
byProvider: mapToObject(metrics.latency.byProvider),
|
|
281
|
+
byRole: mapToObject(metrics.latency.byRole),
|
|
282
|
+
},
|
|
283
|
+
tokens: {
|
|
284
|
+
input: metrics.tokens.input,
|
|
285
|
+
output: metrics.tokens.output,
|
|
286
|
+
byProvider: mapToObject(metrics.tokens.byProvider),
|
|
287
|
+
},
|
|
288
|
+
errors: {
|
|
289
|
+
total: metrics.errors.total,
|
|
290
|
+
byType: mapToObject(metrics.errors.byType),
|
|
291
|
+
byProvider: mapToObject(metrics.errors.byProvider),
|
|
292
|
+
},
|
|
293
|
+
circuitBreaker: {
|
|
294
|
+
stateChanges: metrics.circuitBreaker.stateChanges,
|
|
295
|
+
currentStates: mapToObject(metrics.circuitBreaker.currentStates),
|
|
296
|
+
},
|
|
297
|
+
startTime: metrics.startTime,
|
|
298
|
+
lastUpdated: metrics.lastUpdated,
|
|
299
|
+
uptimeMs: Date.now() - metrics.startTime,
|
|
300
|
+
};
|
|
301
|
+
return JSON.stringify(jsonMetrics, null, 2);
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Get a summary string suitable for logging.
|
|
305
|
+
*
|
|
306
|
+
* @returns Human-readable summary of key metrics
|
|
307
|
+
*/
|
|
308
|
+
getSummary() {
|
|
309
|
+
const m = this.getMetrics();
|
|
310
|
+
const uptimeSeconds = Math.floor((Date.now() - m.startTime) / 1000);
|
|
311
|
+
return [
|
|
312
|
+
`Metrics Summary (uptime: ${uptimeSeconds}s)`,
|
|
313
|
+
` Requests: ${m.requests.total} total`,
|
|
314
|
+
` Latency: p50=${m.latency.p50.toFixed(0)}ms, p95=${m.latency.p95.toFixed(0)}ms, p99=${m.latency.p99.toFixed(0)}ms`,
|
|
315
|
+
` Tokens: ${m.tokens.input} input, ${m.tokens.output} output`,
|
|
316
|
+
` Errors: ${m.errors.total} total`,
|
|
317
|
+
].join('\n');
|
|
318
|
+
}
|
|
319
|
+
// ============================================================================
|
|
320
|
+
// Private Helpers
|
|
321
|
+
// ============================================================================
|
|
322
|
+
incrementMap(map, key) {
|
|
323
|
+
map.set(key, (map.get(key) ?? 0) + 1);
|
|
324
|
+
}
|
|
325
|
+
addLatencySample(values, sample) {
|
|
326
|
+
values.push(sample);
|
|
327
|
+
// Trim to max samples (remove oldest)
|
|
328
|
+
if (values.length > this.maxLatencySamples) {
|
|
329
|
+
values.shift();
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
addLatencySampleToMap(map, key, sample) {
|
|
333
|
+
let values = map.get(key);
|
|
334
|
+
if (!values) {
|
|
335
|
+
values = [];
|
|
336
|
+
map.set(key, values);
|
|
337
|
+
}
|
|
338
|
+
values.push(sample);
|
|
339
|
+
// Trim to max samples per key
|
|
340
|
+
if (values.length > this.maxLatencySamples) {
|
|
341
|
+
values.shift();
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
calculateLatencyStatsByKey(map) {
|
|
345
|
+
const result = new Map();
|
|
346
|
+
for (const [key, values] of map) {
|
|
347
|
+
result.set(key, calculateLatencyStats(values));
|
|
348
|
+
}
|
|
349
|
+
return result;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
// ============================================================================
|
|
353
|
+
// Singleton Instance
|
|
354
|
+
// ============================================================================
|
|
355
|
+
/**
|
|
356
|
+
* Default metrics collector instance for the agent-router package.
|
|
357
|
+
* Pre-configured and ready to use.
|
|
358
|
+
*/
|
|
359
|
+
export const metrics = new MetricsCollector();
|
|
360
|
+
/**
|
|
361
|
+
* Re-export for convenience.
|
|
362
|
+
*/
|
|
363
|
+
export default metrics;
|
|
364
|
+
//# sourceMappingURL=metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/observability/metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistence Module
|
|
3
|
+
*
|
|
4
|
+
* Provides state persistence for Agent Foundry, enabling state to survive
|
|
5
|
+
* server restarts and crashes. State is stored in .agent-foundry/state.json.
|
|
6
|
+
*/
|
|
7
|
+
export * from './state-schema.js';
|
|
8
|
+
export * from './state-store.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/persistence/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistence Module
|
|
3
|
+
*
|
|
4
|
+
* Provides state persistence for Agent Foundry, enabling state to survive
|
|
5
|
+
* server restarts and crashes. State is stored in .agent-foundry/state.json.
|
|
6
|
+
*/
|
|
7
|
+
export * from './state-schema.js';
|
|
8
|
+
export * from './state-store.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/persistence/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
|