jiva-core 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/.env.example +18 -0
- package/.fluen/cache/state.json +7 -0
- package/README.md +350 -0
- package/actions/action_registry.py +75 -0
- package/actions/python_coder.py +470 -0
- package/api/main.py +269 -0
- package/dist/core/agent.d.ts +69 -0
- package/dist/core/agent.d.ts.map +1 -0
- package/dist/core/agent.js +214 -0
- package/dist/core/agent.js.map +1 -0
- package/dist/core/config.d.ts +222 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +138 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/workspace.d.ts +53 -0
- package/dist/core/workspace.d.ts.map +1 -0
- package/dist/core/workspace.js +164 -0
- package/dist/core/workspace.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/cli/index.d.ts +6 -0
- package/dist/interfaces/cli/index.d.ts.map +1 -0
- package/dist/interfaces/cli/index.js +257 -0
- package/dist/interfaces/cli/index.js.map +1 -0
- package/dist/interfaces/cli/repl.d.ts +9 -0
- package/dist/interfaces/cli/repl.d.ts.map +1 -0
- package/dist/interfaces/cli/repl.js +139 -0
- package/dist/interfaces/cli/repl.js.map +1 -0
- package/dist/interfaces/cli/setup-wizard.d.ts +9 -0
- package/dist/interfaces/cli/setup-wizard.d.ts.map +1 -0
- package/dist/interfaces/cli/setup-wizard.js +321 -0
- package/dist/interfaces/cli/setup-wizard.js.map +1 -0
- package/dist/mcp/client.d.ts +58 -0
- package/dist/mcp/client.d.ts.map +1 -0
- package/dist/mcp/client.js +178 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/server-manager.d.ts +58 -0
- package/dist/mcp/server-manager.d.ts.map +1 -0
- package/dist/mcp/server-manager.js +135 -0
- package/dist/mcp/server-manager.js.map +1 -0
- package/dist/models/base.d.ts +57 -0
- package/dist/models/base.d.ts.map +1 -0
- package/dist/models/base.js +5 -0
- package/dist/models/base.js.map +1 -0
- package/dist/models/harmony.d.ts +78 -0
- package/dist/models/harmony.d.ts.map +1 -0
- package/dist/models/harmony.js +226 -0
- package/dist/models/harmony.js.map +1 -0
- package/dist/models/krutrim.d.ts +30 -0
- package/dist/models/krutrim.d.ts.map +1 -0
- package/dist/models/krutrim.js +185 -0
- package/dist/models/krutrim.js.map +1 -0
- package/dist/models/orchestrator.d.ts +49 -0
- package/dist/models/orchestrator.d.ts.map +1 -0
- package/dist/models/orchestrator.js +140 -0
- package/dist/models/orchestrator.js.map +1 -0
- package/dist/utils/errors.d.ts +23 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +45 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logger.d.ts +24 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +74 -0
- package/dist/utils/logger.js.map +1 -0
- package/docs/BUILD.md +317 -0
- package/docs/DEV_WORKFLOW.md +197 -0
- package/docs/FILESYSTEM_ACCESS.md +244 -0
- package/docs/IMPLEMENTATION_SUMMARY.md +459 -0
- package/docs/QUICKSTART.md +162 -0
- package/docs/TROUBLESHOOTING.md +393 -0
- package/examples/code-review-directive.md +26 -0
- package/examples/data-analysis-directive.md +26 -0
- package/examples/programmatic-usage.ts +120 -0
- package/jiva-directive.md +24 -0
- package/package.json +46 -0
- package/setup.sh +65 -0
- package/src/core/agent.ts +275 -0
- package/src/core/config.ts +177 -0
- package/src/core/workspace.ts +205 -0
- package/src/index.ts +21 -0
- package/src/interfaces/cli/index.ts +290 -0
- package/src/interfaces/cli/repl.ts +182 -0
- package/src/interfaces/cli/setup-wizard.ts +355 -0
- package/src/mcp/client.ts +231 -0
- package/src/mcp/server-manager.ts +168 -0
- package/src/models/base.ts +63 -0
- package/src/models/harmony.ts +301 -0
- package/src/models/krutrim.ts +236 -0
- package/src/models/orchestrator.ts +180 -0
- package/src/utils/errors.ts +41 -0
- package/src/utils/logger.ts +87 -0
- package/tsconfig.json +22 -0
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Krutrim API Client
|
|
3
|
+
*
|
|
4
|
+
* Handles communication with Krutrim Cloud API for both gpt-oss-120b and Llama-4-Maverick-17B models.
|
|
5
|
+
* Implements Harmony format for gpt-oss-120b and standard format for multimodal model.
|
|
6
|
+
*/
|
|
7
|
+
import { formatMessagesForHarmony, parseHarmonyResponse } from './harmony.js';
|
|
8
|
+
import { ModelError } from '../utils/errors.js';
|
|
9
|
+
import { logger } from '../utils/logger.js';
|
|
10
|
+
export class KrutrimModel {
|
|
11
|
+
config;
|
|
12
|
+
constructor(config) {
|
|
13
|
+
this.config = config;
|
|
14
|
+
}
|
|
15
|
+
supportsVision() {
|
|
16
|
+
return this.config.type === 'multimodal';
|
|
17
|
+
}
|
|
18
|
+
supportsToolCalling() {
|
|
19
|
+
// Only reasoning model (gpt-oss-120b) supports tool calling
|
|
20
|
+
return this.config.type === 'reasoning';
|
|
21
|
+
}
|
|
22
|
+
async chat(options) {
|
|
23
|
+
const isReasoningModel = this.config.type === 'reasoning';
|
|
24
|
+
// Retry logic for WAF/rate limiting issues
|
|
25
|
+
const maxRetries = 2;
|
|
26
|
+
let lastError = null;
|
|
27
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
28
|
+
if (attempt > 0) {
|
|
29
|
+
const waitTime = Math.pow(2, attempt) * 1000; // Exponential backoff
|
|
30
|
+
logger.warn(`Retrying after ${waitTime}ms (attempt ${attempt + 1}/${maxRetries + 1})...`);
|
|
31
|
+
await new Promise(resolve => setTimeout(resolve, waitTime));
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
return await this.attemptChat(options, isReasoningModel);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
lastError = error;
|
|
38
|
+
// Only retry on 403 (WAF) or 429 (rate limit) errors
|
|
39
|
+
if (error instanceof ModelError) {
|
|
40
|
+
const is403or429 = error.message.includes('(403)') || error.message.includes('(429)');
|
|
41
|
+
if (!is403or429 || attempt === maxRetries) {
|
|
42
|
+
throw error;
|
|
43
|
+
}
|
|
44
|
+
logger.warn(`Got ${error.message.includes('(403)') ? '403 Access Denied' : '429 Rate Limited'}, will retry...`);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
throw error;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
throw lastError;
|
|
52
|
+
}
|
|
53
|
+
async attemptChat(options, isReasoningModel) {
|
|
54
|
+
try {
|
|
55
|
+
let messages;
|
|
56
|
+
let tools;
|
|
57
|
+
if (isReasoningModel && options.tools && options.tools.length > 0) {
|
|
58
|
+
// Convert to Harmony format for gpt-oss-120b
|
|
59
|
+
tools = options.tools.map(t => ({
|
|
60
|
+
name: t.name,
|
|
61
|
+
description: t.description,
|
|
62
|
+
parameters: t.parameters,
|
|
63
|
+
}));
|
|
64
|
+
messages = formatMessagesForHarmony(options.messages, tools);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
messages = options.messages;
|
|
68
|
+
}
|
|
69
|
+
// Krutrim API only supports standard OpenAI roles: system, user, assistant, tool
|
|
70
|
+
// Convert 'developer' role to 'system' for API compatibility
|
|
71
|
+
const apiMessages = messages.map((msg) => {
|
|
72
|
+
if (msg.role === 'developer') {
|
|
73
|
+
return { ...msg, role: 'system' };
|
|
74
|
+
}
|
|
75
|
+
return msg;
|
|
76
|
+
});
|
|
77
|
+
const requestBody = {
|
|
78
|
+
model: options.model || this.config.model,
|
|
79
|
+
messages: apiMessages,
|
|
80
|
+
temperature: options.temperature ?? 0.7,
|
|
81
|
+
};
|
|
82
|
+
if (options.maxTokens) {
|
|
83
|
+
requestBody.max_tokens = options.maxTokens;
|
|
84
|
+
}
|
|
85
|
+
// Note: We don't send tools in OpenAI format to Krutrim
|
|
86
|
+
// Tools are embedded in the developer message via Harmony format
|
|
87
|
+
logger.debug('Krutrim API Request:', JSON.stringify(requestBody, null, 2));
|
|
88
|
+
const response = await fetch(this.config.endpoint, {
|
|
89
|
+
method: 'POST',
|
|
90
|
+
headers: {
|
|
91
|
+
'Content-Type': 'application/json',
|
|
92
|
+
'Authorization': `Bearer ${this.config.apiKey}`,
|
|
93
|
+
'User-Agent': 'Jiva/0.1.0',
|
|
94
|
+
'Accept': 'application/json',
|
|
95
|
+
},
|
|
96
|
+
body: JSON.stringify(requestBody),
|
|
97
|
+
});
|
|
98
|
+
if (!response.ok) {
|
|
99
|
+
const errorText = await response.text();
|
|
100
|
+
logger.error(`API Error Response (${response.status}):`, errorText);
|
|
101
|
+
logger.debug('Request that failed:', JSON.stringify(requestBody, null, 2));
|
|
102
|
+
throw new ModelError(`Krutrim API error (${response.status}): ${errorText}`, this.config.model);
|
|
103
|
+
}
|
|
104
|
+
const data = await response.json();
|
|
105
|
+
logger.debug('Krutrim API Response:', JSON.stringify(data, null, 2));
|
|
106
|
+
if (!data.choices || data.choices.length === 0) {
|
|
107
|
+
throw new ModelError('No choices in response', this.config.model);
|
|
108
|
+
}
|
|
109
|
+
const choice = data.choices[0];
|
|
110
|
+
const messageContent = choice.message?.content || '';
|
|
111
|
+
// Parse response based on model type
|
|
112
|
+
if (isReasoningModel && options.tools && options.tools.length > 0) {
|
|
113
|
+
// Parse Harmony format response
|
|
114
|
+
const parsed = parseHarmonyResponse(messageContent);
|
|
115
|
+
return {
|
|
116
|
+
content: parsed.final || parsed.commentary || messageContent,
|
|
117
|
+
toolCalls: parsed.toolCalls.length > 0 ? parsed.toolCalls : undefined,
|
|
118
|
+
usage: data.usage ? {
|
|
119
|
+
promptTokens: data.usage.prompt_tokens || 0,
|
|
120
|
+
completionTokens: data.usage.completion_tokens || 0,
|
|
121
|
+
totalTokens: data.usage.total_tokens || 0,
|
|
122
|
+
} : undefined,
|
|
123
|
+
raw: {
|
|
124
|
+
...data,
|
|
125
|
+
parsedHarmony: parsed,
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
// Standard response
|
|
131
|
+
return {
|
|
132
|
+
content: messageContent,
|
|
133
|
+
usage: data.usage ? {
|
|
134
|
+
promptTokens: data.usage.prompt_tokens || 0,
|
|
135
|
+
completionTokens: data.usage.completion_tokens || 0,
|
|
136
|
+
totalTokens: data.usage.total_tokens || 0,
|
|
137
|
+
} : undefined,
|
|
138
|
+
raw: data,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
if (error instanceof ModelError) {
|
|
144
|
+
throw error;
|
|
145
|
+
}
|
|
146
|
+
throw new ModelError(`Failed to communicate with Krutrim API: ${error instanceof Error ? error.message : String(error)}`, this.config.model);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Helper method for vision tasks using multimodal model
|
|
151
|
+
*/
|
|
152
|
+
async describeImage(imageUrl, prompt) {
|
|
153
|
+
if (!this.supportsVision()) {
|
|
154
|
+
throw new ModelError('This model does not support vision tasks', this.config.model);
|
|
155
|
+
}
|
|
156
|
+
const response = await this.chat({
|
|
157
|
+
model: this.config.model,
|
|
158
|
+
messages: [
|
|
159
|
+
{
|
|
160
|
+
role: 'user',
|
|
161
|
+
content: [
|
|
162
|
+
{
|
|
163
|
+
type: 'text',
|
|
164
|
+
text: prompt || 'Describe this image in detail.',
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
type: 'image_url',
|
|
168
|
+
image_url: {
|
|
169
|
+
url: imageUrl,
|
|
170
|
+
},
|
|
171
|
+
},
|
|
172
|
+
],
|
|
173
|
+
},
|
|
174
|
+
],
|
|
175
|
+
});
|
|
176
|
+
return response.content;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Factory function to create Krutrim model instances
|
|
181
|
+
*/
|
|
182
|
+
export function createKrutrimModel(config) {
|
|
183
|
+
return new KrutrimModel(config);
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=krutrim.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"krutrim.js","sourceRoot":"","sources":["../../src/models/krutrim.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-Model Orchestrator
|
|
3
|
+
*
|
|
4
|
+
* Coordinates between reasoning model (gpt-oss-120b) and multimodal model (Llama-4-Maverick)
|
|
5
|
+
*/
|
|
6
|
+
import { KrutrimModel } from './krutrim.js';
|
|
7
|
+
import { ChatCompletionOptions, ModelResponse } from './base.js';
|
|
8
|
+
export interface OrchestratorConfig {
|
|
9
|
+
reasoningModel: KrutrimModel;
|
|
10
|
+
multimodalModel?: KrutrimModel;
|
|
11
|
+
}
|
|
12
|
+
export declare class ModelOrchestrator {
|
|
13
|
+
private reasoningModel;
|
|
14
|
+
private multimodalModel?;
|
|
15
|
+
constructor(config: OrchestratorConfig);
|
|
16
|
+
/**
|
|
17
|
+
* Process a chat completion with automatic model selection
|
|
18
|
+
*/
|
|
19
|
+
chat(options: ChatCompletionOptions): Promise<ModelResponse>;
|
|
20
|
+
/**
|
|
21
|
+
* Handle requests with image content
|
|
22
|
+
*/
|
|
23
|
+
private handleMultimodalRequest;
|
|
24
|
+
/**
|
|
25
|
+
* Check if messages contain image content
|
|
26
|
+
*/
|
|
27
|
+
private hasImageContent;
|
|
28
|
+
/**
|
|
29
|
+
* Extract messages that contain images
|
|
30
|
+
*/
|
|
31
|
+
private extractImageMessages;
|
|
32
|
+
/**
|
|
33
|
+
* Replace image content with text descriptions
|
|
34
|
+
*/
|
|
35
|
+
private replaceImagesWithDescriptions;
|
|
36
|
+
/**
|
|
37
|
+
* Get reasoning model instance
|
|
38
|
+
*/
|
|
39
|
+
getReasoningModel(): KrutrimModel;
|
|
40
|
+
/**
|
|
41
|
+
* Get multimodal model instance if configured
|
|
42
|
+
*/
|
|
43
|
+
getMultimodalModel(): KrutrimModel | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* Check if multimodal support is available
|
|
46
|
+
*/
|
|
47
|
+
hasMultimodalSupport(): boolean;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/models/orchestrator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAA2B,qBAAqB,EAAE,aAAa,EAAQ,MAAM,WAAW,CAAC;AAIhG,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,YAAY,CAAC;IAC7B,eAAe,CAAC,EAAE,YAAY,CAAC;CAChC;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,cAAc,CAAe;IACrC,OAAO,CAAC,eAAe,CAAC,CAAe;gBAE3B,MAAM,EAAE,kBAAkB;IAKtC;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC;IAalE;;OAEG;YACW,uBAAuB;IAiDrC;;OAEG;IACH,OAAO,CAAC,eAAe;IASvB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAe5B;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAiCrC;;OAEG;IACH,iBAAiB,IAAI,YAAY;IAIjC;;OAEG;IACH,kBAAkB,IAAI,YAAY,GAAG,SAAS;IAI9C;;OAEG;IACH,oBAAoB,IAAI,OAAO;CAGhC"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-Model Orchestrator
|
|
3
|
+
*
|
|
4
|
+
* Coordinates between reasoning model (gpt-oss-120b) and multimodal model (Llama-4-Maverick)
|
|
5
|
+
*/
|
|
6
|
+
import { logger } from '../utils/logger.js';
|
|
7
|
+
import { ModelError } from '../utils/errors.js';
|
|
8
|
+
export class ModelOrchestrator {
|
|
9
|
+
reasoningModel;
|
|
10
|
+
multimodalModel;
|
|
11
|
+
constructor(config) {
|
|
12
|
+
this.reasoningModel = config.reasoningModel;
|
|
13
|
+
this.multimodalModel = config.multimodalModel;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Process a chat completion with automatic model selection
|
|
17
|
+
*/
|
|
18
|
+
async chat(options) {
|
|
19
|
+
// Check if request contains images
|
|
20
|
+
const hasImages = this.hasImageContent(options.messages);
|
|
21
|
+
if (hasImages && this.multimodalModel) {
|
|
22
|
+
// Use multimodal model to process images first, then reasoning model
|
|
23
|
+
return await this.handleMultimodalRequest(options);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
// Use reasoning model directly
|
|
27
|
+
return await this.reasoningModel.chat(options);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Handle requests with image content
|
|
32
|
+
*/
|
|
33
|
+
async handleMultimodalRequest(options) {
|
|
34
|
+
if (!this.multimodalModel) {
|
|
35
|
+
throw new ModelError('Multimodal model not configured, but request contains images');
|
|
36
|
+
}
|
|
37
|
+
logger.info('Processing multimodal request...');
|
|
38
|
+
// Extract messages with images
|
|
39
|
+
const imageMessages = this.extractImageMessages(options.messages);
|
|
40
|
+
// Process each image with multimodal model
|
|
41
|
+
const imageDescriptions = new Map();
|
|
42
|
+
for (const [index, msg] of imageMessages) {
|
|
43
|
+
logger.debug(`Processing image in message ${index}`);
|
|
44
|
+
try {
|
|
45
|
+
const response = await this.multimodalModel.chat({
|
|
46
|
+
model: options.model || 'Llama-4-Maverick-17B-128E-Instruct',
|
|
47
|
+
messages: [msg],
|
|
48
|
+
temperature: options.temperature,
|
|
49
|
+
});
|
|
50
|
+
imageDescriptions.set(index, response.content);
|
|
51
|
+
logger.debug(`Image description: ${response.content.substring(0, 100)}...`);
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
logger.error(`Failed to process image in message ${index}`, error);
|
|
55
|
+
throw error;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Replace images with descriptions for reasoning model
|
|
59
|
+
const messagesWithDescriptions = this.replaceImagesWithDescriptions(options.messages, imageDescriptions);
|
|
60
|
+
// Now use reasoning model with text-only messages
|
|
61
|
+
logger.info('Forwarding to reasoning model...');
|
|
62
|
+
return await this.reasoningModel.chat({
|
|
63
|
+
...options,
|
|
64
|
+
messages: messagesWithDescriptions,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Check if messages contain image content
|
|
69
|
+
*/
|
|
70
|
+
hasImageContent(messages) {
|
|
71
|
+
return messages.some(msg => {
|
|
72
|
+
if (Array.isArray(msg.content)) {
|
|
73
|
+
return msg.content.some(c => c.type === 'image_url');
|
|
74
|
+
}
|
|
75
|
+
return false;
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Extract messages that contain images
|
|
80
|
+
*/
|
|
81
|
+
extractImageMessages(messages) {
|
|
82
|
+
const imageMessages = [];
|
|
83
|
+
messages.forEach((msg, index) => {
|
|
84
|
+
if (Array.isArray(msg.content)) {
|
|
85
|
+
const hasImage = msg.content.some(c => c.type === 'image_url');
|
|
86
|
+
if (hasImage) {
|
|
87
|
+
imageMessages.push([index, msg]);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
return imageMessages;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Replace image content with text descriptions
|
|
95
|
+
*/
|
|
96
|
+
replaceImagesWithDescriptions(messages, descriptions) {
|
|
97
|
+
return messages.map((msg, index) => {
|
|
98
|
+
if (!descriptions.has(index)) {
|
|
99
|
+
return msg;
|
|
100
|
+
}
|
|
101
|
+
const description = descriptions.get(index);
|
|
102
|
+
if (Array.isArray(msg.content)) {
|
|
103
|
+
// Replace image_url content with text description
|
|
104
|
+
const newContent = msg.content.map(c => {
|
|
105
|
+
if (c.type === 'image_url') {
|
|
106
|
+
return {
|
|
107
|
+
type: 'text',
|
|
108
|
+
text: `[Image description: ${description}]`,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
return c;
|
|
112
|
+
});
|
|
113
|
+
return {
|
|
114
|
+
...msg,
|
|
115
|
+
content: newContent,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
return msg;
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get reasoning model instance
|
|
123
|
+
*/
|
|
124
|
+
getReasoningModel() {
|
|
125
|
+
return this.reasoningModel;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Get multimodal model instance if configured
|
|
129
|
+
*/
|
|
130
|
+
getMultimodalModel() {
|
|
131
|
+
return this.multimodalModel;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Check if multimodal support is available
|
|
135
|
+
*/
|
|
136
|
+
hasMultimodalSupport() {
|
|
137
|
+
return !!this.multimodalModel;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=orchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/models/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export declare class JivaError extends Error {
|
|
2
|
+
code?: string | undefined;
|
|
3
|
+
constructor(message: string, code?: string | undefined);
|
|
4
|
+
}
|
|
5
|
+
export declare class ConfigurationError extends JivaError {
|
|
6
|
+
constructor(message: string);
|
|
7
|
+
}
|
|
8
|
+
export declare class ModelError extends JivaError {
|
|
9
|
+
modelName?: string | undefined;
|
|
10
|
+
constructor(message: string, modelName?: string | undefined);
|
|
11
|
+
}
|
|
12
|
+
export declare class MCPError extends JivaError {
|
|
13
|
+
serverName?: string | undefined;
|
|
14
|
+
constructor(message: string, serverName?: string | undefined);
|
|
15
|
+
}
|
|
16
|
+
export declare class WorkspaceError extends JivaError {
|
|
17
|
+
constructor(message: string);
|
|
18
|
+
}
|
|
19
|
+
export declare class ToolCallError extends JivaError {
|
|
20
|
+
toolName?: string | undefined;
|
|
21
|
+
constructor(message: string, toolName?: string | undefined);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAU,SAAQ,KAAK;IACE,IAAI,CAAC,EAAE,MAAM;gBAArC,OAAO,EAAE,MAAM,EAAS,IAAI,CAAC,EAAE,MAAM,YAAA;CAIlD;AAED,qBAAa,kBAAmB,SAAQ,SAAS;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,UAAW,SAAQ,SAAS;IACH,SAAS,CAAC,EAAE,MAAM;gBAA1C,OAAO,EAAE,MAAM,EAAS,SAAS,CAAC,EAAE,MAAM,YAAA;CAIvD;AAED,qBAAa,QAAS,SAAQ,SAAS;IACD,UAAU,CAAC,EAAE,MAAM;gBAA3C,OAAO,EAAE,MAAM,EAAS,UAAU,CAAC,EAAE,MAAM,YAAA;CAIxD;AAED,qBAAa,cAAe,SAAQ,SAAS;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,aAAc,SAAQ,SAAS;IACN,QAAQ,CAAC,EAAE,MAAM;gBAAzC,OAAO,EAAE,MAAM,EAAS,QAAQ,CAAC,EAAE,MAAM,YAAA;CAItD"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export class JivaError extends Error {
|
|
2
|
+
code;
|
|
3
|
+
constructor(message, code) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.code = code;
|
|
6
|
+
this.name = 'JivaError';
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export class ConfigurationError extends JivaError {
|
|
10
|
+
constructor(message) {
|
|
11
|
+
super(message, 'CONFIG_ERROR');
|
|
12
|
+
this.name = 'ConfigurationError';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export class ModelError extends JivaError {
|
|
16
|
+
modelName;
|
|
17
|
+
constructor(message, modelName) {
|
|
18
|
+
super(message, 'MODEL_ERROR');
|
|
19
|
+
this.modelName = modelName;
|
|
20
|
+
this.name = 'ModelError';
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export class MCPError extends JivaError {
|
|
24
|
+
serverName;
|
|
25
|
+
constructor(message, serverName) {
|
|
26
|
+
super(message, 'MCP_ERROR');
|
|
27
|
+
this.serverName = serverName;
|
|
28
|
+
this.name = 'MCPError';
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export class WorkspaceError extends JivaError {
|
|
32
|
+
constructor(message) {
|
|
33
|
+
super(message, 'WORKSPACE_ERROR');
|
|
34
|
+
this.name = 'WorkspaceError';
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export class ToolCallError extends JivaError {
|
|
38
|
+
toolName;
|
|
39
|
+
constructor(message, toolName) {
|
|
40
|
+
super(message, 'TOOL_CALL_ERROR');
|
|
41
|
+
this.toolName = toolName;
|
|
42
|
+
this.name = 'ToolCallError';
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,SAAU,SAAQ,KAAK;IACE;IAApC,YAAY,OAAe,EAAS,IAAa;QAC/C,KAAK,CAAC,OAAO,CAAC,CAAC;QADmB,SAAI,GAAJ,IAAI,CAAS;QAE/C,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,SAAS;IAC/C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,MAAM,OAAO,UAAW,SAAQ,SAAS;IACH;IAApC,YAAY,OAAe,EAAS,SAAkB;QACpD,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QADI,cAAS,GAAT,SAAS,CAAS;QAEpD,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,QAAS,SAAQ,SAAS;IACD;IAApC,YAAY,OAAe,EAAS,UAAmB;QACrD,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QADM,eAAU,GAAV,UAAU,CAAS;QAErD,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,SAAS;IAC3C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,SAAS;IACN;IAApC,YAAY,OAAe,EAAS,QAAiB;QACnD,KAAK,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QADA,aAAQ,GAAR,QAAQ,CAAS;QAEnD,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare enum LogLevel {
|
|
2
|
+
DEBUG = "DEBUG",
|
|
3
|
+
INFO = "INFO",
|
|
4
|
+
WARN = "WARN",
|
|
5
|
+
ERROR = "ERROR",
|
|
6
|
+
SUCCESS = "SUCCESS"
|
|
7
|
+
}
|
|
8
|
+
declare class Logger {
|
|
9
|
+
private static instance;
|
|
10
|
+
private logLevel;
|
|
11
|
+
private constructor();
|
|
12
|
+
static getInstance(): Logger;
|
|
13
|
+
setLogLevel(level: LogLevel): void;
|
|
14
|
+
debug(message: string, ...args: any[]): void;
|
|
15
|
+
info(message: string, ...args: any[]): void;
|
|
16
|
+
warn(message: string, ...args: any[]): void;
|
|
17
|
+
error(message: string, error?: Error | unknown, ...args: any[]): void;
|
|
18
|
+
success(message: string, ...args: any[]): void;
|
|
19
|
+
private log;
|
|
20
|
+
private getPrefix;
|
|
21
|
+
}
|
|
22
|
+
export declare const logger: Logger;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,oBAAY,QAAQ;IAClB,KAAK,UAAU;IACf,IAAI,SAAS;IACb,IAAI,SAAS;IACb,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED,cAAM,MAAM;IACV,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAS;IAChC,OAAO,CAAC,QAAQ,CAA2B;IAE3C,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,MAAM;IAO5B,WAAW,CAAC,KAAK,EAAE,QAAQ;IAI3B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;IAIrC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;IAIpC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;IAIpC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;IAS9D,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;IAIvC,OAAO,CAAC,GAAG;IAgBX,OAAO,CAAC,SAAS;CAgBlB;AAED,eAAO,MAAM,MAAM,QAAuB,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
export var LogLevel;
|
|
3
|
+
(function (LogLevel) {
|
|
4
|
+
LogLevel["DEBUG"] = "DEBUG";
|
|
5
|
+
LogLevel["INFO"] = "INFO";
|
|
6
|
+
LogLevel["WARN"] = "WARN";
|
|
7
|
+
LogLevel["ERROR"] = "ERROR";
|
|
8
|
+
LogLevel["SUCCESS"] = "SUCCESS";
|
|
9
|
+
})(LogLevel || (LogLevel = {}));
|
|
10
|
+
class Logger {
|
|
11
|
+
static instance;
|
|
12
|
+
logLevel = LogLevel.INFO;
|
|
13
|
+
constructor() { }
|
|
14
|
+
static getInstance() {
|
|
15
|
+
if (!Logger.instance) {
|
|
16
|
+
Logger.instance = new Logger();
|
|
17
|
+
}
|
|
18
|
+
return Logger.instance;
|
|
19
|
+
}
|
|
20
|
+
setLogLevel(level) {
|
|
21
|
+
this.logLevel = level;
|
|
22
|
+
}
|
|
23
|
+
debug(message, ...args) {
|
|
24
|
+
this.log(LogLevel.DEBUG, message, ...args);
|
|
25
|
+
}
|
|
26
|
+
info(message, ...args) {
|
|
27
|
+
this.log(LogLevel.INFO, message, ...args);
|
|
28
|
+
}
|
|
29
|
+
warn(message, ...args) {
|
|
30
|
+
this.log(LogLevel.WARN, message, ...args);
|
|
31
|
+
}
|
|
32
|
+
error(message, error, ...args) {
|
|
33
|
+
this.log(LogLevel.ERROR, message, ...args);
|
|
34
|
+
if (error instanceof Error) {
|
|
35
|
+
console.error(chalk.red(error.stack || error.message));
|
|
36
|
+
}
|
|
37
|
+
else if (error) {
|
|
38
|
+
console.error(chalk.red(JSON.stringify(error, null, 2)));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
success(message, ...args) {
|
|
42
|
+
this.log(LogLevel.SUCCESS, message, ...args);
|
|
43
|
+
}
|
|
44
|
+
log(level, message, ...args) {
|
|
45
|
+
const levelOrder = [LogLevel.DEBUG, LogLevel.INFO, LogLevel.WARN, LogLevel.ERROR, LogLevel.SUCCESS];
|
|
46
|
+
const currentLevelIndex = levelOrder.indexOf(this.logLevel);
|
|
47
|
+
const messageLevelIndex = levelOrder.indexOf(level);
|
|
48
|
+
if (messageLevelIndex < currentLevelIndex && level !== LogLevel.SUCCESS) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const timestamp = new Date().toISOString();
|
|
52
|
+
const prefix = this.getPrefix(level);
|
|
53
|
+
const formattedMessage = `${chalk.gray(timestamp)} ${prefix} ${message}`;
|
|
54
|
+
console.log(formattedMessage, ...args);
|
|
55
|
+
}
|
|
56
|
+
getPrefix(level) {
|
|
57
|
+
switch (level) {
|
|
58
|
+
case LogLevel.DEBUG:
|
|
59
|
+
return chalk.gray('[DEBUG]');
|
|
60
|
+
case LogLevel.INFO:
|
|
61
|
+
return chalk.blue('[INFO]');
|
|
62
|
+
case LogLevel.WARN:
|
|
63
|
+
return chalk.yellow('[WARN]');
|
|
64
|
+
case LogLevel.ERROR:
|
|
65
|
+
return chalk.red('[ERROR]');
|
|
66
|
+
case LogLevel.SUCCESS:
|
|
67
|
+
return chalk.green('[SUCCESS]');
|
|
68
|
+
default:
|
|
69
|
+
return '';
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
export const logger = Logger.getInstance();
|
|
74
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|