Skip to content
This repository was archived by the owner on Jan 29, 2026. It is now read-only.

Commit b94330f

Browse files
authored
Fix CLI error: Add missing 'commander' package dependency (#34)
1 parent 30abc1e commit b94330f

109 files changed

Lines changed: 35201 additions & 28986 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

dist/adapters/adapter-manager.js

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,15 @@ import { EventEmitter } from "events";
88
import { Logger } from "../utils/logger.js";
99
import { UnifiedAPI, } from "./unified-api.js";
1010
export class AdapterManager extends EventEmitter {
11-
logger;
12-
config;
13-
unifiedAPI;
14-
systemHealth;
15-
alerts = [];
16-
performancePredictor;
17-
// Advanced error handling
18-
errorPatterns = new Map();
19-
adaptiveThresholds = new Map();
20-
fallbackHistory = new Map();
21-
// Adapter registry for direct management
22-
adapters = new Map();
2311
constructor(config) {
2412
super();
13+
this.alerts = [];
14+
// Advanced error handling
15+
this.errorPatterns = new Map();
16+
this.adaptiveThresholds = new Map();
17+
this.fallbackHistory = new Map();
18+
// Adapter registry for direct management
19+
this.adapters = new Map();
2520
this.logger = new Logger("AdapterManager");
2621
this.config = config;
2722
this.unifiedAPI = new UnifiedAPI(config.unifiedAPI);
@@ -840,7 +835,9 @@ export class AdapterManager extends EventEmitter {
840835
* Performance Predictor for adaptive optimization
841836
*/
842837
class PerformancePredictor {
843-
trainingData = [];
838+
constructor() {
839+
this.trainingData = [];
840+
}
844841
// Would be actual ML model in production - removed unused field
845842
recordPerformance(data) {
846843
this.trainingData.push(data);

dist/adapters/base-model-adapter.js

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,9 @@
77
import { EventEmitter } from "events";
88
import { Logger } from "../utils/logger.js";
99
export class BaseModelAdapter extends EventEmitter {
10-
logger;
11-
config;
12-
capabilities;
13-
isInitialized = false;
14-
lastHealthCheck;
1510
constructor(config) {
1611
super();
12+
this.isInitialized = false;
1713
this.config = config;
1814
this.logger = new Logger(`Adapter:${config.modelName}`);
1915
this.capabilities = this.getModelCapabilities();

dist/adapters/gemini-adapter.js

Lines changed: 78 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
1-
import { GoogleGenerativeAI, } from "@google/generative-ai";
1+
/**
2+
* Gemini Adapter Implementation
3+
* TDD approach - proper implementation for Google Gemini models
4+
*/
25
import { BaseModelAdapter, } from "./base-model-adapter.js";
36
export class GeminiAdapter extends BaseModelAdapter {
4-
genAI;
5-
model;
67
constructor(config) {
78
super(config);
8-
if (!this.config.apiKey) {
9-
throw new Error("Gemini API key is required.");
10-
}
11-
this.genAI = new GoogleGenerativeAI(this.config.apiKey);
12-
this.model = this.genAI.getGenerativeModel({ model: this.config.modelName });
139
}
1410
async initialize() {
11+
// Initialize Gemini API client
1512
this.isInitialized = true;
1613
this.logger.info("Gemini adapter initialized");
1714
}
@@ -27,35 +24,36 @@ export class GeminiAdapter extends BaseModelAdapter {
2724
multiAgent: false,
2825
complexProblemSolving: true,
2926
chainOfThought: true,
30-
maxTokens: 8192,
31-
supportedLanguages: ["en", "es", "fr", "de", "it", "pt", "ru", "zh", "ja", "ko"],
27+
maxTokens: 1000000,
28+
supportedLanguages: ["en", "es", "fr", "de", "ja", "ko", "zh"],
3229
inputTypes: ["text", "image", "audio", "video"],
3330
outputTypes: ["text"],
3431
};
3532
}
36-
extractText(response) {
37-
if (response.candidates && response.candidates.length > 0 && response.candidates[0].content && response.candidates[0].content.parts && response.candidates[0].content.parts.length > 0) {
38-
const part = response.candidates[0].content.parts[0];
39-
if ('text' in part) {
40-
return part.text || "";
41-
}
42-
}
43-
return "";
44-
}
4533
async generate(request) {
4634
this.ensureInitialized();
4735
const startTime = performance.now();
4836
const context = this.ensureRequestId(request.context);
4937
try {
50-
await this.validateRequest(request);
51-
const transformedRequest = this.transformRequest(request);
52-
const result = await this.model.generateContent(transformedRequest);
53-
const response = result.response;
54-
const transformedResponse = this.transformResponse(response, request);
55-
const latency = performance.now() - startTime;
56-
transformedResponse.latency = latency;
57-
this.logPerformance("generate", latency, true);
58-
return transformedResponse;
38+
// Transform request for Gemini API
39+
this.transformRequest(request);
40+
// Mock response for TDD
41+
const mockResponse = {
42+
id: context.requestId,
43+
content: `Gemini response to: ${request.prompt}`,
44+
model: this.config.modelName,
45+
timestamp: new Date(),
46+
latency: performance.now() - startTime,
47+
usage: {
48+
promptTokens: request.prompt.length / 4,
49+
completionTokens: 50,
50+
totalTokens: request.prompt.length / 4 + 50,
51+
},
52+
cost: this.calculateCost({ totalTokens: request.prompt.length / 4 + 50 }, 0.000001),
53+
finishReason: "stop",
54+
};
55+
this.logPerformance("generate", mockResponse.latency, true);
56+
return mockResponse;
5957
}
6058
catch (error) {
6159
const latency = performance.now() - startTime;
@@ -66,58 +64,75 @@ export class GeminiAdapter extends BaseModelAdapter {
6664
async *generateStream(request) {
6765
this.ensureInitialized();
6866
const context = this.ensureRequestId(request.context);
69-
const transformedRequest = this.transformRequest(request);
70-
try {
71-
const result = await this.model.generateContentStream(transformedRequest);
72-
for await (const chunk of result.stream) {
73-
const chunkText = this.extractText(chunk);
74-
if (chunkText) {
75-
yield {
76-
id: context.requestId,
77-
content: chunkText,
78-
delta: chunkText,
79-
};
80-
}
81-
}
82-
}
83-
catch (error) {
84-
throw this.handleError(error, request);
67+
// Mock streaming response
68+
const chunks = [
69+
`Gemini `,
70+
`streaming `,
71+
`response `,
72+
`to: ${request.prompt}`,
73+
];
74+
for (let i = 0; i < chunks.length; i++) {
75+
yield {
76+
id: `${context.requestId}-${i}`,
77+
content: chunks.slice(0, i + 1).join(""),
78+
delta: chunks[i],
79+
finishReason: i === chunks.length - 1 ? "stop" : undefined,
80+
};
81+
// Simulate streaming delay
82+
await new Promise((resolve) => setTimeout(resolve, 100));
8583
}
8684
}
8785
async validateRequest(request) {
8886
if (!request.prompt || request.prompt.trim().length === 0) {
8987
throw this.createError("Prompt is required", "INVALID_REQUEST");
9088
}
89+
if (request.prompt.length > 1000000) {
90+
throw this.createError("Prompt exceeds maximum length", "PROMPT_TOO_LONG");
91+
}
9192
return true;
9293
}
9394
transformRequest(request) {
94-
let prompt = request.prompt;
95-
if (request.systemMessage) {
96-
prompt = `${request.systemMessage}\n\n${prompt}`;
97-
}
98-
return prompt;
95+
return {
96+
contents: [
97+
{
98+
parts: [
99+
{
100+
text: request.prompt,
101+
},
102+
],
103+
},
104+
],
105+
generationConfig: {
106+
temperature: request.parameters?.temperature || 0.9,
107+
topP: request.parameters?.topP || 1,
108+
topK: request.parameters?.topK || 1,
109+
maxOutputTokens: request.parameters?.maxTokens || 8192,
110+
},
111+
systemInstruction: request.systemMessage
112+
? {
113+
parts: [{ text: request.systemMessage }],
114+
}
115+
: undefined,
116+
};
99117
}
100-
transformResponse(response, request) {
101-
const content = this.extractText(response);
102-
const promptTokens = response.usageMetadata?.promptTokenCount || 0;
103-
const completionTokens = response.usageMetadata?.candidatesTokenCount || 0;
104-
const totalTokens = response.usageMetadata?.totalTokenCount || 0;
118+
transformResponse(response, _request) {
105119
return {
106120
id: this.generateRequestId(),
107-
content: content,
121+
content: response.candidates?.[0]?.content?.parts?.[0]?.text || "",
108122
model: this.config.modelName,
109123
timestamp: new Date(),
110-
latency: 0, // will be set in generate method
124+
latency: 0,
111125
usage: {
112-
promptTokens: promptTokens,
113-
completionTokens: completionTokens,
114-
totalTokens: totalTokens,
126+
promptTokens: response.usageMetadata?.promptTokenCount || 0,
127+
completionTokens: response.usageMetadata?.candidatesTokenCount || 0,
128+
totalTokens: response.usageMetadata?.totalTokenCount || 0,
115129
},
116-
cost: this.calculateCost({ totalTokens: totalTokens }, 0.000001), // dummy cost
117-
finishReason: response.candidates?.[0]?.finishReason || "UNKNOWN",
130+
cost: 0,
131+
finishReason: response.candidates?.[0]?.finishReason || "stop",
118132
};
119133
}
120-
handleError(error, request) {
121-
return this.createError(error.message || "Gemini API error", "GEMINI_ERROR", 500, true, { originalError: error });
134+
handleError(error, _request) {
135+
const adapterError = this.createError(error.message || "Gemini API error", error.code || "GEMINI_ERROR", error.status || 500, error.code === "RATE_LIMIT_EXCEEDED" || error.code === "QUOTA_EXCEEDED");
136+
throw adapterError;
122137
}
123138
}

dist/adapters/index.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,16 +52,15 @@ export async function createDeepMindAdapter(config) {
5252
export async function createJulesWorkflowAdapter(config) {
5353
const fullConfig = {
5454
modelName: "jules-workflow-adapter",
55-
apiKey: config.apiKey || process.env.JULES_API_KEY || "",
55+
julesApiKey: config.julesApiKey || process.env.JULES_API_KEY || "",
5656
timeout: 60000,
5757
retryAttempts: 2,
5858
streamingEnabled: true,
5959
cachingEnabled: false, // Workflows are typically not cached
6060
collaborativeMode: false,
61-
multiStepEnabled: true,
6261
...config,
6362
};
64-
if (!fullConfig.apiKey) {
63+
if (!fullConfig.julesApiKey) {
6564
throw new Error("Jules API key is required for workflow adapter");
6665
}
6766
const adapter = new JulesWorkflowAdapter(fullConfig);

dist/adapters/jules-workflow-adapter.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
*/
55
import { BaseModelAdapter, } from "./base-model-adapter.js";
66
export class JulesWorkflowAdapter extends BaseModelAdapter {
7-
workflowConfig;
87
constructor(config) {
98
super(config);
109
this.workflowConfig = config;

dist/adapters/unified-api.js

Lines changed: 21 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,17 @@ import { DeepMindAdapter } from "./deepmind-adapter.js";
1111
import { JulesWorkflowAdapter } from "./jules-workflow-adapter.js";
1212
import { EnhancedStreamingAPI, } from "../streaming/enhanced-streaming-api.js";
1313
export class UnifiedAPI extends EventEmitter {
14-
logger;
15-
config;
16-
adapters = new Map();
17-
// private _routingCache = new Map<string, RoutingDecision>(); // Reserved for future optimization
18-
circuitBreakers = new Map();
19-
metrics;
20-
performanceHistory = [];
21-
// Fast routing optimization
22-
routingDecisionCache = new Map();
23-
capabilityMatrix = new Map(); // adapter -> capabilities
24-
latencyBaseline = new Map(); // adapter -> avg latency
25-
// Enhanced streaming capabilities
26-
streamingAPI;
27-
streamingSessions = new Map();
2814
constructor(config) {
2915
super();
16+
this.adapters = new Map();
17+
// private _routingCache = new Map<string, RoutingDecision>(); // Reserved for future optimization
18+
this.circuitBreakers = new Map();
19+
this.performanceHistory = [];
20+
// Fast routing optimization
21+
this.routingDecisionCache = new Map();
22+
this.capabilityMatrix = new Map(); // adapter -> capabilities
23+
this.latencyBaseline = new Map(); // adapter -> avg latency
24+
this.streamingSessions = new Map();
3025
this.logger = new Logger("UnifiedAPI");
3126
this.config = config;
3227
this.metrics = this.initializeMetrics();
@@ -911,7 +906,7 @@ export class UnifiedAPI extends EventEmitter {
911906
* Create default streaming configuration
912907
*/
913908
createDefaultStreamingConfig() {
914-
return {
909+
return ({
915910
webrtc: {
916911
iceServers: [
917912
{ urls: "stun:stun.l.google.com:19302" },
@@ -931,9 +926,6 @@ export class UnifiedAPI extends EventEmitter {
931926
includeUser: false,
932927
includeSession: true,
933928
},
934-
regions: ["us-east", "eu-west", "ap-southeast"],
935-
compression: true,
936-
warmupEnabled: true,
937929
},
938930
cdn: {
939931
provider: "cloudflare",
@@ -946,19 +938,21 @@ export class UnifiedAPI extends EventEmitter {
946938
strategy: "adaptive",
947939
ttl: 3600000,
948940
edgeLocations: ["us-east", "eu-west", "ap-southeast"],
949-
enabled: true,
950-
regions: ["us-east", "eu-west", "ap-southeast"],
941+
},
942+
optimization: {
951943
compression: true,
952-
warmupEnabled: true,
944+
minification: true,
945+
imageSizing: true,
946+
formatConversion: true,
953947
},
954-
bandwidth: 1000,
955-
regions: ["us-east", "eu-west", "ap-southeast"],
956948
},
957949
synchronization: {
958950
enabled: true,
959-
bufferSize: 1024,
960-
syncThreshold: 50,
961-
adaptiveSync: true,
951+
tolerance: 50,
952+
maxDrift: 200,
953+
resyncThreshold: 500,
954+
method: "rtp",
955+
masterClock: "audio",
962956
},
963957
quality: {
964958
enableAdaptation: true,
@@ -982,7 +976,7 @@ export class UnifiedAPI extends EventEmitter {
982976
enableAuthentication: true,
983977
enableIntegrityChecks: true,
984978
},
985-
};
979+
});
986980
}
987981
// Helper methods
988982
initializeMetrics() {

dist/agents/agent.js

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,6 @@ export var AgentStatus;
77
AgentStatus["ERROR"] = "error";
88
})(AgentStatus || (AgentStatus = {}));
99
export class Agent extends EventEmitter {
10-
id;
11-
name;
12-
type;
13-
category;
14-
capabilities;
15-
status;
16-
definition;
17-
adapter;
18-
logger;
1910
constructor(definition, adapter) {
2011
super();
2112
this.id = definition.id;

0 commit comments

Comments
 (0)