@npm-safe/core-dsh 1.0.5
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 +204 -0
- package/dist/index.d.ts +513 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +711 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/anthropic.d.ts +47 -0
- package/dist/llm/anthropic.d.ts.map +1 -0
- package/dist/llm/anthropic.js +161 -0
- package/dist/llm/anthropic.js.map +1 -0
- package/dist/llm/gemini.d.ts +47 -0
- package/dist/llm/gemini.d.ts.map +1 -0
- package/dist/llm/gemini.js +165 -0
- package/dist/llm/gemini.js.map +1 -0
- package/dist/llm/llm-config.d.ts +97 -0
- package/dist/llm/llm-config.d.ts.map +1 -0
- package/dist/llm/llm-config.js +188 -0
- package/dist/llm/llm-config.js.map +1 -0
- package/dist/llm/parse.d.ts +95 -0
- package/dist/llm/parse.d.ts.map +1 -0
- package/dist/llm/parse.js +158 -0
- package/dist/llm/parse.js.map +1 -0
- package/dist/llm/provider.d.ts +122 -0
- package/dist/llm/provider.d.ts.map +1 -0
- package/dist/llm/provider.js +206 -0
- package/dist/llm/provider.js.map +1 -0
- package/dist/registry/client.d.ts +164 -0
- package/dist/registry/client.d.ts.map +1 -0
- package/dist/registry/client.js +378 -0
- package/dist/registry/client.js.map +1 -0
- package/dist/registry/types.d.ts +226 -0
- package/dist/registry/types.d.ts.map +1 -0
- package/dist/registry/types.js +32 -0
- package/dist/registry/types.js.map +1 -0
- package/dist/registry/validator.d.ts +87 -0
- package/dist/registry/validator.d.ts.map +1 -0
- package/dist/registry/validator.js +214 -0
- package/dist/registry/validator.js.map +1 -0
- package/dist/scanner/ci-scan.d.ts +82 -0
- package/dist/scanner/ci-scan.d.ts.map +1 -0
- package/dist/scanner/ci-scan.js +130 -0
- package/dist/scanner/ci-scan.js.map +1 -0
- package/dist/scanner/rule-config.d.ts +61 -0
- package/dist/scanner/rule-config.d.ts.map +1 -0
- package/dist/scanner/rule-config.js +103 -0
- package/dist/scanner/rule-config.js.map +1 -0
- package/dist/scanner/rule-loader.d.ts +28 -0
- package/dist/scanner/rule-loader.d.ts.map +1 -0
- package/dist/scanner/rule-loader.js +67 -0
- package/dist/scanner/rule-loader.js.map +1 -0
- package/dist/scanner/static-rules.d.ts +88 -0
- package/dist/scanner/static-rules.d.ts.map +1 -0
- package/dist/scanner/static-rules.js +723 -0
- package/dist/scanner/static-rules.js.map +1 -0
- package/dist/scanner/types.d.ts +177 -0
- package/dist/scanner/types.d.ts.map +1 -0
- package/dist/scanner/types.js +53 -0
- package/dist/scanner/types.js.map +1 -0
- package/dist/scheduler/rate-limiter.d.ts +74 -0
- package/dist/scheduler/rate-limiter.d.ts.map +1 -0
- package/dist/scheduler/rate-limiter.js +182 -0
- package/dist/scheduler/rate-limiter.js.map +1 -0
- package/dist/scheduler/refresh-scheduler.d.ts +201 -0
- package/dist/scheduler/refresh-scheduler.d.ts.map +1 -0
- package/dist/scheduler/refresh-scheduler.js +295 -0
- package/dist/scheduler/refresh-scheduler.js.map +1 -0
- package/dist/store/cache-manager.d.ts +166 -0
- package/dist/store/cache-manager.d.ts.map +1 -0
- package/dist/store/cache-manager.js +356 -0
- package/dist/store/cache-manager.js.map +1 -0
- package/dist/store/database.d.ts +81 -0
- package/dist/store/database.d.ts.map +1 -0
- package/dist/store/database.js +182 -0
- package/dist/store/database.js.map +1 -0
- package/dist/store/schema.d.ts +42 -0
- package/dist/store/schema.d.ts.map +1 -0
- package/dist/store/schema.js +126 -0
- package/dist/store/schema.js.map +1 -0
- package/dist/translator/provider.d.ts +152 -0
- package/dist/translator/provider.d.ts.map +1 -0
- package/dist/translator/provider.js +159 -0
- package/dist/translator/provider.js.map +1 -0
- package/dist/translator/types.d.ts +83 -0
- package/dist/translator/types.d.ts.map +1 -0
- package/dist/translator/types.js +58 -0
- package/dist/translator/types.js.map +1 -0
- package/package.json +42 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anthropic LLM scan provider.
|
|
3
|
+
*
|
|
4
|
+
* Talks to the Anthropic Messages API (`/v1/messages`). The Anthropic
|
|
5
|
+
* request shape differs from the OpenAI-compatible surface in two ways:
|
|
6
|
+
* - `system` is a top-level string, not a `system` message role.
|
|
7
|
+
* - `max_tokens` is a required field on every request.
|
|
8
|
+
* The response is an array of content blocks; the first block's `text`
|
|
9
|
+
* field carries the model output.
|
|
10
|
+
*/
|
|
11
|
+
import type { LlmScanReport } from "../scanner/types.js";
|
|
12
|
+
import type { LlmScanInput, LlmScanProvider, LlmProviderOptions } from "./provider.js";
|
|
13
|
+
/**
|
|
14
|
+
* Anthropic Messages API LLM scan provider.
|
|
15
|
+
*
|
|
16
|
+
* @see {@link LlmScanProvider}
|
|
17
|
+
*/
|
|
18
|
+
export declare class AnthropicLlmProvider implements LlmScanProvider {
|
|
19
|
+
private readonly apiKey?;
|
|
20
|
+
private readonly baseUrl;
|
|
21
|
+
private readonly model;
|
|
22
|
+
private readonly maxTokens;
|
|
23
|
+
private readonly timeoutMs;
|
|
24
|
+
private readonly maxInputChars;
|
|
25
|
+
/**
|
|
26
|
+
* @param options - Provider configuration. Env-var fallbacks:
|
|
27
|
+
* `apiKey` defaults to `process.env.ANTHROPIC_API_KEY`.
|
|
28
|
+
*/
|
|
29
|
+
constructor(options?: LlmProviderOptions);
|
|
30
|
+
/** @inheritdoc */
|
|
31
|
+
scan(input: LlmScanInput): Promise<LlmScanReport>;
|
|
32
|
+
/** @inheritdoc */
|
|
33
|
+
testConnection(): Promise<boolean>;
|
|
34
|
+
/**
|
|
35
|
+
* Issue a POST to `/v1/messages` with timeout and error normalization.
|
|
36
|
+
*
|
|
37
|
+
* @param body - The JSON request body.
|
|
38
|
+
* @param signal - Optional external abort signal combined with the owned
|
|
39
|
+
* timeout controller via `AbortSignal.any`. An external abort propagates
|
|
40
|
+
* as `DOMException('The operation was aborted.', 'AbortError')`.
|
|
41
|
+
* @returns The `content[0].text` string from the response.
|
|
42
|
+
* @throws {LlmProviderError} On network, timeout, HTTP, or shape errors.
|
|
43
|
+
* @throws {DOMException} With name `AbortError` when `signal` is aborted.
|
|
44
|
+
*/
|
|
45
|
+
private request;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/llm/anthropic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAcvF;;;;GAIG;AACH,qBAAa,oBAAqB,YAAW,eAAe;IAC1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IAEvC;;;OAGG;gBACS,OAAO,GAAE,kBAAuB;IAS5C,kBAAkB;IACZ,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAiCvD,kBAAkB;IACZ,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAUxC;;;;;;;;;;OAUG;YACW,OAAO;CAqDtB"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anthropic LLM scan provider.
|
|
3
|
+
*
|
|
4
|
+
* Talks to the Anthropic Messages API (`/v1/messages`). The Anthropic
|
|
5
|
+
* request shape differs from the OpenAI-compatible surface in two ways:
|
|
6
|
+
* - `system` is a top-level string, not a `system` message role.
|
|
7
|
+
* - `max_tokens` is a required field on every request.
|
|
8
|
+
* The response is an array of content blocks; the first block's `text`
|
|
9
|
+
* field carries the model output.
|
|
10
|
+
*/
|
|
11
|
+
import { LlmProviderError, SYSTEM_PROMPT, buildReport, parseJsonObject, } from "./parse.js";
|
|
12
|
+
const DEFAULT_BASE_URL = "https://api.anthropic.com";
|
|
13
|
+
const DEFAULT_MODEL = "claude-3-5-sonnet-latest";
|
|
14
|
+
const DEFAULT_MAX_TOKENS = 4096;
|
|
15
|
+
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
16
|
+
const DEFAULT_MAX_INPUT_CHARS = 12_000;
|
|
17
|
+
/**
|
|
18
|
+
* Anthropic Messages API LLM scan provider.
|
|
19
|
+
*
|
|
20
|
+
* @see {@link LlmScanProvider}
|
|
21
|
+
*/
|
|
22
|
+
export class AnthropicLlmProvider {
|
|
23
|
+
apiKey;
|
|
24
|
+
baseUrl;
|
|
25
|
+
model;
|
|
26
|
+
maxTokens;
|
|
27
|
+
timeoutMs;
|
|
28
|
+
maxInputChars;
|
|
29
|
+
/**
|
|
30
|
+
* @param options - Provider configuration. Env-var fallbacks:
|
|
31
|
+
* `apiKey` defaults to `process.env.ANTHROPIC_API_KEY`.
|
|
32
|
+
*/
|
|
33
|
+
constructor(options = {}) {
|
|
34
|
+
this.apiKey = options.apiKey ?? process.env.ANTHROPIC_API_KEY;
|
|
35
|
+
this.baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\/+$/, "");
|
|
36
|
+
this.model = options.model ?? DEFAULT_MODEL;
|
|
37
|
+
this.maxTokens = options.maxTokens ?? DEFAULT_MAX_TOKENS;
|
|
38
|
+
this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
39
|
+
this.maxInputChars = options.maxInputChars ?? DEFAULT_MAX_INPUT_CHARS;
|
|
40
|
+
}
|
|
41
|
+
/** @inheritdoc */
|
|
42
|
+
async scan(input) {
|
|
43
|
+
if (!this.apiKey) {
|
|
44
|
+
return {
|
|
45
|
+
enabled: false,
|
|
46
|
+
reason: "LLM provider is not configured.",
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
const packageJsonBudget = Math.floor(this.maxInputChars / 3);
|
|
50
|
+
const packageJsonStr = input.packageJson
|
|
51
|
+
? JSON.stringify(input.packageJson).slice(0, packageJsonBudget)
|
|
52
|
+
: undefined;
|
|
53
|
+
const content = JSON.stringify({
|
|
54
|
+
packageName: input.packageName,
|
|
55
|
+
version: input.version,
|
|
56
|
+
description: input.description,
|
|
57
|
+
readme: input.readme.slice(0, this.maxInputChars),
|
|
58
|
+
packageJson: packageJsonStr,
|
|
59
|
+
});
|
|
60
|
+
const payload = await this.request({
|
|
61
|
+
model: this.model,
|
|
62
|
+
max_tokens: this.maxTokens,
|
|
63
|
+
temperature: 0,
|
|
64
|
+
system: SYSTEM_PROMPT,
|
|
65
|
+
messages: [{ role: "user", content }],
|
|
66
|
+
}, input.signal);
|
|
67
|
+
const parsed = parseJsonObject(payload);
|
|
68
|
+
return buildReport(parsed, new Date().toISOString());
|
|
69
|
+
}
|
|
70
|
+
/** @inheritdoc */
|
|
71
|
+
async testConnection() {
|
|
72
|
+
if (!this.apiKey)
|
|
73
|
+
return false;
|
|
74
|
+
await this.request({
|
|
75
|
+
model: this.model,
|
|
76
|
+
max_tokens: this.maxTokens,
|
|
77
|
+
messages: [{ role: "user", content: "Reply with OK." }],
|
|
78
|
+
});
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Issue a POST to `/v1/messages` with timeout and error normalization.
|
|
83
|
+
*
|
|
84
|
+
* @param body - The JSON request body.
|
|
85
|
+
* @param signal - Optional external abort signal combined with the owned
|
|
86
|
+
* timeout controller via `AbortSignal.any`. An external abort propagates
|
|
87
|
+
* as `DOMException('The operation was aborted.', 'AbortError')`.
|
|
88
|
+
* @returns The `content[0].text` string from the response.
|
|
89
|
+
* @throws {LlmProviderError} On network, timeout, HTTP, or shape errors.
|
|
90
|
+
* @throws {DOMException} With name `AbortError` when `signal` is aborted.
|
|
91
|
+
*/
|
|
92
|
+
async request(body, signal) {
|
|
93
|
+
if (!this.apiKey) {
|
|
94
|
+
throw new LlmProviderError("LLM provider is not configured.");
|
|
95
|
+
}
|
|
96
|
+
const controller = new AbortController();
|
|
97
|
+
const timer = setTimeout(() => controller.abort(), this.timeoutMs);
|
|
98
|
+
// Combine the owned timeout controller with the external abort signal
|
|
99
|
+
// so either one aborts the fetch. When no external signal is supplied
|
|
100
|
+
// the owned controller is used directly.
|
|
101
|
+
const combinedSignal = signal
|
|
102
|
+
? AbortSignal.any([controller.signal, signal])
|
|
103
|
+
: controller.signal;
|
|
104
|
+
try {
|
|
105
|
+
const response = await fetch(`${this.baseUrl}/v1/messages`, {
|
|
106
|
+
method: "POST",
|
|
107
|
+
headers: {
|
|
108
|
+
"content-type": "application/json",
|
|
109
|
+
"x-api-key": this.apiKey,
|
|
110
|
+
"anthropic-version": "2023-06-01",
|
|
111
|
+
},
|
|
112
|
+
body: JSON.stringify(body),
|
|
113
|
+
signal: combinedSignal,
|
|
114
|
+
});
|
|
115
|
+
if (!response.ok) {
|
|
116
|
+
throw new LlmProviderError(`LLM request failed with HTTP ${response.status}.`, response.status);
|
|
117
|
+
}
|
|
118
|
+
const json = (await response.json());
|
|
119
|
+
const content = readResponseContent(json);
|
|
120
|
+
if (!content)
|
|
121
|
+
throw new LlmProviderError("LLM response contained no content.");
|
|
122
|
+
return content;
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
if (error instanceof LlmProviderError)
|
|
126
|
+
throw error;
|
|
127
|
+
if (error instanceof DOMException && error.name === "AbortError") {
|
|
128
|
+
// An external abort must propagate as AbortError (cooperative
|
|
129
|
+
// cancellation); the owned timeout is wrapped as LlmProviderError.
|
|
130
|
+
if (signal?.aborted) {
|
|
131
|
+
throw new DOMException("The operation was aborted.", "AbortError");
|
|
132
|
+
}
|
|
133
|
+
throw new LlmProviderError("LLM request timed out.");
|
|
134
|
+
}
|
|
135
|
+
throw new LlmProviderError(`LLM request failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
136
|
+
}
|
|
137
|
+
finally {
|
|
138
|
+
clearTimeout(timer);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Extract the `content[0].text` string from an Anthropic-shaped Messages
|
|
144
|
+
* response. Returns `undefined` when the shape does not match.
|
|
145
|
+
*
|
|
146
|
+
* @param value - The parsed JSON response body.
|
|
147
|
+
* @returns The content string, or `undefined`.
|
|
148
|
+
*/
|
|
149
|
+
function readResponseContent(value) {
|
|
150
|
+
if (!value || typeof value !== "object")
|
|
151
|
+
return undefined;
|
|
152
|
+
const content = value.content;
|
|
153
|
+
if (!Array.isArray(content) || content.length === 0)
|
|
154
|
+
return undefined;
|
|
155
|
+
const block = content[0];
|
|
156
|
+
if (!block || typeof block !== "object")
|
|
157
|
+
return undefined;
|
|
158
|
+
const text = block.text;
|
|
159
|
+
return typeof text === "string" ? text : undefined;
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=anthropic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/llm/anthropic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gemini LLM scan provider.
|
|
3
|
+
*
|
|
4
|
+
* Talks to the Google Generative Language API
|
|
5
|
+
* (`generativelanguage.googleapis.com/v1beta`) using the
|
|
6
|
+
* `models/<model>:generateContent` surface. Mirrors the structure of
|
|
7
|
+
* {@link OpenAICompatibleLlmProvider} but adapts the request body, auth
|
|
8
|
+
* header, and response shape to Gemini's conventions.
|
|
9
|
+
*/
|
|
10
|
+
import type { LlmScanReport } from "../scanner/types.js";
|
|
11
|
+
import type { LlmScanInput, LlmScanProvider, LlmProviderOptions } from "./provider.js";
|
|
12
|
+
/**
|
|
13
|
+
* Gemini LLM scan provider.
|
|
14
|
+
*
|
|
15
|
+
* @see {@link LlmScanProvider}
|
|
16
|
+
*/
|
|
17
|
+
export declare class GeminiLlmProvider implements LlmScanProvider {
|
|
18
|
+
private readonly apiKey?;
|
|
19
|
+
private readonly baseUrl;
|
|
20
|
+
private readonly model;
|
|
21
|
+
private readonly timeoutMs;
|
|
22
|
+
private readonly maxInputChars;
|
|
23
|
+
/**
|
|
24
|
+
* @param options - Provider configuration. Env-var fallbacks:
|
|
25
|
+
* `apiKey` defaults to `process.env.GEMINI_API_KEY`.
|
|
26
|
+
*/
|
|
27
|
+
constructor(options?: LlmProviderOptions);
|
|
28
|
+
/** @inheritdoc */
|
|
29
|
+
scan(input: LlmScanInput): Promise<LlmScanReport>;
|
|
30
|
+
/** @inheritdoc */
|
|
31
|
+
testConnection(): Promise<boolean>;
|
|
32
|
+
/**
|
|
33
|
+
* Issue a POST to `models/<model>:generateContent` with timeout and
|
|
34
|
+
* error normalization.
|
|
35
|
+
*
|
|
36
|
+
* @param body - The JSON request body.
|
|
37
|
+
* @param signal - Optional external abort signal combined with the owned
|
|
38
|
+
* timeout controller via `AbortSignal.any`. An external abort propagates
|
|
39
|
+
* as `DOMException('The operation was aborted.', 'AbortError')`.
|
|
40
|
+
* @returns The `candidates[0].content.parts[0].text` string from the
|
|
41
|
+
* response.
|
|
42
|
+
* @throws {LlmProviderError} On network, timeout, HTTP, or shape errors.
|
|
43
|
+
* @throws {DOMException} With name `AbortError` when `signal` is aborted.
|
|
44
|
+
*/
|
|
45
|
+
private request;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=gemini.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/llm/gemini.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAavF;;;;GAIG;AACH,qBAAa,iBAAkB,YAAW,eAAe;IACvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IAEvC;;;OAGG;gBACS,OAAO,GAAE,kBAAuB;IAQ5C,kBAAkB;IACZ,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IA+BvD,kBAAkB;IACZ,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAQxC;;;;;;;;;;;;OAYG;YACW,OAAO;CAqDtB"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gemini LLM scan provider.
|
|
3
|
+
*
|
|
4
|
+
* Talks to the Google Generative Language API
|
|
5
|
+
* (`generativelanguage.googleapis.com/v1beta`) using the
|
|
6
|
+
* `models/<model>:generateContent` surface. Mirrors the structure of
|
|
7
|
+
* {@link OpenAICompatibleLlmProvider} but adapts the request body, auth
|
|
8
|
+
* header, and response shape to Gemini's conventions.
|
|
9
|
+
*/
|
|
10
|
+
import { LlmProviderError, SYSTEM_PROMPT, buildReport, parseJsonObject, } from "./parse.js";
|
|
11
|
+
const DEFAULT_BASE_URL = "https://generativelanguage.googleapis.com/v1beta";
|
|
12
|
+
const DEFAULT_MODEL = "gemini-2.0-flash";
|
|
13
|
+
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
14
|
+
const DEFAULT_MAX_INPUT_CHARS = 12_000;
|
|
15
|
+
/**
|
|
16
|
+
* Gemini LLM scan provider.
|
|
17
|
+
*
|
|
18
|
+
* @see {@link LlmScanProvider}
|
|
19
|
+
*/
|
|
20
|
+
export class GeminiLlmProvider {
|
|
21
|
+
apiKey;
|
|
22
|
+
baseUrl;
|
|
23
|
+
model;
|
|
24
|
+
timeoutMs;
|
|
25
|
+
maxInputChars;
|
|
26
|
+
/**
|
|
27
|
+
* @param options - Provider configuration. Env-var fallbacks:
|
|
28
|
+
* `apiKey` defaults to `process.env.GEMINI_API_KEY`.
|
|
29
|
+
*/
|
|
30
|
+
constructor(options = {}) {
|
|
31
|
+
this.apiKey = options.apiKey ?? process.env.GEMINI_API_KEY;
|
|
32
|
+
this.baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\/+$/, "");
|
|
33
|
+
this.model = options.model ?? DEFAULT_MODEL;
|
|
34
|
+
this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
35
|
+
this.maxInputChars = options.maxInputChars ?? DEFAULT_MAX_INPUT_CHARS;
|
|
36
|
+
}
|
|
37
|
+
/** @inheritdoc */
|
|
38
|
+
async scan(input) {
|
|
39
|
+
if (!this.apiKey) {
|
|
40
|
+
return {
|
|
41
|
+
enabled: false,
|
|
42
|
+
reason: "LLM provider is not configured.",
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
const packageJsonBudget = Math.floor(this.maxInputChars / 3);
|
|
46
|
+
const packageJsonStr = input.packageJson
|
|
47
|
+
? JSON.stringify(input.packageJson).slice(0, packageJsonBudget)
|
|
48
|
+
: undefined;
|
|
49
|
+
const content = JSON.stringify({
|
|
50
|
+
packageName: input.packageName,
|
|
51
|
+
version: input.version,
|
|
52
|
+
description: input.description,
|
|
53
|
+
readme: input.readme.slice(0, this.maxInputChars),
|
|
54
|
+
packageJson: packageJsonStr,
|
|
55
|
+
});
|
|
56
|
+
const payload = await this.request({
|
|
57
|
+
contents: [{ role: "user", parts: [{ text: content }] }],
|
|
58
|
+
systemInstruction: { parts: [{ text: SYSTEM_PROMPT }] },
|
|
59
|
+
generationConfig: { temperature: 0, responseMimeType: "application/json" },
|
|
60
|
+
}, input.signal);
|
|
61
|
+
const parsed = parseJsonObject(payload);
|
|
62
|
+
return buildReport(parsed, new Date().toISOString());
|
|
63
|
+
}
|
|
64
|
+
/** @inheritdoc */
|
|
65
|
+
async testConnection() {
|
|
66
|
+
if (!this.apiKey)
|
|
67
|
+
return false;
|
|
68
|
+
await this.request({
|
|
69
|
+
contents: [{ role: "user", parts: [{ text: "Reply with OK." }] }],
|
|
70
|
+
});
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Issue a POST to `models/<model>:generateContent` with timeout and
|
|
75
|
+
* error normalization.
|
|
76
|
+
*
|
|
77
|
+
* @param body - The JSON request body.
|
|
78
|
+
* @param signal - Optional external abort signal combined with the owned
|
|
79
|
+
* timeout controller via `AbortSignal.any`. An external abort propagates
|
|
80
|
+
* as `DOMException('The operation was aborted.', 'AbortError')`.
|
|
81
|
+
* @returns The `candidates[0].content.parts[0].text` string from the
|
|
82
|
+
* response.
|
|
83
|
+
* @throws {LlmProviderError} On network, timeout, HTTP, or shape errors.
|
|
84
|
+
* @throws {DOMException} With name `AbortError` when `signal` is aborted.
|
|
85
|
+
*/
|
|
86
|
+
async request(body, signal) {
|
|
87
|
+
if (!this.apiKey) {
|
|
88
|
+
throw new LlmProviderError("LLM provider is not configured.");
|
|
89
|
+
}
|
|
90
|
+
const controller = new AbortController();
|
|
91
|
+
const timer = setTimeout(() => controller.abort(), this.timeoutMs);
|
|
92
|
+
// Combine the owned timeout controller with the external abort signal
|
|
93
|
+
// so either one aborts the fetch. When no external signal is supplied
|
|
94
|
+
// the owned controller is used directly.
|
|
95
|
+
const combinedSignal = signal
|
|
96
|
+
? AbortSignal.any([controller.signal, signal])
|
|
97
|
+
: controller.signal;
|
|
98
|
+
try {
|
|
99
|
+
const url = `${this.baseUrl}/models/${encodeURIComponent(this.model)}:generateContent`;
|
|
100
|
+
const response = await fetch(url, {
|
|
101
|
+
method: "POST",
|
|
102
|
+
headers: {
|
|
103
|
+
"content-type": "application/json",
|
|
104
|
+
"x-goog-api-key": this.apiKey,
|
|
105
|
+
},
|
|
106
|
+
body: JSON.stringify(body),
|
|
107
|
+
signal: combinedSignal,
|
|
108
|
+
});
|
|
109
|
+
if (!response.ok) {
|
|
110
|
+
throw new LlmProviderError(`LLM request failed with HTTP ${response.status}.`, response.status);
|
|
111
|
+
}
|
|
112
|
+
const json = (await response.json());
|
|
113
|
+
const content = readResponseContent(json);
|
|
114
|
+
if (!content)
|
|
115
|
+
throw new LlmProviderError("LLM response contained no content.");
|
|
116
|
+
return content;
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
if (error instanceof LlmProviderError)
|
|
120
|
+
throw error;
|
|
121
|
+
if (error instanceof DOMException && error.name === "AbortError") {
|
|
122
|
+
// An external abort must propagate as AbortError (cooperative
|
|
123
|
+
// cancellation); the owned timeout is wrapped as LlmProviderError.
|
|
124
|
+
if (signal?.aborted) {
|
|
125
|
+
throw new DOMException("The operation was aborted.", "AbortError");
|
|
126
|
+
}
|
|
127
|
+
throw new LlmProviderError("LLM request timed out.");
|
|
128
|
+
}
|
|
129
|
+
throw new LlmProviderError(`LLM request failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
130
|
+
}
|
|
131
|
+
finally {
|
|
132
|
+
clearTimeout(timer);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Extract the `candidates[0].content.parts[0].text` string from a Gemini-
|
|
138
|
+
* shaped `generateContent` response. Returns `undefined` when the shape
|
|
139
|
+
* does not match.
|
|
140
|
+
*
|
|
141
|
+
* @param value - The parsed JSON response body.
|
|
142
|
+
* @returns The content string, or `undefined`.
|
|
143
|
+
*/
|
|
144
|
+
function readResponseContent(value) {
|
|
145
|
+
if (!value || typeof value !== "object")
|
|
146
|
+
return undefined;
|
|
147
|
+
const candidates = value.candidates;
|
|
148
|
+
if (!Array.isArray(candidates) || candidates.length === 0)
|
|
149
|
+
return undefined;
|
|
150
|
+
const candidate = candidates[0];
|
|
151
|
+
if (!candidate || typeof candidate !== "object")
|
|
152
|
+
return undefined;
|
|
153
|
+
const content = candidate.content;
|
|
154
|
+
if (!content || typeof content !== "object")
|
|
155
|
+
return undefined;
|
|
156
|
+
const parts = content.parts;
|
|
157
|
+
if (!Array.isArray(parts) || parts.length === 0)
|
|
158
|
+
return undefined;
|
|
159
|
+
const part = parts[0];
|
|
160
|
+
if (!part || typeof part !== "object")
|
|
161
|
+
return undefined;
|
|
162
|
+
const text = part.text;
|
|
163
|
+
return typeof text === "string" ? text : undefined;
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=gemini.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/llm/gemini.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,MAAM,gBAAgB,GAAG,kDAAkD,CAAC;AAC5E,MAAM,aAAa,GAAG,kBAAkB,CAAC;AACzC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAEvC;;;;GAIG;AACH,MAAM,OAAO,iBAAiB;IACX,MAAM,CAAU;IAChB,OAAO,CAAS;IAChB,KAAK,CAAS;IACd,SAAS,CAAS;IAClB,aAAa,CAAS;IAEvC;;;OAGG;IACH,YAAY,UAA8B,EAAE;QAC1C,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAC3D,IAAI,CAAC,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,gBAAgB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,aAAa,CAAC;QAC5C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC;QACzD,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,uBAAuB,CAAC;IACxE,CAAC;IAED,kBAAkB;IAClB,KAAK,CAAC,IAAI,CAAC,KAAmB;QAC5B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,iCAAiC;aAC1C,CAAC;QACJ,CAAC;QAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;QAC7D,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW;YACtC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC;YAC/D,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;YAC7B,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC;YACjD,WAAW,EAAE,cAAc;SAC5B,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAChC;YACE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;YACxD,iBAAiB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE;YACvD,gBAAgB,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,gBAAgB,EAAE,kBAAkB,EAAE;SAC3E,EACD,KAAK,CAAC,MAAM,CACb,CAAC;QACF,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QACxC,OAAO,WAAW,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,kBAAkB;IAClB,KAAK,CAAC,cAAc;QAClB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC/B,MAAM,IAAI,CAAC,OAAO,CAAC;YACjB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC;SAClE,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;;;;;OAYG;IACK,KAAK,CAAC,OAAO,CACnB,IAA6B,EAC7B,MAAoB;QAEpB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,gBAAgB,CAAC,iCAAiC,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACnE,sEAAsE;QACtE,sEAAsE;QACtE,yCAAyC;QACzC,MAAM,cAAc,GAAG,MAAM;YAC3B,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC9C,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,WAAW,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;YACvF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,gBAAgB,EAAE,IAAI,CAAC,MAAM;iBAC9B;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAC1B,MAAM,EAAE,cAAc;aACvB,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,gBAAgB,CACxB,gCAAgC,QAAQ,CAAC,MAAM,GAAG,EAClD,QAAQ,CAAC,MAAM,CAChB,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAY,CAAC;YAChD,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,gBAAgB,CAAC,oCAAoC,CAAC,CAAC;YAC/E,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,gBAAgB;gBAAE,MAAM,KAAK,CAAC;YACnD,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACjE,8DAA8D;gBAC9D,mEAAmE;gBACnE,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;oBACpB,MAAM,IAAI,YAAY,CAAC,4BAA4B,EAAE,YAAY,CAAC,CAAC;gBACrE,CAAC;gBACD,MAAM,IAAI,gBAAgB,CAAC,wBAAwB,CAAC,CAAC;YACvD,CAAC;YACD,MAAM,IAAI,gBAAgB,CACxB,uBAAuB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAChF,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;CACF;AAED;;;;;;;GAOG;AACH,SAAS,mBAAmB,CAAC,KAAc;IACzC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC1D,MAAM,UAAU,GAAI,KAAkC,CAAC,UAAU,CAAC;IAClE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5E,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAClE,MAAM,OAAO,GAAI,SAA+C,CAAC,OAAO,CAAC;IACzE,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC9D,MAAM,KAAK,GAAI,OAA+B,CAAC,KAAK,CAAC;IACrD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAClE,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACxD,MAAM,IAAI,GAAI,IAA2B,CAAC,IAAI,CAAC;IAC/C,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM provider configuration persistence and runtime resolution.
|
|
3
|
+
*
|
|
4
|
+
* {@link LlmConfigManager} reads/writes the `~/.npm-safe/llm.json` file. The
|
|
5
|
+
* configuration is optional: when no API key is configured and no supported
|
|
6
|
+
* environment variable is present, LLM scanning is silently disabled and the
|
|
7
|
+
* rest of the engine keeps working normally.
|
|
8
|
+
*
|
|
9
|
+
* API keys are stored in plain text at the configured path. The file is created
|
|
10
|
+
* with `0o600` permissions when possible (best effort on Windows).
|
|
11
|
+
*/
|
|
12
|
+
import { LlmProviderType } from './provider.js';
|
|
13
|
+
import type { LlmScanProvider } from './provider.js';
|
|
14
|
+
/** Persisted LLM configuration. */
|
|
15
|
+
export interface LlmConfig {
|
|
16
|
+
/** Whether LLM scanning is enabled. */
|
|
17
|
+
readonly enabled: boolean;
|
|
18
|
+
/** Backend provider. */
|
|
19
|
+
readonly provider: LlmProviderType;
|
|
20
|
+
/** API key (optional; environment variable fallback is supported). */
|
|
21
|
+
readonly apiKey?: string;
|
|
22
|
+
/** Base URL of the LLM API endpoint. */
|
|
23
|
+
readonly baseUrl?: string;
|
|
24
|
+
/** Model identifier to use. */
|
|
25
|
+
readonly model?: string;
|
|
26
|
+
/** Request timeout in milliseconds. */
|
|
27
|
+
readonly timeoutMs?: number;
|
|
28
|
+
/** Maximum README characters to send to the model. */
|
|
29
|
+
readonly maxInputChars?: number;
|
|
30
|
+
/** Anthropic maximum response tokens. */
|
|
31
|
+
readonly maxTokens?: number;
|
|
32
|
+
}
|
|
33
|
+
/** Runtime status of the LLM integration, safe to display. */
|
|
34
|
+
export interface LlmStatus {
|
|
35
|
+
/** Whether LLM scanning is enabled. */
|
|
36
|
+
readonly enabled: boolean;
|
|
37
|
+
/** Backend provider. */
|
|
38
|
+
readonly provider: LlmProviderType;
|
|
39
|
+
/** Whether an API key is available (from config or env). */
|
|
40
|
+
readonly configured: boolean;
|
|
41
|
+
/** Model identifier in use, if any. */
|
|
42
|
+
readonly model?: string;
|
|
43
|
+
/** Base URL in use, if any. */
|
|
44
|
+
readonly baseUrl?: string;
|
|
45
|
+
/** Masked API key (e.g. `"sk-****1234"`), or `undefined`. */
|
|
46
|
+
readonly apiKey?: string;
|
|
47
|
+
/** Maximum response tokens, if set. */
|
|
48
|
+
readonly maxTokens?: number;
|
|
49
|
+
/** Maximum input characters, if set. */
|
|
50
|
+
readonly maxInputChars?: number;
|
|
51
|
+
}
|
|
52
|
+
/** Returns the default path for the LLM configuration file. */
|
|
53
|
+
export declare function getDefaultLlmConfigPath(): string;
|
|
54
|
+
/**
|
|
55
|
+
* Loads, mutates, and persists LLM provider configuration.
|
|
56
|
+
*
|
|
57
|
+
* Thread-safe per instance; concurrent instances may race on the file, which is
|
|
58
|
+
* acceptable for a single-user desktop tool.
|
|
59
|
+
*/
|
|
60
|
+
export declare class LlmConfigManager {
|
|
61
|
+
private readonly filePath;
|
|
62
|
+
private config;
|
|
63
|
+
constructor(filePath?: string);
|
|
64
|
+
/** Load (or initialize) the config file. */
|
|
65
|
+
private load;
|
|
66
|
+
/** Persist the current configuration to disk. */
|
|
67
|
+
private save;
|
|
68
|
+
/** Normalize a partial config into a full config with defaults. */
|
|
69
|
+
private normalize;
|
|
70
|
+
/** Returns the current persisted config, including the raw API key. */
|
|
71
|
+
getConfig(): LlmConfig;
|
|
72
|
+
/** Returns a masked status view suitable for display. */
|
|
73
|
+
getStatus(): LlmStatus;
|
|
74
|
+
/** Update the persisted config. */
|
|
75
|
+
setConfig(update: Partial<LlmConfig>): void;
|
|
76
|
+
/**
|
|
77
|
+
* Resolve the effective API key, preferring the persisted config and falling
|
|
78
|
+
* back to a provider-specific environment variable.
|
|
79
|
+
*/
|
|
80
|
+
private resolveApiKey;
|
|
81
|
+
/** Resolve the effective base URL. */
|
|
82
|
+
private resolveBaseUrl;
|
|
83
|
+
/** Resolve the effective model. */
|
|
84
|
+
private resolveModel;
|
|
85
|
+
/**
|
|
86
|
+
* Create a configured {@link LlmScanProvider} if LLM scanning is enabled and
|
|
87
|
+
* an API key is available; otherwise return `undefined`.
|
|
88
|
+
*/
|
|
89
|
+
createProvider(): LlmScanProvider | undefined;
|
|
90
|
+
/**
|
|
91
|
+
* Test whether the current configuration can connect to the provider.
|
|
92
|
+
*
|
|
93
|
+
* Returns `false` when the provider is not configured or disabled.
|
|
94
|
+
*/
|
|
95
|
+
testConnection(): Promise<boolean>;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=llm-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-config.d.ts","sourceRoot":"","sources":["../../src/llm/llm-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,EAAqB,eAAe,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,KAAK,EAAsB,eAAe,EAAE,MAAM,eAAe,CAAC;AAwBzE,mCAAmC;AACnC,MAAM,WAAW,SAAS;IACxB,uCAAuC;IACvC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,wBAAwB;IACxB,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,sEAAsE;IACtE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,wCAAwC;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,+BAA+B;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,uCAAuC;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,sDAAsD;IACtD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,yCAAyC;IACzC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,8DAA8D;AAC9D,MAAM,WAAW,SAAS;IACxB,uCAAuC;IACvC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,wBAAwB;IACxB,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,4DAA4D;IAC5D,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,uCAAuC;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,+BAA+B;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,6DAA6D;IAC7D,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,uCAAuC;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,wCAAwC;IACxC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,+DAA+D;AAC/D,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AASD;;;;;GAKG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,MAAM,CAAY;gBAEd,QAAQ,CAAC,EAAE,MAAM;IAK7B,4CAA4C;IAC5C,OAAO,CAAC,IAAI;IAUZ,iDAAiD;IACjD,OAAO,CAAC,IAAI;IAcZ,mEAAmE;IACnE,OAAO,CAAC,SAAS;IAiBjB,uEAAuE;IACvE,SAAS,IAAI,SAAS;IAItB,yDAAyD;IACzD,SAAS,IAAI,SAAS;IActB,mCAAmC;IACnC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI;IAkB3C;;;OAGG;IACH,OAAO,CAAC,aAAa;IAQrB,sCAAsC;IACtC,OAAO,CAAC,cAAc;IAItB,mCAAmC;IACnC,OAAO,CAAC,YAAY;IAIpB;;;OAGG;IACH,cAAc,IAAI,eAAe,GAAG,SAAS;IAgB7C;;;;OAIG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;CAKzC"}
|