@merabylabs/promptarchitect-mcp 0.2.0 → 0.2.1

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-2.5-flash',
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":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,MAAM,EACN,gBAAgB,EAChB,oBAAoB,GACrB,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;IAEhE,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;IAE3C,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,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YAEhD,OAAO;gBACL,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,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE;gBAChD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAChE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IAClD,OAAO,wBAAwB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACpD,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
+ {"version":3,"file":"analyzePrompt.js","sourceRoot":"","sources":["../../src/tools/analyzePrompt.ts"],"names":[],"mappings":"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"}
@@ -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-2.5-flash',
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":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,MAAM,EACN,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IAC1E,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;SACpF,QAAQ,EAAE;SACV,OAAO,CAAC,SAAS,CAAC;SAClB,QAAQ,CAAC,qCAAqC,CAAC;IAClD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IAC5E,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;SAC1D,QAAQ,EAAE;SACV,OAAO,CAAC,SAAS,CAAC;SAClB,QAAQ,CAAC,iCAAiC,CAAC;IAC9C,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iKAAiK,CAAC;CACpN,CAAC,CAAC;AAIH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAA0B;IAS7D,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAC;IAErF,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAE9H,IAAI,eAAe,GAAW,EAAE,CAAC;IAEjC,0BAA0B;IAC1B,IAAI,oBAAoB,EAAE,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC;gBACvC,IAAI;gBACJ,QAAQ;gBACR,OAAO;gBACP,WAAW;gBACX,gBAAgB;aACjB,CAAC,CAAC;YACH,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE;gBAChD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAChE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,eAAe,GAAG,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChE,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAClD,CAAC;IAED,qBAAqB;IACrB,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IACtD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,iBAAiB;IACrE,MAAM,YAAY,GAAG,0BAA0B,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAEtE,OAAO;QACL,MAAM,EAAE,eAAe;QACvB,QAAQ;QACR,QAAQ,EAAE;YACR,eAAe;YACf,SAAS;YACT,YAAY;SACb;KACF,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY,EAAE,QAAgB,EAAE,OAAgB;IAC5E,MAAM,QAAQ,GAAG;QACf,cAAc;QACd,IAAI;QACJ,EAAE;QACF,YAAY;QACZ,OAAO,IAAI,iCAAiC;QAC5C,EAAE;QACF,iBAAiB;QACjB,sCAAsC;QACtC,+CAA+C;QAC/C,wCAAwC;QACxC,EAAE;QACF,kBAAkB;QAClB,6EAA6E;KAC9E,CAAC;IAEF,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,oBAAoB,EAAE,0CAA0C,EAAE,uBAAuB,EAAE,yBAAyB,CAAC,CAAC;IAC1I,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,eAAe,cAAc,CAAC"}
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-2.5-flash',
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,161 @@
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-2.5-flash': {
9
+ readonly inputPerMillion: 0.075;
10
+ readonly outputPerMillion: 0.3;
11
+ readonly thinkingInputPerMillion: 0.075;
12
+ readonly thinkingOutputPerMillion: 1.25;
13
+ };
14
+ readonly 'gemini-2.5-pro': {
15
+ readonly inputPerMillion: 1.25;
16
+ readonly outputPerMillion: 10;
17
+ };
18
+ readonly 'gemini-2.0-flash': {
19
+ readonly inputPerMillion: 0.1;
20
+ readonly outputPerMillion: 0.4;
21
+ };
22
+ readonly 'gemini-1.5-flash': {
23
+ readonly inputPerMillion: 0.075;
24
+ readonly outputPerMillion: 0.3;
25
+ };
26
+ readonly 'gemini-1.5-pro': {
27
+ readonly inputPerMillion: 1.25;
28
+ readonly outputPerMillion: 5;
29
+ };
30
+ readonly default: {
31
+ readonly inputPerMillion: 0.1;
32
+ readonly outputPerMillion: 0.4;
33
+ };
34
+ };
35
+ export interface UsageRecord {
36
+ id: string;
37
+ timestamp: string;
38
+ tool: 'generate_prompt' | 'refine_prompt' | 'analyze_prompt' | 'set_auto_refine' | 'get_auto_refine_status';
39
+ endpoint: string;
40
+ model: string;
41
+ userHash?: string;
42
+ clientId?: string;
43
+ inputTokens: number;
44
+ outputTokens: number;
45
+ totalTokens: number;
46
+ inputCost: number;
47
+ outputCost: number;
48
+ totalCost: number;
49
+ latencyMs: number;
50
+ status: 'success' | 'error' | 'rate_limited';
51
+ errorMessage?: string;
52
+ mcpServerVersion: string;
53
+ template?: string;
54
+ }
55
+ export interface UsageStats {
56
+ periodStart: string;
57
+ periodEnd: string;
58
+ totalRequests: number;
59
+ successfulRequests: number;
60
+ failedRequests: number;
61
+ rateLimitedRequests: number;
62
+ requestsByTool: Record<string, number>;
63
+ totalInputTokens: number;
64
+ totalOutputTokens: number;
65
+ totalTokens: number;
66
+ totalInputCost: number;
67
+ totalOutputCost: number;
68
+ totalCost: number;
69
+ averageCostPerRequest: number;
70
+ averageLatencyMs: number;
71
+ p95LatencyMs: number;
72
+ uniqueUsers: number;
73
+ topUsers: Array<{
74
+ userHash: string;
75
+ requestCount: number;
76
+ totalCost: number;
77
+ }>;
78
+ }
79
+ export interface RateLimitInfo {
80
+ remaining: number;
81
+ limit: number;
82
+ resetAt: string;
83
+ tier: 'free' | 'basic' | 'pro' | 'unlimited';
84
+ }
85
+ declare const DEFAULT_RATE_LIMITS: {
86
+ free: number;
87
+ basic: number;
88
+ pro: number;
89
+ unlimited: number;
90
+ };
91
+ /**
92
+ * Calculate cost for a request based on model and token usage
93
+ */
94
+ export declare function calculateCost(model: string, inputTokens: number, outputTokens: number, isThinking?: boolean): {
95
+ inputCost: number;
96
+ outputCost: number;
97
+ totalCost: number;
98
+ };
99
+ /**
100
+ * Estimate token count from text (rough approximation)
101
+ * More accurate would use tiktoken, but this is good for estimation
102
+ */
103
+ export declare function estimateTokens(text: string): number;
104
+ /**
105
+ * Hash a user identifier for privacy
106
+ */
107
+ export declare function hashUser(identifier: string): string;
108
+ /**
109
+ * Track a usage event
110
+ */
111
+ export declare function trackUsage(params: {
112
+ tool: UsageRecord['tool'];
113
+ endpoint: string;
114
+ model?: string;
115
+ inputText?: string;
116
+ outputText?: string;
117
+ inputTokens?: number;
118
+ outputTokens?: number;
119
+ latencyMs: number;
120
+ status: UsageRecord['status'];
121
+ errorMessage?: string;
122
+ userIdentifier?: string;
123
+ clientId?: string;
124
+ template?: string;
125
+ }): Promise<UsageRecord>;
126
+ /**
127
+ * Check if a user is rate limited
128
+ */
129
+ export declare function checkRateLimit(userIdentifier: string, tier?: keyof typeof DEFAULT_RATE_LIMITS): RateLimitInfo;
130
+ /**
131
+ * Increment rate limit counter for a user
132
+ */
133
+ export declare function incrementRateLimit(userIdentifier: string): void;
134
+ /**
135
+ * Check if user is rate limited and return headers
136
+ */
137
+ export declare function getRateLimitHeaders(userIdentifier: string, tier?: keyof typeof DEFAULT_RATE_LIMITS): Record<string, string>;
138
+ /**
139
+ * Get usage statistics for a time period
140
+ */
141
+ export declare function getUsageStats(startTime?: Date, endTime?: Date): UsageStats;
142
+ /**
143
+ * Get daily cost summary for the last N days
144
+ */
145
+ export declare function getDailyCosts(days?: number): Array<{
146
+ date: string;
147
+ requests: number;
148
+ totalCost: number;
149
+ inputCost: number;
150
+ outputCost: number;
151
+ }>;
152
+ /**
153
+ * Export all usage records (for backup/analysis)
154
+ */
155
+ export declare function exportUsageRecords(): UsageRecord[];
156
+ /**
157
+ * Clear local usage records
158
+ */
159
+ export declare function clearUsageRecords(): void;
160
+ export {};
161
+ //# 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,363 @@
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
+ export const GEMINI_PRICING = {
14
+ 'gemini-2.5-flash': {
15
+ inputPerMillion: 0.075, // $0.075 per 1M input tokens
16
+ outputPerMillion: 0.30, // $0.30 per 1M output tokens
17
+ // Thinking mode pricing (when used)
18
+ thinkingInputPerMillion: 0.075,
19
+ thinkingOutputPerMillion: 1.25,
20
+ },
21
+ 'gemini-2.5-pro': {
22
+ inputPerMillion: 1.25, // $1.25 per 1M input tokens
23
+ outputPerMillion: 10.00, // $10.00 per 1M output tokens (>200k context)
24
+ },
25
+ 'gemini-2.0-flash': {
26
+ inputPerMillion: 0.10,
27
+ outputPerMillion: 0.40,
28
+ },
29
+ 'gemini-1.5-flash': {
30
+ inputPerMillion: 0.075,
31
+ outputPerMillion: 0.30,
32
+ },
33
+ 'gemini-1.5-pro': {
34
+ inputPerMillion: 1.25,
35
+ outputPerMillion: 5.00,
36
+ },
37
+ // Default fallback
38
+ 'default': {
39
+ inputPerMillion: 0.10,
40
+ outputPerMillion: 0.40,
41
+ }
42
+ };
43
+ // ============================================================================
44
+ // IN-MEMORY STORAGE (for local tracking - sends to backend periodically)
45
+ // ============================================================================
46
+ const usageRecords = [];
47
+ const MAX_LOCAL_RECORDS = 1000; // Keep last 1000 records locally
48
+ // Per-user rate limiting (in-memory for quick checks)
49
+ const userRequestCounts = new Map();
50
+ const RATE_LIMIT_WINDOW_MS = 60 * 60 * 1000; // 1 hour window
51
+ const DEFAULT_RATE_LIMITS = {
52
+ free: 50, // 50 requests per hour
53
+ basic: 200, // 200 requests per hour
54
+ pro: 1000, // 1000 requests per hour
55
+ unlimited: Infinity,
56
+ };
57
+ // ============================================================================
58
+ // COST CALCULATION
59
+ // ============================================================================
60
+ /**
61
+ * Calculate cost for a request based on model and token usage
62
+ */
63
+ export function calculateCost(model, inputTokens, outputTokens, isThinking = false) {
64
+ const normalizedModel = model.toLowerCase();
65
+ const pricing = GEMINI_PRICING[normalizedModel] || GEMINI_PRICING.default;
66
+ let inputRate = pricing.inputPerMillion;
67
+ let outputRate = pricing.outputPerMillion;
68
+ // Use thinking rates if applicable
69
+ if (isThinking && 'thinkingOutputPerMillion' in pricing) {
70
+ const thinkingPricing = pricing;
71
+ inputRate = thinkingPricing.thinkingInputPerMillion || inputRate;
72
+ outputRate = thinkingPricing.thinkingOutputPerMillion || outputRate;
73
+ }
74
+ const inputCost = (inputTokens / 1_000_000) * inputRate;
75
+ const outputCost = (outputTokens / 1_000_000) * outputRate;
76
+ return {
77
+ inputCost: Math.round(inputCost * 1_000_000) / 1_000_000, // 6 decimal precision
78
+ outputCost: Math.round(outputCost * 1_000_000) / 1_000_000,
79
+ totalCost: Math.round((inputCost + outputCost) * 1_000_000) / 1_000_000,
80
+ };
81
+ }
82
+ /**
83
+ * Estimate token count from text (rough approximation)
84
+ * More accurate would use tiktoken, but this is good for estimation
85
+ */
86
+ export function estimateTokens(text) {
87
+ if (!text)
88
+ return 0;
89
+ // Rough estimate: ~4 characters per token for English
90
+ // Gemini models are similar to GPT tokenization
91
+ return Math.ceil(text.length / 4);
92
+ }
93
+ // ============================================================================
94
+ // USAGE TRACKING
95
+ // ============================================================================
96
+ /**
97
+ * Generate a unique ID for a usage record
98
+ */
99
+ function generateId() {
100
+ return `mcp_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
101
+ }
102
+ /**
103
+ * Hash a user identifier for privacy
104
+ */
105
+ export function hashUser(identifier) {
106
+ // Simple hash for privacy - not cryptographically secure but sufficient for analytics
107
+ let hash = 0;
108
+ for (let i = 0; i < identifier.length; i++) {
109
+ const char = identifier.charCodeAt(i);
110
+ hash = ((hash << 5) - hash) + char;
111
+ hash = hash & hash; // Convert to 32-bit integer
112
+ }
113
+ return `user_${Math.abs(hash).toString(36)}`;
114
+ }
115
+ /**
116
+ * Track a usage event
117
+ */
118
+ export async function trackUsage(params) {
119
+ const { tool, endpoint, model = 'gemini-2.5-flash', inputText, outputText, latencyMs, status, errorMessage, userIdentifier, clientId, template, } = params;
120
+ // Calculate tokens
121
+ const inputTokens = params.inputTokens ?? estimateTokens(inputText || '');
122
+ const outputTokens = params.outputTokens ?? estimateTokens(outputText || '');
123
+ const totalTokens = inputTokens + outputTokens;
124
+ // Calculate cost
125
+ const costs = calculateCost(model, inputTokens, outputTokens);
126
+ // Create record
127
+ const record = {
128
+ id: generateId(),
129
+ timestamp: new Date().toISOString(),
130
+ tool,
131
+ endpoint,
132
+ model,
133
+ userHash: userIdentifier ? hashUser(userIdentifier) : undefined,
134
+ clientId,
135
+ inputTokens,
136
+ outputTokens,
137
+ totalTokens,
138
+ inputCost: costs.inputCost,
139
+ outputCost: costs.outputCost,
140
+ totalCost: costs.totalCost,
141
+ latencyMs,
142
+ status,
143
+ errorMessage,
144
+ mcpServerVersion: VERSION,
145
+ template,
146
+ };
147
+ // Store locally
148
+ usageRecords.push(record);
149
+ // Trim if too many records
150
+ if (usageRecords.length > MAX_LOCAL_RECORDS) {
151
+ usageRecords.splice(0, usageRecords.length - MAX_LOCAL_RECORDS);
152
+ }
153
+ // Log for debugging
154
+ logger.debug('Usage tracked', {
155
+ tool,
156
+ tokens: totalTokens,
157
+ cost: `$${costs.totalCost.toFixed(6)}`,
158
+ latency: `${latencyMs}ms`,
159
+ status,
160
+ });
161
+ // Send to backend asynchronously (fire and forget)
162
+ sendToBackend(record).catch(err => {
163
+ logger.warn('Failed to send usage to backend', { error: err.message });
164
+ });
165
+ return record;
166
+ }
167
+ /**
168
+ * Send usage record to PromptArchitect backend
169
+ */
170
+ async function sendToBackend(record) {
171
+ const apiUrl = process.env.PROMPTARCHITECT_API_URL ||
172
+ 'https://us-central1-prompt-architect-3df7a.cloudfunctions.net/api';
173
+ try {
174
+ const response = await fetch(`${apiUrl}/mcp/usage`, {
175
+ method: 'POST',
176
+ headers: {
177
+ 'Content-Type': 'application/json',
178
+ 'X-Client': 'mcp-server',
179
+ 'X-Client-Version': VERSION,
180
+ },
181
+ body: JSON.stringify(record),
182
+ });
183
+ if (!response.ok) {
184
+ throw new Error(`HTTP ${response.status}`);
185
+ }
186
+ }
187
+ catch (error) {
188
+ // Silently fail - usage tracking shouldn't break main functionality
189
+ logger.debug('Backend usage tracking failed', { error });
190
+ }
191
+ }
192
+ // ============================================================================
193
+ // RATE LIMITING
194
+ // ============================================================================
195
+ /**
196
+ * Check if a user is rate limited
197
+ */
198
+ export function checkRateLimit(userIdentifier, tier = 'free') {
199
+ const userHash = hashUser(userIdentifier);
200
+ const now = Date.now();
201
+ const limit = DEFAULT_RATE_LIMITS[tier];
202
+ // Get or create user's request count
203
+ let userData = userRequestCounts.get(userHash);
204
+ if (!userData || now - userData.windowStart >= RATE_LIMIT_WINDOW_MS) {
205
+ // New window
206
+ userData = { count: 0, windowStart: now };
207
+ userRequestCounts.set(userHash, userData);
208
+ }
209
+ const windowEnd = userData.windowStart + RATE_LIMIT_WINDOW_MS;
210
+ const remaining = Math.max(0, limit - userData.count);
211
+ return {
212
+ remaining,
213
+ limit: limit === Infinity ? -1 : limit, // -1 indicates unlimited
214
+ resetAt: new Date(windowEnd).toISOString(),
215
+ tier,
216
+ };
217
+ }
218
+ /**
219
+ * Increment rate limit counter for a user
220
+ */
221
+ export function incrementRateLimit(userIdentifier) {
222
+ const userHash = hashUser(userIdentifier);
223
+ const now = Date.now();
224
+ let userData = userRequestCounts.get(userHash);
225
+ if (!userData || now - userData.windowStart >= RATE_LIMIT_WINDOW_MS) {
226
+ userData = { count: 1, windowStart: now };
227
+ }
228
+ else {
229
+ userData.count++;
230
+ }
231
+ userRequestCounts.set(userHash, userData);
232
+ }
233
+ /**
234
+ * Check if user is rate limited and return headers
235
+ */
236
+ export function getRateLimitHeaders(userIdentifier, tier = 'free') {
237
+ const info = checkRateLimit(userIdentifier, tier);
238
+ return {
239
+ 'X-RateLimit-Limit': info.limit === -1 ? 'unlimited' : String(info.limit),
240
+ 'X-RateLimit-Remaining': String(info.remaining),
241
+ 'X-RateLimit-Reset': info.resetAt,
242
+ 'X-RateLimit-Tier': info.tier,
243
+ };
244
+ }
245
+ // ============================================================================
246
+ // ANALYTICS
247
+ // ============================================================================
248
+ /**
249
+ * Get usage statistics for a time period
250
+ */
251
+ export function getUsageStats(startTime, endTime) {
252
+ const start = startTime || new Date(Date.now() - 24 * 60 * 60 * 1000); // Default: last 24h
253
+ const end = endTime || new Date();
254
+ const filtered = usageRecords.filter(r => {
255
+ const ts = new Date(r.timestamp);
256
+ return ts >= start && ts <= end;
257
+ });
258
+ // Calculate stats
259
+ const stats = {
260
+ periodStart: start.toISOString(),
261
+ periodEnd: end.toISOString(),
262
+ totalRequests: filtered.length,
263
+ successfulRequests: filtered.filter(r => r.status === 'success').length,
264
+ failedRequests: filtered.filter(r => r.status === 'error').length,
265
+ rateLimitedRequests: filtered.filter(r => r.status === 'rate_limited').length,
266
+ requestsByTool: {},
267
+ totalInputTokens: 0,
268
+ totalOutputTokens: 0,
269
+ totalTokens: 0,
270
+ totalInputCost: 0,
271
+ totalOutputCost: 0,
272
+ totalCost: 0,
273
+ averageCostPerRequest: 0,
274
+ averageLatencyMs: 0,
275
+ p95LatencyMs: 0,
276
+ uniqueUsers: 0,
277
+ topUsers: [],
278
+ };
279
+ // Aggregate
280
+ const userStats = new Map();
281
+ const latencies = [];
282
+ for (const record of filtered) {
283
+ // By tool
284
+ stats.requestsByTool[record.tool] = (stats.requestsByTool[record.tool] || 0) + 1;
285
+ // Tokens
286
+ stats.totalInputTokens += record.inputTokens;
287
+ stats.totalOutputTokens += record.outputTokens;
288
+ stats.totalTokens += record.totalTokens;
289
+ // Costs
290
+ stats.totalInputCost += record.inputCost;
291
+ stats.totalOutputCost += record.outputCost;
292
+ stats.totalCost += record.totalCost;
293
+ // Latency
294
+ latencies.push(record.latencyMs);
295
+ // User stats
296
+ if (record.userHash) {
297
+ const existing = userStats.get(record.userHash) || { count: 0, cost: 0 };
298
+ existing.count++;
299
+ existing.cost += record.totalCost;
300
+ userStats.set(record.userHash, existing);
301
+ }
302
+ }
303
+ // Calculate averages
304
+ if (filtered.length > 0) {
305
+ stats.averageCostPerRequest = stats.totalCost / filtered.length;
306
+ stats.averageLatencyMs = latencies.reduce((a, b) => a + b, 0) / latencies.length;
307
+ // P95 latency
308
+ latencies.sort((a, b) => a - b);
309
+ const p95Index = Math.floor(latencies.length * 0.95);
310
+ stats.p95LatencyMs = latencies[p95Index] || 0;
311
+ }
312
+ // User stats
313
+ stats.uniqueUsers = userStats.size;
314
+ stats.topUsers = Array.from(userStats.entries())
315
+ .map(([userHash, data]) => ({ userHash, requestCount: data.count, totalCost: data.cost }))
316
+ .sort((a, b) => b.requestCount - a.requestCount)
317
+ .slice(0, 10);
318
+ // Round costs
319
+ stats.totalInputCost = Math.round(stats.totalInputCost * 1_000_000) / 1_000_000;
320
+ stats.totalOutputCost = Math.round(stats.totalOutputCost * 1_000_000) / 1_000_000;
321
+ stats.totalCost = Math.round(stats.totalCost * 1_000_000) / 1_000_000;
322
+ stats.averageCostPerRequest = Math.round(stats.averageCostPerRequest * 1_000_000) / 1_000_000;
323
+ return stats;
324
+ }
325
+ /**
326
+ * Get daily cost summary for the last N days
327
+ */
328
+ export function getDailyCosts(days = 7) {
329
+ const results = [];
330
+ for (let i = 0; i < days; i++) {
331
+ const date = new Date();
332
+ date.setDate(date.getDate() - i);
333
+ date.setHours(0, 0, 0, 0);
334
+ const nextDate = new Date(date);
335
+ nextDate.setDate(nextDate.getDate() + 1);
336
+ const dayRecords = usageRecords.filter(r => {
337
+ const ts = new Date(r.timestamp);
338
+ return ts >= date && ts < nextDate;
339
+ });
340
+ results.push({
341
+ date: date.toISOString().slice(0, 10),
342
+ requests: dayRecords.length,
343
+ totalCost: dayRecords.reduce((sum, r) => sum + r.totalCost, 0),
344
+ inputCost: dayRecords.reduce((sum, r) => sum + r.inputCost, 0),
345
+ outputCost: dayRecords.reduce((sum, r) => sum + r.outputCost, 0),
346
+ });
347
+ }
348
+ return results.reverse(); // Oldest first
349
+ }
350
+ /**
351
+ * Export all usage records (for backup/analysis)
352
+ */
353
+ export function exportUsageRecords() {
354
+ return [...usageRecords];
355
+ }
356
+ /**
357
+ * Clear local usage records
358
+ */
359
+ export function clearUsageRecords() {
360
+ usageRecords.length = 0;
361
+ logger.info('Usage records cleared');
362
+ }
363
+ //# sourceMappingURL=usageTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usageTracker.js","sourceRoot":"","sources":["../../src/utils/usageTracker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,+EAA+E;AAC/E,kCAAkC;AAClC,gCAAgC;AAChC,+EAA+E;AAE/E,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,kBAAkB,EAAE;QAClB,eAAe,EAAE,KAAK,EAAK,6BAA6B;QACxD,gBAAgB,EAAE,IAAI,EAAK,6BAA6B;QACxD,oCAAoC;QACpC,uBAAuB,EAAE,KAAK;QAC9B,wBAAwB,EAAE,IAAI;KAC/B;IACD,gBAAgB,EAAE;QAChB,eAAe,EAAE,IAAI,EAAM,4BAA4B;QACvD,gBAAgB,EAAE,KAAK,EAAI,8CAA8C;KAC1E;IACD,kBAAkB,EAAE;QAClB,eAAe,EAAE,IAAI;QACrB,gBAAgB,EAAE,IAAI;KACvB;IACD,kBAAkB,EAAE;QAClB,eAAe,EAAE,KAAK;QACtB,gBAAgB,EAAE,IAAI;KACvB;IACD,gBAAgB,EAAE;QAChB,eAAe,EAAE,IAAI;QACrB,gBAAgB,EAAE,IAAI;KACvB;IACD,mBAAmB;IACnB,SAAS,EAAE;QACT,eAAe,EAAE,IAAI;QACrB,gBAAgB,EAAE,IAAI;KACvB;CACO,CAAC;AAiFX,+EAA+E;AAC/E,yEAAyE;AACzE,+EAA+E;AAE/E,MAAM,YAAY,GAAkB,EAAE,CAAC;AACvC,MAAM,iBAAiB,GAAG,IAAI,CAAC,CAAE,iCAAiC;AAElE,sDAAsD;AACtD,MAAM,iBAAiB,GAAwD,IAAI,GAAG,EAAE,CAAC;AACzF,MAAM,oBAAoB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAE,gBAAgB;AAC9D,MAAM,mBAAmB,GAAG;IAC1B,IAAI,EAAE,EAAE,EAAO,uBAAuB;IACtC,KAAK,EAAE,GAAG,EAAK,wBAAwB;IACvC,GAAG,EAAE,IAAI,EAAM,yBAAyB;IACxC,SAAS,EAAE,QAAQ;CACpB,CAAC;AAEF,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAa,EACb,WAAmB,EACnB,YAAoB,EACpB,aAAsB,KAAK;IAE3B,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC5C,MAAM,OAAO,GAAG,cAAc,CAAC,eAA8C,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC;IAEzG,IAAI,SAAS,GAAW,OAAO,CAAC,eAAe,CAAC;IAChD,IAAI,UAAU,GAAW,OAAO,CAAC,gBAAgB,CAAC;IAElD,mCAAmC;IACnC,IAAI,UAAU,IAAI,0BAA0B,IAAI,OAAO,EAAE,CAAC;QACxD,MAAM,eAAe,GAAG,OAAoD,CAAC;QAC7E,SAAS,GAAG,eAAe,CAAC,uBAAuB,IAAI,SAAS,CAAC;QACjE,UAAU,GAAG,eAAe,CAAC,wBAAwB,IAAI,UAAU,CAAC;IACtE,CAAC;IAED,MAAM,SAAS,GAAG,CAAC,WAAW,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;IACxD,MAAM,UAAU,GAAG,CAAC,YAAY,GAAG,SAAS,CAAC,GAAG,UAAU,CAAC;IAE3D,OAAO;QACL,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG,SAAS,EAAG,sBAAsB;QACjF,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC,GAAG,SAAS;QAC1D,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS;KACxE,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC;IACpB,sDAAsD;IACtD,gDAAgD;IAChD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E;;GAEG;AACH,SAAS,UAAU;IACjB,OAAO,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AACvE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,UAAkB;IACzC,sFAAsF;IACtF,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;QACnC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,4BAA4B;IAClD,CAAC;IACD,OAAO,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAchC;IACC,MAAM,EACJ,IAAI,EACJ,QAAQ,EACR,KAAK,GAAG,kBAAkB,EAC1B,SAAS,EACT,UAAU,EACV,SAAS,EACT,MAAM,EACN,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,QAAQ,GACT,GAAG,MAAM,CAAC;IAEX,mBAAmB;IACnB,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,cAAc,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAC1E,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,cAAc,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IAC7E,MAAM,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC;IAE/C,iBAAiB;IACjB,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IAE9D,gBAAgB;IAChB,MAAM,MAAM,GAAgB;QAC1B,EAAE,EAAE,UAAU,EAAE;QAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,IAAI;QACJ,QAAQ;QACR,KAAK;QACL,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS;QAC/D,QAAQ;QACR,WAAW;QACX,YAAY;QACZ,WAAW;QACX,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,SAAS;QACT,MAAM;QACN,YAAY;QACZ,gBAAgB,EAAE,OAAO;QACzB,QAAQ;KACT,CAAC;IAEF,gBAAgB;IAChB,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAE1B,2BAA2B;IAC3B,IAAI,YAAY,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;QAC5C,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,MAAM,GAAG,iBAAiB,CAAC,CAAC;IAClE,CAAC;IAED,oBAAoB;IACpB,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE;QAC5B,IAAI;QACJ,MAAM,EAAE,WAAW;QACnB,IAAI,EAAE,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACtC,OAAO,EAAE,GAAG,SAAS,IAAI;QACzB,MAAM;KACP,CAAC,CAAC;IAEH,mDAAmD;IACnD,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;QAChC,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAAC,MAAmB;IAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB;QAChD,mEAAmE,CAAC;IAEtE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,YAAY,EAAE;YAClD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,UAAU,EAAE,YAAY;gBACxB,kBAAkB,EAAE,OAAO;aAC5B;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;SAC7B,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,oEAAoE;QACpE,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,cAAsB,EACtB,OAAyC,MAAM;IAE/C,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAExC,qCAAqC;IACrC,IAAI,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE/C,IAAI,CAAC,QAAQ,IAAI,GAAG,GAAG,QAAQ,CAAC,WAAW,IAAI,oBAAoB,EAAE,CAAC;QACpE,aAAa;QACb,QAAQ,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;QAC1C,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,GAAG,oBAAoB,CAAC;IAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEtD,OAAO;QACL,SAAS;QACT,KAAK,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAG,yBAAyB;QAClE,OAAO,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;QAC1C,IAAI;KACL,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,cAAsB;IACvD,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,IAAI,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE/C,IAAI,CAAC,QAAQ,IAAI,GAAG,GAAG,QAAQ,CAAC,WAAW,IAAI,oBAAoB,EAAE,CAAC;QACpE,QAAQ,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;IAED,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,cAAsB,EACtB,OAAyC,MAAM;IAE/C,MAAM,IAAI,GAAG,cAAc,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IAElD,OAAO;QACL,mBAAmB,EAAE,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QACzE,uBAAuB,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;QAC/C,mBAAmB,EAAE,IAAI,CAAC,OAAO;QACjC,kBAAkB,EAAE,IAAI,CAAC,IAAI;KAC9B,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,SAAgB,EAChB,OAAc;IAEd,MAAM,KAAK,GAAG,SAAS,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,oBAAoB;IAC5F,MAAM,GAAG,GAAG,OAAO,IAAI,IAAI,IAAI,EAAE,CAAC;IAElC,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QACvC,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACjC,OAAO,EAAE,IAAI,KAAK,IAAI,EAAE,IAAI,GAAG,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,kBAAkB;IAClB,MAAM,KAAK,GAAe;QACxB,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE;QAChC,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE;QAC5B,aAAa,EAAE,QAAQ,CAAC,MAAM;QAC9B,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM;QACvE,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,MAAM;QACjE,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,cAAc,CAAC,CAAC,MAAM;QAC7E,cAAc,EAAE,EAAE;QAClB,gBAAgB,EAAE,CAAC;QACnB,iBAAiB,EAAE,CAAC;QACpB,WAAW,EAAE,CAAC;QACd,cAAc,EAAE,CAAC;QACjB,eAAe,EAAE,CAAC;QAClB,SAAS,EAAE,CAAC;QACZ,qBAAqB,EAAE,CAAC;QACxB,gBAAgB,EAAE,CAAC;QACnB,YAAY,EAAE,CAAC;QACf,WAAW,EAAE,CAAC;QACd,QAAQ,EAAE,EAAE;KACb,CAAC;IAEF,YAAY;IACZ,MAAM,SAAS,GAAG,IAAI,GAAG,EAA2C,CAAC;IACrE,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,UAAU;QACV,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAEjF,SAAS;QACT,KAAK,CAAC,gBAAgB,IAAI,MAAM,CAAC,WAAW,CAAC;QAC7C,KAAK,CAAC,iBAAiB,IAAI,MAAM,CAAC,YAAY,CAAC;QAC/C,KAAK,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC;QAExC,QAAQ;QACR,KAAK,CAAC,cAAc,IAAI,MAAM,CAAC,SAAS,CAAC;QACzC,KAAK,CAAC,eAAe,IAAI,MAAM,CAAC,UAAU,CAAC;QAC3C,KAAK,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC;QAEpC,UAAU;QACV,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAEjC,aAAa;QACb,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACzE,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjB,QAAQ,CAAC,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC;YAClC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,qBAAqB,GAAG,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC;QAChE,KAAK,CAAC,gBAAgB,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;QAEjF,cAAc;QACd,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACrD,KAAK,CAAC,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,aAAa;IACb,KAAK,CAAC,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC;IACnC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;SAC7C,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;SACzF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC;SAC/C,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEhB,cAAc;IACd,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;IAChF,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;IAClF,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;IACtE,KAAK,CAAC,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,qBAAqB,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;IAE9F,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe,CAAC;IAO5C,MAAM,OAAO,GAMR,EAAE,CAAC;IAER,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAE1B,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QAEzC,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YACzC,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACjC,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,GAAG,QAAQ,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YACrC,QAAQ,EAAE,UAAU,CAAC,MAAM;YAC3B,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;YAC9D,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;YAC9D,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;SACjE,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,CAAE,eAAe;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,CAAC,GAAG,YAAY,CAAC,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IACxB,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;AACvC,CAAC"}
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.1",
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",