perf-skill 0.2.0 → 0.3.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/.claude-plugin/README.md +53 -0
- package/.claude-plugin/marketplace.json +58 -0
- package/.claude-plugin/plugin.json +40 -0
- package/CLAUDE.md +164 -0
- package/README.md +139 -130
- package/SKILL.md +86 -130
- package/dist/cli/init.d.ts +45 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +236 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/main.js +103 -44
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/platforms.d.ts +28 -0
- package/dist/cli/platforms.d.ts.map +1 -0
- package/dist/cli/platforms.js +238 -0
- package/dist/cli/platforms.js.map +1 -0
- package/dist/cli/template.d.ts +16 -0
- package/dist/cli/template.d.ts.map +1 -0
- package/dist/cli/template.js +157 -0
- package/dist/cli/template.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +71 -36
- package/dist/index.js.map +1 -1
- package/dist/llm/client.d.ts +6 -0
- package/dist/llm/client.d.ts.map +1 -1
- package/dist/llm/client.js +11 -2
- package/dist/llm/client.js.map +1 -1
- package/dist/llm/index.d.ts +1 -1
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +1 -1
- package/dist/llm/index.js.map +1 -1
- package/dist/skill/handler.d.ts +7 -0
- package/dist/skill/handler.d.ts.map +1 -1
- package/dist/skill/handler.js +24 -1
- package/dist/skill/handler.js.map +1 -1
- package/dist/skill/manifest.d.ts +4 -0
- package/dist/skill/manifest.d.ts.map +1 -1
- package/dist/skill/manifest.js +60 -39
- package/dist/skill/manifest.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +12 -9
- package/dist/server/http.d.ts +0 -27
- package/dist/server/http.d.ts.map +0 -1
- package/dist/server/http.js +0 -285
- package/dist/server/http.js.map +0 -1
- package/dist/server/utils.d.ts +0 -15
- package/dist/server/utils.d.ts.map +0 -1
- package/dist/server/utils.js +0 -71
- package/dist/server/utils.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/skill/manifest.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/skill/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAkBjD;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,aAiL5B,CAAC;AAEF;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CAqCnD"}
|
package/dist/skill/manifest.js
CHANGED
|
@@ -1,18 +1,38 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Skill manifest for AI platform integration
|
|
3
|
+
*
|
|
4
|
+
* This skill provides deterministic evidence extraction from pprof profiles.
|
|
5
|
+
* The host agent (Claude/Cursor/etc.) should use this evidence to generate
|
|
6
|
+
* optimization recommendations - the skill itself does not require LLM access.
|
|
3
7
|
*/
|
|
8
|
+
import { readFileSync } from "node:fs";
|
|
9
|
+
import { join, dirname } from "node:path";
|
|
10
|
+
import { fileURLToPath } from "node:url";
|
|
11
|
+
// Read version from package.json
|
|
12
|
+
function getPackageVersion() {
|
|
13
|
+
try {
|
|
14
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
15
|
+
const __dirname = dirname(__filename);
|
|
16
|
+
const pkgPath = join(__dirname, "..", "..", "package.json");
|
|
17
|
+
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
18
|
+
return pkg.version || "0.0.0";
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return "0.0.0";
|
|
22
|
+
}
|
|
23
|
+
}
|
|
4
24
|
/**
|
|
5
25
|
* Full skill manifest with JSON schemas
|
|
6
26
|
*/
|
|
7
27
|
export const SKILL_MANIFEST = {
|
|
8
|
-
name: "
|
|
9
|
-
description: "Convert pprof .pb.gz profiles to Markdown and
|
|
10
|
-
version:
|
|
28
|
+
name: "pprof_evidence_extractor",
|
|
29
|
+
description: "Convert pprof .pb.gz profiles to structured Markdown and JSON evidence for performance analysis. Produces deterministic hotspots, call paths, and metrics that can be used by any agent to generate optimization recommendations. No external API dependencies required.",
|
|
30
|
+
version: getPackageVersion(),
|
|
11
31
|
inputSchema: {
|
|
12
32
|
type: "object",
|
|
13
33
|
oneOf: [
|
|
14
34
|
{
|
|
15
|
-
title: "
|
|
35
|
+
title: "Convert Profile to Evidence",
|
|
16
36
|
properties: {
|
|
17
37
|
action: { type: "string", const: "analyze" },
|
|
18
38
|
profile_base64: {
|
|
@@ -27,30 +47,29 @@ export const SKILL_MANIFEST = {
|
|
|
27
47
|
type: "string",
|
|
28
48
|
enum: ["summary", "detailed", "adaptive"],
|
|
29
49
|
default: "adaptive",
|
|
50
|
+
description: "Output format for the markdown report",
|
|
30
51
|
},
|
|
31
52
|
profile_type: {
|
|
32
53
|
type: "string",
|
|
33
54
|
enum: ["cpu", "heap", "auto"],
|
|
34
55
|
default: "auto",
|
|
56
|
+
description: "Type of profile (auto-detected if not specified)",
|
|
35
57
|
},
|
|
36
58
|
max_hotspots: {
|
|
37
59
|
type: "integer",
|
|
38
60
|
minimum: 1,
|
|
39
61
|
maximum: 50,
|
|
40
62
|
default: 10,
|
|
63
|
+
description: "Maximum number of hotspots to include in output",
|
|
41
64
|
},
|
|
42
65
|
include_source: {
|
|
43
66
|
type: "boolean",
|
|
44
67
|
default: false,
|
|
45
|
-
|
|
46
|
-
mode: {
|
|
47
|
-
type: "string",
|
|
48
|
-
enum: ["convert-only", "analyze"],
|
|
49
|
-
default: "analyze",
|
|
50
|
-
description: "convert-only skips LLM analysis",
|
|
68
|
+
description: "Include source code snippets (requires source_dir)",
|
|
51
69
|
},
|
|
52
70
|
context: {
|
|
53
71
|
type: "object",
|
|
72
|
+
description: "Optional context to include in the output",
|
|
54
73
|
properties: {
|
|
55
74
|
service_name: { type: "string" },
|
|
56
75
|
scenario: { type: "string" },
|
|
@@ -83,6 +102,7 @@ export const SKILL_MANIFEST = {
|
|
|
83
102
|
type: "string",
|
|
84
103
|
enum: ["none", "scale-to-base-total", "per-second"],
|
|
85
104
|
default: "scale-to-base-total",
|
|
105
|
+
description: "Normalization mode for comparing profiles of different durations",
|
|
86
106
|
},
|
|
87
107
|
max_regressions: {
|
|
88
108
|
type: "integer",
|
|
@@ -103,71 +123,62 @@ export const SKILL_MANIFEST = {
|
|
|
103
123
|
},
|
|
104
124
|
outputSchema: {
|
|
105
125
|
type: "object",
|
|
126
|
+
description: "Structured evidence for performance analysis. Use this data to generate recommendations.",
|
|
106
127
|
properties: {
|
|
107
128
|
markdown: {
|
|
108
129
|
type: "string",
|
|
109
|
-
description: "
|
|
130
|
+
description: "Human-readable markdown report with hotspots and call paths",
|
|
110
131
|
},
|
|
111
132
|
profile_meta: {
|
|
112
133
|
type: "object",
|
|
134
|
+
description: "Metadata about the profile",
|
|
113
135
|
properties: {
|
|
114
136
|
type: { type: "string", enum: ["cpu", "heap"] },
|
|
115
137
|
duration_sec: { type: "number" },
|
|
116
138
|
samples: { type: "integer" },
|
|
117
139
|
sample_type: { type: "string" },
|
|
118
140
|
unit: { type: "string" },
|
|
141
|
+
total_value: { type: "number" },
|
|
119
142
|
},
|
|
120
143
|
},
|
|
121
144
|
hotspots: {
|
|
122
145
|
type: "array",
|
|
146
|
+
description: "Top functions by resource consumption, ranked by impact",
|
|
123
147
|
items: {
|
|
124
148
|
type: "object",
|
|
125
149
|
properties: {
|
|
126
|
-
rank: { type: "integer" },
|
|
127
|
-
function: { type: "string" },
|
|
128
|
-
self_pct: { type: "number" },
|
|
129
|
-
cum_pct: { type: "number" },
|
|
130
|
-
|
|
131
|
-
|
|
150
|
+
rank: { type: "integer", description: "Rank by impact (1 = highest)" },
|
|
151
|
+
function: { type: "string", description: "Function name" },
|
|
152
|
+
self_pct: { type: "number", description: "Percentage of total spent in this function only" },
|
|
153
|
+
cum_pct: { type: "number", description: "Percentage including callees" },
|
|
154
|
+
self_value: { type: "number", description: "Absolute value (samples or bytes)" },
|
|
155
|
+
cum_value: { type: "number" },
|
|
156
|
+
location: { type: "string", description: "Source file:line if available" },
|
|
157
|
+
call_path: { type: "array", items: { type: "string" }, description: "Call stack from root" },
|
|
158
|
+
callers: { type: "array", items: { type: "string" } },
|
|
159
|
+
callees: { type: "array", items: { type: "string" } },
|
|
132
160
|
},
|
|
133
161
|
required: ["rank", "function"],
|
|
134
162
|
},
|
|
135
163
|
},
|
|
136
|
-
recommendations: {
|
|
137
|
-
type: "array",
|
|
138
|
-
items: {
|
|
139
|
-
type: "object",
|
|
140
|
-
properties: {
|
|
141
|
-
title: { type: "string" },
|
|
142
|
-
rationale: { type: "string" },
|
|
143
|
-
steps: { type: "array", items: { type: "string" } },
|
|
144
|
-
expected_impact: { type: "string", enum: ["high", "medium", "low"] },
|
|
145
|
-
risk: { type: "string", enum: ["high", "medium", "low"] },
|
|
146
|
-
confidence: { type: "number", minimum: 0, maximum: 1 },
|
|
147
|
-
},
|
|
148
|
-
required: ["title", "rationale", "steps", "expected_impact", "risk", "confidence"],
|
|
149
|
-
},
|
|
150
|
-
},
|
|
151
|
-
next_steps: {
|
|
152
|
-
type: "array",
|
|
153
|
-
items: { type: "string" },
|
|
154
|
-
},
|
|
155
164
|
// Diff-specific fields
|
|
156
165
|
regressions: {
|
|
157
166
|
type: "array",
|
|
167
|
+
description: "Functions that got slower (for diff analysis)",
|
|
158
168
|
items: {
|
|
159
169
|
type: "object",
|
|
160
170
|
properties: {
|
|
161
171
|
rank: { type: "integer" },
|
|
162
172
|
function: { type: "string" },
|
|
163
|
-
delta_self: { type: "number" },
|
|
164
|
-
delta_self_pct: { type: "number" },
|
|
173
|
+
delta_self: { type: "number", description: "Change in self value" },
|
|
174
|
+
delta_self_pct: { type: "number", description: "Change as percentage of total" },
|
|
165
175
|
change_type: { type: "string", enum: ["regression", "improvement", "new", "removed"] },
|
|
166
176
|
},
|
|
167
177
|
},
|
|
168
178
|
},
|
|
169
179
|
improvements: {
|
|
170
180
|
type: "array",
|
|
181
|
+
description: "Functions that got faster (for diff analysis)",
|
|
171
182
|
items: {
|
|
172
183
|
type: "object",
|
|
173
184
|
},
|
|
@@ -175,7 +186,17 @@ export const SKILL_MANIFEST = {
|
|
|
175
186
|
summary: {
|
|
176
187
|
type: "array",
|
|
177
188
|
items: { type: "string" },
|
|
178
|
-
description: "Executive summary points for diff",
|
|
189
|
+
description: "Executive summary points (for diff analysis)",
|
|
190
|
+
},
|
|
191
|
+
metrics: {
|
|
192
|
+
type: "object",
|
|
193
|
+
description: "Processing metrics",
|
|
194
|
+
properties: {
|
|
195
|
+
convertMs: { type: "number" },
|
|
196
|
+
totalMs: { type: "number" },
|
|
197
|
+
profileBytes: { type: "number" },
|
|
198
|
+
markdownChars: { type: "number" },
|
|
199
|
+
},
|
|
179
200
|
},
|
|
180
201
|
},
|
|
181
202
|
required: ["markdown", "hotspots"],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/skill/manifest.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/skill/manifest.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "perf-skill",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "AI Skill for pprof profile analysis - convert .pb.gz to Markdown and generate structured performance recommendations",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -20,13 +20,18 @@
|
|
|
20
20
|
"scripts": {
|
|
21
21
|
"build": "tsc",
|
|
22
22
|
"dev": "tsc --watch",
|
|
23
|
-
"start": "node dist/server/http.js",
|
|
24
23
|
"cli": "node --import tsx src/cli/main.ts",
|
|
25
24
|
"test": "node --test --import tsx 'test/**/*.test.ts'",
|
|
26
25
|
"lint": "eslint src --ext .ts",
|
|
27
26
|
"clean": "rm -rf dist",
|
|
28
27
|
"update-prompts": "node --import tsx scripts/update-prompt-fixtures.ts",
|
|
29
|
-
"prepublishOnly": "npm run build"
|
|
28
|
+
"prepublishOnly": "npm run build",
|
|
29
|
+
"commit": "yarn git-cz"
|
|
30
|
+
},
|
|
31
|
+
"config": {
|
|
32
|
+
"commitizen": {
|
|
33
|
+
"path": "cz-conventional-changelog"
|
|
34
|
+
}
|
|
30
35
|
},
|
|
31
36
|
"keywords": [
|
|
32
37
|
"pprof",
|
|
@@ -48,12 +53,7 @@
|
|
|
48
53
|
"license": "MIT",
|
|
49
54
|
"dependencies": {
|
|
50
55
|
"@datadog/pprof": "^5.13.2",
|
|
51
|
-
"@fastify/cors": "^11.2.0",
|
|
52
|
-
"@fastify/helmet": "^13.0.2",
|
|
53
|
-
"@fastify/multipart": "^9.4.0",
|
|
54
|
-
"@fastify/rate-limit": "^10.3.0",
|
|
55
56
|
"commander": "^14.0.3",
|
|
56
|
-
"fastify": "^5.7.3",
|
|
57
57
|
"openai": "^6.17.0",
|
|
58
58
|
"pprof-format": "^2.2.1",
|
|
59
59
|
"pprof-to-md": "^0.2.0",
|
|
@@ -63,6 +63,7 @@
|
|
|
63
63
|
"@types/node": "^25.2.0",
|
|
64
64
|
"@typescript-eslint/eslint-plugin": "^8.54.0",
|
|
65
65
|
"@typescript-eslint/parser": "^8.54.0",
|
|
66
|
+
"commitizen": "^4.3.1",
|
|
66
67
|
"eslint": "^9.39.2",
|
|
67
68
|
"tsx": "^4.21.0",
|
|
68
69
|
"typescript": "^5.9.3"
|
|
@@ -70,6 +71,8 @@
|
|
|
70
71
|
"files": [
|
|
71
72
|
"dist",
|
|
72
73
|
"SKILL.md",
|
|
73
|
-
"README.md"
|
|
74
|
+
"README.md",
|
|
75
|
+
"CLAUDE.md",
|
|
76
|
+
".claude-plugin"
|
|
74
77
|
]
|
|
75
78
|
}
|
package/dist/server/http.d.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HTTP API server for perf-skill
|
|
3
|
-
*/
|
|
4
|
-
import { type FastifyInstance } from "fastify";
|
|
5
|
-
import { analyze, diff } from "../index.js";
|
|
6
|
-
export interface ServerOptions {
|
|
7
|
-
port?: number;
|
|
8
|
-
host?: string;
|
|
9
|
-
maxFileSize?: number;
|
|
10
|
-
enableCors?: boolean;
|
|
11
|
-
corsOrigin?: string | string[] | boolean;
|
|
12
|
-
enableHelmet?: boolean;
|
|
13
|
-
enableRateLimit?: boolean;
|
|
14
|
-
rateLimitMax?: number;
|
|
15
|
-
rateLimitWindowMs?: number;
|
|
16
|
-
analyzeFn?: typeof analyze;
|
|
17
|
-
diffFn?: typeof diff;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Create and configure Fastify server
|
|
21
|
-
*/
|
|
22
|
-
export declare function createServer(options?: ServerOptions): Promise<FastifyInstance>;
|
|
23
|
-
/**
|
|
24
|
-
* Start the HTTP server
|
|
25
|
-
*/
|
|
26
|
-
export declare function startServer(options?: ServerOptions): Promise<FastifyInstance>;
|
|
27
|
-
//# sourceMappingURL=http.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAKxD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAY5C,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC;IACzC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,OAAO,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,IAAI,CAAC;CACtB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,eAAe,CAAC,CAqSxF;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,eAAe,CAAC,CAiBvF"}
|
package/dist/server/http.js
DELETED
|
@@ -1,285 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HTTP API server for perf-skill
|
|
3
|
-
*/
|
|
4
|
-
import Fastify from "fastify";
|
|
5
|
-
import multipart from "@fastify/multipart";
|
|
6
|
-
import cors from "@fastify/cors";
|
|
7
|
-
import helmet from "@fastify/helmet";
|
|
8
|
-
import rateLimit from "@fastify/rate-limit";
|
|
9
|
-
import { analyze, diff } from "../index.js";
|
|
10
|
-
import { logger } from "../utils/logger.js";
|
|
11
|
-
import { checkSizeLimit, DEFAULT_LIMITS } from "../utils/limits.js";
|
|
12
|
-
import { cleanupUploadedFiles, parseOptionsField, parseBoolean, parseNumber, resolveMultipartFile, } from "./utils.js";
|
|
13
|
-
/**
|
|
14
|
-
* Create and configure Fastify server
|
|
15
|
-
*/
|
|
16
|
-
export async function createServer(options = {}) {
|
|
17
|
-
const server = Fastify({
|
|
18
|
-
logger: process.env.LOG_FORMAT === "json",
|
|
19
|
-
});
|
|
20
|
-
const analyzeFn = options.analyzeFn ?? analyze;
|
|
21
|
-
const diffFn = options.diffFn ?? diff;
|
|
22
|
-
const corsEnabled = options.enableCors ?? parseBoolean(process.env.CORS_ENABLED, true);
|
|
23
|
-
const helmetEnabled = options.enableHelmet ?? parseBoolean(process.env.HELMET_ENABLED, true);
|
|
24
|
-
const rateLimitEnabled = options.enableRateLimit ?? parseBoolean(process.env.RATE_LIMIT_ENABLED, true);
|
|
25
|
-
if (corsEnabled) {
|
|
26
|
-
const originValue = options.corsOrigin ?? process.env.CORS_ORIGIN ?? true;
|
|
27
|
-
const origin = typeof originValue === "string"
|
|
28
|
-
? originValue === "*"
|
|
29
|
-
? true
|
|
30
|
-
: originValue.split(",").map((item) => item.trim()).filter(Boolean)
|
|
31
|
-
: originValue;
|
|
32
|
-
await server.register(cors, { origin });
|
|
33
|
-
}
|
|
34
|
-
if (helmetEnabled) {
|
|
35
|
-
await server.register(helmet);
|
|
36
|
-
}
|
|
37
|
-
if (rateLimitEnabled) {
|
|
38
|
-
const max = options.rateLimitMax ?? parseNumber(process.env.RATE_LIMIT_MAX, 60);
|
|
39
|
-
const timeWindow = options.rateLimitWindowMs ?? parseNumber(process.env.RATE_LIMIT_WINDOW_MS, 60_000);
|
|
40
|
-
if (max > 0) {
|
|
41
|
-
await server.register(rateLimit, { max, timeWindow });
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
// Register multipart plugin for file uploads
|
|
45
|
-
await server.register(multipart, {
|
|
46
|
-
attachFieldsToBody: true,
|
|
47
|
-
limits: {
|
|
48
|
-
fileSize: options.maxFileSize ?? DEFAULT_LIMITS.maxProfileBytes,
|
|
49
|
-
},
|
|
50
|
-
});
|
|
51
|
-
// Health check
|
|
52
|
-
server.get("/health", async () => {
|
|
53
|
-
return { status: "ok", timestamp: new Date().toISOString() };
|
|
54
|
-
});
|
|
55
|
-
// API info
|
|
56
|
-
server.get("/v1", async () => {
|
|
57
|
-
return {
|
|
58
|
-
name: "perf-skill",
|
|
59
|
-
version: "1.0.0",
|
|
60
|
-
endpoints: {
|
|
61
|
-
analyze: "POST /v1/pprof/analyze",
|
|
62
|
-
diff: "POST /v1/pprof/diff",
|
|
63
|
-
convert: "POST /v1/pprof/convert",
|
|
64
|
-
},
|
|
65
|
-
};
|
|
66
|
-
});
|
|
67
|
-
// Analyze endpoint
|
|
68
|
-
server.post("/v1/pprof/analyze", async (request, reply) => {
|
|
69
|
-
const startTime = performance.now();
|
|
70
|
-
try {
|
|
71
|
-
// Handle multipart file upload
|
|
72
|
-
const data = await resolveMultipartFile(request, "file");
|
|
73
|
-
if (!data) {
|
|
74
|
-
return reply.status(400).send({
|
|
75
|
-
success: false,
|
|
76
|
-
error: {
|
|
77
|
-
code: "MISSING_FILE",
|
|
78
|
-
message: "Profile file is required",
|
|
79
|
-
},
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
const profileBuffer = await data.toBuffer();
|
|
83
|
-
checkSizeLimit(profileBuffer, DEFAULT_LIMITS.maxProfileBytes, "Profile");
|
|
84
|
-
let options;
|
|
85
|
-
try {
|
|
86
|
-
options = parseOptionsField(request.body?.options);
|
|
87
|
-
}
|
|
88
|
-
catch (error) {
|
|
89
|
-
return reply.status(400).send({
|
|
90
|
-
success: false,
|
|
91
|
-
error: {
|
|
92
|
-
code: "INVALID_OPTIONS",
|
|
93
|
-
message: error instanceof Error ? error.message : "Invalid options",
|
|
94
|
-
},
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
// Default to not including source in server mode for security
|
|
98
|
-
if (options.includeSource === undefined) {
|
|
99
|
-
options.includeSource = false;
|
|
100
|
-
}
|
|
101
|
-
logger.info("Analyze request received", {
|
|
102
|
-
filename: data.filename,
|
|
103
|
-
size: profileBuffer.length,
|
|
104
|
-
mode: options.mode,
|
|
105
|
-
});
|
|
106
|
-
const result = await analyzeFn(profileBuffer, options);
|
|
107
|
-
const response = {
|
|
108
|
-
success: true,
|
|
109
|
-
data: result,
|
|
110
|
-
};
|
|
111
|
-
logger.info("Analyze request completed", {
|
|
112
|
-
durationMs: Math.round(performance.now() - startTime),
|
|
113
|
-
hotspotsCount: result.hotspots.length,
|
|
114
|
-
});
|
|
115
|
-
return response;
|
|
116
|
-
}
|
|
117
|
-
catch (error) {
|
|
118
|
-
logger.error("Analyze request failed", {
|
|
119
|
-
error: error instanceof Error ? error.message : String(error),
|
|
120
|
-
});
|
|
121
|
-
return reply.status(500).send({
|
|
122
|
-
success: false,
|
|
123
|
-
error: {
|
|
124
|
-
code: "ANALYSIS_ERROR",
|
|
125
|
-
message: error instanceof Error ? error.message : "Analysis failed",
|
|
126
|
-
},
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
});
|
|
130
|
-
// Convert-only endpoint (no LLM)
|
|
131
|
-
server.post("/v1/pprof/convert", async (request, reply) => {
|
|
132
|
-
try {
|
|
133
|
-
const data = await resolveMultipartFile(request, "file");
|
|
134
|
-
if (!data) {
|
|
135
|
-
return reply.status(400).send({
|
|
136
|
-
success: false,
|
|
137
|
-
error: {
|
|
138
|
-
code: "MISSING_FILE",
|
|
139
|
-
message: "Profile file is required",
|
|
140
|
-
},
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
const profileBuffer = await data.toBuffer();
|
|
144
|
-
checkSizeLimit(profileBuffer, DEFAULT_LIMITS.maxProfileBytes, "Profile");
|
|
145
|
-
let parsedOptions;
|
|
146
|
-
try {
|
|
147
|
-
parsedOptions = parseOptionsField(request.body?.options);
|
|
148
|
-
}
|
|
149
|
-
catch (error) {
|
|
150
|
-
return reply.status(400).send({
|
|
151
|
-
success: false,
|
|
152
|
-
error: {
|
|
153
|
-
code: "INVALID_OPTIONS",
|
|
154
|
-
message: error instanceof Error ? error.message : "Invalid options",
|
|
155
|
-
},
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
const options = {
|
|
159
|
-
...parsedOptions,
|
|
160
|
-
mode: "convert-only",
|
|
161
|
-
includeSource: false,
|
|
162
|
-
};
|
|
163
|
-
const result = await analyzeFn(profileBuffer, options);
|
|
164
|
-
return {
|
|
165
|
-
success: true,
|
|
166
|
-
data: result,
|
|
167
|
-
};
|
|
168
|
-
}
|
|
169
|
-
catch (error) {
|
|
170
|
-
return reply.status(500).send({
|
|
171
|
-
success: false,
|
|
172
|
-
error: {
|
|
173
|
-
code: "CONVERT_ERROR",
|
|
174
|
-
message: error instanceof Error ? error.message : "Conversion failed",
|
|
175
|
-
},
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
});
|
|
179
|
-
// Diff endpoint
|
|
180
|
-
server.post("/v1/pprof/diff", async (request, reply) => {
|
|
181
|
-
const startTime = performance.now();
|
|
182
|
-
let files;
|
|
183
|
-
try {
|
|
184
|
-
// Expect two files: base and current
|
|
185
|
-
files = await request.saveRequestFiles();
|
|
186
|
-
if (files.length < 2) {
|
|
187
|
-
return reply.status(400).send({
|
|
188
|
-
success: false,
|
|
189
|
-
error: {
|
|
190
|
-
code: "MISSING_FILES",
|
|
191
|
-
message: "Two profile files required (base and current)",
|
|
192
|
-
},
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
|
-
const baseFile = files.find(f => f.fieldname === "base") || files[0];
|
|
196
|
-
const currentFile = files.find(f => f.fieldname === "current") || files[1];
|
|
197
|
-
const { readFile } = await import("node:fs/promises");
|
|
198
|
-
const baseBuffer = await readFile(baseFile.filepath);
|
|
199
|
-
const currentBuffer = await readFile(currentFile.filepath);
|
|
200
|
-
checkSizeLimit(baseBuffer, DEFAULT_LIMITS.maxProfileBytes, "Base profile");
|
|
201
|
-
checkSizeLimit(currentBuffer, DEFAULT_LIMITS.maxProfileBytes, "Current profile");
|
|
202
|
-
let options;
|
|
203
|
-
try {
|
|
204
|
-
options = parseOptionsField(request.body?.options);
|
|
205
|
-
}
|
|
206
|
-
catch (error) {
|
|
207
|
-
return reply.status(400).send({
|
|
208
|
-
success: false,
|
|
209
|
-
error: {
|
|
210
|
-
code: "INVALID_OPTIONS",
|
|
211
|
-
message: error instanceof Error ? error.message : "Invalid options",
|
|
212
|
-
},
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
|
-
logger.info("Diff request received", {
|
|
216
|
-
baseSize: baseBuffer.length,
|
|
217
|
-
currentSize: currentBuffer.length,
|
|
218
|
-
});
|
|
219
|
-
const result = await diffFn(baseBuffer, currentBuffer, options);
|
|
220
|
-
logger.info("Diff request completed", {
|
|
221
|
-
durationMs: Math.round(performance.now() - startTime),
|
|
222
|
-
regressions: result.regressions.length,
|
|
223
|
-
improvements: result.improvements.length,
|
|
224
|
-
});
|
|
225
|
-
return {
|
|
226
|
-
success: true,
|
|
227
|
-
data: result,
|
|
228
|
-
};
|
|
229
|
-
}
|
|
230
|
-
catch (error) {
|
|
231
|
-
logger.error("Diff request failed", {
|
|
232
|
-
error: error instanceof Error ? error.message : String(error),
|
|
233
|
-
});
|
|
234
|
-
return reply.status(500).send({
|
|
235
|
-
success: false,
|
|
236
|
-
error: {
|
|
237
|
-
code: "DIFF_ERROR",
|
|
238
|
-
message: error instanceof Error ? error.message : "Diff analysis failed",
|
|
239
|
-
},
|
|
240
|
-
});
|
|
241
|
-
}
|
|
242
|
-
finally {
|
|
243
|
-
if (files) {
|
|
244
|
-
await cleanupUploadedFiles(files);
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
});
|
|
248
|
-
// Error handler
|
|
249
|
-
server.setErrorHandler((error, request, reply) => {
|
|
250
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
251
|
-
logger.error("Server error", {
|
|
252
|
-
error: message,
|
|
253
|
-
url: request.url,
|
|
254
|
-
});
|
|
255
|
-
reply.status(500).send({
|
|
256
|
-
success: false,
|
|
257
|
-
error: {
|
|
258
|
-
code: "INTERNAL_ERROR",
|
|
259
|
-
message: "Internal server error",
|
|
260
|
-
},
|
|
261
|
-
});
|
|
262
|
-
});
|
|
263
|
-
return server;
|
|
264
|
-
}
|
|
265
|
-
/**
|
|
266
|
-
* Start the HTTP server
|
|
267
|
-
*/
|
|
268
|
-
export async function startServer(options = {}) {
|
|
269
|
-
const server = await createServer(options);
|
|
270
|
-
const port = options.port ?? 3000;
|
|
271
|
-
const host = options.host ?? "0.0.0.0";
|
|
272
|
-
try {
|
|
273
|
-
await server.listen({ port, host });
|
|
274
|
-
console.log(`perf-skill server listening on http://${host}:${port}`);
|
|
275
|
-
console.log(`API docs: http://${host}:${port}/v1`);
|
|
276
|
-
return server;
|
|
277
|
-
}
|
|
278
|
-
catch (error) {
|
|
279
|
-
logger.error("Failed to start server", {
|
|
280
|
-
error: error instanceof Error ? error.message : String(error),
|
|
281
|
-
});
|
|
282
|
-
throw error;
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
//# sourceMappingURL=http.js.map
|