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.
Files changed (94) hide show
  1. package/.env.example +18 -0
  2. package/.fluen/cache/state.json +7 -0
  3. package/README.md +350 -0
  4. package/actions/action_registry.py +75 -0
  5. package/actions/python_coder.py +470 -0
  6. package/api/main.py +269 -0
  7. package/dist/core/agent.d.ts +69 -0
  8. package/dist/core/agent.d.ts.map +1 -0
  9. package/dist/core/agent.js +214 -0
  10. package/dist/core/agent.js.map +1 -0
  11. package/dist/core/config.d.ts +222 -0
  12. package/dist/core/config.d.ts.map +1 -0
  13. package/dist/core/config.js +138 -0
  14. package/dist/core/config.js.map +1 -0
  15. package/dist/core/workspace.d.ts +53 -0
  16. package/dist/core/workspace.d.ts.map +1 -0
  17. package/dist/core/workspace.js +164 -0
  18. package/dist/core/workspace.js.map +1 -0
  19. package/dist/index.d.ts +17 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +17 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/interfaces/cli/index.d.ts +6 -0
  24. package/dist/interfaces/cli/index.d.ts.map +1 -0
  25. package/dist/interfaces/cli/index.js +257 -0
  26. package/dist/interfaces/cli/index.js.map +1 -0
  27. package/dist/interfaces/cli/repl.d.ts +9 -0
  28. package/dist/interfaces/cli/repl.d.ts.map +1 -0
  29. package/dist/interfaces/cli/repl.js +139 -0
  30. package/dist/interfaces/cli/repl.js.map +1 -0
  31. package/dist/interfaces/cli/setup-wizard.d.ts +9 -0
  32. package/dist/interfaces/cli/setup-wizard.d.ts.map +1 -0
  33. package/dist/interfaces/cli/setup-wizard.js +321 -0
  34. package/dist/interfaces/cli/setup-wizard.js.map +1 -0
  35. package/dist/mcp/client.d.ts +58 -0
  36. package/dist/mcp/client.d.ts.map +1 -0
  37. package/dist/mcp/client.js +178 -0
  38. package/dist/mcp/client.js.map +1 -0
  39. package/dist/mcp/server-manager.d.ts +58 -0
  40. package/dist/mcp/server-manager.d.ts.map +1 -0
  41. package/dist/mcp/server-manager.js +135 -0
  42. package/dist/mcp/server-manager.js.map +1 -0
  43. package/dist/models/base.d.ts +57 -0
  44. package/dist/models/base.d.ts.map +1 -0
  45. package/dist/models/base.js +5 -0
  46. package/dist/models/base.js.map +1 -0
  47. package/dist/models/harmony.d.ts +78 -0
  48. package/dist/models/harmony.d.ts.map +1 -0
  49. package/dist/models/harmony.js +226 -0
  50. package/dist/models/harmony.js.map +1 -0
  51. package/dist/models/krutrim.d.ts +30 -0
  52. package/dist/models/krutrim.d.ts.map +1 -0
  53. package/dist/models/krutrim.js +185 -0
  54. package/dist/models/krutrim.js.map +1 -0
  55. package/dist/models/orchestrator.d.ts +49 -0
  56. package/dist/models/orchestrator.d.ts.map +1 -0
  57. package/dist/models/orchestrator.js +140 -0
  58. package/dist/models/orchestrator.js.map +1 -0
  59. package/dist/utils/errors.d.ts +23 -0
  60. package/dist/utils/errors.d.ts.map +1 -0
  61. package/dist/utils/errors.js +45 -0
  62. package/dist/utils/errors.js.map +1 -0
  63. package/dist/utils/logger.d.ts +24 -0
  64. package/dist/utils/logger.d.ts.map +1 -0
  65. package/dist/utils/logger.js +74 -0
  66. package/dist/utils/logger.js.map +1 -0
  67. package/docs/BUILD.md +317 -0
  68. package/docs/DEV_WORKFLOW.md +197 -0
  69. package/docs/FILESYSTEM_ACCESS.md +244 -0
  70. package/docs/IMPLEMENTATION_SUMMARY.md +459 -0
  71. package/docs/QUICKSTART.md +162 -0
  72. package/docs/TROUBLESHOOTING.md +393 -0
  73. package/examples/code-review-directive.md +26 -0
  74. package/examples/data-analysis-directive.md +26 -0
  75. package/examples/programmatic-usage.ts +120 -0
  76. package/jiva-directive.md +24 -0
  77. package/package.json +46 -0
  78. package/setup.sh +65 -0
  79. package/src/core/agent.ts +275 -0
  80. package/src/core/config.ts +177 -0
  81. package/src/core/workspace.ts +205 -0
  82. package/src/index.ts +21 -0
  83. package/src/interfaces/cli/index.ts +290 -0
  84. package/src/interfaces/cli/repl.ts +182 -0
  85. package/src/interfaces/cli/setup-wizard.ts +355 -0
  86. package/src/mcp/client.ts +231 -0
  87. package/src/mcp/server-manager.ts +168 -0
  88. package/src/models/base.ts +63 -0
  89. package/src/models/harmony.ts +301 -0
  90. package/src/models/krutrim.ts +236 -0
  91. package/src/models/orchestrator.ts +180 -0
  92. package/src/utils/errors.ts +41 -0
  93. package/src/utils/logger.ts +87 -0
  94. package/tsconfig.json +22 -0
@@ -0,0 +1,135 @@
1
+ /**
2
+ * MCP Server Manager
3
+ *
4
+ * Manages lifecycle of MCP servers based on configuration
5
+ */
6
+ import { MCPClient } from './client.js';
7
+ import { logger } from '../utils/logger.js';
8
+ import { MCPError } from '../utils/errors.js';
9
+ export class MCPServerManager {
10
+ mcpClient;
11
+ serverConfigs = new Map();
12
+ constructor() {
13
+ this.mcpClient = new MCPClient();
14
+ }
15
+ /**
16
+ * Initialize servers from configuration
17
+ */
18
+ async initialize(servers) {
19
+ logger.info('Initializing MCP servers...');
20
+ const serverEntries = Object.entries(servers);
21
+ const enabledServers = serverEntries.filter(([_, config]) => config.enabled);
22
+ logger.info(`Found ${enabledServers.length} enabled MCP servers`);
23
+ // Store configs
24
+ for (const [name, config] of serverEntries) {
25
+ this.serverConfigs.set(name, config);
26
+ }
27
+ // Connect to enabled servers
28
+ const connectionPromises = enabledServers.map(async ([name, config]) => {
29
+ try {
30
+ await this.connectServer(name, config);
31
+ return { name, success: true };
32
+ }
33
+ catch (error) {
34
+ logger.warn(`Failed to connect to MCP server '${name}': ${error instanceof Error ? error.message : String(error)}`);
35
+ // Continue with other servers even if one fails
36
+ return { name, success: false };
37
+ }
38
+ });
39
+ const results = await Promise.allSettled(connectionPromises);
40
+ const connectedServers = this.mcpClient.getConnectedServers();
41
+ if (connectedServers.length > 0) {
42
+ logger.success(`MCP servers connected: ${connectedServers.join(', ')}`);
43
+ }
44
+ else if (enabledServers.length > 0) {
45
+ logger.warn('No MCP servers connected. Agent will run without external tools.');
46
+ }
47
+ else {
48
+ logger.info('No MCP servers enabled. Agent will run without external tools.');
49
+ }
50
+ }
51
+ /**
52
+ * Connect to a specific server
53
+ */
54
+ async connectServer(name, config) {
55
+ await this.mcpClient.connect(name, config.command, config.args || [], config.env);
56
+ }
57
+ /**
58
+ * Add and connect to a new server
59
+ */
60
+ async addServer(name, config) {
61
+ if (this.serverConfigs.has(name)) {
62
+ throw new MCPError(`Server '${name}' already exists`, name);
63
+ }
64
+ this.serverConfigs.set(name, config);
65
+ if (config.enabled) {
66
+ await this.connectServer(name, config);
67
+ }
68
+ }
69
+ /**
70
+ * Remove and disconnect from a server
71
+ */
72
+ async removeServer(name) {
73
+ await this.mcpClient.disconnect(name);
74
+ this.serverConfigs.delete(name);
75
+ }
76
+ /**
77
+ * Enable a server and connect
78
+ */
79
+ async enableServer(name) {
80
+ const config = this.serverConfigs.get(name);
81
+ if (!config) {
82
+ throw new MCPError(`Server '${name}' not found in configuration`, name);
83
+ }
84
+ config.enabled = true;
85
+ if (!this.mcpClient.isConnected(name)) {
86
+ await this.connectServer(name, config);
87
+ }
88
+ }
89
+ /**
90
+ * Disable a server and disconnect
91
+ */
92
+ async disableServer(name) {
93
+ const config = this.serverConfigs.get(name);
94
+ if (!config) {
95
+ throw new MCPError(`Server '${name}' not found in configuration`, name);
96
+ }
97
+ config.enabled = false;
98
+ await this.mcpClient.disconnect(name);
99
+ }
100
+ /**
101
+ * Get the MCP client instance
102
+ */
103
+ getClient() {
104
+ return this.mcpClient;
105
+ }
106
+ /**
107
+ * Get all server configurations
108
+ */
109
+ getServerConfigs() {
110
+ return new Map(this.serverConfigs);
111
+ }
112
+ /**
113
+ * Cleanup all servers
114
+ */
115
+ async cleanup() {
116
+ logger.info('Cleaning up MCP servers...');
117
+ await this.mcpClient.disconnectAll();
118
+ }
119
+ /**
120
+ * Get server status
121
+ */
122
+ getServerStatus() {
123
+ return Array.from(this.serverConfigs.entries()).map(([name, config]) => {
124
+ const connected = this.mcpClient.isConnected(name);
125
+ const tools = connected ? this.mcpClient.getServerTools(name) : [];
126
+ return {
127
+ name,
128
+ enabled: config.enabled,
129
+ connected,
130
+ toolCount: tools.length,
131
+ };
132
+ });
133
+ }
134
+ }
135
+ //# sourceMappingURL=server-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-manager.js","sourceRoot":"","sources":["../../src/mcp/server-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Base model interfaces and types
3
+ */
4
+ export interface Message {
5
+ role: 'system' | 'developer' | 'user' | 'assistant' | 'tool';
6
+ content: string | MessageContent[];
7
+ name?: string;
8
+ tool_call_id?: string;
9
+ }
10
+ export interface MessageContent {
11
+ type: 'text' | 'image_url';
12
+ text?: string;
13
+ image_url?: {
14
+ url: string;
15
+ };
16
+ }
17
+ export interface ModelResponse {
18
+ content: string;
19
+ toolCalls?: ToolCall[];
20
+ usage?: {
21
+ promptTokens: number;
22
+ completionTokens: number;
23
+ totalTokens: number;
24
+ };
25
+ raw?: any;
26
+ }
27
+ export interface ToolCall {
28
+ id: string;
29
+ type: 'function';
30
+ function: {
31
+ name: string;
32
+ arguments: string;
33
+ };
34
+ }
35
+ export interface Tool {
36
+ name: string;
37
+ description: string;
38
+ parameters: {
39
+ type: 'object';
40
+ properties: Record<string, any>;
41
+ required?: string[];
42
+ };
43
+ }
44
+ export interface ChatCompletionOptions {
45
+ model: string;
46
+ messages: Message[];
47
+ tools?: Tool[];
48
+ temperature?: number;
49
+ maxTokens?: number;
50
+ stream?: boolean;
51
+ }
52
+ export interface IModel {
53
+ chat(options: ChatCompletionOptions): Promise<ModelResponse>;
54
+ supportsVision(): boolean;
55
+ supportsToolCalling(): boolean;
56
+ }
57
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/models/base.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,QAAQ,GAAG,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAC7D,OAAO,EAAE,MAAM,GAAG,cAAc,EAAE,CAAC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE;QACV,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE;QACN,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,GAAG,CAAC,EAAE,GAAG,CAAC;CACX;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAC7D,cAAc,IAAI,OAAO,CAAC;IAC1B,mBAAmB,IAAI,OAAO,CAAC;CAChC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Base model interfaces and types
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/models/base.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Harmony Response Format Handler
3
+ *
4
+ * Implements the Harmony format required by gpt-oss-120b models.
5
+ * Handles multi-channel output, tool calling, and structured message formatting.
6
+ *
7
+ * Reference: https://github.com/openai/harmony
8
+ */
9
+ export interface HarmonyMessage {
10
+ role: 'system' | 'developer' | 'user' | 'assistant' | 'tool';
11
+ content: string | HarmonyContent[];
12
+ name?: string;
13
+ tool_call_id?: string;
14
+ }
15
+ export interface HarmonyContent {
16
+ type: 'text' | 'image_url';
17
+ text?: string;
18
+ image_url?: {
19
+ url: string;
20
+ };
21
+ }
22
+ export interface HarmonyToolDefinition {
23
+ name: string;
24
+ description: string;
25
+ parameters: {
26
+ type: 'object';
27
+ properties: Record<string, any>;
28
+ required?: string[];
29
+ };
30
+ }
31
+ export interface HarmonyToolCall {
32
+ id: string;
33
+ type: 'function';
34
+ function: {
35
+ name: string;
36
+ arguments: string;
37
+ };
38
+ }
39
+ export interface ParsedHarmonyResponse {
40
+ analysis?: string;
41
+ commentary?: string;
42
+ final?: string;
43
+ toolCalls: HarmonyToolCall[];
44
+ rawResponse: string;
45
+ }
46
+ /**
47
+ * Formats tools into Harmony's TypeScript-like syntax for the developer message
48
+ */
49
+ export declare function formatToolsForHarmony(tools: HarmonyToolDefinition[]): string;
50
+ /**
51
+ * Formats messages into Harmony format
52
+ */
53
+ export declare function formatMessagesForHarmony(messages: HarmonyMessage[], tools?: HarmonyToolDefinition[]): HarmonyMessage[];
54
+ /**
55
+ * Parses Harmony response with multi-channel support
56
+ *
57
+ * Expected format:
58
+ * <|channel|>analysis
59
+ * [chain of thought content]
60
+ * <|channel|>final
61
+ * [final response]
62
+ * <|call|>function_name({"param": "value"})<|return|>
63
+ */
64
+ export declare function parseHarmonyResponse(response: string): ParsedHarmonyResponse;
65
+ /**
66
+ * Extracts assistant message with malformed tool call detection
67
+ * This handles cases where gpt-oss-120b generates incorrect tool call formats
68
+ */
69
+ export declare function extractAssistantMessage(response: string): string;
70
+ /**
71
+ * Validates tool call against available tools
72
+ */
73
+ export declare function validateToolCall(toolCall: HarmonyToolCall, availableTools: HarmonyToolDefinition[]): boolean;
74
+ /**
75
+ * Formats tool result for Harmony format
76
+ */
77
+ export declare function formatToolResult(toolCallId: string, toolName: string, result: any): HarmonyMessage;
78
+ //# sourceMappingURL=harmony.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harmony.d.ts","sourceRoot":"","sources":["../../src/models/harmony.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,GAAG,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAC7D,OAAO,EAAE,MAAM,GAAG,cAAc,EAAE,CAAC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE;QACV,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;CACH;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,qBAAqB,EAAE,GAAG,MAAM,CAoD5E;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,cAAc,EAAE,EAC1B,KAAK,CAAC,EAAE,qBAAqB,EAAE,GAC9B,cAAc,EAAE,CAmBlB;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,qBAAqB,CAmF5E;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAchE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,eAAe,EACzB,cAAc,EAAE,qBAAqB,EAAE,GACtC,OAAO,CAyBT;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,GAAG,GACV,cAAc,CAOhB"}
@@ -0,0 +1,226 @@
1
+ /**
2
+ * Harmony Response Format Handler
3
+ *
4
+ * Implements the Harmony format required by gpt-oss-120b models.
5
+ * Handles multi-channel output, tool calling, and structured message formatting.
6
+ *
7
+ * Reference: https://github.com/openai/harmony
8
+ */
9
+ import { logger } from '../utils/logger.js';
10
+ import { ToolCallError } from '../utils/errors.js';
11
+ /**
12
+ * Formats tools into Harmony's TypeScript-like syntax for the developer message
13
+ */
14
+ export function formatToolsForHarmony(tools) {
15
+ if (tools.length === 0)
16
+ return '';
17
+ const toolDefinitions = tools.map(tool => {
18
+ const params = Object.entries(tool.parameters.properties || {})
19
+ .map(([name, schema]) => {
20
+ const required = tool.parameters.required?.includes(name) ? '' : '?';
21
+ const type = schema.type || 'any';
22
+ const description = schema.description ? ` // ${schema.description}` : '';
23
+ return ` ${name}${required}: ${type};${description}`;
24
+ })
25
+ .join('\n');
26
+ return `/**
27
+ * ${tool.description}
28
+ */
29
+ function ${tool.name}(params: {
30
+ ${params}
31
+ }): void;`;
32
+ }).join('\n\n');
33
+ return `# Available Tools
34
+
35
+ You have access to the following tools:
36
+
37
+ <namespace name="functions">
38
+ ${toolDefinitions}
39
+ </namespace>
40
+
41
+ ## CRITICAL: How to Use Tools
42
+
43
+ To execute a tool, you MUST use this EXACT format:
44
+
45
+ <|call|>function_name({"param": "value"})<|return|>
46
+
47
+ Example:
48
+ <|call|>read_file({"path": "/path/to/file"})<|return|>
49
+
50
+ ## Rules:
51
+ 1. Use the EXACT function names from above (e.g., filesystem__read_file)
52
+ 2. Parameters MUST be valid JSON
53
+ 3. Do NOT output markdown code blocks with tool calls
54
+ 4. Do NOT explain what you're doing - just call the tool
55
+ 5. Output the tool call directly with the <|call|> and <|return|> markers
56
+
57
+ WRONG - Do not do this:
58
+ \`\`\`json
59
+ {"action": "read_file", "parameters": {...}}
60
+ \`\`\`
61
+
62
+ CORRECT - Do this:
63
+ <|call|>filesystem__read_file({"path": "/path"})<|return|>`;
64
+ }
65
+ /**
66
+ * Formats messages into Harmony format
67
+ */
68
+ export function formatMessagesForHarmony(messages, tools) {
69
+ const formattedMessages = [];
70
+ // Process messages based on role hierarchy
71
+ for (const msg of messages) {
72
+ if (msg.role === 'developer' && tools && tools.length > 0) {
73
+ // Inject tool definitions into developer message
74
+ const toolSection = formatToolsForHarmony(tools);
75
+ const existingContent = typeof msg.content === 'string' ? msg.content : '';
76
+ formattedMessages.push({
77
+ ...msg,
78
+ content: `${existingContent}\n\n${toolSection}`,
79
+ });
80
+ }
81
+ else {
82
+ formattedMessages.push(msg);
83
+ }
84
+ }
85
+ return formattedMessages;
86
+ }
87
+ /**
88
+ * Parses Harmony response with multi-channel support
89
+ *
90
+ * Expected format:
91
+ * <|channel|>analysis
92
+ * [chain of thought content]
93
+ * <|channel|>final
94
+ * [final response]
95
+ * <|call|>function_name({"param": "value"})<|return|>
96
+ */
97
+ export function parseHarmonyResponse(response) {
98
+ const result = {
99
+ toolCalls: [],
100
+ rawResponse: response,
101
+ };
102
+ // Parse channels
103
+ const channelRegex = /<\|channel\|>(\w+)\s*([\s\S]*?)(?=<\|channel\|>|<\|call\|>|$)/g;
104
+ let match;
105
+ while ((match = channelRegex.exec(response)) !== null) {
106
+ const channelName = match[1];
107
+ const channelContent = match[2].trim();
108
+ if (channelName === 'analysis') {
109
+ result.analysis = channelContent;
110
+ }
111
+ else if (channelName === 'commentary') {
112
+ result.commentary = channelContent;
113
+ }
114
+ else if (channelName === 'final') {
115
+ result.final = channelContent;
116
+ }
117
+ }
118
+ // Parse tool calls
119
+ const toolCallRegex = /<\|call\|>([\s\S]*?)<\|return\|>/g;
120
+ let toolMatch;
121
+ let callId = 0;
122
+ while ((toolMatch = toolCallRegex.exec(response)) !== null) {
123
+ const toolCallContent = toolMatch[1].trim();
124
+ try {
125
+ // Parse function call: function_name({"param": "value"})
126
+ const functionMatch = /^(\w+)\(([\s\S]*)\)$/.exec(toolCallContent);
127
+ if (functionMatch) {
128
+ const functionName = functionMatch[1];
129
+ const argsString = functionMatch[2];
130
+ // Validate JSON
131
+ let parsedArgs;
132
+ try {
133
+ parsedArgs = JSON.parse(argsString);
134
+ }
135
+ catch (e) {
136
+ logger.warn(`Failed to parse tool call arguments for ${functionName}: ${argsString}`);
137
+ // Try to fix common JSON issues
138
+ const fixedArgs = argsString
139
+ .replace(/'/g, '"') // Replace single quotes
140
+ .replace(/(\w+):/g, '"$1":'); // Quote unquoted keys
141
+ try {
142
+ parsedArgs = JSON.parse(fixedArgs);
143
+ logger.debug(`Successfully fixed and parsed arguments: ${fixedArgs}`);
144
+ }
145
+ catch (e2) {
146
+ throw new ToolCallError(`Invalid JSON in tool call arguments: ${argsString}`, functionName);
147
+ }
148
+ }
149
+ result.toolCalls.push({
150
+ id: `call_${callId++}`,
151
+ type: 'function',
152
+ function: {
153
+ name: functionName,
154
+ arguments: JSON.stringify(parsedArgs),
155
+ },
156
+ });
157
+ }
158
+ else {
159
+ logger.warn(`Failed to parse tool call format: ${toolCallContent}`);
160
+ }
161
+ }
162
+ catch (error) {
163
+ logger.error('Error parsing tool call', error);
164
+ }
165
+ }
166
+ // If no channels found, treat entire response as final
167
+ if (!result.analysis && !result.commentary && !result.final && result.toolCalls.length === 0) {
168
+ result.final = response.trim();
169
+ }
170
+ return result;
171
+ }
172
+ /**
173
+ * Extracts assistant message with malformed tool call detection
174
+ * This handles cases where gpt-oss-120b generates incorrect tool call formats
175
+ */
176
+ export function extractAssistantMessage(response) {
177
+ // Remove channel markers and tool calls to get clean message
178
+ let cleaned = response
179
+ .replace(/<\|channel\|>\w+/g, '')
180
+ .replace(/<\|call\|>[\s\S]*?<\|return\|>/g, '')
181
+ .replace(/<\|start\|>/g, '')
182
+ .replace(/<\|end\|>/g, '')
183
+ .replace(/<\|message\|>/g, '')
184
+ .trim();
185
+ // Handle malformed patterns like "assistant<|channel|>analysis"
186
+ cleaned = cleaned.replace(/assistant<\|channel\|>\w+/g, '');
187
+ return cleaned;
188
+ }
189
+ /**
190
+ * Validates tool call against available tools
191
+ */
192
+ export function validateToolCall(toolCall, availableTools) {
193
+ const tool = availableTools.find(t => t.name === toolCall.function.name);
194
+ if (!tool) {
195
+ logger.warn(`Tool not found: ${toolCall.function.name}`);
196
+ return false;
197
+ }
198
+ try {
199
+ const args = JSON.parse(toolCall.function.arguments);
200
+ const required = tool.parameters.required || [];
201
+ // Check required parameters
202
+ for (const param of required) {
203
+ if (!(param in args)) {
204
+ logger.warn(`Missing required parameter '${param}' for tool ${tool.name}`);
205
+ return false;
206
+ }
207
+ }
208
+ return true;
209
+ }
210
+ catch (error) {
211
+ logger.error(`Invalid arguments for tool ${tool.name}`, error);
212
+ return false;
213
+ }
214
+ }
215
+ /**
216
+ * Formats tool result for Harmony format
217
+ */
218
+ export function formatToolResult(toolCallId, toolName, result) {
219
+ return {
220
+ role: 'tool',
221
+ name: toolName,
222
+ tool_call_id: toolCallId,
223
+ content: typeof result === 'string' ? result : JSON.stringify(result, null, 2),
224
+ };
225
+ }
226
+ //# sourceMappingURL=harmony.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harmony.js","sourceRoot":"","sources":["../../src/models/harmony.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
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 { IModel, ChatCompletionOptions, ModelResponse } from './base.js';
8
+ export interface KrutrimConfig {
9
+ endpoint: string;
10
+ apiKey: string;
11
+ model: string;
12
+ type: 'reasoning' | 'multimodal';
13
+ }
14
+ export declare class KrutrimModel implements IModel {
15
+ private config;
16
+ constructor(config: KrutrimConfig);
17
+ supportsVision(): boolean;
18
+ supportsToolCalling(): boolean;
19
+ chat(options: ChatCompletionOptions): Promise<ModelResponse>;
20
+ private attemptChat;
21
+ /**
22
+ * Helper method for vision tasks using multimodal model
23
+ */
24
+ describeImage(imageUrl: string, prompt?: string): Promise<string>;
25
+ }
26
+ /**
27
+ * Factory function to create Krutrim model instances
28
+ */
29
+ export declare function createKrutrimModel(config: KrutrimConfig): KrutrimModel;
30
+ //# sourceMappingURL=krutrim.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"krutrim.d.ts","sourceRoot":"","sources":["../../src/models/krutrim.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,qBAAqB,EAAE,aAAa,EAAW,MAAM,WAAW,CAAC;AAUlF,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,WAAW,GAAG,YAAY,CAAC;CAClC;AAED,qBAAa,YAAa,YAAW,MAAM;IACzC,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,aAAa;IAIjC,cAAc,IAAI,OAAO;IAIzB,mBAAmB,IAAI,OAAO;IAKxB,IAAI,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC;YAmCpD,WAAW;IAuHzB;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CA+BxE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,YAAY,CAEtE"}