@sashabogi/foundation 0.1.6 → 0.1.8

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 (113) hide show
  1. package/dist/cli/setup-wizard.d.ts +30 -0
  2. package/dist/cli/setup-wizard.d.ts.map +1 -0
  3. package/dist/cli/setup-wizard.js +1645 -0
  4. package/dist/cli/setup-wizard.js.map +1 -0
  5. package/dist/cli/test-connection.d.ts +76 -0
  6. package/dist/cli/test-connection.d.ts.map +1 -0
  7. package/dist/cli/test-connection.js +697 -0
  8. package/dist/cli/test-connection.js.map +1 -0
  9. package/dist/cli.d.ts +3 -1
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +50 -5
  12. package/dist/cli.js.map +1 -1
  13. package/dist/index.d.ts +1 -1
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +8 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/providers/anthropic.d.ts +178 -0
  18. package/dist/providers/anthropic.d.ts.map +1 -0
  19. package/dist/providers/anthropic.js +514 -0
  20. package/dist/providers/anthropic.js.map +1 -0
  21. package/dist/providers/base.d.ts +154 -0
  22. package/dist/providers/base.d.ts.map +1 -0
  23. package/dist/providers/base.js +227 -0
  24. package/dist/providers/base.js.map +1 -0
  25. package/dist/providers/deepseek.d.ts +23 -0
  26. package/dist/providers/deepseek.d.ts.map +1 -0
  27. package/dist/providers/deepseek.js +31 -0
  28. package/dist/providers/deepseek.js.map +1 -0
  29. package/dist/providers/fireworks.d.ts +23 -0
  30. package/dist/providers/fireworks.d.ts.map +1 -0
  31. package/dist/providers/fireworks.js +31 -0
  32. package/dist/providers/fireworks.js.map +1 -0
  33. package/dist/providers/gemini.d.ts +85 -0
  34. package/dist/providers/gemini.d.ts.map +1 -0
  35. package/dist/providers/gemini.js +414 -0
  36. package/dist/providers/gemini.js.map +1 -0
  37. package/dist/providers/groq.d.ts +23 -0
  38. package/dist/providers/groq.d.ts.map +1 -0
  39. package/dist/providers/groq.js +31 -0
  40. package/dist/providers/groq.js.map +1 -0
  41. package/dist/providers/index.d.ts +23 -0
  42. package/dist/providers/index.d.ts.map +1 -0
  43. package/dist/providers/index.js +27 -0
  44. package/dist/providers/index.js.map +1 -0
  45. package/dist/providers/kimi-code.d.ts +32 -0
  46. package/dist/providers/kimi-code.d.ts.map +1 -0
  47. package/dist/providers/kimi-code.js +46 -0
  48. package/dist/providers/kimi-code.js.map +1 -0
  49. package/dist/providers/kimi.d.ts +19 -0
  50. package/dist/providers/kimi.d.ts.map +1 -0
  51. package/dist/providers/kimi.js +27 -0
  52. package/dist/providers/kimi.js.map +1 -0
  53. package/dist/providers/manager.d.ts +144 -0
  54. package/dist/providers/manager.d.ts.map +1 -0
  55. package/dist/providers/manager.js +279 -0
  56. package/dist/providers/manager.js.map +1 -0
  57. package/dist/providers/ollama.d.ts +83 -0
  58. package/dist/providers/ollama.d.ts.map +1 -0
  59. package/dist/providers/ollama.js +450 -0
  60. package/dist/providers/ollama.js.map +1 -0
  61. package/dist/providers/openai.d.ts +91 -0
  62. package/dist/providers/openai.d.ts.map +1 -0
  63. package/dist/providers/openai.js +445 -0
  64. package/dist/providers/openai.js.map +1 -0
  65. package/dist/providers/openrouter.d.ts +23 -0
  66. package/dist/providers/openrouter.d.ts.map +1 -0
  67. package/dist/providers/openrouter.js +31 -0
  68. package/dist/providers/openrouter.js.map +1 -0
  69. package/dist/providers/perplexity.d.ts +34 -0
  70. package/dist/providers/perplexity.d.ts.map +1 -0
  71. package/dist/providers/perplexity.js +58 -0
  72. package/dist/providers/perplexity.js.map +1 -0
  73. package/dist/providers/together.d.ts +23 -0
  74. package/dist/providers/together.d.ts.map +1 -0
  75. package/dist/providers/together.js +31 -0
  76. package/dist/providers/together.js.map +1 -0
  77. package/dist/providers/types.d.ts +229 -0
  78. package/dist/providers/types.d.ts.map +1 -0
  79. package/dist/providers/types.js +73 -0
  80. package/dist/providers/types.js.map +1 -0
  81. package/dist/providers/zai.d.ts +19 -0
  82. package/dist/providers/zai.d.ts.map +1 -0
  83. package/dist/providers/zai.js +27 -0
  84. package/dist/providers/zai.js.map +1 -0
  85. package/dist/services/provider.service.d.ts +28 -0
  86. package/dist/services/provider.service.d.ts.map +1 -1
  87. package/dist/services/provider.service.js +137 -13
  88. package/dist/services/provider.service.js.map +1 -1
  89. package/dist/tools/demerzel/engine.d.ts +67 -0
  90. package/dist/tools/demerzel/engine.d.ts.map +1 -0
  91. package/dist/tools/demerzel/engine.js +401 -0
  92. package/dist/tools/demerzel/engine.js.map +1 -0
  93. package/dist/tools/demerzel/enhanced-snapshot.d.ts +67 -0
  94. package/dist/tools/demerzel/enhanced-snapshot.d.ts.map +1 -0
  95. package/dist/tools/demerzel/enhanced-snapshot.js +481 -0
  96. package/dist/tools/demerzel/enhanced-snapshot.js.map +1 -0
  97. package/dist/tools/demerzel/index.d.ts +11 -0
  98. package/dist/tools/demerzel/index.d.ts.map +1 -1
  99. package/dist/tools/demerzel/index.js +656 -85
  100. package/dist/tools/demerzel/index.js.map +1 -1
  101. package/dist/tools/demerzel/prompts.d.ts +26 -0
  102. package/dist/tools/demerzel/prompts.d.ts.map +1 -0
  103. package/dist/tools/demerzel/prompts.js +181 -0
  104. package/dist/tools/demerzel/prompts.js.map +1 -0
  105. package/dist/tools/demerzel/semantic-search.d.ts +54 -0
  106. package/dist/tools/demerzel/semantic-search.d.ts.map +1 -0
  107. package/dist/tools/demerzel/semantic-search.js +205 -0
  108. package/dist/tools/demerzel/semantic-search.js.map +1 -0
  109. package/dist/tools/demerzel/snapshot.d.ts +30 -0
  110. package/dist/tools/demerzel/snapshot.d.ts.map +1 -0
  111. package/dist/tools/demerzel/snapshot.js +169 -0
  112. package/dist/tools/demerzel/snapshot.js.map +1 -0
  113. package/package.json +2 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kimi.d.ts","sourceRoot":"","sources":["../../src/providers/kimi.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAKjD;;;;;GAKG;AACH,qBAAa,YAAa,SAAQ,cAAc;IAC9C,SAAyB,IAAI,UAAU;gBAE3B,MAAM,EAAE,cAAc;CAQnC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Kimi (Moonshot AI) Provider Implementation
3
+ *
4
+ * Kimi uses an OpenAI-compatible API format.
5
+ * This provider extends OpenAIProvider with the correct name identifier.
6
+ */
7
+ import { OpenAIProvider } from './openai.js';
8
+ // Default base URL for Kimi API
9
+ const KIMI_BASE_URL = 'https://api.moonshot.ai/v1';
10
+ /**
11
+ * Kimi (Moonshot AI) API provider adapter.
12
+ *
13
+ * Uses OpenAI-compatible API format but with Kimi endpoints.
14
+ * Default base URL: https://api.moonshot.ai/v1
15
+ */
16
+ export class KimiProvider extends OpenAIProvider {
17
+ name = 'kimi';
18
+ constructor(config) {
19
+ // Ensure base_url defaults to Kimi endpoint if not specified
20
+ const configWithDefaults = {
21
+ ...config,
22
+ base_url: config.base_url ?? KIMI_BASE_URL,
23
+ };
24
+ super(configWithDefaults);
25
+ }
26
+ }
27
+ //# sourceMappingURL=kimi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kimi.js","sourceRoot":"","sources":["../../src/providers/kimi.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,gCAAgC;AAChC,MAAM,aAAa,GAAG,4BAA4B,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,OAAO,YAAa,SAAQ,cAAc;IACrB,IAAI,GAAG,MAAM,CAAC;IAEvC,YAAY,MAAsB;QAChC,6DAA6D;QAC7D,MAAM,kBAAkB,GAAmB;YACzC,GAAG,MAAM;YACT,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,aAAa;SAC3C,CAAC;QACF,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC5B,CAAC;CACF"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Provider Manager
3
+ *
4
+ * Manages the registry of LLM providers, handling provider creation,
5
+ * retrieval, and configuration updates. Provides a factory method for
6
+ * creating provider instances based on their type.
7
+ */
8
+ import { type Provider, type ProviderConfig, type ProviderType } from './types.js';
9
+ /**
10
+ * Factory function type for creating provider instances.
11
+ */
12
+ export type ProviderFactory = (config: ProviderConfig) => Provider;
13
+ /**
14
+ * Manager for LLM provider instances.
15
+ *
16
+ * Handles:
17
+ * - Provider registration and retrieval
18
+ * - Provider instance creation via factory methods
19
+ * - Configuration updates with instance recreation
20
+ * - Lazy instantiation of providers
21
+ *
22
+ * @example
23
+ * ```ts
24
+ * const manager = new ProviderManager();
25
+ *
26
+ * // Update configurations (creates instances lazily)
27
+ * manager.updateConfig({
28
+ * anthropic: { api_key: 'sk-...' },
29
+ * openai: { api_key: 'sk-...' }
30
+ * });
31
+ *
32
+ * // Get a provider instance
33
+ * const provider = manager.get('anthropic');
34
+ * ```
35
+ */
36
+ export declare class ProviderManager {
37
+ /** Registry of provider factories and instances by name */
38
+ private readonly providers;
39
+ /** Registry of active provider instances */
40
+ private readonly instances;
41
+ /**
42
+ * Create a new ProviderManager with default factories registered.
43
+ */
44
+ constructor();
45
+ /**
46
+ * Register a provider factory for a given provider type.
47
+ * The factory will be used to create provider instances when needed.
48
+ *
49
+ * @param name - Provider name (e.g., 'anthropic', 'openai')
50
+ * @param factory - Factory function that creates provider instances
51
+ */
52
+ registerFactory(name: string, factory: ProviderFactory): void;
53
+ /**
54
+ * Register a pre-created provider instance directly.
55
+ * Useful for testing or custom provider implementations.
56
+ *
57
+ * @param name - Provider name
58
+ * @param provider - Provider instance
59
+ */
60
+ register(name: string, provider: Provider): void;
61
+ /**
62
+ * Get a provider instance by name.
63
+ * Creates the instance lazily if it hasn't been created yet.
64
+ *
65
+ * @param name - Provider name
66
+ * @returns The provider instance
67
+ * @throws ConfigurationError if the provider is not registered or not configured
68
+ */
69
+ get(name: string): Provider;
70
+ /**
71
+ * Check if a provider is registered (has a factory).
72
+ *
73
+ * @param name - Provider name
74
+ * @returns True if the provider is registered
75
+ */
76
+ has(name: string): boolean;
77
+ /**
78
+ * Check if a provider is configured and ready to use.
79
+ *
80
+ * @param name - Provider name
81
+ * @returns True if the provider is configured
82
+ */
83
+ isConfigured(name: string): boolean;
84
+ /**
85
+ * Update provider configurations.
86
+ * This will invalidate existing instances so they are recreated with new configs.
87
+ *
88
+ * @param configs - Map of provider name to configuration
89
+ */
90
+ updateConfig(configs: Record<string, ProviderConfig>): void;
91
+ /**
92
+ * Get the configuration for a provider.
93
+ *
94
+ * @param name - Provider name
95
+ * @returns The provider configuration, or undefined if not configured
96
+ */
97
+ getConfig(name: string): ProviderConfig | undefined;
98
+ /**
99
+ * List all registered provider names.
100
+ *
101
+ * @returns Array of provider names
102
+ */
103
+ listProviders(): string[];
104
+ /**
105
+ * List all configured provider names (ready to use).
106
+ *
107
+ * @returns Array of configured provider names
108
+ */
109
+ listConfigured(): string[];
110
+ /**
111
+ * Remove a provider from the registry.
112
+ *
113
+ * @param name - Provider name to remove
114
+ */
115
+ remove(name: string): void;
116
+ /**
117
+ * Clear all providers from the registry.
118
+ */
119
+ clear(): void;
120
+ /**
121
+ * Run health checks on all configured providers.
122
+ *
123
+ * @returns Map of provider name to health check result (true = healthy, Error = failed)
124
+ */
125
+ healthCheckAll(): Promise<Map<string, true | Error>>;
126
+ }
127
+ /**
128
+ * Create a provider instance based on provider type.
129
+ * This is a factory function that maps provider types to their implementations.
130
+ *
131
+ * @param type - Provider type
132
+ * @param config - Provider configuration
133
+ * @param manager - Provider manager with registered factories
134
+ * @returns Provider instance
135
+ * @throws ConfigurationError if the provider type is not supported
136
+ */
137
+ export declare function createProvider(type: ProviderType, config: ProviderConfig, manager: ProviderManager): Provider;
138
+ /**
139
+ * Create a ProviderManager with default provider factories registered.
140
+ *
141
+ * @returns Configured ProviderManager
142
+ */
143
+ export declare function createProviderManager(): ProviderManager;
144
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/providers/manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAsB,KAAK,QAAQ,EAAE,KAAK,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAiBvG;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,cAAc,KAAK,QAAQ,CAAC;AAiCnE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,eAAe;IAC1B,2DAA2D;IAC3D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2C;IAErE,4CAA4C;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;IAEzD;;OAEG;;IAQH;;;;;;OAMG;IACI,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI;IAcpE;;;;;;OAMG;IACI,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAUvD;;;;;;;OAOG;IACI,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ;IAkClC;;;;;OAKG;IACI,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC;;;;;OAKG;IACI,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAK1C;;;;;OAKG;IACI,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,IAAI;IAwBlE;;;;;OAKG;IACI,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI1D;;;;OAIG;IACI,aAAa,IAAI,MAAM,EAAE;IAOhC;;;;OAIG;IACI,cAAc,IAAI,MAAM,EAAE;IAIjC;;;;OAIG;IACI,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKjC;;OAEG;IACI,KAAK,IAAI,IAAI;IAKpB;;;;OAIG;IACU,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC;CAkBlE;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,eAAe,GACvB,QAAQ,CAIV;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,CAEvD"}
@@ -0,0 +1,279 @@
1
+ /**
2
+ * Provider Manager
3
+ *
4
+ * Manages the registry of LLM providers, handling provider creation,
5
+ * retrieval, and configuration updates. Provides a factory method for
6
+ * creating provider instances based on their type.
7
+ */
8
+ import { ConfigurationError } from './types.js';
9
+ // Import all provider implementations
10
+ import { AnthropicProvider } from './anthropic.js';
11
+ import { OpenAIProvider } from './openai.js';
12
+ import { GeminiProvider } from './gemini.js';
13
+ import { OllamaProvider } from './ollama.js';
14
+ import { GroqProvider } from './groq.js';
15
+ import { TogetherProvider } from './together.js';
16
+ import { FireworksProvider } from './fireworks.js';
17
+ import { OpenRouterProvider } from './openrouter.js';
18
+ import { PerplexityProvider } from './perplexity.js';
19
+ import { KimiProvider } from './kimi.js';
20
+ import { KimiCodeProvider } from './kimi-code.js';
21
+ import { ZAIProvider } from './zai.js';
22
+ import { DeepSeekProvider } from './deepseek.js';
23
+ /**
24
+ * Default provider factories for all supported providers.
25
+ */
26
+ const DEFAULT_FACTORIES = {
27
+ anthropic: (config) => new AnthropicProvider(config),
28
+ openai: (config) => new OpenAIProvider(config),
29
+ google: (config) => new GeminiProvider(config),
30
+ ollama: (config) => new OllamaProvider(config),
31
+ groq: (config) => new GroqProvider(config),
32
+ together: (config) => new TogetherProvider(config),
33
+ fireworks: (config) => new FireworksProvider(config),
34
+ openrouter: (config) => new OpenRouterProvider(config),
35
+ perplexity: (config) => new PerplexityProvider(config),
36
+ kimi: (config) => new KimiProvider(config),
37
+ 'kimi-code': (config) => new KimiCodeProvider(config),
38
+ zai: (config) => new ZAIProvider(config),
39
+ deepseek: (config) => new DeepSeekProvider(config),
40
+ };
41
+ /**
42
+ * Manager for LLM provider instances.
43
+ *
44
+ * Handles:
45
+ * - Provider registration and retrieval
46
+ * - Provider instance creation via factory methods
47
+ * - Configuration updates with instance recreation
48
+ * - Lazy instantiation of providers
49
+ *
50
+ * @example
51
+ * ```ts
52
+ * const manager = new ProviderManager();
53
+ *
54
+ * // Update configurations (creates instances lazily)
55
+ * manager.updateConfig({
56
+ * anthropic: { api_key: 'sk-...' },
57
+ * openai: { api_key: 'sk-...' }
58
+ * });
59
+ *
60
+ * // Get a provider instance
61
+ * const provider = manager.get('anthropic');
62
+ * ```
63
+ */
64
+ export class ProviderManager {
65
+ /** Registry of provider factories and instances by name */
66
+ providers = new Map();
67
+ /** Registry of active provider instances */
68
+ instances = new Map();
69
+ /**
70
+ * Create a new ProviderManager with default factories registered.
71
+ */
72
+ constructor() {
73
+ // Register all default factories
74
+ for (const [type, factory] of Object.entries(DEFAULT_FACTORIES)) {
75
+ this.registerFactory(type, factory);
76
+ }
77
+ }
78
+ /**
79
+ * Register a provider factory for a given provider type.
80
+ * The factory will be used to create provider instances when needed.
81
+ *
82
+ * @param name - Provider name (e.g., 'anthropic', 'openai')
83
+ * @param factory - Factory function that creates provider instances
84
+ */
85
+ registerFactory(name, factory) {
86
+ const existing = this.providers.get(name);
87
+ if (existing) {
88
+ // Update the factory but preserve existing config
89
+ existing.factory = factory;
90
+ // Clear instance so it will be recreated with new factory
91
+ delete existing.instance;
92
+ this.instances.delete(name);
93
+ }
94
+ else {
95
+ this.providers.set(name, { factory });
96
+ }
97
+ }
98
+ /**
99
+ * Register a pre-created provider instance directly.
100
+ * Useful for testing or custom provider implementations.
101
+ *
102
+ * @param name - Provider name
103
+ * @param provider - Provider instance
104
+ */
105
+ register(name, provider) {
106
+ this.instances.set(name, provider);
107
+ // Also store in providers map with a dummy factory
108
+ this.providers.set(name, {
109
+ factory: () => provider,
110
+ instance: provider,
111
+ });
112
+ }
113
+ /**
114
+ * Get a provider instance by name.
115
+ * Creates the instance lazily if it hasn't been created yet.
116
+ *
117
+ * @param name - Provider name
118
+ * @returns The provider instance
119
+ * @throws ConfigurationError if the provider is not registered or not configured
120
+ */
121
+ get(name) {
122
+ // Check for directly registered instance first
123
+ const directInstance = this.instances.get(name);
124
+ if (directInstance) {
125
+ return directInstance;
126
+ }
127
+ // Check for factory-based registration
128
+ const registration = this.providers.get(name);
129
+ if (!registration) {
130
+ throw new ConfigurationError(`Provider '${name}' is not registered. Available providers: ${this.listProviders().join(', ') || 'none'}`);
131
+ }
132
+ // Return existing instance if available
133
+ if (registration.instance) {
134
+ return registration.instance;
135
+ }
136
+ // Check if we have configuration
137
+ if (!registration.config) {
138
+ throw new ConfigurationError(`Provider '${name}' is registered but not configured. Call updateConfig() first.`);
139
+ }
140
+ // Create new instance
141
+ registration.instance = registration.factory(registration.config);
142
+ this.instances.set(name, registration.instance);
143
+ return registration.instance;
144
+ }
145
+ /**
146
+ * Check if a provider is registered (has a factory).
147
+ *
148
+ * @param name - Provider name
149
+ * @returns True if the provider is registered
150
+ */
151
+ has(name) {
152
+ return this.providers.has(name) || this.instances.has(name);
153
+ }
154
+ /**
155
+ * Check if a provider is configured and ready to use.
156
+ *
157
+ * @param name - Provider name
158
+ * @returns True if the provider is configured
159
+ */
160
+ isConfigured(name) {
161
+ const registration = this.providers.get(name);
162
+ return !!registration?.config || this.instances.has(name);
163
+ }
164
+ /**
165
+ * Update provider configurations.
166
+ * This will invalidate existing instances so they are recreated with new configs.
167
+ *
168
+ * @param configs - Map of provider name to configuration
169
+ */
170
+ updateConfig(configs) {
171
+ for (const [name, config] of Object.entries(configs)) {
172
+ const registration = this.providers.get(name);
173
+ if (registration) {
174
+ // Update config and clear instance to force recreation
175
+ registration.config = config;
176
+ delete registration.instance;
177
+ this.instances.delete(name);
178
+ }
179
+ else {
180
+ // Store config even if no factory registered yet
181
+ // This allows config to be loaded before factories are registered
182
+ this.providers.set(name, {
183
+ factory: () => {
184
+ throw new ConfigurationError(`No factory registered for provider '${name}'`);
185
+ },
186
+ config,
187
+ });
188
+ }
189
+ }
190
+ }
191
+ /**
192
+ * Get the configuration for a provider.
193
+ *
194
+ * @param name - Provider name
195
+ * @returns The provider configuration, or undefined if not configured
196
+ */
197
+ getConfig(name) {
198
+ return this.providers.get(name)?.config;
199
+ }
200
+ /**
201
+ * List all registered provider names.
202
+ *
203
+ * @returns Array of provider names
204
+ */
205
+ listProviders() {
206
+ const names = new Set();
207
+ this.providers.forEach((_, name) => names.add(name));
208
+ this.instances.forEach((_, name) => names.add(name));
209
+ return Array.from(names);
210
+ }
211
+ /**
212
+ * List all configured provider names (ready to use).
213
+ *
214
+ * @returns Array of configured provider names
215
+ */
216
+ listConfigured() {
217
+ return this.listProviders().filter((name) => this.isConfigured(name));
218
+ }
219
+ /**
220
+ * Remove a provider from the registry.
221
+ *
222
+ * @param name - Provider name to remove
223
+ */
224
+ remove(name) {
225
+ this.providers.delete(name);
226
+ this.instances.delete(name);
227
+ }
228
+ /**
229
+ * Clear all providers from the registry.
230
+ */
231
+ clear() {
232
+ this.providers.clear();
233
+ this.instances.clear();
234
+ }
235
+ /**
236
+ * Run health checks on all configured providers.
237
+ *
238
+ * @returns Map of provider name to health check result (true = healthy, Error = failed)
239
+ */
240
+ async healthCheckAll() {
241
+ const results = new Map();
242
+ const configured = this.listConfigured();
243
+ await Promise.all(configured.map(async (name) => {
244
+ try {
245
+ const provider = this.get(name);
246
+ await provider.healthCheck();
247
+ results.set(name, true);
248
+ }
249
+ catch (error) {
250
+ results.set(name, error instanceof Error ? error : new Error(String(error)));
251
+ }
252
+ }));
253
+ return results;
254
+ }
255
+ }
256
+ /**
257
+ * Create a provider instance based on provider type.
258
+ * This is a factory function that maps provider types to their implementations.
259
+ *
260
+ * @param type - Provider type
261
+ * @param config - Provider configuration
262
+ * @param manager - Provider manager with registered factories
263
+ * @returns Provider instance
264
+ * @throws ConfigurationError if the provider type is not supported
265
+ */
266
+ export function createProvider(type, config, manager) {
267
+ // Update config and get instance from manager
268
+ manager.updateConfig({ [type]: config });
269
+ return manager.get(type);
270
+ }
271
+ /**
272
+ * Create a ProviderManager with default provider factories registered.
273
+ *
274
+ * @returns Configured ProviderManager
275
+ */
276
+ export function createProviderManager() {
277
+ return new ProviderManager();
278
+ }
279
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/providers/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Ollama Provider Implementation
3
+ *
4
+ * Implements the Provider interface for Ollama's OpenAI-compatible API.
5
+ * Ollama provides local LLM inference with an API that mirrors OpenAI's format.
6
+ *
7
+ * Key characteristics:
8
+ * - Local server running at http://localhost:11434
9
+ * - No authentication required (local)
10
+ * - Uses OpenAI-compatible /v1/chat/completions endpoint
11
+ * - May not support all features (especially function calling)
12
+ * - Server may be slower than cloud providers
13
+ */
14
+ import { type CompletionRequest, type CompletionResponse, type StreamChunk } from './types.js';
15
+ import { BaseProvider } from './base.js';
16
+ /**
17
+ * Ollama provider adapter for local LLM inference.
18
+ *
19
+ * Ollama provides an OpenAI-compatible API for running local models.
20
+ * This provider translates Foundation requests to the Ollama format
21
+ * and handles the specific characteristics of local inference.
22
+ *
23
+ * Features:
24
+ * - No authentication required (local server)
25
+ * - Supports streaming responses
26
+ * - Limited function calling support (depends on model)
27
+ * - Graceful connection error handling
28
+ */
29
+ export declare class OllamaProvider extends BaseProvider {
30
+ readonly name = "ollama";
31
+ private static readonly DEFAULT_BASE_URL;
32
+ /**
33
+ * Build headers for Ollama API requests.
34
+ * No authentication required for local server.
35
+ */
36
+ protected buildHeaders(): Record<string, string>;
37
+ /**
38
+ * Execute a completion request and return the full response.
39
+ */
40
+ complete(request: CompletionRequest): Promise<CompletionResponse>;
41
+ /**
42
+ * Execute a streaming completion request.
43
+ */
44
+ completeStream(request: CompletionRequest): AsyncIterable<StreamChunk>;
45
+ /**
46
+ * Check if the Ollama server is running and available.
47
+ * Uses the native Ollama tags API to list available models.
48
+ */
49
+ healthCheck(): Promise<void>;
50
+ /**
51
+ * Handle Ollama-specific errors with helpful messages.
52
+ */
53
+ private handleOllamaError;
54
+ /**
55
+ * Translate Foundation request to Ollama format.
56
+ */
57
+ private translateRequest;
58
+ /**
59
+ * Translate messages from Foundation format to Ollama format.
60
+ *
61
+ * Key translations:
62
+ * - Content blocks are flattened to strings
63
+ * - tool_use blocks become tool_calls array on assistant messages
64
+ * - tool_result blocks become separate role: "tool" messages
65
+ */
66
+ private translateMessages;
67
+ /**
68
+ * Translate tools from Foundation format to Ollama format.
69
+ */
70
+ private translateTools;
71
+ /**
72
+ * Translate Ollama response to Foundation format.
73
+ */
74
+ private translateResponse;
75
+ /**
76
+ * Translate Ollama streaming chunk to Foundation StreamChunk format.
77
+ *
78
+ * Ollama streams deltas that need to be accumulated for tool calls.
79
+ * Text content can be yielded immediately.
80
+ */
81
+ private translateStreamChunk;
82
+ }
83
+ //# sourceMappingURL=ollama.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../src/providers/ollama.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAIjB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAkJzC;;;;;;;;;;;;GAYG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,SAAgB,IAAI,YAAY;IAEhC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAA4B;IAEpE;;;OAGG;cACgB,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAazD;;OAEG;IACU,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAqB9E;;OAEG;IACW,cAAc,CAAC,OAAO,EAAE,iBAAiB,GAAG,aAAa,CAAC,WAAW,CAAC;IAyFpF;;;OAGG;IACU,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IA+BzC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAsCzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAcxB;;;;;;;OAOG;IACH,OAAO,CAAC,iBAAiB;IAoFzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAWtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA2DzB;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;CA+F7B"}