@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.
Files changed (86) hide show
  1. package/LICENSE +204 -0
  2. package/dist/index.d.ts +513 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +711 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/llm/anthropic.d.ts +47 -0
  7. package/dist/llm/anthropic.d.ts.map +1 -0
  8. package/dist/llm/anthropic.js +161 -0
  9. package/dist/llm/anthropic.js.map +1 -0
  10. package/dist/llm/gemini.d.ts +47 -0
  11. package/dist/llm/gemini.d.ts.map +1 -0
  12. package/dist/llm/gemini.js +165 -0
  13. package/dist/llm/gemini.js.map +1 -0
  14. package/dist/llm/llm-config.d.ts +97 -0
  15. package/dist/llm/llm-config.d.ts.map +1 -0
  16. package/dist/llm/llm-config.js +188 -0
  17. package/dist/llm/llm-config.js.map +1 -0
  18. package/dist/llm/parse.d.ts +95 -0
  19. package/dist/llm/parse.d.ts.map +1 -0
  20. package/dist/llm/parse.js +158 -0
  21. package/dist/llm/parse.js.map +1 -0
  22. package/dist/llm/provider.d.ts +122 -0
  23. package/dist/llm/provider.d.ts.map +1 -0
  24. package/dist/llm/provider.js +206 -0
  25. package/dist/llm/provider.js.map +1 -0
  26. package/dist/registry/client.d.ts +164 -0
  27. package/dist/registry/client.d.ts.map +1 -0
  28. package/dist/registry/client.js +378 -0
  29. package/dist/registry/client.js.map +1 -0
  30. package/dist/registry/types.d.ts +226 -0
  31. package/dist/registry/types.d.ts.map +1 -0
  32. package/dist/registry/types.js +32 -0
  33. package/dist/registry/types.js.map +1 -0
  34. package/dist/registry/validator.d.ts +87 -0
  35. package/dist/registry/validator.d.ts.map +1 -0
  36. package/dist/registry/validator.js +214 -0
  37. package/dist/registry/validator.js.map +1 -0
  38. package/dist/scanner/ci-scan.d.ts +82 -0
  39. package/dist/scanner/ci-scan.d.ts.map +1 -0
  40. package/dist/scanner/ci-scan.js +130 -0
  41. package/dist/scanner/ci-scan.js.map +1 -0
  42. package/dist/scanner/rule-config.d.ts +61 -0
  43. package/dist/scanner/rule-config.d.ts.map +1 -0
  44. package/dist/scanner/rule-config.js +103 -0
  45. package/dist/scanner/rule-config.js.map +1 -0
  46. package/dist/scanner/rule-loader.d.ts +28 -0
  47. package/dist/scanner/rule-loader.d.ts.map +1 -0
  48. package/dist/scanner/rule-loader.js +67 -0
  49. package/dist/scanner/rule-loader.js.map +1 -0
  50. package/dist/scanner/static-rules.d.ts +88 -0
  51. package/dist/scanner/static-rules.d.ts.map +1 -0
  52. package/dist/scanner/static-rules.js +723 -0
  53. package/dist/scanner/static-rules.js.map +1 -0
  54. package/dist/scanner/types.d.ts +177 -0
  55. package/dist/scanner/types.d.ts.map +1 -0
  56. package/dist/scanner/types.js +53 -0
  57. package/dist/scanner/types.js.map +1 -0
  58. package/dist/scheduler/rate-limiter.d.ts +74 -0
  59. package/dist/scheduler/rate-limiter.d.ts.map +1 -0
  60. package/dist/scheduler/rate-limiter.js +182 -0
  61. package/dist/scheduler/rate-limiter.js.map +1 -0
  62. package/dist/scheduler/refresh-scheduler.d.ts +201 -0
  63. package/dist/scheduler/refresh-scheduler.d.ts.map +1 -0
  64. package/dist/scheduler/refresh-scheduler.js +295 -0
  65. package/dist/scheduler/refresh-scheduler.js.map +1 -0
  66. package/dist/store/cache-manager.d.ts +166 -0
  67. package/dist/store/cache-manager.d.ts.map +1 -0
  68. package/dist/store/cache-manager.js +356 -0
  69. package/dist/store/cache-manager.js.map +1 -0
  70. package/dist/store/database.d.ts +81 -0
  71. package/dist/store/database.d.ts.map +1 -0
  72. package/dist/store/database.js +182 -0
  73. package/dist/store/database.js.map +1 -0
  74. package/dist/store/schema.d.ts +42 -0
  75. package/dist/store/schema.d.ts.map +1 -0
  76. package/dist/store/schema.js +126 -0
  77. package/dist/store/schema.js.map +1 -0
  78. package/dist/translator/provider.d.ts +152 -0
  79. package/dist/translator/provider.d.ts.map +1 -0
  80. package/dist/translator/provider.js +159 -0
  81. package/dist/translator/provider.js.map +1 -0
  82. package/dist/translator/types.d.ts +83 -0
  83. package/dist/translator/types.d.ts.map +1 -0
  84. package/dist/translator/types.js +58 -0
  85. package/dist/translator/types.js.map +1 -0
  86. 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":"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"}
@@ -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"}