gthinking 1.2.1 → 2.1.1
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/.eslintrc.js +34 -0
- package/ANALYSIS_SUMMARY.md +363 -0
- package/README.md +230 -245
- package/dist/analysis/analysis-engine.d.ts +63 -0
- package/dist/analysis/analysis-engine.d.ts.map +1 -0
- package/dist/analysis/analysis-engine.js +322 -0
- package/dist/analysis/analysis-engine.js.map +1 -0
- package/dist/core/config.d.ts +1419 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +361 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/engine.d.ts +176 -0
- package/dist/core/engine.d.ts.map +1 -0
- package/dist/core/engine.js +604 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/core/errors.d.ts +153 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +287 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/{types.js → core/index.js} +8 -4
- package/dist/core/index.js.map +1 -0
- package/dist/core/pipeline.d.ts +121 -0
- package/dist/core/pipeline.d.ts.map +1 -0
- package/dist/core/pipeline.js +289 -0
- package/dist/core/pipeline.js.map +1 -0
- package/dist/core/rate-limiter.d.ts +58 -0
- package/dist/core/rate-limiter.d.ts.map +1 -0
- package/dist/core/rate-limiter.js +133 -0
- package/dist/core/rate-limiter.js.map +1 -0
- package/dist/core/session-manager.d.ts +96 -0
- package/dist/core/session-manager.d.ts.map +1 -0
- package/dist/core/session-manager.js +223 -0
- package/dist/core/session-manager.js.map +1 -0
- package/dist/creativity/creativity-engine.d.ts +6 -0
- package/dist/creativity/creativity-engine.d.ts.map +1 -0
- package/dist/creativity/creativity-engine.js +17 -0
- package/dist/creativity/creativity-engine.js.map +1 -0
- package/dist/index.d.ts +24 -32
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +130 -104
- package/dist/index.js.map +1 -1
- package/dist/learning/learning-engine.d.ts +6 -0
- package/dist/learning/learning-engine.d.ts.map +1 -0
- package/dist/learning/learning-engine.js +17 -0
- package/dist/learning/learning-engine.js.map +1 -0
- package/dist/llm/index.d.ts +10 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +26 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/llm-service.d.ts +109 -0
- package/dist/llm/llm-service.d.ts.map +1 -0
- package/dist/llm/llm-service.js +224 -0
- package/dist/llm/llm-service.js.map +1 -0
- package/dist/llm/providers/base.d.ts +85 -0
- package/dist/llm/providers/base.d.ts.map +1 -0
- package/dist/llm/providers/base.js +57 -0
- package/dist/llm/providers/base.js.map +1 -0
- package/dist/llm/providers/cli.d.ts +23 -0
- package/dist/llm/providers/cli.d.ts.map +1 -0
- package/dist/llm/providers/cli.js +158 -0
- package/dist/llm/providers/cli.js.map +1 -0
- package/dist/llm/providers/gemini.d.ts +30 -0
- package/dist/llm/providers/gemini.d.ts.map +1 -0
- package/dist/llm/providers/gemini.js +168 -0
- package/dist/llm/providers/gemini.js.map +1 -0
- package/dist/llm/sanitization.d.ts +50 -0
- package/dist/llm/sanitization.d.ts.map +1 -0
- package/dist/llm/sanitization.js +149 -0
- package/dist/llm/sanitization.js.map +1 -0
- package/dist/{server.d.ts.map → mcp/server.d.ts.map} +1 -1
- package/dist/mcp/server.js +108 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/planning/planning-engine.d.ts +6 -0
- package/dist/planning/planning-engine.d.ts.map +1 -0
- package/dist/planning/planning-engine.js +17 -0
- package/dist/planning/planning-engine.js.map +1 -0
- package/dist/reasoning/reasoning-engine.d.ts +6 -0
- package/dist/reasoning/reasoning-engine.d.ts.map +1 -0
- package/dist/reasoning/reasoning-engine.js +17 -0
- package/dist/reasoning/reasoning-engine.js.map +1 -0
- package/dist/search/search-engine.d.ts +99 -0
- package/dist/search/search-engine.d.ts.map +1 -0
- package/dist/search/search-engine.js +271 -0
- package/dist/search/search-engine.js.map +1 -0
- package/dist/synthesis/synthesis-engine.d.ts +6 -0
- package/dist/synthesis/synthesis-engine.d.ts.map +1 -0
- package/dist/synthesis/synthesis-engine.js +17 -0
- package/dist/synthesis/synthesis-engine.js.map +1 -0
- package/dist/types/analysis.d.ts +1534 -49
- package/dist/types/analysis.d.ts.map +1 -1
- package/dist/types/analysis.js +250 -0
- package/dist/types/analysis.js.map +1 -1
- package/dist/types/core.d.ts +257 -30
- package/dist/types/core.d.ts.map +1 -1
- package/dist/types/core.js +148 -18
- package/dist/types/core.js.map +1 -1
- package/dist/types/creativity.d.ts +2871 -56
- package/dist/types/creativity.d.ts.map +1 -1
- package/dist/types/creativity.js +195 -0
- package/dist/types/creativity.js.map +1 -1
- package/dist/types/index.d.ts +6 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +17 -2
- package/dist/types/index.js.map +1 -1
- package/dist/types/learning.d.ts +851 -61
- package/dist/types/learning.d.ts.map +1 -1
- package/dist/types/learning.js +155 -0
- package/dist/types/learning.js.map +1 -1
- package/dist/types/planning.d.ts +2223 -71
- package/dist/types/planning.d.ts.map +1 -1
- package/dist/types/planning.js +190 -0
- package/dist/types/planning.js.map +1 -1
- package/dist/types/reasoning.d.ts +2209 -72
- package/dist/types/reasoning.d.ts.map +1 -1
- package/dist/types/reasoning.js +200 -1
- package/dist/types/reasoning.js.map +1 -1
- package/dist/types/search.d.ts +981 -53
- package/dist/types/search.d.ts.map +1 -1
- package/dist/types/search.js +137 -0
- package/dist/types/search.js.map +1 -1
- package/dist/types/synthesis.d.ts +583 -37
- package/dist/types/synthesis.d.ts.map +1 -1
- package/dist/types/synthesis.js +138 -0
- package/dist/types/synthesis.js.map +1 -1
- package/dist/utils/cache.d.ts +144 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +288 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/id-generator.d.ts +89 -0
- package/dist/utils/id-generator.d.ts.map +1 -0
- package/dist/utils/id-generator.js +132 -0
- package/dist/utils/id-generator.js.map +1 -0
- package/dist/utils/index.d.ts +11 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +33 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +142 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +248 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/metrics.d.ts +149 -0
- package/dist/utils/metrics.d.ts.map +1 -0
- package/dist/utils/metrics.js +296 -0
- package/dist/utils/metrics.js.map +1 -0
- package/dist/utils/timer.d.ts +7 -0
- package/dist/utils/timer.d.ts.map +1 -0
- package/dist/utils/timer.js +17 -0
- package/dist/utils/timer.js.map +1 -0
- package/dist/utils/validation.d.ts +147 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +275 -0
- package/dist/utils/validation.js.map +1 -0
- package/docs/API.md +411 -0
- package/docs/ARCHITECTURE.md +271 -0
- package/docs/CHANGELOG.md +283 -0
- package/jest.config.js +28 -0
- package/package.json +43 -30
- package/src/analysis/analysis-engine.ts +383 -0
- package/src/core/config.ts +406 -0
- package/src/core/engine.ts +785 -0
- package/src/core/errors.ts +349 -0
- package/src/core/index.ts +12 -0
- package/src/core/pipeline.ts +424 -0
- package/src/core/rate-limiter.ts +155 -0
- package/src/core/session-manager.ts +269 -0
- package/src/creativity/creativity-engine.ts +14 -0
- package/src/index.ts +178 -0
- package/src/learning/learning-engine.ts +14 -0
- package/src/llm/index.ts +10 -0
- package/src/llm/llm-service.ts +285 -0
- package/src/llm/providers/base.ts +146 -0
- package/src/llm/providers/cli.ts +186 -0
- package/src/llm/providers/gemini.ts +201 -0
- package/src/llm/sanitization.ts +178 -0
- package/src/mcp/server.ts +117 -0
- package/src/planning/planning-engine.ts +14 -0
- package/src/reasoning/reasoning-engine.ts +14 -0
- package/src/search/search-engine.ts +333 -0
- package/src/synthesis/synthesis-engine.ts +14 -0
- package/src/types/analysis.ts +337 -0
- package/src/types/core.ts +342 -0
- package/src/types/creativity.ts +268 -0
- package/src/types/index.ts +31 -0
- package/src/types/learning.ts +215 -0
- package/src/types/planning.ts +251 -0
- package/src/types/reasoning.ts +288 -0
- package/src/types/search.ts +192 -0
- package/src/types/synthesis.ts +187 -0
- package/src/utils/cache.ts +363 -0
- package/src/utils/id-generator.ts +135 -0
- package/src/utils/index.ts +22 -0
- package/src/utils/logger.ts +290 -0
- package/src/utils/metrics.ts +380 -0
- package/src/utils/timer.ts +15 -0
- package/src/utils/validation.ts +297 -0
- package/tests/setup.ts +22 -0
- package/tests/unit/cache.test.ts +189 -0
- package/tests/unit/engine.test.ts +179 -0
- package/tests/unit/validation.test.ts +218 -0
- package/tsconfig.json +17 -12
- package/GEMINI.md +0 -68
- package/analysis.ts +0 -1063
- package/creativity.ts +0 -1055
- package/dist/analysis.d.ts +0 -54
- package/dist/analysis.d.ts.map +0 -1
- package/dist/analysis.js +0 -866
- package/dist/analysis.js.map +0 -1
- package/dist/creativity.d.ts +0 -81
- package/dist/creativity.d.ts.map +0 -1
- package/dist/creativity.js +0 -828
- package/dist/creativity.js.map +0 -1
- package/dist/engine.d.ts +0 -90
- package/dist/engine.d.ts.map +0 -1
- package/dist/engine.js +0 -677
- package/dist/engine.js.map +0 -1
- package/dist/examples.d.ts +0 -7
- package/dist/examples.d.ts.map +0 -1
- package/dist/examples.js +0 -506
- package/dist/examples.js.map +0 -1
- package/dist/learning.d.ts +0 -72
- package/dist/learning.d.ts.map +0 -1
- package/dist/learning.js +0 -615
- package/dist/learning.js.map +0 -1
- package/dist/llm-service.d.ts +0 -21
- package/dist/llm-service.d.ts.map +0 -1
- package/dist/llm-service.js +0 -100
- package/dist/llm-service.js.map +0 -1
- package/dist/planning.d.ts +0 -58
- package/dist/planning.d.ts.map +0 -1
- package/dist/planning.js +0 -824
- package/dist/planning.js.map +0 -1
- package/dist/reasoning.d.ts +0 -73
- package/dist/reasoning.d.ts.map +0 -1
- package/dist/reasoning.js +0 -845
- package/dist/reasoning.js.map +0 -1
- package/dist/search-discovery.d.ts +0 -73
- package/dist/search-discovery.d.ts.map +0 -1
- package/dist/search-discovery.js +0 -548
- package/dist/search-discovery.js.map +0 -1
- package/dist/server.js +0 -113
- package/dist/server.js.map +0 -1
- package/dist/types/engine.d.ts +0 -55
- package/dist/types/engine.d.ts.map +0 -1
- package/dist/types/engine.js +0 -3
- package/dist/types/engine.js.map +0 -1
- package/dist/types.d.ts +0 -6
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/engine.ts +0 -947
- package/examples.ts +0 -717
- package/index.ts +0 -106
- package/learning.ts +0 -779
- package/llm-service.ts +0 -120
- package/planning.ts +0 -1028
- package/reasoning.ts +0 -1079
- package/search-discovery.ts +0 -700
- package/server.ts +0 -115
- package/types/analysis.ts +0 -69
- package/types/core.ts +0 -90
- package/types/creativity.ts +0 -72
- package/types/engine.ts +0 -60
- package/types/index.ts +0 -9
- package/types/learning.ts +0 -69
- package/types/planning.ts +0 -85
- package/types/reasoning.ts +0 -92
- package/types/search.ts +0 -58
- package/types/synthesis.ts +0 -42
- package/types.ts +0 -6
- /package/dist/{server.d.ts → mcp/server.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learning-engine.d.ts","sourceRoot":"","sources":["../../src/learning/learning-engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAKtC,qBAAa,cAAe,SAAQ,YAAY;;CAI/C;AAED,wBAAgB,oBAAoB,IAAI,cAAc,CAErD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LearningEngine = void 0;
|
|
4
|
+
exports.createLearningEngine = createLearningEngine;
|
|
5
|
+
const events_1 = require("events");
|
|
6
|
+
const logger_1 = require("../utils/logger");
|
|
7
|
+
const logger = new logger_1.Logger('LearningEngine');
|
|
8
|
+
class LearningEngine extends events_1.EventEmitter {
|
|
9
|
+
constructor() {
|
|
10
|
+
super();
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.LearningEngine = LearningEngine;
|
|
14
|
+
function createLearningEngine() {
|
|
15
|
+
return new LearningEngine();
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=learning-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learning-engine.js","sourceRoot":"","sources":["../../src/learning/learning-engine.ts"],"names":[],"mappings":";;;AAWA,oDAEC;AAbD,mCAAsC;AACtC,4CAAyC;AAEzC,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,gBAAgB,CAAC,CAAC;AAE5C,MAAa,cAAe,SAAQ,qBAAY;IAC9C;QACE,KAAK,EAAE,CAAC;IACV,CAAC;CACF;AAJD,wCAIC;AAED,SAAgB,oBAAoB;IAClC,OAAO,IAAI,cAAc,EAAE,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* LLM Module Exports
|
|
4
|
+
*
|
|
5
|
+
* @module llm
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
19
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
__exportStar(require("./sanitization"), exports);
|
|
23
|
+
__exportStar(require("./providers/base"), exports);
|
|
24
|
+
__exportStar(require("./providers/gemini"), exports);
|
|
25
|
+
__exportStar(require("./llm-service"), exports);
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;AAEH,iDAA+B;AAC/B,mDAAiC;AACjC,qDAAmC;AACnC,gDAA8B"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Service for GThinking v2.0.0
|
|
3
|
+
*
|
|
4
|
+
* Secure LLM service that uses HTTP APIs instead of command-line
|
|
5
|
+
* to prevent command injection vulnerabilities.
|
|
6
|
+
*
|
|
7
|
+
* @module llm/llm-service
|
|
8
|
+
*/
|
|
9
|
+
import type { LLMMessage, LLMRequestOptions, LLMResponse } from './providers/base';
|
|
10
|
+
import type { EngineConfig } from '../types/core';
|
|
11
|
+
/**
|
|
12
|
+
* LLM service configuration
|
|
13
|
+
*/
|
|
14
|
+
export interface LLMServiceConfig {
|
|
15
|
+
provider: 'gemini' | 'claude' | 'openai' | 'cli';
|
|
16
|
+
apiKey?: string;
|
|
17
|
+
model?: string;
|
|
18
|
+
cliCommand?: string;
|
|
19
|
+
cliArgs?: string[];
|
|
20
|
+
cliPromptPassingMethod?: 'stdin' | 'arg';
|
|
21
|
+
cliPromptFlag?: string;
|
|
22
|
+
timeoutMs?: number;
|
|
23
|
+
maxRetries?: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* LLM Service
|
|
27
|
+
*
|
|
28
|
+
* Provides a unified interface for interacting with various LLM providers
|
|
29
|
+
* with built-in security measures including input sanitization.
|
|
30
|
+
*/
|
|
31
|
+
export declare class LLMService {
|
|
32
|
+
private provider;
|
|
33
|
+
private readonly logger;
|
|
34
|
+
/**
|
|
35
|
+
* Create a new LLM service
|
|
36
|
+
*
|
|
37
|
+
* @param config - LLM service configuration
|
|
38
|
+
*/
|
|
39
|
+
constructor(config: LLMServiceConfig);
|
|
40
|
+
/**
|
|
41
|
+
* Create LLM service from engine configuration
|
|
42
|
+
*
|
|
43
|
+
* @param config - Engine configuration
|
|
44
|
+
* @returns LLM service instance
|
|
45
|
+
*/
|
|
46
|
+
static fromConfig(config: EngineConfig): LLMService;
|
|
47
|
+
/**
|
|
48
|
+
* Complete a prompt with the LLM
|
|
49
|
+
*
|
|
50
|
+
* @param prompt - User prompt
|
|
51
|
+
* @param systemPrompt - Optional system prompt
|
|
52
|
+
* @param options - Request options
|
|
53
|
+
* @returns LLM response
|
|
54
|
+
*/
|
|
55
|
+
complete(prompt: string, systemPrompt?: string, options?: LLMRequestOptions): Promise<string>;
|
|
56
|
+
/**
|
|
57
|
+
* Stream a prompt completion from the LLM
|
|
58
|
+
*
|
|
59
|
+
* @param prompt - User prompt
|
|
60
|
+
* @param systemPrompt - Optional system prompt
|
|
61
|
+
* @param options - Request options
|
|
62
|
+
* @returns Async generator of stream chunks
|
|
63
|
+
*/
|
|
64
|
+
stream(prompt: string, systemPrompt?: string, options?: LLMRequestOptions): AsyncGenerator<string>;
|
|
65
|
+
/**
|
|
66
|
+
* Complete with structured messages
|
|
67
|
+
*
|
|
68
|
+
* @param messages - Array of messages
|
|
69
|
+
* @param options - Request options
|
|
70
|
+
* @returns LLM response
|
|
71
|
+
*/
|
|
72
|
+
completeMessages(messages: LLMMessage[], options?: LLMRequestOptions): Promise<LLMResponse>;
|
|
73
|
+
/**
|
|
74
|
+
* Check if the service is properly configured
|
|
75
|
+
*
|
|
76
|
+
* @returns True if configured correctly
|
|
77
|
+
*/
|
|
78
|
+
isConfigured(): boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Get the current provider name
|
|
81
|
+
*
|
|
82
|
+
* @returns Provider name or null
|
|
83
|
+
*/
|
|
84
|
+
getProviderName(): string | null;
|
|
85
|
+
/**
|
|
86
|
+
* Get available models for the current provider
|
|
87
|
+
*
|
|
88
|
+
* @returns Array of model names
|
|
89
|
+
*/
|
|
90
|
+
getAvailableModels(): string[];
|
|
91
|
+
/**
|
|
92
|
+
* Initialize the LLM provider
|
|
93
|
+
*
|
|
94
|
+
* @param config - Service configuration
|
|
95
|
+
*/
|
|
96
|
+
private initializeProvider;
|
|
97
|
+
/**
|
|
98
|
+
* Ensure provider is initialized
|
|
99
|
+
*/
|
|
100
|
+
private ensureProvider;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Create an LLM service from configuration
|
|
104
|
+
*
|
|
105
|
+
* @param config - Engine configuration
|
|
106
|
+
* @returns LLM service instance
|
|
107
|
+
*/
|
|
108
|
+
export declare function createLLMService(config: EngineConfig): LLMService;
|
|
109
|
+
//# sourceMappingURL=llm-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-service.d.ts","sourceRoot":"","sources":["../../src/llm/llm-service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAgB,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAkB,MAAM,kBAAkB,CAAC;AAMjH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,sBAAsB,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAE9D;;;;OAIG;gBACS,MAAM,EAAE,gBAAgB;IAIpC;;;;;OAKG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,UAAU;IAqBnD;;;;;;;OAOG;IACG,QAAQ,CACZ,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,MAAM,CAAC;IA+BlB;;;;;;;OAOG;IACI,MAAM,CACX,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,GAAE,iBAAsB,GAC9B,cAAc,CAAC,MAAM,CAAC;IA2BzB;;;;;;OAMG;IACG,gBAAgB,CACpB,QAAQ,EAAE,UAAU,EAAE,EACtB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,WAAW,CAAC;IAiBvB;;;;OAIG;IACH,YAAY,IAAI,OAAO;IAIvB;;;;OAIG;IACH,eAAe,IAAI,MAAM,GAAG,IAAI;IAIhC;;;;OAIG;IACH,kBAAkB,IAAI,MAAM,EAAE;IAI9B;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IA+C1B;;OAEG;IACH,OAAO,CAAC,cAAc;CAKvB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,UAAU,CAEjE"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* LLM Service for GThinking v2.0.0
|
|
4
|
+
*
|
|
5
|
+
* Secure LLM service that uses HTTP APIs instead of command-line
|
|
6
|
+
* to prevent command injection vulnerabilities.
|
|
7
|
+
*
|
|
8
|
+
* @module llm/llm-service
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.LLMService = void 0;
|
|
12
|
+
exports.createLLMService = createLLMService;
|
|
13
|
+
const gemini_1 = require("./providers/gemini");
|
|
14
|
+
const cli_1 = require("./providers/cli");
|
|
15
|
+
const sanitization_1 = require("./sanitization");
|
|
16
|
+
const errors_1 = require("../core/errors");
|
|
17
|
+
const logger_1 = require("../utils/logger");
|
|
18
|
+
/**
|
|
19
|
+
* LLM Service
|
|
20
|
+
*
|
|
21
|
+
* Provides a unified interface for interacting with various LLM providers
|
|
22
|
+
* with built-in security measures including input sanitization.
|
|
23
|
+
*/
|
|
24
|
+
class LLMService {
|
|
25
|
+
provider = null;
|
|
26
|
+
logger = (0, logger_1.createComponentLogger)('LLMService');
|
|
27
|
+
/**
|
|
28
|
+
* Create a new LLM service
|
|
29
|
+
*
|
|
30
|
+
* @param config - LLM service configuration
|
|
31
|
+
*/
|
|
32
|
+
constructor(config) {
|
|
33
|
+
this.initializeProvider(config);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Create LLM service from engine configuration
|
|
37
|
+
*
|
|
38
|
+
* @param config - Engine configuration
|
|
39
|
+
* @returns LLM service instance
|
|
40
|
+
*/
|
|
41
|
+
static fromConfig(config) {
|
|
42
|
+
const apiKey = config.llmApiKey;
|
|
43
|
+
// Only require API key if NOT using CLI provider
|
|
44
|
+
if (config.llmProvider !== 'cli' && (apiKey === undefined || apiKey === '')) {
|
|
45
|
+
throw new errors_1.LLMError('LLM API key not configured', config.llmProvider);
|
|
46
|
+
}
|
|
47
|
+
return new LLMService({
|
|
48
|
+
provider: config.llmProvider,
|
|
49
|
+
apiKey,
|
|
50
|
+
model: config.llmModel,
|
|
51
|
+
cliCommand: config.llmCliCommand || 'gemini', // Pass the command from config
|
|
52
|
+
cliArgs: config.llmCliArgs,
|
|
53
|
+
cliPromptPassingMethod: config.llmCliPromptPassingMethod,
|
|
54
|
+
cliPromptFlag: config.llmCliPromptFlag,
|
|
55
|
+
timeoutMs: config.llmTimeoutMs,
|
|
56
|
+
maxRetries: config.llmMaxRetries,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Complete a prompt with the LLM
|
|
61
|
+
*
|
|
62
|
+
* @param prompt - User prompt
|
|
63
|
+
* @param systemPrompt - Optional system prompt
|
|
64
|
+
* @param options - Request options
|
|
65
|
+
* @returns LLM response
|
|
66
|
+
*/
|
|
67
|
+
async complete(prompt, systemPrompt, options = {}) {
|
|
68
|
+
this.ensureProvider();
|
|
69
|
+
// Sanitize inputs
|
|
70
|
+
const sanitizedPrompt = (0, sanitization_1.sanitizePrompt)(prompt);
|
|
71
|
+
const sanitizedSystemPrompt = systemPrompt ? (0, sanitization_1.sanitizePrompt)(systemPrompt) : undefined;
|
|
72
|
+
// Validate inputs
|
|
73
|
+
const validation = (0, sanitization_1.validatePrompt)(sanitizedPrompt);
|
|
74
|
+
if (!validation.safe) {
|
|
75
|
+
this.logger.warn('Prompt validation warnings', { issues: validation.issues });
|
|
76
|
+
}
|
|
77
|
+
const messages = [];
|
|
78
|
+
if (sanitizedSystemPrompt !== undefined) {
|
|
79
|
+
messages.push({ role: 'system', content: sanitizedSystemPrompt });
|
|
80
|
+
}
|
|
81
|
+
messages.push({ role: 'user', content: sanitizedPrompt });
|
|
82
|
+
this.logger.debug('Sending completion request', {
|
|
83
|
+
provider: this.provider.name,
|
|
84
|
+
model: options.model,
|
|
85
|
+
});
|
|
86
|
+
const response = await this.provider.complete(messages, options);
|
|
87
|
+
return response.content;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Stream a prompt completion from the LLM
|
|
91
|
+
*
|
|
92
|
+
* @param prompt - User prompt
|
|
93
|
+
* @param systemPrompt - Optional system prompt
|
|
94
|
+
* @param options - Request options
|
|
95
|
+
* @returns Async generator of stream chunks
|
|
96
|
+
*/
|
|
97
|
+
async *stream(prompt, systemPrompt, options = {}) {
|
|
98
|
+
this.ensureProvider();
|
|
99
|
+
// Sanitize inputs
|
|
100
|
+
const sanitizedPrompt = (0, sanitization_1.sanitizePrompt)(prompt);
|
|
101
|
+
const sanitizedSystemPrompt = systemPrompt ? (0, sanitization_1.sanitizePrompt)(systemPrompt) : undefined;
|
|
102
|
+
const messages = [];
|
|
103
|
+
if (sanitizedSystemPrompt !== undefined) {
|
|
104
|
+
messages.push({ role: 'system', content: sanitizedSystemPrompt });
|
|
105
|
+
}
|
|
106
|
+
messages.push({ role: 'user', content: sanitizedPrompt });
|
|
107
|
+
this.logger.debug('Starting stream request', {
|
|
108
|
+
provider: this.provider.name,
|
|
109
|
+
model: options.model,
|
|
110
|
+
});
|
|
111
|
+
for await (const chunk of this.provider.stream(messages, options)) {
|
|
112
|
+
if (chunk.content) {
|
|
113
|
+
yield chunk.content;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Complete with structured messages
|
|
119
|
+
*
|
|
120
|
+
* @param messages - Array of messages
|
|
121
|
+
* @param options - Request options
|
|
122
|
+
* @returns LLM response
|
|
123
|
+
*/
|
|
124
|
+
async completeMessages(messages, options = {}) {
|
|
125
|
+
this.ensureProvider();
|
|
126
|
+
// Sanitize all messages
|
|
127
|
+
const sanitizedMessages = messages.map(msg => ({
|
|
128
|
+
...msg,
|
|
129
|
+
content: (0, sanitization_1.sanitizePrompt)(msg.content),
|
|
130
|
+
}));
|
|
131
|
+
this.logger.debug('Sending messages completion request', {
|
|
132
|
+
provider: this.provider.name,
|
|
133
|
+
messageCount: sanitizedMessages.length,
|
|
134
|
+
});
|
|
135
|
+
return this.provider.complete(sanitizedMessages, options);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Check if the service is properly configured
|
|
139
|
+
*
|
|
140
|
+
* @returns True if configured correctly
|
|
141
|
+
*/
|
|
142
|
+
isConfigured() {
|
|
143
|
+
return this.provider !== null && this.provider.validateConfig();
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Get the current provider name
|
|
147
|
+
*
|
|
148
|
+
* @returns Provider name or null
|
|
149
|
+
*/
|
|
150
|
+
getProviderName() {
|
|
151
|
+
return this.provider?.name ?? null;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Get available models for the current provider
|
|
155
|
+
*
|
|
156
|
+
* @returns Array of model names
|
|
157
|
+
*/
|
|
158
|
+
getAvailableModels() {
|
|
159
|
+
return this.provider?.availableModels ?? [];
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Initialize the LLM provider
|
|
163
|
+
*
|
|
164
|
+
* @param config - Service configuration
|
|
165
|
+
*/
|
|
166
|
+
initializeProvider(config) {
|
|
167
|
+
switch (config.provider) {
|
|
168
|
+
case 'gemini':
|
|
169
|
+
this.provider = new gemini_1.GeminiProvider({
|
|
170
|
+
apiKey: config.apiKey,
|
|
171
|
+
model: config.model,
|
|
172
|
+
timeoutMs: config.timeoutMs,
|
|
173
|
+
maxRetries: config.maxRetries,
|
|
174
|
+
});
|
|
175
|
+
break;
|
|
176
|
+
case 'claude':
|
|
177
|
+
// Claude provider would be implemented here
|
|
178
|
+
throw new errors_1.LLMError('Claude provider not yet implemented', 'claude');
|
|
179
|
+
case 'openai':
|
|
180
|
+
// OpenAI provider would be implemented here
|
|
181
|
+
throw new errors_1.LLMError('OpenAI provider not yet implemented', 'openai');
|
|
182
|
+
case 'cli':
|
|
183
|
+
// Auto-configure defaults for known tools if not specified
|
|
184
|
+
let promptMethod = config.cliPromptPassingMethod || 'stdin';
|
|
185
|
+
let promptFlag = config.cliPromptFlag;
|
|
186
|
+
// Smart defaults for Gemini if using cli command 'gemini'
|
|
187
|
+
if (config.cliCommand === 'gemini' && !config.cliPromptPassingMethod) {
|
|
188
|
+
promptMethod = 'arg';
|
|
189
|
+
promptFlag = '-p';
|
|
190
|
+
}
|
|
191
|
+
this.provider = new cli_1.CLIProvider({
|
|
192
|
+
command: config.cliCommand || 'gemini',
|
|
193
|
+
args: config.cliArgs,
|
|
194
|
+
promptPassingMethod: promptMethod,
|
|
195
|
+
promptFlag: promptFlag,
|
|
196
|
+
timeoutMs: config.timeoutMs,
|
|
197
|
+
maxRetries: config.maxRetries
|
|
198
|
+
});
|
|
199
|
+
break;
|
|
200
|
+
default:
|
|
201
|
+
throw new errors_1.LLMError(`Unknown provider: ${config.provider}`, String(config.provider));
|
|
202
|
+
}
|
|
203
|
+
this.logger.info('LLM provider initialized', { provider: config.provider });
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Ensure provider is initialized
|
|
207
|
+
*/
|
|
208
|
+
ensureProvider() {
|
|
209
|
+
if (this.provider === null) {
|
|
210
|
+
throw new errors_1.LLMError('LLM provider not initialized', 'unknown');
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
exports.LLMService = LLMService;
|
|
215
|
+
/**
|
|
216
|
+
* Create an LLM service from configuration
|
|
217
|
+
*
|
|
218
|
+
* @param config - Engine configuration
|
|
219
|
+
* @returns LLM service instance
|
|
220
|
+
*/
|
|
221
|
+
function createLLMService(config) {
|
|
222
|
+
return LLMService.fromConfig(config);
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=llm-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-service.js","sourceRoot":"","sources":["../../src/llm/llm-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base LLM Provider Interface
|
|
3
|
+
*
|
|
4
|
+
* @module llm/providers/base
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* LLM message role
|
|
8
|
+
*/
|
|
9
|
+
export type MessageRole = 'system' | 'user' | 'assistant';
|
|
10
|
+
/**
|
|
11
|
+
* LLM message
|
|
12
|
+
*/
|
|
13
|
+
export interface LLMMessage {
|
|
14
|
+
role: MessageRole;
|
|
15
|
+
content: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* LLM request options
|
|
19
|
+
*/
|
|
20
|
+
export interface LLMRequestOptions {
|
|
21
|
+
model?: string;
|
|
22
|
+
temperature?: number;
|
|
23
|
+
maxTokens?: number;
|
|
24
|
+
topP?: number;
|
|
25
|
+
frequencyPenalty?: number;
|
|
26
|
+
presencePenalty?: number;
|
|
27
|
+
stopSequences?: string[];
|
|
28
|
+
timeoutMs?: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* LLM response
|
|
32
|
+
*/
|
|
33
|
+
export interface LLMResponse {
|
|
34
|
+
content: string;
|
|
35
|
+
model: string;
|
|
36
|
+
usage: {
|
|
37
|
+
promptTokens: number;
|
|
38
|
+
completionTokens: number;
|
|
39
|
+
totalTokens: number;
|
|
40
|
+
};
|
|
41
|
+
finishReason: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* LLM stream chunk
|
|
45
|
+
*/
|
|
46
|
+
export interface LLMStreamChunk {
|
|
47
|
+
content: string;
|
|
48
|
+
isComplete: boolean;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Base LLM provider interface
|
|
52
|
+
*/
|
|
53
|
+
export interface ILLMProvider {
|
|
54
|
+
readonly name: string;
|
|
55
|
+
readonly availableModels: string[];
|
|
56
|
+
complete(messages: LLMMessage[], options?: LLMRequestOptions): Promise<LLMResponse>;
|
|
57
|
+
stream(messages: LLMMessage[], options?: LLMRequestOptions): AsyncGenerator<LLMStreamChunk>;
|
|
58
|
+
validateConfig(): boolean;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Base LLM provider class
|
|
62
|
+
*/
|
|
63
|
+
export declare abstract class BaseLLMProvider implements ILLMProvider {
|
|
64
|
+
abstract readonly name: string;
|
|
65
|
+
abstract readonly availableModels: string[];
|
|
66
|
+
protected apiKey: string;
|
|
67
|
+
protected baseUrl: string;
|
|
68
|
+
protected defaultModel: string;
|
|
69
|
+
protected timeoutMs: number;
|
|
70
|
+
protected maxRetries: number;
|
|
71
|
+
constructor(config: {
|
|
72
|
+
apiKey: string;
|
|
73
|
+
baseUrl: string;
|
|
74
|
+
defaultModel: string;
|
|
75
|
+
timeoutMs?: number;
|
|
76
|
+
maxRetries?: number;
|
|
77
|
+
});
|
|
78
|
+
abstract complete(messages: LLMMessage[], options?: LLMRequestOptions): Promise<LLMResponse>;
|
|
79
|
+
abstract stream(messages: LLMMessage[], options?: LLMRequestOptions): AsyncGenerator<LLMStreamChunk>;
|
|
80
|
+
validateConfig(): boolean;
|
|
81
|
+
protected getModel(options?: LLMRequestOptions): string;
|
|
82
|
+
protected withRetry<T>(operation: () => Promise<T>, retries?: number): Promise<T>;
|
|
83
|
+
protected isNonRetryableError(error: unknown): boolean;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/llm/providers/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Base LLM Provider Interface
|
|
4
|
+
*
|
|
5
|
+
* @module llm/providers/base
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.BaseLLMProvider = void 0;
|
|
9
|
+
/**
|
|
10
|
+
* Base LLM provider class
|
|
11
|
+
*/
|
|
12
|
+
class BaseLLMProvider {
|
|
13
|
+
apiKey;
|
|
14
|
+
baseUrl;
|
|
15
|
+
defaultModel;
|
|
16
|
+
timeoutMs;
|
|
17
|
+
maxRetries;
|
|
18
|
+
constructor(config) {
|
|
19
|
+
this.apiKey = config.apiKey;
|
|
20
|
+
this.baseUrl = config.baseUrl;
|
|
21
|
+
this.defaultModel = config.defaultModel;
|
|
22
|
+
this.timeoutMs = config.timeoutMs ?? 30000;
|
|
23
|
+
this.maxRetries = config.maxRetries ?? 3;
|
|
24
|
+
}
|
|
25
|
+
validateConfig() {
|
|
26
|
+
return this.apiKey.length > 0 && this.baseUrl.length > 0;
|
|
27
|
+
}
|
|
28
|
+
getModel(options) {
|
|
29
|
+
return options?.model ?? this.defaultModel;
|
|
30
|
+
}
|
|
31
|
+
async withRetry(operation, retries = this.maxRetries) {
|
|
32
|
+
let lastError;
|
|
33
|
+
for (let i = 0; i <= retries; i++) {
|
|
34
|
+
try {
|
|
35
|
+
return await operation();
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
lastError = error;
|
|
39
|
+
// Don't retry on certain errors
|
|
40
|
+
if (this.isNonRetryableError(error)) {
|
|
41
|
+
throw error;
|
|
42
|
+
}
|
|
43
|
+
if (i < retries) {
|
|
44
|
+
const delay = Math.pow(2, i) * 1000; // Exponential backoff
|
|
45
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
throw lastError;
|
|
50
|
+
}
|
|
51
|
+
isNonRetryableError(error) {
|
|
52
|
+
// Override in subclasses for provider-specific logic
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.BaseLLMProvider = BaseLLMProvider;
|
|
57
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/llm/providers/base.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAiEH;;GAEG;AACH,MAAsB,eAAe;IAIzB,MAAM,CAAS;IACf,OAAO,CAAS;IAChB,YAAY,CAAS;IACrB,SAAS,CAAS;IAClB,UAAU,CAAS;IAE7B,YAAY,MAMX;QACC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACxC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC;QAC3C,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;IAC3C,CAAC;IAYD,cAAc;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3D,CAAC;IAES,QAAQ,CAAC,OAA2B;QAC5C,OAAO,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC;IAC7C,CAAC;IAES,KAAK,CAAC,SAAS,CACvB,SAA2B,EAC3B,OAAO,GAAG,IAAI,CAAC,UAAU;QAEzB,IAAI,SAA4B,CAAC;QAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,OAAO,MAAM,SAAS,EAAE,CAAC;YAC3B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,SAAS,GAAG,KAAc,CAAC;gBAE3B,gCAAgC;gBAChC,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;oBACpC,MAAM,KAAK,CAAC;gBACd,CAAC;gBAED,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC;oBAChB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,sBAAsB;oBAC3D,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC3D,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,SAAS,CAAC;IAClB,CAAC;IAES,mBAAmB,CAAC,KAAc;QAC1C,qDAAqD;QACrD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAzED,0CAyEC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { BaseLLMProvider, type LLMMessage, type LLMRequestOptions, type LLMResponse, type LLMStreamChunk } from './base';
|
|
2
|
+
export interface CLIConfig {
|
|
3
|
+
command: string;
|
|
4
|
+
args?: string[];
|
|
5
|
+
promptPassingMethod?: 'stdin' | 'arg';
|
|
6
|
+
promptFlag?: string;
|
|
7
|
+
timeoutMs?: number;
|
|
8
|
+
maxRetries?: number;
|
|
9
|
+
}
|
|
10
|
+
export declare class CLIProvider extends BaseLLMProvider {
|
|
11
|
+
readonly name = "cli";
|
|
12
|
+
readonly availableModels: string[];
|
|
13
|
+
private command;
|
|
14
|
+
private defaultArgs;
|
|
15
|
+
private promptPassingMethod;
|
|
16
|
+
private promptFlag?;
|
|
17
|
+
constructor(config: CLIConfig);
|
|
18
|
+
private getPromptText;
|
|
19
|
+
private getLatestPrompt;
|
|
20
|
+
complete(messages: LLMMessage[], options?: LLMRequestOptions): Promise<LLMResponse>;
|
|
21
|
+
stream(messages: LLMMessage[], options?: LLMRequestOptions): AsyncGenerator<LLMStreamChunk>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../src/llm/providers/cli.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,QAAQ,CAAC;AAIzH,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,mBAAmB,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,WAAY,SAAQ,eAAe;IAC9C,QAAQ,CAAC,IAAI,SAAS;IACtB,QAAQ,CAAC,eAAe,WAAqB;IAC7C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAW;IAC9B,OAAO,CAAC,mBAAmB,CAAkB;IAC7C,OAAO,CAAC,UAAU,CAAC,CAAS;gBAEhB,MAAM,EAAE,SAAS;IAgB7B,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,eAAe;IAKjB,QAAQ,CACZ,QAAQ,EAAE,UAAU,EAAE,EACtB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,WAAW,CAAC;IAoEhB,MAAM,CACX,QAAQ,EAAE,UAAU,EAAE,EACtB,OAAO,GAAE,iBAAsB,GAC9B,cAAc,CAAC,cAAc,CAAC;CAwDlC"}
|