automatey 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.defaults +100 -0
- package/.env.secret.example +42 -0
- package/LICENSE +21 -0
- package/README.md +258 -0
- package/dist/adapters/index.d.ts +3 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +3 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/judge-client.d.ts +59 -0
- package/dist/adapters/judge-client.d.ts.map +1 -0
- package/dist/adapters/judge-client.js +123 -0
- package/dist/adapters/judge-client.js.map +1 -0
- package/dist/adapters/llm-client.d.ts +54 -0
- package/dist/adapters/llm-client.d.ts.map +1 -0
- package/dist/adapters/llm-client.js +327 -0
- package/dist/adapters/llm-client.js.map +1 -0
- package/dist/commands/checkpoint-command.d.ts +3 -0
- package/dist/commands/checkpoint-command.d.ts.map +1 -0
- package/dist/commands/checkpoint-command.js +105 -0
- package/dist/commands/checkpoint-command.js.map +1 -0
- package/dist/commands/clear-command.d.ts +3 -0
- package/dist/commands/clear-command.d.ts.map +1 -0
- package/dist/commands/clear-command.js +11 -0
- package/dist/commands/clear-command.js.map +1 -0
- package/dist/commands/compact-command.d.ts +3 -0
- package/dist/commands/compact-command.d.ts.map +1 -0
- package/dist/commands/compact-command.js +20 -0
- package/dist/commands/compact-command.js.map +1 -0
- package/dist/commands/config-command.d.ts +3 -0
- package/dist/commands/config-command.d.ts.map +1 -0
- package/dist/commands/config-command.js +28 -0
- package/dist/commands/config-command.js.map +1 -0
- package/dist/commands/cost-command.d.ts +3 -0
- package/dist/commands/cost-command.d.ts.map +1 -0
- package/dist/commands/cost-command.js +42 -0
- package/dist/commands/cost-command.js.map +1 -0
- package/dist/commands/eval-command.d.ts +16 -0
- package/dist/commands/eval-command.d.ts.map +1 -0
- package/dist/commands/eval-command.js +132 -0
- package/dist/commands/eval-command.js.map +1 -0
- package/dist/commands/help-command.d.ts +3 -0
- package/dist/commands/help-command.d.ts.map +1 -0
- package/dist/commands/help-command.js +37 -0
- package/dist/commands/help-command.js.map +1 -0
- package/dist/commands/index.d.ts +8 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +42 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/load-command.d.ts +3 -0
- package/dist/commands/load-command.d.ts.map +1 -0
- package/dist/commands/load-command.js +42 -0
- package/dist/commands/load-command.js.map +1 -0
- package/dist/commands/model-command.d.ts +3 -0
- package/dist/commands/model-command.d.ts.map +1 -0
- package/dist/commands/model-command.js +42 -0
- package/dist/commands/model-command.js.map +1 -0
- package/dist/commands/save-command.d.ts +3 -0
- package/dist/commands/save-command.d.ts.map +1 -0
- package/dist/commands/save-command.js +17 -0
- package/dist/commands/save-command.js.map +1 -0
- package/dist/commands/servers-command.d.ts +3 -0
- package/dist/commands/servers-command.d.ts.map +1 -0
- package/dist/commands/servers-command.js +99 -0
- package/dist/commands/servers-command.js.map +1 -0
- package/dist/commands/think-command.d.ts +3 -0
- package/dist/commands/think-command.d.ts.map +1 -0
- package/dist/commands/think-command.js +37 -0
- package/dist/commands/think-command.js.map +1 -0
- package/dist/core/chat-engine.d.ts +54 -0
- package/dist/core/chat-engine.d.ts.map +1 -0
- package/dist/core/chat-engine.js +528 -0
- package/dist/core/chat-engine.js.map +1 -0
- package/dist/core/checkpoint-manager.d.ts +50 -0
- package/dist/core/checkpoint-manager.d.ts.map +1 -0
- package/dist/core/checkpoint-manager.js +173 -0
- package/dist/core/checkpoint-manager.js.map +1 -0
- package/dist/core/command-parser.d.ts +6 -0
- package/dist/core/command-parser.d.ts.map +1 -0
- package/dist/core/command-parser.js +14 -0
- package/dist/core/command-parser.js.map +1 -0
- package/dist/core/compact.d.ts +23 -0
- package/dist/core/compact.d.ts.map +1 -0
- package/dist/core/compact.js +56 -0
- package/dist/core/compact.js.map +1 -0
- package/dist/core/config-manager.d.ts +13 -0
- package/dist/core/config-manager.d.ts.map +1 -0
- package/dist/core/config-manager.js +86 -0
- package/dist/core/config-manager.js.map +1 -0
- package/dist/core/context-manager.d.ts +17 -0
- package/dist/core/context-manager.d.ts.map +1 -0
- package/dist/core/context-manager.js +51 -0
- package/dist/core/context-manager.js.map +1 -0
- package/dist/core/eval-runner.d.ts +110 -0
- package/dist/core/eval-runner.d.ts.map +1 -0
- package/dist/core/eval-runner.js +177 -0
- package/dist/core/eval-runner.js.map +1 -0
- package/dist/core/index.d.ts +12 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +11 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/interfaces.d.ts +179 -0
- package/dist/core/interfaces.d.ts.map +1 -0
- package/dist/core/interfaces.js +6 -0
- package/dist/core/interfaces.js.map +1 -0
- package/dist/core/mcp-client-manager.d.ts +32 -0
- package/dist/core/mcp-client-manager.d.ts.map +1 -0
- package/dist/core/mcp-client-manager.js +118 -0
- package/dist/core/mcp-client-manager.js.map +1 -0
- package/dist/core/mcp-config-manager.d.ts +40 -0
- package/dist/core/mcp-config-manager.d.ts.map +1 -0
- package/dist/core/mcp-config-manager.js +120 -0
- package/dist/core/mcp-config-manager.js.map +1 -0
- package/dist/core/session-manager.d.ts +16 -0
- package/dist/core/session-manager.d.ts.map +1 -0
- package/dist/core/session-manager.js +87 -0
- package/dist/core/session-manager.js.map +1 -0
- package/dist/core/skills-manager.d.ts +49 -0
- package/dist/core/skills-manager.d.ts.map +1 -0
- package/dist/core/skills-manager.js +175 -0
- package/dist/core/skills-manager.js.map +1 -0
- package/dist/core/sub-agent.d.ts +23 -0
- package/dist/core/sub-agent.d.ts.map +1 -0
- package/dist/core/sub-agent.js +98 -0
- package/dist/core/sub-agent.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +230 -0
- package/dist/index.js.map +1 -0
- package/dist/tui/index.d.ts +2 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +3 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/renderer.d.ts +32 -0
- package/dist/tui/renderer.d.ts.map +1 -0
- package/dist/tui/renderer.js +225 -0
- package/dist/tui/renderer.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +19 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +37 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/logo.d.ts +24 -0
- package/dist/utils/logo.d.ts.map +1 -0
- package/dist/utils/logo.js +119 -0
- package/dist/utils/logo.js.map +1 -0
- package/dist/utils/message-formatter.d.ts +19 -0
- package/dist/utils/message-formatter.d.ts.map +1 -0
- package/dist/utils/message-formatter.js +79 -0
- package/dist/utils/message-formatter.js.map +1 -0
- package/dist/utils/syntax-highlighter.d.ts +6 -0
- package/dist/utils/syntax-highlighter.d.ts.map +1 -0
- package/dist/utils/syntax-highlighter.js +34 -0
- package/dist/utils/syntax-highlighter.js.map +1 -0
- package/mcp/coder/dist/server.d.ts +15 -0
- package/mcp/coder/dist/server.d.ts.map +1 -0
- package/mcp/coder/dist/server.js +421 -0
- package/mcp/coder/dist/server.js.map +1 -0
- package/mcp/planner/dist/server.d.ts +23 -0
- package/mcp/planner/dist/server.d.ts.map +1 -0
- package/mcp/planner/dist/server.js +373 -0
- package/mcp/planner/dist/server.js.map +1 -0
- package/package.json +95 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Client ā Vercel AI SDK backed, supports four providers:
|
|
3
|
+
*
|
|
4
|
+
* nemotron ā @ai-sdk/openai-compatible (vLLM / any OpenAI-compatible endpoint)
|
|
5
|
+
* openai ā @ai-sdk/openai (OpenAI API)
|
|
6
|
+
* anthropic ā @ai-sdk/anthropic (Anthropic Claude API)
|
|
7
|
+
* perplexity ā @ai-sdk/perplexity (Perplexity Sonar API)
|
|
8
|
+
*
|
|
9
|
+
* All providers implement ILLMClient through a single class.
|
|
10
|
+
* Thinking/reasoning is only active for nemotron (injects chat_template_kwargs).
|
|
11
|
+
* OpenAI o-series "extended thinking" and Anthropic's thinking block are
|
|
12
|
+
* stubbed here for future use ā the onThinkingToken callback will fire
|
|
13
|
+
* if the provider returns reasoning-delta stream parts.
|
|
14
|
+
*/
|
|
15
|
+
import type { ChatOptions, ChatResponse, ILLMClient, LLMProvider, Message } from '#core/interfaces';
|
|
16
|
+
export interface LLMClientConfig {
|
|
17
|
+
provider: LLMProvider;
|
|
18
|
+
model: string;
|
|
19
|
+
availableModels?: string[];
|
|
20
|
+
/** OpenAI-compatible base URL (nemotron). */
|
|
21
|
+
baseUrl?: string;
|
|
22
|
+
/** API key for openai / anthropic. */
|
|
23
|
+
apiKey?: string;
|
|
24
|
+
}
|
|
25
|
+
export declare class LLMClient implements ILLMClient {
|
|
26
|
+
private provider;
|
|
27
|
+
private currentModel;
|
|
28
|
+
private availableModels;
|
|
29
|
+
private baseUrl;
|
|
30
|
+
private apiKey;
|
|
31
|
+
constructor(config: LLMClientConfig);
|
|
32
|
+
getAvailableModels(): string[];
|
|
33
|
+
getCurrentModel(): string;
|
|
34
|
+
setModel(model: string): void;
|
|
35
|
+
chat(messages: Message[], options?: ChatOptions): Promise<ChatResponse>;
|
|
36
|
+
private _stream;
|
|
37
|
+
private _generate;
|
|
38
|
+
private _buildModel;
|
|
39
|
+
/** True when the current model is an OpenAI Responses-API reasoning model (o1/o3/o4). */
|
|
40
|
+
private _isOpenAIReasoningModel;
|
|
41
|
+
/** Maps a thinking-token budget to an OpenAI `reasoningEffort` string. */
|
|
42
|
+
private _mapReasoningEffort;
|
|
43
|
+
/**
|
|
44
|
+
* Builds provider-specific options for streamText / generateText.
|
|
45
|
+
* - OpenAI reasoning (o1/o3/o4): sets reasoningEffort
|
|
46
|
+
* - Anthropic + thinking=true: enables extended thinking with budgetTokens
|
|
47
|
+
* - Nemotron: handled at model-build time via middleware / transformRequestBody
|
|
48
|
+
*/
|
|
49
|
+
private _buildProviderOptions;
|
|
50
|
+
private _toAIMessages;
|
|
51
|
+
private _toAITools;
|
|
52
|
+
private _mapFinish;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=llm-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-client.d.ts","sourceRoot":"","sources":["../../src/adapters/llm-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAcH,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,UAAU,EACV,WAAW,EACX,OAAO,EAGR,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,SAAU,YAAW,UAAU;IAC1C,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,eAAe,CAAW;IAClC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAqB;gBAEvB,MAAM,EAAE,eAAe;IAQnC,kBAAkB,IAAI,MAAM,EAAE;IAC9B,eAAe,IAAI,MAAM;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IASvB,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;YAgB/D,OAAO;YA6FP,SAAS;IA6CvB,OAAO,CAAC,WAAW;IAmDnB,yFAAyF;IACzF,OAAO,CAAC,uBAAuB;IAI/B,0EAA0E;IAC1E,OAAO,CAAC,mBAAmB;IAQ3B;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAiC7B,OAAO,CAAC,aAAa;IAyCrB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,UAAU;CAKnB"}
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Client ā Vercel AI SDK backed, supports four providers:
|
|
3
|
+
*
|
|
4
|
+
* nemotron ā @ai-sdk/openai-compatible (vLLM / any OpenAI-compatible endpoint)
|
|
5
|
+
* openai ā @ai-sdk/openai (OpenAI API)
|
|
6
|
+
* anthropic ā @ai-sdk/anthropic (Anthropic Claude API)
|
|
7
|
+
* perplexity ā @ai-sdk/perplexity (Perplexity Sonar API)
|
|
8
|
+
*
|
|
9
|
+
* All providers implement ILLMClient through a single class.
|
|
10
|
+
* Thinking/reasoning is only active for nemotron (injects chat_template_kwargs).
|
|
11
|
+
* OpenAI o-series "extended thinking" and Anthropic's thinking block are
|
|
12
|
+
* stubbed here for future use ā the onThinkingToken callback will fire
|
|
13
|
+
* if the provider returns reasoning-delta stream parts.
|
|
14
|
+
*/
|
|
15
|
+
import { createAnthropic } from '@ai-sdk/anthropic';
|
|
16
|
+
import { createOpenAI } from '@ai-sdk/openai';
|
|
17
|
+
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
|
|
18
|
+
import { createPerplexity } from '@ai-sdk/perplexity';
|
|
19
|
+
import { extractReasoningMiddleware, generateText, jsonSchema, streamText, tool, wrapLanguageModel, } from 'ai';
|
|
20
|
+
export class LLMClient {
|
|
21
|
+
provider;
|
|
22
|
+
currentModel;
|
|
23
|
+
availableModels;
|
|
24
|
+
baseUrl;
|
|
25
|
+
apiKey;
|
|
26
|
+
constructor(config) {
|
|
27
|
+
this.provider = config.provider;
|
|
28
|
+
this.currentModel = config.model;
|
|
29
|
+
this.availableModels = config.availableModels ?? [config.model];
|
|
30
|
+
this.baseUrl = (config.baseUrl ?? 'http://localhost:8002').replace(/\/$/, '');
|
|
31
|
+
this.apiKey = config.apiKey;
|
|
32
|
+
}
|
|
33
|
+
getAvailableModels() { return [...this.availableModels]; }
|
|
34
|
+
getCurrentModel() { return this.currentModel; }
|
|
35
|
+
setModel(model) {
|
|
36
|
+
if (!this.availableModels.includes(model)) {
|
|
37
|
+
throw new Error(`Model "${model}" not available. Choose from: ${this.availableModels.join(', ')}`);
|
|
38
|
+
}
|
|
39
|
+
this.currentModel = model;
|
|
40
|
+
}
|
|
41
|
+
// āā Chat āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
42
|
+
async chat(messages, options) {
|
|
43
|
+
const thinking = options?.thinking ?? false;
|
|
44
|
+
const thinkingBudget = options?.thinkingBudget ?? 4096;
|
|
45
|
+
const streaming = !!(options?.onToken || options?.onThinkingToken);
|
|
46
|
+
const model = this._buildModel(thinking, thinkingBudget);
|
|
47
|
+
const aiMessages = this._toAIMessages(messages);
|
|
48
|
+
const aiTools = this._toAITools(options?.tools);
|
|
49
|
+
return streaming
|
|
50
|
+
? this._stream(model, aiMessages, aiTools, options, thinking, thinkingBudget)
|
|
51
|
+
: this._generate(model, aiMessages, aiTools, options, thinking, thinkingBudget);
|
|
52
|
+
}
|
|
53
|
+
// āā Streaming āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
54
|
+
async _stream(model, messages, tools, options, thinking, thinkingBudget) {
|
|
55
|
+
const isReasoning = this._isOpenAIReasoningModel();
|
|
56
|
+
const isAnthropicThinking = this.provider === 'anthropic' && thinking;
|
|
57
|
+
const providerOpts = this._buildProviderOptions(thinking, thinkingBudget);
|
|
58
|
+
const result = streamText({
|
|
59
|
+
model,
|
|
60
|
+
messages,
|
|
61
|
+
...(tools && { tools, toolChoice: 'auto' }),
|
|
62
|
+
// Anthropic extended thinking and OpenAI reasoning models both reject temperature.
|
|
63
|
+
...(!isReasoning && !isAnthropicThinking && { temperature: options?.temperature ?? 0.1 }),
|
|
64
|
+
maxOutputTokens: options?.maxTokens ?? 4096,
|
|
65
|
+
maxRetries: 0,
|
|
66
|
+
...(providerOpts && { providerOptions: providerOpts }),
|
|
67
|
+
});
|
|
68
|
+
let content = '';
|
|
69
|
+
let finishReason = 'stop';
|
|
70
|
+
const toolCalls = [];
|
|
71
|
+
let inputTokens = 0;
|
|
72
|
+
let outputTokens = 0;
|
|
73
|
+
let streamError;
|
|
74
|
+
try {
|
|
75
|
+
for await (const part of result.fullStream) {
|
|
76
|
+
switch (part.type) {
|
|
77
|
+
case 'reasoning-delta': {
|
|
78
|
+
const token = part.text ?? '';
|
|
79
|
+
options?.onThinkingToken?.(token);
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
case 'text-delta': {
|
|
83
|
+
const token = part.text;
|
|
84
|
+
content += token;
|
|
85
|
+
options?.onToken?.(token);
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
case 'tool-call': {
|
|
89
|
+
const tc = part;
|
|
90
|
+
toolCalls.push({ id: tc.toolCallId, name: tc.toolName, arguments: tc.input ?? tc.args ?? {} });
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
case 'finish-step': {
|
|
94
|
+
// AI SDK v6: per-step usage lives on finish-step, not finish
|
|
95
|
+
const fp = part;
|
|
96
|
+
if (fp.finishReason)
|
|
97
|
+
finishReason = fp.finishReason;
|
|
98
|
+
inputTokens = fp.usage?.inputTokens ?? inputTokens;
|
|
99
|
+
outputTokens = fp.usage?.outputTokens ?? outputTokens;
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
case 'finish': {
|
|
103
|
+
const fp = part;
|
|
104
|
+
finishReason = fp.finishReason ?? finishReason;
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
streamError = err;
|
|
112
|
+
try {
|
|
113
|
+
await result.consumeStream();
|
|
114
|
+
}
|
|
115
|
+
catch { /* settle internal promises */ }
|
|
116
|
+
}
|
|
117
|
+
// After the stream is fully consumed, totalUsage promise is settled.
|
|
118
|
+
// This is the definitive source for token counts (covers multi-step and
|
|
119
|
+
// providers like vLLM that send usage only in the final SSE chunk).
|
|
120
|
+
try {
|
|
121
|
+
const u = await result.totalUsage;
|
|
122
|
+
if (u) {
|
|
123
|
+
inputTokens = u.inputTokens ?? inputTokens;
|
|
124
|
+
outputTokens = u.outputTokens ?? outputTokens;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch { /* provider may not expose usage */ }
|
|
128
|
+
if (streamError && !content && toolCalls.length === 0) {
|
|
129
|
+
throw streamError;
|
|
130
|
+
}
|
|
131
|
+
return {
|
|
132
|
+
content,
|
|
133
|
+
toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
|
|
134
|
+
finishReason: this._mapFinish(finishReason),
|
|
135
|
+
usage: { promptTokens: inputTokens, completionTokens: outputTokens, totalTokens: inputTokens + outputTokens },
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
// āā Non-streaming āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
139
|
+
async _generate(model, messages, tools, options, thinking, thinkingBudget) {
|
|
140
|
+
const isReasoning = this._isOpenAIReasoningModel();
|
|
141
|
+
const isAnthropicThinking = this.provider === 'anthropic' && thinking;
|
|
142
|
+
const providerOpts = this._buildProviderOptions(thinking, thinkingBudget);
|
|
143
|
+
const result = await generateText({
|
|
144
|
+
model,
|
|
145
|
+
messages,
|
|
146
|
+
...(tools && { tools, toolChoice: 'auto' }),
|
|
147
|
+
// Anthropic extended thinking and OpenAI reasoning models both reject temperature.
|
|
148
|
+
...(!isReasoning && !isAnthropicThinking && { temperature: options?.temperature ?? 0.1 }),
|
|
149
|
+
maxOutputTokens: options?.maxTokens ?? 4096,
|
|
150
|
+
maxRetries: 0,
|
|
151
|
+
...(providerOpts && { providerOptions: providerOpts }),
|
|
152
|
+
});
|
|
153
|
+
const toolCalls = (result.toolCalls ?? []).map((tc) => {
|
|
154
|
+
const t = tc;
|
|
155
|
+
return { id: t.toolCallId, name: t.toolName, arguments: t.input ?? t.args ?? {} };
|
|
156
|
+
});
|
|
157
|
+
const usage = result.totalUsage
|
|
158
|
+
?? result.usage;
|
|
159
|
+
const inputTokens = usage?.inputTokens
|
|
160
|
+
?? usage?.promptTokens ?? 0;
|
|
161
|
+
const outputTokens = usage?.outputTokens
|
|
162
|
+
?? usage?.completionTokens ?? 0;
|
|
163
|
+
return {
|
|
164
|
+
content: result.text || '',
|
|
165
|
+
toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
|
|
166
|
+
finishReason: this._mapFinish(result.finishReason ?? 'stop'),
|
|
167
|
+
usage: { promptTokens: inputTokens, completionTokens: outputTokens, totalTokens: inputTokens + outputTokens },
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
// āā Model builder āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
171
|
+
_buildModel(thinking, thinkingBudget) {
|
|
172
|
+
switch (this.provider) {
|
|
173
|
+
case 'nemotron': {
|
|
174
|
+
const headers = {
|
|
175
|
+
'Content-Type': 'application/json',
|
|
176
|
+
...(this.apiKey ? { Authorization: `Bearer ${this.apiKey}` } : {}),
|
|
177
|
+
};
|
|
178
|
+
// Always pass thinking_budget for Nemotron NVFP4 wire format correctness
|
|
179
|
+
const effectiveBudget = thinking ? thinkingBudget : 1024;
|
|
180
|
+
const provider = createOpenAICompatible({
|
|
181
|
+
name: 'vllm',
|
|
182
|
+
baseURL: `${this.baseUrl}/v1`,
|
|
183
|
+
headers,
|
|
184
|
+
// includeUsage: true adds stream_options: { include_usage: true } to
|
|
185
|
+
// streaming requests so vLLM returns token counts in the final SSE
|
|
186
|
+
// chunk. Only works when connecting directly to vLLM (port 8002).
|
|
187
|
+
includeUsage: true,
|
|
188
|
+
transformRequestBody: (body) => ({
|
|
189
|
+
...body,
|
|
190
|
+
chat_template_kwargs: { thinking_budget: effectiveBudget },
|
|
191
|
+
}),
|
|
192
|
+
});
|
|
193
|
+
const base = provider(this.currentModel);
|
|
194
|
+
return wrapLanguageModel({
|
|
195
|
+
model: base,
|
|
196
|
+
middleware: extractReasoningMiddleware({ tagName: 'think' }),
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
case 'openai': {
|
|
200
|
+
const openai = createOpenAI({ apiKey: this.apiKey ?? process.env.OPENAI_API_KEY ?? '' });
|
|
201
|
+
// o1/o3/o4 use the Responses API; Chat Completions API for everything else
|
|
202
|
+
return this._isOpenAIReasoningModel()
|
|
203
|
+
? openai.responses(this.currentModel)
|
|
204
|
+
: openai(this.currentModel);
|
|
205
|
+
}
|
|
206
|
+
case 'anthropic': {
|
|
207
|
+
const anthropic = createAnthropic({ apiKey: this.apiKey ?? process.env.ANTHROPIC_API_KEY ?? '' });
|
|
208
|
+
return anthropic(this.currentModel);
|
|
209
|
+
}
|
|
210
|
+
case 'perplexity': {
|
|
211
|
+
const perplexity = createPerplexity({ apiKey: this.apiKey ?? process.env.PERPLEXITY_API_KEY ?? '' });
|
|
212
|
+
return perplexity(this.currentModel);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
// āā Protocol-aware helpers āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
217
|
+
/** True when the current model is an OpenAI Responses-API reasoning model (o1/o3/o4). */
|
|
218
|
+
_isOpenAIReasoningModel() {
|
|
219
|
+
return this.provider === 'openai' && /^(o1|o3|o4)(-|$)/.test(this.currentModel);
|
|
220
|
+
}
|
|
221
|
+
/** Maps a thinking-token budget to an OpenAI `reasoningEffort` string. */
|
|
222
|
+
_mapReasoningEffort(budget) {
|
|
223
|
+
if (budget >= 16_000)
|
|
224
|
+
return 'xhigh';
|
|
225
|
+
if (budget >= 8_000)
|
|
226
|
+
return 'high';
|
|
227
|
+
if (budget >= 4_000)
|
|
228
|
+
return 'medium';
|
|
229
|
+
if (budget >= 1_000)
|
|
230
|
+
return 'low';
|
|
231
|
+
return 'minimal';
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Builds provider-specific options for streamText / generateText.
|
|
235
|
+
* - OpenAI reasoning (o1/o3/o4): sets reasoningEffort
|
|
236
|
+
* - Anthropic + thinking=true: enables extended thinking with budgetTokens
|
|
237
|
+
* - Nemotron: handled at model-build time via middleware / transformRequestBody
|
|
238
|
+
*/
|
|
239
|
+
_buildProviderOptions(thinking, thinkingBudget) {
|
|
240
|
+
const budget = thinkingBudget ?? 4096;
|
|
241
|
+
if (this._isOpenAIReasoningModel()) {
|
|
242
|
+
return {
|
|
243
|
+
openai: {
|
|
244
|
+
reasoningEffort: thinking
|
|
245
|
+
? this._mapReasoningEffort(budget)
|
|
246
|
+
: 'low',
|
|
247
|
+
},
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
if (this.provider === 'anthropic' && thinking) {
|
|
251
|
+
return {
|
|
252
|
+
anthropic: {
|
|
253
|
+
thinking: {
|
|
254
|
+
type: 'enabled',
|
|
255
|
+
budgetTokens: budget,
|
|
256
|
+
},
|
|
257
|
+
},
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
return undefined;
|
|
261
|
+
}
|
|
262
|
+
// āā Helpers āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
263
|
+
_toAIMessages(messages) {
|
|
264
|
+
const out = [];
|
|
265
|
+
for (const m of messages) {
|
|
266
|
+
if (m.role === 'system') {
|
|
267
|
+
out.push({ role: 'system', content: m.content });
|
|
268
|
+
}
|
|
269
|
+
else if (m.role === 'user') {
|
|
270
|
+
out.push({ role: 'user', content: m.content });
|
|
271
|
+
}
|
|
272
|
+
else if (m.role === 'assistant') {
|
|
273
|
+
if (m.toolCalls?.length) {
|
|
274
|
+
out.push({
|
|
275
|
+
role: 'assistant',
|
|
276
|
+
content: [
|
|
277
|
+
...(m.content ? [{ type: 'text', text: m.content }] : []),
|
|
278
|
+
...m.toolCalls.map(tc => ({
|
|
279
|
+
type: 'tool-call',
|
|
280
|
+
toolCallId: tc.id,
|
|
281
|
+
toolName: tc.name,
|
|
282
|
+
input: tc.arguments,
|
|
283
|
+
})),
|
|
284
|
+
],
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
out.push({ role: 'assistant', content: m.content });
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
else if (m.role === 'tool') {
|
|
292
|
+
out.push({
|
|
293
|
+
role: 'tool',
|
|
294
|
+
content: [
|
|
295
|
+
{
|
|
296
|
+
type: 'tool-result',
|
|
297
|
+
toolCallId: m.toolCallId ?? '',
|
|
298
|
+
toolName: m.toolName ?? '',
|
|
299
|
+
output: { type: 'text', value: m.content },
|
|
300
|
+
},
|
|
301
|
+
],
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
return out;
|
|
306
|
+
}
|
|
307
|
+
_toAITools(tools) {
|
|
308
|
+
if (!tools || tools.length === 0)
|
|
309
|
+
return undefined;
|
|
310
|
+
const out = {};
|
|
311
|
+
for (const t of tools) {
|
|
312
|
+
out[t.name] = tool({
|
|
313
|
+
description: t.description,
|
|
314
|
+
inputSchema: jsonSchema(t.parameters),
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
return out;
|
|
318
|
+
}
|
|
319
|
+
_mapFinish(r) {
|
|
320
|
+
if (r === 'tool-calls' || r === 'tool_calls')
|
|
321
|
+
return 'tool_calls';
|
|
322
|
+
if (r === 'length' || r === 'max-tokens')
|
|
323
|
+
return 'length';
|
|
324
|
+
return 'stop';
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
//# sourceMappingURL=llm-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-client.js","sourceRoot":"","sources":["../../src/adapters/llm-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint-command.d.ts","sourceRoot":"","sources":["../../src/commands/checkpoint-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,eAAO,MAAM,iBAAiB,EAAE,YA6G/B,CAAC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
export const checkpointCommand = {
|
|
2
|
+
name: 'checkpoint',
|
|
3
|
+
aliases: ['cp'],
|
|
4
|
+
description: 'Save, list, restore, or search conversation checkpoints',
|
|
5
|
+
usage: '/checkpoint [save | list | restore <n> | search <query>]',
|
|
6
|
+
async execute(args, context) {
|
|
7
|
+
const sub = args[0]?.toLowerCase() ?? 'list';
|
|
8
|
+
if (!context.checkpointManager) {
|
|
9
|
+
context.output('ā Checkpoint manager not available.');
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const cm = context.checkpointManager;
|
|
13
|
+
// āā save āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
14
|
+
if (sub === 'save') {
|
|
15
|
+
try {
|
|
16
|
+
const filepath = await cm.save(context.session);
|
|
17
|
+
context.output(`ā
Checkpoint saved ā ${filepath}`);
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
context.output(`ā Save failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
21
|
+
}
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
// āā list āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
25
|
+
if (sub === 'list' || sub === 'ls') {
|
|
26
|
+
const infos = await cm.list();
|
|
27
|
+
if (infos.length === 0) {
|
|
28
|
+
context.output(' No checkpoints found.');
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
context.output('\nš Checkpoints (newest first):\n');
|
|
32
|
+
infos.forEach((info, i) => {
|
|
33
|
+
const date = new Date(info.savedAt).toLocaleString();
|
|
34
|
+
context.output(` [${i + 1}] ${info.filename}`);
|
|
35
|
+
context.output(` Session: ${info.sessionName} Ā· ${info.messageCount} msgs Ā· ${date}`);
|
|
36
|
+
});
|
|
37
|
+
context.output('');
|
|
38
|
+
context.output('Restore: /checkpoint restore <n> Search: /checkpoint search <query>');
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
// āā restore āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
42
|
+
if (sub === 'restore') {
|
|
43
|
+
const idx = parseInt(args[1] ?? '', 10);
|
|
44
|
+
const infos = await cm.list();
|
|
45
|
+
if (isNaN(idx) || idx < 1 || idx > infos.length) {
|
|
46
|
+
context.output(`ā Usage: /checkpoint restore <1..${infos.length}>`);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
const cp = await cm.load(infos[idx - 1].filename);
|
|
51
|
+
// Replace session context with checkpoint messages
|
|
52
|
+
context.session.context = cp.messages;
|
|
53
|
+
context.output(`ā
Restored checkpoint [${idx}]: ${infos[idx - 1].filename}`);
|
|
54
|
+
context.output(` ${cp.messageCount} messages from ${new Date(cp.savedAt).toLocaleString()}`);
|
|
55
|
+
context.output('ā ļø Context in memory replaced ā the session has not been saved to disk.');
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
context.output(`ā Restore failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
59
|
+
}
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
// āā search āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
63
|
+
if (sub === 'search') {
|
|
64
|
+
const query = args.slice(1).join(' ').trim();
|
|
65
|
+
if (!query) {
|
|
66
|
+
context.output('ā Usage: /checkpoint search <keywords>');
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
context.output(`š Searching checkpoints for: "${query}"ā¦`);
|
|
70
|
+
const results = await cm.search(query);
|
|
71
|
+
if (results.length === 0) {
|
|
72
|
+
context.output(' No matching checkpoints found.');
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
context.output(`\n Found ${results.length} result(s):\n`);
|
|
76
|
+
for (const r of results) {
|
|
77
|
+
const date = new Date(r.savedAt).toLocaleString();
|
|
78
|
+
context.output(` š ${r.filename} (score: ${r.score.toFixed(2)})`);
|
|
79
|
+
context.output(` ${r.sessionName} Ā· ${date}`);
|
|
80
|
+
context.output(` ${r.excerpt}`);
|
|
81
|
+
context.output('');
|
|
82
|
+
}
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
// āā delete āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
86
|
+
if (sub === 'delete' || sub === 'rm') {
|
|
87
|
+
const idx = parseInt(args[1] ?? '', 10);
|
|
88
|
+
const infos = await cm.list();
|
|
89
|
+
if (isNaN(idx) || idx < 1 || idx > infos.length) {
|
|
90
|
+
context.output(`ā Usage: /checkpoint delete <1..${infos.length}>`);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
try {
|
|
94
|
+
await cm.delete(infos[idx - 1].filename);
|
|
95
|
+
context.output(`š Deleted checkpoint [${idx}]: ${infos[idx - 1].filename}`);
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
context.output(`ā Delete failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
99
|
+
}
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
context.output('Usage: /checkpoint [save | list | restore <n> | search <query> | delete <n>]');
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
//# sourceMappingURL=checkpoint-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint-command.js","sourceRoot":"","sources":["../../src/commands/checkpoint-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clear-command.d.ts","sourceRoot":"","sources":["../../src/commands/clear-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,eAAO,MAAM,YAAY,EAAE,YAU1B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export const clearCommand = {
|
|
2
|
+
name: 'clear',
|
|
3
|
+
description: 'Clear context',
|
|
4
|
+
aliases: ['c'],
|
|
5
|
+
usage: '/clear',
|
|
6
|
+
async execute(args, context) {
|
|
7
|
+
context.session.context = [];
|
|
8
|
+
context.output('ā Context cleared');
|
|
9
|
+
},
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=clear-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clear-command.js","sourceRoot":"","sources":["../../src/commands/clear-command.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,eAAe;IAC5B,OAAO,EAAE,CAAC,GAAG,CAAC;IACd,KAAK,EAAE,QAAQ;IAEf,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO;QACzB,OAAO,CAAC,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC;QAC7B,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACtC,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compact-command.d.ts","sourceRoot":"","sources":["../../src/commands/compact-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,eAAO,MAAM,cAAc,EAAE,YAmB5B,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export const compactCommand = {
|
|
2
|
+
name: 'compact',
|
|
3
|
+
description: 'Summarize older context with LLM to free up token space',
|
|
4
|
+
usage: '/compact',
|
|
5
|
+
async execute(args, context) {
|
|
6
|
+
if (!context.compact) {
|
|
7
|
+
context.output('ā Compact not available in this context.');
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
context.output('š Compacting context (calling LLM to summarize older messages)ā¦');
|
|
11
|
+
try {
|
|
12
|
+
const info = await context.compact();
|
|
13
|
+
context.output(info);
|
|
14
|
+
}
|
|
15
|
+
catch (err) {
|
|
16
|
+
context.output(`ā Compact failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=compact-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compact-command.js","sourceRoot":"","sources":["../../src/commands/compact-command.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAiB;IAC1C,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,yDAAyD;IACtE,KAAK,EAAE,UAAU;IAEjB,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO;QACzB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO,CAAC,MAAM,CAAC,0CAA0C,CAAC,CAAC;YAC3D,OAAO;QACT,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,mEAAmE,CAAC,CAAC;QACpF,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;YACrC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,qBAAqB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-command.d.ts","sourceRoot":"","sources":["../../src/commands/config-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,eAAO,MAAM,aAAa,EAAE,YA6B3B,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export const configCommand = {
|
|
2
|
+
name: 'config',
|
|
3
|
+
description: 'Show/edit configuration',
|
|
4
|
+
usage: '/config [key] [value]',
|
|
5
|
+
async execute(args, context) {
|
|
6
|
+
if (args.length === 0) {
|
|
7
|
+
const config = await context.configManager.load();
|
|
8
|
+
context.output('\nāļø Current Configuration:\n');
|
|
9
|
+
context.output(JSON.stringify(config, null, 2));
|
|
10
|
+
context.output('\nš” Edit ~/.automatey/config.json to change settings\n');
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
if (args.length === 1) {
|
|
14
|
+
const key = args[0];
|
|
15
|
+
const config = await context.configManager.load();
|
|
16
|
+
const value = config[key];
|
|
17
|
+
if (value === undefined) {
|
|
18
|
+
context.output(`ā Unknown config key: ${String(key)}`);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
context.output(`${String(key)}: ${JSON.stringify(value, null, 2)}`);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
context.output('ā Config editing not yet implemented');
|
|
25
|
+
context.output('š” Edit ~/.automatey/config.json directly');
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=config-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-command.js","sourceRoot":"","sources":["../../src/commands/config-command.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAiB;IACzC,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,yBAAyB;IACtC,KAAK,EAAE,uBAAuB;IAE9B,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO;QACzB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;YAClD,OAAO,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC;YACjD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAChD,OAAO,CAAC,MAAM,CAAC,yDAAyD,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;YAClD,MAAM,KAAK,GAAI,MAAc,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,CAAC,MAAM,CAAC,yBAAyB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACvD,OAAO;YACT,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACpE,OAAO;QACT,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,sCAAsC,CAAC,CAAC;QACvD,OAAO,CAAC,MAAM,CAAC,2CAA2C,CAAC,CAAC;IAC9D,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost-command.d.ts","sourceRoot":"","sources":["../../src/commands/cost-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,eAAO,MAAM,WAAW,EAAE,YAgDzB,CAAC"}
|