@iaforged/context-code 1.1.5 → 1.1.9
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/README.md +32 -0
- package/dist/src/commands/agent/agent.js +62 -0
- package/dist/src/commands/agent/index.js +1 -1
- package/dist/src/commands/orchestrate/index.js +2 -2
- package/dist/src/commands/orchestrate/orchestrate.js +12 -627
- package/dist/src/commands/tasks/index.js +1 -1
- package/dist/src/commands/tasks/tasks.js +8 -3
- package/dist/src/commands/team/index.js +2 -2
- package/dist/src/commands/team/team.js +12 -589
- package/dist/src/commands/workspace/workspace.js +3 -3
- package/dist/src/commands.js +0 -6
- package/dist/src/components/PromptInput/Notifications.js +1 -1
- package/dist/src/components/PromptInput/PromptInput.js +7 -3
- package/dist/src/hooks/useVoice.js +6 -1
- package/dist/src/services/api/errors.js +1 -1
- package/dist/src/services/api/openai.js +70 -22
- package/dist/src/services/api/withRetry.js +3 -2
- package/dist/src/services/localDictation.js +146 -3
- package/dist/src/tools/AgentTool/loadAgentsDir.js +9 -4
- package/dist/src/tools/AgentTool/providerAgents.js +71 -0
- package/dist/src/utils/model/model.js +2 -0
- package/docs/comandos.md +16 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -22,6 +22,38 @@ Luego abre tu proyecto y ejecuta:
|
|
|
22
22
|
context
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
+
## Flujo recomendado (Agent-First)
|
|
26
|
+
|
|
27
|
+
El flujo principal ahora se basa en `/agent`.
|
|
28
|
+
|
|
29
|
+
1. Abre el gestor de agentes:
|
|
30
|
+
|
|
31
|
+
```text
|
|
32
|
+
/agent
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
2. Crea agentes por rol (por ejemplo: `backend`, `frontend`, `qa`, `docs`).
|
|
36
|
+
3. Pide tu objetivo directamente en el hilo principal para que el sistema delegue automaticamente.
|
|
37
|
+
|
|
38
|
+
Comandos utiles de `/agent`:
|
|
39
|
+
|
|
40
|
+
- `/agent list [proveedor]`
|
|
41
|
+
- `/agent create <proveedor> <name> [profile]`
|
|
42
|
+
- `/agent setup <proveedor> [model] [profile]`
|
|
43
|
+
- `/agent show <proveedor> <name>`
|
|
44
|
+
- `/agent set-role <proveedor> <name> <role>`
|
|
45
|
+
- `/agent set-orchestrator <proveedor> <name> <true|false>`
|
|
46
|
+
- `/agent set-model <proveedor> <name> <model|clear>`
|
|
47
|
+
|
|
48
|
+
Ejemplos rapidos:
|
|
49
|
+
|
|
50
|
+
```text
|
|
51
|
+
/agent setup openai gpt-5
|
|
52
|
+
/agent setup claude opus
|
|
53
|
+
/agent setup zai
|
|
54
|
+
/agent list openai
|
|
55
|
+
```
|
|
56
|
+
|
|
25
57
|
## Dictado local
|
|
26
58
|
|
|
27
59
|
El CLI incluye dictado local con `whisper.cpp`, independiente del proveedor con el que estes logeado.
|
|
@@ -72,6 +72,7 @@ function getProviderLabel(provider) {
|
|
|
72
72
|
function buildUsageMessage() {
|
|
73
73
|
return [
|
|
74
74
|
'Uso: /agent, /agent list [proveedor], /agent create <proveedor> <name> [profile],',
|
|
75
|
+
'/agent setup <proveedor> [model] [profile],',
|
|
75
76
|
'/agent show <proveedor> <name>, /agent set-role <proveedor> <name> <role>,',
|
|
76
77
|
'/agent set-orchestrator <proveedor> <name> <true|false>, /agent set-model <proveedor> <name> <model|clear>',
|
|
77
78
|
].join(' ');
|
|
@@ -170,6 +171,52 @@ function parseModelArgs(args) {
|
|
|
170
171
|
const model = parseModelValue(tokens.slice(3));
|
|
171
172
|
return { provider, name, model };
|
|
172
173
|
}
|
|
174
|
+
const DEFAULT_BOOTSTRAP_SPECS = [
|
|
175
|
+
{ name: 'orchestrator', role: 'orchestrator', isOrchestrator: true },
|
|
176
|
+
{ name: 'backend', role: 'backend', isOrchestrator: false },
|
|
177
|
+
{ name: 'frontend', role: 'frontend', isOrchestrator: false },
|
|
178
|
+
{ name: 'qa', role: 'qa', isOrchestrator: false },
|
|
179
|
+
];
|
|
180
|
+
function parseBootstrapArgs(args) {
|
|
181
|
+
const tokens = args.trim().split(/\s+/).filter(Boolean);
|
|
182
|
+
if (tokens[0]?.toLowerCase() !== 'setup') {
|
|
183
|
+
return null;
|
|
184
|
+
}
|
|
185
|
+
const provider = parseProvider(tokens[1]);
|
|
186
|
+
if (!provider) {
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
const modelToken = tokens[2];
|
|
190
|
+
const profileToken = tokens.slice(3).join(' ').trim();
|
|
191
|
+
const parsedModel = modelToken && !['-', 'none', 'clear'].includes(modelToken.toLowerCase())
|
|
192
|
+
? modelToken.trim()
|
|
193
|
+
: null;
|
|
194
|
+
return {
|
|
195
|
+
provider,
|
|
196
|
+
model: parsedModel,
|
|
197
|
+
profileName: profileToken || undefined,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
async function bootstrapProviderAgents(params) {
|
|
201
|
+
const lines = [];
|
|
202
|
+
for (const spec of DEFAULT_BOOTSTRAP_SPECS) {
|
|
203
|
+
const existing = await getAgent(params.provider, spec.name);
|
|
204
|
+
const current = existing ??
|
|
205
|
+
(await createAgent({
|
|
206
|
+
provider: params.provider,
|
|
207
|
+
name: spec.name,
|
|
208
|
+
profileName: params.profileName,
|
|
209
|
+
}));
|
|
210
|
+
const roleUpdated = await setAgentRoleByName(params.provider, current.name, spec.role);
|
|
211
|
+
const orchestratorUpdated = await setAgentOrchestratorByName(params.provider, current.name, spec.isOrchestrator);
|
|
212
|
+
const modelUpdated = await setAgentModelByName(params.provider, current.name, params.model);
|
|
213
|
+
lines.push(`${existing ? 'actualizado' : 'creado'} ${params.provider}/${current.name} role=${roleUpdated?.roleKind ?? spec.role} orchestrator=${orchestratorUpdated?.isOrchestrator ? 'true' : 'false'} model=${modelUpdated?.modelOverride ?? 'sin override'}`);
|
|
214
|
+
}
|
|
215
|
+
return [
|
|
216
|
+
`Setup completado para ${getProviderLabel(params.provider)} (${DEFAULT_BOOTSTRAP_SPECS.length} agentes):`,
|
|
217
|
+
...lines,
|
|
218
|
+
].join('\n');
|
|
219
|
+
}
|
|
173
220
|
export const call = async (args, _context) => {
|
|
174
221
|
const trimmed = args.trim();
|
|
175
222
|
if (!trimmed || trimmed.toLowerCase() === 'list') {
|
|
@@ -213,6 +260,21 @@ export const call = async (args, _context) => {
|
|
|
213
260
|
};
|
|
214
261
|
}
|
|
215
262
|
}
|
|
263
|
+
const setupArgs = parseBootstrapArgs(trimmed);
|
|
264
|
+
if (setupArgs) {
|
|
265
|
+
try {
|
|
266
|
+
return {
|
|
267
|
+
type: 'text',
|
|
268
|
+
value: await bootstrapProviderAgents(setupArgs),
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
catch (error) {
|
|
272
|
+
return {
|
|
273
|
+
type: 'text',
|
|
274
|
+
value: `No se pudo ejecutar setup: ${error instanceof Error ? error.message : String(error)}`,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
}
|
|
216
278
|
const showArgs = parseShowArgs(trimmed);
|
|
217
279
|
if (showArgs) {
|
|
218
280
|
const agent = await getAgent(showArgs.provider, showArgs.name);
|
|
@@ -3,7 +3,7 @@ const agent = {
|
|
|
3
3
|
supportsNonInteractive: true,
|
|
4
4
|
name: 'agent',
|
|
5
5
|
description: 'Gestionar agentes por proveedor',
|
|
6
|
-
argumentHint: '[list [proveedor]|create <proveedor> <name> [profile]|show <proveedor> <name>|set-role <proveedor> <name> <role>|set-orchestrator <proveedor> <name> <true|false>|set-model <proveedor> <name> <model|clear>]',
|
|
6
|
+
argumentHint: '[list [proveedor]|create <proveedor> <name> [profile]|setup <proveedor> [model] [profile]|show <proveedor> <name>|set-role <proveedor> <name> <role>|set-orchestrator <proveedor> <name> <true|false>|set-model <proveedor> <name> <model|clear>]',
|
|
7
7
|
load: () => import('./agent.js'),
|
|
8
8
|
};
|
|
9
9
|
export default agent;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
const orchestrate = {
|
|
2
2
|
type: 'local-jsx',
|
|
3
3
|
name: 'orchestrate',
|
|
4
|
-
description: '
|
|
5
|
-
argumentHint: '
|
|
4
|
+
description: 'Transicion: el hilo principal ya orquesta en modo agent-first',
|
|
5
|
+
argumentHint: '[migrado a /agent + prompt directo]',
|
|
6
6
|
load: () => import('./orchestrate.js'),
|
|
7
7
|
};
|
|
8
8
|
export default orchestrate;
|