@iaforged/context-code 1.1.7 → 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.
@@ -1,628 +1,13 @@
1
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
- import * as React from 'react';
3
- import { Box, Text, useInput } from '../../ink.js';
4
- import { createGlobalOrchestratorRuntime, createSquadOrchestratorRuntime, resumeOrchestrationRun, } from '../../services/orchestration/index.js';
5
- import { createOrchestrationMessage, createOrchestrationRun, createOrchestrationTask, getOrchestrationRunById, getProviderAgentById, getProviderWorkspaceById, getTeamByName, listOrchestrationMessages, listOrchestrationTasks, listTeamDomainMembers, listTeamDomains, } from '../../utils/orchestration/store/index.js';
6
- function parseArgs(args) {
7
- const trimmed = args.trim();
8
- if (!trimmed) {
9
- return null;
10
- }
11
- const [teamName, ...rest] = trimmed.split(/\s+/);
12
- const objective = rest.join(' ').trim();
13
- if (!teamName || !objective) {
14
- return null;
15
- }
16
- return { teamName, objective };
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Text } from '../../ink.js';
3
+ export async function call(onDone, _context) {
4
+ onDone([
5
+ '/orchestrate esta en transicion a modo agent-first.',
6
+ 'Usa /agent para crear roles y luego pide el objetivo directamente en el hilo principal.',
7
+ 'Ejemplos:',
8
+ '- /agent',
9
+ '- "crea agentes backend, frontend y qa"',
10
+ '- "implementa esta funcionalidad y delega en los agentes disponibles"',
11
+ ].join('\n'));
12
+ return _jsx(Text, { dimColor: true, children: "/orchestrate migrado a agent-first." });
17
13
  }
18
- function roleFromDuty(duty) {
19
- const normalized = duty?.trim().toLowerCase();
20
- switch (normalized) {
21
- case 'planner':
22
- case 'plan':
23
- case 'planning':
24
- return 'planner';
25
- case 'validator':
26
- case 'reviewer':
27
- case 'review':
28
- case 'qa':
29
- return 'validator';
30
- case 'researcher':
31
- case 'research':
32
- case 'investigator':
33
- return 'researcher';
34
- case 'observer':
35
- case 'watcher':
36
- return 'observer';
37
- default:
38
- return 'executor';
39
- }
40
- }
41
- function buildAgentLabel(provider, name) {
42
- return `${provider}/${name}`;
43
- }
44
- function appendUniqueMember(members, candidate) {
45
- if (members.some(member => member.id === candidate.id)) {
46
- return;
47
- }
48
- members.push(candidate);
49
- }
50
- async function buildDomainContexts(teamId) {
51
- const domains = await listTeamDomains(teamId);
52
- const contexts = [];
53
- for (const domain of domains) {
54
- const warnings = [];
55
- const members = [];
56
- const workspace = domain.workspaceId
57
- ? await getProviderWorkspaceById(domain.workspaceId)
58
- : null;
59
- const workspaceLabel = workspace
60
- ? `${workspace.displayName} (${workspace.provider})`
61
- : 'sin workspace';
62
- const workspaceEnabled = workspace?.isEnabled ?? false;
63
- if (!workspace) {
64
- warnings.push('No tiene workspace asignado.');
65
- }
66
- else if (!workspace.isEnabled) {
67
- warnings.push(`El workspace ${workspace.displayName} esta deshabilitado.`);
68
- }
69
- const localOrchestrator = domain.localOrchestratorAgentId
70
- ? await getProviderAgentById(domain.localOrchestratorAgentId)
71
- : null;
72
- if (domain.localOrchestratorAgentId && !localOrchestrator) {
73
- warnings.push('El orquestador local configurado ya no existe.');
74
- }
75
- const leadAgent = domain.leadAgentId
76
- ? await getProviderAgentById(domain.leadAgentId)
77
- : null;
78
- if (domain.leadAgentId && !leadAgent) {
79
- warnings.push('El lead agent configurado ya no existe.');
80
- }
81
- if (localOrchestrator) {
82
- const orchestratorWorkspace = await getProviderWorkspaceById(localOrchestrator.workspaceId);
83
- appendUniqueMember(members, {
84
- id: localOrchestrator.id,
85
- name: buildAgentLabel(orchestratorWorkspace?.provider ?? 'unknown', localOrchestrator.name),
86
- role: 'planner',
87
- providerHint: orchestratorWorkspace?.provider,
88
- enabled: localOrchestrator.isEnabled,
89
- });
90
- if (!localOrchestrator.isEnabled) {
91
- warnings.push(`El orquestador local ${localOrchestrator.name} esta deshabilitado.`);
92
- }
93
- }
94
- if (leadAgent) {
95
- const leadWorkspace = await getProviderWorkspaceById(leadAgent.workspaceId);
96
- appendUniqueMember(members, {
97
- id: leadAgent.id,
98
- name: buildAgentLabel(leadWorkspace?.provider ?? 'unknown', leadAgent.name),
99
- role: leadAgent.isOrchestrator ? 'planner' : 'executor',
100
- providerHint: leadWorkspace?.provider,
101
- enabled: leadAgent.isEnabled,
102
- });
103
- if (!leadAgent.isEnabled) {
104
- warnings.push(`El lead agent ${leadAgent.name} esta deshabilitado.`);
105
- }
106
- }
107
- const domainMembers = await listTeamDomainMembers(domain.id);
108
- for (const member of domainMembers) {
109
- const agent = await getProviderAgentById(member.agentId);
110
- if (!agent) {
111
- warnings.push(`Un miembro del equipo ya no existe: ${member.agentId}`);
112
- continue;
113
- }
114
- const memberWorkspace = await getProviderWorkspaceById(agent.workspaceId);
115
- appendUniqueMember(members, {
116
- id: agent.id,
117
- name: buildAgentLabel(memberWorkspace?.provider ?? 'unknown', agent.name),
118
- role: roleFromDuty(member.duty),
119
- providerHint: memberWorkspace?.provider,
120
- enabled: agent.isEnabled,
121
- });
122
- if (!agent.isEnabled) {
123
- warnings.push(`El miembro ${agent.name} esta deshabilitado.`);
124
- }
125
- }
126
- const assignedAgent = localOrchestrator ?? leadAgent ?? null;
127
- if (!assignedAgent) {
128
- warnings.push('No hay agente asignable para este equipo.');
129
- }
130
- const assignedWorkspace = assignedAgent
131
- ? await getProviderWorkspaceById(assignedAgent.workspaceId)
132
- : null;
133
- const localOrchestratorWorkspace = localOrchestrator
134
- ? await getProviderWorkspaceById(localOrchestrator.workspaceId)
135
- : null;
136
- const leadAgentWorkspace = leadAgent
137
- ? await getProviderWorkspaceById(leadAgent.workspaceId)
138
- : null;
139
- contexts.push({
140
- domainId: domain.id,
141
- domainName: domain.domainName,
142
- selectionMode: domain.selectionMode,
143
- required: domain.required,
144
- workspaceLabel,
145
- workspaceEnabled,
146
- localOrchestratorId: localOrchestrator?.id ?? null,
147
- localOrchestratorLabel: localOrchestrator && localOrchestratorWorkspace
148
- ? buildAgentLabel(localOrchestratorWorkspace.provider, localOrchestrator.name)
149
- : localOrchestrator?.name ?? null,
150
- leadAgentId: leadAgent?.id ?? null,
151
- leadAgentLabel: leadAgent && leadAgentWorkspace
152
- ? buildAgentLabel(leadAgentWorkspace.provider, leadAgent.name)
153
- : leadAgent?.name ?? null,
154
- assignedAgentId: assignedAgent?.id ?? null,
155
- assignedAgentLabel: assignedAgent && assignedWorkspace
156
- ? buildAgentLabel(assignedWorkspace.provider, assignedAgent.name)
157
- : assignedAgent?.name ?? null,
158
- members,
159
- validationWarnings: warnings,
160
- });
161
- }
162
- return contexts;
163
- }
164
- function buildGlobalSummary(goal, planSummary, contexts) {
165
- const lines = [
166
- `Objetivo: ${goal}`,
167
- `Resumen global: ${planSummary}`,
168
- `Equipos detectados: ${contexts.length}`,
169
- '',
170
- 'Equipos planificados:',
171
- ];
172
- for (const context of contexts) {
173
- lines.push(`- ${context.domainName} -> workspace=${context.workspaceLabel} | assigned=${context.assignedAgentLabel ?? 'sin asignar'} | members=${context.members.length} | mode=${context.selectionMode}`);
174
- }
175
- return lines.join('\n');
176
- }
177
- function buildDomainInstructions(teamName, objective, context, squadPlanSummary) {
178
- const lines = [
179
- `Team: ${teamName}`,
180
- `Equipo: ${context.domainName}`,
181
- `Objetivo global: ${objective}`,
182
- `Workspace: ${context.workspaceLabel}`,
183
- `Modo de seleccion: ${context.selectionMode}`,
184
- `Resumen del squad: ${squadPlanSummary}`,
185
- '',
186
- 'Miembros del escuadron:',
187
- ];
188
- if (context.members.length === 0) {
189
- lines.push('- sin miembros');
190
- lines.push('');
191
- lines.push('Autonomia del escuadron:');
192
- lines.push(`- El orquestador/lead del equipo ${context.domainName} debe asumir roles internos temporales segun la funcion principal del equipo.`);
193
- lines.push('- Debe explicar que roles asumio, que hizo cada rol y que falta para completar el equipo.');
194
- }
195
- else {
196
- for (const member of context.members) {
197
- lines.push(`- ${member.name} [${member.role}]${member.enabled ? '' : ' (disabled)'}`);
198
- }
199
- }
200
- if (context.validationWarnings.length > 0) {
201
- lines.push('');
202
- lines.push('Advertencias:');
203
- for (const warning of context.validationWarnings) {
204
- lines.push(`- ${warning}`);
205
- }
206
- }
207
- lines.push('');
208
- lines.push('Fase 2 temprana: esta tarea representa la delegacion inicial persistida en SQLite; la ejecucion distribuida real llegara en una fase posterior.');
209
- return lines.join('\n');
210
- }
211
- function formatIssues(prefix, issues) {
212
- if (issues.length === 0) {
213
- return [];
214
- }
215
- return issues.map(issue => `- ${prefix}: ${issue.severity} -> ${issue.message}`);
216
- }
217
- function buildConfigurationChecklist(teamName, contexts) {
218
- const lines = [];
219
- for (const context of contexts) {
220
- if (!context.workspaceEnabled) {
221
- lines.push(`- ${context.domainName}: habilita el workspace/proveedor antes de ejecutar.`);
222
- }
223
- if (!context.localOrchestratorId) {
224
- lines.push(`- ${context.domainName}: falta orquestador local. Usa /team equipo ${teamName} ${context.domainName} <provider>/<agent>`);
225
- }
226
- if (!context.leadAgentId) {
227
- lines.push(`- ${context.domainName}: falta lead. Usa /team equipo ${teamName} ${context.domainName} <provider>/<agent>`);
228
- }
229
- if (context.members.length === 0 && context.assignedAgentId) {
230
- lines.push(`- ${context.domainName}: modo autonomo. ${context.assignedAgentLabel ?? 'el orquestador local'} asignara roles internos; miembros extra son opcionales.`);
231
- }
232
- }
233
- return lines;
234
- }
235
- async function planRun(args) {
236
- const parsed = parseArgs(args);
237
- if (!parsed) {
238
- return { error: 'Uso: /orchestrate <team> <objetivo>' };
239
- }
240
- const team = await getTeamByName(parsed.teamName);
241
- if (!team) {
242
- return { error: `No existe el team ${parsed.teamName}.` };
243
- }
244
- if (!team.isEnabled) {
245
- return { error: `El team ${team.name} esta deshabilitado.` };
246
- }
247
- if (!team.globalOrchestratorAgentId) {
248
- return {
249
- error: `El team ${team.name} no tiene orquestador global. Usa /team orchestrator primero.`,
250
- };
251
- }
252
- const globalAgent = await getProviderAgentById(team.globalOrchestratorAgentId);
253
- if (!globalAgent) {
254
- return { error: `El orquestador global configurado ya no existe para ${team.name}.` };
255
- }
256
- const globalWorkspace = await getProviderWorkspaceById(globalAgent.workspaceId);
257
- const globalLabel = globalWorkspace
258
- ? `${globalWorkspace.provider}/${globalAgent.name}`
259
- : globalAgent.name;
260
- const domains = await listTeamDomains(team.id);
261
- if (domains.length === 0) {
262
- return {
263
- error: `El team ${team.name} no tiene equipos configurados. Usa /team equipo primero.`,
264
- };
265
- }
266
- const globalRuntime = createGlobalOrchestratorRuntime('phase-2-early');
267
- const globalValidation = await globalRuntime.validate({
268
- objective: parsed.objective,
269
- scope: 'global',
270
- context: `team:${team.name}`,
271
- notes: `domains:${domains.length}`,
272
- });
273
- if (!globalValidation.valid) {
274
- return {
275
- error: [
276
- `La orquestacion fue rechazada para ${team.name}.`,
277
- ...formatIssues('global', globalValidation.issues),
278
- ].join('\n'),
279
- };
280
- }
281
- const domainContexts = await buildDomainContexts(team.id);
282
- const configurationChecklist = buildConfigurationChecklist(team.name, domainContexts);
283
- const globalPlan = await globalRuntime.plan({
284
- objective: parsed.objective,
285
- scope: 'global',
286
- context: `team:${team.name}`,
287
- notes: `domains:${domainContexts.length}`,
288
- allowExecution: false,
289
- });
290
- const run = await createOrchestrationRun({
291
- teamId: team.id,
292
- goal: parsed.objective,
293
- globalOrchestratorAgentId: globalAgent.id,
294
- status: 'planned',
295
- });
296
- await createOrchestrationMessage({
297
- runId: run.id,
298
- fromAgentId: globalAgent.id,
299
- messageType: 'global-plan',
300
- content: buildGlobalSummary(parsed.objective, globalPlan.summary, domainContexts),
301
- });
302
- const taskSummaries = [];
303
- let readyCount = 0;
304
- let blockedCount = 0;
305
- const validationWarnings = [...formatIssues('global', globalValidation.issues)];
306
- for (const context of domainContexts) {
307
- const squadRuntime = createSquadOrchestratorRuntime(context.members);
308
- const squadValidation = await squadRuntime.validate({
309
- objective: parsed.objective,
310
- squadName: context.domainName,
311
- members: context.members,
312
- scope: 'squad',
313
- context: `team:${team.name};domain:${context.domainName}`,
314
- });
315
- const squadPlan = await squadRuntime.plan({
316
- objective: parsed.objective,
317
- squadName: context.domainName,
318
- members: context.members,
319
- scope: 'squad',
320
- context: `team:${team.name};domain:${context.domainName}`,
321
- allowExecution: false,
322
- });
323
- const taskStatus = context.assignedAgentId && context.workspaceEnabled && squadValidation.valid
324
- ? 'ready'
325
- : 'blocked';
326
- if (taskStatus === 'ready') {
327
- readyCount += 1;
328
- }
329
- else {
330
- blockedCount += 1;
331
- }
332
- const task = await createOrchestrationTask({
333
- runId: run.id,
334
- scopeType: 'domain',
335
- teamDomainId: context.domainId,
336
- assignedAgentId: context.assignedAgentId,
337
- title: `Equipo ${context.domainName}`,
338
- instructions: buildDomainInstructions(team.name, parsed.objective, context, squadPlan.summary),
339
- status: taskStatus,
340
- resultSummary: taskStatus === 'blocked'
341
- ? 'Pendiente por validacion/configuracion del equipo.'
342
- : 'Delegacion inicial preparada.',
343
- });
344
- await createOrchestrationMessage({
345
- runId: run.id,
346
- taskId: task.id,
347
- fromAgentId: globalAgent.id,
348
- toAgentId: context.assignedAgentId,
349
- messageType: 'squad-plan',
350
- content: [
351
- `Equipo: ${context.domainName}`,
352
- `Asignado: ${context.assignedAgentLabel ?? 'sin asignar'}`,
353
- `Resumen: ${squadPlan.summary}`,
354
- '',
355
- ...context.validationWarnings.map(warning => `- ${warning}`),
356
- ...formatIssues('squad', squadValidation.issues),
357
- ]
358
- .filter(Boolean)
359
- .join('\n'),
360
- });
361
- validationWarnings.push(...context.validationWarnings.map(warning => `- ${context.domainName}: warning -> ${warning}`), ...formatIssues(context.domainName, squadValidation.issues));
362
- taskSummaries.push(`- ${context.domainName} -> ${task.status} | assigned=${context.assignedAgentLabel ?? 'sin asignar'} | task=${task.id}`);
363
- }
364
- return {
365
- ok: {
366
- run,
367
- team,
368
- globalLabel,
369
- taskSummaries,
370
- validationWarnings,
371
- configurationChecklist,
372
- hasReadyTasks: readyCount > 0,
373
- hasBlockedTasks: blockedCount > 0,
374
- readyCount,
375
- blockedCount,
376
- domainContexts,
377
- },
378
- };
379
- }
380
- function buildPlanOnlyMessage(plan) {
381
- const lines = [
382
- `Ejecucion creada: ${plan.run.id}`,
383
- `Team: ${plan.team.name}`,
384
- `Objetivo: ${plan.run.goal}`,
385
- `Orquestador global: ${plan.globalLabel}`,
386
- `Estado inicial: ${plan.run.status}`,
387
- '',
388
- 'Tareas por equipo:',
389
- ...plan.taskSummaries,
390
- ];
391
- if (plan.validationWarnings.length > 0) {
392
- lines.push('', 'Advertencias y validaciones:');
393
- lines.push(...plan.validationWarnings);
394
- }
395
- if (plan.configurationChecklist.length > 0) {
396
- lines.push('', 'Estado de configuracion del equipo:');
397
- lines.push(...plan.configurationChecklist);
398
- }
399
- lines.push('', 'Siguientes pasos:');
400
- lines.push(`- Revisar plan: /run show ${plan.run.id}`);
401
- if (plan.hasReadyTasks) {
402
- lines.push(`- Ejecutar tareas listas: /run resume ${plan.run.id}`);
403
- }
404
- if (plan.hasBlockedTasks) {
405
- lines.push(`- Si hay equipos blocked, asigna un agente con /team equipo <team> <equipo> <provider>/<agent> y luego usa /run retry ${plan.run.id}`);
406
- }
407
- return lines.join('\n');
408
- }
409
- function buildExecutionReport(plan, finalRun, finalTasks, finalMessages, errorMessage) {
410
- const counts = {};
411
- for (const task of finalTasks) {
412
- counts[task.status] = (counts[task.status] ?? 0) + 1;
413
- }
414
- const countsLine = Object.entries(counts)
415
- .map(([status, n]) => `${status}=${n}`)
416
- .sort()
417
- .join(' | ');
418
- const lines = [
419
- `Ejecucion finalizada: ${finalRun.id}`,
420
- `Team: ${plan.team.name}`,
421
- `Objetivo: ${finalRun.goal}`,
422
- `Estado final: ${finalRun.status}`,
423
- `Resumen tareas: ${countsLine || 'sin tareas'}`,
424
- ];
425
- const reportMessages = finalMessages
426
- .filter(message => ['run-report', 'task.completed', 'domain-report'].includes(message.messageType))
427
- .slice(-6);
428
- if (reportMessages.length > 0) {
429
- lines.push('', 'Reportes:');
430
- for (const message of reportMessages) {
431
- const head = message.content.split('\n').slice(0, 4).join('\n');
432
- lines.push(`- [${message.messageType}] ${head}`);
433
- }
434
- }
435
- if (errorMessage) {
436
- lines.push('', `Error durante la ejecucion: ${errorMessage}`);
437
- }
438
- lines.push('', `Siguientes pasos: /run show ${finalRun.id} | /run messages ${finalRun.id} | /run task <task-id>`);
439
- return lines.join('\n');
440
- }
441
- function buildInitialDomainExecutionView(plan) {
442
- return plan.domainContexts.map(context => {
443
- const isReady = Boolean(context.assignedAgentId && context.workspaceEnabled);
444
- return {
445
- domainName: context.domainName,
446
- agentLabel: context.assignedAgentLabel ?? 'sin asignar',
447
- status: isReady ? 'waiting' : 'blocked',
448
- detail: isReady
449
- ? 'en espera de ejecucion'
450
- : context.validationWarnings[0] ?? 'requiere configuracion',
451
- progressPercent: 0,
452
- };
453
- });
454
- }
455
- function toDomainStatus(phase) {
456
- switch (phase) {
457
- case 'dispatching':
458
- return 'dispatching';
459
- case 'executing':
460
- return 'executing';
461
- case 'completed':
462
- return 'completed';
463
- case 'failed':
464
- return 'failed';
465
- case 'blocked':
466
- return 'blocked';
467
- default:
468
- return 'waiting';
469
- }
470
- }
471
- function formatDomainStatus(status) {
472
- switch (status) {
473
- case 'waiting':
474
- return 'en cola';
475
- case 'dispatching':
476
- return 'asignando';
477
- case 'executing':
478
- return 'trabajando';
479
- case 'completed':
480
- return 'terminado';
481
- case 'failed':
482
- return 'fallo';
483
- case 'blocked':
484
- return 'bloqueado';
485
- case 'skipped':
486
- return 'omitido';
487
- }
488
- }
489
- function statusColor(status) {
490
- switch (status) {
491
- case 'completed':
492
- return 'green';
493
- case 'dispatching':
494
- case 'executing':
495
- return 'cyan';
496
- case 'blocked':
497
- case 'skipped':
498
- return 'yellow';
499
- case 'failed':
500
- return 'red';
501
- default:
502
- return undefined;
503
- }
504
- }
505
- function PlanReview({ plan, onDone, }) {
506
- const [phase, setPhase] = React.useState('review');
507
- const [progress, setProgress] = React.useState(null);
508
- const [domainStates, setDomainStates] = React.useState(() => buildInitialDomainExecutionView(plan));
509
- const [error, setError] = React.useState(null);
510
- React.useEffect(() => {
511
- if (phase !== 'executing')
512
- return;
513
- let cancelled = false;
514
- void (async () => {
515
- let errorMessage = null;
516
- try {
517
- await resumeOrchestrationRun(plan.run.id, {
518
- onProgress: event => {
519
- if (cancelled)
520
- return;
521
- const nextProgress = {
522
- taskId: event.taskId,
523
- phase: event.phase,
524
- domainName: event.domainName,
525
- agentLabel: event.agentLabel,
526
- detail: event.detail,
527
- progressPercent: event.progressPercent,
528
- };
529
- setProgress(nextProgress);
530
- if (event.domainName) {
531
- setDomainStates(prev => prev.map(domain => {
532
- if (domain.domainName !== event.domainName) {
533
- return domain;
534
- }
535
- return {
536
- ...domain,
537
- agentLabel: event.agentLabel ?? domain.agentLabel,
538
- status: toDomainStatus(event.phase),
539
- detail: event.detail ?? domain.detail,
540
- progressPercent: event.progressPercent == null
541
- ? domain.progressPercent
542
- : Math.round(event.progressPercent),
543
- };
544
- }));
545
- }
546
- },
547
- });
548
- }
549
- catch (e) {
550
- errorMessage = e instanceof Error ? e.message : String(e);
551
- if (!cancelled) {
552
- setError(errorMessage);
553
- }
554
- }
555
- if (cancelled)
556
- return;
557
- try {
558
- const [finalTasks, finalMessages, finalRun] = await Promise.all([
559
- listOrchestrationTasks(plan.run.id),
560
- listOrchestrationMessages(plan.run.id),
561
- getOrchestrationRunById(plan.run.id),
562
- ]);
563
- const report = buildExecutionReport(plan, finalRun ?? plan.run, finalTasks, finalMessages, errorMessage);
564
- setPhase('done');
565
- onDone(report);
566
- }
567
- catch (e) {
568
- setPhase('done');
569
- const fallbackErr = e instanceof Error ? e.message : String(e);
570
- onDone([
571
- buildPlanOnlyMessage(plan),
572
- '',
573
- `No se pudo recolectar el reporte final: ${fallbackErr}`,
574
- errorMessage ? `Error de ejecucion previo: ${errorMessage}` : null,
575
- ]
576
- .filter(Boolean)
577
- .join('\n'));
578
- }
579
- })();
580
- return () => {
581
- cancelled = true;
582
- };
583
- }, [phase, plan, onDone]);
584
- useInput((_input, key) => {
585
- if (phase !== 'review')
586
- return;
587
- if (key.return) {
588
- setDomainStates(buildInitialDomainExecutionView(plan));
589
- setProgress(null);
590
- setError(null);
591
- setPhase('executing');
592
- }
593
- else if (key.escape) {
594
- onDone(buildPlanOnlyMessage(plan));
595
- }
596
- }, { isActive: phase === 'review' });
597
- if (phase === 'review') {
598
- return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { bold: true, children: ["Plan listo para ", plan.team.name] }), _jsxs(Text, { children: ["Ejecucion: ", plan.run.id] }), _jsxs(Text, { children: ["Objetivo: ", plan.run.goal] }), _jsxs(Text, { children: ["Orquestador global: ", plan.globalLabel] }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, children: "Tareas por equipo" }), plan.taskSummaries.map((line, i) => (_jsx(Text, { children: line }, i)))] }), _jsx(Box, { marginTop: 1, flexDirection: "column", children: _jsxs(Text, { children: ["Listas: ", _jsx(Text, { color: "green", children: plan.readyCount }), " | Bloqueadas:", ' ', _jsx(Text, { color: plan.blockedCount > 0 ? 'yellow' : undefined, children: plan.blockedCount })] }) }), plan.validationWarnings.length > 0 ? (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, color: "yellow", children: "Advertencias" }), plan.validationWarnings.map((line, i) => (_jsx(Text, { color: "yellow", children: line }, i)))] })) : null, plan.configurationChecklist.length > 0 ? (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, children: "Estado de configuracion" }), plan.configurationChecklist.map((line, i) => (_jsx(Text, { children: line }, i)))] })) : null, _jsx(Box, { marginTop: 1, children: _jsxs(Text, { dimColor: true, children: ["[Enter] Ejecutar ahora", plan.hasBlockedTasks ? ' (las bloqueadas se omiten)' : '', " | [Esc] Solo planificar"] }) })] }));
599
- }
600
- if (phase === 'executing') {
601
- const progressLine = progress
602
- ? [
603
- progress.phase,
604
- progress.domainName ? `equipo=${progress.domainName}` : null,
605
- progress.agentLabel ? `agente=${progress.agentLabel}` : null,
606
- progress.detail,
607
- progress.progressPercent != null ? `${Math.round(progress.progressPercent)}%` : null,
608
- ]
609
- .filter(Boolean)
610
- .join(' | ')
611
- : 'preparando ejecucion...';
612
- return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { bold: true, children: ["Ejecutando orquestacion ", plan.run.id] }), _jsxs(Text, { children: ["Team: ", plan.team.name] }), _jsx(Text, { children: progressLine }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, children: "Equipos y agentes" }), domainStates.map(domain => (_jsxs(Text, { color: statusColor(domain.status), children: [domain.domainName.padEnd(10), " | ", formatDomainStatus(domain.status).padEnd(10), " | ", domain.progressPercent.toString().padStart(3), "% | ", domain.agentLabel, " | ", domain.detail] }, domain.domainName)))] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "La ejecucion avanza por equipos listos; las tareas bloqueadas quedan para corregir y reintentar." }) }), error ? _jsxs(Text, { color: "red", children: ["Error: ", error] }) : null] }));
613
- }
614
- return (_jsx(Box, { flexDirection: "column", children: _jsxs(Text, { children: ["Ejecucion ", plan.run.id, " terminada."] }) }));
615
- }
616
- export const call = async (onDone, _context, args) => {
617
- const result = await planRun(args ?? '');
618
- if ('error' in result) {
619
- onDone(result.error);
620
- return null;
621
- }
622
- const plan = result.ok;
623
- if (!plan.hasReadyTasks) {
624
- onDone(buildPlanOnlyMessage(plan));
625
- return null;
626
- }
627
- return _jsx(PlanReview, { plan: plan, onDone: onDone });
628
- };
@@ -2,7 +2,7 @@ const tasks = {
2
2
  type: 'local-jsx',
3
3
  name: 'tasks',
4
4
  aliases: ['bashes'],
5
- description: 'Listar y gestionar tareas en segundo plano',
5
+ description: 'Transicion: despriorizado en modo agent-first',
6
6
  load: () => import('./tasks.js'),
7
7
  };
8
8
  export default tasks;
@@ -1,5 +1,10 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { BackgroundTasksDialog } from '../../components/tasks/BackgroundTasksDialog.js';
3
- export async function call(onDone, context) {
4
- return _jsx(BackgroundTasksDialog, { toolUseContext: context, onDone: onDone });
2
+ import { Text } from '../../ink.js';
3
+ export async function call(onDone, _context) {
4
+ onDone([
5
+ '/tasks ya no es el flujo principal en modo agent-first.',
6
+ 'Para trabajar, crea/ajusta agentes con /agent y pide el objetivo directamente.',
7
+ 'El hilo principal se encarga de la delegacion.',
8
+ ].join('\n'));
9
+ return _jsx(Text, { dimColor: true, children: "/tasks despriorizado en agent-first." });
5
10
  }
@@ -2,8 +2,8 @@ export default {
2
2
  aliases: ['teams'],
3
3
  type: 'local-jsx',
4
4
  name: 'team',
5
- description: 'Gestiona equipos de swarm y sus perfiles de provider/agente',
6
- argumentHint: '[list|create <name>|show <name>|orchestrator|equipo <team> <equipo> <provider>/<agent>|add-member <team> <equipo> <provider>/<agent> [duty]]',
5
+ description: 'Transicion: usa /agent para configurar roles y delegacion',
6
+ argumentHint: '[migrado a /agent]',
7
7
  isEnabled: () => true,
8
8
  load: () => import('./team.js'),
9
9
  };