@iaforged/context-code 1.0.80 → 1.0.82
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/src/components/LogoV2/FeedColumn.js +3 -4
- package/dist/src/components/LogoV2/LogoV2.js +10 -10
- package/dist/src/components/LogoV2/WelcomeV2.js +1 -1
- package/dist/src/components/agents/AgentDetail.js +19 -210
- package/dist/src/components/agents/AgentEditor.js +60 -70
- package/dist/src/components/agents/AgentsList.js +3 -2
- package/dist/src/components/agents/AgentsMenu.js +10 -10
- package/dist/src/components/agents/ColorPicker.js +2 -2
- package/dist/src/components/agents/ModelSelector.js +204 -52
- package/dist/src/components/agents/ToolSelector.js +13 -13
- package/dist/src/components/agents/agentFileUtils.js +12 -11
- package/dist/src/components/agents/new-agent-creation/CreateAgentWizard.js +1 -1
- package/dist/src/components/agents/new-agent-creation/types.js +1 -0
- package/dist/src/components/agents/new-agent-creation/wizard-steps/ColorStep.js +22 -68
- package/dist/src/components/agents/new-agent-creation/wizard-steps/ConfirmStep.js +30 -369
- package/dist/src/components/agents/new-agent-creation/wizard-steps/ConfirmStepWrapper.js +13 -15
- package/dist/src/components/agents/new-agent-creation/wizard-steps/DescriptionStep.js +4 -4
- package/dist/src/components/agents/new-agent-creation/wizard-steps/GenerateStep.js +15 -22
- package/dist/src/components/agents/new-agent-creation/wizard-steps/LocationStep.js +2 -2
- package/dist/src/components/agents/new-agent-creation/wizard-steps/MemoryStep.js +9 -9
- package/dist/src/components/agents/new-agent-creation/wizard-steps/MethodStep.js +3 -3
- package/dist/src/components/agents/new-agent-creation/wizard-steps/ModelStep.js +8 -38
- package/dist/src/components/agents/new-agent-creation/wizard-steps/PromptStep.js +4 -4
- package/dist/src/components/agents/new-agent-creation/wizard-steps/ToolsStep.js +1 -1
- package/dist/src/components/agents/new-agent-creation/wizard-steps/TypeStep.js +3 -3
- package/dist/src/components/agents/validateAgent.js +16 -16
- package/dist/src/services/compact/compact.js +22 -20
- package/dist/src/tools/AgentTool/AgentTool.js +12 -8
- package/dist/src/tools/AgentTool/agentDisplay.js +5 -2
- package/dist/src/tools/AgentTool/loadAgentsDir.js +36 -0
- package/dist/src/tools/AgentTool/resumeAgent.js +7 -3
- package/dist/src/utils/model/agent.js +12 -3
- package/dist/src/utils/model/providerOverrideContext.js +11 -0
- package/dist/src/utils/model/providers.js +14 -0
- package/package.json +1 -1
|
@@ -42,6 +42,19 @@ const AgentJsonSchema = lazySchema(() => z.object({
|
|
|
42
42
|
.min(1, 'Model cannot be empty')
|
|
43
43
|
.transform(m => (m.toLowerCase() === 'inherit' ? 'inherit' : m))
|
|
44
44
|
.optional(),
|
|
45
|
+
provider: z
|
|
46
|
+
.enum([
|
|
47
|
+
'claude',
|
|
48
|
+
'openai',
|
|
49
|
+
'openrouter',
|
|
50
|
+
'ollama',
|
|
51
|
+
'ollama-cloud',
|
|
52
|
+
'gemini-api',
|
|
53
|
+
'gemini-google',
|
|
54
|
+
'zai',
|
|
55
|
+
'minimax',
|
|
56
|
+
])
|
|
57
|
+
.optional(),
|
|
45
58
|
effort: z.union([z.enum(EFFORT_LEVELS), z.number().int()]).optional(),
|
|
46
59
|
permissionMode: z.enum(PERMISSION_MODES).optional(),
|
|
47
60
|
mcpServers: z.array(AgentMcpServerSpecSchema()).optional(),
|
|
@@ -285,6 +298,7 @@ export function parseAgentFromJson(name, definition, source = 'flagSettings') {
|
|
|
285
298
|
},
|
|
286
299
|
source,
|
|
287
300
|
...(parsed.model ? { model: parsed.model } : {}),
|
|
301
|
+
...(parsed.provider ? { provider: parsed.provider } : {}),
|
|
288
302
|
...(parsed.effort !== undefined ? { effort: parsed.effort } : {}),
|
|
289
303
|
...(parsed.permissionMode
|
|
290
304
|
? { permissionMode: parsed.permissionMode }
|
|
@@ -347,6 +361,27 @@ export function parseAgentFromMarkdown(filePath, baseDir, frontmatter, content,
|
|
|
347
361
|
// Unescape newlines in whenToUse that were escaped for YAML parsing
|
|
348
362
|
whenToUse = whenToUse.replace(/\\n/g, '\n');
|
|
349
363
|
const color = frontmatter['color'];
|
|
364
|
+
const providerRaw = frontmatter['provider'];
|
|
365
|
+
const VALID_PROVIDERS = [
|
|
366
|
+
'claude',
|
|
367
|
+
'openai',
|
|
368
|
+
'openrouter',
|
|
369
|
+
'ollama',
|
|
370
|
+
'ollama-cloud',
|
|
371
|
+
'gemini-api',
|
|
372
|
+
'gemini-google',
|
|
373
|
+
'zai',
|
|
374
|
+
'minimax',
|
|
375
|
+
];
|
|
376
|
+
let provider;
|
|
377
|
+
if (typeof providerRaw === 'string') {
|
|
378
|
+
if (VALID_PROVIDERS.includes(providerRaw)) {
|
|
379
|
+
provider = providerRaw;
|
|
380
|
+
}
|
|
381
|
+
else {
|
|
382
|
+
logForDebugging(`Agent file ${filePath} has invalid provider value '${providerRaw}'. Valid options: ${VALID_PROVIDERS.join(', ')}`);
|
|
383
|
+
}
|
|
384
|
+
}
|
|
350
385
|
const modelRaw = frontmatter['model'];
|
|
351
386
|
let model;
|
|
352
387
|
if (typeof modelRaw === 'string' && modelRaw.trim().length > 0) {
|
|
@@ -477,6 +512,7 @@ export function parseAgentFromMarkdown(filePath, baseDir, frontmatter, content,
|
|
|
477
512
|
? { color }
|
|
478
513
|
: {}),
|
|
479
514
|
...(model !== undefined ? { model } : {}),
|
|
515
|
+
...(provider !== undefined ? { provider } : {}),
|
|
480
516
|
...(parsedEffort !== undefined ? { effort: parsedEffort } : {}),
|
|
481
517
|
...(isValidPermissionMode
|
|
482
518
|
? { permissionMode: permissionModeRaw }
|
|
@@ -10,6 +10,8 @@ import { runWithCwdOverride } from '../../utils/cwd.js';
|
|
|
10
10
|
import { logForDebugging } from '../../utils/debug.js';
|
|
11
11
|
import { createUserMessage, filterOrphanedThinkingOnlyMessages, filterUnresolvedToolUses, filterWhitespaceOnlyAssistantMessages, } from '../../utils/messages.js';
|
|
12
12
|
import { getAgentModel } from '../../utils/model/agent.js';
|
|
13
|
+
import { runWithProviderOverride } from '../../utils/model/providerOverrideContext.js';
|
|
14
|
+
import { providerPreferenceToApiProvider } from '../../utils/model/providers.js';
|
|
13
15
|
import { getQuerySourceForAgent } from '../../utils/promptCategory.js';
|
|
14
16
|
import { getAgentTranscript, readAgentMetadata, } from '../../utils/sessionStorage.js';
|
|
15
17
|
import { buildEffectiveSystemPrompt } from '../../utils/systemPrompt.js';
|
|
@@ -65,6 +67,8 @@ export async function resumeAgentBackground({ agentId, prompt, toolUseContext, c
|
|
|
65
67
|
selectedAgent = GENERAL_PURPOSE_AGENT;
|
|
66
68
|
}
|
|
67
69
|
const uiDescription = meta?.description ?? '(resumed)';
|
|
70
|
+
const agentProviderOverride = providerPreferenceToApiProvider(selectedAgent.provider);
|
|
71
|
+
const withAgentProvider = (fn) => runWithProviderOverride(agentProviderOverride, fn);
|
|
68
72
|
let forkParentSystemPrompt;
|
|
69
73
|
if (isResumedFork) {
|
|
70
74
|
if (toolUseContext.renderedSystemPrompt) {
|
|
@@ -89,7 +93,7 @@ export async function resumeAgentBackground({ agentId, prompt, toolUseContext, c
|
|
|
89
93
|
}
|
|
90
94
|
}
|
|
91
95
|
// Resolve model for analytics metadata (runAgent resolves its own internally)
|
|
92
|
-
const resolvedAgentModel = getAgentModel(selectedAgent.model, toolUseContext.options.mainLoopModel, undefined, permissionMode);
|
|
96
|
+
const resolvedAgentModel = withAgentProvider(() => getAgentModel(selectedAgent.model, toolUseContext.options.mainLoopModel, undefined, permissionMode));
|
|
93
97
|
const workerPermissionContext = {
|
|
94
98
|
...appState.toolPermissionContext,
|
|
95
99
|
mode: selectedAgent.permissionMode ?? 'acceptEdits',
|
|
@@ -152,7 +156,7 @@ export async function resumeAgentBackground({ agentId, prompt, toolUseContext, c
|
|
|
152
156
|
invocationEmitted: false,
|
|
153
157
|
};
|
|
154
158
|
const wrapWithCwd = (fn) => resumedWorktreePath ? runWithCwdOverride(resumedWorktreePath, fn) : fn();
|
|
155
|
-
void runWithAgentContext(asyncAgentContext, () => wrapWithCwd(() => runAsyncAgentLifecycle({
|
|
159
|
+
void withAgentProvider(() => runWithAgentContext(asyncAgentContext, () => wrapWithCwd(() => runAsyncAgentLifecycle({
|
|
156
160
|
taskId: agentBackgroundTask.agentId,
|
|
157
161
|
abortController: agentBackgroundTask.abortController,
|
|
158
162
|
makeStream: onCacheSafeParams => runAgent({
|
|
@@ -173,7 +177,7 @@ export async function resumeAgentBackground({ agentId, prompt, toolUseContext, c
|
|
|
173
177
|
isForkSubagentEnabled() ||
|
|
174
178
|
getSdkAgentProgressSummariesEnabled(),
|
|
175
179
|
getWorktreeResult: async () => resumedWorktreePath ? { worktreePath: resumedWorktreePath } : {},
|
|
176
|
-
})));
|
|
180
|
+
}))));
|
|
177
181
|
return {
|
|
178
182
|
agentId,
|
|
179
183
|
description: uiDescription,
|
|
@@ -2,6 +2,7 @@ import { capitalize } from '../stringUtils.js';
|
|
|
2
2
|
import { MODEL_ALIASES } from './aliases.js';
|
|
3
3
|
import { applyBedrockRegionPrefix, getBedrockRegionPrefix } from './bedrock.js';
|
|
4
4
|
import { getCanonicalName, getRuntimeMainLoopModel, parseUserSpecifiedModel, } from './model.js';
|
|
5
|
+
import { getVisibleProvider } from './providerCatalog.js';
|
|
5
6
|
import { getAPIProvider } from './providers.js';
|
|
6
7
|
export const AGENT_MODEL_OPTIONS = [...MODEL_ALIASES, 'inherit'];
|
|
7
8
|
/**
|
|
@@ -91,14 +92,22 @@ function aliasMatchesParentTier(alias, parentModel) {
|
|
|
91
92
|
return false;
|
|
92
93
|
}
|
|
93
94
|
}
|
|
94
|
-
export function getAgentModelDisplay(model) {
|
|
95
|
+
export function getAgentModelDisplay(model, provider) {
|
|
95
96
|
// When model is omitted, getDefaultSubagentModel() returns 'inherit' at runtime
|
|
96
97
|
if (!model)
|
|
97
|
-
return '
|
|
98
|
+
return 'Heredar del padre (predeterminado)';
|
|
98
99
|
if (model === 'inherit')
|
|
99
|
-
return '
|
|
100
|
+
return 'Heredar del padre';
|
|
101
|
+
if (provider && provider !== 'claude')
|
|
102
|
+
return model;
|
|
100
103
|
return capitalize(model);
|
|
101
104
|
}
|
|
105
|
+
export function getAgentProviderDisplay(provider) {
|
|
106
|
+
if (!provider) {
|
|
107
|
+
return 'Heredar del padre';
|
|
108
|
+
}
|
|
109
|
+
return getVisibleProvider(provider).label;
|
|
110
|
+
}
|
|
102
111
|
/**
|
|
103
112
|
* Get available model options for agents
|
|
104
113
|
*/
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from 'async_hooks';
|
|
2
|
+
const providerOverrideStorage = new AsyncLocalStorage();
|
|
3
|
+
export function getProviderOverride() {
|
|
4
|
+
return providerOverrideStorage.getStore();
|
|
5
|
+
}
|
|
6
|
+
export function runWithProviderOverride(provider, fn) {
|
|
7
|
+
if (!provider) {
|
|
8
|
+
return fn();
|
|
9
|
+
}
|
|
10
|
+
return providerOverrideStorage.run(provider, fn);
|
|
11
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { isEnvTruthy } from '../envUtils.js';
|
|
2
2
|
import { getSecureStorage } from '../secureStorage/index.js';
|
|
3
3
|
import { isProviderBaseUrlCustomized } from './providerBaseUrls.js';
|
|
4
|
+
import { getProviderOverride } from './providerOverrideContext.js';
|
|
4
5
|
import { getStoredActiveProviderPreference } from './providerProfilesDb.js';
|
|
5
6
|
import { listProviderProfiles } from './providerProfiles.js';
|
|
6
7
|
function hasStoredOpenAIOAuthToken() {
|
|
@@ -31,6 +32,15 @@ function hasStoredClaudeAIOAuthToken() {
|
|
|
31
32
|
return false;
|
|
32
33
|
}
|
|
33
34
|
}
|
|
35
|
+
export function providerPreferenceToApiProvider(provider) {
|
|
36
|
+
if (!provider) {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
if (provider === 'claude') {
|
|
40
|
+
return 'firstParty';
|
|
41
|
+
}
|
|
42
|
+
return provider;
|
|
43
|
+
}
|
|
34
44
|
export function isOpenAIProviderConfigured() {
|
|
35
45
|
return (isEnvTruthy(process.env.CLAUDE_CODE_USE_OPENAI) ||
|
|
36
46
|
Boolean(process.env.OPENAI_API_KEY) ||
|
|
@@ -168,6 +178,10 @@ export function hasDualProviderSessions() {
|
|
|
168
178
|
hasStoredClaudeAIOAuthToken());
|
|
169
179
|
}
|
|
170
180
|
export function getAPIProvider() {
|
|
181
|
+
const providerOverride = getProviderOverride();
|
|
182
|
+
if (providerOverride) {
|
|
183
|
+
return providerOverride;
|
|
184
|
+
}
|
|
171
185
|
if (isEnvTruthy(process.env.CLAUDE_CODE_USE_BEDROCK)) {
|
|
172
186
|
return 'bedrock';
|
|
173
187
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iaforged/context-code",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.82",
|
|
4
4
|
"description": "Context Code es un asistente de desarrollo para la terminal. Puede revisar tu proyecto, editar archivos, ejecutar comandos y apoyarte en tareas reales de programacion.",
|
|
5
5
|
"author": "Context AI",
|
|
6
6
|
"license": "MIT",
|