@robota-sdk/agent-cli 3.0.0-beta.61 → 3.0.0-beta.62

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,287 @@
1
+ // src/utils/provider-default-definitions.ts
2
+ import { createAnthropicProviderDefinition } from "@robota-sdk/agent-provider-anthropic";
3
+ import { createDeepSeekProviderDefinition } from "@robota-sdk/agent-provider-deepseek";
4
+ import { createGemmaProviderDefinition } from "@robota-sdk/agent-provider-gemma";
5
+ import { createGeminiProviderDefinition } from "@robota-sdk/agent-provider-gemini";
6
+ import { createOpenAIProviderDefinition } from "@robota-sdk/agent-provider-openai";
7
+ import { createQwenProviderDefinition } from "@robota-sdk/agent-provider-qwen";
8
+ var DEFAULT_PROVIDER_DEFINITIONS = [
9
+ createAnthropicProviderDefinition(),
10
+ createOpenAIProviderDefinition(),
11
+ createGeminiProviderDefinition(),
12
+ createGemmaProviderDefinition(),
13
+ createQwenProviderDefinition(),
14
+ createDeepSeekProviderDefinition()
15
+ ];
16
+
17
+ // src/utils/provider-factory.ts
18
+ import { readFileSync, existsSync } from "fs";
19
+ import { join } from "path";
20
+
21
+ // src/utils/provider-definition.ts
22
+ import {
23
+ findProviderDefinition,
24
+ formatSupportedProviderTypes,
25
+ getProviderCredentialRequirement
26
+ } from "@robota-sdk/agent-core";
27
+
28
+ // src/utils/env-ref.ts
29
+ import {
30
+ formatEnvReference,
31
+ hasUsableSecretReference,
32
+ isEnvReference,
33
+ resolveEnvReference
34
+ } from "@robota-sdk/agent-sdk";
35
+
36
+ // src/utils/provider-factory.ts
37
+ function readProviderSettings(cwd, options = {}) {
38
+ const merged = readMergedProviderSettings(cwd);
39
+ const providerConfig = resolveActiveProvider(
40
+ merged,
41
+ options.providerOverride,
42
+ getProviderDefinitions(options)
43
+ );
44
+ if (providerConfig !== void 0) {
45
+ return providerConfig;
46
+ }
47
+ throw new Error("No provider configuration found. Run `robota` to set up.");
48
+ }
49
+ function readMergedProviderSettings(cwd) {
50
+ return readMergedProviderSettingsFromPaths(getProviderSettingsPaths(cwd));
51
+ }
52
+ function getProviderSettingsPaths(cwd) {
53
+ const userHome = getUserHome();
54
+ return [
55
+ join(userHome, ".robota", "settings.json"),
56
+ join(userHome, ".claude", "settings.json"),
57
+ join(cwd, ".robota", "settings.json"),
58
+ join(cwd, ".robota", "settings.local.json"),
59
+ join(cwd, ".claude", "settings.json"),
60
+ join(cwd, ".claude", "settings.local.json")
61
+ ];
62
+ }
63
+ function getUserHome() {
64
+ return process.env.HOME ?? process.env.USERPROFILE ?? "/";
65
+ }
66
+ function readMergedProviderSettingsFromPaths(paths) {
67
+ return paths.reduce((settings, filePath) => {
68
+ const parsed = readSettingsFile(filePath);
69
+ if (parsed === void 0) {
70
+ return settings;
71
+ }
72
+ return mergeSettings(settings, parsed);
73
+ }, {});
74
+ }
75
+ function readSettingsFile(filePath) {
76
+ if (!existsSync(filePath)) {
77
+ return void 0;
78
+ }
79
+ try {
80
+ const raw = readFileSync(filePath, "utf8");
81
+ return JSON.parse(raw);
82
+ } catch {
83
+ return void 0;
84
+ }
85
+ }
86
+ function mergeSettings(base, override) {
87
+ return {
88
+ ...base,
89
+ ...override,
90
+ provider: base.provider !== void 0 || override.provider !== void 0 ? { ...base.provider, ...override.provider } : void 0,
91
+ providers: base.providers !== void 0 || override.providers !== void 0 ? mergeProviders(base.providers, override.providers) : void 0
92
+ };
93
+ }
94
+ function mergeProviders(base, override) {
95
+ const result = { ...base ?? {} };
96
+ for (const [name, profile] of Object.entries(override ?? {})) {
97
+ result[name] = { ...result[name], ...profile };
98
+ }
99
+ return result;
100
+ }
101
+ function resolveActiveProvider(settings, providerOverride, providerDefinitions = DEFAULT_PROVIDER_DEFINITIONS) {
102
+ const activeProvider = providerOverride ?? settings.currentProvider;
103
+ if (activeProvider !== void 0) {
104
+ const profile = settings.providers?.[activeProvider];
105
+ if (profile === void 0) {
106
+ throw new Error(`Provider profile "${activeProvider}" was not found in providers`);
107
+ }
108
+ if (!profile.type) {
109
+ throw new Error(`Provider profile "${activeProvider}" is missing type`);
110
+ }
111
+ return normalizeProviderConfig(
112
+ {
113
+ name: profile.type,
114
+ model: profile.model,
115
+ apiKey: profile.apiKey,
116
+ baseURL: profile.baseURL,
117
+ timeout: profile.timeout,
118
+ options: profile.options
119
+ },
120
+ providerDefinitions
121
+ );
122
+ }
123
+ const provider = settings.provider;
124
+ if (provider?.name) {
125
+ return normalizeProviderConfig(
126
+ {
127
+ name: provider.name,
128
+ model: provider.model,
129
+ apiKey: provider.apiKey,
130
+ baseURL: provider.baseURL,
131
+ timeout: provider.timeout,
132
+ options: provider.options
133
+ },
134
+ providerDefinitions
135
+ );
136
+ }
137
+ return void 0;
138
+ }
139
+ function normalizeProviderConfig(settings, providerDefinitions) {
140
+ const defaults = findProviderDefinition(providerDefinitions, settings.name)?.defaults ?? {};
141
+ const model = settings.model ?? defaults.model;
142
+ if (!model) {
143
+ throw new Error(`Provider ${settings.name} requires model`);
144
+ }
145
+ const apiKeyReference = settings.apiKey ?? defaults.apiKey;
146
+ const options = settings.options ?? defaults.options;
147
+ return {
148
+ name: settings.name,
149
+ model,
150
+ apiKey: apiKeyReference !== void 0 ? resolveEnvReference(apiKeyReference) : void 0,
151
+ baseURL: settings.baseURL ?? defaults.baseURL,
152
+ timeout: settings.timeout,
153
+ ...options !== void 0 && { options }
154
+ };
155
+ }
156
+ function resolveProfileApiKey(profile) {
157
+ if (profile.apiKey !== void 0) {
158
+ return resolveEnvReference(profile.apiKey);
159
+ }
160
+ if (profile.apiKeyEnv !== void 0) {
161
+ return process.env[profile.apiKeyEnv];
162
+ }
163
+ return void 0;
164
+ }
165
+ function createProviderFromConfig(settings, providerDefinitions) {
166
+ const definition = findProviderDefinition(providerDefinitions, settings.name);
167
+ if (definition === void 0) {
168
+ throw new Error(
169
+ `Unknown provider: ${settings.name}. Currently supported: ${formatSupportedProviderTypes(providerDefinitions)}`
170
+ );
171
+ }
172
+ const credentialRequirement = getProviderCredentialRequirement(definition);
173
+ if (credentialRequirement !== void 0 && !hasRequiredProviderCredential(settings, credentialRequirement)) {
174
+ throw new Error(
175
+ `Provider ${settings.name} requires ${formatCredentialRequirement(credentialRequirement)}`
176
+ );
177
+ }
178
+ return definition.createProvider(settings);
179
+ }
180
+ function createProviderFromSettings(cwd, modelOverride, options = {}) {
181
+ const providerDefinitions = getProviderDefinitions(options);
182
+ const settings = readProviderSettings(cwd, { ...options, providerDefinitions });
183
+ const model = modelOverride ?? settings.model;
184
+ return createProviderFromConfig({ ...settings, model }, providerDefinitions);
185
+ }
186
+ function createProviderFromProfile(profile, modelOverride, providerDefinitions = DEFAULT_PROVIDER_DEFINITIONS) {
187
+ return createProviderFromConfig(
188
+ normalizeProviderConfig(
189
+ {
190
+ name: profile.type,
191
+ model: modelOverride ?? profile.model,
192
+ apiKey: resolveProfileApiKey(profile),
193
+ baseURL: profile.baseURL,
194
+ timeout: profile.timeout,
195
+ options: profile.options
196
+ },
197
+ providerDefinitions
198
+ ),
199
+ providerDefinitions
200
+ );
201
+ }
202
+ function hasRequiredProviderCredential(settings, requirement) {
203
+ return requirement.anyOf.some((field) => hasProviderCredentialValue(settings, field));
204
+ }
205
+ function hasProviderCredentialValue(settings, field) {
206
+ const value = settings[field];
207
+ return value !== void 0 && value.length > 0;
208
+ }
209
+ function formatCredentialRequirement(requirement) {
210
+ return requirement.anyOf.join(" or ");
211
+ }
212
+ function getProviderDefinitions(options) {
213
+ return options.providerDefinitions ?? DEFAULT_PROVIDER_DEFINITIONS;
214
+ }
215
+
216
+ // src/subagents/child-process-subagent-ipc.ts
217
+ function isRecord(value) {
218
+ return typeof value === "object" && value !== null;
219
+ }
220
+ function hasString(value, key) {
221
+ return typeof value[key] === "string";
222
+ }
223
+ function isStartPayload(value) {
224
+ if (!isRecord(value)) return false;
225
+ if (!hasString(value, "jobId")) return false;
226
+ if (!isRecord(value.request)) return false;
227
+ if (!hasString(value.request, "type")) return false;
228
+ if (!hasString(value.request, "prompt")) return false;
229
+ if (!isRecord(value.agentDefinition)) return false;
230
+ if (!hasString(value.agentDefinition, "name")) return false;
231
+ if (!hasString(value.agentDefinition, "systemPrompt")) return false;
232
+ if (!isRecord(value.parentConfig)) return false;
233
+ if (!isRecord(value.parentContext)) return false;
234
+ if (!isRecord(value.providerProfile)) return false;
235
+ if (!hasString(value.providerProfile, "type")) return false;
236
+ return hasString(value.providerProfile, "model");
237
+ }
238
+ function isSubagentWorkerParentMessage(value) {
239
+ if (!isRecord(value) || !hasString(value, "type")) return false;
240
+ switch (value.type) {
241
+ case "start":
242
+ return isStartPayload(value.payload);
243
+ case "send":
244
+ return hasString(value, "prompt");
245
+ case "cancel":
246
+ return value.reason === void 0 || typeof value.reason === "string";
247
+ default:
248
+ return false;
249
+ }
250
+ }
251
+ function isSubagentWorkerChildMessage(value) {
252
+ if (!isRecord(value) || !hasString(value, "type")) return false;
253
+ switch (value.type) {
254
+ case "ready":
255
+ return true;
256
+ case "text_delta":
257
+ return hasString(value, "delta");
258
+ case "tool_start":
259
+ return hasString(value, "toolName");
260
+ case "tool_end":
261
+ return hasString(value, "toolName") && typeof value.success === "boolean";
262
+ case "result":
263
+ return hasString(value, "output");
264
+ case "error":
265
+ return hasString(value, "message");
266
+ case "cancelled":
267
+ return value.reason === void 0 || typeof value.reason === "string";
268
+ default:
269
+ return false;
270
+ }
271
+ }
272
+
273
+ export {
274
+ DEFAULT_PROVIDER_DEFINITIONS,
275
+ findProviderDefinition,
276
+ formatSupportedProviderTypes,
277
+ getProviderCredentialRequirement,
278
+ hasUsableSecretReference,
279
+ readProviderSettings,
280
+ readMergedProviderSettings,
281
+ getProviderSettingsPaths,
282
+ readMergedProviderSettingsFromPaths,
283
+ createProviderFromSettings,
284
+ createProviderFromProfile,
285
+ isSubagentWorkerParentMessage,
286
+ isSubagentWorkerChildMessage
287
+ };
@@ -0,0 +1,9 @@
1
+ import {
2
+ createDefaultCliCommandModules,
3
+ startCli
4
+ } from "./chunk-6US65UBD.js";
5
+ import "./chunk-7D75HL37.js";
6
+ export {
7
+ createDefaultCliCommandModules,
8
+ startCli
9
+ };