@smilique/said 1.0.2 → 1.0.3

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.d.ts CHANGED
@@ -1,8 +1,11 @@
1
+ export type ProviderType = 'openai' | 'anthropic' | 'ollama' | 'opencode' | 'minimax' | 'kimi' | 'zai' | 'openrouter' | 'google';
1
2
  export interface AppConfig {
2
3
  telegram?: {
3
4
  botToken: string;
4
5
  };
5
- provider: 'opencode' | 'minimax';
6
+ provider: ProviderType;
7
+ apiKey: string;
8
+ model: string;
6
9
  opencode?: {
7
10
  baseUrl: string;
8
11
  apiKey: string;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE;QACT,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,QAAQ,EAAE,UAAU,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,EAAE;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF;;;;;;OAMG;IACH,UAAU,CAAC,EAAE;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,OAAO,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAID,wBAAgB,UAAU,IAAI,SAAS,CAsDtC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyClD;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,YAAY,GACpB,QAAQ,GACR,WAAW,GACX,QAAQ,GACR,UAAU,GACV,SAAS,GACT,MAAM,GACN,KAAK,GACL,YAAY,GACZ,QAAQ,CAAC;AAEb,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE;QACT,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IAEF,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IAEd,QAAQ,CAAC,EAAE;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF;;;;;;OAMG;IACH,UAAU,CAAC,EAAE;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,OAAO,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAID,wBAAgB,UAAU,IAAI,SAAS,CA4FtC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6ClD;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
package/dist/config.js CHANGED
@@ -16,26 +16,65 @@ export function loadConfig() {
16
16
  if (existsSync(envPath)) {
17
17
  loadEnv({ path: envPath });
18
18
  }
19
- const provider = process.env.SAID_PROVIDER || 'opencode';
19
+ // Migration: Check for old config format and convert if needed
20
+ let provider = process.env.SAID_PROVIDER || 'opencode';
21
+ let apiKey = process.env.SAID_API_KEY || '';
22
+ let model = process.env.SAID_MODEL || '';
23
+ // Check for old config format (provider: 'opencode'|'minimax' with separate configs)
24
+ const hasOldOpencodeConfig = process.env.OPENCODE_API_KEY;
25
+ const hasOldMinimaxConfig = process.env.MINIMAX_API_KEY;
26
+ const hasNewConfig = process.env.SAID_API_KEY;
27
+ // If old config exists and no new config, migrate to new format
28
+ if (!hasNewConfig) {
29
+ if (hasOldOpencodeConfig && !hasOldMinimaxConfig) {
30
+ // Migrate from opencode to new format
31
+ provider = 'opencode';
32
+ apiKey = process.env.OPENCODE_API_KEY || '';
33
+ model = process.env.OPENCODE_MODEL || 'minimax-m2.5-free';
34
+ }
35
+ else if (hasOldMinimaxConfig && !hasOldOpencodeConfig) {
36
+ // Migrate from minimax to new format
37
+ provider = 'minimax';
38
+ apiKey = process.env.MINIMAX_API_KEY || '';
39
+ model = process.env.MINIMAX_MODEL || 'MiniMax-Text-01';
40
+ }
41
+ else if (hasOldOpencodeConfig && hasOldMinimaxConfig) {
42
+ // Both exist - prefer the provider that was explicitly set
43
+ const explicitProvider = process.env.SAID_PROVIDER;
44
+ if (explicitProvider === 'minimax') {
45
+ provider = 'minimax';
46
+ apiKey = process.env.MINIMAX_API_KEY || '';
47
+ model = process.env.MINIMAX_MODEL || 'MiniMax-Text-01';
48
+ }
49
+ else {
50
+ provider = 'opencode';
51
+ apiKey = process.env.OPENCODE_API_KEY || '';
52
+ model = process.env.OPENCODE_MODEL || 'minimax-m2.5-free';
53
+ }
54
+ }
55
+ }
20
56
  const config = {
21
57
  provider,
58
+ apiKey,
59
+ model,
22
60
  };
23
- if (process.env.TELEGRAM_BOT_TOKEN) {
24
- config.telegram = {
25
- botToken: process.env.TELEGRAM_BOT_TOKEN,
26
- };
27
- }
61
+ // Also populate legacy configs for backward compatibility
28
62
  if (provider === 'opencode') {
29
63
  config.opencode = {
30
64
  baseUrl: process.env.OPENCODE_BASE_URL || 'https://opencode.ai/zen/v1',
31
- apiKey: process.env.OPENCODE_API_KEY || '',
32
- model: process.env.OPENCODE_MODEL || 'minimax-m2.5-free',
65
+ apiKey: apiKey,
66
+ model: model,
33
67
  };
34
68
  }
35
69
  else if (provider === 'minimax') {
36
70
  config.minimax = {
37
- apiKey: process.env.MINIMAX_API_KEY || '',
38
- model: process.env.MINIMAX_MODEL || '',
71
+ apiKey: apiKey,
72
+ model: model,
73
+ };
74
+ }
75
+ if (process.env.TELEGRAM_BOT_TOKEN) {
76
+ config.telegram = {
77
+ botToken: process.env.TELEGRAM_BOT_TOKEN,
39
78
  };
40
79
  }
41
80
  // Auto-update enabled by default (unless explicitly disabled)
@@ -66,7 +105,11 @@ export function saveConfig(config) {
66
105
  lines.push(`SAID_AUTO_UPDATE_AUTO_RESTART=${config.autoUpdate.autoRestart}`);
67
106
  lines.push(`SAID_AUTO_UPDATE_PACKAGE=${config.autoUpdate.packageName}`);
68
107
  }
108
+ // New unified provider config
69
109
  lines.push(`SAID_PROVIDER=${config.provider}`);
110
+ lines.push(`SAID_API_KEY=${config.apiKey}`);
111
+ lines.push(`SAID_MODEL=${config.model}`);
112
+ // Also save legacy configs
70
113
  if (config.provider === 'opencode' && config.opencode) {
71
114
  lines.push(`OPENCODE_BASE_URL=${config.opencode.baseUrl}`);
72
115
  lines.push(`OPENCODE_API_KEY=${config.opencode.apiKey}`);
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,9 @@
1
- export { Service, type ServiceConfig } from './service.js';
2
- export { loadConfig, saveConfig, clearConfigCache, type AppConfig } from './config.js';
1
+ export { Service, type ServiceConfig } from '@said/core/service.js';
2
+ export { loadConfig, saveConfig, clearConfigCache } from './config.js';
3
+ export type { AppConfig, ProviderType } from './config.js';
3
4
  export { Application, app } from './app.js';
5
+ export { Provider, type ProviderConfig } from './provider.js';
6
+ export type { ChatMessage, ChatCompletionOptions, TokenUsage, LLMProvider, } from './provider.js';
7
+ export { PROVIDERS, getProviderList, fetchModels, type ProviderDefinition, type ModelInfo, type ProviderConfig as ProviderRegistryConfig } from './providers/index.js';
8
+ export type { ProviderType as RegistryProviderType } from './providers/index.js';
4
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACvE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAG5C,OAAO,EAAE,QAAQ,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAC9D,YAAY,EACV,WAAW,EACX,qBAAqB,EACrB,UAAU,EACV,WAAW,GACZ,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,KAAK,SAAS,EAAE,KAAK,cAAc,IAAI,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACvK,YAAY,EAAE,YAAY,IAAI,oBAAoB,EAAE,MAAM,sBAAsB,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,8 @@
1
- export { Service } from './service.js';
1
+ export { Service } from '@said/core/service.js';
2
2
  export { loadConfig, saveConfig, clearConfigCache } from './config.js';
3
3
  export { Application, app } from './app.js';
4
+ // Provider exports
5
+ export { Provider } from './provider.js';
6
+ // Provider registry exports
7
+ export { PROVIDERS, getProviderList, fetchModels } from './providers/index.js';
4
8
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAsB,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAkB,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAsB,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEvE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE5C,mBAAmB;AACnB,OAAO,EAAE,QAAQ,EAAuB,MAAM,eAAe,CAAC;AAQ9D,4BAA4B;AAC5B,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAA0F,MAAM,sBAAsB,CAAC"}
package/dist/main.js CHANGED
@@ -2,8 +2,7 @@
2
2
  import { Application } from './app.js';
3
3
  import { loadConfig } from './config.js';
4
4
  import { TelegramAdapter } from './telegram-adapter.js';
5
- import { OpenCodeProvider } from './opencode-provider.js';
6
- import { MiniMaxProvider } from './minimax-provider.js';
5
+ import { Provider } from './provider.js';
7
6
  import { Agent } from './agent.js';
8
7
  import { FileEditSkill } from './skills/file-edit-skill.js';
9
8
  import { WebSurfSkill } from './skills/web-surf-skill.js';
@@ -24,27 +23,12 @@ async function main() {
24
23
  // Create provider based on config (may be null if not configured)
25
24
  let provider = null;
26
25
  let providerError = null;
27
- if (config.provider === 'opencode') {
28
- if (!config.opencode?.apiKey) {
29
- providerError = 'OpenCode API key not configured. Please run "npm run setup" first.';
30
- console.warn(`Warning: ${providerError}`);
31
- }
32
- else {
33
- provider = new OpenCodeProvider({ name: 'opencode-provider', ...config.opencode }, eventEmitter);
34
- }
35
- }
36
- else if (config.provider === 'minimax') {
37
- if (!config.minimax?.apiKey) {
38
- providerError = 'MiniMax API key not configured. Please run "npm run setup" first.';
39
- console.warn(`Warning: ${providerError}`);
40
- }
41
- else {
42
- provider = new MiniMaxProvider({ name: 'minimax-provider', ...config.minimax }, eventEmitter);
43
- }
26
+ if (!config.apiKey) {
27
+ providerError = `${config.provider} API key not configured. Please run "npm run setup" first.`;
28
+ console.warn(`Warning: ${providerError}`);
44
29
  }
45
30
  else {
46
- providerError = `Unknown provider: ${config.provider}`;
47
- console.warn(`Warning: ${providerError}`);
31
+ provider = new Provider({ name: 'provider', provider: config.provider, apiKey: config.apiKey, model: config.model }, eventEmitter);
48
32
  }
49
33
  // Create agent
50
34
  const agent = new Agent({ name: 'agent' }, eventEmitter);
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import { Service, type ServiceConfig } from '@said/core/service.js';
2
+ import { EventEmitter } from 'eventemitter3';
3
+ import { type ProviderType } from './providers/index.js';
4
+ export interface ChatMessage {
5
+ role: 'system' | 'user' | 'assistant';
6
+ content: string;
7
+ }
8
+ export interface ChatCompletionOptions {
9
+ messages: ChatMessage[];
10
+ model?: string;
11
+ temperature?: number;
12
+ maxTokens?: number;
13
+ stream?: boolean;
14
+ }
15
+ export interface TokenUsage {
16
+ promptTokens: number;
17
+ completionTokens: number;
18
+ totalTokens: number;
19
+ }
20
+ export interface LLMProvider {
21
+ chatCompletion(options: ChatCompletionOptions): Promise<string>;
22
+ chatCompletionStream(options: ChatCompletionOptions): AsyncIterable<string>;
23
+ getLastTokenUsage(): TokenUsage;
24
+ }
25
+ export interface ProviderConfig extends ServiceConfig {
26
+ provider: ProviderType;
27
+ apiKey: string;
28
+ model: string;
29
+ }
30
+ /**
31
+ * Unified LLM Provider that supports multiple backends:
32
+ * - OpenAI-compatible APIs (OpenAI, OpenCode, Ollama, Kimi, Z.ai, OpenRouter)
33
+ * - Anthropic (Claude)
34
+ * - Google AI (Gemini)
35
+ * - MiniMax (custom API)
36
+ */
37
+ export declare class Provider extends Service implements LLMProvider {
38
+ private client;
39
+ private apiKey;
40
+ private model;
41
+ private providerType;
42
+ private lastTokenUsage;
43
+ constructor(config: ProviderConfig, eventEmitter?: EventEmitter);
44
+ initialize(): Promise<void>;
45
+ start(): Promise<void>;
46
+ stop(): Promise<void>;
47
+ getLastTokenUsage(): TokenUsage;
48
+ /**
49
+ * Handle chat completion for OpenAI-compatible APIs
50
+ */
51
+ private handleOpenAICompletion;
52
+ /**
53
+ * Handle streaming chat completion for OpenAI-compatible APIs
54
+ */
55
+ private handleOpenAIStream;
56
+ /**
57
+ * Handle chat completion for MiniMax (custom API)
58
+ */
59
+ private handleMiniMaxCompletion;
60
+ /**
61
+ * Handle streaming chat completion for MiniMax (custom API)
62
+ */
63
+ private handleMiniMaxStream;
64
+ chatCompletion(options: ChatCompletionOptions): Promise<string>;
65
+ chatCompletionStream(options: ChatCompletionOptions): AsyncIterable<string>;
66
+ }
67
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAa,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAChE,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5E,iBAAiB,IAAI,UAAU,CAAC;CACjC;AAED,MAAM,WAAW,cAAe,SAAQ,aAAa;IACnD,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;GAMG;AACH,qBAAa,QAAS,SAAQ,OAAQ,YAAW,WAAW;IAC1D,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,cAAc,CAIpB;gBAEU,MAAM,EAAE,cAAc,EAAE,YAAY,CAAC,EAAE,YAAY;IAIzD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAiC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IActB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,iBAAiB,IAAI,UAAU;IAI/B;;OAEG;YACW,sBAAsB;IAwBpC;;OAEG;YACY,kBAAkB;IAqCjC;;OAEG;YACW,uBAAuB;IAiDrC;;OAEG;YACY,mBAAmB;IA4E5B,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC;IAe9D,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,aAAa,CAAC,MAAM,CAAC;CAcnF"}
@@ -0,0 +1,271 @@
1
+ import OpenAI from 'openai';
2
+ import { Service } from '@said/core/service.js';
3
+ import { loadConfig } from './config.js';
4
+ import { PROVIDERS } from './providers/index.js';
5
+ /**
6
+ * Unified LLM Provider that supports multiple backends:
7
+ * - OpenAI-compatible APIs (OpenAI, OpenCode, Ollama, Kimi, Z.ai, OpenRouter)
8
+ * - Anthropic (Claude)
9
+ * - Google AI (Gemini)
10
+ * - MiniMax (custom API)
11
+ */
12
+ export class Provider extends Service {
13
+ client = null;
14
+ apiKey = '';
15
+ model = 'gpt-4o';
16
+ providerType = 'openai';
17
+ lastTokenUsage = {
18
+ promptTokens: 0,
19
+ completionTokens: 0,
20
+ totalTokens: 0,
21
+ };
22
+ constructor(config, eventEmitter) {
23
+ super(config, eventEmitter);
24
+ }
25
+ async initialize() {
26
+ const config = loadConfig();
27
+ this.providerType = config.provider;
28
+ this.apiKey = config.apiKey;
29
+ this.model = config.model || 'gpt-4o';
30
+ const providerDef = PROVIDERS[this.providerType];
31
+ // Handle providers with custom APIs differently
32
+ if (this.providerType === 'anthropic') {
33
+ // Anthropic uses a different SDK approach
34
+ // For now, we'll use the OpenAI SDK with Anthropic's compatible endpoint
35
+ // This requires using the openai-partial-stream or similar workaround
36
+ console.log(`Provider initialized with type: ${this.providerType} (using custom handling)`);
37
+ }
38
+ else if (this.providerType === 'google') {
39
+ // Google AI uses a custom API structure
40
+ // We'll use OpenAI SDK with Google's compatible endpoint
41
+ console.log(`Provider initialized with type: ${this.providerType} (using custom handling)`);
42
+ }
43
+ else if (this.providerType === 'minimax') {
44
+ // MiniMax has a custom API format
45
+ // Use direct fetch for MiniMax since it has a different response format
46
+ console.log(`Provider initialized with type: ${this.providerType} (using custom handling)`);
47
+ }
48
+ else {
49
+ // OpenAI-compatible APIs
50
+ this.client = new OpenAI({
51
+ baseURL: providerDef.baseUrl,
52
+ apiKey: this.apiKey,
53
+ });
54
+ console.log(`Provider initialized with type: ${this.providerType}, model: ${this.model}`);
55
+ }
56
+ }
57
+ async start() {
58
+ // Test connection for OpenAI-compatible providers
59
+ if (this.client) {
60
+ try {
61
+ await this.client.models.list();
62
+ console.log('Provider connection verified');
63
+ }
64
+ catch (error) {
65
+ console.warn('Provider connection test failed:', error);
66
+ }
67
+ }
68
+ else {
69
+ console.log(`Provider started (${this.providerType})`);
70
+ }
71
+ }
72
+ async stop() {
73
+ console.log('Provider stopped');
74
+ }
75
+ getLastTokenUsage() {
76
+ return { ...this.lastTokenUsage };
77
+ }
78
+ /**
79
+ * Handle chat completion for OpenAI-compatible APIs
80
+ */
81
+ async handleOpenAICompletion(options) {
82
+ if (!this.client) {
83
+ throw new Error('Provider not initialized');
84
+ }
85
+ const response = await this.client.chat.completions.create({
86
+ model: options.model || this.model,
87
+ messages: options.messages,
88
+ temperature: options.temperature ?? 0.7,
89
+ max_tokens: options.maxTokens,
90
+ });
91
+ // Track token usage
92
+ if (response.usage) {
93
+ this.lastTokenUsage = {
94
+ promptTokens: response.usage.prompt_tokens || 0,
95
+ completionTokens: response.usage.completion_tokens || 0,
96
+ totalTokens: response.usage.total_tokens || 0,
97
+ };
98
+ }
99
+ return response.choices[0]?.message?.content || '';
100
+ }
101
+ /**
102
+ * Handle streaming chat completion for OpenAI-compatible APIs
103
+ */
104
+ async *handleOpenAIStream(options) {
105
+ if (!this.client) {
106
+ throw new Error('Provider not initialized');
107
+ }
108
+ const stream = await this.client.chat.completions.create({
109
+ model: options.model || this.model,
110
+ messages: options.messages,
111
+ temperature: options.temperature ?? 0.7,
112
+ max_tokens: options.maxTokens,
113
+ stream: true,
114
+ });
115
+ let totalCompletionTokens = 0;
116
+ for await (const chunk of stream) {
117
+ const content = chunk.choices[0]?.delta?.content || '';
118
+ if (content) {
119
+ yield content;
120
+ }
121
+ // Track usage from streaming chunks if available
122
+ if (chunk.usage) {
123
+ totalCompletionTokens += chunk.usage.completion_tokens || 0;
124
+ }
125
+ }
126
+ // Update token usage (prompt tokens would be 0 for streaming)
127
+ if (totalCompletionTokens > 0) {
128
+ this.lastTokenUsage = {
129
+ promptTokens: 0,
130
+ completionTokens: totalCompletionTokens,
131
+ totalTokens: totalCompletionTokens,
132
+ };
133
+ }
134
+ }
135
+ /**
136
+ * Handle chat completion for MiniMax (custom API)
137
+ */
138
+ async handleMiniMaxCompletion(options) {
139
+ const providerDef = PROVIDERS.minimax;
140
+ const request = {
141
+ model: options.model || this.model,
142
+ messages: options.messages,
143
+ temperature: options.temperature ?? 0.7,
144
+ max_tokens: options.maxTokens,
145
+ };
146
+ const response = await fetch(`${providerDef.baseUrl}/text/chatcompletion`, {
147
+ method: 'POST',
148
+ headers: {
149
+ 'Content-Type': 'application/json',
150
+ 'Authorization': `Bearer ${this.apiKey}`,
151
+ },
152
+ body: JSON.stringify(request),
153
+ });
154
+ if (!response.ok) {
155
+ const error = await response.text();
156
+ throw new Error(`MiniMax API error: ${response.status} - ${error}`);
157
+ }
158
+ const data = await response.json();
159
+ // Track token usage
160
+ if (data.usage) {
161
+ this.lastTokenUsage = {
162
+ promptTokens: data.usage.prompt_tokens || 0,
163
+ completionTokens: data.usage.completion_tokens || 0,
164
+ totalTokens: data.usage.total_tokens || 0,
165
+ };
166
+ }
167
+ return data.choices[0]?.message?.content || '';
168
+ }
169
+ /**
170
+ * Handle streaming chat completion for MiniMax (custom API)
171
+ */
172
+ async *handleMiniMaxStream(options) {
173
+ const providerDef = PROVIDERS.minimax;
174
+ const request = {
175
+ model: options.model || this.model,
176
+ messages: options.messages,
177
+ temperature: options.temperature ?? 0.7,
178
+ max_tokens: options.maxTokens,
179
+ stream: true,
180
+ };
181
+ const response = await fetch(`${providerDef.baseUrl}/text/chatcompletion`, {
182
+ method: 'POST',
183
+ headers: {
184
+ 'Content-Type': 'application/json',
185
+ 'Authorization': `Bearer ${this.apiKey}`,
186
+ },
187
+ body: JSON.stringify(request),
188
+ });
189
+ if (!response.ok) {
190
+ const error = await response.text();
191
+ throw new Error(`MiniMax API error: ${response.status} - ${error}`);
192
+ }
193
+ if (!response.body) {
194
+ throw new Error('No response body');
195
+ }
196
+ const decoder = new TextDecoder();
197
+ const reader = response.body.getReader();
198
+ let totalCompletionTokens = 0;
199
+ try {
200
+ while (true) {
201
+ const { done, value } = await reader.read();
202
+ if (done)
203
+ break;
204
+ const chunk = decoder.decode(value);
205
+ const lines = chunk.split('\n').filter(line => line.trim() !== '');
206
+ for (const line of lines) {
207
+ if (line.startsWith('data: ')) {
208
+ const data = line.slice(6);
209
+ if (data === '[DONE]') {
210
+ // Update token usage
211
+ if (totalCompletionTokens > 0) {
212
+ this.lastTokenUsage = {
213
+ promptTokens: 0,
214
+ completionTokens: totalCompletionTokens,
215
+ totalTokens: totalCompletionTokens,
216
+ };
217
+ }
218
+ return;
219
+ }
220
+ try {
221
+ const parsed = JSON.parse(data);
222
+ const content = parsed.choices?.[0]?.delta?.content || '';
223
+ if (content) {
224
+ yield content;
225
+ }
226
+ // Track completion tokens from streaming
227
+ if (parsed.usage?.completion_tokens) {
228
+ totalCompletionTokens += parsed.usage.completion_tokens;
229
+ }
230
+ }
231
+ catch {
232
+ // Skip invalid JSON
233
+ }
234
+ }
235
+ }
236
+ }
237
+ }
238
+ finally {
239
+ reader.releaseLock();
240
+ }
241
+ }
242
+ async chatCompletion(options) {
243
+ // Route to appropriate handler based on provider type
244
+ switch (this.providerType) {
245
+ case 'minimax':
246
+ return this.handleMiniMaxCompletion(options);
247
+ case 'anthropic':
248
+ case 'google':
249
+ // For now, throw an error for unsupported custom API providers
250
+ throw new Error(`${this.providerType} provider requires custom implementation`);
251
+ default:
252
+ // Use OpenAI SDK for OpenAI-compatible APIs
253
+ return this.handleOpenAICompletion(options);
254
+ }
255
+ }
256
+ async *chatCompletionStream(options) {
257
+ // Route to appropriate handler based on provider type
258
+ switch (this.providerType) {
259
+ case 'minimax':
260
+ yield* this.handleMiniMaxStream(options);
261
+ break;
262
+ case 'anthropic':
263
+ case 'google':
264
+ // For now, throw an error for unsupported custom API providers
265
+ throw new Error(`${this.providerType} provider requires custom implementation`);
266
+ default:
267
+ yield* this.handleOpenAIStream(options);
268
+ }
269
+ }
270
+ }
271
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { ProviderType, ModelInfo, ProviderDefinition, ProviderConfig } from './types.js';
2
+ export type { ProviderType, ModelInfo, ProviderDefinition, ProviderConfig };
3
+ export declare const PROVIDERS: Record<ProviderType, ProviderDefinition>;
4
+ export declare function fetchModels(provider: ProviderType, apiKey: string): Promise<ModelInfo[]>;
5
+ export declare function getProviderList(): Array<{
6
+ name: string;
7
+ value: ProviderType;
8
+ }>;
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG9F,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,kBAAkB,EAAE,cAAc,EAAE,CAAC;AAE5E,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,YAAY,EAAE,kBAAkB,CAuD9D,CAAC;AA+DF,wBAAsB,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAkD9F;AAED,wBAAgB,eAAe,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,CAAC,CAK9E"}
@@ -0,0 +1,172 @@
1
+ import OpenAI from 'openai';
2
+ export const PROVIDERS = {
3
+ openai: {
4
+ id: 'openai',
5
+ name: 'OpenAI',
6
+ baseUrl: 'https://api.openai.com/v1',
7
+ apiType: 'openai',
8
+ },
9
+ anthropic: {
10
+ id: 'anthropic',
11
+ name: 'Anthropic',
12
+ baseUrl: 'https://api.anthropic.com',
13
+ apiType: 'anthropic',
14
+ },
15
+ ollama: {
16
+ id: 'ollama',
17
+ name: 'Ollama',
18
+ baseUrl: 'http://localhost:11434/v1',
19
+ apiType: 'openai',
20
+ },
21
+ opencode: {
22
+ id: 'opencode',
23
+ name: 'OpenCode',
24
+ baseUrl: 'https://opencode.ai/zen/v1',
25
+ apiType: 'openai',
26
+ },
27
+ minimax: {
28
+ id: 'minimax',
29
+ name: 'MiniMax',
30
+ baseUrl: 'https://api.minimax.chat/v1',
31
+ apiType: 'custom',
32
+ },
33
+ kimi: {
34
+ id: 'kimi',
35
+ name: 'Kimi (Moonshot)',
36
+ baseUrl: 'https://api.moonshot.ai/v1',
37
+ apiType: 'openai',
38
+ },
39
+ zai: {
40
+ id: 'zai',
41
+ name: 'Z.ai',
42
+ baseUrl: 'https://z.ai/v1',
43
+ apiType: 'openai',
44
+ },
45
+ openrouter: {
46
+ id: 'openrouter',
47
+ name: 'OpenRouter',
48
+ baseUrl: 'https://openrouter.ai/api/v1',
49
+ apiType: 'openai',
50
+ },
51
+ google: {
52
+ id: 'google',
53
+ name: 'Google AI',
54
+ baseUrl: 'https://generativelanguage.googleapis.com/v1',
55
+ apiType: 'custom',
56
+ },
57
+ };
58
+ /**
59
+ * Fallback models for providers that don't support model listing
60
+ * or require special handling
61
+ */
62
+ const FALLBACK_MODELS = {
63
+ anthropic: [
64
+ { id: 'claude-3-5-sonnet-20241022', name: 'Claude 3.5 Sonnet' },
65
+ { id: 'claude-3-5-sonnet-20240620', name: 'Claude 3.5 Sonnet (June)' },
66
+ { id: 'claude-3-opus-20240229', name: 'Claude 3 Opus' },
67
+ { id: 'claude-3-sonnet-20240229', name: 'Claude 3 Sonnet' },
68
+ { id: 'claude-3-haiku-20240307', name: 'Claude 3 Haiku' },
69
+ ],
70
+ google: [
71
+ { id: 'gemini-1.5-pro', name: 'Gemini 1.5 Pro' },
72
+ { id: 'gemini-1.5-flash', name: 'Gemini 1.5 Flash' },
73
+ { id: 'gemini-1.5-flash-8b', name: 'Gemini 1.5 Flash 8B' },
74
+ { id: 'gemini-pro', name: 'Gemini Pro' },
75
+ ],
76
+ minimax: [
77
+ { id: 'MiniMax-Text-01', name: 'MiniMax Text 01' },
78
+ { id: 'abab6.5s-chat', name: 'Abab 6.5s Chat' },
79
+ { id: 'abab6.5g-chat', name: 'Abab 6.5g Chat' },
80
+ ],
81
+ kimi: [
82
+ { id: 'kimi-k2', name: 'Kimi K2' },
83
+ { id: 'kimi-k2-preview', name: 'Kimi K2 Preview' },
84
+ { id: 'moonshot-v1-8k', name: 'Moonshot V1 8K' },
85
+ { id: 'moonshot-v1-32k', name: 'Moonshot V1 32K' },
86
+ { id: 'moonshot-v1-128k', name: 'Moonshot V1 128K' },
87
+ ],
88
+ zai: [
89
+ { id: 'zai-1', name: 'Z.ai 1' },
90
+ { id: 'zai-1-preview', name: 'Z.ai 1 Preview' },
91
+ ],
92
+ openrouter: [
93
+ { id: 'openai/gpt-4o', name: 'GPT-4O (via OpenRouter)' },
94
+ { id: 'openai/gpt-4o-mini', name: 'GPT-4O Mini (via OpenRouter)' },
95
+ { id: 'anthropic/claude-3.5-sonnet', name: 'Claude 3.5 Sonnet (via OpenRouter)' },
96
+ { id: 'google/gemini-pro-1.5', name: 'Gemini Pro 1.5 (via OpenRouter)' },
97
+ ],
98
+ ollama: [
99
+ { id: 'llama3.1', name: 'Llama 3.1' },
100
+ { id: 'llama3', name: 'Llama 3' },
101
+ { id: 'mistral', name: 'Mistral' },
102
+ { id: 'mixtral', name: 'Mixtral' },
103
+ { id: 'codellama', name: 'CodeLlama' },
104
+ ],
105
+ opencode: [
106
+ { id: 'gpt-4o', name: 'GPT-4O' },
107
+ { id: 'gpt-4o-mini', name: 'GPT-4O Mini' },
108
+ { id: 'gpt-4-turbo', name: 'GPT-4 Turbo' },
109
+ ],
110
+ openai: [
111
+ { id: 'gpt-4o', name: 'GPT-4O' },
112
+ { id: 'gpt-4o-mini', name: 'GPT-4O Mini' },
113
+ { id: 'gpt-4-turbo', name: 'GPT-4 Turbo' },
114
+ { id: 'gpt-4', name: 'GPT-4' },
115
+ { id: 'gpt-3.5-turbo', name: 'GPT-3.5 Turbo' },
116
+ ],
117
+ };
118
+ export async function fetchModels(provider, apiKey) {
119
+ const definition = PROVIDERS[provider];
120
+ // Use OpenAI SDK for OpenAI-compatible APIs
121
+ if (definition.apiType === 'openai') {
122
+ try {
123
+ const client = new OpenAI({
124
+ baseURL: definition.baseUrl,
125
+ apiKey: apiKey,
126
+ });
127
+ const response = await client.models.list();
128
+ const models = response.data
129
+ .filter(model => model.id.includes('gpt') || model.id.includes('4o') || model.id.includes('3.5'))
130
+ .slice(0, 20)
131
+ .map(model => ({
132
+ id: model.id,
133
+ name: model.id,
134
+ }));
135
+ return models.length > 0 ? models : FALLBACK_MODELS[provider];
136
+ }
137
+ catch {
138
+ console.warn(`Failed to fetch models from ${provider}, using fallback models`);
139
+ return FALLBACK_MODELS[provider];
140
+ }
141
+ }
142
+ // Anthropic uses a different API structure
143
+ if (provider === 'anthropic') {
144
+ try {
145
+ // Anthropic doesn't have a public models list API, use fallback
146
+ return FALLBACK_MODELS[provider];
147
+ }
148
+ catch {
149
+ return FALLBACK_MODELS[provider];
150
+ }
151
+ }
152
+ // Google AI uses a custom API
153
+ if (provider === 'google') {
154
+ try {
155
+ // Google's Generative Language API requires different authentication
156
+ // For now, return fallback models
157
+ return FALLBACK_MODELS[provider];
158
+ }
159
+ catch {
160
+ return FALLBACK_MODELS[provider];
161
+ }
162
+ }
163
+ // For custom providers (MiniMax) and others, use fallback models
164
+ return FALLBACK_MODELS[provider];
165
+ }
166
+ export function getProviderList() {
167
+ return Object.values(PROVIDERS).map(provider => ({
168
+ name: provider.name,
169
+ value: provider.id,
170
+ }));
171
+ }
172
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export type ProviderType = 'openai' | 'anthropic' | 'ollama' | 'opencode' | 'minimax' | 'kimi' | 'zai' | 'openrouter' | 'google';
2
+ export interface ProviderDefinition {
3
+ id: ProviderType;
4
+ name: string;
5
+ baseUrl: string;
6
+ apiType: 'openai' | 'anthropic' | 'custom';
7
+ }
8
+ export interface ModelInfo {
9
+ id: string;
10
+ name: string;
11
+ }
12
+ export interface ProviderConfig {
13
+ type: ProviderType;
14
+ apiKey: string;
15
+ model: string;
16
+ }
17
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GACpB,QAAQ,GACR,WAAW,GACX,QAAQ,GACR,UAAU,GACV,SAAS,GACT,MAAM,GACN,KAAK,GACL,YAAY,GACZ,QAAQ,CAAC;AAEb,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,YAAY,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;CAC5C;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":""}
package/dist/setup.js CHANGED
@@ -3,14 +3,12 @@ import inquirer from 'inquirer';
3
3
  import { existsSync, writeFileSync } from 'fs';
4
4
  import { join } from 'path';
5
5
  import { loadConfig } from './config.js';
6
- async function validateTelegramToken(token) {
7
- // Basic validation - check format
8
- return /^\d+:[\w-]+$/.test(token);
9
- }
6
+ import { getProviderList, fetchModels, PROVIDERS } from './providers/index.js';
10
7
  async function runSetup() {
11
8
  console.log('\n=== sAId Setup ===\n');
12
9
  console.log('This will help you configure your Telegram bot and LLM provider.\n');
13
10
  const existingConfig = existsSync(join(process.cwd(), '.env')) ? loadConfig() : null;
11
+ // Step 1: Ask for Telegram Bot Token
14
12
  const answers = await inquirer.prompt([
15
13
  {
16
14
  type: 'input',
@@ -27,51 +25,65 @@ async function runSetup() {
27
25
  return true;
28
26
  },
29
27
  },
28
+ ]);
29
+ // Step 2: Ask for provider selection
30
+ const providerAnswers = await inquirer.prompt([
30
31
  {
31
32
  type: 'list',
32
33
  name: 'provider',
33
34
  message: 'Select LLM Provider:',
34
- choices: [
35
- { name: 'OpenCode (OpenAI-compatible)', value: 'opencode' },
36
- { name: 'MiniMax', value: 'minimax' },
37
- ],
35
+ choices: getProviderList(),
38
36
  default: existingConfig?.provider || 'opencode',
39
37
  },
40
- {
41
- type: 'input',
42
- name: 'opencodeBaseUrl',
43
- message: 'OpenCode API Base URL:',
44
- default: existingConfig?.opencode?.baseUrl || 'https://opencode.ai/v1',
45
- when: (answers) => answers.provider === 'opencode',
46
- },
47
- {
48
- type: 'password',
49
- name: 'opencodeApiKey',
50
- message: 'OpenCode API Key:',
51
- when: (answers) => answers.provider === 'opencode',
52
- default: existingConfig?.opencode?.apiKey || '',
53
- },
54
- {
55
- type: 'input',
56
- name: 'opencodeModel',
57
- message: 'OpenCode Model (optional):',
58
- default: existingConfig?.opencode?.model || 'gpt-4o',
59
- when: (answers) => answers.provider === 'opencode',
60
- },
38
+ ]);
39
+ answers.provider = providerAnswers.provider;
40
+ // Step 3: Ask for API Key (password input)
41
+ const apiKeyAnswer = await inquirer.prompt([
61
42
  {
62
43
  type: 'password',
63
- name: 'minimaxApiKey',
64
- message: 'MiniMax API Key:',
65
- when: (answers) => answers.provider === 'minimax',
66
- default: existingConfig?.minimax?.apiKey || '',
67
- },
68
- {
69
- type: 'input',
70
- name: 'minimaxModel',
71
- message: 'MiniMax Model (optional):',
72
- default: existingConfig?.minimax?.model || 'MiniMax-Text-01',
73
- when: (answers) => answers.provider === 'minimax',
44
+ name: 'apiKey',
45
+ message: `${PROVIDERS[answers.provider].name} API Key:`,
46
+ default: existingConfig?.apiKey || '',
47
+ mask: '*',
74
48
  },
49
+ ]);
50
+ answers.apiKey = apiKeyAnswer.apiKey;
51
+ // Step 4: Fetch available models
52
+ console.log('\nFetching available models...');
53
+ let models = [];
54
+ try {
55
+ models = await fetchModels(answers.provider, answers.apiKey);
56
+ console.log(`Found ${models.length} models.\n`);
57
+ }
58
+ catch (error) {
59
+ console.warn('Failed to fetch models from API, will ask for manual input.\n');
60
+ }
61
+ // Step 5 & 6: If models returned, show dropdown; otherwise ask manually
62
+ if (models.length > 0) {
63
+ const modelAnswer = await inquirer.prompt([
64
+ {
65
+ type: 'list',
66
+ name: 'model',
67
+ message: 'Select Model:',
68
+ choices: models.map(m => ({ name: m.name, value: m.id })),
69
+ default: existingConfig?.model || models[0]?.id || '',
70
+ },
71
+ ]);
72
+ answers.model = modelAnswer.model;
73
+ }
74
+ else {
75
+ const modelAnswer = await inquirer.prompt([
76
+ {
77
+ type: 'input',
78
+ name: 'model',
79
+ message: 'Enter Model name:',
80
+ default: existingConfig?.model || '',
81
+ },
82
+ ]);
83
+ answers.model = modelAnswer.model;
84
+ }
85
+ // Step 7: Ask for autolaunch options
86
+ const autolaunchAnswers = await inquirer.prompt([
75
87
  {
76
88
  type: 'confirm',
77
89
  name: 'enableAutolaunch',
@@ -83,27 +95,18 @@ async function runSetup() {
83
95
  name: 'systemdUser',
84
96
  message: 'Systemd service user (e.g., ubuntu):',
85
97
  default: 'ubuntu',
86
- when: (answers) => answers.enableAutolaunch,
98
+ when: (ans) => ans.enableAutolaunch,
87
99
  },
88
100
  ]);
89
- // Build config content
101
+ answers.enableAutolaunch = autolaunchAnswers.enableAutolaunch;
102
+ answers.systemdUser = autolaunchAnswers.systemdUser;
103
+ // Save unified config
90
104
  const lines = [
91
105
  `TELEGRAM_BOT_TOKEN=${answers.telegramBotToken}`,
92
106
  `SAID_PROVIDER=${answers.provider}`,
107
+ `SAID_API_KEY=${answers.apiKey}`,
108
+ `SAID_MODEL=${answers.model}`,
93
109
  ];
94
- if (answers.provider === 'opencode') {
95
- lines.push(`OPENCODE_BASE_URL=${answers.opencodeBaseUrl}`);
96
- lines.push(`OPENCODE_API_KEY=${answers.opencodeApiKey}`);
97
- if (answers.opencodeModel && answers.opencodeModel !== 'gpt-4o') {
98
- lines.push(`OPENCODE_MODEL=${answers.opencodeModel}`);
99
- }
100
- }
101
- else if (answers.provider === 'minimax') {
102
- lines.push(`MINIMAX_API_KEY=${answers.minimaxApiKey}`);
103
- if (answers.minimaxModel && answers.minimaxModel !== 'MiniMax-Text-01') {
104
- lines.push(`MINIMAX_MODEL=${answers.minimaxModel}`);
105
- }
106
- }
107
110
  // Save .env file
108
111
  const envPath = join(process.cwd(), '.env');
109
112
  writeFileSync(envPath, lines.join('\n') + '\n', 'utf-8');
package/dist/setup.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smilique/said",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "Autonomous AI agent with Telegram integration and extensible skills",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
package/README.md DELETED
@@ -1,132 +0,0 @@
1
- # sAId - Smart AI Assistant
2
-
3
- A modular AI agent with Telegram integration, Web UI, job scheduling, and extensible skills system.
4
-
5
- ## Features
6
-
7
- - **Telegram Bot** - Chat with the AI assistant via Telegram
8
- - **Multiple LLM Providers** - OpenCode (MiniMax, GPT, Claude, etc.) or MiniMax
9
- - **Web UI** - Manage and configure the agent via browser at http://localhost:3000
10
- - **Job Scheduler** - Schedule recurring tasks
11
- - **Skills System** - Extensible skills (file edit, web surf, API calls, tool calls)
12
-
13
- ## Installation
14
-
15
- ```bash
16
- # Clone and install dependencies
17
- npm install
18
-
19
- # Build all packages
20
- npm run build
21
- ```
22
-
23
- ## Configuration
24
-
25
- ### Quick Setup
26
-
27
- Run the interactive setup wizard:
28
-
29
- ```bash
30
- npm run setup
31
- ```
32
-
33
- This will prompt you for:
34
- - Telegram bot token (get from @BotFather on Telegram)
35
- - LLM provider selection (opencode or minimax)
36
- - API key for the selected provider
37
-
38
- ### Manual Configuration
39
-
40
- Edit the `.env` file:
41
-
42
- ```bash
43
- # Telegram Bot
44
- TELEGRAM_BOT_TOKEN=your_bot_token_here
45
-
46
- # Provider (opencode or minimax)
47
- SAID_PROVIDER=opencode
48
-
49
- # OpenCode Configuration
50
- OPENCODE_BASE_URL=https://opencode.ai/zen/v1
51
- OPENCODE_API_KEY=your_opencode_api_key
52
- OPENCODE_MODEL=minimax-m2.5-free
53
-
54
- # Or MiniMax Configuration
55
- # MINIMAX_API_KEY=your_minimax_api_key
56
- # MINIMAX_MODEL=MiniMax-Text-01
57
- ```
58
-
59
- ### Available Models
60
-
61
- **OpenCode** (via https://opencode.ai/zen/v1):
62
- - MiniMax: `minimax-m2.5-free`, `minimax-m2.5`, `minimax-m2.1-free`, `minimax-m2.1`
63
- - GPT: `gpt-5.3-codex`, `gpt-5.2`, `gpt-5.1`, etc.
64
- - Claude: `opus-4-6`, `sonnet-4-6`, `haiku-4-5`, etc.
65
- - Gemini: `gemini-3.1-pro`, `gemini-3-flash`
66
- - And more...
67
-
68
- ## Usage
69
-
70
- ### Start the Agent
71
-
72
- ```bash
73
- npm run start
74
- ```
75
-
76
- The bot will:
77
- - Connect to Telegram
78
- - Start the Web UI at http://localhost:3000
79
- - Initialize the scheduler
80
-
81
- ### Telegram Commands
82
-
83
- - Send a message to your bot to chat with the AI
84
- - The agent maintains conversation context
85
-
86
- ### Web UI
87
-
88
- Open http://localhost:3000 in your browser to:
89
- - View agent status
90
- - Manage configuration
91
- - View conversation history
92
- - Manage skills
93
- - Schedule jobs
94
-
95
- ### Skills
96
-
97
- The agent includes built-in skills:
98
-
99
- - **file-edit** - Read, write, and edit files
100
- - **web-surf** - Fetch URLs and extract content
101
- - **api-call** - Make HTTP requests to external APIs
102
- - **tool-call** - Execute custom tools
103
-
104
- Skills can be invoked using: `[[skill-name:action]]` syntax in messages.
105
-
106
- ## Development
107
-
108
- ```bash
109
- # Build all packages
110
- npm run build
111
-
112
- # Start in development mode
113
- npm run start
114
-
115
- # Run setup wizard
116
- npm run setup
117
- ```
118
-
119
- ## Architecture
120
-
121
- ```
122
- packages/
123
- ├── core/ # Base service, config, app framework
124
- ├── adapter-telegram/ # Telegram bot integration
125
- ├── provider-opencode/ # OpenCode LLM provider
126
- ├── provider-minimax/ # MiniMax LLM provider
127
- ├── agent/ # AI agent with skills support
128
- ├── skills/ # Skill framework and implementations
129
- ├── scheduler/ # Job scheduling service
130
- ├── web-ui/ # Web dashboard
131
- └── main/ # Application entry point
132
- ```