perf-skill 0.0.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +414 -0
- package/SKILL.md +238 -0
- package/dist/cli/main.d.ts +6 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +353 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/options.d.ts +37 -0
- package/dist/cli/options.d.ts.map +1 -0
- package/dist/cli/options.js +54 -0
- package/dist/cli/options.js.map +1 -0
- package/dist/convert/converter.d.ts +39 -0
- package/dist/convert/converter.d.ts.map +1 -0
- package/dist/convert/converter.js +99 -0
- package/dist/convert/converter.js.map +1 -0
- package/dist/convert/extract.d.ts +32 -0
- package/dist/convert/extract.d.ts.map +1 -0
- package/dist/convert/extract.js +235 -0
- package/dist/convert/extract.js.map +1 -0
- package/dist/convert/index.d.ts +7 -0
- package/dist/convert/index.d.ts.map +1 -0
- package/dist/convert/index.js +7 -0
- package/dist/convert/index.js.map +1 -0
- package/dist/convert/sanitize.d.ts +60 -0
- package/dist/convert/sanitize.d.ts.map +1 -0
- package/dist/convert/sanitize.js +169 -0
- package/dist/convert/sanitize.js.map +1 -0
- package/dist/diff/engine.d.ts +76 -0
- package/dist/diff/engine.d.ts.map +1 -0
- package/dist/diff/engine.js +386 -0
- package/dist/diff/engine.js.map +1 -0
- package/dist/diff/index.d.ts +6 -0
- package/dist/diff/index.d.ts.map +1 -0
- package/dist/diff/index.js +6 -0
- package/dist/diff/index.js.map +1 -0
- package/dist/diff/markdown.d.ts +16 -0
- package/dist/diff/markdown.d.ts.map +1 -0
- package/dist/diff/markdown.js +342 -0
- package/dist/diff/markdown.js.map +1 -0
- package/dist/index.d.ts +52 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +247 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/client.d.ts +39 -0
- package/dist/llm/client.d.ts.map +1 -0
- package/dist/llm/client.js +270 -0
- package/dist/llm/client.js.map +1 -0
- package/dist/llm/index.d.ts +8 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +8 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/prompt.d.ts +32 -0
- package/dist/llm/prompt.d.ts.map +1 -0
- package/dist/llm/prompt.js +146 -0
- package/dist/llm/prompt.js.map +1 -0
- package/dist/llm/schema.d.ts +150 -0
- package/dist/llm/schema.d.ts.map +1 -0
- package/dist/llm/schema.js +131 -0
- package/dist/llm/schema.js.map +1 -0
- package/dist/llm/validate.d.ts +33 -0
- package/dist/llm/validate.d.ts.map +1 -0
- package/dist/llm/validate.js +241 -0
- package/dist/llm/validate.js.map +1 -0
- package/dist/profile/duration.d.ts +2 -0
- package/dist/profile/duration.d.ts.map +1 -0
- package/dist/profile/duration.js +24 -0
- package/dist/profile/duration.js.map +1 -0
- package/dist/profile/preload.d.ts +2 -0
- package/dist/profile/preload.d.ts.map +1 -0
- package/dist/profile/preload.js +100 -0
- package/dist/profile/preload.js.map +1 -0
- package/dist/profile/runner.d.ts +22 -0
- package/dist/profile/runner.d.ts.map +1 -0
- package/dist/profile/runner.js +88 -0
- package/dist/profile/runner.js.map +1 -0
- package/dist/server/http.d.ts +27 -0
- package/dist/server/http.d.ts.map +1 -0
- package/dist/server/http.js +285 -0
- package/dist/server/http.js.map +1 -0
- package/dist/server/utils.d.ts +15 -0
- package/dist/server/utils.d.ts.map +1 -0
- package/dist/server/utils.js +71 -0
- package/dist/server/utils.js.map +1 -0
- package/dist/skill/handler.d.ts +77 -0
- package/dist/skill/handler.d.ts.map +1 -0
- package/dist/skill/handler.js +91 -0
- package/dist/skill/handler.js.map +1 -0
- package/dist/skill/index.d.ts +6 -0
- package/dist/skill/index.d.ts.map +1 -0
- package/dist/skill/index.js +6 -0
- package/dist/skill/index.js.map +1 -0
- package/dist/skill/manifest.d.ts +17 -0
- package/dist/skill/manifest.d.ts.map +1 -0
- package/dist/skill/manifest.js +231 -0
- package/dist/skill/manifest.js.map +1 -0
- package/dist/types.d.ts +260 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/fs.d.ts +52 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +106 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +7 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/limits.d.ts +38 -0
- package/dist/utils/limits.d.ts.map +1 -0
- package/dist/utils/limits.js +86 -0
- package/dist/utils/limits.js.map +1 -0
- package/dist/utils/logger.d.ts +21 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +82 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +70 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM client abstraction - supports OpenAI and compatible APIs
|
|
3
|
+
*/
|
|
4
|
+
import type { LLMConfig } from "../types.js";
|
|
5
|
+
export interface LLMResponse {
|
|
6
|
+
content: string;
|
|
7
|
+
usage?: {
|
|
8
|
+
promptTokens: number;
|
|
9
|
+
completionTokens: number;
|
|
10
|
+
totalTokens: number;
|
|
11
|
+
};
|
|
12
|
+
durationMs: number;
|
|
13
|
+
}
|
|
14
|
+
export interface LLMClient {
|
|
15
|
+
chat(messages: ChatMessage[], options?: ChatOptions): Promise<LLMResponse>;
|
|
16
|
+
}
|
|
17
|
+
export interface ChatMessage {
|
|
18
|
+
role: "system" | "user" | "assistant";
|
|
19
|
+
content: string;
|
|
20
|
+
}
|
|
21
|
+
export interface ChatOptions {
|
|
22
|
+
maxTokens?: number;
|
|
23
|
+
temperature?: number;
|
|
24
|
+
jsonMode?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export declare function withRetries<T>(fn: () => Promise<T>, options: {
|
|
27
|
+
maxRetries: number;
|
|
28
|
+
baseDelayMs: number;
|
|
29
|
+
label: string;
|
|
30
|
+
}): Promise<T>;
|
|
31
|
+
/**
|
|
32
|
+
* Create an LLM client based on configuration
|
|
33
|
+
*/
|
|
34
|
+
export declare function createLLMClient(config: LLMConfig): LLMClient;
|
|
35
|
+
/**
|
|
36
|
+
* Get default LLM configuration from environment
|
|
37
|
+
*/
|
|
38
|
+
export declare function getDefaultLLMConfig(): LLMConfig;
|
|
39
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/llm/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAI7C,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE;QACN,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CAC5E;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAgBD,wBAAsB,WAAW,CAAC,CAAC,EACjC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAClE,OAAO,CAAC,CAAC,CAAC,CAqBZ;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAW5D;AAiPD;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,SAAS,CAqB/C"}
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM client abstraction - supports OpenAI and compatible APIs
|
|
3
|
+
*/
|
|
4
|
+
import OpenAI from "openai";
|
|
5
|
+
import { logger } from "../utils/logger.js";
|
|
6
|
+
import { withTimeout } from "../utils/limits.js";
|
|
7
|
+
const DEFAULT_LLM_TIMEOUT_MS = 30_000;
|
|
8
|
+
const DEFAULT_LLM_MAX_RETRIES = 2;
|
|
9
|
+
const DEFAULT_LLM_RETRY_DELAY_MS = 500;
|
|
10
|
+
function parseEnvNumber(value, fallback) {
|
|
11
|
+
if (value === undefined)
|
|
12
|
+
return fallback;
|
|
13
|
+
const parsed = Number(value);
|
|
14
|
+
return Number.isFinite(parsed) ? parsed : fallback;
|
|
15
|
+
}
|
|
16
|
+
async function sleep(ms) {
|
|
17
|
+
await new Promise((resolve) => setTimeout(resolve, ms));
|
|
18
|
+
}
|
|
19
|
+
export async function withRetries(fn, options) {
|
|
20
|
+
let attempt = 0;
|
|
21
|
+
// attempt = 0 is the initial try
|
|
22
|
+
while (true) {
|
|
23
|
+
try {
|
|
24
|
+
return await fn();
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
if (attempt >= options.maxRetries) {
|
|
28
|
+
throw error;
|
|
29
|
+
}
|
|
30
|
+
const delay = options.baseDelayMs * Math.pow(2, attempt);
|
|
31
|
+
const jitter = Math.floor(Math.random() * 100);
|
|
32
|
+
logger.warn(`${options.label} failed, retrying`, {
|
|
33
|
+
attempt: attempt + 1,
|
|
34
|
+
delayMs: delay + jitter,
|
|
35
|
+
error: error instanceof Error ? error.message : String(error),
|
|
36
|
+
});
|
|
37
|
+
await sleep(delay + jitter);
|
|
38
|
+
attempt += 1;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Create an LLM client based on configuration
|
|
44
|
+
*/
|
|
45
|
+
export function createLLMClient(config) {
|
|
46
|
+
switch (config.provider) {
|
|
47
|
+
case "openai":
|
|
48
|
+
case "azure-openai":
|
|
49
|
+
case "custom":
|
|
50
|
+
return new OpenAICompatibleClient(config);
|
|
51
|
+
case "anthropic":
|
|
52
|
+
return new AnthropicClient(config);
|
|
53
|
+
default:
|
|
54
|
+
throw new Error(`Unsupported LLM provider: ${config.provider}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* OpenAI-compatible client (works with OpenAI, Azure, and compatible APIs)
|
|
59
|
+
*/
|
|
60
|
+
class OpenAICompatibleClient {
|
|
61
|
+
client;
|
|
62
|
+
model;
|
|
63
|
+
defaultMaxTokens;
|
|
64
|
+
defaultTemperature;
|
|
65
|
+
timeoutMs;
|
|
66
|
+
maxRetries;
|
|
67
|
+
retryDelayMs;
|
|
68
|
+
constructor(config) {
|
|
69
|
+
const apiKey = config.apiKey || process.env.OPENAI_API_KEY;
|
|
70
|
+
if (!apiKey) {
|
|
71
|
+
throw new Error("OpenAI API key is required (set apiKey or OPENAI_API_KEY env var)");
|
|
72
|
+
}
|
|
73
|
+
this.client = new OpenAI({
|
|
74
|
+
apiKey,
|
|
75
|
+
baseURL: config.baseUrl || process.env.OPENAI_BASE_URL,
|
|
76
|
+
});
|
|
77
|
+
this.model = config.model || "gpt-5.2";
|
|
78
|
+
this.defaultMaxTokens = config.maxTokens || 4096;
|
|
79
|
+
this.defaultTemperature = config.temperature ?? 0.1;
|
|
80
|
+
this.timeoutMs =
|
|
81
|
+
config.timeoutMs ??
|
|
82
|
+
parseEnvNumber(process.env.LLM_TIMEOUT_MS, DEFAULT_LLM_TIMEOUT_MS);
|
|
83
|
+
this.maxRetries =
|
|
84
|
+
config.maxRetries ??
|
|
85
|
+
parseEnvNumber(process.env.LLM_MAX_RETRIES, DEFAULT_LLM_MAX_RETRIES);
|
|
86
|
+
this.retryDelayMs =
|
|
87
|
+
config.retryDelayMs ??
|
|
88
|
+
parseEnvNumber(process.env.LLM_RETRY_DELAY_MS, DEFAULT_LLM_RETRY_DELAY_MS);
|
|
89
|
+
}
|
|
90
|
+
async chat(messages, options = {}) {
|
|
91
|
+
const startTime = performance.now();
|
|
92
|
+
logger.debug("LLM request", {
|
|
93
|
+
model: this.model,
|
|
94
|
+
messageCount: messages.length,
|
|
95
|
+
jsonMode: options.jsonMode,
|
|
96
|
+
});
|
|
97
|
+
try {
|
|
98
|
+
const response = await withRetries(() => withTimeout(this.client.chat.completions.create({
|
|
99
|
+
model: this.model,
|
|
100
|
+
messages: messages.map((m) => ({
|
|
101
|
+
role: m.role,
|
|
102
|
+
content: m.content,
|
|
103
|
+
})),
|
|
104
|
+
max_tokens: options.maxTokens || this.defaultMaxTokens,
|
|
105
|
+
temperature: options.temperature ?? this.defaultTemperature,
|
|
106
|
+
response_format: options.jsonMode
|
|
107
|
+
? { type: "json_object" }
|
|
108
|
+
: undefined,
|
|
109
|
+
}), this.timeoutMs, "LLM request timed out"), {
|
|
110
|
+
maxRetries: this.maxRetries,
|
|
111
|
+
baseDelayMs: this.retryDelayMs,
|
|
112
|
+
label: "OpenAI request",
|
|
113
|
+
});
|
|
114
|
+
const durationMs = performance.now() - startTime;
|
|
115
|
+
const content = response.choices[0]?.message?.content || "";
|
|
116
|
+
logger.debug("LLM response", {
|
|
117
|
+
durationMs: Math.round(durationMs),
|
|
118
|
+
tokens: response.usage?.total_tokens,
|
|
119
|
+
contentLength: content.length,
|
|
120
|
+
});
|
|
121
|
+
return {
|
|
122
|
+
content,
|
|
123
|
+
usage: response.usage
|
|
124
|
+
? {
|
|
125
|
+
promptTokens: response.usage.prompt_tokens,
|
|
126
|
+
completionTokens: response.usage.completion_tokens,
|
|
127
|
+
totalTokens: response.usage.total_tokens,
|
|
128
|
+
}
|
|
129
|
+
: undefined,
|
|
130
|
+
durationMs,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
logger.error("LLM request failed", {
|
|
135
|
+
error: error instanceof Error ? error.message : String(error),
|
|
136
|
+
model: this.model,
|
|
137
|
+
});
|
|
138
|
+
throw error;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Anthropic Claude client
|
|
144
|
+
*/
|
|
145
|
+
class AnthropicClient {
|
|
146
|
+
apiKey;
|
|
147
|
+
baseUrl;
|
|
148
|
+
model;
|
|
149
|
+
defaultMaxTokens;
|
|
150
|
+
defaultTemperature;
|
|
151
|
+
timeoutMs;
|
|
152
|
+
maxRetries;
|
|
153
|
+
retryDelayMs;
|
|
154
|
+
constructor(config) {
|
|
155
|
+
this.apiKey = config.apiKey || process.env.ANTHROPIC_API_KEY || "";
|
|
156
|
+
if (!this.apiKey) {
|
|
157
|
+
throw new Error("Anthropic API key is required");
|
|
158
|
+
}
|
|
159
|
+
this.baseUrl = config.baseUrl || "https://api.anthropic.com";
|
|
160
|
+
this.model = config.model || "claude-sonnet-4-20250514";
|
|
161
|
+
this.defaultMaxTokens = config.maxTokens || 4096;
|
|
162
|
+
this.defaultTemperature = config.temperature ?? 0.1;
|
|
163
|
+
this.timeoutMs =
|
|
164
|
+
config.timeoutMs ??
|
|
165
|
+
parseEnvNumber(process.env.LLM_TIMEOUT_MS, DEFAULT_LLM_TIMEOUT_MS);
|
|
166
|
+
this.maxRetries =
|
|
167
|
+
config.maxRetries ??
|
|
168
|
+
parseEnvNumber(process.env.LLM_MAX_RETRIES, DEFAULT_LLM_MAX_RETRIES);
|
|
169
|
+
this.retryDelayMs =
|
|
170
|
+
config.retryDelayMs ??
|
|
171
|
+
parseEnvNumber(process.env.LLM_RETRY_DELAY_MS, DEFAULT_LLM_RETRY_DELAY_MS);
|
|
172
|
+
}
|
|
173
|
+
async chat(messages, options = {}) {
|
|
174
|
+
const startTime = performance.now();
|
|
175
|
+
// Extract system message
|
|
176
|
+
const systemMessage = messages.find((m) => m.role === "system")?.content || "";
|
|
177
|
+
const userMessages = messages
|
|
178
|
+
.filter((m) => m.role !== "system")
|
|
179
|
+
.map((m) => ({
|
|
180
|
+
role: m.role,
|
|
181
|
+
content: m.content,
|
|
182
|
+
}));
|
|
183
|
+
logger.debug("Anthropic request", {
|
|
184
|
+
model: this.model,
|
|
185
|
+
messageCount: userMessages.length,
|
|
186
|
+
});
|
|
187
|
+
try {
|
|
188
|
+
const response = await withRetries(async () => {
|
|
189
|
+
const controller = new AbortController();
|
|
190
|
+
const timer = setTimeout(() => controller.abort(), this.timeoutMs);
|
|
191
|
+
try {
|
|
192
|
+
return await fetch(`${this.baseUrl}/v1/messages`, {
|
|
193
|
+
method: "POST",
|
|
194
|
+
headers: {
|
|
195
|
+
"Content-Type": "application/json",
|
|
196
|
+
"x-api-key": this.apiKey,
|
|
197
|
+
"anthropic-version": "2023-06-01",
|
|
198
|
+
},
|
|
199
|
+
body: JSON.stringify({
|
|
200
|
+
model: this.model,
|
|
201
|
+
max_tokens: options.maxTokens || this.defaultMaxTokens,
|
|
202
|
+
temperature: options.temperature ?? this.defaultTemperature,
|
|
203
|
+
system: systemMessage,
|
|
204
|
+
messages: userMessages,
|
|
205
|
+
}),
|
|
206
|
+
signal: controller.signal,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
finally {
|
|
210
|
+
clearTimeout(timer);
|
|
211
|
+
}
|
|
212
|
+
}, {
|
|
213
|
+
maxRetries: this.maxRetries,
|
|
214
|
+
baseDelayMs: this.retryDelayMs,
|
|
215
|
+
label: "Anthropic request",
|
|
216
|
+
});
|
|
217
|
+
if (!response.ok) {
|
|
218
|
+
const error = await response.text();
|
|
219
|
+
throw new Error(`Anthropic API error: ${response.status} - ${error}`);
|
|
220
|
+
}
|
|
221
|
+
const data = (await response.json());
|
|
222
|
+
const durationMs = performance.now() - startTime;
|
|
223
|
+
const content = data.content[0]?.text || "";
|
|
224
|
+
logger.debug("Anthropic response", {
|
|
225
|
+
durationMs: Math.round(durationMs),
|
|
226
|
+
contentLength: content.length,
|
|
227
|
+
});
|
|
228
|
+
return {
|
|
229
|
+
content,
|
|
230
|
+
usage: data.usage
|
|
231
|
+
? {
|
|
232
|
+
promptTokens: data.usage.input_tokens,
|
|
233
|
+
completionTokens: data.usage.output_tokens,
|
|
234
|
+
totalTokens: data.usage.input_tokens + data.usage.output_tokens,
|
|
235
|
+
}
|
|
236
|
+
: undefined,
|
|
237
|
+
durationMs,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
catch (error) {
|
|
241
|
+
logger.error("Anthropic request failed", {
|
|
242
|
+
error: error instanceof Error ? error.message : String(error),
|
|
243
|
+
model: this.model,
|
|
244
|
+
});
|
|
245
|
+
throw error;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Get default LLM configuration from environment
|
|
251
|
+
*/
|
|
252
|
+
export function getDefaultLLMConfig() {
|
|
253
|
+
const provider = process.env.LLM_PROVIDER || "openai";
|
|
254
|
+
return {
|
|
255
|
+
provider,
|
|
256
|
+
model: process.env.LLM_MODEL ||
|
|
257
|
+
(provider === "anthropic" ? "claude-sonnet-4-20250514" : "gpt-5.2"),
|
|
258
|
+
apiKey: process.env.LLM_API_KEY ||
|
|
259
|
+
process.env.OPENAI_API_KEY ||
|
|
260
|
+
process.env.ANTHROPIC_API_KEY,
|
|
261
|
+
baseUrl: process.env.LLM_BASE_URL,
|
|
262
|
+
maxTokens: process.env.LLM_MAX_TOKENS
|
|
263
|
+
? parseInt(process.env.LLM_MAX_TOKENS, 10)
|
|
264
|
+
: undefined,
|
|
265
|
+
temperature: process.env.LLM_TEMPERATURE
|
|
266
|
+
? parseFloat(process.env.LLM_TEMPERATURE)
|
|
267
|
+
: undefined,
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/llm/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AA2BjD,MAAM,sBAAsB,GAAG,MAAM,CAAC;AACtC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAClC,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAEvC,SAAS,cAAc,CAAC,KAAyB,EAAE,QAAgB;IACjE,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACzC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;AACrD,CAAC;AAED,KAAK,UAAU,KAAK,CAAC,EAAU;IAC7B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,EAAoB,EACpB,OAAmE;IAEnE,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,iCAAiC;IACjC,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBAClC,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACzD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,mBAAmB,EAAE;gBAC/C,OAAO,EAAE,OAAO,GAAG,CAAC;gBACpB,OAAO,EAAE,KAAK,GAAG,MAAM;gBACvB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;YACH,MAAM,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC,CAAC;QACf,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC/C,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxB,KAAK,QAAQ,CAAC;QACd,KAAK,cAAc,CAAC;QACpB,KAAK,QAAQ;YACX,OAAO,IAAI,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAC5C,KAAK,WAAW;YACd,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;QACrC;YACE,MAAM,IAAI,KAAK,CAAC,6BAA6B,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,sBAAsB;IAClB,MAAM,CAAS;IACf,KAAK,CAAS;IACd,gBAAgB,CAAS;IACzB,kBAAkB,CAAS;IAC3B,SAAS,CAAS;IAClB,UAAU,CAAS;IACnB,YAAY,CAAS;IAE7B,YAAY,MAAiB;QAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAC3D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC;YACvB,MAAM;YACN,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe;SACvD,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,SAAS,CAAC;QACvC,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC;QACjD,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,WAAW,IAAI,GAAG,CAAC;QACpD,IAAI,CAAC,SAAS;YACZ,MAAM,CAAC,SAAS;gBAChB,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,sBAAsB,CAAC,CAAC;QACrE,IAAI,CAAC,UAAU;YACb,MAAM,CAAC,UAAU;gBACjB,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,uBAAuB,CAAC,CAAC;QACvE,IAAI,CAAC,YAAY;YACf,MAAM,CAAC,YAAY;gBACnB,cAAc,CACZ,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAC9B,0BAA0B,CAC3B,CAAC;IACN,CAAC;IAED,KAAK,CAAC,IAAI,CACR,QAAuB,EACvB,UAAuB,EAAE;QAEzB,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAEpC,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE;YAC1B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,YAAY,EAAE,QAAQ,CAAC,MAAM;YAC7B,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,WAAW,CAChC,GAAG,EAAE,CACH,WAAW,CACT,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBAClC,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC7B,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,OAAO,EAAE,CAAC,CAAC,OAAO;iBACnB,CAAC,CAAC;gBACH,UAAU,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,gBAAgB;gBACtD,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,kBAAkB;gBAC3D,eAAe,EAAE,OAAO,CAAC,QAAQ;oBAC/B,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE;oBACzB,CAAC,CAAC,SAAS;aACd,CAAC,EACF,IAAI,CAAC,SAAS,EACd,uBAAuB,CACxB,EACH;gBACE,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,WAAW,EAAE,IAAI,CAAC,YAAY;gBAC9B,KAAK,EAAE,gBAAgB;aACxB,CACF,CAAC;YAEF,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACjD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;YAE5D,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE;gBAC3B,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;gBAClC,MAAM,EAAE,QAAQ,CAAC,KAAK,EAAE,YAAY;gBACpC,aAAa,EAAE,OAAO,CAAC,MAAM;aAC9B,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO;gBACP,KAAK,EAAE,QAAQ,CAAC,KAAK;oBACnB,CAAC,CAAC;wBACE,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,aAAa;wBAC1C,gBAAgB,EAAE,QAAQ,CAAC,KAAK,CAAC,iBAAiB;wBAClD,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,YAAY;qBACzC;oBACH,CAAC,CAAC,SAAS;gBACb,UAAU;aACX,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE;gBACjC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC7D,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC,CAAC;YACH,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,eAAe;IACX,MAAM,CAAS;IACf,OAAO,CAAS;IAChB,KAAK,CAAS;IACd,gBAAgB,CAAS;IACzB,kBAAkB,CAAS;IAC3B,SAAS,CAAS;IAClB,UAAU,CAAS;IACnB,YAAY,CAAS;IAE7B,YAAY,MAAiB;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC;QACnE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,2BAA2B,CAAC;QAC7D,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,0BAA0B,CAAC;QACxD,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC;QACjD,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,WAAW,IAAI,GAAG,CAAC;QACpD,IAAI,CAAC,SAAS;YACZ,MAAM,CAAC,SAAS;gBAChB,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,sBAAsB,CAAC,CAAC;QACrE,IAAI,CAAC,UAAU;YACb,MAAM,CAAC,UAAU;gBACjB,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,uBAAuB,CAAC,CAAC;QACvE,IAAI,CAAC,YAAY;YACf,MAAM,CAAC,YAAY;gBACnB,cAAc,CACZ,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAC9B,0BAA0B,CAC3B,CAAC;IACN,CAAC;IAED,KAAK,CAAC,IAAI,CACR,QAAuB,EACvB,UAAuB,EAAE;QAEzB,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAEpC,yBAAyB;QACzB,MAAM,aAAa,GACjB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC;QAC3D,MAAM,YAAY,GAAG,QAAQ;aAC1B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;aAClC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACX,IAAI,EAAE,CAAC,CAAC,IAA4B;YACpC,OAAO,EAAE,CAAC,CAAC,OAAO;SACnB,CAAC,CAAC,CAAC;QAEN,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE;YAChC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,YAAY,EAAE,YAAY,CAAC,MAAM;SAClC,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,WAAW,CAChC,KAAK,IAAI,EAAE;gBACT,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;gBACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBACnE,IAAI,CAAC;oBACH,OAAO,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,cAAc,EAAE;wBAChD,MAAM,EAAE,MAAM;wBACd,OAAO,EAAE;4BACP,cAAc,EAAE,kBAAkB;4BAClC,WAAW,EAAE,IAAI,CAAC,MAAM;4BACxB,mBAAmB,EAAE,YAAY;yBAClC;wBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,KAAK,EAAE,IAAI,CAAC,KAAK;4BACjB,UAAU,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,gBAAgB;4BACtD,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,kBAAkB;4BAC3D,MAAM,EAAE,aAAa;4BACrB,QAAQ,EAAE,YAAY;yBACvB,CAAC;wBACF,MAAM,EAAE,UAAU,CAAC,MAAM;qBAC1B,CAAC,CAAC;gBACL,CAAC;wBAAS,CAAC;oBACT,YAAY,CAAC,KAAK,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC,EACD;gBACE,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,WAAW,EAAE,IAAI,CAAC,YAAY;gBAC9B,KAAK,EAAE,mBAAmB;aAC3B,CACF,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,CAAC,MAAM,MAAM,KAAK,EAAE,CAAC,CAAC;YACxE,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAGlC,CAAC;YACF,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACjD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;YAE5C,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE;gBACjC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;gBAClC,aAAa,EAAE,OAAO,CAAC,MAAM;aAC9B,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO;gBACP,KAAK,EAAE,IAAI,CAAC,KAAK;oBACf,CAAC,CAAC;wBACE,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY;wBACrC,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;wBAC1C,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa;qBAChE;oBACH,CAAC,CAAC,SAAS;gBACb,UAAU;aACX,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE;gBACvC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC7D,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC,CAAC;YACH,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,QAAQ,GACX,OAAO,CAAC,GAAG,CAAC,YAAsC,IAAI,QAAQ,CAAC;IAElE,OAAO;QACL,QAAQ;QACR,KAAK,EACH,OAAO,CAAC,GAAG,CAAC,SAAS;YACrB,CAAC,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,SAAS,CAAC;QACrE,MAAM,EACJ,OAAO,CAAC,GAAG,CAAC,WAAW;YACvB,OAAO,CAAC,GAAG,CAAC,cAAc;YAC1B,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAC/B,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QACjC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;YACnC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC;YAC1C,CAAC,CAAC,SAAS;QACb,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe;YACtC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;YACzC,CAAC,CAAC,SAAS;KACd,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM module exports
|
|
3
|
+
*/
|
|
4
|
+
export { createLLMClient, getDefaultLLMConfig, type LLMClient, type LLMResponse, type ChatMessage, type ChatOptions, } from "./client.js";
|
|
5
|
+
export { SYSTEM_PROMPT, buildAnalysisPrompt, buildDiffAnalysisPrompt, buildRepairPrompt, buildTriagePrompt, } from "./prompt.js";
|
|
6
|
+
export { AnalysisOutputSchema, DiffAnalysisOutputSchema, RecommendationSchema, HotspotAnalysisSchema, validateAnalysisOutput, validateDiffAnalysisOutput, getAnalysisJsonSchema, type AnalysisOutput, type DiffAnalysisOutput, type Recommendation, type HotspotAnalysis, } from "./schema.js";
|
|
7
|
+
export { parseAnalysisOutput, parseDiffAnalysisOutput, repairJson, createFallbackResult, type ParseResult, } from "./validate.js";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,WAAW,GACjB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,EACV,oBAAoB,EACpB,KAAK,WAAW,GACjB,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM module exports
|
|
3
|
+
*/
|
|
4
|
+
export { createLLMClient, getDefaultLLMConfig, } from "./client.js";
|
|
5
|
+
export { SYSTEM_PROMPT, buildAnalysisPrompt, buildDiffAnalysisPrompt, buildRepairPrompt, buildTriagePrompt, } from "./prompt.js";
|
|
6
|
+
export { AnalysisOutputSchema, DiffAnalysisOutputSchema, RecommendationSchema, HotspotAnalysisSchema, validateAnalysisOutput, validateDiffAnalysisOutput, getAnalysisJsonSchema, } from "./schema.js";
|
|
7
|
+
export { parseAnalysisOutput, parseDiffAnalysisOutput, repairJson, createFallbackResult, } from "./validate.js";
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,eAAe,EACf,mBAAmB,GAKpB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,GAKtB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,EACV,oBAAoB,GAErB,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM prompt templates for performance analysis
|
|
3
|
+
*/
|
|
4
|
+
import type { AnalysisContext } from "../types.js";
|
|
5
|
+
/**
|
|
6
|
+
* System prompt for performance analysis
|
|
7
|
+
*/
|
|
8
|
+
export declare const SYSTEM_PROMPT = "You are a senior performance engineer specializing in Node.js/JavaScript performance optimization.\n\nYour task is to analyze pprof profiling reports and provide actionable recommendations.\n\nCRITICAL RULES:\n1. ONLY use evidence present in the report (function names, percentages, file locations, call paths)\n2. Do NOT invent or hallucinate file paths, line numbers, or function names that are not in the report\n3. Every recommendation MUST reference specific evidence from the report\n4. Be conservative with confidence scores - only high confidence if evidence is strong\n5. Distinguish between CPU and heap (memory) analysis - they require different strategies\n\nFor CPU profiles, focus on:\n- Functions with high self-time (flat) - these are doing actual work\n- Functions with high cumulative time - these may be bottleneck entry points\n- Recursive or repeated call patterns\n- Native functions that suggest slow operations (JSON.parse, regex, etc.)\n\nFor Heap profiles, focus on:\n- Functions with high allocation rates\n- Potential memory leaks (retained objects growing over time)\n- Inefficient data structures\n- Objects that could be pooled or reused\n\nAlways structure your response as valid JSON matching the provided schema.";
|
|
9
|
+
/**
|
|
10
|
+
* Build analysis prompt for a single profile
|
|
11
|
+
*/
|
|
12
|
+
export declare function buildAnalysisPrompt(args: {
|
|
13
|
+
markdown: string;
|
|
14
|
+
profileType: "cpu" | "heap" | "auto";
|
|
15
|
+
context?: AnalysisContext;
|
|
16
|
+
}): string;
|
|
17
|
+
/**
|
|
18
|
+
* Build prompt for diff analysis
|
|
19
|
+
*/
|
|
20
|
+
export declare function buildDiffAnalysisPrompt(args: {
|
|
21
|
+
markdown: string;
|
|
22
|
+
context?: AnalysisContext;
|
|
23
|
+
}): string;
|
|
24
|
+
/**
|
|
25
|
+
* Build repair prompt when LLM output fails validation
|
|
26
|
+
*/
|
|
27
|
+
export declare function buildRepairPrompt(originalOutput: string, errors: string[]): string;
|
|
28
|
+
/**
|
|
29
|
+
* Build prompt for quick triage (shorter, faster)
|
|
30
|
+
*/
|
|
31
|
+
export declare function buildTriagePrompt(markdown: string): string;
|
|
32
|
+
//# sourceMappingURL=prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/llm/prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD;;GAEG;AACH,eAAO,MAAM,aAAa,muCAuBiD,CAAC;AAE5E;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IACrC,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B,GAAG,MAAM,CAuCT;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B,GAAG,MAAM,CAmCT;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,EAAE,GACf,MAAM,CAiBR;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAW1D"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM prompt templates for performance analysis
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* System prompt for performance analysis
|
|
6
|
+
*/
|
|
7
|
+
export const SYSTEM_PROMPT = `You are a senior performance engineer specializing in Node.js/JavaScript performance optimization.
|
|
8
|
+
|
|
9
|
+
Your task is to analyze pprof profiling reports and provide actionable recommendations.
|
|
10
|
+
|
|
11
|
+
CRITICAL RULES:
|
|
12
|
+
1. ONLY use evidence present in the report (function names, percentages, file locations, call paths)
|
|
13
|
+
2. Do NOT invent or hallucinate file paths, line numbers, or function names that are not in the report
|
|
14
|
+
3. Every recommendation MUST reference specific evidence from the report
|
|
15
|
+
4. Be conservative with confidence scores - only high confidence if evidence is strong
|
|
16
|
+
5. Distinguish between CPU and heap (memory) analysis - they require different strategies
|
|
17
|
+
|
|
18
|
+
For CPU profiles, focus on:
|
|
19
|
+
- Functions with high self-time (flat) - these are doing actual work
|
|
20
|
+
- Functions with high cumulative time - these may be bottleneck entry points
|
|
21
|
+
- Recursive or repeated call patterns
|
|
22
|
+
- Native functions that suggest slow operations (JSON.parse, regex, etc.)
|
|
23
|
+
|
|
24
|
+
For Heap profiles, focus on:
|
|
25
|
+
- Functions with high allocation rates
|
|
26
|
+
- Potential memory leaks (retained objects growing over time)
|
|
27
|
+
- Inefficient data structures
|
|
28
|
+
- Objects that could be pooled or reused
|
|
29
|
+
|
|
30
|
+
Always structure your response as valid JSON matching the provided schema.`;
|
|
31
|
+
/**
|
|
32
|
+
* Build analysis prompt for a single profile
|
|
33
|
+
*/
|
|
34
|
+
export function buildAnalysisPrompt(args) {
|
|
35
|
+
const contextSection = args.context
|
|
36
|
+
? `## Analysis Context
|
|
37
|
+
|
|
38
|
+
- **Service:** ${args.context.serviceName || "Unknown"}
|
|
39
|
+
- **Scenario:** ${args.context.scenario || "Not specified"}
|
|
40
|
+
- **Target SLO:** ${args.context.targetSLO || "Not specified"}
|
|
41
|
+
- **Environment:** ${args.context.env || "Not specified"}
|
|
42
|
+
${args.context.recentChanges ? `- **Recent Changes:** ${args.context.recentChanges}` : ""}
|
|
43
|
+
`
|
|
44
|
+
: "";
|
|
45
|
+
const profileTypeHint = args.profileType !== "auto"
|
|
46
|
+
? `\n**Profile Type:** ${args.profileType.toUpperCase()}\n`
|
|
47
|
+
: "";
|
|
48
|
+
return `${contextSection}${profileTypeHint}
|
|
49
|
+
## Profiling Report
|
|
50
|
+
|
|
51
|
+
Analyze the following pprof Markdown report and produce a structured JSON analysis.
|
|
52
|
+
|
|
53
|
+
\`\`\`markdown
|
|
54
|
+
${args.markdown}
|
|
55
|
+
\`\`\`
|
|
56
|
+
|
|
57
|
+
## Required Output
|
|
58
|
+
|
|
59
|
+
Provide a JSON object with:
|
|
60
|
+
1. **summary**: One paragraph executive summary of findings
|
|
61
|
+
2. **recommendations**: Array of actionable recommendations (1-5 items), each with:
|
|
62
|
+
- title: Short action title
|
|
63
|
+
- rationale: Explanation with specific evidence from report
|
|
64
|
+
- steps: Concrete implementation steps
|
|
65
|
+
- expectedImpact: high/medium/low
|
|
66
|
+
- risk: high/medium/low
|
|
67
|
+
- confidence: 0-1 based on evidence quality
|
|
68
|
+
3. **nextSteps**: Array of validation experiments or metrics to track
|
|
69
|
+
|
|
70
|
+
Remember: Only reference functions, percentages, and locations that appear in the report above.`;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Build prompt for diff analysis
|
|
74
|
+
*/
|
|
75
|
+
export function buildDiffAnalysisPrompt(args) {
|
|
76
|
+
const contextSection = args.context
|
|
77
|
+
? `## Analysis Context
|
|
78
|
+
|
|
79
|
+
- **Service:** ${args.context.serviceName || "Unknown"}
|
|
80
|
+
- **Scenario:** ${args.context.scenario || "Not specified"}
|
|
81
|
+
- **Target SLO:** ${args.context.targetSLO || "Not specified"}
|
|
82
|
+
- **Environment:** ${args.context.env || "Not specified"}
|
|
83
|
+
${args.context.recentChanges ? `- **Recent Changes:** ${args.context.recentChanges}` : ""}
|
|
84
|
+
`
|
|
85
|
+
: "";
|
|
86
|
+
return `${contextSection}
|
|
87
|
+
## Performance Comparison Report
|
|
88
|
+
|
|
89
|
+
Analyze the following profile comparison report and explain why performance changed.
|
|
90
|
+
|
|
91
|
+
\`\`\`markdown
|
|
92
|
+
${args.markdown}
|
|
93
|
+
\`\`\`
|
|
94
|
+
|
|
95
|
+
## Required Output
|
|
96
|
+
|
|
97
|
+
Provide a JSON object with:
|
|
98
|
+
1. **summary**: Executive summary of the performance change
|
|
99
|
+
2. **overallChange**: "regression" | "improvement" | "mixed" | "unchanged"
|
|
100
|
+
3. **primaryCause**: Main cause of the change (if identifiable)
|
|
101
|
+
4. **regressionAnalysis**: For each major regression, explain:
|
|
102
|
+
- function: The function name
|
|
103
|
+
- explanation: Why it got slower
|
|
104
|
+
- likelyCause: "new_code" | "increased_calls" | "slower_callees" | "data_change" | "unknown"
|
|
105
|
+
5. **recommendations**: Top 1-3 actionable fixes for regressions
|
|
106
|
+
6. **riskAssessment**: Risk if this change goes to production
|
|
107
|
+
|
|
108
|
+
Focus on the DELTA values and call path changes to identify root causes.`;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Build repair prompt when LLM output fails validation
|
|
112
|
+
*/
|
|
113
|
+
export function buildRepairPrompt(originalOutput, errors) {
|
|
114
|
+
return `Your previous response had JSON validation errors:
|
|
115
|
+
|
|
116
|
+
${errors.map((e) => `- ${e}`).join("\n")}
|
|
117
|
+
|
|
118
|
+
Original response:
|
|
119
|
+
\`\`\`json
|
|
120
|
+
${originalOutput}
|
|
121
|
+
\`\`\`
|
|
122
|
+
|
|
123
|
+
Please fix the JSON to match the required schema. Common fixes:
|
|
124
|
+
- Ensure all required fields are present
|
|
125
|
+
- Ensure arrays have at least 1 item where required
|
|
126
|
+
- Ensure numbers are within valid ranges (confidence: 0-1)
|
|
127
|
+
- Ensure enums use valid values
|
|
128
|
+
|
|
129
|
+
Return ONLY the corrected JSON, no explanation.`;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Build prompt for quick triage (shorter, faster)
|
|
133
|
+
*/
|
|
134
|
+
export function buildTriagePrompt(markdown) {
|
|
135
|
+
return `Quick triage of this profile:
|
|
136
|
+
|
|
137
|
+
${markdown}
|
|
138
|
+
|
|
139
|
+
In 2-3 sentences, identify:
|
|
140
|
+
1. The #1 optimization opportunity
|
|
141
|
+
2. Estimated effort (easy/medium/hard)
|
|
142
|
+
3. Expected impact (high/medium/low)
|
|
143
|
+
|
|
144
|
+
Be direct and specific.`;
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/llm/prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;2EAuB8C,CAAC;AAE5E;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAInC;IACC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO;QACjC,CAAC,CAAC;;iBAEW,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,SAAS;kBACpC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,eAAe;oBACtC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,eAAe;qBACxC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,eAAe;EACtD,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,yBAAyB,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE;CACxF;QACG,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,KAAK,MAAM;QACjD,CAAC,CAAC,uBAAuB,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI;QAC3D,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,GAAG,cAAc,GAAG,eAAe;;;;;;EAM1C,IAAI,CAAC,QAAQ;;;;;;;;;;;;;;;;gGAgBiF,CAAC;AACjG,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAGvC;IACC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO;QACjC,CAAC,CAAC;;iBAEW,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,SAAS;kBACpC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,eAAe;oBACtC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,eAAe;qBACxC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,eAAe;EACtD,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,yBAAyB,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE;CACxF;QACG,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,GAAG,cAAc;;;;;;EAMxB,IAAI,CAAC,QAAQ;;;;;;;;;;;;;;;;yEAgB0D,CAAC;AAC1E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,cAAsB,EACtB,MAAgB;IAEhB,OAAO;;EAEP,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;EAItC,cAAc;;;;;;;;;gDASgC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,OAAO;;EAEP,QAAQ;;;;;;;wBAOc,CAAC;AACzB,CAAC"}
|