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.
Files changed (116) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +414 -0
  3. package/SKILL.md +238 -0
  4. package/dist/cli/main.d.ts +6 -0
  5. package/dist/cli/main.d.ts.map +1 -0
  6. package/dist/cli/main.js +353 -0
  7. package/dist/cli/main.js.map +1 -0
  8. package/dist/cli/options.d.ts +37 -0
  9. package/dist/cli/options.d.ts.map +1 -0
  10. package/dist/cli/options.js +54 -0
  11. package/dist/cli/options.js.map +1 -0
  12. package/dist/convert/converter.d.ts +39 -0
  13. package/dist/convert/converter.d.ts.map +1 -0
  14. package/dist/convert/converter.js +99 -0
  15. package/dist/convert/converter.js.map +1 -0
  16. package/dist/convert/extract.d.ts +32 -0
  17. package/dist/convert/extract.d.ts.map +1 -0
  18. package/dist/convert/extract.js +235 -0
  19. package/dist/convert/extract.js.map +1 -0
  20. package/dist/convert/index.d.ts +7 -0
  21. package/dist/convert/index.d.ts.map +1 -0
  22. package/dist/convert/index.js +7 -0
  23. package/dist/convert/index.js.map +1 -0
  24. package/dist/convert/sanitize.d.ts +60 -0
  25. package/dist/convert/sanitize.d.ts.map +1 -0
  26. package/dist/convert/sanitize.js +169 -0
  27. package/dist/convert/sanitize.js.map +1 -0
  28. package/dist/diff/engine.d.ts +76 -0
  29. package/dist/diff/engine.d.ts.map +1 -0
  30. package/dist/diff/engine.js +386 -0
  31. package/dist/diff/engine.js.map +1 -0
  32. package/dist/diff/index.d.ts +6 -0
  33. package/dist/diff/index.d.ts.map +1 -0
  34. package/dist/diff/index.js +6 -0
  35. package/dist/diff/index.js.map +1 -0
  36. package/dist/diff/markdown.d.ts +16 -0
  37. package/dist/diff/markdown.d.ts.map +1 -0
  38. package/dist/diff/markdown.js +342 -0
  39. package/dist/diff/markdown.js.map +1 -0
  40. package/dist/index.d.ts +52 -0
  41. package/dist/index.d.ts.map +1 -0
  42. package/dist/index.js +247 -0
  43. package/dist/index.js.map +1 -0
  44. package/dist/llm/client.d.ts +39 -0
  45. package/dist/llm/client.d.ts.map +1 -0
  46. package/dist/llm/client.js +270 -0
  47. package/dist/llm/client.js.map +1 -0
  48. package/dist/llm/index.d.ts +8 -0
  49. package/dist/llm/index.d.ts.map +1 -0
  50. package/dist/llm/index.js +8 -0
  51. package/dist/llm/index.js.map +1 -0
  52. package/dist/llm/prompt.d.ts +32 -0
  53. package/dist/llm/prompt.d.ts.map +1 -0
  54. package/dist/llm/prompt.js +146 -0
  55. package/dist/llm/prompt.js.map +1 -0
  56. package/dist/llm/schema.d.ts +150 -0
  57. package/dist/llm/schema.d.ts.map +1 -0
  58. package/dist/llm/schema.js +131 -0
  59. package/dist/llm/schema.js.map +1 -0
  60. package/dist/llm/validate.d.ts +33 -0
  61. package/dist/llm/validate.d.ts.map +1 -0
  62. package/dist/llm/validate.js +241 -0
  63. package/dist/llm/validate.js.map +1 -0
  64. package/dist/profile/duration.d.ts +2 -0
  65. package/dist/profile/duration.d.ts.map +1 -0
  66. package/dist/profile/duration.js +24 -0
  67. package/dist/profile/duration.js.map +1 -0
  68. package/dist/profile/preload.d.ts +2 -0
  69. package/dist/profile/preload.d.ts.map +1 -0
  70. package/dist/profile/preload.js +100 -0
  71. package/dist/profile/preload.js.map +1 -0
  72. package/dist/profile/runner.d.ts +22 -0
  73. package/dist/profile/runner.d.ts.map +1 -0
  74. package/dist/profile/runner.js +88 -0
  75. package/dist/profile/runner.js.map +1 -0
  76. package/dist/server/http.d.ts +27 -0
  77. package/dist/server/http.d.ts.map +1 -0
  78. package/dist/server/http.js +285 -0
  79. package/dist/server/http.js.map +1 -0
  80. package/dist/server/utils.d.ts +15 -0
  81. package/dist/server/utils.d.ts.map +1 -0
  82. package/dist/server/utils.js +71 -0
  83. package/dist/server/utils.js.map +1 -0
  84. package/dist/skill/handler.d.ts +77 -0
  85. package/dist/skill/handler.d.ts.map +1 -0
  86. package/dist/skill/handler.js +91 -0
  87. package/dist/skill/handler.js.map +1 -0
  88. package/dist/skill/index.d.ts +6 -0
  89. package/dist/skill/index.d.ts.map +1 -0
  90. package/dist/skill/index.js +6 -0
  91. package/dist/skill/index.js.map +1 -0
  92. package/dist/skill/manifest.d.ts +17 -0
  93. package/dist/skill/manifest.d.ts.map +1 -0
  94. package/dist/skill/manifest.js +231 -0
  95. package/dist/skill/manifest.js.map +1 -0
  96. package/dist/types.d.ts +260 -0
  97. package/dist/types.d.ts.map +1 -0
  98. package/dist/types.js +5 -0
  99. package/dist/types.js.map +1 -0
  100. package/dist/utils/fs.d.ts +52 -0
  101. package/dist/utils/fs.d.ts.map +1 -0
  102. package/dist/utils/fs.js +106 -0
  103. package/dist/utils/fs.js.map +1 -0
  104. package/dist/utils/index.d.ts +7 -0
  105. package/dist/utils/index.d.ts.map +1 -0
  106. package/dist/utils/index.js +7 -0
  107. package/dist/utils/index.js.map +1 -0
  108. package/dist/utils/limits.d.ts +38 -0
  109. package/dist/utils/limits.d.ts.map +1 -0
  110. package/dist/utils/limits.js +86 -0
  111. package/dist/utils/limits.js.map +1 -0
  112. package/dist/utils/logger.d.ts +21 -0
  113. package/dist/utils/logger.d.ts.map +1 -0
  114. package/dist/utils/logger.js +82 -0
  115. package/dist/utils/logger.js.map +1 -0
  116. 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":"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"}
@@ -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"}