@peakinfer/cli 1.0.133

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 (367) hide show
  1. package/.claude/settings.local.json +8 -0
  2. package/.env.example +6 -0
  3. package/.github/workflows/peakinfer.yml +64 -0
  4. package/CHANGELOG.md +31 -0
  5. package/LICENSE +190 -0
  6. package/README.md +335 -0
  7. package/data/inferencemax.json +274 -0
  8. package/dist/agent-analyzer.d.ts +45 -0
  9. package/dist/agent-analyzer.d.ts.map +1 -0
  10. package/dist/agent-analyzer.js +374 -0
  11. package/dist/agent-analyzer.js.map +1 -0
  12. package/dist/agent.d.ts +76 -0
  13. package/dist/agent.d.ts.map +1 -0
  14. package/dist/agent.js +965 -0
  15. package/dist/agent.js.map +1 -0
  16. package/dist/agents/correlation-analyzer.d.ts +34 -0
  17. package/dist/agents/correlation-analyzer.d.ts.map +1 -0
  18. package/dist/agents/correlation-analyzer.js +261 -0
  19. package/dist/agents/correlation-analyzer.js.map +1 -0
  20. package/dist/agents/index.d.ts +91 -0
  21. package/dist/agents/index.d.ts.map +1 -0
  22. package/dist/agents/index.js +111 -0
  23. package/dist/agents/index.js.map +1 -0
  24. package/dist/agents/runtime-analyzer.d.ts +38 -0
  25. package/dist/agents/runtime-analyzer.d.ts.map +1 -0
  26. package/dist/agents/runtime-analyzer.js +244 -0
  27. package/dist/agents/runtime-analyzer.js.map +1 -0
  28. package/dist/analysis-types.d.ts +500 -0
  29. package/dist/analysis-types.d.ts.map +1 -0
  30. package/dist/analysis-types.js +11 -0
  31. package/dist/analysis-types.js.map +1 -0
  32. package/dist/analytics.d.ts +25 -0
  33. package/dist/analytics.d.ts.map +1 -0
  34. package/dist/analytics.js +94 -0
  35. package/dist/analytics.js.map +1 -0
  36. package/dist/analyzer.d.ts +48 -0
  37. package/dist/analyzer.d.ts.map +1 -0
  38. package/dist/analyzer.js +547 -0
  39. package/dist/analyzer.js.map +1 -0
  40. package/dist/artifacts.d.ts +44 -0
  41. package/dist/artifacts.d.ts.map +1 -0
  42. package/dist/artifacts.js +165 -0
  43. package/dist/artifacts.js.map +1 -0
  44. package/dist/benchmarks/index.d.ts +88 -0
  45. package/dist/benchmarks/index.d.ts.map +1 -0
  46. package/dist/benchmarks/index.js +205 -0
  47. package/dist/benchmarks/index.js.map +1 -0
  48. package/dist/cli.d.ts +3 -0
  49. package/dist/cli.d.ts.map +1 -0
  50. package/dist/cli.js +427 -0
  51. package/dist/cli.js.map +1 -0
  52. package/dist/commands/ci.d.ts +19 -0
  53. package/dist/commands/ci.d.ts.map +1 -0
  54. package/dist/commands/ci.js +253 -0
  55. package/dist/commands/ci.js.map +1 -0
  56. package/dist/commands/config.d.ts +16 -0
  57. package/dist/commands/config.d.ts.map +1 -0
  58. package/dist/commands/config.js +249 -0
  59. package/dist/commands/config.js.map +1 -0
  60. package/dist/commands/demo.d.ts +15 -0
  61. package/dist/commands/demo.d.ts.map +1 -0
  62. package/dist/commands/demo.js +106 -0
  63. package/dist/commands/demo.js.map +1 -0
  64. package/dist/commands/export.d.ts +14 -0
  65. package/dist/commands/export.d.ts.map +1 -0
  66. package/dist/commands/export.js +209 -0
  67. package/dist/commands/export.js.map +1 -0
  68. package/dist/commands/history.d.ts +15 -0
  69. package/dist/commands/history.d.ts.map +1 -0
  70. package/dist/commands/history.js +389 -0
  71. package/dist/commands/history.js.map +1 -0
  72. package/dist/commands/template.d.ts +14 -0
  73. package/dist/commands/template.d.ts.map +1 -0
  74. package/dist/commands/template.js +341 -0
  75. package/dist/commands/template.js.map +1 -0
  76. package/dist/commands/validate-map.d.ts +12 -0
  77. package/dist/commands/validate-map.d.ts.map +1 -0
  78. package/dist/commands/validate-map.js +274 -0
  79. package/dist/commands/validate-map.js.map +1 -0
  80. package/dist/commands/whatif.d.ts +17 -0
  81. package/dist/commands/whatif.d.ts.map +1 -0
  82. package/dist/commands/whatif.js +206 -0
  83. package/dist/commands/whatif.js.map +1 -0
  84. package/dist/comparison.d.ts +38 -0
  85. package/dist/comparison.d.ts.map +1 -0
  86. package/dist/comparison.js +223 -0
  87. package/dist/comparison.js.map +1 -0
  88. package/dist/config.d.ts +42 -0
  89. package/dist/config.d.ts.map +1 -0
  90. package/dist/config.js +158 -0
  91. package/dist/config.js.map +1 -0
  92. package/dist/connectors/helicone.d.ts +9 -0
  93. package/dist/connectors/helicone.d.ts.map +1 -0
  94. package/dist/connectors/helicone.js +106 -0
  95. package/dist/connectors/helicone.js.map +1 -0
  96. package/dist/connectors/index.d.ts +37 -0
  97. package/dist/connectors/index.d.ts.map +1 -0
  98. package/dist/connectors/index.js +65 -0
  99. package/dist/connectors/index.js.map +1 -0
  100. package/dist/connectors/langsmith.d.ts +9 -0
  101. package/dist/connectors/langsmith.d.ts.map +1 -0
  102. package/dist/connectors/langsmith.js +122 -0
  103. package/dist/connectors/langsmith.js.map +1 -0
  104. package/dist/connectors/types.d.ts +83 -0
  105. package/dist/connectors/types.d.ts.map +1 -0
  106. package/dist/connectors/types.js +98 -0
  107. package/dist/connectors/types.js.map +1 -0
  108. package/dist/cost-estimator.d.ts +46 -0
  109. package/dist/cost-estimator.d.ts.map +1 -0
  110. package/dist/cost-estimator.js +104 -0
  111. package/dist/cost-estimator.js.map +1 -0
  112. package/dist/costs.d.ts +57 -0
  113. package/dist/costs.d.ts.map +1 -0
  114. package/dist/costs.js +251 -0
  115. package/dist/costs.js.map +1 -0
  116. package/dist/counterfactuals.d.ts +29 -0
  117. package/dist/counterfactuals.d.ts.map +1 -0
  118. package/dist/counterfactuals.js +448 -0
  119. package/dist/counterfactuals.js.map +1 -0
  120. package/dist/enhancement-prompts.d.ts +41 -0
  121. package/dist/enhancement-prompts.d.ts.map +1 -0
  122. package/dist/enhancement-prompts.js +88 -0
  123. package/dist/enhancement-prompts.js.map +1 -0
  124. package/dist/envelopes.d.ts +20 -0
  125. package/dist/envelopes.d.ts.map +1 -0
  126. package/dist/envelopes.js +790 -0
  127. package/dist/envelopes.js.map +1 -0
  128. package/dist/format-normalizer.d.ts +71 -0
  129. package/dist/format-normalizer.d.ts.map +1 -0
  130. package/dist/format-normalizer.js +1331 -0
  131. package/dist/format-normalizer.js.map +1 -0
  132. package/dist/history.d.ts +79 -0
  133. package/dist/history.d.ts.map +1 -0
  134. package/dist/history.js +313 -0
  135. package/dist/history.js.map +1 -0
  136. package/dist/html.d.ts +11 -0
  137. package/dist/html.d.ts.map +1 -0
  138. package/dist/html.js +463 -0
  139. package/dist/html.js.map +1 -0
  140. package/dist/impact.d.ts +42 -0
  141. package/dist/impact.d.ts.map +1 -0
  142. package/dist/impact.js +443 -0
  143. package/dist/impact.js.map +1 -0
  144. package/dist/index.d.ts +26 -0
  145. package/dist/index.d.ts.map +1 -0
  146. package/dist/index.js +34 -0
  147. package/dist/index.js.map +1 -0
  148. package/dist/insights.d.ts +5 -0
  149. package/dist/insights.d.ts.map +1 -0
  150. package/dist/insights.js +271 -0
  151. package/dist/insights.js.map +1 -0
  152. package/dist/joiner.d.ts +9 -0
  153. package/dist/joiner.d.ts.map +1 -0
  154. package/dist/joiner.js +247 -0
  155. package/dist/joiner.js.map +1 -0
  156. package/dist/orchestrator.d.ts +34 -0
  157. package/dist/orchestrator.d.ts.map +1 -0
  158. package/dist/orchestrator.js +827 -0
  159. package/dist/orchestrator.js.map +1 -0
  160. package/dist/pdf.d.ts +26 -0
  161. package/dist/pdf.d.ts.map +1 -0
  162. package/dist/pdf.js +84 -0
  163. package/dist/pdf.js.map +1 -0
  164. package/dist/prediction.d.ts +33 -0
  165. package/dist/prediction.d.ts.map +1 -0
  166. package/dist/prediction.js +316 -0
  167. package/dist/prediction.js.map +1 -0
  168. package/dist/prompts/loader.d.ts +38 -0
  169. package/dist/prompts/loader.d.ts.map +1 -0
  170. package/dist/prompts/loader.js +60 -0
  171. package/dist/prompts/loader.js.map +1 -0
  172. package/dist/renderer.d.ts +64 -0
  173. package/dist/renderer.d.ts.map +1 -0
  174. package/dist/renderer.js +923 -0
  175. package/dist/renderer.js.map +1 -0
  176. package/dist/runid.d.ts +57 -0
  177. package/dist/runid.d.ts.map +1 -0
  178. package/dist/runid.js +199 -0
  179. package/dist/runid.js.map +1 -0
  180. package/dist/runtime.d.ts +29 -0
  181. package/dist/runtime.d.ts.map +1 -0
  182. package/dist/runtime.js +366 -0
  183. package/dist/runtime.js.map +1 -0
  184. package/dist/scanner.d.ts +11 -0
  185. package/dist/scanner.d.ts.map +1 -0
  186. package/dist/scanner.js +426 -0
  187. package/dist/scanner.js.map +1 -0
  188. package/dist/templates.d.ts +120 -0
  189. package/dist/templates.d.ts.map +1 -0
  190. package/dist/templates.js +429 -0
  191. package/dist/templates.js.map +1 -0
  192. package/dist/tools/index.d.ts +153 -0
  193. package/dist/tools/index.d.ts.map +1 -0
  194. package/dist/tools/index.js +177 -0
  195. package/dist/tools/index.js.map +1 -0
  196. package/dist/types.d.ts +3647 -0
  197. package/dist/types.d.ts.map +1 -0
  198. package/dist/types.js +703 -0
  199. package/dist/types.js.map +1 -0
  200. package/dist/version.d.ts +7 -0
  201. package/dist/version.d.ts.map +1 -0
  202. package/dist/version.js +23 -0
  203. package/dist/version.js.map +1 -0
  204. package/docs/demo-guide.md +423 -0
  205. package/docs/events-format.md +295 -0
  206. package/docs/inferencemap-spec.md +344 -0
  207. package/docs/migration-v2.md +293 -0
  208. package/fixtures/demo/precomputed.json +142 -0
  209. package/fixtures/demo-project/README.md +52 -0
  210. package/fixtures/demo-project/ai-service.ts +65 -0
  211. package/fixtures/demo-project/sample-events.jsonl +15 -0
  212. package/fixtures/demo-project/src/ai-service.ts +128 -0
  213. package/fixtures/demo-project/src/llm-client.ts +155 -0
  214. package/package.json +65 -0
  215. package/prompts/agent-analyzer.yaml +47 -0
  216. package/prompts/ci-gate.yaml +98 -0
  217. package/prompts/correlation-analyzer.yaml +178 -0
  218. package/prompts/format-normalizer.yaml +46 -0
  219. package/prompts/peak-performance.yaml +180 -0
  220. package/prompts/pr-comment.yaml +111 -0
  221. package/prompts/runtime-analyzer.yaml +189 -0
  222. package/prompts/unified-analyzer.yaml +241 -0
  223. package/schemas/inference-map.v0.1.json +215 -0
  224. package/scripts/benchmark.ts +394 -0
  225. package/scripts/demo-v1.5.sh +158 -0
  226. package/scripts/sync-from-site.sh +197 -0
  227. package/scripts/validate-sync.sh +178 -0
  228. package/src/agent-analyzer.ts +481 -0
  229. package/src/agent.ts +1232 -0
  230. package/src/agents/correlation-analyzer.ts +353 -0
  231. package/src/agents/index.ts +235 -0
  232. package/src/agents/runtime-analyzer.ts +343 -0
  233. package/src/analysis-types.ts +558 -0
  234. package/src/analytics.ts +100 -0
  235. package/src/analyzer.ts +692 -0
  236. package/src/artifacts.ts +218 -0
  237. package/src/benchmarks/index.ts +309 -0
  238. package/src/cli.ts +503 -0
  239. package/src/commands/ci.ts +336 -0
  240. package/src/commands/config.ts +288 -0
  241. package/src/commands/demo.ts +175 -0
  242. package/src/commands/export.ts +297 -0
  243. package/src/commands/history.ts +425 -0
  244. package/src/commands/template.ts +385 -0
  245. package/src/commands/validate-map.ts +324 -0
  246. package/src/commands/whatif.ts +272 -0
  247. package/src/comparison.ts +283 -0
  248. package/src/config.ts +188 -0
  249. package/src/connectors/helicone.ts +164 -0
  250. package/src/connectors/index.ts +93 -0
  251. package/src/connectors/langsmith.ts +179 -0
  252. package/src/connectors/types.ts +180 -0
  253. package/src/cost-estimator.ts +146 -0
  254. package/src/costs.ts +347 -0
  255. package/src/counterfactuals.ts +516 -0
  256. package/src/enhancement-prompts.ts +118 -0
  257. package/src/envelopes.ts +814 -0
  258. package/src/format-normalizer.ts +1486 -0
  259. package/src/history.ts +400 -0
  260. package/src/html.ts +512 -0
  261. package/src/impact.ts +522 -0
  262. package/src/index.ts +83 -0
  263. package/src/insights.ts +341 -0
  264. package/src/joiner.ts +289 -0
  265. package/src/orchestrator.ts +1015 -0
  266. package/src/pdf.ts +110 -0
  267. package/src/prediction.ts +392 -0
  268. package/src/prompts/loader.ts +88 -0
  269. package/src/renderer.ts +1045 -0
  270. package/src/runid.ts +261 -0
  271. package/src/runtime.ts +450 -0
  272. package/src/scanner.ts +508 -0
  273. package/src/templates.ts +561 -0
  274. package/src/tools/index.ts +214 -0
  275. package/src/types.ts +873 -0
  276. package/src/version.ts +24 -0
  277. package/templates/context-accumulation.yaml +23 -0
  278. package/templates/cost-concentration.yaml +20 -0
  279. package/templates/dead-code.yaml +20 -0
  280. package/templates/latency-explainer.yaml +23 -0
  281. package/templates/optimizations/ab-testing-framework.yaml +74 -0
  282. package/templates/optimizations/api-gateway-optimization.yaml +81 -0
  283. package/templates/optimizations/api-model-routing-strategy.yaml +126 -0
  284. package/templates/optimizations/auto-scaling-optimization.yaml +85 -0
  285. package/templates/optimizations/batch-utilization-diagnostic.yaml +142 -0
  286. package/templates/optimizations/comprehensive-apm.yaml +76 -0
  287. package/templates/optimizations/context-window-optimization.yaml +91 -0
  288. package/templates/optimizations/cost-sensitive-batch-processing.yaml +77 -0
  289. package/templates/optimizations/distributed-training-optimization.yaml +77 -0
  290. package/templates/optimizations/document-analysis-edge.yaml +77 -0
  291. package/templates/optimizations/document-pipeline-optimization.yaml +78 -0
  292. package/templates/optimizations/domain-specific-distillation.yaml +78 -0
  293. package/templates/optimizations/error-handling-optimization.yaml +76 -0
  294. package/templates/optimizations/gptq-4bit-quantization.yaml +96 -0
  295. package/templates/optimizations/long-context-memory-management.yaml +78 -0
  296. package/templates/optimizations/max-tokens-optimization.yaml +76 -0
  297. package/templates/optimizations/memory-bandwidth-optimization.yaml +73 -0
  298. package/templates/optimizations/multi-framework-resilience.yaml +75 -0
  299. package/templates/optimizations/multi-tenant-optimization.yaml +75 -0
  300. package/templates/optimizations/prompt-caching-optimization.yaml +143 -0
  301. package/templates/optimizations/pytorch-to-onnx-migration.yaml +109 -0
  302. package/templates/optimizations/quality-monitoring.yaml +74 -0
  303. package/templates/optimizations/realtime-budget-controls.yaml +74 -0
  304. package/templates/optimizations/realtime-latency-optimization.yaml +74 -0
  305. package/templates/optimizations/sglang-concurrency-optimization.yaml +78 -0
  306. package/templates/optimizations/smart-model-routing.yaml +96 -0
  307. package/templates/optimizations/streaming-batch-selection.yaml +167 -0
  308. package/templates/optimizations/system-prompt-optimization.yaml +75 -0
  309. package/templates/optimizations/tensorrt-llm-performance.yaml +77 -0
  310. package/templates/optimizations/vllm-high-throughput-optimization.yaml +93 -0
  311. package/templates/optimizations/vllm-migration-memory-bound.yaml +78 -0
  312. package/templates/overpowered-extraction.yaml +32 -0
  313. package/templates/overpowered-model.yaml +31 -0
  314. package/templates/prompt-bloat.yaml +24 -0
  315. package/templates/retry-explosion.yaml +28 -0
  316. package/templates/schema/insight.schema.json +113 -0
  317. package/templates/schema/optimization.schema.json +180 -0
  318. package/templates/streaming-drift.yaml +30 -0
  319. package/templates/throughput-gap.yaml +21 -0
  320. package/templates/token-underutilization.yaml +28 -0
  321. package/templates/untested-fallback.yaml +21 -0
  322. package/tests/accuracy/drift-detection.test.ts +184 -0
  323. package/tests/accuracy/false-positives.test.ts +166 -0
  324. package/tests/accuracy/templates.test.ts +205 -0
  325. package/tests/action/commands.test.ts +125 -0
  326. package/tests/action/comments.test.ts +347 -0
  327. package/tests/cli.test.ts +203 -0
  328. package/tests/comparison.test.ts +309 -0
  329. package/tests/correlation-analyzer.test.ts +534 -0
  330. package/tests/counterfactuals.test.ts +347 -0
  331. package/tests/fixtures/events/missing-id.jsonl +1 -0
  332. package/tests/fixtures/events/missing-input.jsonl +1 -0
  333. package/tests/fixtures/events/missing-latency.jsonl +1 -0
  334. package/tests/fixtures/events/missing-model.jsonl +1 -0
  335. package/tests/fixtures/events/missing-output.jsonl +1 -0
  336. package/tests/fixtures/events/missing-provider.jsonl +1 -0
  337. package/tests/fixtures/events/missing-ts.jsonl +1 -0
  338. package/tests/fixtures/events/valid.csv +3 -0
  339. package/tests/fixtures/events/valid.json +1 -0
  340. package/tests/fixtures/events/valid.jsonl +2 -0
  341. package/tests/fixtures/events/with-callsite.jsonl +1 -0
  342. package/tests/fixtures/events/with-intent.jsonl +1 -0
  343. package/tests/fixtures/events/wrong-type.jsonl +1 -0
  344. package/tests/fixtures/repos/empty/.gitkeep +0 -0
  345. package/tests/fixtures/repos/hybrid-router/router.py +35 -0
  346. package/tests/fixtures/repos/saas-anthropic/agent.ts +27 -0
  347. package/tests/fixtures/repos/saas-openai/assistant.js +33 -0
  348. package/tests/fixtures/repos/saas-openai/client.py +26 -0
  349. package/tests/fixtures/repos/self-hosted-vllm/inference.py +22 -0
  350. package/tests/github-action.test.ts +292 -0
  351. package/tests/insights.test.ts +878 -0
  352. package/tests/joiner.test.ts +168 -0
  353. package/tests/performance/action-latency.test.ts +132 -0
  354. package/tests/performance/benchmark.test.ts +189 -0
  355. package/tests/performance/cli-latency.test.ts +102 -0
  356. package/tests/pr-comment.test.ts +313 -0
  357. package/tests/prediction.test.ts +296 -0
  358. package/tests/runtime-analyzer.test.ts +375 -0
  359. package/tests/runtime.test.ts +205 -0
  360. package/tests/scanner.test.ts +122 -0
  361. package/tests/template-conformance.test.ts +526 -0
  362. package/tests/unit/cost-calculator.test.ts +303 -0
  363. package/tests/unit/credits.test.ts +180 -0
  364. package/tests/unit/inference-map.test.ts +276 -0
  365. package/tests/unit/schema.test.ts +300 -0
  366. package/tsconfig.json +20 -0
  367. package/vitest.config.ts +14 -0
package/dist/cli.js ADDED
@@ -0,0 +1,427 @@
1
+ #!/usr/bin/env node
2
+ import 'dotenv/config';
3
+ import { Command } from 'commander';
4
+ import { existsSync, writeFileSync } from 'fs';
5
+ import { exec } from 'child_process';
6
+ import * as readline from 'readline';
7
+ import { Agent } from './agent.js';
8
+ import { createRenderer, renderCostEstimate, renderMaxCostExceeded } from './renderer.js';
9
+ import { estimateAnalysisCost, exceedsMaxCost } from './cost-estimator.js';
10
+ import { VERSION } from './version.js';
11
+ // v1.6 Command imports
12
+ import { registerTemplateCommands } from './commands/template.js';
13
+ import { registerConfigCommands } from './commands/config.js';
14
+ import { registerHistoryCommands } from './commands/history.js';
15
+ import { registerCICommand } from './commands/ci.js';
16
+ import { registerExportCommand } from './commands/export.js';
17
+ import { registerWhatIfCommand } from './commands/whatif.js';
18
+ // v2.0 Demo command (works offline, no API key needed)
19
+ import { registerDemoCommand } from './commands/demo.js';
20
+ // v1.9.3 Validate-map command (InferenceMap schema validation)
21
+ import { registerValidateMapCommand } from './commands/validate-map.js';
22
+ // v1.8 Analytics (respects DO_NOT_TRACK)
23
+ import { initAnalytics, track, flush } from './analytics.js';
24
+ // Initialize analytics at startup
25
+ initAnalytics();
26
+ // =============================================================================
27
+ // CONSTANTS
28
+ // =============================================================================
29
+ const DESCRIPTION = 'llm inference performance optimization';
30
+ // =============================================================================
31
+ // MAIN
32
+ // =============================================================================
33
+ const program = new Command()
34
+ .name('peakinfer')
35
+ .description(DESCRIPTION)
36
+ .version(VERSION);
37
+ // Analyze command: peakinfer analyze <path>
38
+ program
39
+ .command('analyze')
40
+ .description('analyze codebase or runtime events')
41
+ .argument('[path]', 'path to repository or events file', '.')
42
+ .option('--events <file>', 'add runtime telemetry to static analysis')
43
+ .option('--events-url <url>', 'URL to fetch runtime events')
44
+ .option('--html', 'generate html report')
45
+ .option('--pdf', 'generate pdf report')
46
+ .option('--open', 'open report in browser/viewer')
47
+ .option('--output <format>', 'output format: text (default), json, or inference-map')
48
+ .option('--out <file>', 'write output to file')
49
+ .option('--cached', 'view previous analysis (offline, no API key needed)')
50
+ .option('--verbose', 'show detailed task progress')
51
+ // Format detection options (PRD §6.4)
52
+ .option('--format <type>', 'specify runtime format: jsonl, json, csv, otel, jaeger, zipkin, langsmith, litellm')
53
+ .option('--map <mappings...>', 'field mappings: --map latency_ms=duration model=model_name')
54
+ .option('--events-map <mappings...>', 'alias for --map (field mappings for non-standard event formats)')
55
+ .option('--lenient', 'accept low-confidence field mappings')
56
+ .option('--strict', 'fail on missing required fields or unknown formats')
57
+ .option('--redact', 'redact code snippets from artifacts')
58
+ // Fix suggestions (v1.8)
59
+ .option('--fixes', 'show code fix suggestions for issues')
60
+ // Runtime connectors (v1.9.5)
61
+ .option('--runtime <source>', 'runtime data source: helicone, langsmith')
62
+ .option('--runtime-key <key>', 'API key for runtime source (or use env var)')
63
+ .option('--runtime-days <days>', 'days of runtime data to fetch', '7')
64
+ // Benchmark comparison (v1.9.5)
65
+ .option('--benchmark', 'compare to InferenceMAX benchmarks')
66
+ // Cost estimation options (v1.9.3)
67
+ .option('--estimate', 'show cost estimate before analysis')
68
+ .option('--yes', 'auto-proceed without confirmation (use with --estimate)')
69
+ .option('--max-cost <dollars>', 'skip analysis if estimated cost exceeds threshold')
70
+ // History options (v1.5)
71
+ .option('--no-history', 'skip saving run to history (disables comparison/prediction)')
72
+ .option('--compare [runId]', 'compare with previous run (default: latest)')
73
+ .option('--predict', 'generate deploy-time latency predictions')
74
+ .option('--target-p95 <ms>', 'target p95 latency for budget calculation (use with --predict)')
75
+ .action(async (path, options) => {
76
+ try {
77
+ // Validate path exists
78
+ if (!existsSync(path)) {
79
+ console.error(`Error: Path not found: ${path}`);
80
+ process.exit(1);
81
+ }
82
+ // Validate events file if provided
83
+ if (options.events && !existsSync(options.events)) {
84
+ console.error(`Error: Events file not found: ${options.events}`);
85
+ process.exit(1);
86
+ }
87
+ // Cost estimation (v1.9.3) - PRD Section 2.3
88
+ // Handle --estimate and --max-cost before running analysis
89
+ const maxCost = options.maxCost ? parseFloat(options.maxCost) : undefined;
90
+ if (options.estimate || maxCost !== undefined) {
91
+ try {
92
+ const estimate = await estimateAnalysisCost(path);
93
+ // Check --max-cost threshold first
94
+ if (maxCost !== undefined && exceedsMaxCost(estimate, maxCost)) {
95
+ renderMaxCostExceeded(estimate, maxCost);
96
+ process.exit(0); // Exit gracefully, not an error
97
+ }
98
+ // Show estimate if --estimate flag is used
99
+ if (options.estimate) {
100
+ renderCostEstimate(estimate);
101
+ // If --yes flag, auto-proceed
102
+ if (!options.yes) {
103
+ // Prompt user for confirmation
104
+ const proceed = await promptUserConfirmation('Proceed? [y/N] ');
105
+ if (!proceed) {
106
+ console.log('Analysis cancelled.');
107
+ process.exit(0);
108
+ }
109
+ }
110
+ }
111
+ }
112
+ catch (error) {
113
+ // If estimation fails, warn but continue (don't block analysis)
114
+ if (options.verbose) {
115
+ console.warn(`Warning: Cost estimation failed: ${error instanceof Error ? error.message : 'unknown error'}`);
116
+ }
117
+ }
118
+ }
119
+ const renderer = createRenderer({ verbose: options.verbose, showFixes: options.fixes });
120
+ renderer.renderHeader();
121
+ // Track analysis start (v1.8)
122
+ track('analysis_started', {
123
+ has_events: !!options.events,
124
+ has_runtime: !!options.runtime,
125
+ runtime_source: options.runtime,
126
+ has_benchmark: !!options.benchmark,
127
+ html: options.html,
128
+ pdf: options.pdf,
129
+ predict: options.predict,
130
+ compare: options.compare !== undefined,
131
+ });
132
+ const agent = new Agent({
133
+ onResumed: (runId) => renderer.renderResumed(runId),
134
+ onPlanReady: (plan) => renderer.renderPlan(plan),
135
+ onTaskStart: (task) => renderer.renderTaskStart(task),
136
+ onTaskComplete: (task, result) => renderer.renderTaskComplete(task, result),
137
+ onProgress: (data) => renderer.renderProgress(data),
138
+ onPartial: (warnings) => renderer.renderPartial(warnings),
139
+ onComplete: (results) => {
140
+ // Handle --output inference-map: output only InferenceMap JSON
141
+ if (options.output === 'inference-map') {
142
+ if (!results.inferenceMap) {
143
+ console.error('No InferenceMap data available');
144
+ process.exit(1);
145
+ }
146
+ const output = JSON.stringify(results.inferenceMap, null, 2);
147
+ if (options.out) {
148
+ writeFileSync(options.out, output);
149
+ console.error(`InferenceMap written to ${options.out}`);
150
+ }
151
+ else {
152
+ console.log(output);
153
+ }
154
+ }
155
+ else if (options.output === 'json') {
156
+ // Handle --output json: output full results as JSON
157
+ const output = JSON.stringify({
158
+ inferenceMap: results.inferenceMap,
159
+ insights: results.insights,
160
+ runtime: results.runtimeSummary,
161
+ joined: results.joined,
162
+ }, null, 2);
163
+ if (options.out) {
164
+ writeFileSync(options.out, output);
165
+ console.error(`Results written to ${options.out}`);
166
+ }
167
+ else {
168
+ console.log(output);
169
+ }
170
+ }
171
+ else {
172
+ // Default: render text output
173
+ renderer.renderResults(results);
174
+ }
175
+ // Benchmark comparison (v1.9.5)
176
+ // Note: Requires runtime events with latency data to compare against benchmarks
177
+ if (options.benchmark && results.inferenceMap?.callsites) {
178
+ import('./benchmarks/index.js').then(({ compareToBenchmark, formatBenchmarkComparison }) => {
179
+ console.log('\n' + '─'.repeat(60));
180
+ console.log('\nBENCHMARK COMPARISON (InferenceMAX)');
181
+ console.log('');
182
+ let hasComparisons = false;
183
+ for (const point of results.inferenceMap.callsites) {
184
+ // Static analysis provides model info; latency requires runtime events
185
+ if (point.model) {
186
+ const comparison = compareToBenchmark(point.id, point.model, {} // Latency data comes from runtime events
187
+ );
188
+ if (comparison) {
189
+ hasComparisons = true;
190
+ console.log(`[${point.file}:${point.line}]`);
191
+ console.log(formatBenchmarkComparison(comparison));
192
+ console.log('');
193
+ }
194
+ }
195
+ }
196
+ if (!hasComparisons) {
197
+ console.log('No benchmark data available for the detected models.');
198
+ console.log('Tip: Benchmarks are available for GPT-4o, Claude 3.5, Gemini, Llama, Mistral, etc.');
199
+ }
200
+ }).catch(() => {
201
+ console.error('Warning: Could not load benchmark data');
202
+ });
203
+ }
204
+ // Track analysis completion (v1.8)
205
+ track('analysis_completed', {
206
+ inference_points: results.inferenceMap?.summary?.totalCallsites || 0,
207
+ insights_count: results.insights?.length || 0,
208
+ has_runtime: !!results.events,
209
+ providers: results.inferenceMap?.summary?.providers || [],
210
+ });
211
+ // Open report if requested (prefer PDF if generated, else HTML)
212
+ if (options.open) {
213
+ if (results.pdfPath) {
214
+ openInBrowser(results.pdfPath);
215
+ }
216
+ else if (results.htmlPath) {
217
+ openInBrowser(results.htmlPath);
218
+ }
219
+ }
220
+ },
221
+ onError: (error) => renderer.renderError(error),
222
+ });
223
+ // Parse field mappings from --map or --events-map option
224
+ // (--events-map is an alias for --map, consistent with GitHub Action input naming)
225
+ const fieldHints = {};
226
+ // Merge if both are provided (--map takes precedence for conflicts)
227
+ if (options.eventsMap) {
228
+ for (const mapping of options.eventsMap) {
229
+ const [target, source] = mapping.split('=');
230
+ if (target && source) {
231
+ fieldHints[target.trim()] = source.trim();
232
+ }
233
+ }
234
+ }
235
+ if (options.map) {
236
+ for (const mapping of options.map) {
237
+ const [target, source] = mapping.split('=');
238
+ if (target && source) {
239
+ fieldHints[target.trim()] = source.trim();
240
+ }
241
+ }
242
+ }
243
+ // Runtime connector integration (v1.9.5)
244
+ // If --runtime is provided, fetch events from the API
245
+ let runtimeEventsFile = options.events;
246
+ let runtimeResult;
247
+ if (options.runtime) {
248
+ const { fetchRuntimeData, getApiKeyFromEnv, isValidSource } = await import('./connectors/index.js');
249
+ if (!isValidSource(options.runtime)) {
250
+ console.error(`Error: Unknown runtime source: ${options.runtime}. Supported: helicone, langsmith`);
251
+ process.exit(1);
252
+ }
253
+ const apiKey = options.runtimeKey || getApiKeyFromEnv(options.runtime);
254
+ if (!apiKey) {
255
+ const envVarName = options.runtime === 'helicone' ? 'HELICONE_API_KEY' : 'LANGSMITH_API_KEY';
256
+ console.error(`Error: API key required for --runtime ${options.runtime}`);
257
+ console.error(`Provide via --runtime-key or set ${envVarName} environment variable`);
258
+ process.exit(1);
259
+ }
260
+ try {
261
+ const days = parseInt(options.runtimeDays || '7', 10);
262
+ const startDate = new Date();
263
+ startDate.setDate(startDate.getDate() - days);
264
+ if (options.verbose) {
265
+ console.log(`Fetching runtime data from ${options.runtime} (last ${days} days)...`);
266
+ }
267
+ runtimeResult = await fetchRuntimeData({
268
+ source: options.runtime,
269
+ apiKey,
270
+ startDate: startDate.toISOString(),
271
+ limit: 1000,
272
+ });
273
+ if (options.verbose) {
274
+ console.log(`Fetched ${runtimeResult.events.length} events from ${options.runtime}`);
275
+ }
276
+ // Write events to a temp file for the agent
277
+ const { tmpdir } = await import('os');
278
+ const { join } = await import('path');
279
+ const tempFile = join(tmpdir(), `peakinfer-runtime-${Date.now()}.jsonl`);
280
+ const eventsJsonl = runtimeResult.events.map(e => JSON.stringify(e)).join('\n');
281
+ writeFileSync(tempFile, eventsJsonl);
282
+ runtimeEventsFile = tempFile;
283
+ }
284
+ catch (error) {
285
+ console.error(`Error fetching from ${options.runtime}: ${error instanceof Error ? error.message : 'Unknown error'}`);
286
+ process.exit(1);
287
+ }
288
+ }
289
+ await agent.run({
290
+ path,
291
+ events: runtimeEventsFile,
292
+ eventsUrl: options.eventsUrl, // --events-url
293
+ html: options.html || options.pdf || options.open, // Generate HTML if PDF or open requested
294
+ pdf: options.pdf,
295
+ open: options.open,
296
+ out: options.out, // --out
297
+ offline: false,
298
+ noCache: !options.cached, // --cached means use cache
299
+ verbose: options.verbose,
300
+ // Format detection options
301
+ formatHint: options.format,
302
+ fieldHints: Object.keys(fieldHints).length > 0 ? fieldHints : undefined,
303
+ lenient: options.lenient,
304
+ strict: options.strict,
305
+ redact: options.redact,
306
+ // History options (v1.5)
307
+ noHistory: options.history === false, // --no-history sets history to false
308
+ compare: options.compare !== undefined, // --compare flag was used
309
+ compareRunId: typeof options.compare === 'string' ? options.compare : undefined, // specific run ID
310
+ predict: options.predict, // --predict flag
311
+ targetP95: options.targetP95 ? parseInt(options.targetP95, 10) : undefined, // --target-p95 <ms>
312
+ });
313
+ // Flush analytics before exit (v1.8)
314
+ await flush();
315
+ }
316
+ catch (error) {
317
+ // Track error and flush analytics (v1.8)
318
+ track('analysis_error', {
319
+ error_type: error instanceof Error ? error.constructor.name : 'unknown',
320
+ });
321
+ await flush();
322
+ if (error instanceof Error) {
323
+ console.error(`Error: ${error.message}`);
324
+ if (options.verbose && error.stack) {
325
+ console.error(error.stack);
326
+ }
327
+ }
328
+ else {
329
+ console.error('An unexpected error occurred');
330
+ }
331
+ process.exit(1);
332
+ }
333
+ });
334
+ // =============================================================================
335
+ // REGISTER v1.6 COMMANDS
336
+ // =============================================================================
337
+ registerTemplateCommands(program);
338
+ registerConfigCommands(program);
339
+ registerHistoryCommands(program);
340
+ registerCICommand(program);
341
+ registerExportCommand(program);
342
+ registerWhatIfCommand(program);
343
+ // =============================================================================
344
+ // REGISTER v2.0 COMMANDS
345
+ // =============================================================================
346
+ registerDemoCommand(program);
347
+ // =============================================================================
348
+ // REGISTER v1.9.3 COMMANDS
349
+ // =============================================================================
350
+ registerValidateMapCommand(program);
351
+ // Custom help text (PRD-aligned, Julie Zhou style)
352
+ program.addHelpText('after', `
353
+ quick start:
354
+ peakinfer demo # see it in action (no API key needed)
355
+ peakinfer analyze . # analyze your codebase
356
+
357
+ analyze modes:
358
+ peakinfer analyze . # static: scan codebase for LLM calls
359
+ peakinfer analyze events.jsonl # runtime: analyze inference telemetry
360
+ peakinfer analyze . --events prod.jsonl # combined: static + runtime
361
+ peakinfer analyze . --events-url https://api.example.com/events # fetch events from URL
362
+ peakinfer analyze . --out results.json # write output to file
363
+ peakinfer analyze . --output inference-map # output only InferenceMap v0.1 JSON
364
+
365
+ runtime connectors (v1.9.5):
366
+ peakinfer analyze . --runtime helicone # fetch from Helicone
367
+ peakinfer analyze . --runtime langsmith # fetch from LangSmith
368
+ peakinfer analyze . --runtime helicone --runtime-days 30 # last 30 days
369
+
370
+ benchmarks (v1.9.5):
371
+ peakinfer analyze . --benchmark # compare to InferenceMAX benchmarks
372
+
373
+ cost estimation:
374
+ peakinfer analyze . --estimate # show cost estimate before analysis
375
+ peakinfer analyze . --estimate --yes # estimate + auto-proceed (for CI)
376
+ peakinfer analyze . --max-cost 10 # skip if estimated cost > $10
377
+
378
+ more commands:
379
+ peakinfer template list # browse optimization templates
380
+ peakinfer config show # view configuration
381
+ peakinfer history # view analysis history
382
+ peakinfer history compare <id1> [id2] # compare two analysis runs
383
+ peakinfer export # export results (json, prometheus)
384
+ peakinfer whatif --model gpt-4o-mini # counterfactual analysis
385
+ peakinfer ci ./src --baseline base.json # CI/CD integration
386
+ peakinfer validate-map ./map.json # validate InferenceMap schema
387
+ `);
388
+ // Parse and run
389
+ program.parse();
390
+ // =============================================================================
391
+ // HELPERS
392
+ // =============================================================================
393
+ /**
394
+ * Prompt user for Y/N confirmation.
395
+ * Returns true if user enters 'y' or 'Y', false otherwise.
396
+ */
397
+ function promptUserConfirmation(prompt) {
398
+ return new Promise((resolve) => {
399
+ const rl = readline.createInterface({
400
+ input: process.stdin,
401
+ output: process.stdout,
402
+ });
403
+ rl.question(prompt, (answer) => {
404
+ rl.close();
405
+ resolve(answer.toLowerCase() === 'y');
406
+ });
407
+ });
408
+ }
409
+ function openInBrowser(filePath) {
410
+ const platform = process.platform;
411
+ let command;
412
+ if (platform === 'darwin') {
413
+ command = `open "${filePath}"`;
414
+ }
415
+ else if (platform === 'win32') {
416
+ command = `start "" "${filePath}"`;
417
+ }
418
+ else {
419
+ command = `xdg-open "${filePath}"`;
420
+ }
421
+ exec(command, (error) => {
422
+ if (error) {
423
+ console.error(`Could not open browser: ${error.message}`);
424
+ }
425
+ });
426
+ }
427
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * CI Command (v1.6)
3
+ *
4
+ * CLI command for CI/CD integration:
5
+ * - Runs analysis with baseline comparison
6
+ * - Returns exit codes for CI gates
7
+ * - Outputs machine-readable JSON
8
+ *
9
+ * Exit codes:
10
+ * - 0: Pass (no regressions)
11
+ * - 1: Warning (minor regressions)
12
+ * - 2: Fail (major regressions)
13
+ */
14
+ import { Command } from 'commander';
15
+ /**
16
+ * Register CI command
17
+ */
18
+ export declare function registerCICommand(program: Command): void;
19
+ //# sourceMappingURL=ci.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ci.d.ts","sourceRoot":"","sources":["../../src/commands/ci.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyOpC;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqFxD"}