mycontext-cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +440 -0
- package/dist/cli/src/agents/implementations/CodeGenSubAgent.d.ts +43 -0
- package/dist/cli/src/agents/implementations/CodeGenSubAgent.d.ts.map +1 -0
- package/dist/cli/src/agents/implementations/CodeGenSubAgent.js +1440 -0
- package/dist/cli/src/agents/implementations/CodeGenSubAgent.js.map +1 -0
- package/dist/cli/src/agents/implementations/DocsSubAgent.d.ts +35 -0
- package/dist/cli/src/agents/implementations/DocsSubAgent.d.ts.map +1 -0
- package/dist/cli/src/agents/implementations/DocsSubAgent.js +351 -0
- package/dist/cli/src/agents/implementations/DocsSubAgent.js.map +1 -0
- package/dist/cli/src/agents/implementations/QASubAgent.d.ts +31 -0
- package/dist/cli/src/agents/implementations/QASubAgent.d.ts.map +1 -0
- package/dist/cli/src/agents/implementations/QASubAgent.js +190 -0
- package/dist/cli/src/agents/implementations/QASubAgent.js.map +1 -0
- package/dist/cli/src/agents/interfaces/SubAgent.d.ts +157 -0
- package/dist/cli/src/agents/interfaces/SubAgent.d.ts.map +1 -0
- package/dist/cli/src/agents/interfaces/SubAgent.js +7 -0
- package/dist/cli/src/agents/interfaces/SubAgent.js.map +1 -0
- package/dist/cli/src/agents/orchestrator/SubAgentOrchestrator.d.ts +59 -0
- package/dist/cli/src/agents/orchestrator/SubAgentOrchestrator.d.ts.map +1 -0
- package/dist/cli/src/agents/orchestrator/SubAgentOrchestrator.js +305 -0
- package/dist/cli/src/agents/orchestrator/SubAgentOrchestrator.js.map +1 -0
- package/dist/cli/src/agents/personalities/definitions.d.ts +34 -0
- package/dist/cli/src/agents/personalities/definitions.d.ts.map +1 -0
- package/dist/cli/src/agents/personalities/definitions.js +360 -0
- package/dist/cli/src/agents/personalities/definitions.js.map +1 -0
- package/dist/cli/src/cli.d.ts +3 -0
- package/dist/cli/src/cli.d.ts.map +1 -0
- package/dist/cli/src/cli.js +286 -0
- package/dist/cli/src/cli.js.map +1 -0
- package/dist/cli/src/commands/auth.d.ts +23 -0
- package/dist/cli/src/commands/auth.d.ts.map +1 -0
- package/dist/cli/src/commands/auth.js +212 -0
- package/dist/cli/src/commands/auth.js.map +1 -0
- package/dist/cli/src/commands/generate-components.d.ts +28 -0
- package/dist/cli/src/commands/generate-components.d.ts.map +1 -0
- package/dist/cli/src/commands/generate-components.js +680 -0
- package/dist/cli/src/commands/generate-components.js.map +1 -0
- package/dist/cli/src/commands/generate.d.ts +108 -0
- package/dist/cli/src/commands/generate.d.ts.map +1 -0
- package/dist/cli/src/commands/generate.js +1984 -0
- package/dist/cli/src/commands/generate.js.map +1 -0
- package/dist/cli/src/commands/init.d.ts +13 -0
- package/dist/cli/src/commands/init.d.ts.map +1 -0
- package/dist/cli/src/commands/init.js +91 -0
- package/dist/cli/src/commands/init.js.map +1 -0
- package/dist/cli/src/commands/list.d.ts +17 -0
- package/dist/cli/src/commands/list.d.ts.map +1 -0
- package/dist/cli/src/commands/list.js +209 -0
- package/dist/cli/src/commands/list.js.map +1 -0
- package/dist/cli/src/commands/preview.d.ts +23 -0
- package/dist/cli/src/commands/preview.d.ts.map +1 -0
- package/dist/cli/src/commands/preview.js +1200 -0
- package/dist/cli/src/commands/preview.js.map +1 -0
- package/dist/cli/src/commands/status.d.ts +21 -0
- package/dist/cli/src/commands/status.d.ts.map +1 -0
- package/dist/cli/src/commands/status.js +287 -0
- package/dist/cli/src/commands/status.js.map +1 -0
- package/dist/cli/src/commands/validate.d.ts +22 -0
- package/dist/cli/src/commands/validate.d.ts.map +1 -0
- package/dist/cli/src/commands/validate.js +259 -0
- package/dist/cli/src/commands/validate.js.map +1 -0
- package/dist/cli/src/types/index.d.ts +152 -0
- package/dist/cli/src/types/index.d.ts.map +1 -0
- package/dist/cli/src/types/index.js +3 -0
- package/dist/cli/src/types/index.js.map +1 -0
- package/dist/cli/src/utils/apiKeyManager.d.ts +137 -0
- package/dist/cli/src/utils/apiKeyManager.d.ts.map +1 -0
- package/dist/cli/src/utils/apiKeyManager.js +471 -0
- package/dist/cli/src/utils/apiKeyManager.js.map +1 -0
- package/dist/cli/src/utils/errorHandler.d.ts +105 -0
- package/dist/cli/src/utils/errorHandler.d.ts.map +1 -0
- package/dist/cli/src/utils/errorHandler.js +332 -0
- package/dist/cli/src/utils/errorHandler.js.map +1 -0
- package/dist/cli/src/utils/fileSystem.d.ts +58 -0
- package/dist/cli/src/utils/fileSystem.d.ts.map +1 -0
- package/dist/cli/src/utils/fileSystem.js +230 -0
- package/dist/cli/src/utils/fileSystem.js.map +1 -0
- package/dist/cli/src/utils/githubModels.d.ts +53 -0
- package/dist/cli/src/utils/githubModels.d.ts.map +1 -0
- package/dist/cli/src/utils/githubModels.js +239 -0
- package/dist/cli/src/utils/githubModels.js.map +1 -0
- package/dist/cli/src/utils/spinner.d.ts +28 -0
- package/dist/cli/src/utils/spinner.d.ts.map +1 -0
- package/dist/cli/src/utils/spinner.js +112 -0
- package/dist/cli/src/utils/spinner.js.map +1 -0
- package/dist/cli/src/utils/xaiClient.d.ts +59 -0
- package/dist/cli/src/utils/xaiClient.d.ts.map +1 -0
- package/dist/cli/src/utils/xaiClient.js +244 -0
- package/dist/cli/src/utils/xaiClient.js.map +1 -0
- package/dist/lib/analytics/usage-tracker.d.ts +125 -0
- package/dist/lib/analytics/usage-tracker.d.ts.map +1 -0
- package/dist/lib/analytics/usage-tracker.js +429 -0
- package/dist/lib/analytics/usage-tracker.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.XAIClient = void 0;
|
|
4
|
+
class XAIClient {
|
|
5
|
+
constructor(config) {
|
|
6
|
+
this.config = config;
|
|
7
|
+
this.baseUrl = config.baseUrl || "https://api.x.ai/v1";
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Generate content using X.AI API
|
|
11
|
+
*/
|
|
12
|
+
async generate(request) {
|
|
13
|
+
try {
|
|
14
|
+
const model = request.model || this.config.model || "grok-4";
|
|
15
|
+
const temperature = request.temperature || this.config.temperature || 0.7;
|
|
16
|
+
const maxTokens = request.maxTokens || this.config.maxTokens || 4000;
|
|
17
|
+
const stream = request.stream || false;
|
|
18
|
+
const messages = [];
|
|
19
|
+
if (request.systemPrompt) {
|
|
20
|
+
messages.push({ role: "system", content: request.systemPrompt });
|
|
21
|
+
}
|
|
22
|
+
messages.push({ role: "user", content: request.prompt });
|
|
23
|
+
const response = await fetch(`${this.baseUrl}/chat/completions`, {
|
|
24
|
+
method: "POST",
|
|
25
|
+
headers: {
|
|
26
|
+
"Content-Type": "application/json",
|
|
27
|
+
Authorization: `Bearer ${this.config.apiKey}`,
|
|
28
|
+
},
|
|
29
|
+
body: JSON.stringify({
|
|
30
|
+
messages,
|
|
31
|
+
model,
|
|
32
|
+
temperature,
|
|
33
|
+
max_tokens: maxTokens,
|
|
34
|
+
stream,
|
|
35
|
+
}),
|
|
36
|
+
});
|
|
37
|
+
if (!response.ok) {
|
|
38
|
+
const errorData = (await response.json().catch(() => ({})));
|
|
39
|
+
throw new Error(errorData.error?.message ||
|
|
40
|
+
`X.AI API error: ${response.status} ${response.statusText}`);
|
|
41
|
+
}
|
|
42
|
+
const data = (await response.json());
|
|
43
|
+
return {
|
|
44
|
+
content: data.choices[0]?.message?.content || "",
|
|
45
|
+
model: data.model || model,
|
|
46
|
+
usage: data.usage,
|
|
47
|
+
finishReason: data.choices[0]?.finish_reason,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
console.error("X.AI API error:", error);
|
|
52
|
+
throw new Error(`X.AI generation failed: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Generate context files using X.AI
|
|
57
|
+
*/
|
|
58
|
+
async generateContext(projectDescription) {
|
|
59
|
+
const systemPrompt = `You are an expert software architect and technical writer. Generate comprehensive context files for a React/Next.js project based on the description provided.`;
|
|
60
|
+
const prompt = `Generate comprehensive context files for a React/Next.js project with the following description:
|
|
61
|
+
|
|
62
|
+
${projectDescription}
|
|
63
|
+
|
|
64
|
+
Please generate the following files in JSON format:
|
|
65
|
+
|
|
66
|
+
1. **PRD (Product Requirements Document)**: A detailed product requirements document with user stories, acceptance criteria, and technical specifications.
|
|
67
|
+
|
|
68
|
+
2. **Types**: TypeScript type definitions for the project's data models, API responses, and component props.
|
|
69
|
+
|
|
70
|
+
3. **User Stories**: Detailed user stories with acceptance criteria, priority levels, and component mappings.
|
|
71
|
+
|
|
72
|
+
4. **Action Functions**: Server actions and client-side functions with parameters, return types, and descriptions.
|
|
73
|
+
|
|
74
|
+
5. **Component List**: A structured list of React components organized by groups with priorities and dependencies.
|
|
75
|
+
|
|
76
|
+
6. **Branding**: Design system configuration including colors, typography, spacing, and design principles.
|
|
77
|
+
|
|
78
|
+
Return the response as a JSON object with keys: "prd", "types", "userStories", "actionFunctions", "componentList", "branding".`;
|
|
79
|
+
const response = await this.generate({
|
|
80
|
+
prompt,
|
|
81
|
+
systemPrompt,
|
|
82
|
+
temperature: 0.7,
|
|
83
|
+
maxTokens: 8000,
|
|
84
|
+
});
|
|
85
|
+
try {
|
|
86
|
+
return JSON.parse(response.content);
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
throw new Error("Failed to parse X.AI response as JSON");
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Generate component list using X.AI
|
|
94
|
+
*/
|
|
95
|
+
async generateComponentList(projectDescription) {
|
|
96
|
+
const systemPrompt = `You are an expert React/Next.js developer and UI/UX designer. Generate a comprehensive component list based on the project description.`;
|
|
97
|
+
const prompt = `Generate a comprehensive component list for a React/Next.js project with the following description:
|
|
98
|
+
|
|
99
|
+
${projectDescription}
|
|
100
|
+
|
|
101
|
+
Please generate a JSON structure with the following format:
|
|
102
|
+
{
|
|
103
|
+
"groups": [
|
|
104
|
+
{
|
|
105
|
+
"name": "Group Name",
|
|
106
|
+
"description": "Group description",
|
|
107
|
+
"priority": "high|medium|low",
|
|
108
|
+
"components": [
|
|
109
|
+
{
|
|
110
|
+
"name": "Component Name",
|
|
111
|
+
"description": "Component description",
|
|
112
|
+
"type": "form|display|layout|interactive",
|
|
113
|
+
"priority": "high|medium|low",
|
|
114
|
+
"dependencies": ["dependency1", "dependency2"],
|
|
115
|
+
"tags": ["tag1", "tag2"]
|
|
116
|
+
}
|
|
117
|
+
]
|
|
118
|
+
}
|
|
119
|
+
]
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
Focus on:
|
|
123
|
+
- Modern React patterns (hooks, functional components)
|
|
124
|
+
- Next.js 14+ features (Server Components, App Router)
|
|
125
|
+
- Accessibility best practices
|
|
126
|
+
- Responsive design
|
|
127
|
+
- TypeScript support
|
|
128
|
+
- Shadcn/ui component library integration`;
|
|
129
|
+
const response = await this.generate({
|
|
130
|
+
prompt,
|
|
131
|
+
systemPrompt,
|
|
132
|
+
temperature: 0.7,
|
|
133
|
+
maxTokens: 6000,
|
|
134
|
+
});
|
|
135
|
+
try {
|
|
136
|
+
return JSON.parse(response.content);
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
throw new Error("Failed to parse component list response as JSON");
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Generate individual component using X.AI
|
|
144
|
+
*/
|
|
145
|
+
async generateComponent(componentSpec, groupName) {
|
|
146
|
+
const systemPrompt = `You are an expert React/Next.js developer specializing in modern component architecture. Generate production-ready React components with TypeScript, following best practices.`;
|
|
147
|
+
const prompt = `Generate a production-ready React component for the following specification:
|
|
148
|
+
|
|
149
|
+
**Component Details:**
|
|
150
|
+
- Name: ${componentSpec.name}
|
|
151
|
+
- Description: ${componentSpec.description}
|
|
152
|
+
- Type: ${componentSpec.type}
|
|
153
|
+
- Group: ${groupName}
|
|
154
|
+
- Dependencies: ${componentSpec.dependencies?.join(", ") || "None"}
|
|
155
|
+
- Tags: ${componentSpec.tags?.join(", ") || "None"}
|
|
156
|
+
|
|
157
|
+
**Requirements:**
|
|
158
|
+
- Use TypeScript with strict typing
|
|
159
|
+
- Follow React 18+ best practices
|
|
160
|
+
- Implement proper accessibility (ARIA labels, keyboard navigation)
|
|
161
|
+
- Use modern CSS patterns (Tailwind CSS preferred)
|
|
162
|
+
- Include proper error handling and loading states
|
|
163
|
+
- Add comprehensive JSDoc comments
|
|
164
|
+
- Follow the component naming convention: PascalCase
|
|
165
|
+
- Export as default export
|
|
166
|
+
- Include proper prop validation
|
|
167
|
+
- Use React Server Components where appropriate
|
|
168
|
+
- Integrate with Shadcn/ui components when relevant
|
|
169
|
+
|
|
170
|
+
**Code Style:**
|
|
171
|
+
- Clean, readable code
|
|
172
|
+
- Proper TypeScript interfaces
|
|
173
|
+
- Modern React patterns (hooks, functional components)
|
|
174
|
+
- Responsive design considerations
|
|
175
|
+
- Performance optimizations
|
|
176
|
+
|
|
177
|
+
Generate the complete component code with all necessary imports and exports.`;
|
|
178
|
+
const response = await this.generate({
|
|
179
|
+
prompt,
|
|
180
|
+
systemPrompt,
|
|
181
|
+
temperature: 0.6,
|
|
182
|
+
maxTokens: 8000,
|
|
183
|
+
});
|
|
184
|
+
return response.content;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Generate component documentation using X.AI
|
|
188
|
+
*/
|
|
189
|
+
async generateComponentDocs(componentCode, componentSpec) {
|
|
190
|
+
const systemPrompt = `You are an expert technical writer specializing in React component documentation. Generate comprehensive documentation for React components.`;
|
|
191
|
+
const prompt = `Generate comprehensive documentation for the following React component:
|
|
192
|
+
|
|
193
|
+
**Component Specification:**
|
|
194
|
+
- Name: ${componentSpec.name}
|
|
195
|
+
- Description: ${componentSpec.description}
|
|
196
|
+
- Type: ${componentSpec.type}
|
|
197
|
+
|
|
198
|
+
**Component Code:**
|
|
199
|
+
\`\`\`tsx
|
|
200
|
+
${componentCode}
|
|
201
|
+
\`\`\`
|
|
202
|
+
|
|
203
|
+
Please generate:
|
|
204
|
+
1. **README.md**: Complete component documentation with usage examples
|
|
205
|
+
2. **Inline Comments**: Enhanced JSDoc comments for the component
|
|
206
|
+
3. **Props Documentation**: Detailed prop interface documentation
|
|
207
|
+
4. **Usage Examples**: Multiple usage scenarios and examples
|
|
208
|
+
5. **Best Practices**: Component-specific best practices and tips
|
|
209
|
+
|
|
210
|
+
Format the response as a structured documentation with clear sections.`;
|
|
211
|
+
const response = await this.generate({
|
|
212
|
+
prompt,
|
|
213
|
+
systemPrompt,
|
|
214
|
+
temperature: 0.7,
|
|
215
|
+
maxTokens: 6000,
|
|
216
|
+
});
|
|
217
|
+
return response.content;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Test connection to X.AI API
|
|
221
|
+
*/
|
|
222
|
+
async testConnection() {
|
|
223
|
+
try {
|
|
224
|
+
const response = await this.generate({
|
|
225
|
+
prompt: "Hello, this is a test message.",
|
|
226
|
+
maxTokens: 10,
|
|
227
|
+
});
|
|
228
|
+
return !!response.content;
|
|
229
|
+
}
|
|
230
|
+
catch (error) {
|
|
231
|
+
console.error("X.AI connection test failed:", error);
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* List available models
|
|
237
|
+
*/
|
|
238
|
+
async listModels() {
|
|
239
|
+
// X.AI currently supports these models
|
|
240
|
+
return ["grok-4", "grok-4-mini", "grok-4-flash", "grok-4-omni"];
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
exports.XAIClient = XAIClient;
|
|
244
|
+
//# sourceMappingURL=xaiClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xaiClient.js","sourceRoot":"","sources":["../../../../src/utils/xaiClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
export interface GenerationData {
|
|
2
|
+
userId: string;
|
|
3
|
+
componentName: string;
|
|
4
|
+
group: string;
|
|
5
|
+
qualityScore: number;
|
|
6
|
+
aiProvider: string;
|
|
7
|
+
executionTime: number;
|
|
8
|
+
modelUsed: string;
|
|
9
|
+
tokensUsed: number;
|
|
10
|
+
generationTime: number;
|
|
11
|
+
success: boolean;
|
|
12
|
+
error?: string;
|
|
13
|
+
metadata?: Record<string, unknown>;
|
|
14
|
+
}
|
|
15
|
+
export interface UsageData {
|
|
16
|
+
userId: string;
|
|
17
|
+
action: string;
|
|
18
|
+
metadata: Record<string, unknown>;
|
|
19
|
+
timestamp: Date;
|
|
20
|
+
sessionId?: string;
|
|
21
|
+
userAgent?: string;
|
|
22
|
+
ip?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface AnalyticsMetrics {
|
|
25
|
+
totalGenerations: number;
|
|
26
|
+
averageQuality: number;
|
|
27
|
+
successRate: number;
|
|
28
|
+
popularComponents: Array<{
|
|
29
|
+
name: string;
|
|
30
|
+
count: number;
|
|
31
|
+
}>;
|
|
32
|
+
qualityDistribution: Record<string, number>;
|
|
33
|
+
providerPerformance: Record<string, {
|
|
34
|
+
success: number;
|
|
35
|
+
total: number;
|
|
36
|
+
avgLatency: number;
|
|
37
|
+
}>;
|
|
38
|
+
recentActivity: Array<{
|
|
39
|
+
timestamp: Date;
|
|
40
|
+
action: string;
|
|
41
|
+
componentName?: string;
|
|
42
|
+
qualityScore?: number;
|
|
43
|
+
}>;
|
|
44
|
+
}
|
|
45
|
+
export declare class UsageTracker {
|
|
46
|
+
private sessionCache;
|
|
47
|
+
private isEnabled;
|
|
48
|
+
private trackUsers;
|
|
49
|
+
private trackGenerations;
|
|
50
|
+
private trackPerformance;
|
|
51
|
+
/**
|
|
52
|
+
* Track component generation with comprehensive analytics
|
|
53
|
+
*/
|
|
54
|
+
trackGeneration(data: GenerationData): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* Track user actions (preview, download, share, etc.)
|
|
57
|
+
*/
|
|
58
|
+
trackUserAction(data: UsageData): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* Track AI provider performance
|
|
61
|
+
*/
|
|
62
|
+
trackProviderPerformance(provider: string, success: boolean, latency: number, error?: string): Promise<void>;
|
|
63
|
+
/**
|
|
64
|
+
* Track CLI generation events
|
|
65
|
+
*/
|
|
66
|
+
trackCLIGeneration(userId: string, componentName: string, group: string, success: boolean, executionTime: number, error?: string): Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* Track API generation events
|
|
69
|
+
*/
|
|
70
|
+
trackAPIGeneration(userId: string, componentName: string, group: string, success: boolean, executionTime: number, aiProvider: string, qualityScore: number, error?: string): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* Get usage statistics for a user
|
|
73
|
+
*/
|
|
74
|
+
getUserStats(userId: string, period?: "day" | "week" | "month"): Promise<AnalyticsMetrics>;
|
|
75
|
+
/**
|
|
76
|
+
* Get system-wide analytics
|
|
77
|
+
*/
|
|
78
|
+
getSystemAnalytics(): Promise<AnalyticsMetrics>;
|
|
79
|
+
/**
|
|
80
|
+
* Track billing usage for pricing tiers
|
|
81
|
+
*/
|
|
82
|
+
trackBillingUsage(userId: string, action: string, cost: number): Promise<void>;
|
|
83
|
+
/**
|
|
84
|
+
* Get user's current tier
|
|
85
|
+
*/
|
|
86
|
+
private getUserTier;
|
|
87
|
+
/**
|
|
88
|
+
* Record usage in InstantDB
|
|
89
|
+
*/
|
|
90
|
+
private recordUsage;
|
|
91
|
+
/**
|
|
92
|
+
* Process user statistics from InstantDB data
|
|
93
|
+
*/
|
|
94
|
+
private processUserStats;
|
|
95
|
+
/**
|
|
96
|
+
* Process system statistics from InstantDB data
|
|
97
|
+
*/
|
|
98
|
+
private processSystemStats;
|
|
99
|
+
/**
|
|
100
|
+
* Calculate quality distribution
|
|
101
|
+
*/
|
|
102
|
+
private calculateQualityDistribution;
|
|
103
|
+
/**
|
|
104
|
+
* Calculate provider performance
|
|
105
|
+
*/
|
|
106
|
+
private calculateProviderPerformance;
|
|
107
|
+
/**
|
|
108
|
+
* Get mock user statistics (fallback)
|
|
109
|
+
*/
|
|
110
|
+
private getMockUserStats;
|
|
111
|
+
/**
|
|
112
|
+
* Get mock system statistics (fallback)
|
|
113
|
+
*/
|
|
114
|
+
private getMockSystemStats;
|
|
115
|
+
/**
|
|
116
|
+
* Get start date for period
|
|
117
|
+
*/
|
|
118
|
+
private getStartDate;
|
|
119
|
+
/**
|
|
120
|
+
* Generate session ID for user
|
|
121
|
+
*/
|
|
122
|
+
private generateSessionId;
|
|
123
|
+
}
|
|
124
|
+
export declare const usageTracker: UsageTracker;
|
|
125
|
+
//# sourceMappingURL=usage-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage-tracker.d.ts","sourceRoot":"","sources":["../../../../lib/analytics/usage-tracker.ts"],"names":[],"mappings":"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"}
|