@emaxe/agento 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.
Files changed (111) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +304 -0
  3. package/dist/bin/agento.d.ts +3 -0
  4. package/dist/bin/agento.d.ts.map +1 -0
  5. package/dist/bin/agento.js +44 -0
  6. package/dist/bin/agento.js.map +1 -0
  7. package/dist/src/adapters/base.d.ts +38 -0
  8. package/dist/src/adapters/base.d.ts.map +1 -0
  9. package/dist/src/adapters/base.js +2 -0
  10. package/dist/src/adapters/base.js.map +1 -0
  11. package/dist/src/adapters/claude-code.d.ts +13 -0
  12. package/dist/src/adapters/claude-code.d.ts.map +1 -0
  13. package/dist/src/adapters/claude-code.js +70 -0
  14. package/dist/src/adapters/claude-code.js.map +1 -0
  15. package/dist/src/adapters/codex.d.ts +15 -0
  16. package/dist/src/adapters/codex.d.ts.map +1 -0
  17. package/dist/src/adapters/codex.js +148 -0
  18. package/dist/src/adapters/codex.js.map +1 -0
  19. package/dist/src/adapters/opencode.d.ts +13 -0
  20. package/dist/src/adapters/opencode.d.ts.map +1 -0
  21. package/dist/src/adapters/opencode.js +62 -0
  22. package/dist/src/adapters/opencode.js.map +1 -0
  23. package/dist/src/adapters/qwen.d.ts +13 -0
  24. package/dist/src/adapters/qwen.d.ts.map +1 -0
  25. package/dist/src/adapters/qwen.js +84 -0
  26. package/dist/src/adapters/qwen.js.map +1 -0
  27. package/dist/src/cli/commands/agent.d.ts +3 -0
  28. package/dist/src/cli/commands/agent.d.ts.map +1 -0
  29. package/dist/src/cli/commands/agent.js +42 -0
  30. package/dist/src/cli/commands/agent.js.map +1 -0
  31. package/dist/src/cli/commands/launch.d.ts +3 -0
  32. package/dist/src/cli/commands/launch.d.ts.map +1 -0
  33. package/dist/src/cli/commands/launch.js +80 -0
  34. package/dist/src/cli/commands/launch.js.map +1 -0
  35. package/dist/src/cli/commands/profile.d.ts +3 -0
  36. package/dist/src/cli/commands/profile.d.ts.map +1 -0
  37. package/dist/src/cli/commands/profile.js +102 -0
  38. package/dist/src/cli/commands/profile.js.map +1 -0
  39. package/dist/src/cli/commands/provider.d.ts +3 -0
  40. package/dist/src/cli/commands/provider.d.ts.map +1 -0
  41. package/dist/src/cli/commands/provider.js +70 -0
  42. package/dist/src/cli/commands/provider.js.map +1 -0
  43. package/dist/src/cli/commands/restore.d.ts +3 -0
  44. package/dist/src/cli/commands/restore.d.ts.map +1 -0
  45. package/dist/src/cli/commands/restore.js +41 -0
  46. package/dist/src/cli/commands/restore.js.map +1 -0
  47. package/dist/src/config/schema.d.ts +218 -0
  48. package/dist/src/config/schema.d.ts.map +1 -0
  49. package/dist/src/config/schema.js +49 -0
  50. package/dist/src/config/schema.js.map +1 -0
  51. package/dist/src/config/store.d.ts +20 -0
  52. package/dist/src/config/store.d.ts.map +1 -0
  53. package/dist/src/config/store.js +59 -0
  54. package/dist/src/config/store.js.map +1 -0
  55. package/dist/src/launcher/child.d.ts +30 -0
  56. package/dist/src/launcher/child.d.ts.map +1 -0
  57. package/dist/src/launcher/child.js +115 -0
  58. package/dist/src/launcher/child.js.map +1 -0
  59. package/dist/src/launcher/independent.d.ts +25 -0
  60. package/dist/src/launcher/independent.d.ts.map +1 -0
  61. package/dist/src/launcher/independent.js +26 -0
  62. package/dist/src/launcher/independent.js.map +1 -0
  63. package/dist/src/launcher/shell-path-resolver.d.ts +17 -0
  64. package/dist/src/launcher/shell-path-resolver.d.ts.map +1 -0
  65. package/dist/src/launcher/shell-path-resolver.js +97 -0
  66. package/dist/src/launcher/shell-path-resolver.js.map +1 -0
  67. package/dist/src/profiles/profile-manager.d.ts +17 -0
  68. package/dist/src/profiles/profile-manager.d.ts.map +1 -0
  69. package/dist/src/profiles/profile-manager.js +74 -0
  70. package/dist/src/profiles/profile-manager.js.map +1 -0
  71. package/dist/src/providers/provider-manager.d.ts +13 -0
  72. package/dist/src/providers/provider-manager.d.ts.map +1 -0
  73. package/dist/src/providers/provider-manager.js +42 -0
  74. package/dist/src/providers/provider-manager.js.map +1 -0
  75. package/dist/src/tui/App.d.ts +10 -0
  76. package/dist/src/tui/App.d.ts.map +1 -0
  77. package/dist/src/tui/App.js +43 -0
  78. package/dist/src/tui/App.js.map +1 -0
  79. package/dist/src/tui/screens/Agents.d.ts +8 -0
  80. package/dist/src/tui/screens/Agents.d.ts.map +1 -0
  81. package/dist/src/tui/screens/Agents.js +70 -0
  82. package/dist/src/tui/screens/Agents.js.map +1 -0
  83. package/dist/src/tui/screens/LaunchAgent.d.ts +10 -0
  84. package/dist/src/tui/screens/LaunchAgent.d.ts.map +1 -0
  85. package/dist/src/tui/screens/LaunchAgent.js +119 -0
  86. package/dist/src/tui/screens/LaunchAgent.js.map +1 -0
  87. package/dist/src/tui/screens/MainMenu.d.ts +9 -0
  88. package/dist/src/tui/screens/MainMenu.d.ts.map +1 -0
  89. package/dist/src/tui/screens/MainMenu.js +32 -0
  90. package/dist/src/tui/screens/MainMenu.js.map +1 -0
  91. package/dist/src/tui/screens/Profiles.d.ts +7 -0
  92. package/dist/src/tui/screens/Profiles.d.ts.map +1 -0
  93. package/dist/src/tui/screens/Profiles.js +528 -0
  94. package/dist/src/tui/screens/Profiles.js.map +1 -0
  95. package/dist/src/tui/screens/Providers.d.ts +7 -0
  96. package/dist/src/tui/screens/Providers.d.ts.map +1 -0
  97. package/dist/src/tui/screens/Providers.js +235 -0
  98. package/dist/src/tui/screens/Providers.js.map +1 -0
  99. package/dist/src/tui/screens/Settings.d.ts +7 -0
  100. package/dist/src/tui/screens/Settings.d.ts.map +1 -0
  101. package/dist/src/tui/screens/Settings.js +49 -0
  102. package/dist/src/tui/screens/Settings.js.map +1 -0
  103. package/dist/src/tui/start.d.ts +6 -0
  104. package/dist/src/tui/start.d.ts.map +1 -0
  105. package/dist/src/tui/start.js +15 -0
  106. package/dist/src/tui/start.js.map +1 -0
  107. package/dist/src/tui/use-key-input.d.ts +9 -0
  108. package/dist/src/tui/use-key-input.d.ts.map +1 -0
  109. package/dist/src/tui/use-key-input.js +19 -0
  110. package/dist/src/tui/use-key-input.js.map +1 -0
  111. package/package.json +82 -0
@@ -0,0 +1,148 @@
1
+ import { readFile, writeFile, mkdir } from 'node:fs/promises';
2
+ import { existsSync } from 'node:fs';
3
+ import { homedir } from 'node:os';
4
+ import { join, dirname } from 'node:path';
5
+ import { parse as parseToml, stringify as stringifyToml } from 'smol-toml';
6
+ /** Нормализует имя провайдера в ключ: "Fireworks AI" → "fireworks-ai" */
7
+ function deriveProviderKey(name) {
8
+ return name.toLowerCase().replace(/\s+/g, '-');
9
+ }
10
+ /** Генерирует имя env-переменной для ключа API: "fireworks-ai" → "CODEX_FIREWORKS_AI_API_KEY" */
11
+ function deriveEnvKey(providerKey) {
12
+ return `CODEX_${providerKey.toUpperCase().replace(/-/g, '_')}_API_KEY`;
13
+ }
14
+ /** Backup глобального конфига Codex при записи в project scope */
15
+ let codexGlobalBackup = null;
16
+ export class CodexAdapter {
17
+ id = 'codex';
18
+ displayName = 'Codex CLI';
19
+ dev = true;
20
+ configPaths(cwd) {
21
+ return {
22
+ global: join(homedir(), '.codex', 'config.toml'),
23
+ project: join(cwd ?? process.cwd(), '.codex', 'config.toml'),
24
+ };
25
+ }
26
+ async readConfig(scope, cwd) {
27
+ const path = this.configPaths(cwd)[scope];
28
+ if (!existsSync(path))
29
+ return null;
30
+ const raw = await readFile(path, 'utf-8');
31
+ return parseToml(raw);
32
+ }
33
+ buildConfig(profile, providers) {
34
+ const base = profile.models.find((m) => m.tier === 'base') ?? profile.models[0];
35
+ if (!base)
36
+ throw new Error(`Profile "${profile.name}" has no models`);
37
+ const provider = providers.find((p) => p.id === base.providerId);
38
+ if (!provider)
39
+ throw new Error(`Provider not found for id: ${base.providerId}`);
40
+ const providerKey = deriveProviderKey(provider.name);
41
+ const envKey = deriveEnvKey(providerKey);
42
+ return {
43
+ model: base.model,
44
+ model_providers: {
45
+ [providerKey]: {
46
+ name: provider.name,
47
+ base_url: provider.baseUrl ?? '',
48
+ env_key: envKey,
49
+ wire_api: 'responses',
50
+ },
51
+ },
52
+ default_profile: 'default',
53
+ profiles: {
54
+ default: {
55
+ model: base.model,
56
+ model_provider: providerKey,
57
+ },
58
+ },
59
+ };
60
+ }
61
+ buildEnv(profile, providers) {
62
+ const base = profile.models.find((m) => m.tier === 'base') ?? profile.models[0];
63
+ if (!base)
64
+ return {};
65
+ const provider = providers.find((p) => p.id === base.providerId);
66
+ if (!provider)
67
+ return {};
68
+ const providerKey = deriveProviderKey(provider.name);
69
+ const envKey = deriveEnvKey(providerKey);
70
+ return { [envKey]: provider.apiKey };
71
+ }
72
+ async writeConfig(config, scope, cwd) {
73
+ if (scope === 'project') {
74
+ const paths = this.configPaths(cwd);
75
+ const hasModelProviders = config.model_providers !== undefined &&
76
+ Object.keys(config.model_providers).length > 0;
77
+ // 1. Управляем глобальным конфигом (model_providers всегда в global)
78
+ if (hasModelProviders) {
79
+ // Новый конфиг — backup глобального конфига перед патчем
80
+ const globalPath = paths.global;
81
+ if (codexGlobalBackup === null) {
82
+ if (existsSync(globalPath)) {
83
+ const raw = await readFile(globalPath, 'utf-8');
84
+ codexGlobalBackup = { hadConfig: true, config: parseToml(raw) };
85
+ }
86
+ else {
87
+ codexGlobalBackup = { hadConfig: false, config: {} };
88
+ }
89
+ }
90
+ let globalConfig = {};
91
+ if (existsSync(globalPath)) {
92
+ const raw = await readFile(globalPath, 'utf-8');
93
+ globalConfig = parseToml(raw);
94
+ }
95
+ globalConfig.model_providers = config.model_providers;
96
+ globalConfig.default_profile = config.default_profile;
97
+ globalConfig.profiles = config.profiles;
98
+ await mkdir(dirname(globalPath), { recursive: true });
99
+ await writeFile(globalPath, stringifyToml(globalConfig), 'utf-8');
100
+ }
101
+ else if (codexGlobalBackup) {
102
+ // Restore — восстанавливаем глобальный конфиг
103
+ const globalPath = paths.global;
104
+ if (codexGlobalBackup.hadConfig) {
105
+ await mkdir(dirname(globalPath), { recursive: true });
106
+ await writeFile(globalPath, stringifyToml(codexGlobalBackup.config), 'utf-8');
107
+ }
108
+ else {
109
+ // Глобального конфига не было — убираем наши ключи из существующего
110
+ if (existsSync(globalPath)) {
111
+ const raw = await readFile(globalPath, 'utf-8');
112
+ const globalConfig = parseToml(raw);
113
+ delete globalConfig.model_providers;
114
+ delete globalConfig.default_profile;
115
+ delete globalConfig.profiles;
116
+ const remainingKeys = Object.keys(globalConfig);
117
+ if (remainingKeys.length === 0) {
118
+ // Файл пустой после удаления — удаляем его
119
+ const { unlink } = await import('node:fs/promises');
120
+ await unlink(globalPath);
121
+ }
122
+ else {
123
+ await writeFile(globalPath, stringifyToml(globalConfig), 'utf-8');
124
+ }
125
+ }
126
+ }
127
+ codexGlobalBackup = null;
128
+ }
129
+ // 2. Управляем project конфигом (model)
130
+ const projectPath = paths.project;
131
+ const projectConfig = {};
132
+ if (config.model) {
133
+ projectConfig.model = config.model;
134
+ }
135
+ await mkdir(dirname(projectPath), { recursive: true });
136
+ await writeFile(projectPath, stringifyToml(projectConfig), 'utf-8');
137
+ }
138
+ else {
139
+ // scope === 'global' — пишем всё в global config как раньше
140
+ const path = this.configPaths(cwd)[scope];
141
+ const dir = dirname(path);
142
+ await mkdir(dir, { recursive: true });
143
+ await writeFile(path, stringifyToml(config), 'utf-8');
144
+ }
145
+ }
146
+ }
147
+ export const codexAdapter = new CodexAdapter();
148
+ //# sourceMappingURL=codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/adapters/codex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { AgentAdapter, AgentConfig, AgentConfigPaths } from './base.js';
2
+ import type { LaunchScope } from './base.js';
3
+ import type { Profile, Provider } from '../config/schema.js';
4
+ export declare class OpenCodeAdapter implements AgentAdapter {
5
+ readonly id = "opencode";
6
+ readonly displayName = "OpenCode";
7
+ configPaths(cwd?: string): AgentConfigPaths;
8
+ readConfig(scope: LaunchScope, cwd?: string): Promise<AgentConfig | null>;
9
+ buildConfig(profile: Profile, providers: Provider[]): AgentConfig;
10
+ writeConfig(config: AgentConfig, scope: LaunchScope, cwd?: string): Promise<void>;
11
+ }
12
+ export declare const openCodeAdapter: OpenCodeAdapter;
13
+ //# sourceMappingURL=opencode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../../src/adapters/opencode.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE7D,qBAAa,eAAgB,YAAW,YAAY;IAClD,QAAQ,CAAC,EAAE,cAAc;IACzB,QAAQ,CAAC,WAAW,cAAc;IAElC,WAAW,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,gBAAgB;IAOrC,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAO/E,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,WAAW;IAiC3D,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAMxF;AAED,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { readFile, writeFile, mkdir } from 'node:fs/promises';
2
+ import { existsSync } from 'node:fs';
3
+ import { homedir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ export class OpenCodeAdapter {
6
+ id = 'opencode';
7
+ displayName = 'OpenCode';
8
+ configPaths(cwd) {
9
+ return {
10
+ global: join(homedir(), '.config', 'opencode', 'config.json'),
11
+ project: join(cwd ?? process.cwd(), 'opencode.json'),
12
+ };
13
+ }
14
+ async readConfig(scope, cwd) {
15
+ const path = this.configPaths(cwd)[scope];
16
+ if (!existsSync(path))
17
+ return null;
18
+ const raw = await readFile(path, 'utf-8');
19
+ return JSON.parse(raw);
20
+ }
21
+ buildConfig(profile, providers) {
22
+ const base = profile.models.find((m) => m.tier === 'base') ?? profile.models[0];
23
+ if (!base)
24
+ throw new Error(`Profile "${profile.name}" has no models`);
25
+ const provider = providers.find((p) => p.id === base.providerId);
26
+ if (!provider)
27
+ throw new Error(`Provider not found for id: ${base.providerId}`);
28
+ if (provider.type === 'anthropic') {
29
+ const options = { apiKey: provider.apiKey };
30
+ if (provider.baseUrl)
31
+ options['baseURL'] = provider.baseUrl;
32
+ return {
33
+ model: `anthropic/${base.model}`,
34
+ provider: { anthropic: { options } },
35
+ };
36
+ }
37
+ // openai-compatible: кастомный провайдер с именем из agento
38
+ const providerKey = provider.name.toLowerCase().replace(/\s+/g, '-');
39
+ const options = { apiKey: provider.apiKey };
40
+ if (provider.baseUrl)
41
+ options['baseURL'] = provider.baseUrl;
42
+ return {
43
+ model: `${providerKey}/${base.model}`,
44
+ provider: {
45
+ [providerKey]: {
46
+ npm: '@ai-sdk/openai-compatible',
47
+ name: provider.name,
48
+ options,
49
+ models: { [base.model]: { name: base.model } },
50
+ },
51
+ },
52
+ };
53
+ }
54
+ async writeConfig(config, scope, cwd) {
55
+ const path = this.configPaths(cwd)[scope];
56
+ const dir = join(path, '..');
57
+ await mkdir(dir, { recursive: true });
58
+ await writeFile(path, JSON.stringify(config, null, 2), 'utf-8');
59
+ }
60
+ }
61
+ export const openCodeAdapter = new OpenCodeAdapter();
62
+ //# sourceMappingURL=opencode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../src/adapters/opencode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { AgentAdapter, AgentConfig, AgentConfigPaths } from './base.js';
2
+ import type { LaunchScope } from './base.js';
3
+ import type { Profile, Provider } from '../config/schema.js';
4
+ export declare class QwenAdapter implements AgentAdapter {
5
+ readonly id = "qwen";
6
+ readonly displayName = "Qwen CLI";
7
+ configPaths(cwd?: string): AgentConfigPaths;
8
+ readConfig(scope: LaunchScope, cwd?: string): Promise<AgentConfig | null>;
9
+ buildConfig(profile: Profile, providers: Provider[]): AgentConfig;
10
+ writeConfig(config: AgentConfig, scope: LaunchScope, cwd?: string): Promise<void>;
11
+ }
12
+ export declare const qwenAdapter: QwenAdapter;
13
+ //# sourceMappingURL=qwen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qwen.d.ts","sourceRoot":"","sources":["../../../src/adapters/qwen.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAa7D,qBAAa,WAAY,YAAW,YAAY;IAC9C,QAAQ,CAAC,EAAE,UAAU;IACrB,QAAQ,CAAC,WAAW,cAAc;IAElC,WAAW,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,gBAAgB;IAOrC,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAO/E,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,WAAW;IAyD3D,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAMxF;AAED,eAAO,MAAM,WAAW,aAAoB,CAAC"}
@@ -0,0 +1,84 @@
1
+ import { readFile, writeFile, mkdir } from 'node:fs/promises';
2
+ import { existsSync } from 'node:fs';
3
+ import { homedir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ /** Генерирует env-ключ для Qwen из baseUrl.
6
+ * Пример: "http://188.132.197.214:20128/v1" → "QWEN_CUSTOM_API_KEY_OPENAI_HTTP_188_132_197_214_20128_V1"
7
+ */
8
+ function deriveEnvKey(baseUrl) {
9
+ const normalized = baseUrl
10
+ .toUpperCase()
11
+ .replace(/[^A-Z0-9]+/g, '_')
12
+ .replace(/^_+|_+$/g, '');
13
+ return `QWEN_CUSTOM_API_KEY_OPENAI_${normalized}`;
14
+ }
15
+ export class QwenAdapter {
16
+ id = 'qwen';
17
+ displayName = 'Qwen CLI';
18
+ configPaths(cwd) {
19
+ return {
20
+ global: join(homedir(), '.qwen', 'settings.json'),
21
+ project: join(cwd ?? process.cwd(), '.qwen', 'settings.json'),
22
+ };
23
+ }
24
+ async readConfig(scope, cwd) {
25
+ const path = this.configPaths(cwd)[scope];
26
+ if (!existsSync(path))
27
+ return null;
28
+ const raw = await readFile(path, 'utf-8');
29
+ return JSON.parse(raw);
30
+ }
31
+ buildConfig(profile, providers) {
32
+ if (profile.models.length === 0) {
33
+ throw new Error(`Profile "${profile.name}" has no models`);
34
+ }
35
+ // Определяем активную модель (base tier или первая)
36
+ const baseModel = profile.models.find((m) => m.tier === 'base') ?? profile.models[0];
37
+ // Строим список всех моделей, группируем по провайдеру
38
+ const envMap = {};
39
+ const modelProviders = {};
40
+ for (const profileModel of profile.models) {
41
+ const provider = providers.find((p) => p.id === profileModel.providerId);
42
+ if (!provider) {
43
+ throw new Error(`Provider not found for id: ${profileModel.providerId}`);
44
+ }
45
+ if (provider.type === 'anthropic') {
46
+ throw new Error(`Qwen CLI does not support Anthropic providers (provider: "${provider.name}")`);
47
+ }
48
+ if (!provider.baseUrl) {
49
+ throw new Error(`Qwen CLI requires a baseUrl for provider "${provider.name}"`);
50
+ }
51
+ const providerKey = 'openai';
52
+ const envKey = deriveEnvKey(provider.baseUrl);
53
+ envMap[envKey] = provider.apiKey;
54
+ if (!modelProviders[providerKey])
55
+ modelProviders[providerKey] = [];
56
+ modelProviders[providerKey].push({
57
+ id: profileModel.model,
58
+ name: profileModel.model,
59
+ baseUrl: provider.baseUrl,
60
+ envKey,
61
+ generationConfig: {
62
+ modalities: { image: false, video: false, audio: false },
63
+ },
64
+ });
65
+ }
66
+ return {
67
+ env: envMap,
68
+ modelProviders,
69
+ security: {
70
+ auth: { selectedType: 'openai' },
71
+ },
72
+ model: { name: baseModel.model },
73
+ $version: 4,
74
+ };
75
+ }
76
+ async writeConfig(config, scope, cwd) {
77
+ const path = this.configPaths(cwd)[scope];
78
+ const dir = join(path, '..');
79
+ await mkdir(dir, { recursive: true });
80
+ await writeFile(path, JSON.stringify(config, null, 2), 'utf-8');
81
+ }
82
+ }
83
+ export const qwenAdapter = new QwenAdapter();
84
+ //# sourceMappingURL=qwen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qwen.js","sourceRoot":"","sources":["../../../src/adapters/qwen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createAgentCommand(): Command;
3
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,wBAAgB,kBAAkB,IAAI,OAAO,CA6B5C"}
@@ -0,0 +1,42 @@
1
+ import { Command } from 'commander';
2
+ import { backupExists } from '../../config/store.js';
3
+ import { claudeCodeAdapter } from '../../adapters/claude-code.js';
4
+ import { openCodeAdapter } from '../../adapters/opencode.js';
5
+ import { qwenAdapter } from '../../adapters/qwen.js';
6
+ import { codexAdapter } from '../../adapters/codex.js';
7
+ const ALL_ADAPTERS = [claudeCodeAdapter, openCodeAdapter, qwenAdapter, codexAdapter];
8
+ function getAdapters(dev = false) {
9
+ if (dev)
10
+ return ALL_ADAPTERS;
11
+ return ALL_ADAPTERS.filter((a) => !a.dev);
12
+ }
13
+ export function createAgentCommand() {
14
+ const cmd = new Command('agent').description('Agent config status');
15
+ cmd
16
+ .command('status')
17
+ .description('Show status of agent configs')
18
+ .option('-d, --dev', 'Show development agents (e.g. codex)')
19
+ .action(async (opts) => {
20
+ try {
21
+ const adapters = getAdapters(opts.dev);
22
+ for (const adapter of adapters) {
23
+ const scopes = ['global', 'project'];
24
+ for (const scope of scopes) {
25
+ const paths = adapter.configPaths();
26
+ const configPath = paths[scope];
27
+ const hasBackup = backupExists(adapter.id, scope);
28
+ const status = hasBackup ? 'modified (backup exists)' : 'original';
29
+ console.log(` ${adapter.displayName} [${scope}]: ${status}`);
30
+ console.log(` config: ${configPath}`);
31
+ }
32
+ }
33
+ process.exit(0);
34
+ }
35
+ catch (err) {
36
+ console.error('Error:', err instanceof Error ? err.message : String(err));
37
+ process.exit(1);
38
+ }
39
+ });
40
+ return cmd;
41
+ }
42
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../../src/cli/commands/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGvD,MAAM,YAAY,GAAmB,CAAC,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;AAErG,SAAS,WAAW,CAAC,GAAG,GAAG,KAAK;IAC9B,IAAI,GAAG;QAAE,OAAO,YAAY,CAAC;IAC7B,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;IAEpE,GAAG;SACA,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,8BAA8B,CAAC;SAC3C,MAAM,CAAC,WAAW,EAAE,sCAAsC,CAAC;SAC3D,MAAM,CAAC,KAAK,EAAE,IAAuB,EAAE,EAAE;QACxC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAgC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;gBAClE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;oBACpC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;oBAChC,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;oBAClD,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,UAAU,CAAC;oBACnE,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,WAAW,KAAK,KAAK,MAAM,MAAM,EAAE,CAAC,CAAC;oBAC9D,OAAO,CAAC,GAAG,CAAC,eAAe,UAAU,EAAE,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createLaunchCommand(): Command;
3
+ //# sourceMappingURL=launch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/launch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBpC,wBAAgB,mBAAmB,IAAI,OAAO,CAgE7C"}
@@ -0,0 +1,80 @@
1
+ import { Command } from 'commander';
2
+ import { spawnSync } from 'node:child_process';
3
+ import { readConfig } from '../../config/store.js';
4
+ import { claudeCodeAdapter } from '../../adapters/claude-code.js';
5
+ import { openCodeAdapter } from '../../adapters/opencode.js';
6
+ import { qwenAdapter } from '../../adapters/qwen.js';
7
+ import { codexAdapter } from '../../adapters/codex.js';
8
+ import { launchChild } from '../../launcher/child.js';
9
+ import { launchIndependent } from '../../launcher/independent.js';
10
+ const ALL_AGENT_COMMANDS = {
11
+ 'claude-code': { adapter: claudeCodeAdapter, command: 'claude' },
12
+ 'opencode': { adapter: openCodeAdapter, command: 'opencode' },
13
+ 'qwen': { adapter: qwenAdapter, command: 'qwen' },
14
+ 'codex': { adapter: codexAdapter, command: 'codex', args: ['-p', 'default'] },
15
+ };
16
+ function getAgentCommands(dev = false) {
17
+ if (dev)
18
+ return ALL_AGENT_COMMANDS;
19
+ return Object.fromEntries(Object.entries(ALL_AGENT_COMMANDS).filter(([, entry]) => !entry.adapter.dev));
20
+ }
21
+ export function createLaunchCommand() {
22
+ const cmd = new Command('launch')
23
+ .description('Launch an agent with a profile')
24
+ .requiredOption('-p, --profile <name>', 'Profile name to use')
25
+ .requiredOption('-a, --agent <id>', 'Agent to launch (claude-code, opencode, qwen, codex)')
26
+ .option('-m, --mode <mode>', 'Launch mode: child or independent')
27
+ .option('-s, --scope <scope>', 'Config scope: global or project')
28
+ .option('-d, --dev', 'Show development agents (e.g. codex)')
29
+ .action(async (opts) => {
30
+ const AGENT_COMMANDS = getAgentCommands(opts.dev);
31
+ try {
32
+ const config = await readConfig();
33
+ // Resolve profile
34
+ const profile = config.profiles.find((p) => p.name === opts.profile || p.id === opts.profile);
35
+ if (!profile) {
36
+ console.error(`Error: Profile not found: ${opts.profile}`);
37
+ process.exit(1);
38
+ }
39
+ // Resolve agent
40
+ const agentEntry = AGENT_COMMANDS[opts.agent];
41
+ if (!agentEntry) {
42
+ console.error(`Error: Unknown agent: ${opts.agent}. Supported: ${Object.keys(AGENT_COMMANDS).join(', ')}`);
43
+ process.exit(1);
44
+ }
45
+ // Resolve mode and scope (fallback to settings)
46
+ const mode = (opts.mode ?? config.settings.defaultLaunchMode);
47
+ const scope = (opts.scope ?? config.settings.defaultConfigScope);
48
+ const { adapter, command, args } = agentEntry;
49
+ if (mode === 'child') {
50
+ const exitCode = await launchChild({
51
+ adapter,
52
+ profile,
53
+ providers: config.providers,
54
+ scope,
55
+ command,
56
+ args,
57
+ });
58
+ process.exit(exitCode);
59
+ }
60
+ else {
61
+ const execReq = await launchIndependent({
62
+ adapter,
63
+ profile,
64
+ providers: config.providers,
65
+ scope,
66
+ command,
67
+ args,
68
+ });
69
+ spawnSync(execReq.command, execReq.args, { stdio: 'inherit', env: execReq.env });
70
+ process.exit(0);
71
+ }
72
+ }
73
+ catch (err) {
74
+ console.error('Error:', err instanceof Error ? err.message : String(err));
75
+ process.exit(1);
76
+ }
77
+ });
78
+ return cmd;
79
+ }
80
+ //# sourceMappingURL=launch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launch.js","sourceRoot":"","sources":["../../../../src/cli/commands/launch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGlE,MAAM,kBAAkB,GAAgF;IACtG,aAAa,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,QAAQ,EAAE;IAChE,UAAU,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE;IAC7D,MAAM,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE;IACjD,OAAO,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE;CAC9E,CAAC;AAEF,SAAS,gBAAgB,CAAC,GAAG,GAAG,KAAK;IACnC,IAAI,GAAG;QAAE,OAAO,kBAAkB,CAAC;IACnC,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAC7E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;SAC9B,WAAW,CAAC,gCAAgC,CAAC;SAC7C,cAAc,CAAC,sBAAsB,EAAE,qBAAqB,CAAC;SAC7D,cAAc,CAAC,kBAAkB,EAAE,sDAAsD,CAAC;SAC1F,MAAM,CAAC,mBAAmB,EAAE,mCAAmC,CAAC;SAChE,MAAM,CAAC,qBAAqB,EAAE,iCAAiC,CAAC;SAChE,MAAM,CAAC,WAAW,EAAE,sCAAsC,CAAC;SAC3D,MAAM,CAAC,KAAK,EAAE,IAAsF,EAAE,EAAE;QACvG,MAAM,cAAc,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;YAElC,kBAAkB;YAClB,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,OAAO,CACxD,CAAC;YACF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,6BAA6B,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,gBAAgB;YAChB,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,CAAC,KAAK,CAAC,yBAAyB,IAAI,CAAC,KAAK,gBAAgB,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC3G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,gDAAgD;YAChD,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAA4B,CAAC;YACzF,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAyB,CAAC;YAEzF,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC;YAE9C,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBACrB,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC;oBACjC,OAAO;oBACP,OAAO;oBACP,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,KAAK;oBACL,OAAO;oBACP,IAAI;iBACL,CAAC,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC;oBACtC,OAAO;oBACP,OAAO;oBACP,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,KAAK;oBACL,OAAO;oBACP,IAAI;iBACL,CAAC,CAAC;gBACH,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;gBACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createProfileCommand(): Command;
3
+ //# sourceMappingURL=profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,oBAAoB,IAAI,OAAO,CAmG9C"}
@@ -0,0 +1,102 @@
1
+ import { Command } from 'commander';
2
+ import { listProfiles, addProfile, removeProfile } from '../../profiles/profile-manager.js';
3
+ const VALID_TIERS = ['small', 'base', 'smart'];
4
+ export function createProfileCommand() {
5
+ const cmd = new Command('profile').description('Manage profiles');
6
+ cmd
7
+ .command('list')
8
+ .description('List all profiles')
9
+ .action(async () => {
10
+ try {
11
+ const profiles = await listProfiles();
12
+ if (profiles.length === 0) {
13
+ console.log('No profiles configured.');
14
+ }
15
+ else {
16
+ profiles.forEach((p) => {
17
+ console.log(` ${p.name} (id: ${p.id})`);
18
+ p.models.forEach((m, i) => {
19
+ const tierStr = m.tier ? ` [${m.tier}]` : '';
20
+ console.log(` ${i + 1}. provider: ${m.providerId}, model: ${m.model}${tierStr}`);
21
+ });
22
+ });
23
+ }
24
+ process.exit(0);
25
+ }
26
+ catch (err) {
27
+ console.error('Error:', err instanceof Error ? err.message : String(err));
28
+ process.exit(1);
29
+ }
30
+ });
31
+ cmd
32
+ .command('add')
33
+ .description('Add a new profile')
34
+ .requiredOption('-n, --name <name>', 'Profile name')
35
+ .requiredOption('-m, --models <models>', 'Comma-separated list of providerId:modelName[:tier] (tier ∈ small|base|smart, optional). Tier is only meaningful when there are multiple models.')
36
+ .action(async (opts) => {
37
+ try {
38
+ const models = [];
39
+ for (const raw of opts.models.split(',')) {
40
+ const parts = raw.trim().split(':');
41
+ if (parts.length < 2)
42
+ continue;
43
+ const providerId = parts[0];
44
+ // Последний сегмент может быть tier; иначе всё после providerId — модель.
45
+ const last = parts[parts.length - 1];
46
+ let model;
47
+ let tier;
48
+ if (parts.length >= 3 && VALID_TIERS.includes(last)) {
49
+ tier = last;
50
+ model = parts.slice(1, -1).join(':');
51
+ }
52
+ else {
53
+ model = parts.slice(1).join(':');
54
+ }
55
+ if (!providerId || !model)
56
+ continue;
57
+ models.push(tier ? { providerId, model, tier } : { providerId, model });
58
+ }
59
+ if (models.length === 0) {
60
+ console.error('Error: No valid models provided. Format: providerId:modelName[:tier]');
61
+ process.exit(1);
62
+ }
63
+ if (models.length > 1) {
64
+ if (models.some((m) => !m.tier)) {
65
+ console.error('Error: with multiple models every entry must include a tier (small|base|smart)');
66
+ process.exit(1);
67
+ }
68
+ if (!models.some((m) => m.tier === 'base')) {
69
+ console.error('Error: at least one model must have tier=base');
70
+ process.exit(1);
71
+ }
72
+ }
73
+ else {
74
+ // Одна модель: tier игнорируется.
75
+ delete models[0].tier;
76
+ }
77
+ const profile = await addProfile({ name: opts.name, models });
78
+ console.log(`Profile "${profile.name}" added (id: ${profile.id})`);
79
+ process.exit(0);
80
+ }
81
+ catch (err) {
82
+ console.error('Error:', err instanceof Error ? err.message : String(err));
83
+ process.exit(1);
84
+ }
85
+ });
86
+ cmd
87
+ .command('remove <name>')
88
+ .description('Remove a profile by name or id')
89
+ .action(async (name) => {
90
+ try {
91
+ await removeProfile(name);
92
+ console.log(`Profile "${name}" removed.`);
93
+ process.exit(0);
94
+ }
95
+ catch (err) {
96
+ console.error('Error:', err instanceof Error ? err.message : String(err));
97
+ process.exit(1);
98
+ }
99
+ });
100
+ return cmd;
101
+ }
102
+ //# sourceMappingURL=profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../../src/cli/commands/profile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createProviderCommand(): Command;
3
+ //# sourceMappingURL=provider.d.ts.map