@merabylabs/promptarchitect-mcp 0.2.0 → 0.2.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"analyzePrompt.d.ts","sourceRoot":"","sources":["../../src/tools/analyzePrompt.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,mBAAmB;;;;;;;;;EAG9B,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAErE,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,OAAO,CAAC;QACtB,WAAW,EAAE,OAAO,CAAC;QACrB,cAAc,EAAE,OAAO,CAAC;KACzB,CAAC;CACH;AASD,wBAAsB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC,CA4CtF;AA0HD,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"analyzePrompt.d.ts","sourceRoot":"","sources":["../../src/tools/analyzePrompt.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,mBAAmB;;;;;;;;;EAG9B,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAErE,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,OAAO,CAAC;QACtB,WAAW,EAAE,OAAO,CAAC;QACrB,cAAc,EAAE,OAAO,CAAC;KACzB,CAAC;CACH;AASD,wBAAsB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC,CAiEtF;AA0HD,eAAe,aAAa,CAAC"}
@@ -4,7 +4,7 @@
4
4
  * Uses PromptArchitect API with local fallback
5
5
  */
6
6
  import { z } from 'zod';
7
- import { logger, apiAnalyzePrompt, isApiClientAvailable, } from '../utils/index.js';
7
+ import { logger, apiAnalyzePrompt, isApiClientAvailable, trackUsage, } from '../utils/index.js';
8
8
  export const analyzePromptSchema = z.object({
9
9
  prompt: z.string().min(1).describe('The prompt to analyze'),
10
10
  evaluationCriteria: z.array(z.string()).optional().describe('Specific criteria to evaluate'),
@@ -17,12 +17,16 @@ const DEFAULT_CRITERIA = [
17
17
  ];
18
18
  export async function analyzePrompt(input) {
19
19
  const { prompt, evaluationCriteria = DEFAULT_CRITERIA } = input;
20
+ const startTime = Date.now();
20
21
  logger.info('Analyzing prompt', {
21
22
  promptLength: prompt.length,
22
23
  criteria: evaluationCriteria
23
24
  });
24
25
  // Calculate structural metadata (always needed)
25
26
  const metadata = calculateMetadata(prompt);
27
+ let result;
28
+ let usedApi = false;
29
+ let errorMessage;
26
30
  // Use PromptArchitect API
27
31
  if (isApiClientAvailable()) {
28
32
  try {
@@ -30,8 +34,9 @@ export async function analyzePrompt(input) {
30
34
  prompt,
31
35
  evaluationCriteria,
32
36
  });
37
+ usedApi = true;
33
38
  logger.info('Analyzed via PromptArchitect API');
34
- return {
39
+ result = {
35
40
  scores: {
36
41
  overall: response.overallScore,
37
42
  clarity: response.scores.clarity,
@@ -46,14 +51,29 @@ export async function analyzePrompt(input) {
46
51
  };
47
52
  }
48
53
  catch (error) {
49
- logger.warn('API request failed, using fallback', {
50
- error: error instanceof Error ? error.message : 'Unknown error'
51
- });
54
+ errorMessage = error instanceof Error ? error.message : 'Unknown error';
55
+ logger.warn('API request failed, using fallback', { error: errorMessage });
56
+ result = performRuleBasedAnalysis(prompt, metadata);
52
57
  }
53
58
  }
54
- // Fallback rule-based analysis
55
- logger.warn('Using fallback rule-based analysis');
56
- return performRuleBasedAnalysis(prompt, metadata);
59
+ else {
60
+ // Fallback rule-based analysis
61
+ logger.warn('Using fallback rule-based analysis');
62
+ result = performRuleBasedAnalysis(prompt, metadata);
63
+ }
64
+ const latencyMs = Date.now() - startTime;
65
+ // Track usage
66
+ await trackUsage({
67
+ tool: 'analyze_prompt',
68
+ endpoint: usedApi ? '/vscode/analyze' : 'fallback',
69
+ model: 'gemini-3-flash-preview',
70
+ inputText: prompt,
71
+ outputText: JSON.stringify(result.scores),
72
+ latencyMs,
73
+ status: errorMessage && !result ? 'error' : 'success',
74
+ errorMessage,
75
+ });
76
+ return result;
57
77
  }
58
78
  function calculateMetadata(prompt) {
59
79
  const words = prompt.split(/\s+/).filter(w => w.length > 0);
@@ -1 +1 @@
1
- {"version":3,"file":"analyzePrompt.js","sourceRoot":"","sources":["../../src/tools/analyzePrompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analyzePrompt.js","sourceRoot":"","sources":["../../src/tools/analyzePrompt.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,MAAM,EACN,gBAAgB,EAChB,oBAAoB,EACpB,UAAU,GACX,MAAM,mBAAmB,CAAC;AAE3B,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IAC3D,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CAC7F,CAAC,CAAC;AAwBH,MAAM,gBAAgB,GAAG;IACvB,SAAS;IACT,aAAa;IACb,WAAW;IACX,eAAe;CAChB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAyB;IAC3D,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,gBAAgB,EAAE,GAAG,KAAK,CAAC;IAChE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE;QAC9B,YAAY,EAAE,MAAM,CAAC,MAAM;QAC3B,QAAQ,EAAE,kBAAkB;KAC7B,CAAC,CAAC;IAEH,gDAAgD;IAChD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,MAAsB,CAAC;IAC3B,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,YAAgC,CAAC;IAErC,0BAA0B;IAC1B,IAAI,oBAAoB,EAAE,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC;gBACtC,MAAM;gBACN,kBAAkB;aACnB,CAAC,CAAC;YAEH,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YAEhD,MAAM,GAAG;gBACP,MAAM,EAAE;oBACN,OAAO,EAAE,QAAQ,CAAC,YAAY;oBAC9B,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO;oBAChC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW;oBACxC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS;oBACpC,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa;iBAC7C;gBACD,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,EAAE;gBACvC,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC;gBACpE,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC;gBACvE,QAAQ;aACT,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACxE,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;YAC3E,MAAM,GAAG,wBAAwB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,+BAA+B;QAC/B,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QAClD,MAAM,GAAG,wBAAwB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAEzC,cAAc;IACd,MAAM,UAAU,CAAC;QACf,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,UAAU;QAClD,KAAK,EAAE,wBAAwB;QAC/B,SAAS,EAAE,MAAM;QACjB,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;QACzC,SAAS;QACT,MAAM,EAAE,YAAY,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QACrD,YAAY;KACb,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAc;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE1E,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,MAAM;QACvB,aAAa,EAAE,SAAS,CAAC,MAAM;QAC/B,YAAY,EAAE,gCAAgC,CAAC,IAAI,CAAC,MAAM,CAAC;QAC3D,WAAW,EAAE,gDAAgD,CAAC,IAAI,CAAC,MAAM,CAAC;QAC1E,cAAc,EAAE,uDAAuD,CAAC,IAAI,CAAC,MAAM,CAAC;KACrF,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAc,EAAE,QAAoC;IAC7E,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;QAC1B,SAAS,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QACzB,SAAS,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC5B,SAAS,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,QAAQ,CAAC,SAAS,IAAI,EAAE,IAAI,QAAQ,CAAC,SAAS,IAAI,GAAG,EAAE,CAAC;QAC1D,SAAS,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,kCAAkC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACpD,SAAS,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,gCAAgC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,SAAS,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAc,EAAE,QAAoC;IAC9E,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,IAAI,CAAC,QAAQ,CAAC,YAAY,IAAI,QAAQ,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC;QACvD,UAAU,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC;QACrD,UAAU,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,QAAQ,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC;QAC5B,UAAU,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAClF,UAAU,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC;QACxE,UAAU,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAc,EAAE,QAAoC;IACpF,uCAAuC;IACvC,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,IAAI,gBAAgB,GAAG,EAAE,CAAC;IAC1B,IAAI,cAAc,GAAG,EAAE,CAAC;IACxB,IAAI,kBAAkB,GAAG,EAAE,CAAC;IAE5B,sBAAsB;IACtB,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC;IACxE,IAAI,iBAAiB,GAAG,GAAG;QAAE,YAAY,IAAI,EAAE,CAAC;IAChD,IAAI,iBAAiB,GAAG,GAAG;QAAE,YAAY,IAAI,EAAE,CAAC;IAEhD,0BAA0B;IAC1B,IAAI,QAAQ,CAAC,WAAW;QAAE,gBAAgB,IAAI,EAAE,CAAC;IACjD,IAAI,QAAQ,CAAC,cAAc;QAAE,gBAAgB,IAAI,EAAE,CAAC;IAEpD,wBAAwB;IACxB,IAAI,QAAQ,CAAC,YAAY;QAAE,cAAc,IAAI,EAAE,CAAC;IAChD,IAAI,QAAQ,CAAC,SAAS,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY;QAAE,cAAc,IAAI,EAAE,CAAC;IAE7E,4BAA4B;IAC5B,IAAI,+DAA+D,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACjF,kBAAkB,IAAI,EAAE,CAAC;IAC3B,CAAC;IACD,IAAI,gCAAgC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,kBAAkB,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,mBAAmB;IACnB,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3D,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;IACnC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC3C,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;IACvC,kBAAkB,GAAG,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAE/C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,gBAAgB,GAAG,cAAc,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;IAExG,uBAAuB;IACvB,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,cAAc,GAAG,EAAE;QAAE,WAAW,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;IACjG,IAAI,gBAAgB,GAAG,EAAE;QAAE,WAAW,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IACzF,IAAI,kBAAkB,GAAG,EAAE;QAAE,WAAW,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;IAChH,IAAI,YAAY,GAAG,EAAE;QAAE,WAAW,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;IAC3F,IAAI,CAAC,QAAQ,CAAC,WAAW;QAAE,WAAW,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IAEjF,OAAO;QACL,MAAM,EAAE;YACN,OAAO;YACP,OAAO,EAAE,YAAY;YACrB,WAAW,EAAE,gBAAgB;YAC7B,SAAS,EAAE,cAAc;YACzB,aAAa,EAAE,kBAAkB;SAClC;QACD,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACpC,SAAS,EAAE,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC;QAC9C,UAAU,EAAE,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC;QAChD,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,eAAe,aAAa,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"generatePrompt.d.ts","sourceRoot":"","sources":["../../src/tools/generatePrompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;EAY/B,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEvE,wBAAsB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC;IACxE,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QACR,eAAe,EAAE,MAAM,CAAC;QACxB,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,OAAO,CAAC;KACvB,CAAC;CACH,CAAC,CA8CD;AA0BD,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"generatePrompt.d.ts","sourceRoot":"","sources":["../../src/tools/generatePrompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;EAY/B,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEvE,wBAAsB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC;IACxE,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QACR,eAAe,EAAE,MAAM,CAAC;QACxB,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,OAAO,CAAC;KACvB,CAAC;CACH,CAAC,CAgED;AA0BD,eAAe,cAAc,CAAC"}
@@ -5,7 +5,7 @@
5
5
  * Uses PromptArchitect backend API with fallback to local template generation.
6
6
  */
7
7
  import { z } from 'zod';
8
- import { logger, apiGeneratePrompt, isApiClientAvailable, } from '../utils/index.js';
8
+ import { logger, apiGeneratePrompt, isApiClientAvailable, trackUsage, } from '../utils/index.js';
9
9
  export const generatePromptSchema = z.object({
10
10
  idea: z.string().min(1).describe('The user\'s raw prompt idea or concept'),
11
11
  template: z.enum(['coding', 'writing', 'research', 'analysis', 'factcheck', 'general'])
@@ -21,8 +21,11 @@ export const generatePromptSchema = z.object({
21
21
  });
22
22
  export async function generatePrompt(input) {
23
23
  const { idea, template = 'general', context, targetModel, workspaceContext } = input;
24
+ const startTime = Date.now();
24
25
  logger.info('Generating prompt', { template, targetModel, ideaLength: idea.length, hasWorkspaceContext: !!workspaceContext });
25
26
  let generatedPrompt = '';
27
+ let usedApi = false;
28
+ let errorMessage;
26
29
  // Use PromptArchitect API
27
30
  if (isApiClientAvailable()) {
28
31
  try {
@@ -34,12 +37,12 @@ export async function generatePrompt(input) {
34
37
  workspaceContext,
35
38
  });
36
39
  generatedPrompt = response.prompt;
40
+ usedApi = true;
37
41
  logger.info('Generated via PromptArchitect API');
38
42
  }
39
43
  catch (error) {
40
- logger.warn('API request failed, using fallback', {
41
- error: error instanceof Error ? error.message : 'Unknown error'
42
- });
44
+ errorMessage = error instanceof Error ? error.message : 'Unknown error';
45
+ logger.warn('API request failed, using fallback', { error: errorMessage });
43
46
  }
44
47
  }
45
48
  // Fallback template generation
@@ -51,6 +54,20 @@ export async function generatePrompt(input) {
51
54
  const wordCount = generatedPrompt.split(/\s+/).length;
52
55
  const estimatedTokens = Math.ceil(wordCount * 1.3); // Rough estimate
53
56
  const hasStructure = /^#+\s|^\d+\.|^-\s|^\*\s/m.test(generatedPrompt);
57
+ const latencyMs = Date.now() - startTime;
58
+ // Track usage
59
+ const inputText = `${idea}\n${context || ''}\n${workspaceContext || ''}`;
60
+ await trackUsage({
61
+ tool: 'generate_prompt',
62
+ endpoint: usedApi ? '/vscode/generate' : 'fallback',
63
+ model: 'gemini-3-flash-preview',
64
+ inputText,
65
+ outputText: generatedPrompt,
66
+ latencyMs,
67
+ status: errorMessage && !generatedPrompt ? 'error' : 'success',
68
+ errorMessage,
69
+ template,
70
+ });
54
71
  return {
55
72
  prompt: generatedPrompt,
56
73
  template,
@@ -1 +1 @@
1
- {"version":3,"file":"generatePrompt.js","sourceRoot":"","sources":["../../src/tools/generatePrompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generatePrompt.js","sourceRoot":"","sources":["../../src/tools/generatePrompt.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"refinePrompt.d.ts","sourceRoot":"","sources":["../../src/tools/refinePrompt.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;EAS7B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEnE,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC;IACpE,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE;QACR,iBAAiB,EAAE,MAAM,CAAC;QAC1B,gBAAgB,EAAE,MAAM,CAAC;QACzB,kBAAkB,EAAE,OAAO,CAAC;KAC7B,CAAC;CACH,CAAC,CAyDD;AA6BD,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"refinePrompt.d.ts","sourceRoot":"","sources":["../../src/tools/refinePrompt.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;EAS7B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEnE,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC;IACpE,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE;QACR,iBAAiB,EAAE,MAAM,CAAC;QAC1B,gBAAgB,EAAE,MAAM,CAAC;QACzB,kBAAkB,EAAE,OAAO,CAAC;KAC7B,CAAC;CACH,CAAC,CA0ED;AA6BD,eAAe,YAAY,CAAC"}
@@ -4,7 +4,7 @@
4
4
  * Uses PromptArchitect API with local fallback
5
5
  */
6
6
  import { z } from 'zod';
7
- import { logger, apiRefinePrompt, isApiClientAvailable, } from '../utils/index.js';
7
+ import { logger, apiRefinePrompt, isApiClientAvailable, trackUsage, } from '../utils/index.js';
8
8
  export const refinePromptSchema = z.object({
9
9
  prompt: z.string().min(1).describe('The current prompt to refine'),
10
10
  feedback: z.string().min(1).describe('What should be improved or changed'),
@@ -17,6 +17,7 @@ export const refinePromptSchema = z.object({
17
17
  });
18
18
  export async function refinePrompt(input) {
19
19
  const { prompt, feedback, preserveStructure = true, targetModel, workspaceContext } = input;
20
+ const startTime = Date.now();
20
21
  logger.info('Refining prompt', {
21
22
  promptLength: prompt.length,
22
23
  feedbackLength: feedback.length,
@@ -26,6 +27,8 @@ export async function refinePrompt(input) {
26
27
  });
27
28
  let refinedPrompt = '';
28
29
  let changes = [];
30
+ let usedApi = false;
31
+ let errorMessage;
29
32
  // Use PromptArchitect API
30
33
  if (isApiClientAvailable()) {
31
34
  try {
@@ -38,12 +41,12 @@ export async function refinePrompt(input) {
38
41
  });
39
42
  refinedPrompt = response.refinedPrompt;
40
43
  changes = response.changes || ['Prompt refined based on feedback'];
44
+ usedApi = true;
41
45
  logger.info('Refined via PromptArchitect API');
42
46
  }
43
47
  catch (error) {
44
- logger.warn('API request failed, using fallback', {
45
- error: error instanceof Error ? error.message : 'Unknown error'
46
- });
48
+ errorMessage = error instanceof Error ? error.message : 'Unknown error';
49
+ logger.warn('API request failed, using fallback', { error: errorMessage });
47
50
  }
48
51
  }
49
52
  // Fallback basic refinement
@@ -58,6 +61,19 @@ export async function refinePrompt(input) {
58
61
  const originalHasStructure = /^#+\s|^\d+\.|^-\s|^\*\s/m.test(prompt);
59
62
  const refinedHasStructure = /^#+\s|^\d+\.|^-\s|^\*\s/m.test(refinedPrompt);
60
63
  const structurePreserved = !originalHasStructure || refinedHasStructure;
64
+ const latencyMs = Date.now() - startTime;
65
+ // Track usage
66
+ const inputText = `${prompt}\n${feedback}\n${workspaceContext || ''}`;
67
+ await trackUsage({
68
+ tool: 'refine_prompt',
69
+ endpoint: usedApi ? '/vscode/refine' : 'fallback',
70
+ model: 'gemini-3-flash-preview',
71
+ inputText,
72
+ outputText: refinedPrompt,
73
+ latencyMs,
74
+ status: errorMessage && !refinedPrompt ? 'error' : 'success',
75
+ errorMessage,
76
+ });
61
77
  return {
62
78
  refinedPrompt,
63
79
  changes,
@@ -1 +1 @@
1
- {"version":3,"file":"refinePrompt.js","sourceRoot":"","sources":["../../src/tools/refinePrompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"refinePrompt.js","sourceRoot":"","sources":["../../src/tools/refinePrompt.ts"],"names":[],"mappings":"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"}
@@ -2,4 +2,5 @@ export { logger, setLogLevel, type LogLevel } from './logger.js';
2
2
  export { initializeGemini, isGeminiAvailable, generateContent, analyzePromptQuality, getStats, } from './gemini.js';
3
3
  export { initializeApiClient, isApiClientAvailable, getApiUrl, apiGeneratePrompt, apiRefinePrompt, apiAnalyzePrompt, } from './apiClient.js';
4
4
  export { getConfig, updateConfig, resetConfig, isAutoRefineEnabled, enableAutoRefine, disableAutoRefine, type ServerConfig, } from './config.js';
5
+ export { trackUsage, calculateCost, estimateTokens, checkRateLimit, incrementRateLimit, getRateLimitHeaders, getUsageStats, getDailyCosts, exportUsageRecords, GEMINI_PRICING, type UsageRecord, type UsageStats, type RateLimitInfo, } from './usageTracker.js';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,QAAQ,GACT,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,SAAS,EACT,iBAAiB,EACjB,eAAe,EACf,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,SAAS,EACT,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,YAAY,GAClB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,QAAQ,GACT,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,SAAS,EACT,iBAAiB,EACjB,eAAe,EACf,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,SAAS,EACT,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,YAAY,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,UAAU,EACV,aAAa,EACb,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,aAAa,GACnB,MAAM,mBAAmB,CAAC"}
@@ -2,4 +2,5 @@ export { logger, setLogLevel } from './logger.js';
2
2
  export { initializeGemini, isGeminiAvailable, generateContent, analyzePromptQuality, getStats, } from './gemini.js';
3
3
  export { initializeApiClient, isApiClientAvailable, getApiUrl, apiGeneratePrompt, apiRefinePrompt, apiAnalyzePrompt, } from './apiClient.js';
4
4
  export { getConfig, updateConfig, resetConfig, isAutoRefineEnabled, enableAutoRefine, disableAutoRefine, } from './config.js';
5
+ export { trackUsage, calculateCost, estimateTokens, checkRateLimit, incrementRateLimit, getRateLimitHeaders, getUsageStats, getDailyCosts, exportUsageRecords, GEMINI_PRICING, } from './usageTracker.js';
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAiB,MAAM,aAAa,CAAC;AACjE,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,QAAQ,GACT,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,SAAS,EACT,iBAAiB,EACjB,eAAe,EACf,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,SAAS,EACT,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,GAElB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAiB,MAAM,aAAa,CAAC;AACjE,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,QAAQ,GACT,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,SAAS,EACT,iBAAiB,EACjB,eAAe,EACf,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,SAAS,EACT,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,GAElB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,UAAU,EACV,aAAa,EACb,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,cAAc,GAIf,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,167 @@
1
+ /**
2
+ * MCP Usage Tracker
3
+ *
4
+ * Tracks API usage, calculates costs, and provides analytics
5
+ * for determining when to introduce rate limits and paid tiers.
6
+ */
7
+ export declare const GEMINI_PRICING: {
8
+ readonly 'gemini-3-pro-preview': {
9
+ readonly inputPerMillion: 2;
10
+ readonly outputPerMillion: 12;
11
+ };
12
+ readonly 'gemini-3-flash-preview': {
13
+ readonly inputPerMillion: 0.5;
14
+ readonly outputPerMillion: 3;
15
+ };
16
+ readonly 'gemini-2.5-pro': {
17
+ readonly inputPerMillion: 1.25;
18
+ readonly outputPerMillion: 10;
19
+ };
20
+ readonly 'gemini-2.5-flash': {
21
+ readonly inputPerMillion: 0.3;
22
+ readonly outputPerMillion: 2.5;
23
+ };
24
+ readonly 'gemini-2.5-flash-lite': {
25
+ readonly inputPerMillion: 0.1;
26
+ readonly outputPerMillion: 0.4;
27
+ };
28
+ readonly 'gemini-2.0-flash': {
29
+ readonly inputPerMillion: 0.1;
30
+ readonly outputPerMillion: 0.4;
31
+ };
32
+ readonly 'gemini-2.0-flash-lite': {
33
+ readonly inputPerMillion: 0.075;
34
+ readonly outputPerMillion: 0.3;
35
+ };
36
+ readonly default: {
37
+ readonly inputPerMillion: 0.5;
38
+ readonly outputPerMillion: 3;
39
+ };
40
+ };
41
+ export interface UsageRecord {
42
+ id: string;
43
+ timestamp: string;
44
+ tool: 'generate_prompt' | 'refine_prompt' | 'analyze_prompt' | 'set_auto_refine' | 'get_auto_refine_status';
45
+ endpoint: string;
46
+ model: string;
47
+ userHash?: string;
48
+ clientId?: string;
49
+ inputTokens: number;
50
+ outputTokens: number;
51
+ totalTokens: number;
52
+ inputCost: number;
53
+ outputCost: number;
54
+ totalCost: number;
55
+ latencyMs: number;
56
+ status: 'success' | 'error' | 'rate_limited';
57
+ errorMessage?: string;
58
+ mcpServerVersion: string;
59
+ template?: string;
60
+ }
61
+ export interface UsageStats {
62
+ periodStart: string;
63
+ periodEnd: string;
64
+ totalRequests: number;
65
+ successfulRequests: number;
66
+ failedRequests: number;
67
+ rateLimitedRequests: number;
68
+ requestsByTool: Record<string, number>;
69
+ totalInputTokens: number;
70
+ totalOutputTokens: number;
71
+ totalTokens: number;
72
+ totalInputCost: number;
73
+ totalOutputCost: number;
74
+ totalCost: number;
75
+ averageCostPerRequest: number;
76
+ averageLatencyMs: number;
77
+ p95LatencyMs: number;
78
+ uniqueUsers: number;
79
+ topUsers: Array<{
80
+ userHash: string;
81
+ requestCount: number;
82
+ totalCost: number;
83
+ }>;
84
+ }
85
+ export interface RateLimitInfo {
86
+ remaining: number;
87
+ limit: number;
88
+ resetAt: string;
89
+ tier: 'free' | 'basic' | 'pro' | 'unlimited';
90
+ }
91
+ declare const DEFAULT_RATE_LIMITS: {
92
+ free: number;
93
+ basic: number;
94
+ pro: number;
95
+ unlimited: number;
96
+ };
97
+ /**
98
+ * Calculate cost for a request based on model and token usage
99
+ */
100
+ export declare function calculateCost(model: string, inputTokens: number, outputTokens: number): {
101
+ inputCost: number;
102
+ outputCost: number;
103
+ totalCost: number;
104
+ };
105
+ /**
106
+ * Estimate token count from text (rough approximation)
107
+ * More accurate would use tiktoken, but this is good for estimation
108
+ */
109
+ export declare function estimateTokens(text: string): number;
110
+ /**
111
+ * Hash a user identifier for privacy
112
+ */
113
+ export declare function hashUser(identifier: string): string;
114
+ /**
115
+ * Track a usage event
116
+ */
117
+ export declare function trackUsage(params: {
118
+ tool: UsageRecord['tool'];
119
+ endpoint: string;
120
+ model?: string;
121
+ inputText?: string;
122
+ outputText?: string;
123
+ inputTokens?: number;
124
+ outputTokens?: number;
125
+ latencyMs: number;
126
+ status: UsageRecord['status'];
127
+ errorMessage?: string;
128
+ userIdentifier?: string;
129
+ clientId?: string;
130
+ template?: string;
131
+ }): Promise<UsageRecord>;
132
+ /**
133
+ * Check if a user is rate limited
134
+ */
135
+ export declare function checkRateLimit(userIdentifier: string, tier?: keyof typeof DEFAULT_RATE_LIMITS): RateLimitInfo;
136
+ /**
137
+ * Increment rate limit counter for a user
138
+ */
139
+ export declare function incrementRateLimit(userIdentifier: string): void;
140
+ /**
141
+ * Check if user is rate limited and return headers
142
+ */
143
+ export declare function getRateLimitHeaders(userIdentifier: string, tier?: keyof typeof DEFAULT_RATE_LIMITS): Record<string, string>;
144
+ /**
145
+ * Get usage statistics for a time period
146
+ */
147
+ export declare function getUsageStats(startTime?: Date, endTime?: Date): UsageStats;
148
+ /**
149
+ * Get daily cost summary for the last N days
150
+ */
151
+ export declare function getDailyCosts(days?: number): Array<{
152
+ date: string;
153
+ requests: number;
154
+ totalCost: number;
155
+ inputCost: number;
156
+ outputCost: number;
157
+ }>;
158
+ /**
159
+ * Export all usage records (for backup/analysis)
160
+ */
161
+ export declare function exportUsageRecords(): UsageRecord[];
162
+ /**
163
+ * Clear local usage records
164
+ */
165
+ export declare function clearUsageRecords(): void;
166
+ export {};
167
+ //# sourceMappingURL=usageTracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usageTracker.d.ts","sourceRoot":"","sources":["../../src/utils/usageTracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,368 @@
1
+ /**
2
+ * MCP Usage Tracker
3
+ *
4
+ * Tracks API usage, calculates costs, and provides analytics
5
+ * for determining when to introduce rate limits and paid tiers.
6
+ */
7
+ import { logger } from './logger.js';
8
+ import { VERSION } from '../version.js';
9
+ // ============================================================================
10
+ // GEMINI PRICING (as of Dec 2024)
11
+ // https://ai.google.dev/pricing
12
+ // ============================================================================
13
+ // Current Gemini model pricing (December 2025)
14
+ // Source: https://ai.google.dev/gemini-api/docs/pricing
15
+ // NOTE: Do NOT add deprecated models (1.5, 1.0, etc.)
16
+ export const GEMINI_PRICING = {
17
+ // Gemini 3 models (latest)
18
+ 'gemini-3-pro-preview': {
19
+ inputPerMillion: 2.00, // $2.00 per 1M (<=200k), $4.00 (>200k)
20
+ outputPerMillion: 12.00, // $12.00 per 1M (<=200k), $18.00 (>200k) - includes thinking
21
+ },
22
+ 'gemini-3-flash-preview': {
23
+ inputPerMillion: 0.50, // $0.50 per 1M input tokens
24
+ outputPerMillion: 3.00, // $3.00 per 1M output tokens (includes thinking)
25
+ },
26
+ // Gemini 2.5 models
27
+ 'gemini-2.5-pro': {
28
+ inputPerMillion: 1.25, // $1.25 per 1M (<=200k), $2.50 (>200k)
29
+ outputPerMillion: 10.00, // $10.00 per 1M (<=200k), $15.00 (>200k) - includes thinking
30
+ },
31
+ 'gemini-2.5-flash': {
32
+ inputPerMillion: 0.30, // $0.30 per 1M input tokens
33
+ outputPerMillion: 2.50, // $2.50 per 1M output tokens (includes thinking)
34
+ },
35
+ 'gemini-2.5-flash-lite': {
36
+ inputPerMillion: 0.10, // $0.10 per 1M input tokens
37
+ outputPerMillion: 0.40, // $0.40 per 1M output tokens
38
+ },
39
+ // Gemini 2.0 models
40
+ 'gemini-2.0-flash': {
41
+ inputPerMillion: 0.10, // $0.10 per 1M input tokens
42
+ outputPerMillion: 0.40, // $0.40 per 1M output tokens
43
+ },
44
+ 'gemini-2.0-flash-lite': {
45
+ inputPerMillion: 0.075, // $0.075 per 1M input tokens
46
+ outputPerMillion: 0.30, // $0.30 per 1M output tokens
47
+ },
48
+ // Default fallback (uses Gemini 3 Flash pricing)
49
+ 'default': {
50
+ inputPerMillion: 0.50,
51
+ outputPerMillion: 3.00,
52
+ }
53
+ };
54
+ // ============================================================================
55
+ // IN-MEMORY STORAGE (for local tracking - sends to backend periodically)
56
+ // ============================================================================
57
+ const usageRecords = [];
58
+ const MAX_LOCAL_RECORDS = 1000; // Keep last 1000 records locally
59
+ // Per-user rate limiting (in-memory for quick checks)
60
+ const userRequestCounts = new Map();
61
+ const RATE_LIMIT_WINDOW_MS = 60 * 60 * 1000; // 1 hour window
62
+ const DEFAULT_RATE_LIMITS = {
63
+ free: 50, // 50 requests per hour
64
+ basic: 200, // 200 requests per hour
65
+ pro: 1000, // 1000 requests per hour
66
+ unlimited: Infinity,
67
+ };
68
+ // ============================================================================
69
+ // COST CALCULATION
70
+ // ============================================================================
71
+ /**
72
+ * Calculate cost for a request based on model and token usage
73
+ */
74
+ export function calculateCost(model, inputTokens, outputTokens) {
75
+ const normalizedModel = model.toLowerCase();
76
+ const pricing = GEMINI_PRICING[normalizedModel] || GEMINI_PRICING.default;
77
+ const inputRate = pricing.inputPerMillion;
78
+ const outputRate = pricing.outputPerMillion;
79
+ const inputCost = (inputTokens / 1_000_000) * inputRate;
80
+ const outputCost = (outputTokens / 1_000_000) * outputRate;
81
+ return {
82
+ inputCost: Math.round(inputCost * 1_000_000) / 1_000_000, // 6 decimal precision
83
+ outputCost: Math.round(outputCost * 1_000_000) / 1_000_000,
84
+ totalCost: Math.round((inputCost + outputCost) * 1_000_000) / 1_000_000,
85
+ };
86
+ }
87
+ /**
88
+ * Estimate token count from text (rough approximation)
89
+ * More accurate would use tiktoken, but this is good for estimation
90
+ */
91
+ export function estimateTokens(text) {
92
+ if (!text)
93
+ return 0;
94
+ // Rough estimate: ~4 characters per token for English
95
+ // Gemini models are similar to GPT tokenization
96
+ return Math.ceil(text.length / 4);
97
+ }
98
+ // ============================================================================
99
+ // USAGE TRACKING
100
+ // ============================================================================
101
+ /**
102
+ * Generate a unique ID for a usage record
103
+ */
104
+ function generateId() {
105
+ return `mcp_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
106
+ }
107
+ /**
108
+ * Hash a user identifier for privacy
109
+ */
110
+ export function hashUser(identifier) {
111
+ // Simple hash for privacy - not cryptographically secure but sufficient for analytics
112
+ let hash = 0;
113
+ for (let i = 0; i < identifier.length; i++) {
114
+ const char = identifier.charCodeAt(i);
115
+ hash = ((hash << 5) - hash) + char;
116
+ hash = hash & hash; // Convert to 32-bit integer
117
+ }
118
+ return `user_${Math.abs(hash).toString(36)}`;
119
+ }
120
+ /**
121
+ * Track a usage event
122
+ */
123
+ export async function trackUsage(params) {
124
+ const { tool, endpoint, model = 'gemini-2.5-flash', inputText, outputText, latencyMs, status, errorMessage, userIdentifier, clientId, template, } = params;
125
+ // Calculate tokens
126
+ const inputTokens = params.inputTokens ?? estimateTokens(inputText || '');
127
+ const outputTokens = params.outputTokens ?? estimateTokens(outputText || '');
128
+ const totalTokens = inputTokens + outputTokens;
129
+ // Calculate cost
130
+ const costs = calculateCost(model, inputTokens, outputTokens);
131
+ // Create record
132
+ const record = {
133
+ id: generateId(),
134
+ timestamp: new Date().toISOString(),
135
+ tool,
136
+ endpoint,
137
+ model,
138
+ userHash: userIdentifier ? hashUser(userIdentifier) : undefined,
139
+ clientId,
140
+ inputTokens,
141
+ outputTokens,
142
+ totalTokens,
143
+ inputCost: costs.inputCost,
144
+ outputCost: costs.outputCost,
145
+ totalCost: costs.totalCost,
146
+ latencyMs,
147
+ status,
148
+ errorMessage,
149
+ mcpServerVersion: VERSION,
150
+ template,
151
+ };
152
+ // Store locally
153
+ usageRecords.push(record);
154
+ // Trim if too many records
155
+ if (usageRecords.length > MAX_LOCAL_RECORDS) {
156
+ usageRecords.splice(0, usageRecords.length - MAX_LOCAL_RECORDS);
157
+ }
158
+ // Log for debugging
159
+ logger.debug('Usage tracked', {
160
+ tool,
161
+ tokens: totalTokens,
162
+ cost: `$${costs.totalCost.toFixed(6)}`,
163
+ latency: `${latencyMs}ms`,
164
+ status,
165
+ });
166
+ // Send to backend asynchronously (fire and forget)
167
+ sendToBackend(record).catch(err => {
168
+ logger.warn('Failed to send usage to backend', { error: err.message });
169
+ });
170
+ return record;
171
+ }
172
+ /**
173
+ * Send usage record to PromptArchitect backend
174
+ */
175
+ async function sendToBackend(record) {
176
+ const apiUrl = process.env.PROMPTARCHITECT_API_URL ||
177
+ 'https://us-central1-prompt-architect-3df7a.cloudfunctions.net/api';
178
+ try {
179
+ const response = await fetch(`${apiUrl}/mcp/usage`, {
180
+ method: 'POST',
181
+ headers: {
182
+ 'Content-Type': 'application/json',
183
+ 'X-Client': 'mcp-server',
184
+ 'X-Client-Version': VERSION,
185
+ },
186
+ body: JSON.stringify(record),
187
+ });
188
+ if (!response.ok) {
189
+ throw new Error(`HTTP ${response.status}`);
190
+ }
191
+ }
192
+ catch (error) {
193
+ // Silently fail - usage tracking shouldn't break main functionality
194
+ logger.debug('Backend usage tracking failed', { error });
195
+ }
196
+ }
197
+ // ============================================================================
198
+ // RATE LIMITING
199
+ // ============================================================================
200
+ /**
201
+ * Check if a user is rate limited
202
+ */
203
+ export function checkRateLimit(userIdentifier, tier = 'free') {
204
+ const userHash = hashUser(userIdentifier);
205
+ const now = Date.now();
206
+ const limit = DEFAULT_RATE_LIMITS[tier];
207
+ // Get or create user's request count
208
+ let userData = userRequestCounts.get(userHash);
209
+ if (!userData || now - userData.windowStart >= RATE_LIMIT_WINDOW_MS) {
210
+ // New window
211
+ userData = { count: 0, windowStart: now };
212
+ userRequestCounts.set(userHash, userData);
213
+ }
214
+ const windowEnd = userData.windowStart + RATE_LIMIT_WINDOW_MS;
215
+ const remaining = Math.max(0, limit - userData.count);
216
+ return {
217
+ remaining,
218
+ limit: limit === Infinity ? -1 : limit, // -1 indicates unlimited
219
+ resetAt: new Date(windowEnd).toISOString(),
220
+ tier,
221
+ };
222
+ }
223
+ /**
224
+ * Increment rate limit counter for a user
225
+ */
226
+ export function incrementRateLimit(userIdentifier) {
227
+ const userHash = hashUser(userIdentifier);
228
+ const now = Date.now();
229
+ let userData = userRequestCounts.get(userHash);
230
+ if (!userData || now - userData.windowStart >= RATE_LIMIT_WINDOW_MS) {
231
+ userData = { count: 1, windowStart: now };
232
+ }
233
+ else {
234
+ userData.count++;
235
+ }
236
+ userRequestCounts.set(userHash, userData);
237
+ }
238
+ /**
239
+ * Check if user is rate limited and return headers
240
+ */
241
+ export function getRateLimitHeaders(userIdentifier, tier = 'free') {
242
+ const info = checkRateLimit(userIdentifier, tier);
243
+ return {
244
+ 'X-RateLimit-Limit': info.limit === -1 ? 'unlimited' : String(info.limit),
245
+ 'X-RateLimit-Remaining': String(info.remaining),
246
+ 'X-RateLimit-Reset': info.resetAt,
247
+ 'X-RateLimit-Tier': info.tier,
248
+ };
249
+ }
250
+ // ============================================================================
251
+ // ANALYTICS
252
+ // ============================================================================
253
+ /**
254
+ * Get usage statistics for a time period
255
+ */
256
+ export function getUsageStats(startTime, endTime) {
257
+ const start = startTime || new Date(Date.now() - 24 * 60 * 60 * 1000); // Default: last 24h
258
+ const end = endTime || new Date();
259
+ const filtered = usageRecords.filter(r => {
260
+ const ts = new Date(r.timestamp);
261
+ return ts >= start && ts <= end;
262
+ });
263
+ // Calculate stats
264
+ const stats = {
265
+ periodStart: start.toISOString(),
266
+ periodEnd: end.toISOString(),
267
+ totalRequests: filtered.length,
268
+ successfulRequests: filtered.filter(r => r.status === 'success').length,
269
+ failedRequests: filtered.filter(r => r.status === 'error').length,
270
+ rateLimitedRequests: filtered.filter(r => r.status === 'rate_limited').length,
271
+ requestsByTool: {},
272
+ totalInputTokens: 0,
273
+ totalOutputTokens: 0,
274
+ totalTokens: 0,
275
+ totalInputCost: 0,
276
+ totalOutputCost: 0,
277
+ totalCost: 0,
278
+ averageCostPerRequest: 0,
279
+ averageLatencyMs: 0,
280
+ p95LatencyMs: 0,
281
+ uniqueUsers: 0,
282
+ topUsers: [],
283
+ };
284
+ // Aggregate
285
+ const userStats = new Map();
286
+ const latencies = [];
287
+ for (const record of filtered) {
288
+ // By tool
289
+ stats.requestsByTool[record.tool] = (stats.requestsByTool[record.tool] || 0) + 1;
290
+ // Tokens
291
+ stats.totalInputTokens += record.inputTokens;
292
+ stats.totalOutputTokens += record.outputTokens;
293
+ stats.totalTokens += record.totalTokens;
294
+ // Costs
295
+ stats.totalInputCost += record.inputCost;
296
+ stats.totalOutputCost += record.outputCost;
297
+ stats.totalCost += record.totalCost;
298
+ // Latency
299
+ latencies.push(record.latencyMs);
300
+ // User stats
301
+ if (record.userHash) {
302
+ const existing = userStats.get(record.userHash) || { count: 0, cost: 0 };
303
+ existing.count++;
304
+ existing.cost += record.totalCost;
305
+ userStats.set(record.userHash, existing);
306
+ }
307
+ }
308
+ // Calculate averages
309
+ if (filtered.length > 0) {
310
+ stats.averageCostPerRequest = stats.totalCost / filtered.length;
311
+ stats.averageLatencyMs = latencies.reduce((a, b) => a + b, 0) / latencies.length;
312
+ // P95 latency
313
+ latencies.sort((a, b) => a - b);
314
+ const p95Index = Math.floor(latencies.length * 0.95);
315
+ stats.p95LatencyMs = latencies[p95Index] || 0;
316
+ }
317
+ // User stats
318
+ stats.uniqueUsers = userStats.size;
319
+ stats.topUsers = Array.from(userStats.entries())
320
+ .map(([userHash, data]) => ({ userHash, requestCount: data.count, totalCost: data.cost }))
321
+ .sort((a, b) => b.requestCount - a.requestCount)
322
+ .slice(0, 10);
323
+ // Round costs
324
+ stats.totalInputCost = Math.round(stats.totalInputCost * 1_000_000) / 1_000_000;
325
+ stats.totalOutputCost = Math.round(stats.totalOutputCost * 1_000_000) / 1_000_000;
326
+ stats.totalCost = Math.round(stats.totalCost * 1_000_000) / 1_000_000;
327
+ stats.averageCostPerRequest = Math.round(stats.averageCostPerRequest * 1_000_000) / 1_000_000;
328
+ return stats;
329
+ }
330
+ /**
331
+ * Get daily cost summary for the last N days
332
+ */
333
+ export function getDailyCosts(days = 7) {
334
+ const results = [];
335
+ for (let i = 0; i < days; i++) {
336
+ const date = new Date();
337
+ date.setDate(date.getDate() - i);
338
+ date.setHours(0, 0, 0, 0);
339
+ const nextDate = new Date(date);
340
+ nextDate.setDate(nextDate.getDate() + 1);
341
+ const dayRecords = usageRecords.filter(r => {
342
+ const ts = new Date(r.timestamp);
343
+ return ts >= date && ts < nextDate;
344
+ });
345
+ results.push({
346
+ date: date.toISOString().slice(0, 10),
347
+ requests: dayRecords.length,
348
+ totalCost: dayRecords.reduce((sum, r) => sum + r.totalCost, 0),
349
+ inputCost: dayRecords.reduce((sum, r) => sum + r.inputCost, 0),
350
+ outputCost: dayRecords.reduce((sum, r) => sum + r.outputCost, 0),
351
+ });
352
+ }
353
+ return results.reverse(); // Oldest first
354
+ }
355
+ /**
356
+ * Export all usage records (for backup/analysis)
357
+ */
358
+ export function exportUsageRecords() {
359
+ return [...usageRecords];
360
+ }
361
+ /**
362
+ * Clear local usage records
363
+ */
364
+ export function clearUsageRecords() {
365
+ usageRecords.length = 0;
366
+ logger.info('Usage records cleared');
367
+ }
368
+ //# sourceMappingURL=usageTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usageTracker.js","sourceRoot":"","sources":["../../src/utils/usageTracker.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@merabylabs/promptarchitect-mcp",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "MCP (Model Context Protocol) server for PromptArchitect - AI-powered prompt engineering tools for Claude, Cursor, VS Code, Windsurf, Zed & more",
5
5
  "keywords": [
6
6
  "mcp",