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.
Files changed (165) hide show
  1. package/.env.defaults +100 -0
  2. package/.env.secret.example +42 -0
  3. package/LICENSE +21 -0
  4. package/README.md +258 -0
  5. package/dist/adapters/index.d.ts +3 -0
  6. package/dist/adapters/index.d.ts.map +1 -0
  7. package/dist/adapters/index.js +3 -0
  8. package/dist/adapters/index.js.map +1 -0
  9. package/dist/adapters/judge-client.d.ts +59 -0
  10. package/dist/adapters/judge-client.d.ts.map +1 -0
  11. package/dist/adapters/judge-client.js +123 -0
  12. package/dist/adapters/judge-client.js.map +1 -0
  13. package/dist/adapters/llm-client.d.ts +54 -0
  14. package/dist/adapters/llm-client.d.ts.map +1 -0
  15. package/dist/adapters/llm-client.js +327 -0
  16. package/dist/adapters/llm-client.js.map +1 -0
  17. package/dist/commands/checkpoint-command.d.ts +3 -0
  18. package/dist/commands/checkpoint-command.d.ts.map +1 -0
  19. package/dist/commands/checkpoint-command.js +105 -0
  20. package/dist/commands/checkpoint-command.js.map +1 -0
  21. package/dist/commands/clear-command.d.ts +3 -0
  22. package/dist/commands/clear-command.d.ts.map +1 -0
  23. package/dist/commands/clear-command.js +11 -0
  24. package/dist/commands/clear-command.js.map +1 -0
  25. package/dist/commands/compact-command.d.ts +3 -0
  26. package/dist/commands/compact-command.d.ts.map +1 -0
  27. package/dist/commands/compact-command.js +20 -0
  28. package/dist/commands/compact-command.js.map +1 -0
  29. package/dist/commands/config-command.d.ts +3 -0
  30. package/dist/commands/config-command.d.ts.map +1 -0
  31. package/dist/commands/config-command.js +28 -0
  32. package/dist/commands/config-command.js.map +1 -0
  33. package/dist/commands/cost-command.d.ts +3 -0
  34. package/dist/commands/cost-command.d.ts.map +1 -0
  35. package/dist/commands/cost-command.js +42 -0
  36. package/dist/commands/cost-command.js.map +1 -0
  37. package/dist/commands/eval-command.d.ts +16 -0
  38. package/dist/commands/eval-command.d.ts.map +1 -0
  39. package/dist/commands/eval-command.js +132 -0
  40. package/dist/commands/eval-command.js.map +1 -0
  41. package/dist/commands/help-command.d.ts +3 -0
  42. package/dist/commands/help-command.d.ts.map +1 -0
  43. package/dist/commands/help-command.js +37 -0
  44. package/dist/commands/help-command.js.map +1 -0
  45. package/dist/commands/index.d.ts +8 -0
  46. package/dist/commands/index.d.ts.map +1 -0
  47. package/dist/commands/index.js +42 -0
  48. package/dist/commands/index.js.map +1 -0
  49. package/dist/commands/load-command.d.ts +3 -0
  50. package/dist/commands/load-command.d.ts.map +1 -0
  51. package/dist/commands/load-command.js +42 -0
  52. package/dist/commands/load-command.js.map +1 -0
  53. package/dist/commands/model-command.d.ts +3 -0
  54. package/dist/commands/model-command.d.ts.map +1 -0
  55. package/dist/commands/model-command.js +42 -0
  56. package/dist/commands/model-command.js.map +1 -0
  57. package/dist/commands/save-command.d.ts +3 -0
  58. package/dist/commands/save-command.d.ts.map +1 -0
  59. package/dist/commands/save-command.js +17 -0
  60. package/dist/commands/save-command.js.map +1 -0
  61. package/dist/commands/servers-command.d.ts +3 -0
  62. package/dist/commands/servers-command.d.ts.map +1 -0
  63. package/dist/commands/servers-command.js +99 -0
  64. package/dist/commands/servers-command.js.map +1 -0
  65. package/dist/commands/think-command.d.ts +3 -0
  66. package/dist/commands/think-command.d.ts.map +1 -0
  67. package/dist/commands/think-command.js +37 -0
  68. package/dist/commands/think-command.js.map +1 -0
  69. package/dist/core/chat-engine.d.ts +54 -0
  70. package/dist/core/chat-engine.d.ts.map +1 -0
  71. package/dist/core/chat-engine.js +528 -0
  72. package/dist/core/chat-engine.js.map +1 -0
  73. package/dist/core/checkpoint-manager.d.ts +50 -0
  74. package/dist/core/checkpoint-manager.d.ts.map +1 -0
  75. package/dist/core/checkpoint-manager.js +173 -0
  76. package/dist/core/checkpoint-manager.js.map +1 -0
  77. package/dist/core/command-parser.d.ts +6 -0
  78. package/dist/core/command-parser.d.ts.map +1 -0
  79. package/dist/core/command-parser.js +14 -0
  80. package/dist/core/command-parser.js.map +1 -0
  81. package/dist/core/compact.d.ts +23 -0
  82. package/dist/core/compact.d.ts.map +1 -0
  83. package/dist/core/compact.js +56 -0
  84. package/dist/core/compact.js.map +1 -0
  85. package/dist/core/config-manager.d.ts +13 -0
  86. package/dist/core/config-manager.d.ts.map +1 -0
  87. package/dist/core/config-manager.js +86 -0
  88. package/dist/core/config-manager.js.map +1 -0
  89. package/dist/core/context-manager.d.ts +17 -0
  90. package/dist/core/context-manager.d.ts.map +1 -0
  91. package/dist/core/context-manager.js +51 -0
  92. package/dist/core/context-manager.js.map +1 -0
  93. package/dist/core/eval-runner.d.ts +110 -0
  94. package/dist/core/eval-runner.d.ts.map +1 -0
  95. package/dist/core/eval-runner.js +177 -0
  96. package/dist/core/eval-runner.js.map +1 -0
  97. package/dist/core/index.d.ts +12 -0
  98. package/dist/core/index.d.ts.map +1 -0
  99. package/dist/core/index.js +11 -0
  100. package/dist/core/index.js.map +1 -0
  101. package/dist/core/interfaces.d.ts +179 -0
  102. package/dist/core/interfaces.d.ts.map +1 -0
  103. package/dist/core/interfaces.js +6 -0
  104. package/dist/core/interfaces.js.map +1 -0
  105. package/dist/core/mcp-client-manager.d.ts +32 -0
  106. package/dist/core/mcp-client-manager.d.ts.map +1 -0
  107. package/dist/core/mcp-client-manager.js +118 -0
  108. package/dist/core/mcp-client-manager.js.map +1 -0
  109. package/dist/core/mcp-config-manager.d.ts +40 -0
  110. package/dist/core/mcp-config-manager.d.ts.map +1 -0
  111. package/dist/core/mcp-config-manager.js +120 -0
  112. package/dist/core/mcp-config-manager.js.map +1 -0
  113. package/dist/core/session-manager.d.ts +16 -0
  114. package/dist/core/session-manager.d.ts.map +1 -0
  115. package/dist/core/session-manager.js +87 -0
  116. package/dist/core/session-manager.js.map +1 -0
  117. package/dist/core/skills-manager.d.ts +49 -0
  118. package/dist/core/skills-manager.d.ts.map +1 -0
  119. package/dist/core/skills-manager.js +175 -0
  120. package/dist/core/skills-manager.js.map +1 -0
  121. package/dist/core/sub-agent.d.ts +23 -0
  122. package/dist/core/sub-agent.d.ts.map +1 -0
  123. package/dist/core/sub-agent.js +98 -0
  124. package/dist/core/sub-agent.js.map +1 -0
  125. package/dist/index.d.ts +11 -0
  126. package/dist/index.d.ts.map +1 -0
  127. package/dist/index.js +230 -0
  128. package/dist/index.js.map +1 -0
  129. package/dist/tui/index.d.ts +2 -0
  130. package/dist/tui/index.d.ts.map +1 -0
  131. package/dist/tui/index.js +3 -0
  132. package/dist/tui/index.js.map +1 -0
  133. package/dist/tui/renderer.d.ts +32 -0
  134. package/dist/tui/renderer.d.ts.map +1 -0
  135. package/dist/tui/renderer.js +225 -0
  136. package/dist/tui/renderer.js.map +1 -0
  137. package/dist/utils/index.d.ts +5 -0
  138. package/dist/utils/index.d.ts.map +1 -0
  139. package/dist/utils/index.js +6 -0
  140. package/dist/utils/index.js.map +1 -0
  141. package/dist/utils/logger.d.ts +19 -0
  142. package/dist/utils/logger.d.ts.map +1 -0
  143. package/dist/utils/logger.js +37 -0
  144. package/dist/utils/logger.js.map +1 -0
  145. package/dist/utils/logo.d.ts +24 -0
  146. package/dist/utils/logo.d.ts.map +1 -0
  147. package/dist/utils/logo.js +119 -0
  148. package/dist/utils/logo.js.map +1 -0
  149. package/dist/utils/message-formatter.d.ts +19 -0
  150. package/dist/utils/message-formatter.d.ts.map +1 -0
  151. package/dist/utils/message-formatter.js +79 -0
  152. package/dist/utils/message-formatter.js.map +1 -0
  153. package/dist/utils/syntax-highlighter.d.ts +6 -0
  154. package/dist/utils/syntax-highlighter.d.ts.map +1 -0
  155. package/dist/utils/syntax-highlighter.js +34 -0
  156. package/dist/utils/syntax-highlighter.js.map +1 -0
  157. package/mcp/coder/dist/server.d.ts +15 -0
  158. package/mcp/coder/dist/server.d.ts.map +1 -0
  159. package/mcp/coder/dist/server.js +421 -0
  160. package/mcp/coder/dist/server.js.map +1 -0
  161. package/mcp/planner/dist/server.d.ts +23 -0
  162. package/mcp/planner/dist/server.d.ts.map +1 -0
  163. package/mcp/planner/dist/server.js +373 -0
  164. package/mcp/planner/dist/server.js.map +1 -0
  165. 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,3 @@
1
+ import type { SlashCommand } from '#core/interfaces';
2
+ export declare const checkpointCommand: SlashCommand;
3
+ //# sourceMappingURL=checkpoint-command.d.ts.map
@@ -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,3 @@
1
+ import type { SlashCommand } from '#core/interfaces';
2
+ export declare const clearCommand: SlashCommand;
3
+ //# sourceMappingURL=clear-command.d.ts.map
@@ -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,3 @@
1
+ import type { SlashCommand } from '#core/interfaces';
2
+ export declare const compactCommand: SlashCommand;
3
+ //# sourceMappingURL=compact-command.d.ts.map
@@ -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,3 @@
1
+ import type { SlashCommand } from '#core/interfaces';
2
+ export declare const configCommand: SlashCommand;
3
+ //# sourceMappingURL=config-command.d.ts.map
@@ -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,3 @@
1
+ import type { SlashCommand } from '#core/interfaces';
2
+ export declare const costCommand: SlashCommand;
3
+ //# sourceMappingURL=cost-command.d.ts.map
@@ -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"}