neuro-cli 4.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/LICENSE +21 -0
- package/README.md +510 -0
- package/dist/advisor/advisor.d.ts +50 -0
- package/dist/advisor/advisor.js +178 -0
- package/dist/agents/base.d.ts +62 -0
- package/dist/agents/base.js +215 -0
- package/dist/agents/orchestrator.d.ts +46 -0
- package/dist/agents/orchestrator.js +192 -0
- package/dist/agents/team.d.ts +51 -0
- package/dist/agents/team.js +210 -0
- package/dist/api/models.d.ts +23 -0
- package/dist/api/models.js +514 -0
- package/dist/api/ollama.d.ts +153 -0
- package/dist/api/ollama.js +751 -0
- package/dist/api/openrouter.d.ts +55 -0
- package/dist/api/openrouter.js +223 -0
- package/dist/commands/commands.d.ts +43 -0
- package/dist/commands/commands.js +308 -0
- package/dist/config/config.d.ts +8 -0
- package/dist/config/config.js +311 -0
- package/dist/context/compaction.d.ts +54 -0
- package/dist/context/compaction.js +251 -0
- package/dist/context/custom-agents.d.ts +107 -0
- package/dist/context/custom-agents.js +397 -0
- package/dist/context/custom-tools.d.ts +120 -0
- package/dist/context/custom-tools.js +564 -0
- package/dist/context/git-checkpoint.d.ts +52 -0
- package/dist/context/git-checkpoint.js +240 -0
- package/dist/context/neuro-md.d.ts +48 -0
- package/dist/context/neuro-md.js +202 -0
- package/dist/context/neuroignore.d.ts +102 -0
- package/dist/context/neuroignore.js +441 -0
- package/dist/context/repo-map.d.ts +38 -0
- package/dist/context/repo-map.js +220 -0
- package/dist/context/skill-standard.d.ts +262 -0
- package/dist/context/skill-standard.js +1156 -0
- package/dist/context/skill-system.d.ts +75 -0
- package/dist/context/skill-system.js +578 -0
- package/dist/context/tree-sitter.d.ts +99 -0
- package/dist/context/tree-sitter.js +1956 -0
- package/dist/core/acp.d.ts +325 -0
- package/dist/core/acp.js +1498 -0
- package/dist/core/api-server.d.ts +143 -0
- package/dist/core/api-server.js +550 -0
- package/dist/core/approval.d.ts +81 -0
- package/dist/core/approval.js +432 -0
- package/dist/core/auto-compact.d.ts +127 -0
- package/dist/core/auto-compact.js +436 -0
- package/dist/core/auto-mode.d.ts +232 -0
- package/dist/core/auto-mode.js +831 -0
- package/dist/core/background-session.d.ts +166 -0
- package/dist/core/background-session.js +696 -0
- package/dist/core/cicd.d.ts +257 -0
- package/dist/core/cicd.js +1443 -0
- package/dist/core/cloud-sync.d.ts +156 -0
- package/dist/core/cloud-sync.js +582 -0
- package/dist/core/code-review.d.ts +132 -0
- package/dist/core/code-review.js +1191 -0
- package/dist/core/completion.d.ts +49 -0
- package/dist/core/completion.js +384 -0
- package/dist/core/context.d.ts +38 -0
- package/dist/core/context.js +144 -0
- package/dist/core/diff-preview.d.ts +35 -0
- package/dist/core/diff-preview.js +173 -0
- package/dist/core/doom-loop.d.ts +51 -0
- package/dist/core/doom-loop.js +179 -0
- package/dist/core/engine.d.ts +183 -0
- package/dist/core/engine.js +942 -0
- package/dist/core/extended-thinking.d.ts +103 -0
- package/dist/core/extended-thinking.js +269 -0
- package/dist/core/fallback.d.ts +54 -0
- package/dist/core/fallback.js +104 -0
- package/dist/core/git-worktree.d.ts +139 -0
- package/dist/core/git-worktree.js +614 -0
- package/dist/core/headless.d.ts +30 -0
- package/dist/core/headless.js +101 -0
- package/dist/core/i18n.d.ts +83 -0
- package/dist/core/i18n.js +739 -0
- package/dist/core/linting.d.ts +129 -0
- package/dist/core/linting.js +699 -0
- package/dist/core/model-router.d.ts +109 -0
- package/dist/core/model-router.js +581 -0
- package/dist/core/multi-model.d.ts +243 -0
- package/dist/core/multi-model.js +1099 -0
- package/dist/core/multi-session.d.ts +144 -0
- package/dist/core/multi-session.js +442 -0
- package/dist/core/multimodal.d.ts +125 -0
- package/dist/core/multimodal.js +286 -0
- package/dist/core/observability.d.ts +93 -0
- package/dist/core/observability.js +737 -0
- package/dist/core/os-sandbox.d.ts +122 -0
- package/dist/core/os-sandbox.js +1193 -0
- package/dist/core/outcome-grading.d.ts +228 -0
- package/dist/core/outcome-grading.js +1123 -0
- package/dist/core/output-styles.d.ts +57 -0
- package/dist/core/output-styles.js +382 -0
- package/dist/core/parallel-agents.d.ts +183 -0
- package/dist/core/parallel-agents.js +563 -0
- package/dist/core/plugin-bundle.d.ts +236 -0
- package/dist/core/plugin-bundle.js +887 -0
- package/dist/core/plugin-sdk.d.ts +139 -0
- package/dist/core/plugin-sdk.js +273 -0
- package/dist/core/prompt-cache.d.ts +163 -0
- package/dist/core/prompt-cache.js +599 -0
- package/dist/core/sandbox.d.ts +127 -0
- package/dist/core/sandbox.js +369 -0
- package/dist/core/scheduled-tasks.d.ts +151 -0
- package/dist/core/scheduled-tasks.js +502 -0
- package/dist/core/security-scanner.d.ts +160 -0
- package/dist/core/security-scanner.js +1494 -0
- package/dist/core/session.d.ts +83 -0
- package/dist/core/session.js +269 -0
- package/dist/core/shell-completion.d.ts +51 -0
- package/dist/core/shell-completion.js +674 -0
- package/dist/core/smart-monitor.d.ts +146 -0
- package/dist/core/smart-monitor.js +1199 -0
- package/dist/core/spec-driven.d.ts +233 -0
- package/dist/core/spec-driven.js +1485 -0
- package/dist/core/spending-warnings.d.ts +123 -0
- package/dist/core/spending-warnings.js +456 -0
- package/dist/core/sub-agent.d.ts +298 -0
- package/dist/core/sub-agent.js +1023 -0
- package/dist/core/telemetry.d.ts +157 -0
- package/dist/core/telemetry.js +412 -0
- package/dist/core/terminal-ux.d.ts +134 -0
- package/dist/core/terminal-ux.js +649 -0
- package/dist/core/testing.d.ts +146 -0
- package/dist/core/testing.js +1200 -0
- package/dist/core/types.d.ts +439 -0
- package/dist/core/types.js +6 -0
- package/dist/core/undo-redo.d.ts +112 -0
- package/dist/core/undo-redo.js +290 -0
- package/dist/core/updater.d.ts +159 -0
- package/dist/core/updater.js +608 -0
- package/dist/core/vim-mode.d.ts +151 -0
- package/dist/core/vim-mode.js +771 -0
- package/dist/core/voice.d.ts +137 -0
- package/dist/core/voice.js +538 -0
- package/dist/core/web-dashboard.d.ts +109 -0
- package/dist/core/web-dashboard.js +484 -0
- package/dist/hooks/hooks.d.ts +74 -0
- package/dist/hooks/hooks.js +160 -0
- package/dist/hooks/llm-evaluator.d.ts +165 -0
- package/dist/hooks/llm-evaluator.js +560 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +1186 -0
- package/dist/lsp/lsp-manager.d.ts +63 -0
- package/dist/lsp/lsp-manager.js +351 -0
- package/dist/mcp/client.d.ts +133 -0
- package/dist/mcp/client.js +684 -0
- package/dist/mcp/mcp-apps.d.ts +70 -0
- package/dist/mcp/mcp-apps.js +1007 -0
- package/dist/tools/bash.d.ts +5 -0
- package/dist/tools/bash.js +195 -0
- package/dist/tools/browser.d.ts +92 -0
- package/dist/tools/browser.js +1570 -0
- package/dist/tools/extended.d.ts +6 -0
- package/dist/tools/extended.js +191 -0
- package/dist/tools/file.d.ts +10 -0
- package/dist/tools/file.js +382 -0
- package/dist/tools/github.d.ts +389 -0
- package/dist/tools/github.js +759 -0
- package/dist/tools/index.d.ts +9 -0
- package/dist/tools/index.js +40 -0
- package/dist/tools/memory.d.ts +6 -0
- package/dist/tools/memory.js +197 -0
- package/dist/tools/registry.d.ts +29 -0
- package/dist/tools/registry.js +64 -0
- package/dist/tools/web.d.ts +6 -0
- package/dist/tools/web.js +150 -0
- package/dist/ui/renderer.d.ts +97 -0
- package/dist/ui/renderer.js +279 -0
- package/dist/ui/theme.d.ts +27 -0
- package/dist/ui/theme.js +106 -0
- package/package.json +83 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { BaseAgent, AgentCallbacks } from '../agents/base.js';
|
|
2
|
+
import { OpenRouterClient, TokenUsage } from '../api/openrouter.js';
|
|
3
|
+
import { ToolRegistry } from '../tools/registry.js';
|
|
4
|
+
import { AgentExecution } from '../core/types.js';
|
|
5
|
+
export interface TeamMessage {
|
|
6
|
+
from: string;
|
|
7
|
+
to: string | 'all';
|
|
8
|
+
content: string;
|
|
9
|
+
timestamp: number;
|
|
10
|
+
type: 'task' | 'result' | 'question' | 'coordination' | 'status';
|
|
11
|
+
}
|
|
12
|
+
export interface TeamTask {
|
|
13
|
+
id: string;
|
|
14
|
+
description: string;
|
|
15
|
+
assignedTo: string;
|
|
16
|
+
status: 'pending' | 'in_progress' | 'completed' | 'failed';
|
|
17
|
+
result?: string;
|
|
18
|
+
dependsOn: string[];
|
|
19
|
+
}
|
|
20
|
+
export interface TeamResult {
|
|
21
|
+
tasks: TeamTask[];
|
|
22
|
+
messages: TeamMessage[];
|
|
23
|
+
totalUsage: TokenUsage;
|
|
24
|
+
execution: AgentExecution;
|
|
25
|
+
}
|
|
26
|
+
export declare class AgentTeam {
|
|
27
|
+
private teamName;
|
|
28
|
+
private lead;
|
|
29
|
+
private members;
|
|
30
|
+
private client;
|
|
31
|
+
private registry;
|
|
32
|
+
private workingDirectory;
|
|
33
|
+
private sessionId;
|
|
34
|
+
private tasks;
|
|
35
|
+
private messages;
|
|
36
|
+
private completedTasks;
|
|
37
|
+
constructor(teamName: string, lead: BaseAgent, client: OpenRouterClient, registry: ToolRegistry, workingDirectory: string, sessionId: string);
|
|
38
|
+
/**
|
|
39
|
+
* Add a team member
|
|
40
|
+
*/
|
|
41
|
+
addMember(agent: BaseAgent): void;
|
|
42
|
+
/**
|
|
43
|
+
* Execute a task with the team
|
|
44
|
+
*/
|
|
45
|
+
execute(task: string, callbacks?: AgentCallbacks): Promise<TeamResult>;
|
|
46
|
+
private createTaskPlan;
|
|
47
|
+
private getReadyTasks;
|
|
48
|
+
private getDependencyContext;
|
|
49
|
+
private sendMessage;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=team.d.ts.map
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// NeuroCLI - Agent Teams with Inter-Agent Messaging
|
|
3
|
+
// (Like Claude Code's Agent Teams + Dynamic Workflows)
|
|
4
|
+
// ============================================================
|
|
5
|
+
export class AgentTeam {
|
|
6
|
+
teamName;
|
|
7
|
+
lead;
|
|
8
|
+
members = new Map();
|
|
9
|
+
client;
|
|
10
|
+
registry;
|
|
11
|
+
workingDirectory;
|
|
12
|
+
sessionId;
|
|
13
|
+
tasks = new Map();
|
|
14
|
+
messages = [];
|
|
15
|
+
completedTasks = new Set();
|
|
16
|
+
constructor(teamName, lead, client, registry, workingDirectory, sessionId) {
|
|
17
|
+
this.teamName = teamName;
|
|
18
|
+
this.lead = lead;
|
|
19
|
+
this.client = client;
|
|
20
|
+
this.registry = registry;
|
|
21
|
+
this.workingDirectory = workingDirectory;
|
|
22
|
+
this.sessionId = sessionId;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Add a team member
|
|
26
|
+
*/
|
|
27
|
+
addMember(agent) {
|
|
28
|
+
this.members.set(agent.name, agent);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Execute a task with the team
|
|
32
|
+
*/
|
|
33
|
+
async execute(task, callbacks) {
|
|
34
|
+
const startTime = Date.now();
|
|
35
|
+
let totalUsage = { inputTokens: 0, outputTokens: 0, cost: 0 };
|
|
36
|
+
// Step 1: Lead analyzes task and creates sub-tasks
|
|
37
|
+
callbacks?.onThinking?.(`🧑💼 Lead "${this.lead.name}" is planning task distribution...`);
|
|
38
|
+
const plan = await this.createTaskPlan(task, callbacks);
|
|
39
|
+
// Step 2: Execute tasks with coordination
|
|
40
|
+
callbacks?.onThinking?.(`📋 Plan: ${plan.length} sub-tasks created`);
|
|
41
|
+
for (const teamTask of plan) {
|
|
42
|
+
this.tasks.set(teamTask.id, teamTask);
|
|
43
|
+
}
|
|
44
|
+
// Execute tasks respecting dependencies
|
|
45
|
+
let iteration = 0;
|
|
46
|
+
const maxIterations = plan.length * 3; // Safety limit
|
|
47
|
+
while (this.completedTasks.size < plan.length && iteration < maxIterations) {
|
|
48
|
+
iteration++;
|
|
49
|
+
// Find ready tasks
|
|
50
|
+
const readyTasks = this.getReadyTasks();
|
|
51
|
+
if (readyTasks.length === 0) {
|
|
52
|
+
// Deadlock - mark remaining as failed
|
|
53
|
+
for (const [id, task] of this.tasks) {
|
|
54
|
+
if (task.status === 'pending') {
|
|
55
|
+
task.status = 'failed';
|
|
56
|
+
task.result = 'Deadlock: dependencies could not be resolved';
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
// Execute ready tasks (sequentially for safety, could parallelize)
|
|
62
|
+
for (const teamTask of readyTasks) {
|
|
63
|
+
const member = this.members.get(teamTask.assignedTo);
|
|
64
|
+
if (!member) {
|
|
65
|
+
teamTask.status = 'failed';
|
|
66
|
+
teamTask.result = `Agent "${teamTask.assignedTo}" not found`;
|
|
67
|
+
this.completedTasks.add(teamTask.id);
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
teamTask.status = 'in_progress';
|
|
71
|
+
callbacks?.onThinking?.(`🤖 ${teamTask.assignedTo} working on: ${teamTask.description.slice(0, 80)}...`);
|
|
72
|
+
// Build context from previous task results
|
|
73
|
+
let fullTask = teamTask.description;
|
|
74
|
+
const depContext = this.getDependencyContext(teamTask);
|
|
75
|
+
if (depContext) {
|
|
76
|
+
fullTask += `\n\n## Context from teammates:\n${depContext}`;
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
const result = await member.run(fullTask, {
|
|
80
|
+
onToken: callbacks?.onToken,
|
|
81
|
+
onToolCall: callbacks?.onToolCall,
|
|
82
|
+
onToolResult: callbacks?.onToolResult,
|
|
83
|
+
onApprovalNeeded: callbacks?.onApprovalNeeded,
|
|
84
|
+
onThinking: callbacks?.onThinking,
|
|
85
|
+
});
|
|
86
|
+
teamTask.status = 'completed';
|
|
87
|
+
teamTask.result = result.content;
|
|
88
|
+
totalUsage.inputTokens += result.usage.inputTokens;
|
|
89
|
+
totalUsage.outputTokens += result.usage.outputTokens;
|
|
90
|
+
totalUsage.cost += result.usage.cost;
|
|
91
|
+
// Send result message to team
|
|
92
|
+
this.sendMessage({
|
|
93
|
+
from: teamTask.assignedTo,
|
|
94
|
+
to: 'all',
|
|
95
|
+
content: `Completed: ${teamTask.description}\nResult: ${result.content.slice(0, 500)}`,
|
|
96
|
+
timestamp: Date.now(),
|
|
97
|
+
type: 'result',
|
|
98
|
+
});
|
|
99
|
+
callbacks?.onThinking?.(`✅ ${teamTask.assignedTo} completed their task`);
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
teamTask.status = 'failed';
|
|
103
|
+
teamTask.result = error instanceof Error ? error.message : String(error);
|
|
104
|
+
this.sendMessage({
|
|
105
|
+
from: teamTask.assignedTo,
|
|
106
|
+
to: this.lead.name,
|
|
107
|
+
content: `Failed: ${teamTask.description}\nError: ${teamTask.result}`,
|
|
108
|
+
timestamp: Date.now(),
|
|
109
|
+
type: 'result',
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
this.completedTasks.add(teamTask.id);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// Step 3: Lead synthesizes final result
|
|
116
|
+
callbacks?.onThinking?.('🧑💼 Lead is synthesizing the final result...');
|
|
117
|
+
const taskResults = Array.from(this.tasks.values())
|
|
118
|
+
.map(t => `[${t.status}] ${t.assignedTo}: ${t.description}\n${t.result || 'No result'}`)
|
|
119
|
+
.join('\n\n');
|
|
120
|
+
const execution = {
|
|
121
|
+
agentName: `Team:${this.teamName}`,
|
|
122
|
+
task,
|
|
123
|
+
startTime,
|
|
124
|
+
endTime: Date.now(),
|
|
125
|
+
iterations: iteration,
|
|
126
|
+
tokensUsed: totalUsage.inputTokens + totalUsage.outputTokens,
|
|
127
|
+
status: 'completed',
|
|
128
|
+
};
|
|
129
|
+
return {
|
|
130
|
+
tasks: Array.from(this.tasks.values()),
|
|
131
|
+
messages: this.messages,
|
|
132
|
+
totalUsage,
|
|
133
|
+
execution,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
// ---- Private Methods ----
|
|
137
|
+
async createTaskPlan(task, callbacks) {
|
|
138
|
+
const memberList = Array.from(this.members.entries())
|
|
139
|
+
.map(([name, agent]) => `- ${name}: ${agent.description}`)
|
|
140
|
+
.join('\n');
|
|
141
|
+
const prompt = `You are the lead of agent team "${this.teamName}". Break down the following task into sub-tasks for your team members.
|
|
142
|
+
|
|
143
|
+
## Team Members
|
|
144
|
+
${memberList}
|
|
145
|
+
|
|
146
|
+
## Task
|
|
147
|
+
${task}
|
|
148
|
+
|
|
149
|
+
Create a JSON plan with sub-tasks. Each task should have:
|
|
150
|
+
- id: unique identifier (e.g., "t1", "t2")
|
|
151
|
+
- description: what the agent should do
|
|
152
|
+
- assignedTo: which team member
|
|
153
|
+
- dependsOn: array of task IDs this depends on (empty if none)
|
|
154
|
+
|
|
155
|
+
Respond with ONLY a JSON array of tasks.`;
|
|
156
|
+
const response = await this.lead.query(prompt);
|
|
157
|
+
try {
|
|
158
|
+
const jsonMatch = response.match(/\[[\s\S]*\]/);
|
|
159
|
+
if (jsonMatch) {
|
|
160
|
+
const tasks = JSON.parse(jsonMatch[0]);
|
|
161
|
+
return tasks.map(t => ({
|
|
162
|
+
id: t.id,
|
|
163
|
+
description: t.description,
|
|
164
|
+
assignedTo: t.assignedTo,
|
|
165
|
+
status: 'pending',
|
|
166
|
+
dependsOn: t.dependsOn || [],
|
|
167
|
+
}));
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
catch { }
|
|
171
|
+
// Fallback: assign everything to first member
|
|
172
|
+
const firstMember = Array.from(this.members.keys())[0];
|
|
173
|
+
return [{
|
|
174
|
+
id: 't1',
|
|
175
|
+
description: task,
|
|
176
|
+
assignedTo: firstMember,
|
|
177
|
+
status: 'pending',
|
|
178
|
+
dependsOn: [],
|
|
179
|
+
}];
|
|
180
|
+
}
|
|
181
|
+
getReadyTasks() {
|
|
182
|
+
return Array.from(this.tasks.values()).filter(task => {
|
|
183
|
+
if (task.status !== 'pending')
|
|
184
|
+
return false;
|
|
185
|
+
if (task.dependsOn.length === 0)
|
|
186
|
+
return true;
|
|
187
|
+
return task.dependsOn.every(depId => {
|
|
188
|
+
const dep = this.tasks.get(depId);
|
|
189
|
+
return dep?.status === 'completed';
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
getDependencyContext(task) {
|
|
194
|
+
if (task.dependsOn.length === 0)
|
|
195
|
+
return '';
|
|
196
|
+
return task.dependsOn
|
|
197
|
+
.map(depId => {
|
|
198
|
+
const dep = this.tasks.get(depId);
|
|
199
|
+
if (!dep || dep.status !== 'completed')
|
|
200
|
+
return '';
|
|
201
|
+
return `### ${dep.assignedTo} (${dep.description})\n${dep.result?.slice(0, 1000) || 'No result'}`;
|
|
202
|
+
})
|
|
203
|
+
.filter(Boolean)
|
|
204
|
+
.join('\n\n');
|
|
205
|
+
}
|
|
206
|
+
sendMessage(msg) {
|
|
207
|
+
this.messages.push(msg);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=team.js.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ModelConfig } from '../core/types.js';
|
|
2
|
+
export declare const MODELS: Record<string, ModelConfig>;
|
|
3
|
+
export declare const MODEL_CATEGORIES: {
|
|
4
|
+
free: string[];
|
|
5
|
+
'free-vision': string[];
|
|
6
|
+
'free-tools': string[];
|
|
7
|
+
flagship: string[];
|
|
8
|
+
balanced: string[];
|
|
9
|
+
fast: string[];
|
|
10
|
+
'open-source': string[];
|
|
11
|
+
};
|
|
12
|
+
/** Best free model for coding (with tool support) */
|
|
13
|
+
export declare const BEST_FREE_CODING_MODEL = "qwen/qwen3-coder:free";
|
|
14
|
+
/** Best free model overall (largest context + tools) */
|
|
15
|
+
export declare const BEST_FREE_MODEL = "nvidia/nemotron-3-super-120b-a12b:free";
|
|
16
|
+
/** Default free model for agents */
|
|
17
|
+
export declare const DEFAULT_FREE_MODEL = "qwen/qwen3-coder:free";
|
|
18
|
+
export declare function getModel(id: string): ModelConfig | undefined;
|
|
19
|
+
export declare function isFreeModel(modelId: string): boolean;
|
|
20
|
+
export declare function calculateCost(modelId: string, inputTokens: number, outputTokens: number): number;
|
|
21
|
+
export declare function getFreeModels(): ModelConfig[];
|
|
22
|
+
export declare function getFreeModelsWithTools(): ModelConfig[];
|
|
23
|
+
//# sourceMappingURL=models.d.ts.map
|