codelantern-agent-cli 1.0.0 → 1.0.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/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Core type definitions for Orbit CLI
2
+ * Core type definitions for Code Lantern CLI
3
3
  */
4
4
  type ModelRole = 'user' | 'model' | 'tool' | 'system';
5
5
  interface FileAttachment {
@@ -40,9 +40,11 @@ interface OrbitSession {
40
40
  createdAt: string;
41
41
  updatedAt: string;
42
42
  workspace: string;
43
+ provider?: string;
43
44
  model: string;
44
45
  turns: ConversationTurn[];
45
46
  totalUsage: TokenUsage;
47
+ activeSkills?: string[];
46
48
  }
47
49
  interface McpServerConfig {
48
50
  command: string;
@@ -50,7 +52,56 @@ interface McpServerConfig {
50
52
  env?: Record<string, string>;
51
53
  disabled?: boolean;
52
54
  }
55
+ type ProviderType = 'gemini' | 'openai' | 'anthropic' | 'openrouter' | 'custom';
56
+ interface ProviderConfig {
57
+ id: string;
58
+ name: string;
59
+ type: ProviderType;
60
+ baseUrl?: string;
61
+ apiKey?: string;
62
+ defaultModel?: string;
63
+ headers?: Record<string, string>;
64
+ disabled?: boolean;
65
+ }
66
+ interface ModelCapabilities {
67
+ streaming: boolean;
68
+ tools: boolean;
69
+ images: boolean;
70
+ reasoning: boolean;
71
+ contextWindow?: number;
72
+ }
73
+ interface ProviderModelInfo {
74
+ id: string;
75
+ name: string;
76
+ provider: string;
77
+ description?: string;
78
+ contextWindow?: number;
79
+ capabilities: ModelCapabilities;
80
+ pricing?: {
81
+ promptPer1k?: number;
82
+ completionPer1k?: number;
83
+ };
84
+ }
85
+ interface TimingDiagnostics {
86
+ providerInitMs?: number;
87
+ connectMs?: number;
88
+ ttftMs?: number;
89
+ streamMs?: number;
90
+ totalMs: number;
91
+ toolExecutionMs: Record<string, number>;
92
+ }
93
+ interface Skill {
94
+ name: string;
95
+ description: string;
96
+ path: string;
97
+ source: 'project' | 'user';
98
+ enabled: boolean;
99
+ content: string;
100
+ references?: string[];
101
+ tags?: string[];
102
+ }
53
103
  interface OrbitConfig {
104
+ activeProvider: string;
54
105
  defaultModel: string;
55
106
  maxSteps: number;
56
107
  temperature: number;
@@ -60,6 +111,11 @@ interface OrbitConfig {
60
111
  autoCompactThreshold: number;
61
112
  mcpServers?: Record<string, McpServerConfig>;
62
113
  timeoutMs: number;
114
+ firstTokenTimeoutMs: number;
115
+ showTiming: boolean;
116
+ lowLatency: boolean;
117
+ activeSkills: string[];
118
+ providers?: Record<string, ProviderConfig>;
63
119
  }
64
120
  interface ApprovalRequest {
65
121
  type: 'file_edit' | 'file_write' | 'command';
@@ -75,12 +131,20 @@ interface ApprovalRequest {
75
131
  type ApprovalDecision = 'allow' | 'deny' | 'yolo_all';
76
132
  interface AgentContext {
77
133
  workspace: string;
134
+ provider: string;
78
135
  model: string;
79
136
  yolo: boolean;
80
137
  planMode: boolean;
81
138
  jsonOutput: boolean;
82
139
  maxSteps: number;
140
+ timeoutMs: number;
141
+ firstTokenTimeoutMs: number;
142
+ showTiming: boolean;
143
+ lowLatency: boolean;
144
+ activeSkills?: string[];
83
145
  attachments?: FileAttachment[];
146
+ signal?: AbortSignal;
147
+ onStateChange?: (state: string) => void;
84
148
  }
85
149
  interface ToolDefinition {
86
150
  name: string;
@@ -104,6 +168,7 @@ interface ToolExecutionContext {
104
168
  yolo: boolean;
105
169
  planMode: boolean;
106
170
  requestApproval: (request: ApprovalRequest) => Promise<boolean>;
171
+ signal?: AbortSignal;
107
172
  }
108
173
  interface ToolExecutionResult {
109
174
  success: boolean;
@@ -124,7 +189,7 @@ declare function setConfigValue(key: string, value: unknown): {
124
189
  declare function getConfigValue<K extends keyof OrbitConfig>(key: K): OrbitConfig[K];
125
190
 
126
191
  declare const DEFAULT_CONFIG: OrbitConfig;
127
- declare const ALLOWED_CONFIG_KEYS: readonly ["defaultModel", "maxSteps", "temperature", "maxOutputTokens", "yolo", "theme", "autoCompactThreshold", "timeoutMs"];
192
+ declare const ALLOWED_CONFIG_KEYS: readonly ["activeProvider", "defaultModel", "maxSteps", "temperature", "maxOutputTokens", "yolo", "theme", "autoCompactThreshold", "timeoutMs", "firstTokenTimeoutMs", "showTiming", "lowLatency", "activeSkills"];
128
193
  type ConfigKey = (typeof ALLOWED_CONFIG_KEYS)[number];
129
194
  declare function validateConfigValue(key: string, value: unknown): {
130
195
  valid: boolean;
@@ -143,36 +208,178 @@ interface StreamCallbacks {
143
208
  onChunk?: (text: string) => void;
144
209
  onToolCalls?: (toolCalls: ToolCallItem[]) => void;
145
210
  onUsage?: (usage: TokenUsage) => void;
211
+ onStateChange?: (state: string) => void;
146
212
  }
147
- declare class GeminiProvider {
148
- private client;
149
- private apiKey;
150
- constructor(apiKey?: string);
213
+ interface ProviderStreamParams {
214
+ model: string;
215
+ systemInstruction: string;
216
+ history: ConversationTurn[];
217
+ tools: ToolDefinition[];
218
+ callbacks: StreamCallbacks;
219
+ signal?: AbortSignal;
220
+ temperature?: number;
221
+ maxOutputTokens?: number;
222
+ timeoutMs?: number;
223
+ firstTokenTimeoutMs?: number;
224
+ lowLatency?: boolean;
225
+ enableSearchGrounding?: boolean;
226
+ }
227
+ interface ProviderStreamResult {
228
+ text: string;
229
+ toolCalls: ToolCallItem[];
230
+ usage: TokenUsage;
231
+ timing: TimingDiagnostics;
232
+ }
233
+ interface ProviderTestResult {
234
+ success: boolean;
235
+ latencyMs: number;
236
+ error?: string;
237
+ modelsCount?: number;
238
+ resolvedModel?: string;
239
+ }
240
+ interface IProviderAdapter {
241
+ id: string;
242
+ name: string;
243
+ displayName: string;
244
+ defaultModel: string;
151
245
  isConfigured(): boolean;
246
+ getApiKey(): string | null;
152
247
  getMaskedKey(): string;
153
- private ensureClient;
154
- streamGenerate(modelId: string, systemInstruction: string, history: ConversationTurn[], tools: ToolDefinition[], callbacks: StreamCallbacks, options?: {
155
- temperature?: number;
156
- maxOutputTokens?: number;
157
- enableSearchGrounding?: boolean;
158
- }): Promise<{
159
- text: string;
160
- toolCalls: ToolCallItem[];
161
- usage: TokenUsage;
248
+ streamGenerate(params: ProviderStreamParams): Promise<ProviderStreamResult>;
249
+ listModels(refresh?: boolean): Promise<ProviderModelInfo[]>;
250
+ testConnection(): Promise<ProviderTestResult>;
251
+ getCapabilities(modelId: string): ModelCapabilities;
252
+ }
253
+
254
+ declare class ProviderRegistry {
255
+ private providers;
256
+ constructor();
257
+ private registerBuiltins;
258
+ private loadCustomProviders;
259
+ getProvider(id?: string): IProviderAdapter;
260
+ hasProvider(id: string): boolean;
261
+ listProviders(): Array<{
262
+ id: string;
263
+ name: string;
264
+ displayName: string;
265
+ isConfigured: boolean;
266
+ maskedKey: string;
267
+ defaultModel: string;
268
+ isActive: boolean;
162
269
  }>;
270
+ registerCustomProvider(cfg: ProviderConfig): void;
271
+ removeCustomProvider(id: string): boolean;
272
+ testProvider(id?: string): Promise<ProviderTestResult>;
273
+ listModels(providerId?: string, refresh?: boolean): Promise<ProviderModelInfo[]>;
274
+ }
275
+
276
+ declare class GeminiProvider implements IProviderAdapter {
277
+ id: string;
278
+ name: string;
279
+ displayName: string;
280
+ defaultModel: string;
281
+ private cachedModels;
282
+ isConfigured(): boolean;
283
+ getApiKey(): string | null;
284
+ getMaskedKey(): string;
285
+ private getClient;
286
+ getCapabilities(modelId: string): ModelCapabilities;
287
+ testConnection(): Promise<ProviderTestResult>;
288
+ listModels(refresh?: boolean): Promise<ProviderModelInfo[]>;
289
+ streamGenerate(params: ProviderStreamParams): Promise<ProviderStreamResult>;
163
290
  private convertHistoryToContents;
164
291
  private convertToolsToDeclarations;
165
292
  }
166
293
 
167
- declare class MissingApiKeyError extends Error {
294
+ declare class OpenAIProvider implements IProviderAdapter {
295
+ id: string;
296
+ name: string;
297
+ displayName: string;
298
+ defaultModel: string;
299
+ baseUrl: string;
300
+ customHeaders: Record<string, string>;
301
+ private cachedModels;
302
+ constructor(options?: {
303
+ id?: string;
304
+ name?: string;
305
+ displayName?: string;
306
+ baseUrl?: string;
307
+ defaultModel?: string;
308
+ headers?: Record<string, string>;
309
+ });
310
+ isConfigured(): boolean;
311
+ getApiKey(): string | null;
312
+ getMaskedKey(): string;
313
+ getCapabilities(modelId: string): ModelCapabilities;
314
+ testConnection(): Promise<ProviderTestResult>;
315
+ listModels(refresh?: boolean): Promise<ProviderModelInfo[]>;
316
+ streamGenerate(params: ProviderStreamParams): Promise<ProviderStreamResult>;
317
+ private convertHistoryToMessages;
318
+ private convertTools;
319
+ private readSSEStream;
320
+ }
321
+
322
+ declare class AnthropicProvider implements IProviderAdapter {
323
+ id: string;
324
+ name: string;
325
+ displayName: string;
326
+ defaultModel: string;
327
+ baseUrl: string;
328
+ private cachedModels;
329
+ isConfigured(): boolean;
330
+ getApiKey(): string | null;
331
+ getMaskedKey(): string;
332
+ getCapabilities(modelId: string): ModelCapabilities;
333
+ testConnection(): Promise<ProviderTestResult>;
334
+ listModels(refresh?: boolean): Promise<ProviderModelInfo[]>;
335
+ streamGenerate(params: ProviderStreamParams): Promise<ProviderStreamResult>;
336
+ private convertHistoryToMessages;
337
+ private convertTools;
338
+ private readSSEStream;
339
+ }
340
+
341
+ declare class OpenRouterProvider extends OpenAIProvider {
168
342
  constructor();
343
+ getCapabilities(modelId: string): ModelCapabilities;
344
+ listModels(refresh?: boolean): Promise<ProviderModelInfo[]>;
345
+ }
346
+
347
+ declare function createLinkedAbortController(parentSignal?: AbortSignal, timeoutMs?: number): {
348
+ controller: AbortController;
349
+ cleanup: () => void;
350
+ };
351
+ declare function wrapStreamWithFirstTokenTimeout<T>(stream: AsyncIterable<T>, firstTokenTimeoutMs: number, provider: string, model: string, signal?: AbortSignal, onFirstToken?: (latencyMs: number) => void): AsyncGenerator<T, void, unknown>;
352
+
353
+ declare class TimeoutError extends Error {
354
+ timeoutMs: number;
355
+ constructor(timeoutMs: number, operation?: string);
356
+ }
357
+ declare class FirstTokenTimeoutError extends Error {
358
+ timeoutMs: number;
359
+ provider: string;
360
+ model: string;
361
+ constructor(timeoutMs: number, provider: string, model: string);
362
+ }
363
+ declare class CancelledError extends Error {
364
+ constructor(message?: string);
365
+ }
366
+ declare class MissingApiKeyError extends Error {
367
+ provider: string;
368
+ constructor(provider?: string, envVar?: string);
169
369
  }
170
370
  declare class RateLimitError extends Error {
171
371
  constructor(message?: string);
172
372
  }
173
- declare class GeminiProviderError extends Error {
373
+ declare class AuthenticationError extends Error {
374
+ constructor(message?: string);
375
+ }
376
+ declare class ModelNotFoundError extends Error {
377
+ constructor(model: string, provider: string);
378
+ }
379
+ declare class LanternProviderError extends Error {
174
380
  statusCode?: number;
175
- constructor(message: string, statusCode?: number);
381
+ provider?: string;
382
+ constructor(message: string, statusCode?: number, provider?: string);
176
383
  }
177
384
  declare function formatErrorMessage(err: unknown): string;
178
385
 
@@ -197,6 +404,21 @@ interface CommandValidationResult {
197
404
  }
198
405
  declare function validateCommand(command: string): CommandValidationResult;
199
406
 
407
+ declare function encryptSecret(plainText: string): string;
408
+ declare function decryptSecret(encryptedPayload: string): string | null;
409
+ declare function maskApiKey(key: string): string;
410
+ declare function getApiKey(provider: string): {
411
+ key: string | null;
412
+ source?: 'env' | 'store';
413
+ };
414
+ declare function setApiKey(provider: string, apiKey: string): void;
415
+ declare function removeApiKey(provider: string): boolean;
416
+ declare function listConfiguredKeys(): Record<string, {
417
+ configured: boolean;
418
+ source?: 'env' | 'store';
419
+ maskedKey: string;
420
+ }>;
421
+
200
422
  declare class ApprovalEngine {
201
423
  private yolo;
202
424
  private planMode;
@@ -233,6 +455,42 @@ declare function exportSessionMarkdown(session: OrbitSession): string;
233
455
  declare function shouldCompact(turns: ConversationTurn[], threshold?: number): boolean;
234
456
  declare function compactTurns(turns: ConversationTurn[], retainRecentCount?: number): ConversationTurn[];
235
457
 
458
+ declare class SkillManager {
459
+ private userSkillsDir;
460
+ constructor();
461
+ getUserSkillsDir(): string;
462
+ getProjectSkillsDirs(workspace: string): string[];
463
+ /**
464
+ * Discovers all available skills from user-level and project-level directories
465
+ */
466
+ listSkills(workspace?: string): Skill[];
467
+ private scanDirectoryForSkills;
468
+ parseSkillMd(rawContent: string, defaultName: string): {
469
+ name: string;
470
+ description: string;
471
+ content: string;
472
+ };
473
+ getSkill(name: string, workspace?: string): Skill | null;
474
+ enableSkill(name: string): boolean;
475
+ disableSkill(name: string): boolean;
476
+ addSkillFromPath(sourcePath: string): {
477
+ success: boolean;
478
+ skillName?: string;
479
+ error?: string;
480
+ };
481
+ addSkillFromGit(repoUrl: string): {
482
+ success: boolean;
483
+ skillName?: string;
484
+ error?: string;
485
+ };
486
+ removeSkill(name: string): boolean;
487
+ /**
488
+ * Matches prompt against available skills by keyword and intent.
489
+ * Transparent and non-intrusive.
490
+ */
491
+ matchSkillsForPrompt(userPrompt: string, workspace?: string): Skill[];
492
+ }
493
+
236
494
  interface OrbitTool {
237
495
  definition: ToolDefinition;
238
496
  execute: (args: Record<string, any>, context: ToolExecutionContext) => Promise<ToolExecutionResult>;
@@ -264,21 +522,25 @@ declare function addMcpServer(name: string, config: McpServerConfig): void;
264
522
  declare function removeMcpServer(name: string): boolean;
265
523
  declare function toggleMcpServer(name: string, disabled: boolean): boolean;
266
524
 
267
- declare class OrbitAgent {
268
- private provider;
525
+ declare class LanternAgent {
526
+ private providerRegistry;
269
527
  private tools;
270
528
  private mcpManager;
529
+ private skillManager;
271
530
  private approvalEngine;
272
531
  private spinner;
273
- constructor(apiKey?: string);
532
+ constructor();
533
+ getProviderRegistry(): ProviderRegistry;
534
+ getSkillManager(): SkillManager;
274
535
  initMcp(): Promise<void>;
275
536
  shutdown(): Promise<void>;
276
- buildSystemPrompt(workspace: string, planMode?: boolean): string;
537
+ buildSystemPrompt(workspace: string, planMode?: boolean, activeSkills?: Skill[]): string;
277
538
  runTurn(session: OrbitSession, userPrompt: string, context: AgentContext, attachments?: FileAttachment[]): Promise<{
278
539
  reply: string;
279
540
  toolCount: number;
280
541
  usage: TokenUsage;
542
+ timing: TimingDiagnostics;
281
543
  }>;
282
544
  }
283
545
 
284
- export { ALLOWED_CONFIG_KEYS, type AgentContext, type ApprovalDecision, ApprovalEngine, type ApprovalRequest, type CommandValidationResult, type ConfigKey, type ConversationTurn, DEFAULT_CONFIG, type FileAttachment, GeminiProvider, GeminiProviderError, McpManager, type McpServerConfig, MissingApiKeyError, type ModelRole, OrbitAgent, type OrbitConfig, type OrbitSession, type OrbitTool, type PathValidationResult, type ProjectInstructions, RateLimitError, type StreamCallbacks, type TokenUsage, type ToolCallItem, type ToolDefinition, type ToolExecutionContext, type ToolExecutionResult, ToolRegistry, type ToolResultItem, addMcpServer, compactTurns, createNewSession, deleteSession, exportSessionMarkdown, formatErrorMessage, formatNewFilePreview, formatTerminalDiff, generateSessionId, getConfigFilePath, getConfigValue, getLanternHomeDir, getMcpConfigPath, getSessionsDir, isSecretFile, listSessions, loadAttachment, loadAttachments, loadConfig, loadMcpConfig, loadProjectInstructions, loadSession, removeMcpServer, sanitizeSecrets, saveConfig, saveMcpConfig, saveSession, setConfigValue, shouldCompact, toggleMcpServer, validateCommand, validateConfigValue, validateWorkspacePath };
546
+ export { ALLOWED_CONFIG_KEYS, type AgentContext, AnthropicProvider, type ApprovalDecision, ApprovalEngine, type ApprovalRequest, AuthenticationError, CancelledError, type CommandValidationResult, type ConfigKey, type ConversationTurn, DEFAULT_CONFIG, type FileAttachment, FirstTokenTimeoutError, GeminiProvider, type IProviderAdapter, LanternAgent, LanternProviderError, McpManager, type McpServerConfig, MissingApiKeyError, type ModelCapabilities, ModelNotFoundError, type ModelRole, OpenAIProvider, OpenRouterProvider, LanternAgent as OrbitAgent, type OrbitConfig, type OrbitSession, type OrbitTool, type PathValidationResult, type ProjectInstructions, type ProviderConfig, type ProviderModelInfo, ProviderRegistry, type ProviderStreamParams, type ProviderStreamResult, type ProviderTestResult, type ProviderType, RateLimitError, type Skill, SkillManager, type StreamCallbacks, TimeoutError, type TimingDiagnostics, type TokenUsage, type ToolCallItem, type ToolDefinition, type ToolExecutionContext, type ToolExecutionResult, ToolRegistry, type ToolResultItem, addMcpServer, compactTurns, createLinkedAbortController, createNewSession, decryptSecret, deleteSession, encryptSecret, exportSessionMarkdown, formatErrorMessage, formatNewFilePreview, formatTerminalDiff, generateSessionId, getApiKey, getConfigFilePath, getConfigValue, getLanternHomeDir, getMcpConfigPath, getSessionsDir, isSecretFile, listConfiguredKeys, listSessions, loadAttachment, loadAttachments, loadConfig, loadMcpConfig, loadProjectInstructions, loadSession, maskApiKey, removeApiKey, removeMcpServer, sanitizeSecrets, saveConfig, saveMcpConfig, saveSession, setApiKey, setConfigValue, shouldCompact, toggleMcpServer, validateCommand, validateConfigValue, validateWorkspacePath, wrapStreamWithFirstTokenTimeout };
package/dist/index.js CHANGED
@@ -1,30 +1,45 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  ALLOWED_CONFIG_KEYS,
4
+ AnthropicProvider,
4
5
  ApprovalEngine,
6
+ AuthenticationError,
7
+ CancelledError,
5
8
  DEFAULT_CONFIG,
9
+ FirstTokenTimeoutError,
6
10
  GeminiProvider,
7
- GeminiProviderError,
11
+ LanternAgent,
12
+ LanternProviderError,
8
13
  McpManager,
9
14
  MissingApiKeyError,
10
- OrbitAgent,
15
+ ModelNotFoundError,
16
+ OpenAIProvider,
17
+ OpenRouterProvider,
18
+ ProviderRegistry,
11
19
  RateLimitError,
20
+ SkillManager,
21
+ TimeoutError,
12
22
  ToolRegistry,
13
23
  addMcpServer,
14
24
  compactTurns,
25
+ createLinkedAbortController,
15
26
  createNewSession,
27
+ decryptSecret,
16
28
  deleteSession,
29
+ encryptSecret,
17
30
  exportSessionMarkdown,
18
31
  formatErrorMessage,
19
32
  formatNewFilePreview,
20
33
  formatTerminalDiff,
21
34
  generateSessionId,
35
+ getApiKey,
22
36
  getConfigFilePath,
23
37
  getConfigValue,
24
38
  getLanternHomeDir,
25
39
  getMcpConfigPath,
26
40
  getSessionsDir,
27
41
  isSecretFile,
42
+ listConfiguredKeys,
28
43
  listSessions,
29
44
  loadAttachment,
30
45
  loadAttachments,
@@ -32,44 +47,64 @@ import {
32
47
  loadMcpConfig,
33
48
  loadProjectInstructions,
34
49
  loadSession,
50
+ maskApiKey,
51
+ removeApiKey,
35
52
  removeMcpServer,
36
53
  sanitizeSecrets,
37
54
  saveConfig,
38
55
  saveMcpConfig,
39
56
  saveSession,
57
+ setApiKey,
40
58
  setConfigValue,
41
59
  shouldCompact,
42
60
  toggleMcpServer,
43
61
  validateCommand,
44
62
  validateConfigValue,
45
- validateWorkspacePath
46
- } from "./chunk-Y3PEOLTZ.js";
63
+ validateWorkspacePath,
64
+ wrapStreamWithFirstTokenTimeout
65
+ } from "./chunk-PELESOCI.js";
47
66
  export {
48
67
  ALLOWED_CONFIG_KEYS,
68
+ AnthropicProvider,
49
69
  ApprovalEngine,
70
+ AuthenticationError,
71
+ CancelledError,
50
72
  DEFAULT_CONFIG,
73
+ FirstTokenTimeoutError,
51
74
  GeminiProvider,
52
- GeminiProviderError,
75
+ LanternAgent,
76
+ LanternProviderError,
53
77
  McpManager,
54
78
  MissingApiKeyError,
55
- OrbitAgent,
79
+ ModelNotFoundError,
80
+ OpenAIProvider,
81
+ OpenRouterProvider,
82
+ LanternAgent as OrbitAgent,
83
+ ProviderRegistry,
56
84
  RateLimitError,
85
+ SkillManager,
86
+ TimeoutError,
57
87
  ToolRegistry,
58
88
  addMcpServer,
59
89
  compactTurns,
90
+ createLinkedAbortController,
60
91
  createNewSession,
92
+ decryptSecret,
61
93
  deleteSession,
94
+ encryptSecret,
62
95
  exportSessionMarkdown,
63
96
  formatErrorMessage,
64
97
  formatNewFilePreview,
65
98
  formatTerminalDiff,
66
99
  generateSessionId,
100
+ getApiKey,
67
101
  getConfigFilePath,
68
102
  getConfigValue,
69
103
  getLanternHomeDir,
70
104
  getMcpConfigPath,
71
105
  getSessionsDir,
72
106
  isSecretFile,
107
+ listConfiguredKeys,
73
108
  listSessions,
74
109
  loadAttachment,
75
110
  loadAttachments,
@@ -77,16 +112,20 @@ export {
77
112
  loadMcpConfig,
78
113
  loadProjectInstructions,
79
114
  loadSession,
115
+ maskApiKey,
116
+ removeApiKey,
80
117
  removeMcpServer,
81
118
  sanitizeSecrets,
82
119
  saveConfig,
83
120
  saveMcpConfig,
84
121
  saveSession,
122
+ setApiKey,
85
123
  setConfigValue,
86
124
  shouldCompact,
87
125
  toggleMcpServer,
88
126
  validateCommand,
89
127
  validateConfigValue,
90
- validateWorkspacePath
128
+ validateWorkspacePath,
129
+ wrapStreamWithFirstTokenTimeout
91
130
  };
92
131
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "codelantern-agent-cli",
3
- "version": "1.0.0",
4
- "description": "Code Lantern CLI - Personal AI coding assistant for the terminal powered by Google Gemini",
3
+ "version": "1.0.1",
4
+ "description": "Code Lantern CLI - Personal AI coding assistant for the terminal with multi-provider and skills support",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "lantern": "./dist/cli.js"