@compilr-dev/sdk 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.
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Model Tiers — Role-Based Model Selection (Pure/Settings-Free)
3
+ *
4
+ * Pure functions for tier-based model selection. The SDK version accepts
5
+ * optional override maps as parameters instead of reading from settings.
6
+ * CLI wraps these with its settings layer.
7
+ */
8
+ import { TIER_INFO } from './types.js';
9
+ import { getDefaultModelForTier as getDefaultFromRegistry } from './model-registry.js';
10
+ /**
11
+ * Get the default model ID for a tier from the registry.
12
+ */
13
+ function getDefaultModelId(provider, tier) {
14
+ const modelInfo = getDefaultFromRegistry(provider, tier);
15
+ if (modelInfo) {
16
+ return modelInfo.id;
17
+ }
18
+ throw new Error(`No default model found for ${provider}/${tier} in MODEL_REGISTRY`);
19
+ }
20
+ /**
21
+ * Get the model ID for a given tier and provider.
22
+ * Checks overrides first, then falls back to registry defaults.
23
+ *
24
+ * @param provider - The provider type
25
+ * @param tier - The model tier
26
+ * @param overrides - Optional tier overrides (e.g., from user settings)
27
+ */
28
+ export function getModelForTier(provider, tier, overrides) {
29
+ const override = overrides?.[provider]?.[tier];
30
+ if (override) {
31
+ return override;
32
+ }
33
+ return getDefaultModelId(provider, tier);
34
+ }
35
+ /**
36
+ * Get all tier mappings for a provider (with optional overrides applied).
37
+ */
38
+ export function getTierMappings(provider, overrides) {
39
+ return {
40
+ fast: getModelForTier(provider, 'fast', overrides),
41
+ balanced: getModelForTier(provider, 'balanced', overrides),
42
+ powerful: getModelForTier(provider, 'powerful', overrides),
43
+ };
44
+ }
45
+ /**
46
+ * Get the display name for a model tier.
47
+ */
48
+ export function getTierDisplayName(tier) {
49
+ return TIER_INFO[tier].label;
50
+ }
51
+ /**
52
+ * Get short model name from full model ID (for display).
53
+ * e.g., "claude-sonnet-4-5-20250929" -> "Sonnet 4.5"
54
+ */
55
+ export function getShortModelName(modelId) {
56
+ // Claude models
57
+ if (modelId.includes('claude-haiku'))
58
+ return 'Haiku 4.5';
59
+ if (modelId.includes('claude-sonnet'))
60
+ return 'Sonnet 4.5';
61
+ if (modelId.includes('claude-opus'))
62
+ return 'Opus 4.5';
63
+ // OpenAI models
64
+ if (modelId.includes('gpt-5-nano'))
65
+ return 'GPT-5 Nano';
66
+ if (modelId.includes('gpt-5-mini'))
67
+ return 'GPT-5 Mini';
68
+ if (modelId.includes('gpt-5.2'))
69
+ return 'GPT-5.2';
70
+ if (modelId.includes('gpt-4o-mini'))
71
+ return 'GPT-4o Mini';
72
+ if (modelId.includes('gpt-4o'))
73
+ return 'GPT-4o';
74
+ if (modelId.includes('gpt-4-turbo'))
75
+ return 'GPT-4 Turbo';
76
+ // Gemini models
77
+ if (modelId.includes('gemini-2.5-flash-lite'))
78
+ return 'Flash Lite 2.5';
79
+ if (modelId.includes('gemini-2.5-flash'))
80
+ return 'Flash 2.5';
81
+ if (modelId.includes('gemini-2.5-pro'))
82
+ return 'Pro 2.5';
83
+ if (modelId.includes('gemini-3-flash'))
84
+ return 'Flash 3';
85
+ if (modelId.includes('gemini-3-pro'))
86
+ return 'Pro 3';
87
+ // Ollama - just return the model ID
88
+ return modelId;
89
+ }
90
+ /**
91
+ * Get the default tier mappings (without user overrides).
92
+ * Derived from MODEL_REGISTRY — single source of truth.
93
+ */
94
+ export function getDefaultTierMappings() {
95
+ const providers = ['claude', 'openai', 'gemini', 'ollama'];
96
+ const tiers = ['fast', 'balanced', 'powerful'];
97
+ const result = {};
98
+ for (const provider of providers) {
99
+ result[provider] = {};
100
+ for (const tier of tiers) {
101
+ result[provider][tier] = getDefaultModelId(provider, tier);
102
+ }
103
+ }
104
+ return result;
105
+ }
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Provider Metadata
3
+ *
4
+ * Contains metadata for all providers, including "Others" providers
5
+ * that use OpenAI-compatible APIs.
6
+ *
7
+ * Note: CLI-specific fields like `credentialKey` are NOT included here.
8
+ * The CLI extends this metadata with its own credential mapping.
9
+ */
10
+ import type { ProviderType } from '../config.js';
11
+ /**
12
+ * Provider metadata for UI and configuration.
13
+ * Domain-agnostic — no credential storage concerns.
14
+ */
15
+ export interface ProviderMetadata {
16
+ /** Provider type */
17
+ type: ProviderType;
18
+ /** Display name for UI */
19
+ displayName: string;
20
+ /** Short description */
21
+ description: string;
22
+ /** API endpoint URL */
23
+ endpoint: string;
24
+ /** Environment variable name for API key */
25
+ envVar: string;
26
+ /** URL to get API key */
27
+ keyUrl: string;
28
+ /** Whether this provider requires an API key */
29
+ requiresKey: boolean;
30
+ /** Provider category for grouping in UI */
31
+ category: 'primary' | 'local' | 'others';
32
+ /** Notes or warnings for the UI */
33
+ notes?: string;
34
+ }
35
+ /**
36
+ * Model metadata for "Others" providers.
37
+ * Curated list of recommended models per tier.
38
+ */
39
+ export interface OthersProviderModel {
40
+ /** Model ID as used in API calls */
41
+ id: string;
42
+ /** Display name for UI */
43
+ displayName: string;
44
+ /** Short description */
45
+ description: string;
46
+ /** Provider type */
47
+ provider: ProviderType;
48
+ /** Tier (fast/balanced/powerful) */
49
+ tier: 'fast' | 'balanced' | 'powerful';
50
+ }
51
+ /**
52
+ * Metadata for all providers.
53
+ */
54
+ export declare const PROVIDER_METADATA: Record<ProviderType, ProviderMetadata>;
55
+ /**
56
+ * Curated models for Together AI.
57
+ */
58
+ export declare const TOGETHER_MODELS: OthersProviderModel[];
59
+ /**
60
+ * Curated models for Groq.
61
+ */
62
+ export declare const GROQ_MODELS: OthersProviderModel[];
63
+ /**
64
+ * Curated models for Fireworks AI.
65
+ */
66
+ export declare const FIREWORKS_MODELS: OthersProviderModel[];
67
+ /**
68
+ * Curated models for Perplexity.
69
+ */
70
+ export declare const PERPLEXITY_MODELS: OthersProviderModel[];
71
+ /**
72
+ * Curated models for OpenRouter.
73
+ */
74
+ export declare const OPENROUTER_MODELS: OthersProviderModel[];
75
+ /**
76
+ * Get curated models for a specific "Others" provider.
77
+ */
78
+ export declare function getModelsForOthersProvider(provider: ProviderType): OthersProviderModel[];
79
+ /**
80
+ * Get all "Others" providers (for UI listing).
81
+ */
82
+ export declare function getOthersProviders(): ProviderMetadata[];
83
+ /**
84
+ * Get provider metadata by type.
85
+ */
86
+ export declare function getProviderMetadata(provider: ProviderType): ProviderMetadata;
87
+ /**
88
+ * Check if a provider is an "Others" provider.
89
+ */
90
+ export declare function isOthersProvider(provider: ProviderType): boolean;
@@ -0,0 +1,295 @@
1
+ /**
2
+ * Provider Metadata
3
+ *
4
+ * Contains metadata for all providers, including "Others" providers
5
+ * that use OpenAI-compatible APIs.
6
+ *
7
+ * Note: CLI-specific fields like `credentialKey` are NOT included here.
8
+ * The CLI extends this metadata with its own credential mapping.
9
+ */
10
+ // =============================================================================
11
+ // Provider Metadata Registry
12
+ // =============================================================================
13
+ /**
14
+ * Metadata for all providers.
15
+ */
16
+ export const PROVIDER_METADATA = {
17
+ // Primary providers
18
+ claude: {
19
+ type: 'claude',
20
+ displayName: 'Anthropic (Claude)',
21
+ description: 'Claude models from Anthropic',
22
+ endpoint: 'https://api.anthropic.com/v1',
23
+ envVar: 'ANTHROPIC_API_KEY',
24
+ keyUrl: 'https://console.anthropic.com/settings/keys',
25
+ requiresKey: true,
26
+ category: 'primary',
27
+ },
28
+ openai: {
29
+ type: 'openai',
30
+ displayName: 'OpenAI',
31
+ description: 'GPT models from OpenAI',
32
+ endpoint: 'https://api.openai.com/v1',
33
+ envVar: 'OPENAI_API_KEY',
34
+ keyUrl: 'https://platform.openai.com/api-keys',
35
+ requiresKey: true,
36
+ category: 'primary',
37
+ },
38
+ gemini: {
39
+ type: 'gemini',
40
+ displayName: 'Google AI (Gemini)',
41
+ description: 'Gemini models from Google',
42
+ endpoint: 'https://generativelanguage.googleapis.com/v1beta',
43
+ envVar: 'GOOGLE_API_KEY',
44
+ keyUrl: 'https://aistudio.google.com/apikey',
45
+ requiresKey: true,
46
+ category: 'primary',
47
+ },
48
+ // Local provider
49
+ ollama: {
50
+ type: 'ollama',
51
+ displayName: 'Ollama (local)',
52
+ description: 'Local models via Ollama',
53
+ endpoint: 'http://localhost:11434',
54
+ envVar: '',
55
+ keyUrl: 'https://ollama.ai',
56
+ requiresKey: false,
57
+ category: 'local',
58
+ },
59
+ // "Others" providers (OpenAI-compatible APIs)
60
+ together: {
61
+ type: 'together',
62
+ displayName: 'Together AI',
63
+ description: 'Fast inference, many open models',
64
+ endpoint: 'https://api.together.xyz/v1',
65
+ envVar: 'TOGETHER_API_KEY',
66
+ keyUrl: 'https://api.together.xyz/settings/api-keys',
67
+ requiresKey: true,
68
+ category: 'others',
69
+ },
70
+ groq: {
71
+ type: 'groq',
72
+ displayName: 'Groq',
73
+ description: 'Ultra-fast inference',
74
+ endpoint: 'https://api.groq.com/openai/v1',
75
+ envVar: 'GROQ_API_KEY',
76
+ keyUrl: 'https://console.groq.com/keys',
77
+ requiresKey: true,
78
+ category: 'others',
79
+ },
80
+ fireworks: {
81
+ type: 'fireworks',
82
+ displayName: 'Fireworks AI',
83
+ description: 'Fast inference, fine-tuned models',
84
+ endpoint: 'https://api.fireworks.ai/inference/v1',
85
+ envVar: 'FIREWORKS_API_KEY',
86
+ keyUrl: 'https://fireworks.ai/account/api-keys',
87
+ requiresKey: true,
88
+ category: 'others',
89
+ },
90
+ perplexity: {
91
+ type: 'perplexity',
92
+ displayName: 'Perplexity',
93
+ description: 'Search-augmented AI',
94
+ endpoint: 'https://api.perplexity.ai',
95
+ envVar: 'PERPLEXITY_API_KEY',
96
+ keyUrl: 'https://www.perplexity.ai/settings/api',
97
+ requiresKey: true,
98
+ category: 'others',
99
+ },
100
+ openrouter: {
101
+ type: 'openrouter',
102
+ displayName: 'OpenRouter',
103
+ description: 'Model aggregator (100+ models)',
104
+ endpoint: 'https://openrouter.ai/api/v1',
105
+ envVar: 'OPENROUTER_API_KEY',
106
+ keyUrl: 'https://openrouter.ai/keys',
107
+ requiresKey: true,
108
+ category: 'others',
109
+ notes: 'Access multiple providers with one API key',
110
+ },
111
+ custom: {
112
+ type: 'custom',
113
+ displayName: 'Custom Endpoint',
114
+ description: 'User-defined OpenAI-compatible endpoint',
115
+ endpoint: '', // User-provided
116
+ envVar: 'OPENAI_API_KEY', // Default to OpenAI format
117
+ keyUrl: '',
118
+ requiresKey: true,
119
+ category: 'others',
120
+ notes: 'Advanced: configure your own endpoint',
121
+ },
122
+ };
123
+ // =============================================================================
124
+ // Curated Model Lists for "Others" Providers
125
+ // =============================================================================
126
+ /**
127
+ * Curated models for Together AI.
128
+ */
129
+ export const TOGETHER_MODELS = [
130
+ {
131
+ id: 'meta-llama/Llama-3.2-8B-Instruct-Turbo',
132
+ displayName: 'Llama 3.2 8B Instruct',
133
+ description: 'Fast, low cost',
134
+ provider: 'together',
135
+ tier: 'fast',
136
+ },
137
+ {
138
+ id: 'meta-llama/Llama-3.2-70B-Instruct-Turbo',
139
+ displayName: 'Llama 3.2 70B Instruct',
140
+ description: 'Balanced',
141
+ provider: 'together',
142
+ tier: 'balanced',
143
+ },
144
+ {
145
+ id: 'deepseek-ai/DeepSeek-R1-Distill-Llama-70B',
146
+ displayName: 'DeepSeek R1 70B',
147
+ description: 'Most capable',
148
+ provider: 'together',
149
+ tier: 'powerful',
150
+ },
151
+ ];
152
+ /**
153
+ * Curated models for Groq.
154
+ */
155
+ export const GROQ_MODELS = [
156
+ {
157
+ id: 'llama-3.2-8b-instant',
158
+ displayName: 'Llama 3.2 8B',
159
+ description: 'Fast, low cost',
160
+ provider: 'groq',
161
+ tier: 'fast',
162
+ },
163
+ {
164
+ id: 'llama-3.2-70b-versatile',
165
+ displayName: 'Llama 3.2 70B',
166
+ description: 'Balanced',
167
+ provider: 'groq',
168
+ tier: 'balanced',
169
+ },
170
+ {
171
+ id: 'deepseek-r1-distill-llama-70b',
172
+ displayName: 'DeepSeek R1 70B',
173
+ description: 'Most capable',
174
+ provider: 'groq',
175
+ tier: 'powerful',
176
+ },
177
+ ];
178
+ /**
179
+ * Curated models for Fireworks AI.
180
+ */
181
+ export const FIREWORKS_MODELS = [
182
+ {
183
+ id: 'accounts/fireworks/models/llama-v3p2-8b-instruct',
184
+ displayName: 'Llama 3.2 8B',
185
+ description: 'Fast, low cost',
186
+ provider: 'fireworks',
187
+ tier: 'fast',
188
+ },
189
+ {
190
+ id: 'accounts/fireworks/models/llama-v3p2-70b-instruct',
191
+ displayName: 'Llama 3.2 70B',
192
+ description: 'Balanced',
193
+ provider: 'fireworks',
194
+ tier: 'balanced',
195
+ },
196
+ {
197
+ id: 'accounts/fireworks/models/deepseek-r1',
198
+ displayName: 'DeepSeek R1',
199
+ description: 'Most capable',
200
+ provider: 'fireworks',
201
+ tier: 'powerful',
202
+ },
203
+ ];
204
+ /**
205
+ * Curated models for Perplexity.
206
+ */
207
+ export const PERPLEXITY_MODELS = [
208
+ {
209
+ id: 'llama-3.1-sonar-small-128k-online',
210
+ displayName: 'Sonar Small',
211
+ description: 'Fast, low cost',
212
+ provider: 'perplexity',
213
+ tier: 'fast',
214
+ },
215
+ {
216
+ id: 'llama-3.1-sonar-large-128k-online',
217
+ displayName: 'Sonar Large',
218
+ description: 'Balanced',
219
+ provider: 'perplexity',
220
+ tier: 'balanced',
221
+ },
222
+ {
223
+ id: 'llama-3.1-sonar-huge-128k-online',
224
+ displayName: 'Sonar Huge',
225
+ description: 'Most capable',
226
+ provider: 'perplexity',
227
+ tier: 'powerful',
228
+ },
229
+ ];
230
+ /**
231
+ * Curated models for OpenRouter.
232
+ */
233
+ export const OPENROUTER_MODELS = [
234
+ {
235
+ id: 'meta-llama/llama-3.2-8b-instruct',
236
+ displayName: 'Llama 3.2 8B',
237
+ description: 'Fast, low cost',
238
+ provider: 'openrouter',
239
+ tier: 'fast',
240
+ },
241
+ {
242
+ id: 'anthropic/claude-3-5-sonnet',
243
+ displayName: 'Claude 3.5 Sonnet',
244
+ description: 'Balanced (via OpenRouter)',
245
+ provider: 'openrouter',
246
+ tier: 'balanced',
247
+ },
248
+ {
249
+ id: 'anthropic/claude-3-opus',
250
+ displayName: 'Claude 3 Opus',
251
+ description: 'Most capable (via OpenRouter)',
252
+ provider: 'openrouter',
253
+ tier: 'powerful',
254
+ },
255
+ ];
256
+ // =============================================================================
257
+ // Helper Functions
258
+ // =============================================================================
259
+ /**
260
+ * Get curated models for a specific "Others" provider.
261
+ */
262
+ export function getModelsForOthersProvider(provider) {
263
+ switch (provider) {
264
+ case 'together':
265
+ return TOGETHER_MODELS;
266
+ case 'groq':
267
+ return GROQ_MODELS;
268
+ case 'fireworks':
269
+ return FIREWORKS_MODELS;
270
+ case 'perplexity':
271
+ return PERPLEXITY_MODELS;
272
+ case 'openrouter':
273
+ return OPENROUTER_MODELS;
274
+ default:
275
+ return [];
276
+ }
277
+ }
278
+ /**
279
+ * Get all "Others" providers (for UI listing).
280
+ */
281
+ export function getOthersProviders() {
282
+ return Object.values(PROVIDER_METADATA).filter((p) => p.category === 'others' && p.type !== 'custom');
283
+ }
284
+ /**
285
+ * Get provider metadata by type.
286
+ */
287
+ export function getProviderMetadata(provider) {
288
+ return PROVIDER_METADATA[provider];
289
+ }
290
+ /**
291
+ * Check if a provider is an "Others" provider.
292
+ */
293
+ export function isOthersProvider(provider) {
294
+ return PROVIDER_METADATA[provider].category === 'others';
295
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Model Types — Shared types for the models module
3
+ */
4
+ /**
5
+ * Model tier levels for role-based selection
6
+ */
7
+ export type ModelTier = 'fast' | 'balanced' | 'powerful';
8
+ /**
9
+ * All available tiers in order.
10
+ */
11
+ export declare const MODEL_TIERS: ModelTier[];
12
+ /**
13
+ * Check if a tier is valid.
14
+ */
15
+ export declare function isValidTier(tier: string): tier is ModelTier;
16
+ /**
17
+ * Provider-specific model mappings (tier -> model ID)
18
+ */
19
+ export type ProviderModelMap = Record<ModelTier, string>;
20
+ /**
21
+ * Tier info metadata
22
+ */
23
+ export interface TierInfo {
24
+ label: string;
25
+ description: string;
26
+ shortDescription: string;
27
+ }
28
+ export declare const TIER_INFO: Record<ModelTier, TierInfo>;
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Model Types — Shared types for the models module
3
+ */
4
+ /**
5
+ * All available tiers in order.
6
+ */
7
+ export const MODEL_TIERS = ['fast', 'balanced', 'powerful'];
8
+ /**
9
+ * Check if a tier is valid.
10
+ */
11
+ export function isValidTier(tier) {
12
+ return tier === 'fast' || tier === 'balanced' || tier === 'powerful';
13
+ }
14
+ export const TIER_INFO = {
15
+ fast: {
16
+ label: 'Fast',
17
+ description: 'Quick responses, lower cost - best for simple tasks',
18
+ shortDescription: 'Quick, low cost',
19
+ },
20
+ balanced: {
21
+ label: 'Balanced',
22
+ description: 'Good balance of speed and capability - recommended default',
23
+ shortDescription: 'Recommended',
24
+ },
25
+ powerful: {
26
+ label: 'Powerful',
27
+ description: 'Best reasoning and capability - for complex tasks',
28
+ shortDescription: 'Best reasoning',
29
+ },
30
+ };
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Model defaults and context window sizes
3
+ *
4
+ * This file maintains backward compatibility with the original SDK API.
5
+ * Internally, it delegates to the full model registry in ./models/.
6
+ */
7
+ import type { ProviderType } from './config.js';
8
+ /**
9
+ * Default model for each provider.
10
+ * Derived from MODEL_REGISTRY — uses the 'balanced' tier default for each provider.
11
+ */
12
+ export declare const DEFAULT_MODELS: Record<ProviderType, string>;
13
+ /**
14
+ * Default context window when model is unknown
15
+ */
16
+ export declare const DEFAULT_CONTEXT_WINDOW = 128000;
17
+ /**
18
+ * Get the context window size for a model.
19
+ * Delegates to the full registry with prefix-matching fallback.
20
+ */
21
+ export declare function getContextWindow(model?: string): number;
package/dist/models.js ADDED
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Model defaults and context window sizes
3
+ *
4
+ * This file maintains backward compatibility with the original SDK API.
5
+ * Internally, it delegates to the full model registry in ./models/.
6
+ */
7
+ import { getDefaultModelForTier, getModelContextWindow, MODEL_REGISTRY } from './models/index.js';
8
+ /**
9
+ * Default model for each provider.
10
+ * Derived from MODEL_REGISTRY — uses the 'balanced' tier default for each provider.
11
+ */
12
+ export const DEFAULT_MODELS = (() => {
13
+ const providers = [
14
+ 'claude',
15
+ 'openai',
16
+ 'gemini',
17
+ 'ollama',
18
+ 'together',
19
+ 'groq',
20
+ 'fireworks',
21
+ 'perplexity',
22
+ 'openrouter',
23
+ 'custom',
24
+ ];
25
+ const result = {};
26
+ for (const provider of providers) {
27
+ const balanced = getDefaultModelForTier(provider, 'balanced');
28
+ if (balanced) {
29
+ result[provider] = balanced.id;
30
+ }
31
+ else {
32
+ // Fallback: first supported model for this provider, or a sensible default
33
+ const firstModel = MODEL_REGISTRY.find((m) => m.provider === provider && m.status === 'supported');
34
+ result[provider] = firstModel?.id ?? 'gpt-4o';
35
+ }
36
+ }
37
+ return result;
38
+ })();
39
+ /**
40
+ * Default context window when model is unknown
41
+ */
42
+ export const DEFAULT_CONTEXT_WINDOW = 128000;
43
+ /**
44
+ * Get the context window size for a model.
45
+ * Delegates to the full registry with prefix-matching fallback.
46
+ */
47
+ export function getContextWindow(model) {
48
+ if (!model) {
49
+ return DEFAULT_CONTEXT_WINDOW;
50
+ }
51
+ // Use the registry-backed implementation
52
+ const result = getModelContextWindow(model);
53
+ // getModelContextWindow returns the provider fallback (200000) for unknown models,
54
+ // but the original getContextWindow returned DEFAULT_CONTEXT_WINDOW (128000).
55
+ // Check if the model was actually found in the registry.
56
+ const inRegistry = MODEL_REGISTRY.some((m) => m.id === model);
57
+ if (inRegistry) {
58
+ return result;
59
+ }
60
+ // Prefix match against registry entries (e.g., new dated variant of known model)
61
+ for (const entry of MODEL_REGISTRY) {
62
+ if (!entry.contextWindow)
63
+ continue;
64
+ const parts = entry.id.split('-');
65
+ if (parts.length < 2)
66
+ continue;
67
+ const prefix = parts.slice(0, -1).join('-');
68
+ if (prefix && model.startsWith(prefix)) {
69
+ return entry.contextWindow;
70
+ }
71
+ }
72
+ return DEFAULT_CONTEXT_WINDOW;
73
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Coding preset — batteries-included for software development
3
+ */
4
+ import type { Preset, AnyTool } from './types.js';
5
+ /**
6
+ * All file operation tools
7
+ */
8
+ export declare const fileTools: AnyTool[];
9
+ /**
10
+ * All shell tools
11
+ */
12
+ export declare const shellTools: AnyTool[];
13
+ /**
14
+ * Web tools
15
+ */
16
+ export declare const webTools: AnyTool[];
17
+ /**
18
+ * Coding preset — full development environment
19
+ */
20
+ export declare const codingPreset: Preset;
21
+ export { webTools as codingWebTools };