@pcircle/claude-code-buddy-mcp 2.3.10 → 2.4.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.
- package/dist/core/HookIntegration.d.ts +5 -1
- package/dist/core/HookIntegration.d.ts.map +1 -1
- package/dist/core/HookIntegration.js +73 -46
- package/dist/core/HookIntegration.js.map +1 -1
- package/dist/core/TestOutputParser.d.ts +20 -0
- package/dist/core/TestOutputParser.d.ts.map +1 -0
- package/dist/core/TestOutputParser.js +144 -0
- package/dist/core/TestOutputParser.js.map +1 -0
- package/dist/mcp/resources/best-practices.md +67 -0
- package/dist/mcp/resources/examples.md +56 -0
- package/dist/mcp/resources/quick-reference.md +73 -0
- package/dist/mcp/resources/usage-guide.md +92 -0
- package/dist/memory/ProjectAutoTracker.d.ts +13 -0
- package/dist/memory/ProjectAutoTracker.d.ts.map +1 -1
- package/dist/memory/ProjectAutoTracker.js +89 -5
- package/dist/memory/ProjectAutoTracker.js.map +1 -1
- package/package.json +3 -2
- package/plugin.json +1 -1
- package/dist/__benchmarks__/performance-fixes.bench.d.ts +0 -8
- package/dist/__benchmarks__/performance-fixes.bench.d.ts.map +0 -1
- package/dist/__benchmarks__/performance-fixes.bench.js +0 -213
- package/dist/__benchmarks__/performance-fixes.bench.js.map +0 -1
- package/dist/core/BackgroundExecutorConstants.d.ts +0 -8
- package/dist/core/BackgroundExecutorConstants.d.ts.map +0 -1
- package/dist/core/BackgroundExecutorConstants.js +0 -8
- package/dist/core/BackgroundExecutorConstants.js.map +0 -1
- package/dist/evolution/LearningManagerConstants.d.ts +0 -55
- package/dist/evolution/LearningManagerConstants.d.ts.map +0 -1
- package/dist/evolution/LearningManagerConstants.js +0 -55
- package/dist/evolution/LearningManagerConstants.js.map +0 -1
- package/dist/evolution/PerformanceTrackerConstants.d.ts +0 -5
- package/dist/evolution/PerformanceTrackerConstants.d.ts.map +0 -1
- package/dist/evolution/PerformanceTrackerConstants.js +0 -5
- package/dist/evolution/PerformanceTrackerConstants.js.map +0 -1
- package/dist/orchestrator/GlobalResourcePoolConstants.d.ts +0 -22
- package/dist/orchestrator/GlobalResourcePoolConstants.d.ts.map +0 -1
- package/dist/orchestrator/GlobalResourcePoolConstants.js +0 -22
- package/dist/orchestrator/GlobalResourcePoolConstants.js.map +0 -1
- package/dist/orchestrator/TaskAnalyzerConstants.d.ts +0 -16
- package/dist/orchestrator/TaskAnalyzerConstants.d.ts.map +0 -1
- package/dist/orchestrator/TaskAnalyzerConstants.js +0 -16
- package/dist/orchestrator/TaskAnalyzerConstants.js.map +0 -1
- package/dist/templates/git-education-templates.d.ts +0 -26
- package/dist/templates/git-education-templates.d.ts.map +0 -1
- package/dist/templates/git-education-templates.js +0 -455
- package/dist/templates/git-education-templates.js.map +0 -1
- package/dist/utils/SecureKeyStore.d.ts +0 -10
- package/dist/utils/SecureKeyStore.d.ts.map +0 -1
- package/dist/utils/SecureKeyStore.js +0 -32
- package/dist/utils/SecureKeyStore.js.map +0 -1
- package/dist/utils/cost-tracker.d.ts +0 -34
- package/dist/utils/cost-tracker.d.ts.map +0 -1
- package/dist/utils/cost-tracker.js +0 -92
- package/dist/utils/cost-tracker.js.map +0 -1
- package/dist/utils/validation.d.ts +0 -7
- package/dist/utils/validation.d.ts.map +0 -1
- package/dist/utils/validation.js +0 -62
- package/dist/utils/validation.js.map +0 -1
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { MODEL_COSTS } from '../config/models.js';
|
|
2
|
-
import { appConfig } from '../config/index.js';
|
|
3
|
-
import { logger } from './logger.js';
|
|
4
|
-
class CostTracker {
|
|
5
|
-
records = [];
|
|
6
|
-
monthlyBudget;
|
|
7
|
-
alertThreshold;
|
|
8
|
-
constructor() {
|
|
9
|
-
this.monthlyBudget = appConfig.costs.monthlyBudget;
|
|
10
|
-
this.alertThreshold = appConfig.costs.alertThreshold;
|
|
11
|
-
}
|
|
12
|
-
trackClaude(model, inputTokens, outputTokens) {
|
|
13
|
-
const costs = MODEL_COSTS[model];
|
|
14
|
-
const cost = (inputTokens / 1_000_000) * costs.input + (outputTokens / 1_000_000) * costs.output;
|
|
15
|
-
this.addRecord({
|
|
16
|
-
timestamp: new Date(),
|
|
17
|
-
service: 'claude',
|
|
18
|
-
model,
|
|
19
|
-
inputTokens,
|
|
20
|
-
outputTokens,
|
|
21
|
-
cost,
|
|
22
|
-
});
|
|
23
|
-
return cost;
|
|
24
|
-
}
|
|
25
|
-
trackWhisper(minutes) {
|
|
26
|
-
const cost = minutes * MODEL_COSTS['whisper-1'].perMinute;
|
|
27
|
-
this.addRecord({
|
|
28
|
-
timestamp: new Date(),
|
|
29
|
-
service: 'whisper',
|
|
30
|
-
model: 'whisper-1',
|
|
31
|
-
minutes,
|
|
32
|
-
cost,
|
|
33
|
-
});
|
|
34
|
-
return cost;
|
|
35
|
-
}
|
|
36
|
-
trackTTS(characters) {
|
|
37
|
-
const cost = (characters / 1000) * MODEL_COSTS['tts-1'].per1KChars;
|
|
38
|
-
this.addRecord({
|
|
39
|
-
timestamp: new Date(),
|
|
40
|
-
service: 'tts',
|
|
41
|
-
model: 'tts-1',
|
|
42
|
-
characters,
|
|
43
|
-
cost,
|
|
44
|
-
});
|
|
45
|
-
return cost;
|
|
46
|
-
}
|
|
47
|
-
trackEmbeddings(tokens) {
|
|
48
|
-
const cost = (tokens / 1_000_000) * MODEL_COSTS['text-embedding-3-small'].input;
|
|
49
|
-
this.addRecord({
|
|
50
|
-
timestamp: new Date(),
|
|
51
|
-
service: 'embeddings',
|
|
52
|
-
model: 'text-embedding-3-small',
|
|
53
|
-
inputTokens: tokens,
|
|
54
|
-
cost,
|
|
55
|
-
});
|
|
56
|
-
return cost;
|
|
57
|
-
}
|
|
58
|
-
addRecord(record) {
|
|
59
|
-
this.records.push(record);
|
|
60
|
-
const monthlyTotal = this.getMonthlyTotal();
|
|
61
|
-
if (monthlyTotal > this.monthlyBudget * this.alertThreshold) {
|
|
62
|
-
logger.warn(`⚠️ Cost alert: $${monthlyTotal.toFixed(2)} / $${this.monthlyBudget.toFixed(2)} (${((monthlyTotal / this.monthlyBudget) * 100).toFixed(1)}%)`);
|
|
63
|
-
}
|
|
64
|
-
if (monthlyTotal > this.monthlyBudget) {
|
|
65
|
-
logger.error(`🚨 Budget exceeded! $${monthlyTotal.toFixed(2)} / $${this.monthlyBudget.toFixed(2)}`);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
getMonthlyTotal() {
|
|
69
|
-
const now = new Date();
|
|
70
|
-
const monthStart = new Date(now.getFullYear(), now.getMonth(), 1);
|
|
71
|
-
return this.records
|
|
72
|
-
.filter((r) => r.timestamp >= monthStart)
|
|
73
|
-
.reduce((total, r) => total + r.cost, 0);
|
|
74
|
-
}
|
|
75
|
-
getReport() {
|
|
76
|
-
const monthlyTotal = this.getMonthlyTotal();
|
|
77
|
-
const breakdown = this.records.reduce((acc, r) => {
|
|
78
|
-
acc[r.service] = (acc[r.service] || 0) + r.cost;
|
|
79
|
-
return acc;
|
|
80
|
-
}, {});
|
|
81
|
-
return {
|
|
82
|
-
monthlyTotal,
|
|
83
|
-
budget: this.monthlyBudget,
|
|
84
|
-
remaining: this.monthlyBudget - monthlyTotal,
|
|
85
|
-
percentUsed: (monthlyTotal / this.monthlyBudget) * 100,
|
|
86
|
-
breakdown,
|
|
87
|
-
records: this.records,
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
export const costTracker = new CostTracker();
|
|
92
|
-
//# sourceMappingURL=cost-tracker.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cost-tracker.js","sourceRoot":"","sources":["../../src/utils/cost-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export declare function validateNonEmptyString(value: unknown, fieldName: string, context?: Record<string, unknown>): asserts value is string;
|
|
2
|
-
export declare function validateNonNegativeNumber(value: unknown, fieldName: string, context?: Record<string, unknown>): asserts value is number;
|
|
3
|
-
export declare function validateNumberInRange(value: unknown, fieldName: string, min: number, max: number, context?: Record<string, unknown>): asserts value is number;
|
|
4
|
-
export declare function validateBoolean(value: unknown, fieldName: string, context?: Record<string, unknown>): asserts value is boolean;
|
|
5
|
-
export declare function validateDefined<T>(value: T | null | undefined, fieldName: string, context?: Record<string, unknown>): asserts value is T;
|
|
6
|
-
export declare function validateNonEmptyArray<T>(value: unknown, fieldName: string, context?: Record<string, unknown>): asserts value is T[];
|
|
7
|
-
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAiBA,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,KAAK,IAAI,MAAM,CASzB;AAUD,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,KAAK,IAAI,MAAM,CASzB;AAYD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,KAAK,IAAI,MAAM,CAYzB;AAUD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,KAAK,IAAI,OAAO,CAS1B;AAUD,wBAAgB,eAAe,CAAC,CAAC,EAC/B,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,KAAK,IAAI,CAAC,CASpB;AAUD,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,KAAK,IAAI,CAAC,EAAE,CAStB"}
|
package/dist/utils/validation.js
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { ValidationError } from '../errors/index.js';
|
|
2
|
-
export function validateNonEmptyString(value, fieldName, context) {
|
|
3
|
-
if (!value || typeof value !== 'string' || value.trim() === '') {
|
|
4
|
-
throw new ValidationError(`${fieldName} must be a non-empty string`, {
|
|
5
|
-
field: fieldName,
|
|
6
|
-
providedValue: value,
|
|
7
|
-
constraint: 'non-empty string',
|
|
8
|
-
...context,
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
export function validateNonNegativeNumber(value, fieldName, context) {
|
|
13
|
-
if (typeof value !== 'number' || value < 0 || !Number.isFinite(value)) {
|
|
14
|
-
throw new ValidationError(`${fieldName} must be a non-negative number`, {
|
|
15
|
-
field: fieldName,
|
|
16
|
-
providedValue: value,
|
|
17
|
-
constraint: 'non-negative number',
|
|
18
|
-
...context,
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
export function validateNumberInRange(value, fieldName, min, max, context) {
|
|
23
|
-
if (typeof value !== 'number' || value < min || value > max || !Number.isFinite(value)) {
|
|
24
|
-
throw new ValidationError(`${fieldName} must be a number between ${min} and ${max}`, {
|
|
25
|
-
field: fieldName,
|
|
26
|
-
providedValue: value,
|
|
27
|
-
constraint: `${min} <= value <= ${max}`,
|
|
28
|
-
...context,
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
export function validateBoolean(value, fieldName, context) {
|
|
33
|
-
if (typeof value !== 'boolean') {
|
|
34
|
-
throw new ValidationError(`${fieldName} must be a boolean`, {
|
|
35
|
-
field: fieldName,
|
|
36
|
-
providedValue: value,
|
|
37
|
-
constraint: 'boolean type',
|
|
38
|
-
...context,
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
export function validateDefined(value, fieldName, context) {
|
|
43
|
-
if (value === null || value === undefined) {
|
|
44
|
-
throw new ValidationError(`${fieldName} must be defined`, {
|
|
45
|
-
field: fieldName,
|
|
46
|
-
providedValue: value,
|
|
47
|
-
constraint: 'defined (not null or undefined)',
|
|
48
|
-
...context,
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
export function validateNonEmptyArray(value, fieldName, context) {
|
|
53
|
-
if (!Array.isArray(value) || value.length === 0) {
|
|
54
|
-
throw new ValidationError(`${fieldName} must be a non-empty array`, {
|
|
55
|
-
field: fieldName,
|
|
56
|
-
providedValue: value,
|
|
57
|
-
constraint: 'non-empty array',
|
|
58
|
-
...context,
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
//# sourceMappingURL=validation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAUrD,MAAM,UAAU,sBAAsB,CACpC,KAAc,EACd,SAAiB,EACjB,OAAiC;IAEjC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC/D,MAAM,IAAI,eAAe,CAAC,GAAG,SAAS,6BAA6B,EAAE;YACnE,KAAK,EAAE,SAAS;YAChB,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,kBAAkB;YAC9B,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAUD,MAAM,UAAU,yBAAyB,CACvC,KAAc,EACd,SAAiB,EACjB,OAAiC;IAEjC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,eAAe,CAAC,GAAG,SAAS,gCAAgC,EAAE;YACtE,KAAK,EAAE,SAAS;YAChB,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,qBAAqB;YACjC,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAYD,MAAM,UAAU,qBAAqB,CACnC,KAAc,EACd,SAAiB,EACjB,GAAW,EACX,GAAW,EACX,OAAiC;IAEjC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACvF,MAAM,IAAI,eAAe,CACvB,GAAG,SAAS,6BAA6B,GAAG,QAAQ,GAAG,EAAE,EACzD;YACE,KAAK,EAAE,SAAS;YAChB,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,GAAG,GAAG,gBAAgB,GAAG,EAAE;YACvC,GAAG,OAAO;SACX,CACF,CAAC;IACJ,CAAC;AACH,CAAC;AAUD,MAAM,UAAU,eAAe,CAC7B,KAAc,EACd,SAAiB,EACjB,OAAiC;IAEjC,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,IAAI,eAAe,CAAC,GAAG,SAAS,oBAAoB,EAAE;YAC1D,KAAK,EAAE,SAAS;YAChB,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,cAAc;YAC1B,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAUD,MAAM,UAAU,eAAe,CAC7B,KAA2B,EAC3B,SAAiB,EACjB,OAAiC;IAEjC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,MAAM,IAAI,eAAe,CAAC,GAAG,SAAS,kBAAkB,EAAE;YACxD,KAAK,EAAE,SAAS;YAChB,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,iCAAiC;YAC7C,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAUD,MAAM,UAAU,qBAAqB,CACnC,KAAc,EACd,SAAiB,EACjB,OAAiC;IAEjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,eAAe,CAAC,GAAG,SAAS,4BAA4B,EAAE;YAClE,KAAK,EAAE,SAAS;YAChB,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,iBAAiB;YAC7B,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|