@animus-labs/cortex 0.2.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 +73 -0
- package/dist/budget-guard.d.ts +75 -0
- package/dist/budget-guard.d.ts.map +1 -0
- package/dist/budget-guard.js +142 -0
- package/dist/budget-guard.js.map +1 -0
- package/dist/compaction/compaction.d.ts +99 -0
- package/dist/compaction/compaction.d.ts.map +1 -0
- package/dist/compaction/compaction.js +302 -0
- package/dist/compaction/compaction.js.map +1 -0
- package/dist/compaction/failsafe.d.ts +57 -0
- package/dist/compaction/failsafe.d.ts.map +1 -0
- package/dist/compaction/failsafe.js +135 -0
- package/dist/compaction/failsafe.js.map +1 -0
- package/dist/compaction/index.d.ts +381 -0
- package/dist/compaction/index.d.ts.map +1 -0
- package/dist/compaction/index.js +979 -0
- package/dist/compaction/index.js.map +1 -0
- package/dist/compaction/microcompaction.d.ts +219 -0
- package/dist/compaction/microcompaction.d.ts.map +1 -0
- package/dist/compaction/microcompaction.js +536 -0
- package/dist/compaction/microcompaction.js.map +1 -0
- package/dist/compaction/observational/buffering.d.ts +225 -0
- package/dist/compaction/observational/buffering.d.ts.map +1 -0
- package/dist/compaction/observational/buffering.js +354 -0
- package/dist/compaction/observational/buffering.js.map +1 -0
- package/dist/compaction/observational/constants.d.ts +70 -0
- package/dist/compaction/observational/constants.d.ts.map +1 -0
- package/dist/compaction/observational/constants.js +507 -0
- package/dist/compaction/observational/constants.js.map +1 -0
- package/dist/compaction/observational/index.d.ts +219 -0
- package/dist/compaction/observational/index.d.ts.map +1 -0
- package/dist/compaction/observational/index.js +641 -0
- package/dist/compaction/observational/index.js.map +1 -0
- package/dist/compaction/observational/observer.d.ts +97 -0
- package/dist/compaction/observational/observer.d.ts.map +1 -0
- package/dist/compaction/observational/observer.js +424 -0
- package/dist/compaction/observational/observer.js.map +1 -0
- package/dist/compaction/observational/recall-tool.d.ts +27 -0
- package/dist/compaction/observational/recall-tool.d.ts.map +1 -0
- package/dist/compaction/observational/recall-tool.js +93 -0
- package/dist/compaction/observational/recall-tool.js.map +1 -0
- package/dist/compaction/observational/reflector.d.ts +94 -0
- package/dist/compaction/observational/reflector.d.ts.map +1 -0
- package/dist/compaction/observational/reflector.js +167 -0
- package/dist/compaction/observational/reflector.js.map +1 -0
- package/dist/compaction/observational/types.d.ts +271 -0
- package/dist/compaction/observational/types.d.ts.map +1 -0
- package/dist/compaction/observational/types.js +15 -0
- package/dist/compaction/observational/types.js.map +1 -0
- package/dist/context-manager.d.ts +134 -0
- package/dist/context-manager.d.ts.map +1 -0
- package/dist/context-manager.js +170 -0
- package/dist/context-manager.js.map +1 -0
- package/dist/cortex-agent.d.ts +1020 -0
- package/dist/cortex-agent.d.ts.map +1 -0
- package/dist/cortex-agent.js +3589 -0
- package/dist/cortex-agent.js.map +1 -0
- package/dist/error-classifier.d.ts +48 -0
- package/dist/error-classifier.d.ts.map +1 -0
- package/dist/error-classifier.js +152 -0
- package/dist/error-classifier.js.map +1 -0
- package/dist/event-bridge.d.ts +166 -0
- package/dist/event-bridge.d.ts.map +1 -0
- package/dist/event-bridge.js +381 -0
- package/dist/event-bridge.js.map +1 -0
- package/dist/index.d.ts +55 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +57 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-client.d.ts +119 -0
- package/dist/mcp-client.d.ts.map +1 -0
- package/dist/mcp-client.js +474 -0
- package/dist/mcp-client.js.map +1 -0
- package/dist/model-wrapper.d.ts +58 -0
- package/dist/model-wrapper.d.ts.map +1 -0
- package/dist/model-wrapper.js +86 -0
- package/dist/model-wrapper.js.map +1 -0
- package/dist/noop-logger.d.ts +4 -0
- package/dist/noop-logger.d.ts.map +1 -0
- package/dist/noop-logger.js +8 -0
- package/dist/noop-logger.js.map +1 -0
- package/dist/prompt-diagnostics.d.ts +47 -0
- package/dist/prompt-diagnostics.d.ts.map +1 -0
- package/dist/prompt-diagnostics.js +230 -0
- package/dist/prompt-diagnostics.js.map +1 -0
- package/dist/provider-manager.d.ts +224 -0
- package/dist/provider-manager.d.ts.map +1 -0
- package/dist/provider-manager.js +563 -0
- package/dist/provider-manager.js.map +1 -0
- package/dist/provider-registry.d.ts +115 -0
- package/dist/provider-registry.d.ts.map +1 -0
- package/dist/provider-registry.js +305 -0
- package/dist/provider-registry.js.map +1 -0
- package/dist/schema-converter.d.ts +20 -0
- package/dist/schema-converter.d.ts.map +1 -0
- package/dist/schema-converter.js +48 -0
- package/dist/schema-converter.js.map +1 -0
- package/dist/skill-preprocessor.d.ts +46 -0
- package/dist/skill-preprocessor.d.ts.map +1 -0
- package/dist/skill-preprocessor.js +237 -0
- package/dist/skill-preprocessor.js.map +1 -0
- package/dist/skill-registry.d.ts +107 -0
- package/dist/skill-registry.d.ts.map +1 -0
- package/dist/skill-registry.js +330 -0
- package/dist/skill-registry.js.map +1 -0
- package/dist/skill-tool.d.ts +54 -0
- package/dist/skill-tool.d.ts.map +1 -0
- package/dist/skill-tool.js +88 -0
- package/dist/skill-tool.js.map +1 -0
- package/dist/sub-agent-manager.d.ts +90 -0
- package/dist/sub-agent-manager.d.ts.map +1 -0
- package/dist/sub-agent-manager.js +192 -0
- package/dist/sub-agent-manager.js.map +1 -0
- package/dist/token-estimator.d.ts +23 -0
- package/dist/token-estimator.d.ts.map +1 -0
- package/dist/token-estimator.js +27 -0
- package/dist/token-estimator.js.map +1 -0
- package/dist/tool-contract.d.ts +68 -0
- package/dist/tool-contract.d.ts.map +1 -0
- package/dist/tool-contract.js +35 -0
- package/dist/tool-contract.js.map +1 -0
- package/dist/tool-result-persistence.d.ts +89 -0
- package/dist/tool-result-persistence.d.ts.map +1 -0
- package/dist/tool-result-persistence.js +152 -0
- package/dist/tool-result-persistence.js.map +1 -0
- package/dist/tools/bash/index.d.ts +71 -0
- package/dist/tools/bash/index.d.ts.map +1 -0
- package/dist/tools/bash/index.js +485 -0
- package/dist/tools/bash/index.js.map +1 -0
- package/dist/tools/bash/interactive.d.ts +47 -0
- package/dist/tools/bash/interactive.d.ts.map +1 -0
- package/dist/tools/bash/interactive.js +262 -0
- package/dist/tools/bash/interactive.js.map +1 -0
- package/dist/tools/bash/safety.d.ts +149 -0
- package/dist/tools/bash/safety.d.ts.map +1 -0
- package/dist/tools/bash/safety.js +1116 -0
- package/dist/tools/bash/safety.js.map +1 -0
- package/dist/tools/edit.d.ts +57 -0
- package/dist/tools/edit.d.ts.map +1 -0
- package/dist/tools/edit.js +310 -0
- package/dist/tools/edit.js.map +1 -0
- package/dist/tools/glob.d.ts +34 -0
- package/dist/tools/glob.d.ts.map +1 -0
- package/dist/tools/glob.js +268 -0
- package/dist/tools/glob.js.map +1 -0
- package/dist/tools/grep.d.ts +53 -0
- package/dist/tools/grep.d.ts.map +1 -0
- package/dist/tools/grep.js +673 -0
- package/dist/tools/grep.js.map +1 -0
- package/dist/tools/index.d.ts +62 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +52 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/read.d.ts +43 -0
- package/dist/tools/read.d.ts.map +1 -0
- package/dist/tools/read.js +459 -0
- package/dist/tools/read.js.map +1 -0
- package/dist/tools/runtime.d.ts +62 -0
- package/dist/tools/runtime.d.ts.map +1 -0
- package/dist/tools/runtime.js +116 -0
- package/dist/tools/runtime.js.map +1 -0
- package/dist/tools/shared/cwd-tracker.d.ts +32 -0
- package/dist/tools/shared/cwd-tracker.d.ts.map +1 -0
- package/dist/tools/shared/cwd-tracker.js +44 -0
- package/dist/tools/shared/cwd-tracker.js.map +1 -0
- package/dist/tools/shared/edit-history.d.ts +55 -0
- package/dist/tools/shared/edit-history.d.ts.map +1 -0
- package/dist/tools/shared/edit-history.js +72 -0
- package/dist/tools/shared/edit-history.js.map +1 -0
- package/dist/tools/shared/edit-matcher.d.ts +83 -0
- package/dist/tools/shared/edit-matcher.d.ts.map +1 -0
- package/dist/tools/shared/edit-matcher.js +359 -0
- package/dist/tools/shared/edit-matcher.js.map +1 -0
- package/dist/tools/shared/file-mutation-lock.d.ts +22 -0
- package/dist/tools/shared/file-mutation-lock.d.ts.map +1 -0
- package/dist/tools/shared/file-mutation-lock.js +35 -0
- package/dist/tools/shared/file-mutation-lock.js.map +1 -0
- package/dist/tools/shared/gitignore.d.ts +17 -0
- package/dist/tools/shared/gitignore.d.ts.map +1 -0
- package/dist/tools/shared/gitignore.js +59 -0
- package/dist/tools/shared/gitignore.js.map +1 -0
- package/dist/tools/shared/pdf-extractor.d.ts +96 -0
- package/dist/tools/shared/pdf-extractor.d.ts.map +1 -0
- package/dist/tools/shared/pdf-extractor.js +196 -0
- package/dist/tools/shared/pdf-extractor.js.map +1 -0
- package/dist/tools/shared/read-registry.d.ts +66 -0
- package/dist/tools/shared/read-registry.d.ts.map +1 -0
- package/dist/tools/shared/read-registry.js +65 -0
- package/dist/tools/shared/read-registry.js.map +1 -0
- package/dist/tools/shared/safe-env.d.ts +18 -0
- package/dist/tools/shared/safe-env.d.ts.map +1 -0
- package/dist/tools/shared/safe-env.js +70 -0
- package/dist/tools/shared/safe-env.js.map +1 -0
- package/dist/tools/sub-agent.d.ts +91 -0
- package/dist/tools/sub-agent.d.ts.map +1 -0
- package/dist/tools/sub-agent.js +89 -0
- package/dist/tools/sub-agent.js.map +1 -0
- package/dist/tools/task-output.d.ts +38 -0
- package/dist/tools/task-output.d.ts.map +1 -0
- package/dist/tools/task-output.js +186 -0
- package/dist/tools/task-output.js.map +1 -0
- package/dist/tools/tool-search/index.d.ts +40 -0
- package/dist/tools/tool-search/index.d.ts.map +1 -0
- package/dist/tools/tool-search/index.js +110 -0
- package/dist/tools/tool-search/index.js.map +1 -0
- package/dist/tools/tool-search/registry.d.ts +82 -0
- package/dist/tools/tool-search/registry.d.ts.map +1 -0
- package/dist/tools/tool-search/registry.js +238 -0
- package/dist/tools/tool-search/registry.js.map +1 -0
- package/dist/tools/undo-edit.d.ts +51 -0
- package/dist/tools/undo-edit.d.ts.map +1 -0
- package/dist/tools/undo-edit.js +231 -0
- package/dist/tools/undo-edit.js.map +1 -0
- package/dist/tools/web-fetch/cache.d.ts +49 -0
- package/dist/tools/web-fetch/cache.d.ts.map +1 -0
- package/dist/tools/web-fetch/cache.js +89 -0
- package/dist/tools/web-fetch/cache.js.map +1 -0
- package/dist/tools/web-fetch/index.d.ts +53 -0
- package/dist/tools/web-fetch/index.d.ts.map +1 -0
- package/dist/tools/web-fetch/index.js +513 -0
- package/dist/tools/web-fetch/index.js.map +1 -0
- package/dist/tools/write.d.ts +59 -0
- package/dist/tools/write.d.ts.map +1 -0
- package/dist/tools/write.js +316 -0
- package/dist/tools/write.js.map +1 -0
- package/dist/types.d.ts +881 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +16 -0
- package/dist/types.js.map +1 -0
- package/dist/working-tags.d.ts +44 -0
- package/dist/working-tags.d.ts.map +1 -0
- package/dist/working-tags.js +103 -0
- package/dist/working-tags.js.map +1 -0
- package/package.json +87 -0
- package/src/budget-guard.ts +170 -0
- package/src/compaction/compaction.ts +386 -0
- package/src/compaction/failsafe.ts +185 -0
- package/src/compaction/index.ts +1199 -0
- package/src/compaction/microcompaction.ts +709 -0
- package/src/compaction/observational/buffering.ts +430 -0
- package/src/compaction/observational/constants.ts +532 -0
- package/src/compaction/observational/index.ts +837 -0
- package/src/compaction/observational/observer.ts +510 -0
- package/src/compaction/observational/recall-tool.ts +130 -0
- package/src/compaction/observational/reflector.ts +221 -0
- package/src/compaction/observational/types.ts +343 -0
- package/src/context-manager.ts +237 -0
- package/src/cortex-agent.ts +4297 -0
- package/src/error-classifier.ts +199 -0
- package/src/event-bridge.ts +508 -0
- package/src/index.ts +292 -0
- package/src/mcp-client.ts +582 -0
- package/src/model-wrapper.ts +128 -0
- package/src/noop-logger.ts +9 -0
- package/src/prompt-diagnostics.ts +296 -0
- package/src/provider-manager.ts +823 -0
- package/src/provider-registry.ts +386 -0
- package/src/schema-converter.ts +51 -0
- package/src/skill-preprocessor.ts +314 -0
- package/src/skill-registry.ts +378 -0
- package/src/skill-tool.ts +130 -0
- package/src/sub-agent-manager.ts +236 -0
- package/src/token-estimator.ts +26 -0
- package/src/tool-contract.ts +113 -0
- package/src/tool-result-persistence.ts +197 -0
- package/src/tools/bash/index.ts +633 -0
- package/src/tools/bash/interactive.ts +302 -0
- package/src/tools/bash/safety.ts +1297 -0
- package/src/tools/edit.ts +422 -0
- package/src/tools/glob.ts +330 -0
- package/src/tools/grep.ts +819 -0
- package/src/tools/index.ts +110 -0
- package/src/tools/read.ts +580 -0
- package/src/tools/runtime.ts +173 -0
- package/src/tools/shared/cwd-tracker.ts +50 -0
- package/src/tools/shared/edit-history.ts +96 -0
- package/src/tools/shared/edit-matcher.ts +457 -0
- package/src/tools/shared/file-mutation-lock.ts +40 -0
- package/src/tools/shared/gitignore.ts +61 -0
- package/src/tools/shared/pdf-extractor.ts +290 -0
- package/src/tools/shared/read-registry.ts +93 -0
- package/src/tools/shared/safe-env.ts +82 -0
- package/src/tools/sub-agent.ts +171 -0
- package/src/tools/task-output.ts +236 -0
- package/src/tools/tool-search/index.ts +167 -0
- package/src/tools/tool-search/registry.ts +278 -0
- package/src/tools/undo-edit.ts +314 -0
- package/src/tools/web-fetch/cache.ts +112 -0
- package/src/tools/web-fetch/index.ts +604 -0
- package/src/tools/write.ts +385 -0
- package/src/types.ts +1057 -0
- package/src/working-tags.ts +118 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noop-logger.js","sourceRoot":"","sources":["../src/noop-logger.ts"],"names":[],"mappings":"AAEA,8DAA8D;AAC9D,MAAM,CAAC,MAAM,WAAW,GAAiB;IACvC,KAAK,KAAI,CAAC;IACV,IAAI,KAAI,CAAC;IACT,IAAI,KAAI,CAAC;IACT,KAAK,KAAI,CAAC;CACX,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { CortexEvent } from './event-bridge.js';
|
|
2
|
+
import type { CortexLogger, PromptWatchdogDiagnosticsConfig } from './types.js';
|
|
3
|
+
interface PromptStartMeta {
|
|
4
|
+
inputLength: number;
|
|
5
|
+
messageCount: number;
|
|
6
|
+
provider: string;
|
|
7
|
+
modelId: string;
|
|
8
|
+
}
|
|
9
|
+
interface PromptFinishMeta {
|
|
10
|
+
status: 'resolved' | 'rejected' | 'cancelled';
|
|
11
|
+
durationMs: number;
|
|
12
|
+
turns: number;
|
|
13
|
+
totalCost: number;
|
|
14
|
+
currentContextTokens: number;
|
|
15
|
+
pendingBackgroundResults: number;
|
|
16
|
+
}
|
|
17
|
+
interface PromptDiagnosticsCallbacks {
|
|
18
|
+
isPrompting: () => boolean;
|
|
19
|
+
isAbortRequested: () => boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare class PromptWatchdogDiagnostics {
|
|
22
|
+
private readonly logger;
|
|
23
|
+
private readonly enabled;
|
|
24
|
+
private readonly heartbeatIntervalMs;
|
|
25
|
+
private readonly abortWaitWarningMs;
|
|
26
|
+
private readonly callbacks;
|
|
27
|
+
private readonly sessionId;
|
|
28
|
+
private sequence;
|
|
29
|
+
private activePrompt;
|
|
30
|
+
private heartbeatTimer;
|
|
31
|
+
private abortWaitTimer;
|
|
32
|
+
private abortWaitStartedAt;
|
|
33
|
+
constructor(config: PromptWatchdogDiagnosticsConfig | undefined, logger: CortexLogger | undefined, callbacks: PromptDiagnosticsCallbacks);
|
|
34
|
+
startPrompt(meta: PromptStartMeta): void;
|
|
35
|
+
recordEvent(event: CortexEvent): void;
|
|
36
|
+
recordAbortRequested(): void;
|
|
37
|
+
startAbortWait(): void;
|
|
38
|
+
finishAbortWait(): void;
|
|
39
|
+
finishPrompt(meta: PromptFinishMeta): void;
|
|
40
|
+
stop(): void;
|
|
41
|
+
private emitHeartbeat;
|
|
42
|
+
private currentPromptId;
|
|
43
|
+
private stopHeartbeat;
|
|
44
|
+
private stopAbortWait;
|
|
45
|
+
}
|
|
46
|
+
export {};
|
|
47
|
+
//# sourceMappingURL=prompt-diagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-diagnostics.d.ts","sourceRoot":"","sources":["../src/prompt-diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,KAAK,EACV,YAAY,EACZ,+BAA+B,EAChC,MAAM,YAAY,CAAC;AAoBpB,UAAU,eAAe;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,gBAAgB;IACxB,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,wBAAwB,EAAE,MAAM,CAAC;CAClC;AAED,UAAU,0BAA0B;IAClC,WAAW,EAAE,MAAM,OAAO,CAAC;IAC3B,gBAAgB,EAAE,MAAM,OAAO,CAAC;CACjC;AAQD,qBAAa,yBAAyB;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAEnC,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,kBAAkB,CAAuB;gBAG/C,MAAM,EAAE,+BAA+B,GAAG,SAAS,EACnD,MAAM,EAAE,YAAY,GAAG,SAAS,EAChC,SAAS,EAAE,0BAA0B;IAUvC,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IAqCxC,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAkErC,oBAAoB,IAAI,IAAI;IAW5B,cAAc,IAAI,IAAI;IAsBtB,eAAe,IAAI,IAAI;IAYvB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAwB1C,IAAI,IAAI,IAAI;IAMZ,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,aAAa;CAOtB"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { NOOP_LOGGER } from './noop-logger.js';
|
|
2
|
+
const DEFAULT_HEARTBEAT_INTERVAL_MS = 1000;
|
|
3
|
+
const DEFAULT_ABORT_WAIT_WARNING_MS = 2000;
|
|
4
|
+
function maybeUnref(timer) {
|
|
5
|
+
if ('unref' in timer && typeof timer.unref === 'function') {
|
|
6
|
+
timer.unref();
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export class PromptWatchdogDiagnostics {
|
|
10
|
+
logger;
|
|
11
|
+
enabled;
|
|
12
|
+
heartbeatIntervalMs;
|
|
13
|
+
abortWaitWarningMs;
|
|
14
|
+
callbacks;
|
|
15
|
+
sessionId;
|
|
16
|
+
sequence = 0;
|
|
17
|
+
activePrompt = null;
|
|
18
|
+
heartbeatTimer = null;
|
|
19
|
+
abortWaitTimer = null;
|
|
20
|
+
abortWaitStartedAt = null;
|
|
21
|
+
constructor(config, logger, callbacks) {
|
|
22
|
+
this.logger = logger ?? NOOP_LOGGER;
|
|
23
|
+
this.enabled = config?.enabled ?? false;
|
|
24
|
+
this.heartbeatIntervalMs = Math.max(250, config?.heartbeatIntervalMs ?? DEFAULT_HEARTBEAT_INTERVAL_MS);
|
|
25
|
+
this.abortWaitWarningMs = Math.max(250, config?.abortWaitWarningMs ?? DEFAULT_ABORT_WAIT_WARNING_MS);
|
|
26
|
+
this.callbacks = callbacks;
|
|
27
|
+
this.sessionId = Math.random().toString(36).slice(2, 8);
|
|
28
|
+
}
|
|
29
|
+
startPrompt(meta) {
|
|
30
|
+
if (!this.enabled)
|
|
31
|
+
return;
|
|
32
|
+
this.stopHeartbeat();
|
|
33
|
+
this.sequence += 1;
|
|
34
|
+
const now = Date.now();
|
|
35
|
+
this.activePrompt = {
|
|
36
|
+
startedAt: now,
|
|
37
|
+
inputLength: meta.inputLength,
|
|
38
|
+
messageCount: meta.messageCount,
|
|
39
|
+
provider: meta.provider,
|
|
40
|
+
modelId: meta.modelId,
|
|
41
|
+
lastEventAt: now,
|
|
42
|
+
lastEventType: 'prompt_started',
|
|
43
|
+
eventCount: 0,
|
|
44
|
+
toolCallCount: 0,
|
|
45
|
+
responseChunkCount: 0,
|
|
46
|
+
childEventCount: 0,
|
|
47
|
+
sawFirstResponseChunk: false,
|
|
48
|
+
};
|
|
49
|
+
this.logger.info('[Diagnostics] prompt_started', {
|
|
50
|
+
diagnosticsSessionId: this.sessionId,
|
|
51
|
+
promptId: this.currentPromptId(),
|
|
52
|
+
inputLength: meta.inputLength,
|
|
53
|
+
messageCount: meta.messageCount,
|
|
54
|
+
provider: meta.provider,
|
|
55
|
+
model: meta.modelId,
|
|
56
|
+
});
|
|
57
|
+
this.heartbeatTimer = setInterval(() => {
|
|
58
|
+
this.emitHeartbeat();
|
|
59
|
+
}, this.heartbeatIntervalMs);
|
|
60
|
+
maybeUnref(this.heartbeatTimer);
|
|
61
|
+
}
|
|
62
|
+
recordEvent(event) {
|
|
63
|
+
if (!this.enabled || !this.activePrompt)
|
|
64
|
+
return;
|
|
65
|
+
const now = Date.now();
|
|
66
|
+
this.activePrompt.lastEventAt = now;
|
|
67
|
+
this.activePrompt.lastEventType = event.childTaskId ? `${event.type}:child` : event.type;
|
|
68
|
+
this.activePrompt.eventCount += 1;
|
|
69
|
+
if (event.childTaskId) {
|
|
70
|
+
this.activePrompt.childEventCount += 1;
|
|
71
|
+
}
|
|
72
|
+
if (event.type === 'tool_call_start') {
|
|
73
|
+
this.activePrompt.toolCallCount += 1;
|
|
74
|
+
this.logger.debug('[Diagnostics] tool_call_start', {
|
|
75
|
+
diagnosticsSessionId: this.sessionId,
|
|
76
|
+
promptId: this.currentPromptId(),
|
|
77
|
+
toolName: event.payload?.toolName,
|
|
78
|
+
childTaskId: event.childTaskId,
|
|
79
|
+
});
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
if (event.type === 'tool_call_end') {
|
|
83
|
+
const endPayload = event.payload;
|
|
84
|
+
this.logger.debug('[Diagnostics] tool_call_end', {
|
|
85
|
+
diagnosticsSessionId: this.sessionId,
|
|
86
|
+
promptId: this.currentPromptId(),
|
|
87
|
+
toolName: endPayload?.toolName,
|
|
88
|
+
childTaskId: event.childTaskId,
|
|
89
|
+
durationMs: endPayload?.durationMs,
|
|
90
|
+
isError: endPayload?.isError,
|
|
91
|
+
});
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
if (event.type === 'response_start') {
|
|
95
|
+
this.logger.debug('[Diagnostics] response_started', {
|
|
96
|
+
diagnosticsSessionId: this.sessionId,
|
|
97
|
+
promptId: this.currentPromptId(),
|
|
98
|
+
childTaskId: event.childTaskId,
|
|
99
|
+
});
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
if (event.type === 'response_chunk') {
|
|
103
|
+
this.activePrompt.responseChunkCount += 1;
|
|
104
|
+
if (!this.activePrompt.sawFirstResponseChunk) {
|
|
105
|
+
this.activePrompt.sawFirstResponseChunk = true;
|
|
106
|
+
this.logger.debug('[Diagnostics] first_response_chunk', {
|
|
107
|
+
diagnosticsSessionId: this.sessionId,
|
|
108
|
+
promptId: this.currentPromptId(),
|
|
109
|
+
childTaskId: event.childTaskId,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
if (event.type === 'response_end' || event.type === 'turn_start' || event.type === 'turn_end' || event.type === 'loop_end') {
|
|
115
|
+
this.logger.debug(`[Diagnostics] ${event.type}`, {
|
|
116
|
+
diagnosticsSessionId: this.sessionId,
|
|
117
|
+
promptId: this.currentPromptId(),
|
|
118
|
+
childTaskId: event.childTaskId,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
recordAbortRequested() {
|
|
123
|
+
if (!this.enabled)
|
|
124
|
+
return;
|
|
125
|
+
this.logger.info('[Diagnostics] abort_requested', {
|
|
126
|
+
diagnosticsSessionId: this.sessionId,
|
|
127
|
+
promptId: this.currentPromptId(),
|
|
128
|
+
isPrompting: this.callbacks.isPrompting(),
|
|
129
|
+
abortRequested: this.callbacks.isAbortRequested(),
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
startAbortWait() {
|
|
133
|
+
if (!this.enabled)
|
|
134
|
+
return;
|
|
135
|
+
this.stopAbortWait();
|
|
136
|
+
this.abortWaitStartedAt = Date.now();
|
|
137
|
+
this.logger.debug('[Diagnostics] abort_wait_started', {
|
|
138
|
+
diagnosticsSessionId: this.sessionId,
|
|
139
|
+
promptId: this.currentPromptId(),
|
|
140
|
+
});
|
|
141
|
+
this.abortWaitTimer = setInterval(() => {
|
|
142
|
+
if (this.abortWaitStartedAt === null)
|
|
143
|
+
return;
|
|
144
|
+
this.logger.warn('[Diagnostics] abort_wait_still_pending', {
|
|
145
|
+
diagnosticsSessionId: this.sessionId,
|
|
146
|
+
promptId: this.currentPromptId(),
|
|
147
|
+
elapsedMs: Date.now() - this.abortWaitStartedAt,
|
|
148
|
+
isPrompting: this.callbacks.isPrompting(),
|
|
149
|
+
abortRequested: this.callbacks.isAbortRequested(),
|
|
150
|
+
});
|
|
151
|
+
}, this.abortWaitWarningMs);
|
|
152
|
+
maybeUnref(this.abortWaitTimer);
|
|
153
|
+
}
|
|
154
|
+
finishAbortWait() {
|
|
155
|
+
if (!this.enabled)
|
|
156
|
+
return;
|
|
157
|
+
const elapsedMs = this.abortWaitStartedAt === null ? 0 : Date.now() - this.abortWaitStartedAt;
|
|
158
|
+
this.stopAbortWait();
|
|
159
|
+
this.logger.info('[Diagnostics] abort_wait_finished', {
|
|
160
|
+
diagnosticsSessionId: this.sessionId,
|
|
161
|
+
promptId: this.currentPromptId(),
|
|
162
|
+
elapsedMs,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
finishPrompt(meta) {
|
|
166
|
+
if (!this.enabled || !this.activePrompt)
|
|
167
|
+
return;
|
|
168
|
+
const snapshot = this.activePrompt;
|
|
169
|
+
this.stopHeartbeat();
|
|
170
|
+
this.logger.info('[Diagnostics] prompt_finished', {
|
|
171
|
+
diagnosticsSessionId: this.sessionId,
|
|
172
|
+
promptId: this.currentPromptId(),
|
|
173
|
+
status: meta.status,
|
|
174
|
+
durationMs: meta.durationMs,
|
|
175
|
+
turns: meta.turns,
|
|
176
|
+
totalCost: meta.totalCost,
|
|
177
|
+
currentContextTokens: meta.currentContextTokens,
|
|
178
|
+
pendingBackgroundResults: meta.pendingBackgroundResults,
|
|
179
|
+
lastEventType: snapshot.lastEventType,
|
|
180
|
+
lastEventAgoMs: Date.now() - snapshot.lastEventAt,
|
|
181
|
+
eventCount: snapshot.eventCount,
|
|
182
|
+
toolCallCount: snapshot.toolCallCount,
|
|
183
|
+
responseChunkCount: snapshot.responseChunkCount,
|
|
184
|
+
childEventCount: snapshot.childEventCount,
|
|
185
|
+
});
|
|
186
|
+
this.activePrompt = null;
|
|
187
|
+
}
|
|
188
|
+
stop() {
|
|
189
|
+
this.stopHeartbeat();
|
|
190
|
+
this.stopAbortWait();
|
|
191
|
+
this.activePrompt = null;
|
|
192
|
+
}
|
|
193
|
+
emitHeartbeat() {
|
|
194
|
+
if (!this.activePrompt)
|
|
195
|
+
return;
|
|
196
|
+
const now = Date.now();
|
|
197
|
+
this.logger.debug('[Diagnostics] prompt_heartbeat', {
|
|
198
|
+
diagnosticsSessionId: this.sessionId,
|
|
199
|
+
promptId: this.currentPromptId(),
|
|
200
|
+
elapsedMs: now - this.activePrompt.startedAt,
|
|
201
|
+
sinceLastEventMs: now - this.activePrompt.lastEventAt,
|
|
202
|
+
lastEventType: this.activePrompt.lastEventType,
|
|
203
|
+
isPrompting: this.callbacks.isPrompting(),
|
|
204
|
+
abortRequested: this.callbacks.isAbortRequested(),
|
|
205
|
+
eventCount: this.activePrompt.eventCount,
|
|
206
|
+
toolCallCount: this.activePrompt.toolCallCount,
|
|
207
|
+
responseChunkCount: this.activePrompt.responseChunkCount,
|
|
208
|
+
childEventCount: this.activePrompt.childEventCount,
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
currentPromptId() {
|
|
212
|
+
if (!this.activePrompt)
|
|
213
|
+
return null;
|
|
214
|
+
return `prompt-${this.sequence}`;
|
|
215
|
+
}
|
|
216
|
+
stopHeartbeat() {
|
|
217
|
+
if (this.heartbeatTimer) {
|
|
218
|
+
clearInterval(this.heartbeatTimer);
|
|
219
|
+
this.heartbeatTimer = null;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
stopAbortWait() {
|
|
223
|
+
if (this.abortWaitTimer) {
|
|
224
|
+
clearInterval(this.abortWaitTimer);
|
|
225
|
+
this.abortWaitTimer = null;
|
|
226
|
+
}
|
|
227
|
+
this.abortWaitStartedAt = null;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=prompt-diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-diagnostics.js","sourceRoot":"","sources":["../src/prompt-diagnostics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ProviderManager: standalone class wrapping pi-ai for provider discovery,
|
|
3
|
+
* OAuth login/refresh, API key validation, model resolution, and custom
|
|
4
|
+
* endpoint creation.
|
|
5
|
+
*
|
|
6
|
+
* ProviderManager and CortexAgent are fully independent. Neither knows
|
|
7
|
+
* about the other. The consumer creates both, uses ProviderManager for
|
|
8
|
+
* auth/discovery, and provides a getApiKey callback to CortexAgent.
|
|
9
|
+
*
|
|
10
|
+
* Pi-ai is loaded dynamically so consumers never import it directly.
|
|
11
|
+
* If the dependency is missing or unavailable, methods that require it
|
|
12
|
+
* throw clear errors.
|
|
13
|
+
*
|
|
14
|
+
* Reference: provider-manager.md
|
|
15
|
+
*/
|
|
16
|
+
import type { ProviderInfo, ModelInfo } from './provider-registry.js';
|
|
17
|
+
import type { CortexModel } from './model-wrapper.js';
|
|
18
|
+
/** Callbacks provided by the consumer during an OAuth flow. */
|
|
19
|
+
export interface OAuthCallbacks {
|
|
20
|
+
/**
|
|
21
|
+
* Called when the user needs to visit a URL to authorize.
|
|
22
|
+
* The consumer should open the URL in a browser or display it.
|
|
23
|
+
*/
|
|
24
|
+
onAuth: (info: {
|
|
25
|
+
url: string;
|
|
26
|
+
instructions?: string;
|
|
27
|
+
}) => void;
|
|
28
|
+
/**
|
|
29
|
+
* Called when the OAuth flow needs user input (e.g., a prompt).
|
|
30
|
+
* The consumer should display the prompt and return the user's response.
|
|
31
|
+
*/
|
|
32
|
+
onPrompt: (prompt: {
|
|
33
|
+
message: string;
|
|
34
|
+
placeholder?: string;
|
|
35
|
+
allowEmpty?: boolean;
|
|
36
|
+
}) => Promise<string>;
|
|
37
|
+
/**
|
|
38
|
+
* Called with progress messages during the flow.
|
|
39
|
+
*/
|
|
40
|
+
onProgress?: (message: string) => void;
|
|
41
|
+
/**
|
|
42
|
+
* Called when a callback-server OAuth flow needs the user to paste a
|
|
43
|
+
* manual authorization code.
|
|
44
|
+
*/
|
|
45
|
+
onManualCodeInput?: () => Promise<string>;
|
|
46
|
+
/**
|
|
47
|
+
* Called when the OAuth flow needs the user to choose from provider-specific
|
|
48
|
+
* options, such as a Copilot organization or endpoint.
|
|
49
|
+
*/
|
|
50
|
+
onSelect?: (prompt: {
|
|
51
|
+
message: string;
|
|
52
|
+
options: Array<{
|
|
53
|
+
id: string;
|
|
54
|
+
label: string;
|
|
55
|
+
}>;
|
|
56
|
+
}) => Promise<string | undefined>;
|
|
57
|
+
}
|
|
58
|
+
/** Display-safe metadata extracted at login time. */
|
|
59
|
+
export interface OAuthMeta {
|
|
60
|
+
/** Provider identifier. */
|
|
61
|
+
provider: string;
|
|
62
|
+
/** Display name, email, or account identifier (if available). */
|
|
63
|
+
displayName?: string | undefined;
|
|
64
|
+
/** When the access token expires (Unix timestamp ms). Undefined if non-expiring. */
|
|
65
|
+
expiresAt?: number | undefined;
|
|
66
|
+
/** Whether the credential supports automatic refresh. */
|
|
67
|
+
refreshable: boolean;
|
|
68
|
+
}
|
|
69
|
+
/** Result of a successful OAuth login. */
|
|
70
|
+
export interface OAuthResult {
|
|
71
|
+
/**
|
|
72
|
+
* Serialized credential payload. The consumer stores this (encrypted)
|
|
73
|
+
* and passes it back to resolveOAuthApiKey() for refresh.
|
|
74
|
+
* Treat as an opaque blob: encrypt, store, decrypt, pass back. Never parse.
|
|
75
|
+
*/
|
|
76
|
+
credentials: string;
|
|
77
|
+
/** Display-safe metadata extracted at login time. */
|
|
78
|
+
meta: OAuthMeta;
|
|
79
|
+
}
|
|
80
|
+
/** Result of resolving/refreshing an OAuth API key. */
|
|
81
|
+
export interface OAuthRefreshResult {
|
|
82
|
+
/** The API key to use for LLM calls. */
|
|
83
|
+
apiKey: string;
|
|
84
|
+
/**
|
|
85
|
+
* Credential payload (may be updated if refresh occurred).
|
|
86
|
+
* Same format as OAuthResult.credentials.
|
|
87
|
+
*/
|
|
88
|
+
credentials: string;
|
|
89
|
+
/** Updated metadata. */
|
|
90
|
+
meta: OAuthMeta;
|
|
91
|
+
/** Whether the credentials were actually refreshed (true) or reused as-is (false). */
|
|
92
|
+
changed: boolean;
|
|
93
|
+
}
|
|
94
|
+
/** Configuration for creating a custom model endpoint. */
|
|
95
|
+
export interface CustomModelConfig {
|
|
96
|
+
/** Base URL of the OpenAI-compatible API (e.g., 'http://localhost:11434/v1'). */
|
|
97
|
+
baseUrl: string;
|
|
98
|
+
/** Model identifier to send in API requests. */
|
|
99
|
+
modelId: string;
|
|
100
|
+
/** Context window size (default: 128,000). */
|
|
101
|
+
contextWindow?: number | undefined;
|
|
102
|
+
/** Optional API key (some local servers don't require one). */
|
|
103
|
+
apiKey?: string | undefined;
|
|
104
|
+
/** Compatibility settings for non-standard servers. */
|
|
105
|
+
compat?: {
|
|
106
|
+
/** Whether the server supports the 'developer' role (default: true). */
|
|
107
|
+
supportsDeveloperRole?: boolean | undefined;
|
|
108
|
+
/** Whether the server supports reasoning_effort (default: true). */
|
|
109
|
+
supportsReasoningEffort?: boolean | undefined;
|
|
110
|
+
} | undefined;
|
|
111
|
+
}
|
|
112
|
+
export type ApiKeyValidationStatus = 'valid' | 'invalid_credentials' | 'transient_error' | 'resolution_error';
|
|
113
|
+
export interface ApiKeyValidationResult {
|
|
114
|
+
provider: string;
|
|
115
|
+
modelId: string | null;
|
|
116
|
+
valid: boolean;
|
|
117
|
+
retryable: boolean;
|
|
118
|
+
status: ApiKeyValidationStatus;
|
|
119
|
+
message?: string | undefined;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Interface for provider management operations.
|
|
123
|
+
* Consumers can mock this for testing.
|
|
124
|
+
*/
|
|
125
|
+
export interface IProviderManager {
|
|
126
|
+
listProviders(): ProviderInfo[];
|
|
127
|
+
listOAuthProviders(): string[];
|
|
128
|
+
listModels(provider: string): Promise<ModelInfo[]>;
|
|
129
|
+
initiateOAuth(provider: string, callbacks: OAuthCallbacks): Promise<OAuthResult>;
|
|
130
|
+
cancelOAuth(): void;
|
|
131
|
+
resolveOAuthApiKey(provider: string, credentials: string): Promise<OAuthRefreshResult>;
|
|
132
|
+
validateApiKey(provider: string, apiKey: string): Promise<ApiKeyValidationResult>;
|
|
133
|
+
checkEnvApiKey(provider: string): string | null;
|
|
134
|
+
resolveModel(provider: string, modelId: string): Promise<CortexModel>;
|
|
135
|
+
createCustomModel(config: CustomModelConfig): Promise<CortexModel>;
|
|
136
|
+
}
|
|
137
|
+
export declare class ProviderManager implements IProviderManager {
|
|
138
|
+
/** Active OAuth AbortController, if any. */
|
|
139
|
+
private activeOAuthAbort;
|
|
140
|
+
/**
|
|
141
|
+
* List all known providers with their metadata.
|
|
142
|
+
*/
|
|
143
|
+
listProviders(): ProviderInfo[];
|
|
144
|
+
/**
|
|
145
|
+
* List provider IDs that support OAuth authentication.
|
|
146
|
+
*/
|
|
147
|
+
listOAuthProviders(): string[];
|
|
148
|
+
/**
|
|
149
|
+
* List models available from a provider.
|
|
150
|
+
* Delegates to pi-ai's getModels().
|
|
151
|
+
*
|
|
152
|
+
* @param provider - Provider identifier
|
|
153
|
+
* @returns Array of ModelInfo
|
|
154
|
+
* @throws Error if pi-ai is not installed
|
|
155
|
+
*/
|
|
156
|
+
listModels(provider: string): Promise<ModelInfo[]>;
|
|
157
|
+
/**
|
|
158
|
+
* Initiate an OAuth login flow for a provider.
|
|
159
|
+
*
|
|
160
|
+
* @param provider - OAuth provider identifier
|
|
161
|
+
* @param callbacks - UI callbacks for auth URL, prompts, and progress
|
|
162
|
+
* @returns The OAuth credentials and display metadata
|
|
163
|
+
* @throws Error if the provider does not support OAuth or pi-ai is not installed
|
|
164
|
+
*/
|
|
165
|
+
initiateOAuth(provider: string, callbacks: OAuthCallbacks): Promise<OAuthResult>;
|
|
166
|
+
/**
|
|
167
|
+
* Cancel any in-progress OAuth flow.
|
|
168
|
+
*/
|
|
169
|
+
cancelOAuth(): void;
|
|
170
|
+
/**
|
|
171
|
+
* Resolve an API key from stored OAuth credentials, refreshing if needed.
|
|
172
|
+
*
|
|
173
|
+
* @param provider - The OAuth provider
|
|
174
|
+
* @param credentials - Serialized credential blob from initiateOAuth()
|
|
175
|
+
* @returns The API key and potentially updated credentials
|
|
176
|
+
* @throws Error if pi-ai is not installed or resolution fails
|
|
177
|
+
*/
|
|
178
|
+
resolveOAuthApiKey(provider: string, credentials: string): Promise<OAuthRefreshResult>;
|
|
179
|
+
/**
|
|
180
|
+
* Validate an API key by making a minimal LLM call (maxTokens: 1).
|
|
181
|
+
*
|
|
182
|
+
* @param provider - The provider to validate against
|
|
183
|
+
* @param apiKey - The API key to validate
|
|
184
|
+
* @returns True if the key is valid, false otherwise
|
|
185
|
+
* @throws Error if pi-ai is not installed
|
|
186
|
+
*/
|
|
187
|
+
validateApiKey(provider: string, apiKey: string): Promise<ApiKeyValidationResult>;
|
|
188
|
+
/**
|
|
189
|
+
* Check whether a provider's API key is available in environment variables.
|
|
190
|
+
*
|
|
191
|
+
* @param provider - The provider to check
|
|
192
|
+
* @returns The API key if found, null otherwise
|
|
193
|
+
*/
|
|
194
|
+
checkEnvApiKey(provider: string): string | null;
|
|
195
|
+
/**
|
|
196
|
+
* Resolve a provider + model ID into a CortexModel.
|
|
197
|
+
*
|
|
198
|
+
* @param provider - The provider identifier
|
|
199
|
+
* @param modelId - The model identifier
|
|
200
|
+
* @returns A CortexModel handle
|
|
201
|
+
* @throws Error if pi-ai is not installed or the model is not found
|
|
202
|
+
*/
|
|
203
|
+
resolveModel(provider: string, modelId: string): Promise<CortexModel>;
|
|
204
|
+
/**
|
|
205
|
+
* Create a custom model for an OpenAI-compatible endpoint.
|
|
206
|
+
*
|
|
207
|
+
* @param config - Custom model configuration
|
|
208
|
+
* @returns A CortexModel handle
|
|
209
|
+
* @throws Error if pi-ai is not installed
|
|
210
|
+
*/
|
|
211
|
+
createCustomModel(config: CustomModelConfig): Promise<CortexModel>;
|
|
212
|
+
/**
|
|
213
|
+
* Get the cheapest known model ID for a provider.
|
|
214
|
+
* Uses the UTILITY_MODEL_DEFAULTS as a proxy for "smallest model."
|
|
215
|
+
*/
|
|
216
|
+
private getSmallestModelId;
|
|
217
|
+
/**
|
|
218
|
+
* Attempt to validate an API key by making a minimal LLM call.
|
|
219
|
+
*/
|
|
220
|
+
private tryValidation;
|
|
221
|
+
private classifyValidationError;
|
|
222
|
+
private extractSilentValidationError;
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=provider-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-manager.d.ts","sourceRoot":"","sources":["../src/provider-manager.ts"],"names":[],"mappings":"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"}
|