@calliopelabs/cli 0.1.1

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/dist/config.js ADDED
@@ -0,0 +1,181 @@
1
+ /**
2
+ * Calliope CLI Configuration
3
+ *
4
+ * Manages user preferences and API keys using the conf package.
5
+ * Config is stored in ~/.config/calliope/config.json (or platform equivalent)
6
+ */
7
+ import Conf from 'conf';
8
+ const DEFAULT_CONFIG = {
9
+ setupComplete: false,
10
+ defaultProvider: 'auto',
11
+ persona: 'calliope',
12
+ maxIterations: 20,
13
+ fancyOutput: true,
14
+ autoSaveHistory: true,
15
+ };
16
+ // Create config store
17
+ const config = new Conf({
18
+ projectName: 'calliope',
19
+ defaults: DEFAULT_CONFIG,
20
+ schema: {
21
+ setupComplete: { type: 'boolean' },
22
+ defaultProvider: { type: 'string' },
23
+ defaultModel: { type: 'string' },
24
+ anthropicApiKey: { type: 'string' },
25
+ googleApiKey: { type: 'string' },
26
+ openaiApiKey: { type: 'string' },
27
+ togetherApiKey: { type: 'string' },
28
+ openrouterApiKey: { type: 'string' },
29
+ groqApiKey: { type: 'string' },
30
+ fireworksApiKey: { type: 'string' },
31
+ mistralApiKey: { type: 'string' },
32
+ ollamaBaseUrl: { type: 'string' },
33
+ ai21ApiKey: { type: 'string' },
34
+ huggingfaceApiKey: { type: 'string' },
35
+ litellmBaseUrl: { type: 'string' },
36
+ litellmApiKey: { type: 'string' },
37
+ persona: { type: 'string', enum: ['calliope', 'professional', 'minimal'] },
38
+ maxIterations: { type: 'number', minimum: 1, maximum: 100 },
39
+ fancyOutput: { type: 'boolean' },
40
+ autoSaveHistory: { type: 'boolean' },
41
+ workspaceRoot: { type: 'string' },
42
+ },
43
+ });
44
+ /**
45
+ * Get the full config object
46
+ */
47
+ export function getConfig() {
48
+ return config.store;
49
+ }
50
+ /**
51
+ * Get a specific config value
52
+ */
53
+ export function get(key) {
54
+ return config.get(key);
55
+ }
56
+ /**
57
+ * Set a config value
58
+ */
59
+ export function set(key, value) {
60
+ config.set(key, value);
61
+ }
62
+ /**
63
+ * Set multiple config values
64
+ */
65
+ export function setMultiple(values) {
66
+ for (const [key, value] of Object.entries(values)) {
67
+ config.set(key, value);
68
+ }
69
+ }
70
+ /**
71
+ * Check if setup is complete
72
+ */
73
+ export function isSetupComplete() {
74
+ return config.get('setupComplete') === true;
75
+ }
76
+ /**
77
+ * Mark setup as complete
78
+ */
79
+ export function markSetupComplete() {
80
+ config.set('setupComplete', true);
81
+ }
82
+ /**
83
+ * Get config file path (for display to user)
84
+ */
85
+ export function getConfigPath() {
86
+ return config.path;
87
+ }
88
+ /**
89
+ * Reset config to defaults
90
+ */
91
+ export function resetConfig() {
92
+ config.clear();
93
+ }
94
+ /**
95
+ * Check which providers have API keys configured
96
+ */
97
+ export function getConfiguredProviders() {
98
+ const providers = [];
99
+ if (config.get('anthropicApiKey'))
100
+ providers.push('anthropic');
101
+ if (config.get('googleApiKey'))
102
+ providers.push('google');
103
+ if (config.get('openaiApiKey'))
104
+ providers.push('openai');
105
+ if (config.get('togetherApiKey'))
106
+ providers.push('together');
107
+ if (config.get('openrouterApiKey'))
108
+ providers.push('openrouter');
109
+ if (config.get('groqApiKey'))
110
+ providers.push('groq');
111
+ if (config.get('fireworksApiKey'))
112
+ providers.push('fireworks');
113
+ if (config.get('mistralApiKey'))
114
+ providers.push('mistral');
115
+ if (config.get('ollamaBaseUrl'))
116
+ providers.push('ollama');
117
+ if (config.get('ai21ApiKey'))
118
+ providers.push('ai21');
119
+ if (config.get('huggingfaceApiKey'))
120
+ providers.push('huggingface');
121
+ if (config.get('litellmBaseUrl'))
122
+ providers.push('litellm');
123
+ return providers;
124
+ }
125
+ /**
126
+ * Get API key for a provider
127
+ */
128
+ export function getApiKey(provider) {
129
+ const keyMap = {
130
+ anthropic: 'anthropicApiKey',
131
+ google: 'googleApiKey',
132
+ openai: 'openaiApiKey',
133
+ together: 'togetherApiKey',
134
+ openrouter: 'openrouterApiKey',
135
+ groq: 'groqApiKey',
136
+ fireworks: 'fireworksApiKey',
137
+ mistral: 'mistralApiKey',
138
+ ollama: 'ollamaBaseUrl', // Returns base URL for Ollama
139
+ ai21: 'ai21ApiKey',
140
+ huggingface: 'huggingfaceApiKey',
141
+ litellm: 'litellmApiKey',
142
+ auto: undefined,
143
+ };
144
+ const key = keyMap[provider];
145
+ if (!key)
146
+ return undefined;
147
+ // Check environment variable first, then config
148
+ const envMap = {
149
+ anthropicApiKey: 'ANTHROPIC_API_KEY',
150
+ googleApiKey: 'GOOGLE_API_KEY',
151
+ openaiApiKey: 'OPENAI_API_KEY',
152
+ togetherApiKey: 'TOGETHER_API_KEY',
153
+ openrouterApiKey: 'OPENROUTER_API_KEY',
154
+ groqApiKey: 'GROQ_API_KEY',
155
+ fireworksApiKey: 'FIREWORKS_API_KEY',
156
+ mistralApiKey: 'MISTRAL_API_KEY',
157
+ ollamaBaseUrl: 'OLLAMA_BASE_URL',
158
+ ai21ApiKey: 'AI21_API_KEY',
159
+ huggingfaceApiKey: 'HUGGINGFACE_API_KEY',
160
+ litellmApiKey: 'LITELLM_API_KEY',
161
+ };
162
+ const envVar = envMap[key];
163
+ if (envVar && process.env[envVar]) {
164
+ return process.env[envVar];
165
+ }
166
+ return config.get(key);
167
+ }
168
+ /**
169
+ * Get base URL for a provider (for Ollama/LiteLLM)
170
+ */
171
+ export function getBaseUrl(provider) {
172
+ if (provider === 'ollama') {
173
+ return process.env.OLLAMA_BASE_URL || config.get('ollamaBaseUrl') || 'http://localhost:11434';
174
+ }
175
+ if (provider === 'litellm') {
176
+ return process.env.LITELLM_BASE_URL || config.get('litellmBaseUrl') || 'http://localhost:4000';
177
+ }
178
+ return undefined;
179
+ }
180
+ export default config;
181
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AAsCxB,MAAM,cAAc,GAAmB;IACrC,aAAa,EAAE,KAAK;IACpB,eAAe,EAAE,MAAM;IACvB,OAAO,EAAE,UAAU;IACnB,aAAa,EAAE,EAAE;IACjB,WAAW,EAAE,IAAI;IACjB,eAAe,EAAE,IAAI;CACtB,CAAC;AAEF,sBAAsB;AACtB,MAAM,MAAM,GAAG,IAAI,IAAI,CAAiB;IACtC,WAAW,EAAE,UAAU;IACvB,QAAQ,EAAE,cAAc;IACxB,MAAM,EAAE;QACN,aAAa,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAClC,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACnC,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAChC,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACnC,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAChC,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAChC,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAClC,gBAAgB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACpC,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC9B,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACnC,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACjC,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACjC,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC9B,iBAAiB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACrC,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAClC,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACjC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE;QAC1E,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE;QAC3D,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAChC,eAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QACpC,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;KAClC;CACF,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,GAAG,CAAiC,GAAM;IACxD,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,GAAG,CAAiC,GAAM,EAAE,KAAwB;IAClF,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,MAA+B;IACzD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,MAAM,CAAC,GAAG,CAAC,GAA2B,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,SAAS,GAAkB,EAAE,CAAC;IAEpC,IAAI,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAAE,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC/D,IAAI,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC;QAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzD,IAAI,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC;QAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzD,IAAI,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC;QAAE,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC7D,IAAI,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC;QAAE,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACjE,IAAI,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC;QAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAAE,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC/D,IAAI,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC;QAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3D,IAAI,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC;QAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1D,IAAI,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC;QAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAAE,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACnE,IAAI,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC;QAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAE5D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,QAAqB;IAC7C,MAAM,MAAM,GAA0D;QACpE,SAAS,EAAE,iBAAiB;QAC5B,MAAM,EAAE,cAAc;QACtB,MAAM,EAAE,cAAc;QACtB,QAAQ,EAAE,gBAAgB;QAC1B,UAAU,EAAE,kBAAkB;QAC9B,IAAI,EAAE,YAAY;QAClB,SAAS,EAAE,iBAAiB;QAC5B,OAAO,EAAE,eAAe;QACxB,MAAM,EAAE,eAAe,EAAG,8BAA8B;QACxD,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,mBAAmB;QAChC,OAAO,EAAE,eAAe;QACxB,IAAI,EAAE,SAAS;KAChB,CAAC;IAEF,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAE3B,gDAAgD;IAChD,MAAM,MAAM,GAA2B;QACrC,eAAe,EAAE,mBAAmB;QACpC,YAAY,EAAE,gBAAgB;QAC9B,YAAY,EAAE,gBAAgB;QAC9B,cAAc,EAAE,kBAAkB;QAClC,gBAAgB,EAAE,oBAAoB;QACtC,UAAU,EAAE,cAAc;QAC1B,eAAe,EAAE,mBAAmB;QACpC,aAAa,EAAE,iBAAiB;QAChC,aAAa,EAAE,iBAAiB;QAChC,UAAU,EAAE,cAAc;QAC1B,iBAAiB,EAAE,qBAAqB;QACxC,aAAa,EAAE,iBAAiB;KACjC,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,CAAuB,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,QAAqB;IAC9C,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,wBAAwB,CAAC;IAChG,CAAC;IACD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,uBAAuB,CAAC;IACjG,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,eAAe,MAAM,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Calliope CLI
3
+ *
4
+ * Multi-model AI agent CLI with Ralph Wiggum autonomous loops.
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+ export { getConfig, get, set, setMultiple, isSetupComplete, markSetupComplete, getConfigPath, resetConfig, getConfiguredProviders, getApiKey, getBaseUrl, CalliopeConfig, } from './config.js';
9
+ export * from './providers.js';
10
+ export * from './tools.js';
11
+ export * from './types.js';
12
+ export { startCLI } from './cli.js';
13
+ export { runSetup, reconfigure } from './setup.js';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,SAAS,EACT,GAAG,EACH,GAAG,EACH,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,sBAAsB,EACtB,SAAS,EACT,UAAU,EACV,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Calliope CLI
3
+ *
4
+ * Multi-model AI agent CLI with Ralph Wiggum autonomous loops.
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+ // Re-export from config (excluding types that are in types.ts)
9
+ export { getConfig, get, set, setMultiple, isSetupComplete, markSetupComplete, getConfigPath, resetConfig, getConfiguredProviders, getApiKey, getBaseUrl, } from './config.js';
10
+ export * from './providers.js';
11
+ export * from './tools.js';
12
+ export * from './types.js';
13
+ export { startCLI } from './cli.js';
14
+ export { runSetup, reconfigure } from './setup.js';
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,+DAA+D;AAC/D,OAAO,EACL,SAAS,EACT,GAAG,EACH,GAAG,EACH,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,sBAAsB,EACtB,SAAS,EACT,UAAU,GAEX,MAAM,aAAa,CAAC;AACrB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Calliope CLI - LLM Providers
3
+ *
4
+ * Handles communication with different LLM providers.
5
+ */
6
+ import type { Message, Tool, LLMResponse, LLMProvider } from './types.js';
7
+ /**
8
+ * Get available providers based on configured API keys
9
+ */
10
+ export declare function getAvailableProviders(): LLMProvider[];
11
+ /**
12
+ * Select the best available provider
13
+ */
14
+ export declare function selectProvider(preferred: LLMProvider): LLMProvider;
15
+ /**
16
+ * Chat with the selected provider
17
+ */
18
+ export declare function chat(provider: LLMProvider, messages: Message[], tools: Tool[], model?: string): Promise<LLMResponse>;
19
+ //# sourceMappingURL=providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAY,WAAW,EAAE,MAAM,YAAY,CAAC;AA0FpF;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,WAAW,EAAE,CAgBrD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,WAAW,GAAG,WAAW,CAuBlE;AAED;;GAEG;AACH,wBAAsB,IAAI,CACxB,QAAQ,EAAE,WAAW,EACrB,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,IAAI,EAAE,EACb,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,WAAW,CAAC,CAwBtB"}
@@ -0,0 +1,383 @@
1
+ /**
2
+ * Calliope CLI - LLM Providers
3
+ *
4
+ * Handles communication with different LLM providers.
5
+ */
6
+ import Anthropic from '@anthropic-ai/sdk';
7
+ import { GoogleGenerativeAI } from '@google/generative-ai';
8
+ import OpenAI from 'openai';
9
+ import * as config from './config.js';
10
+ import { DEFAULT_MODELS } from './types.js';
11
+ // Constants
12
+ const MAX_TOKENS = 8192;
13
+ // API base URLs for OpenAI-compatible providers
14
+ const PROVIDER_BASE_URLS = {
15
+ openrouter: 'https://openrouter.ai/api/v1',
16
+ together: 'https://api.together.xyz/v1',
17
+ groq: 'https://api.groq.com/openai/v1',
18
+ fireworks: 'https://api.fireworks.ai/inference/v1',
19
+ mistral: 'https://api.mistral.ai/v1',
20
+ ai21: 'https://api.ai21.com/studio/v1',
21
+ huggingface: 'https://api-inference.huggingface.co/v1',
22
+ };
23
+ /**
24
+ * Convert messages to OpenAI format
25
+ */
26
+ function toOpenAIMessages(messages) {
27
+ return messages.map(m => {
28
+ if (m.role === 'tool') {
29
+ return {
30
+ role: 'tool',
31
+ tool_call_id: m.toolCallId || '',
32
+ content: m.content,
33
+ };
34
+ }
35
+ if (m.toolCalls && m.toolCalls.length > 0) {
36
+ return {
37
+ role: 'assistant',
38
+ content: m.content || null,
39
+ tool_calls: m.toolCalls.map(tc => ({
40
+ id: tc.id,
41
+ type: 'function',
42
+ function: {
43
+ name: tc.name,
44
+ arguments: JSON.stringify(tc.arguments),
45
+ },
46
+ })),
47
+ };
48
+ }
49
+ return {
50
+ role: m.role,
51
+ content: m.content,
52
+ };
53
+ });
54
+ }
55
+ /**
56
+ * Convert tools to OpenAI format
57
+ */
58
+ function toOpenAITools(tools) {
59
+ return tools.map(t => ({
60
+ type: 'function',
61
+ function: {
62
+ name: t.name,
63
+ description: t.description,
64
+ parameters: t.parameters,
65
+ },
66
+ }));
67
+ }
68
+ /**
69
+ * Parse tool calls from OpenAI response
70
+ */
71
+ function parseOpenAIToolCalls(toolCalls) {
72
+ if (!toolCalls)
73
+ return [];
74
+ const result = [];
75
+ for (const tc of toolCalls) {
76
+ let parsedArgs = {};
77
+ try {
78
+ parsedArgs = JSON.parse(tc.function.arguments);
79
+ }
80
+ catch (error) {
81
+ const parseError = error instanceof SyntaxError ? error.message : 'Unknown parse error';
82
+ throw new Error(`Invalid tool arguments from LLM: ${parseError}. Raw: ${tc.function.arguments.substring(0, 200)}`);
83
+ }
84
+ result.push({
85
+ id: tc.id,
86
+ name: tc.function.name,
87
+ arguments: parsedArgs,
88
+ });
89
+ }
90
+ return result;
91
+ }
92
+ /**
93
+ * Get available providers based on configured API keys
94
+ */
95
+ export function getAvailableProviders() {
96
+ const providers = [];
97
+ if (config.getApiKey('anthropic'))
98
+ providers.push('anthropic');
99
+ if (config.getApiKey('google'))
100
+ providers.push('google');
101
+ if (config.getApiKey('openai'))
102
+ providers.push('openai');
103
+ if (config.getApiKey('openrouter'))
104
+ providers.push('openrouter');
105
+ if (config.getApiKey('together'))
106
+ providers.push('together');
107
+ if (config.getApiKey('groq'))
108
+ providers.push('groq');
109
+ if (config.getApiKey('mistral'))
110
+ providers.push('mistral');
111
+ if (config.getBaseUrl('ollama'))
112
+ providers.push('ollama');
113
+ if (config.getApiKey('ai21'))
114
+ providers.push('ai21');
115
+ if (config.getApiKey('huggingface'))
116
+ providers.push('huggingface');
117
+ if (config.getBaseUrl('litellm'))
118
+ providers.push('litellm');
119
+ return providers;
120
+ }
121
+ /**
122
+ * Select the best available provider
123
+ */
124
+ export function selectProvider(preferred) {
125
+ if (preferred !== 'auto') {
126
+ // For Ollama/LiteLLM, check base URL instead of API key
127
+ if (preferred === 'ollama' || preferred === 'litellm') {
128
+ if (config.getBaseUrl(preferred))
129
+ return preferred;
130
+ }
131
+ else {
132
+ const key = config.getApiKey(preferred);
133
+ if (key)
134
+ return preferred;
135
+ }
136
+ }
137
+ // Auto-select: prefer Anthropic > OpenAI > Google > others
138
+ const priority = ['anthropic', 'openai', 'google', 'mistral', 'openrouter', 'together', 'groq', 'ollama', 'litellm'];
139
+ for (const p of priority) {
140
+ if (p === 'ollama' || p === 'litellm') {
141
+ if (config.getBaseUrl(p))
142
+ return p;
143
+ }
144
+ else if (config.getApiKey(p)) {
145
+ return p;
146
+ }
147
+ }
148
+ throw new Error('No API keys configured. Run `calliope --setup` to configure.');
149
+ }
150
+ /**
151
+ * Chat with the selected provider
152
+ */
153
+ export async function chat(provider, messages, tools, model) {
154
+ const actualProvider = selectProvider(provider);
155
+ const actualModel = model || DEFAULT_MODELS[actualProvider];
156
+ switch (actualProvider) {
157
+ case 'anthropic':
158
+ return chatAnthropic(messages, tools, actualModel);
159
+ case 'google':
160
+ return chatGoogle(messages, tools, actualModel);
161
+ case 'openai':
162
+ return chatOpenAI(messages, tools, actualModel);
163
+ case 'openrouter':
164
+ case 'together':
165
+ case 'groq':
166
+ case 'fireworks':
167
+ case 'mistral':
168
+ case 'ai21':
169
+ case 'huggingface':
170
+ case 'ollama':
171
+ case 'litellm':
172
+ return chatOpenAICompatible(actualProvider, messages, tools, actualModel);
173
+ default:
174
+ throw new Error(`Provider ${actualProvider} not implemented`);
175
+ }
176
+ }
177
+ /**
178
+ * Chat with Anthropic Claude
179
+ */
180
+ async function chatAnthropic(messages, tools, model) {
181
+ const apiKey = config.getApiKey('anthropic');
182
+ if (!apiKey)
183
+ throw new Error('Anthropic API key not configured');
184
+ const client = new Anthropic({ apiKey });
185
+ // Extract system message
186
+ const systemMessage = messages.find(m => m.role === 'system');
187
+ const chatMessages = messages.filter(m => m.role !== 'system');
188
+ // Convert to Anthropic format
189
+ const anthropicMessages = chatMessages.map(m => {
190
+ if (m.role === 'tool') {
191
+ return {
192
+ role: 'user',
193
+ content: [{
194
+ type: 'tool_result',
195
+ tool_use_id: m.toolCallId || '',
196
+ content: m.content,
197
+ }],
198
+ };
199
+ }
200
+ if (m.toolCalls && m.toolCalls.length > 0) {
201
+ return {
202
+ role: 'assistant',
203
+ content: [
204
+ ...(m.content ? [{ type: 'text', text: m.content }] : []),
205
+ ...m.toolCalls.map(tc => ({
206
+ type: 'tool_use',
207
+ id: tc.id,
208
+ name: tc.name,
209
+ input: tc.arguments,
210
+ })),
211
+ ],
212
+ };
213
+ }
214
+ return {
215
+ role: m.role,
216
+ content: m.content,
217
+ };
218
+ });
219
+ // Convert tools to Anthropic format
220
+ const anthropicTools = tools.map(t => ({
221
+ name: t.name,
222
+ description: t.description,
223
+ input_schema: t.parameters,
224
+ }));
225
+ const response = await client.messages.create({
226
+ model,
227
+ max_tokens: MAX_TOKENS,
228
+ system: systemMessage?.content || '',
229
+ messages: anthropicMessages,
230
+ tools: anthropicTools.length > 0 ? anthropicTools : undefined,
231
+ });
232
+ // Parse response
233
+ let content = '';
234
+ const toolCalls = [];
235
+ for (const block of response.content) {
236
+ if (block.type === 'text') {
237
+ content += block.text;
238
+ }
239
+ else if (block.type === 'tool_use') {
240
+ toolCalls.push({
241
+ id: block.id,
242
+ name: block.name,
243
+ arguments: block.input,
244
+ });
245
+ }
246
+ }
247
+ return {
248
+ content,
249
+ toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
250
+ finishReason: response.stop_reason === 'tool_use' ? 'tool_use' : 'stop',
251
+ usage: {
252
+ inputTokens: response.usage.input_tokens,
253
+ outputTokens: response.usage.output_tokens,
254
+ },
255
+ };
256
+ }
257
+ /**
258
+ * Chat with Google Gemini
259
+ */
260
+ async function chatGoogle(messages, tools, model) {
261
+ const apiKey = config.getApiKey('google');
262
+ if (!apiKey)
263
+ throw new Error('Google API key not configured');
264
+ const genAI = new GoogleGenerativeAI(apiKey);
265
+ const genModel = genAI.getGenerativeModel({ model });
266
+ // Build history (exclude last message)
267
+ const history = messages.slice(0, -1).filter(m => m.role !== 'system').map(m => ({
268
+ role: m.role === 'assistant' ? 'model' : 'user',
269
+ parts: [{ text: m.content }],
270
+ }));
271
+ if (messages.length === 0) {
272
+ throw new Error('No messages provided');
273
+ }
274
+ const lastMessage = messages[messages.length - 1];
275
+ const systemMessage = messages.find(m => m.role === 'system');
276
+ const chat = genModel.startChat({
277
+ history,
278
+ systemInstruction: systemMessage?.content,
279
+ });
280
+ const result = await chat.sendMessage(lastMessage.content);
281
+ const response = result.response;
282
+ const text = response.text();
283
+ // Check for function calls
284
+ const toolCalls = [];
285
+ const candidates = response.candidates || [];
286
+ for (const candidate of candidates) {
287
+ for (const part of candidate.content?.parts || []) {
288
+ if ('functionCall' in part && part.functionCall) {
289
+ toolCalls.push({
290
+ id: `gemini_${Date.now()}_${Math.random().toString(36).slice(2)}`,
291
+ name: part.functionCall.name,
292
+ arguments: part.functionCall.args,
293
+ });
294
+ }
295
+ }
296
+ }
297
+ return {
298
+ content: text,
299
+ toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
300
+ finishReason: toolCalls.length > 0 ? 'tool_use' : 'stop',
301
+ };
302
+ }
303
+ /**
304
+ * Chat with OpenAI
305
+ */
306
+ async function chatOpenAI(messages, tools, model) {
307
+ const apiKey = config.getApiKey('openai');
308
+ if (!apiKey)
309
+ throw new Error('OpenAI API key not configured');
310
+ const client = new OpenAI({ apiKey });
311
+ const openaiMessages = toOpenAIMessages(messages);
312
+ const openaiTools = toOpenAITools(tools);
313
+ const response = await client.chat.completions.create({
314
+ model,
315
+ messages: openaiMessages,
316
+ tools: openaiTools.length > 0 ? openaiTools : undefined,
317
+ max_tokens: MAX_TOKENS,
318
+ });
319
+ if (!response.choices || response.choices.length === 0) {
320
+ throw new Error('Empty response from OpenAI API');
321
+ }
322
+ const choice = response.choices[0];
323
+ const message = choice.message;
324
+ const toolCalls = parseOpenAIToolCalls(message.tool_calls);
325
+ return {
326
+ content: message.content || '',
327
+ toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
328
+ finishReason: choice.finish_reason === 'tool_calls' ? 'tool_use' : 'stop',
329
+ usage: response.usage ? {
330
+ inputTokens: response.usage.prompt_tokens,
331
+ outputTokens: response.usage.completion_tokens,
332
+ } : undefined,
333
+ };
334
+ }
335
+ /**
336
+ * Chat with OpenAI-compatible APIs (OpenRouter, Together, Groq, Mistral, etc.)
337
+ */
338
+ async function chatOpenAICompatible(provider, messages, tools, model) {
339
+ // Ollama and LiteLLM use base URL, others use API key
340
+ let apiKey;
341
+ let baseURL;
342
+ if (provider === 'ollama') {
343
+ baseURL = config.getBaseUrl('ollama') || 'http://localhost:11434/v1';
344
+ apiKey = 'ollama'; // Ollama doesn't require a real API key
345
+ }
346
+ else if (provider === 'litellm') {
347
+ baseURL = config.getBaseUrl('litellm') || 'http://localhost:4000/v1';
348
+ apiKey = config.getApiKey('litellm') || 'litellm'; // LiteLLM may or may not require key
349
+ }
350
+ else {
351
+ apiKey = config.getApiKey(provider);
352
+ if (!apiKey)
353
+ throw new Error(`${provider} API key not configured`);
354
+ baseURL = PROVIDER_BASE_URLS[provider];
355
+ if (!baseURL)
356
+ throw new Error(`Unknown provider: ${provider}`);
357
+ }
358
+ const client = new OpenAI({ apiKey, baseURL });
359
+ const openaiMessages = toOpenAIMessages(messages);
360
+ const openaiTools = toOpenAITools(tools);
361
+ const response = await client.chat.completions.create({
362
+ model,
363
+ messages: openaiMessages,
364
+ tools: openaiTools.length > 0 ? openaiTools : undefined,
365
+ max_tokens: MAX_TOKENS,
366
+ });
367
+ if (!response.choices || response.choices.length === 0) {
368
+ throw new Error(`Empty response from ${provider} API`);
369
+ }
370
+ const choice = response.choices[0];
371
+ const message = choice.message;
372
+ const toolCalls = parseOpenAIToolCalls(message.tool_calls);
373
+ return {
374
+ content: message.content || '',
375
+ toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
376
+ finishReason: choice.finish_reason === 'tool_calls' ? 'tool_use' : 'stop',
377
+ usage: response.usage ? {
378
+ inputTokens: response.usage.prompt_tokens,
379
+ outputTokens: response.usage.completion_tokens,
380
+ } : undefined,
381
+ };
382
+ }
383
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Calliope CLI Setup Wizard
3
+ *
4
+ * Interactive first-run setup for API keys and preferences.
5
+ */
6
+ /**
7
+ * Run the setup wizard
8
+ */
9
+ export declare function runSetup(force?: boolean): Promise<boolean>;
10
+ /**
11
+ * Quick reconfigure (for /setup command)
12
+ */
13
+ export declare function reconfigure(): Promise<void>;
14
+ export default runSetup;
15
+ //# sourceMappingURL=setup.d.ts.map