@specforge/mcp 2.5.1 → 3.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/README.md +118 -45
- package/dist/ai-provider/circuit-breaker.d.ts +63 -0
- package/dist/ai-provider/circuit-breaker.d.ts.map +1 -0
- package/dist/ai-provider/circuit-breaker.js +160 -0
- package/dist/ai-provider/circuit-breaker.js.map +1 -0
- package/dist/ai-provider/cli-version.d.ts +50 -0
- package/dist/ai-provider/cli-version.d.ts.map +1 -0
- package/dist/ai-provider/cli-version.js +141 -0
- package/dist/ai-provider/cli-version.js.map +1 -0
- package/dist/ai-provider/config-loader.d.ts +45 -0
- package/dist/ai-provider/config-loader.d.ts.map +1 -0
- package/dist/ai-provider/config-loader.js +106 -0
- package/dist/ai-provider/config-loader.js.map +1 -0
- package/dist/ai-provider/errors.d.ts +48 -0
- package/dist/ai-provider/errors.d.ts.map +1 -0
- package/dist/ai-provider/errors.js +102 -0
- package/dist/ai-provider/errors.js.map +1 -0
- package/dist/ai-provider/events.d.ts +73 -0
- package/dist/ai-provider/events.d.ts.map +1 -0
- package/dist/ai-provider/events.js +75 -0
- package/dist/ai-provider/events.js.map +1 -0
- package/dist/ai-provider/factory.d.ts +31 -0
- package/dist/ai-provider/factory.d.ts.map +1 -0
- package/dist/ai-provider/factory.js +100 -0
- package/dist/ai-provider/factory.js.map +1 -0
- package/dist/ai-provider/index.d.ts +24 -0
- package/dist/ai-provider/index.d.ts.map +1 -0
- package/dist/ai-provider/index.js +46 -0
- package/dist/ai-provider/index.js.map +1 -0
- package/dist/ai-provider/instance-coordinator.d.ts +54 -0
- package/dist/ai-provider/instance-coordinator.d.ts.map +1 -0
- package/dist/ai-provider/instance-coordinator.js +199 -0
- package/dist/ai-provider/instance-coordinator.js.map +1 -0
- package/dist/ai-provider/jsonl-parser.d.ts +43 -0
- package/dist/ai-provider/jsonl-parser.d.ts.map +1 -0
- package/dist/ai-provider/jsonl-parser.js +107 -0
- package/dist/ai-provider/jsonl-parser.js.map +1 -0
- package/dist/ai-provider/lifecycle.d.ts +50 -0
- package/dist/ai-provider/lifecycle.d.ts.map +1 -0
- package/dist/ai-provider/lifecycle.js +145 -0
- package/dist/ai-provider/lifecycle.js.map +1 -0
- package/dist/ai-provider/logger.d.ts +69 -0
- package/dist/ai-provider/logger.d.ts.map +1 -0
- package/dist/ai-provider/logger.js +161 -0
- package/dist/ai-provider/logger.js.map +1 -0
- package/dist/ai-provider/metrics.d.ts +91 -0
- package/dist/ai-provider/metrics.d.ts.map +1 -0
- package/dist/ai-provider/metrics.js +187 -0
- package/dist/ai-provider/metrics.js.map +1 -0
- package/dist/ai-provider/process-manager.d.ts +97 -0
- package/dist/ai-provider/process-manager.d.ts.map +1 -0
- package/dist/ai-provider/process-manager.js +477 -0
- package/dist/ai-provider/process-manager.js.map +1 -0
- package/dist/ai-provider/providers/claude-code.d.ts +64 -0
- package/dist/ai-provider/providers/claude-code.d.ts.map +1 -0
- package/dist/ai-provider/providers/claude-code.js +205 -0
- package/dist/ai-provider/providers/claude-code.js.map +1 -0
- package/dist/ai-provider/retry-executor.d.ts +52 -0
- package/dist/ai-provider/retry-executor.d.ts.map +1 -0
- package/dist/ai-provider/retry-executor.js +138 -0
- package/dist/ai-provider/retry-executor.js.map +1 -0
- package/dist/ai-provider/safe-args.d.ts +58 -0
- package/dist/ai-provider/safe-args.d.ts.map +1 -0
- package/dist/ai-provider/safe-args.js +176 -0
- package/dist/ai-provider/safe-args.js.map +1 -0
- package/dist/ai-provider/semaphore.d.ts +50 -0
- package/dist/ai-provider/semaphore.d.ts.map +1 -0
- package/dist/ai-provider/semaphore.js +97 -0
- package/dist/ai-provider/semaphore.js.map +1 -0
- package/dist/ai-provider/tracer.d.ts +67 -0
- package/dist/ai-provider/tracer.d.ts.map +1 -0
- package/dist/ai-provider/tracer.js +209 -0
- package/dist/ai-provider/tracer.js.map +1 -0
- package/dist/ai-provider/types.d.ts +181 -0
- package/dist/ai-provider/types.d.ts.map +1 -0
- package/dist/ai-provider/types.js +8 -0
- package/dist/ai-provider/types.js.map +1 -0
- package/dist/autopilot/agents/agent-runner.d.ts +109 -0
- package/dist/autopilot/agents/agent-runner.d.ts.map +1 -0
- package/dist/autopilot/agents/agent-runner.js +731 -0
- package/dist/autopilot/agents/agent-runner.js.map +1 -0
- package/dist/autopilot/agents/agent-selector.d.ts +59 -0
- package/dist/autopilot/agents/agent-selector.d.ts.map +1 -0
- package/dist/autopilot/agents/agent-selector.js +234 -0
- package/dist/autopilot/agents/agent-selector.js.map +1 -0
- package/dist/autopilot/agents/model-selector.d.ts +49 -0
- package/dist/autopilot/agents/model-selector.d.ts.map +1 -0
- package/dist/autopilot/agents/model-selector.js +62 -0
- package/dist/autopilot/agents/model-selector.js.map +1 -0
- package/dist/autopilot/agents/profiles/builtin.d.ts +55 -0
- package/dist/autopilot/agents/profiles/builtin.d.ts.map +1 -0
- package/dist/autopilot/agents/profiles/builtin.js +323 -0
- package/dist/autopilot/agents/profiles/builtin.js.map +1 -0
- package/dist/autopilot/agents/profiles/types.d.ts +98 -0
- package/dist/autopilot/agents/profiles/types.d.ts.map +1 -0
- package/dist/autopilot/agents/profiles/types.js +17 -0
- package/dist/autopilot/agents/profiles/types.js.map +1 -0
- package/dist/autopilot/api/autopilot-api-client.d.ts +217 -0
- package/dist/autopilot/api/autopilot-api-client.d.ts.map +1 -0
- package/dist/autopilot/api/autopilot-api-client.js +402 -0
- package/dist/autopilot/api/autopilot-api-client.js.map +1 -0
- package/dist/autopilot/cli/abort.d.ts +20 -0
- package/dist/autopilot/cli/abort.d.ts.map +1 -0
- package/dist/autopilot/cli/abort.js +201 -0
- package/dist/autopilot/cli/abort.js.map +1 -0
- package/dist/autopilot/cli/display.d.ts +63 -0
- package/dist/autopilot/cli/display.d.ts.map +1 -0
- package/dist/autopilot/cli/display.js +260 -0
- package/dist/autopilot/cli/display.js.map +1 -0
- package/dist/autopilot/cli/index.d.ts +24 -0
- package/dist/autopilot/cli/index.d.ts.map +1 -0
- package/dist/autopilot/cli/index.js +79 -0
- package/dist/autopilot/cli/index.js.map +1 -0
- package/dist/autopilot/cli/pause.d.ts +18 -0
- package/dist/autopilot/cli/pause.d.ts.map +1 -0
- package/dist/autopilot/cli/pause.js +110 -0
- package/dist/autopilot/cli/pause.js.map +1 -0
- package/dist/autopilot/cli/resume.d.ts +22 -0
- package/dist/autopilot/cli/resume.d.ts.map +1 -0
- package/dist/autopilot/cli/resume.js +172 -0
- package/dist/autopilot/cli/resume.js.map +1 -0
- package/dist/autopilot/cli/run.d.ts +25 -0
- package/dist/autopilot/cli/run.d.ts.map +1 -0
- package/dist/autopilot/cli/run.js +220 -0
- package/dist/autopilot/cli/run.js.map +1 -0
- package/dist/autopilot/cli/status.d.ts +20 -0
- package/dist/autopilot/cli/status.d.ts.map +1 -0
- package/dist/autopilot/cli/status.js +217 -0
- package/dist/autopilot/cli/status.js.map +1 -0
- package/dist/autopilot/config.d.ts +45 -0
- package/dist/autopilot/config.d.ts.map +1 -0
- package/dist/autopilot/config.js +269 -0
- package/dist/autopilot/config.js.map +1 -0
- package/dist/autopilot/core/dependency-resolver.d.ts +108 -0
- package/dist/autopilot/core/dependency-resolver.d.ts.map +1 -0
- package/dist/autopilot/core/dependency-resolver.js +394 -0
- package/dist/autopilot/core/dependency-resolver.js.map +1 -0
- package/dist/autopilot/core/dispatcher.d.ts +215 -0
- package/dist/autopilot/core/dispatcher.d.ts.map +1 -0
- package/dist/autopilot/core/dispatcher.js +594 -0
- package/dist/autopilot/core/dispatcher.js.map +1 -0
- package/dist/autopilot/core/failure-handler.d.ts +145 -0
- package/dist/autopilot/core/failure-handler.d.ts.map +1 -0
- package/dist/autopilot/core/failure-handler.js +308 -0
- package/dist/autopilot/core/failure-handler.js.map +1 -0
- package/dist/autopilot/core/rate-limit-handler.d.ts +108 -0
- package/dist/autopilot/core/rate-limit-handler.d.ts.map +1 -0
- package/dist/autopilot/core/rate-limit-handler.js +195 -0
- package/dist/autopilot/core/rate-limit-handler.js.map +1 -0
- package/dist/autopilot/core/state-manager.d.ts +160 -0
- package/dist/autopilot/core/state-manager.d.ts.map +1 -0
- package/dist/autopilot/core/state-manager.js +393 -0
- package/dist/autopilot/core/state-manager.js.map +1 -0
- package/dist/autopilot/core/timeout-manager.d.ts +95 -0
- package/dist/autopilot/core/timeout-manager.d.ts.map +1 -0
- package/dist/autopilot/core/timeout-manager.js +188 -0
- package/dist/autopilot/core/timeout-manager.js.map +1 -0
- package/dist/autopilot/git/branch-manager.d.ts +117 -0
- package/dist/autopilot/git/branch-manager.d.ts.map +1 -0
- package/dist/autopilot/git/branch-manager.js +238 -0
- package/dist/autopilot/git/branch-manager.js.map +1 -0
- package/dist/autopilot/git/index.d.ts +9 -0
- package/dist/autopilot/git/index.d.ts.map +1 -0
- package/dist/autopilot/git/index.js +9 -0
- package/dist/autopilot/git/index.js.map +1 -0
- package/dist/autopilot/git/merge-manager.d.ts +118 -0
- package/dist/autopilot/git/merge-manager.d.ts.map +1 -0
- package/dist/autopilot/git/merge-manager.js +304 -0
- package/dist/autopilot/git/merge-manager.js.map +1 -0
- package/dist/autopilot/git/worktree-manager.d.ts +128 -0
- package/dist/autopilot/git/worktree-manager.d.ts.map +1 -0
- package/dist/autopilot/git/worktree-manager.js +298 -0
- package/dist/autopilot/git/worktree-manager.js.map +1 -0
- package/dist/autopilot/index.d.ts +30 -0
- package/dist/autopilot/index.d.ts.map +1 -0
- package/dist/autopilot/index.js +55 -0
- package/dist/autopilot/index.js.map +1 -0
- package/dist/autopilot/sync/index.d.ts +7 -0
- package/dist/autopilot/sync/index.d.ts.map +1 -0
- package/dist/autopilot/sync/index.js +7 -0
- package/dist/autopilot/sync/index.js.map +1 -0
- package/dist/autopilot/sync/sync-manager.d.ts +168 -0
- package/dist/autopilot/sync/sync-manager.d.ts.map +1 -0
- package/dist/autopilot/sync/sync-manager.js +303 -0
- package/dist/autopilot/sync/sync-manager.js.map +1 -0
- package/dist/autopilot/types.d.ts +454 -0
- package/dist/autopilot/types.d.ts.map +1 -0
- package/dist/autopilot/types.js +26 -0
- package/dist/autopilot/types.js.map +1 -0
- package/dist/autopilot/utils/audit-logger.d.ts +176 -0
- package/dist/autopilot/utils/audit-logger.d.ts.map +1 -0
- package/dist/autopilot/utils/audit-logger.js +308 -0
- package/dist/autopilot/utils/audit-logger.js.map +1 -0
- package/dist/autopilot/utils/cost-tracker.d.ts +162 -0
- package/dist/autopilot/utils/cost-tracker.d.ts.map +1 -0
- package/dist/autopilot/utils/cost-tracker.js +269 -0
- package/dist/autopilot/utils/cost-tracker.js.map +1 -0
- package/dist/autopilot/utils/index.d.ts +9 -0
- package/dist/autopilot/utils/index.d.ts.map +1 -0
- package/dist/autopilot/utils/index.js +9 -0
- package/dist/autopilot/utils/index.js.map +1 -0
- package/dist/autopilot/utils/progress-reporter.d.ts +132 -0
- package/dist/autopilot/utils/progress-reporter.d.ts.map +1 -0
- package/dist/autopilot/utils/progress-reporter.js +290 -0
- package/dist/autopilot/utils/progress-reporter.js.map +1 -0
- package/dist/autopilot/worker/worker-pool.d.ts +179 -0
- package/dist/autopilot/worker/worker-pool.d.ts.map +1 -0
- package/dist/autopilot/worker/worker-pool.js +331 -0
- package/dist/autopilot/worker/worker-pool.js.map +1 -0
- package/dist/autopilot/worker/worker-session.d.ts +171 -0
- package/dist/autopilot/worker/worker-session.d.ts.map +1 -0
- package/dist/autopilot/worker/worker-session.js +295 -0
- package/dist/autopilot/worker/worker-session.js.map +1 -0
- package/dist/cli/commands/blocked.js +6 -6
- package/dist/cli/commands/blocked.js.map +1 -1
- package/dist/cli/commands/blueprints.js +1 -1
- package/dist/cli/commands/blueprints.js.map +1 -1
- package/dist/cli/commands/configure.js +6 -6
- package/dist/cli/commands/configure.js.map +1 -1
- package/dist/cli/commands/debug/call.js +3 -3
- package/dist/cli/commands/debug/call.js.map +1 -1
- package/dist/cli/commands/debug/register.js +11 -11
- package/dist/cli/commands/debug/test.js +1 -1
- package/dist/cli/commands/debug/test.js.map +1 -1
- package/dist/cli/commands/debug/tools.js +1 -1
- package/dist/cli/commands/debug/tools.js.map +1 -1
- package/dist/cli/commands/docs/content/api.js +3 -3
- package/dist/cli/commands/docs/content/examples.js +12 -12
- package/dist/cli/commands/docs/content/workflow.js +2 -2
- package/dist/cli/commands/docs/display.js +4 -4
- package/dist/cli/commands/docs/display.js.map +1 -1
- package/dist/cli/commands/docs/docs.js +3 -3
- package/dist/cli/commands/docs/docs.js.map +1 -1
- package/dist/cli/commands/docs/tool-docs.js +2 -2
- package/dist/cli/commands/docs/tool-docs.js.map +1 -1
- package/dist/cli/commands/doctor.js +2 -2
- package/dist/cli/commands/doctor.types.d.ts +7 -7
- package/dist/cli/commands/doctor.types.js +7 -7
- package/dist/cli/commands/doctor.types.js.map +1 -1
- package/dist/cli/commands/feedback.js +5 -5
- package/dist/cli/commands/init.js +8 -8
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/invitations.js +5 -5
- package/dist/cli/commands/invitations.js.map +1 -1
- package/dist/cli/commands/login.js +6 -6
- package/dist/cli/commands/login.js.map +1 -1
- package/dist/cli/commands/members.js +9 -9
- package/dist/cli/commands/members.js.map +1 -1
- package/dist/cli/commands/next.js +10 -10
- package/dist/cli/commands/next.js.map +1 -1
- package/dist/cli/commands/projects.js +6 -6
- package/dist/cli/commands/projects.js.map +1 -1
- package/dist/cli/commands/review/review.js +8 -8
- package/dist/cli/commands/review/review.js.map +1 -1
- package/dist/cli/commands/scaffold/scaffold.js +2 -2
- package/dist/cli/commands/scaffold/scaffold.js.map +1 -1
- package/dist/cli/commands/session/display.js +1 -1
- package/dist/cli/commands/session/display.js.map +1 -1
- package/dist/cli/commands/session/end.js +6 -6
- package/dist/cli/commands/session/end.js.map +1 -1
- package/dist/cli/commands/session/register.js +12 -12
- package/dist/cli/commands/session/start.js +6 -6
- package/dist/cli/commands/session/start.js.map +1 -1
- package/dist/cli/commands/session/status.js +1 -1
- package/dist/cli/commands/session/status.js.map +1 -1
- package/dist/cli/commands/specs.js +9 -9
- package/dist/cli/commands/specs.js.map +1 -1
- package/dist/cli/commands/status.js +11 -11
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/switch.js +10 -10
- package/dist/cli/commands/switch.js.map +1 -1
- package/dist/cli/commands/ticket/command.js +5 -5
- package/dist/cli/commands/ticket/command.js.map +1 -1
- package/dist/cli/commands/ticket/register.js +4 -4
- package/dist/cli/commands/ticket/resolver.js +1 -1
- package/dist/cli/commands/ticket/resolver.js.map +1 -1
- package/dist/cli/commands/tickets.js +11 -11
- package/dist/cli/commands/tickets.js.map +1 -1
- package/dist/cli/config/loader.d.ts +1 -1
- package/dist/cli/config/loader.js +1 -1
- package/dist/cli/config/types.d.ts +2 -2
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +10 -7
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/middleware/auth-guard.js +1 -1
- package/dist/cli/middleware/auth-guard.js.map +1 -1
- package/dist/cli/middleware/error-handler.js +1 -1
- package/dist/cli/middleware/error-handler.js.map +1 -1
- package/dist/cli/ui/dashboard.js +1 -1
- package/dist/cli/ui/dashboard.js.map +1 -1
- package/dist/cli/ui/output.d.ts +2 -2
- package/dist/cli/ui/output.js +2 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/dist/tools/core/workflow-guide.js +1 -1
- package/dist/tools/core/workflow-guide.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +60 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/index.js +4 -1
- package/dist/validation/index.js.map +1 -1
- package/package.json +18 -13
- /package/bin/{specforge-mcp → specforge} +0 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process Lifecycle Manager
|
|
3
|
+
*
|
|
4
|
+
* Handles graceful shutdown on SIGTERM, SIGINT, and SIGHUP.
|
|
5
|
+
*/
|
|
6
|
+
import { ClaudeCodeProcessManager } from './process-manager.js';
|
|
7
|
+
export declare class ProcessLifecycleManager {
|
|
8
|
+
private processManager?;
|
|
9
|
+
private shutdownInProgress;
|
|
10
|
+
private shutdownHandlers;
|
|
11
|
+
private signalsRegistered;
|
|
12
|
+
constructor(processManager?: ClaudeCodeProcessManager | undefined);
|
|
13
|
+
/**
|
|
14
|
+
* Set the process manager to manage.
|
|
15
|
+
*/
|
|
16
|
+
setProcessManager(processManager: ClaudeCodeProcessManager): void;
|
|
17
|
+
/**
|
|
18
|
+
* Register an additional shutdown handler.
|
|
19
|
+
*/
|
|
20
|
+
onShutdown(handler: () => Promise<void>): void;
|
|
21
|
+
/**
|
|
22
|
+
* Check if shutdown is in progress.
|
|
23
|
+
*/
|
|
24
|
+
isShuttingDown(): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Manually trigger shutdown.
|
|
27
|
+
*/
|
|
28
|
+
shutdown(): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Setup signal handlers.
|
|
31
|
+
*/
|
|
32
|
+
private setupSignalHandlers;
|
|
33
|
+
/**
|
|
34
|
+
* Perform the shutdown sequence.
|
|
35
|
+
*/
|
|
36
|
+
private performShutdown;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get or create global lifecycle manager.
|
|
40
|
+
*/
|
|
41
|
+
export declare function getLifecycleManager(): ProcessLifecycleManager;
|
|
42
|
+
/**
|
|
43
|
+
* Create a lifecycle manager for a process manager.
|
|
44
|
+
*/
|
|
45
|
+
export declare function createLifecycleManager(processManager: ClaudeCodeProcessManager): ProcessLifecycleManager;
|
|
46
|
+
/**
|
|
47
|
+
* Register a global shutdown handler.
|
|
48
|
+
*/
|
|
49
|
+
export declare function onShutdown(handler: () => Promise<void>): void;
|
|
50
|
+
//# sourceMappingURL=lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/ai-provider/lifecycle.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAMhE,qBAAa,uBAAuB;IAKtB,OAAO,CAAC,cAAc,CAAC;IAJnC,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,gBAAgB,CAAkC;IAC1D,OAAO,CAAC,iBAAiB,CAAS;gBAEd,cAAc,CAAC,EAAE,wBAAwB,YAAA;IAO7D;;OAEG;IACH,iBAAiB,CAAC,cAAc,EAAE,wBAAwB,GAAG,IAAI;IAIjE;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAI9C;;OAEG;IACH,cAAc,IAAI,OAAO;IAIzB;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAS/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAyC3B;;OAEG;YACW,eAAe;CAiC9B;AAOD;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,uBAAuB,CAK7D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,cAAc,EAAE,wBAAwB,GACvC,uBAAuB,CAEzB;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAE7D"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process Lifecycle Manager
|
|
3
|
+
*
|
|
4
|
+
* Handles graceful shutdown on SIGTERM, SIGINT, and SIGHUP.
|
|
5
|
+
*/
|
|
6
|
+
import { createLogger } from './logger.js';
|
|
7
|
+
const logger = createLogger('ProcessLifecycle');
|
|
8
|
+
export class ProcessLifecycleManager {
|
|
9
|
+
processManager;
|
|
10
|
+
shutdownInProgress = false;
|
|
11
|
+
shutdownHandlers = [];
|
|
12
|
+
signalsRegistered = false;
|
|
13
|
+
constructor(processManager) {
|
|
14
|
+
this.processManager = processManager;
|
|
15
|
+
// Only setup signal handlers in Node.js environment
|
|
16
|
+
if (typeof process !== 'undefined' && typeof process.on === 'function') {
|
|
17
|
+
this.setupSignalHandlers();
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Set the process manager to manage.
|
|
22
|
+
*/
|
|
23
|
+
setProcessManager(processManager) {
|
|
24
|
+
this.processManager = processManager;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Register an additional shutdown handler.
|
|
28
|
+
*/
|
|
29
|
+
onShutdown(handler) {
|
|
30
|
+
this.shutdownHandlers.push(handler);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Check if shutdown is in progress.
|
|
34
|
+
*/
|
|
35
|
+
isShuttingDown() {
|
|
36
|
+
return this.shutdownInProgress;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Manually trigger shutdown.
|
|
40
|
+
*/
|
|
41
|
+
async shutdown() {
|
|
42
|
+
if (this.shutdownInProgress) {
|
|
43
|
+
logger.warn('Shutdown already in progress');
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
await this.performShutdown('manual');
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Setup signal handlers.
|
|
50
|
+
*/
|
|
51
|
+
setupSignalHandlers() {
|
|
52
|
+
if (this.signalsRegistered) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const signals = ['SIGTERM', 'SIGINT', 'SIGHUP'];
|
|
56
|
+
for (const signal of signals) {
|
|
57
|
+
process.on(signal, () => {
|
|
58
|
+
this.performShutdown(signal).then(() => {
|
|
59
|
+
process.exit(0);
|
|
60
|
+
}).catch((error) => {
|
|
61
|
+
logger.error('Error during shutdown', { error: error.message });
|
|
62
|
+
process.exit(1);
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
// Handle uncaught exceptions
|
|
67
|
+
process.on('uncaughtException', (error) => {
|
|
68
|
+
logger.error('Uncaught exception', {
|
|
69
|
+
error: error.message,
|
|
70
|
+
stack: error.stack,
|
|
71
|
+
});
|
|
72
|
+
this.performShutdown('uncaughtException').finally(() => {
|
|
73
|
+
process.exit(1);
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
// Handle unhandled promise rejections
|
|
77
|
+
process.on('unhandledRejection', (reason) => {
|
|
78
|
+
logger.error('Unhandled rejection', {
|
|
79
|
+
reason: String(reason),
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
this.signalsRegistered = true;
|
|
83
|
+
logger.debug('Signal handlers registered');
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Perform the shutdown sequence.
|
|
87
|
+
*/
|
|
88
|
+
async performShutdown(signal) {
|
|
89
|
+
if (this.shutdownInProgress) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
this.shutdownInProgress = true;
|
|
93
|
+
logger.info(`Received ${signal}, starting graceful shutdown...`);
|
|
94
|
+
try {
|
|
95
|
+
// Run custom shutdown handlers first
|
|
96
|
+
for (const handler of this.shutdownHandlers) {
|
|
97
|
+
try {
|
|
98
|
+
await handler();
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
logger.warn('Shutdown handler error', {
|
|
102
|
+
error: error.message,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Shutdown process manager
|
|
107
|
+
if (this.processManager) {
|
|
108
|
+
await this.processManager.shutdown();
|
|
109
|
+
}
|
|
110
|
+
logger.info('Graceful shutdown completed');
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
logger.error('Error during shutdown', {
|
|
114
|
+
error: error.message,
|
|
115
|
+
});
|
|
116
|
+
throw error;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Global lifecycle manager instance.
|
|
122
|
+
*/
|
|
123
|
+
let globalLifecycleManager = null;
|
|
124
|
+
/**
|
|
125
|
+
* Get or create global lifecycle manager.
|
|
126
|
+
*/
|
|
127
|
+
export function getLifecycleManager() {
|
|
128
|
+
if (!globalLifecycleManager) {
|
|
129
|
+
globalLifecycleManager = new ProcessLifecycleManager();
|
|
130
|
+
}
|
|
131
|
+
return globalLifecycleManager;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Create a lifecycle manager for a process manager.
|
|
135
|
+
*/
|
|
136
|
+
export function createLifecycleManager(processManager) {
|
|
137
|
+
return new ProcessLifecycleManager(processManager);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Register a global shutdown handler.
|
|
141
|
+
*/
|
|
142
|
+
export function onShutdown(handler) {
|
|
143
|
+
getLifecycleManager().onShutdown(handler);
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/ai-provider/lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Provider Logger
|
|
3
|
+
*
|
|
4
|
+
* Structured JSON logging with request ID support.
|
|
5
|
+
*/
|
|
6
|
+
import type { LogLevel } from './types.js';
|
|
7
|
+
export declare class Logger {
|
|
8
|
+
private component;
|
|
9
|
+
private static globalRequestId?;
|
|
10
|
+
private static logLevel;
|
|
11
|
+
constructor(component: string);
|
|
12
|
+
/**
|
|
13
|
+
* Set global request ID for correlation
|
|
14
|
+
*/
|
|
15
|
+
static setRequestId(requestId: string): void;
|
|
16
|
+
/**
|
|
17
|
+
* Clear global request ID
|
|
18
|
+
*/
|
|
19
|
+
static clearRequestId(): void;
|
|
20
|
+
/**
|
|
21
|
+
* Get current request ID
|
|
22
|
+
*/
|
|
23
|
+
static getRequestId(): string | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* Set minimum log level
|
|
26
|
+
*/
|
|
27
|
+
static setLogLevel(level: LogLevel): void;
|
|
28
|
+
/**
|
|
29
|
+
* Check if a log level should be output
|
|
30
|
+
*/
|
|
31
|
+
private shouldLog;
|
|
32
|
+
/**
|
|
33
|
+
* Log debug message
|
|
34
|
+
*/
|
|
35
|
+
debug(message: string, context?: Record<string, unknown>): void;
|
|
36
|
+
/**
|
|
37
|
+
* Log info message
|
|
38
|
+
*/
|
|
39
|
+
info(message: string, context?: Record<string, unknown>): void;
|
|
40
|
+
/**
|
|
41
|
+
* Log warning message
|
|
42
|
+
*/
|
|
43
|
+
warn(message: string, context?: Record<string, unknown>): void;
|
|
44
|
+
/**
|
|
45
|
+
* Log error message
|
|
46
|
+
*/
|
|
47
|
+
error(message: string, context?: Record<string, unknown>): void;
|
|
48
|
+
/**
|
|
49
|
+
* Log error with Error object
|
|
50
|
+
*/
|
|
51
|
+
errorWithException(message: string, error: Error, context?: Record<string, unknown>): void;
|
|
52
|
+
/**
|
|
53
|
+
* Create a child logger with additional context
|
|
54
|
+
*/
|
|
55
|
+
child(subComponent: string): Logger;
|
|
56
|
+
/**
|
|
57
|
+
* Core logging method
|
|
58
|
+
*/
|
|
59
|
+
private log;
|
|
60
|
+
/**
|
|
61
|
+
* Sanitize context to prevent PII logging
|
|
62
|
+
*/
|
|
63
|
+
private sanitizeContext;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Create a logger for a specific component
|
|
67
|
+
*/
|
|
68
|
+
export declare function createLogger(component: string): Logger;
|
|
69
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/ai-provider/logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAY,MAAM,YAAY,CAAC;AAMrD,qBAAa,MAAM;IAIL,OAAO,CAAC,SAAS;IAH7B,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAS;IACxC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAoB;gBAEvB,SAAS,EAAE,MAAM;IAErC;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAI5C;;OAEG;IACH,MAAM,CAAC,cAAc,IAAI,IAAI;IAI7B;;OAEG;IACH,MAAM,CAAC,YAAY,IAAI,MAAM,GAAG,SAAS;IAIzC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAIzC;;OAEG;IACH,OAAO,CAAC,SAAS;IAOjB;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI/D;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI9D;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI9D;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI/D;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAW1F;;OAEG;IACH,KAAK,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAInC;;OAEG;IACH,OAAO,CAAC,GAAG;IAiCX;;OAEG;IACH,OAAO,CAAC,eAAe;CAyBxB;AAMD;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEtD"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Provider Logger
|
|
3
|
+
*
|
|
4
|
+
* Structured JSON logging with request ID support.
|
|
5
|
+
*/
|
|
6
|
+
// ============================================================================
|
|
7
|
+
// Logger Class
|
|
8
|
+
// ============================================================================
|
|
9
|
+
export class Logger {
|
|
10
|
+
component;
|
|
11
|
+
static globalRequestId;
|
|
12
|
+
static logLevel = 'info';
|
|
13
|
+
constructor(component) {
|
|
14
|
+
this.component = component;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Set global request ID for correlation
|
|
18
|
+
*/
|
|
19
|
+
static setRequestId(requestId) {
|
|
20
|
+
Logger.globalRequestId = requestId;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Clear global request ID
|
|
24
|
+
*/
|
|
25
|
+
static clearRequestId() {
|
|
26
|
+
Logger.globalRequestId = undefined;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Get current request ID
|
|
30
|
+
*/
|
|
31
|
+
static getRequestId() {
|
|
32
|
+
return Logger.globalRequestId;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Set minimum log level
|
|
36
|
+
*/
|
|
37
|
+
static setLogLevel(level) {
|
|
38
|
+
Logger.logLevel = level;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Check if a log level should be output
|
|
42
|
+
*/
|
|
43
|
+
shouldLog(level) {
|
|
44
|
+
const levels = ['debug', 'info', 'warn', 'error'];
|
|
45
|
+
const currentIndex = levels.indexOf(Logger.logLevel);
|
|
46
|
+
const messageIndex = levels.indexOf(level);
|
|
47
|
+
return messageIndex >= currentIndex;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Log debug message
|
|
51
|
+
*/
|
|
52
|
+
debug(message, context) {
|
|
53
|
+
this.log('debug', message, context);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Log info message
|
|
57
|
+
*/
|
|
58
|
+
info(message, context) {
|
|
59
|
+
this.log('info', message, context);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Log warning message
|
|
63
|
+
*/
|
|
64
|
+
warn(message, context) {
|
|
65
|
+
this.log('warn', message, context);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Log error message
|
|
69
|
+
*/
|
|
70
|
+
error(message, context) {
|
|
71
|
+
this.log('error', message, context);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Log error with Error object
|
|
75
|
+
*/
|
|
76
|
+
errorWithException(message, error, context) {
|
|
77
|
+
this.log('error', message, {
|
|
78
|
+
...context,
|
|
79
|
+
error: {
|
|
80
|
+
name: error.name,
|
|
81
|
+
message: error.message,
|
|
82
|
+
stack: error.stack,
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Create a child logger with additional context
|
|
88
|
+
*/
|
|
89
|
+
child(subComponent) {
|
|
90
|
+
return new Logger(`${this.component}:${subComponent}`);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Core logging method
|
|
94
|
+
*/
|
|
95
|
+
log(level, message, context) {
|
|
96
|
+
if (!this.shouldLog(level)) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const entry = {
|
|
100
|
+
timestamp: new Date().toISOString(),
|
|
101
|
+
level,
|
|
102
|
+
component: this.component,
|
|
103
|
+
message,
|
|
104
|
+
context: this.sanitizeContext(context),
|
|
105
|
+
requestId: Logger.globalRequestId,
|
|
106
|
+
};
|
|
107
|
+
// Structured JSON logging
|
|
108
|
+
const output = JSON.stringify(entry);
|
|
109
|
+
switch (level) {
|
|
110
|
+
case 'debug':
|
|
111
|
+
console.debug(output);
|
|
112
|
+
break;
|
|
113
|
+
case 'info':
|
|
114
|
+
console.info(output);
|
|
115
|
+
break;
|
|
116
|
+
case 'warn':
|
|
117
|
+
console.warn(output);
|
|
118
|
+
break;
|
|
119
|
+
case 'error':
|
|
120
|
+
console.error(output);
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Sanitize context to prevent PII logging
|
|
126
|
+
*/
|
|
127
|
+
sanitizeContext(context) {
|
|
128
|
+
if (!context) {
|
|
129
|
+
return undefined;
|
|
130
|
+
}
|
|
131
|
+
const sanitized = {};
|
|
132
|
+
const sensitiveKeys = ['password', 'token', 'apiKey', 'secret', 'credential', 'auth'];
|
|
133
|
+
for (const [key, value] of Object.entries(context)) {
|
|
134
|
+
const lowerKey = key.toLowerCase();
|
|
135
|
+
const isSensitive = sensitiveKeys.some(sk => lowerKey.includes(sk));
|
|
136
|
+
if (isSensitive) {
|
|
137
|
+
sanitized[key] = '[REDACTED]';
|
|
138
|
+
}
|
|
139
|
+
else if (typeof value === 'string' && value.length > 1000) {
|
|
140
|
+
sanitized[key] = value.substring(0, 1000) + '...[TRUNCATED]';
|
|
141
|
+
}
|
|
142
|
+
else if (typeof value === 'object' && value !== null) {
|
|
143
|
+
sanitized[key] = this.sanitizeContext(value);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
sanitized[key] = value;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return sanitized;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// ============================================================================
|
|
153
|
+
// Factory Function
|
|
154
|
+
// ============================================================================
|
|
155
|
+
/**
|
|
156
|
+
* Create a logger for a specific component
|
|
157
|
+
*/
|
|
158
|
+
export function createLogger(component) {
|
|
159
|
+
return new Logger(component);
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/ai-provider/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Metrics Collection
|
|
3
|
+
*
|
|
4
|
+
* Counters and histograms for observability.
|
|
5
|
+
*/
|
|
6
|
+
import type { MetricStats } from './types.js';
|
|
7
|
+
export declare class Metrics {
|
|
8
|
+
private counters;
|
|
9
|
+
private histograms;
|
|
10
|
+
private gauges;
|
|
11
|
+
/**
|
|
12
|
+
* Increment a counter.
|
|
13
|
+
*/
|
|
14
|
+
increment(name: string, value?: number): void;
|
|
15
|
+
/**
|
|
16
|
+
* Decrement a counter.
|
|
17
|
+
*/
|
|
18
|
+
decrement(name: string, value?: number): void;
|
|
19
|
+
/**
|
|
20
|
+
* Record a value in a histogram.
|
|
21
|
+
*/
|
|
22
|
+
histogram(name: string, value: number): void;
|
|
23
|
+
/**
|
|
24
|
+
* Set a gauge value.
|
|
25
|
+
*/
|
|
26
|
+
gauge(name: string, value: number): void;
|
|
27
|
+
/**
|
|
28
|
+
* Get a counter value.
|
|
29
|
+
*/
|
|
30
|
+
getCounter(name: string): number;
|
|
31
|
+
/**
|
|
32
|
+
* Get a gauge value.
|
|
33
|
+
*/
|
|
34
|
+
getGauge(name: string): number;
|
|
35
|
+
/**
|
|
36
|
+
* Get histogram statistics.
|
|
37
|
+
*/
|
|
38
|
+
getHistogramStats(name: string): MetricStats | null;
|
|
39
|
+
/**
|
|
40
|
+
* Get all metrics.
|
|
41
|
+
*/
|
|
42
|
+
getAll(): {
|
|
43
|
+
counters: Record<string, number>;
|
|
44
|
+
gauges: Record<string, number>;
|
|
45
|
+
histograms: Record<string, MetricStats | null>;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Reset all metrics.
|
|
49
|
+
*/
|
|
50
|
+
reset(): void;
|
|
51
|
+
/**
|
|
52
|
+
* Reset a specific metric.
|
|
53
|
+
*/
|
|
54
|
+
resetMetric(name: string): void;
|
|
55
|
+
/**
|
|
56
|
+
* Export metrics as Prometheus-style text.
|
|
57
|
+
*/
|
|
58
|
+
toPrometheus(): string;
|
|
59
|
+
/**
|
|
60
|
+
* Calculate percentile from sorted array.
|
|
61
|
+
*/
|
|
62
|
+
private percentile;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get or create global metrics instance.
|
|
66
|
+
*/
|
|
67
|
+
export declare function getMetrics(): Metrics;
|
|
68
|
+
/**
|
|
69
|
+
* Create a new metrics instance.
|
|
70
|
+
*/
|
|
71
|
+
export declare function createMetrics(): Metrics;
|
|
72
|
+
export declare const METRIC_NAMES: {
|
|
73
|
+
readonly REQUESTS_STARTED: "requests.started";
|
|
74
|
+
readonly REQUESTS_SUCCESS: "requests.success";
|
|
75
|
+
readonly REQUESTS_FAILURE: "requests.failure";
|
|
76
|
+
readonly REQUESTS_TIMEOUT: "requests.timeout";
|
|
77
|
+
readonly REQUESTS_CIRCUIT_BLOCKED: "requests.circuit_breaker_blocked";
|
|
78
|
+
readonly REQUEST_DURATION_MS: "requests.duration_ms";
|
|
79
|
+
readonly SPAWN_DURATION_MS: "spawn.duration_ms";
|
|
80
|
+
readonly PROCESSES_ACTIVE: "processes.active";
|
|
81
|
+
readonly PROCESSES_SPAWNED: "processes.spawned";
|
|
82
|
+
readonly PROCESSES_KILLED: "processes.killed";
|
|
83
|
+
readonly ERRORS_AUTH: "errors.auth";
|
|
84
|
+
readonly ERRORS_RATE_LIMIT: "errors.rate_limit";
|
|
85
|
+
readonly ERRORS_TIMEOUT: "errors.timeout";
|
|
86
|
+
readonly ERRORS_NETWORK: "errors.network";
|
|
87
|
+
readonly ERRORS_UNKNOWN: "errors.unknown";
|
|
88
|
+
readonly RETRIES_ATTEMPTED: "retries.attempted";
|
|
89
|
+
readonly RETRIES_SUCCESS: "retries.success";
|
|
90
|
+
};
|
|
91
|
+
//# sourceMappingURL=metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/ai-provider/metrics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,MAAM,CAAkC;IAEhD;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,IAAI;IAKhD;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,IAAI;IAKhD;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAM5C;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIxC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIhC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI9B;;OAEG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAkBnD;;OAEG;IACH,MAAM,IAAI;QACR,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC,CAAC;KAChD;IAaD;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM/B;;OAEG;IACH,YAAY,IAAI,MAAM;IAsCtB;;OAEG;IACH,OAAO,CAAC,UAAU;CAInB;AAOD;;GAEG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAKpC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAGD,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;CA2Bf,CAAC"}
|