@gjczone/pi-swarm 0.5.0 → 0.7.1

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 (68) hide show
  1. package/README.md +14 -21
  2. package/dist/index.d.ts +2 -12
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +3 -18
  5. package/dist/index.js.map +1 -1
  6. package/dist/shared/controller.d.ts +10 -1
  7. package/dist/shared/controller.d.ts.map +1 -1
  8. package/dist/shared/controller.js +48 -12
  9. package/dist/shared/controller.js.map +1 -1
  10. package/dist/shared/render.d.ts +1 -1
  11. package/dist/shared/render.js +1 -1
  12. package/dist/shared/spawner.js +54 -8
  13. package/dist/shared/spawner.js.map +1 -1
  14. package/dist/shared/types.d.ts +10 -0
  15. package/dist/shared/types.d.ts.map +1 -1
  16. package/dist/shared/worktree.d.ts +2 -1
  17. package/dist/shared/worktree.d.ts.map +1 -1
  18. package/dist/shared/worktree.js +10 -4
  19. package/dist/shared/worktree.js.map +1 -1
  20. package/dist/state/recovery.d.ts.map +1 -1
  21. package/dist/state/recovery.js +25 -4
  22. package/dist/state/recovery.js.map +1 -1
  23. package/dist/swarm/command.d.ts +4 -5
  24. package/dist/swarm/command.d.ts.map +1 -1
  25. package/dist/swarm/command.js +26 -74
  26. package/dist/swarm/command.js.map +1 -1
  27. package/dist/swarm/mode.d.ts +1 -1
  28. package/dist/swarm/mode.js +2 -2
  29. package/dist/swarm/mode.js.map +1 -1
  30. package/dist/swarm/tool.d.ts +4 -4
  31. package/dist/swarm/tool.d.ts.map +1 -1
  32. package/dist/swarm/tool.js +112 -167
  33. package/dist/swarm/tool.js.map +1 -1
  34. package/dist/team/command.d.ts +2 -4
  35. package/dist/team/command.d.ts.map +1 -1
  36. package/dist/team/command.js +5 -13
  37. package/dist/team/command.js.map +1 -1
  38. package/dist/team/mailbox.d.ts +7 -2
  39. package/dist/team/mailbox.d.ts.map +1 -1
  40. package/dist/team/mailbox.js +121 -32
  41. package/dist/team/mailbox.js.map +1 -1
  42. package/dist/tui/progress.d.ts +35 -47
  43. package/dist/tui/progress.d.ts.map +1 -1
  44. package/dist/tui/progress.js +245 -489
  45. package/dist/tui/progress.js.map +1 -1
  46. package/dist/tui/swarm-markers.d.ts +1 -1
  47. package/dist/tui/swarm-markers.js +1 -1
  48. package/package.json +13 -2
  49. package/dist/team/supervisor.d.ts +0 -171
  50. package/dist/team/supervisor.d.ts.map +0 -1
  51. package/dist/team/supervisor.js +0 -685
  52. package/dist/team/supervisor.js.map +0 -1
  53. package/dist/team/task-graph.d.ts +0 -64
  54. package/dist/team/task-graph.d.ts.map +0 -1
  55. package/dist/team/task-graph.js +0 -216
  56. package/dist/team/task-graph.js.map +0 -1
  57. package/dist/team/tool.d.ts +0 -11
  58. package/dist/team/tool.d.ts.map +0 -1
  59. package/dist/team/tool.js +0 -491
  60. package/dist/team/tool.js.map +0 -1
  61. package/dist/tui/permission-prompt.d.ts +0 -26
  62. package/dist/tui/permission-prompt.d.ts.map +0 -1
  63. package/dist/tui/permission-prompt.js +0 -98
  64. package/dist/tui/permission-prompt.js.map +0 -1
  65. package/dist/tui/team-dashboard.d.ts +0 -81
  66. package/dist/tui/team-dashboard.d.ts.map +0 -1
  67. package/dist/tui/team-dashboard.js +0 -657
  68. package/dist/tui/team-dashboard.js.map +0 -1
package/dist/team/tool.js DELETED
@@ -1,491 +0,0 @@
1
- /**
2
- * team/tool — SwarmTeam tool registration.
3
- *
4
- * Registers the `SwarmTeam` tool that the LLM can call to orchestrate
5
- * a team of role-based agents that collaborate via a shared mailbox.
6
- *
7
- * Inspired by pi-crew's team orchestration and CrewAI's hierarchical model.
8
- */
9
- import { Type } from "typebox";
10
- import { Container, Spacer, Text } from "@earendil-works/pi-tui";
11
- import { SubagentBatchController, } from "../shared/controller.js";
12
- import { spawnSubagent, resumeSubagent, retrySubagent, } from "../shared/spawner.js";
13
- import { mergeBranch, isGitRepository } from "../shared/worktree.js";
14
- import { resolveSwarmRoot, createManifest, readManifest, updateManifest, saveTaskState, updateHeartbeat, registerAgentInManifest, } from "../state/persistence.js";
15
- import { TeamSupervisor } from "./supervisor.js";
16
- import { TeamDashboardComponent, snapshotToDashboardState, } from "../tui/team-dashboard.js";
17
- // ---------------------------------------------------------------------------
18
- // Constants
19
- // ---------------------------------------------------------------------------
20
- const DEFAULT_SUBAGENT_TIMEOUT_MS = 30 * 60 * 1000;
21
- const TEAM_DASHBOARD_WIDGET_KEY = "pi-swarm-team-dashboard";
22
- const AGENT_TEAM_DESCRIPTION = [
23
- "Orchestrate role-based agents (explorer, planner, coder, reviewer, tester) with a shared mailbox.",
24
- "",
25
- "CRITICAL RULES:",
26
- "1. ONLY use when the user explicitly says 'team' or 'swarm-team'.",
27
- "2. For simple parallel tasks, use AgentSwarm instead.",
28
- "3. This tool MUST be the ONLY tool call in your response — do not batch.",
29
- "",
30
- "Default phases: explore -> plan -> implement -> review -> test.",
31
- "Use `phases` and `roles` to customize the workflow.",
32
- "Use `small_model` to route explorer/tester to a cheaper model.",
33
- ].join("\n");
34
- // ---------------------------------------------------------------------------
35
- // Registration
36
- // ---------------------------------------------------------------------------
37
- export function registerSwarmTeamTool(pi) {
38
- pi.registerTool({
39
- name: "SwarmTeam",
40
- label: "Swarm Team",
41
- description: AGENT_TEAM_DESCRIPTION,
42
- parameters: Type.Object({
43
- goal: Type.String({
44
- description: "High-level goal for the team.",
45
- examples: ["Implement JWT authentication with refresh tokens"],
46
- }),
47
- description: Type.String({
48
- description: "Short description for the team run.",
49
- examples: ["Build auth system"],
50
- }),
51
- phases: Type.Optional(Type.Array(Type.Object({
52
- name: Type.String(),
53
- role: Type.String(),
54
- dependsOn: Type.Optional(Type.Array(Type.String())),
55
- modelTier: Type.Optional(Type.Union([Type.Literal("small"), Type.Literal("default")])),
56
- model: Type.Optional(Type.String()),
57
- tools: Type.Optional(Type.Array(Type.String())),
58
- }), {
59
- description: "Custom phase definitions. Defaults to explore/plan/implement/review/test.",
60
- examples: [
61
- [
62
- { name: "explore", role: "explorer" },
63
- { name: "plan", role: "planner", dependsOn: ["explore"] },
64
- { name: "implement", role: "coder", dependsOn: ["plan"] },
65
- ],
66
- ],
67
- })),
68
- roles: Type.Optional(Type.Array(Type.Object({
69
- role: Type.String(),
70
- model: Type.Optional(Type.String()),
71
- tools: Type.Optional(Type.Array(Type.String())),
72
- systemPrompt: Type.Optional(Type.String()),
73
- }), {
74
- description: "Custom role configurations with optional model/tools overrides.",
75
- examples: [
76
- [
77
- { role: "coder", model: "deepseek/deepseek-v4-pro" },
78
- { role: "explorer", tools: ["read", "bash", "grep"] },
79
- ],
80
- ],
81
- })),
82
- small_model: Type.Optional(Type.String({
83
- description: "Lightweight/fast model for exploration roles (e.g. explorer). Other roles use the default model.",
84
- examples: ["deepseek/deepseek-v4-flash"],
85
- })),
86
- max_agents: Type.Optional(Type.Number({
87
- description: "Max concurrent agents. Default 4.",
88
- examples: [6],
89
- })),
90
- }, { additionalProperties: false }),
91
- execute: async (toolCallId, params, signal, _onUpdate, ctxRaw) => {
92
- const p = params;
93
- const ctx = ctxRaw;
94
- const dashboard = createTeamDashboardWidget(ctx, p.description);
95
- // Persistent run state - declared outside try for catch access
96
- const swarmRoot = process.env.PI_SWARM_ROOT ?? resolveSwarmRoot(process.cwd());
97
- const runId = `team-${Date.now().toString(36)}`;
98
- let runCreated = false;
99
- let supervisor = null;
100
- try {
101
- // Build phase definitions
102
- const phases = p.phases?.map((ph) => ({
103
- name: ph.name,
104
- role: ph.role,
105
- dependsOn: ph.dependsOn,
106
- modelTier: ph.modelTier,
107
- model: ph.model,
108
- tools: ph.tools,
109
- }));
110
- // Validate phases (if provided)
111
- if (p.phases) {
112
- const phaseNames = new Set(p.phases.map((ph) => ph.name));
113
- const VALID_ROLES = new Set([
114
- "explorer",
115
- "planner",
116
- "coder",
117
- "reviewer",
118
- "tester",
119
- "fixer",
120
- ]);
121
- for (const ph of p.phases) {
122
- // Validate role
123
- if (!VALID_ROLES.has(ph.role)) {
124
- throw new Error(`Phase "${ph.name}" has invalid role "${ph.role}". ` +
125
- `Valid roles: ${[...VALID_ROLES].join(", ")}`);
126
- }
127
- // Validate dependsOn references
128
- if (ph.dependsOn) {
129
- for (const dep of ph.dependsOn) {
130
- if (!phaseNames.has(dep)) {
131
- throw new Error(`Phase "${ph.name}" depends on unknown phase "${dep}". ` +
132
- `Available phases: ${[...phaseNames].join(", ")}`);
133
- }
134
- }
135
- }
136
- }
137
- }
138
- // Build role configs
139
- const roles = p.roles?.map((r) => ({
140
- role: r.role,
141
- model: r.model,
142
- tools: r.tools,
143
- systemPrompt: r.systemPrompt,
144
- }));
145
- // Create supervisor
146
- supervisor = new TeamSupervisor({
147
- cwd: process.cwd(),
148
- swarmRoot,
149
- runId,
150
- goal: p.goal,
151
- phases,
152
- roles,
153
- smallModel: p.small_model,
154
- maxAgents: p.max_agents ?? 4,
155
- onProgress: (snapshot) => {
156
- dashboard?.component.update(snapshotToDashboardState(snapshot));
157
- },
158
- });
159
- // Create manifest and save initial state
160
- createManifest(swarmRoot, {
161
- runId,
162
- type: "team",
163
- status: "running",
164
- goal: p.goal,
165
- startedAt: Date.now(),
166
- agentIds: [],
167
- });
168
- runCreated = true;
169
- saveTaskState(swarmRoot, runId, supervisor.state.taskGraph.toJSON());
170
- // Run phases through the task graph — launch all ready phases concurrently
171
- // 业务说明:同时启动所有依赖已满足的阶段。独立阶段并行执行,
172
- // 有依赖的阶段在依赖完成后自动成为下一批。
173
- const allResults = [];
174
- const allBranches = [];
175
- const maxConcurrency = p.max_agents ?? 4;
176
- const repoCwd = process.cwd();
177
- const inGitRepo = isGitRepository(repoCwd);
178
- let currentPhases = supervisor.startReadyPhases();
179
- while (currentPhases.length > 0) {
180
- // Check abort signal between batches
181
- signal?.throwIfAborted();
182
- // Update heartbeat before batch
183
- updateHeartbeat(swarmRoot, runId);
184
- // Build tasks for all ready phases
185
- const tasks = currentPhases.map((cp, idx) => {
186
- const execConfig = supervisor.getPhaseExecutionConfig(cp.phase.phase.name);
187
- const phaseName = cp.phase.phase.name;
188
- const mailboxPath = supervisor.getMailboxPath();
189
- return {
190
- kind: "spawn",
191
- data: { phase: phaseName, role: cp.role },
192
- profileName: cp.role,
193
- parentToolCallId: toolCallId,
194
- prompt: cp.prompt,
195
- description: `${p.description} — ${phaseName} (${cp.role})`,
196
- swarmIndex: idx + 1,
197
- runInBackground: false,
198
- signal,
199
- timeout: DEFAULT_SUBAGENT_TIMEOUT_MS,
200
- model: execConfig.model,
201
- tools: execConfig.tools,
202
- cwd: execConfig.cwd,
203
- useWorktree: true,
204
- swarmRoot,
205
- runId,
206
- mailboxPath,
207
- roleName: cp.role,
208
- onUsage: (usage) => {
209
- supervisor?.updatePhaseUsage(phaseName, usage);
210
- },
211
- onMessage: (message) => {
212
- supervisor?.handleRealtimeMessage(cp.role, message);
213
- },
214
- };
215
- });
216
- const controller = new SubagentBatchController({
217
- spawn: spawnSubagent,
218
- resume: resumeSubagent,
219
- retry: retrySubagent,
220
- }, tasks, {
221
- maxConcurrency: Math.min(maxConcurrency, tasks.length),
222
- });
223
- let batchResults;
224
- try {
225
- batchResults = await controller.run();
226
- }
227
- catch (err) {
228
- // Batch was aborted or failed catastrophically
229
- // Mark all phases in this batch as failed
230
- for (const cp of currentPhases) {
231
- supervisor.failPhase(cp.phase.phase.name, err instanceof Error ? err.message : String(err));
232
- }
233
- // Save state after failure
234
- saveTaskState(swarmRoot, runId, supervisor.state.taskGraph.toJSON());
235
- // Abort signal: stop the entire run
236
- if (signal?.aborted) {
237
- supervisor.finalize();
238
- if (runCreated) {
239
- const m = readManifest(swarmRoot, runId);
240
- if (m) {
241
- m.status = "failed";
242
- m.completedAt = Date.now();
243
- m.error = "Aborted by user";
244
- updateManifest(swarmRoot, m);
245
- }
246
- }
247
- const partialOutput = supervisor.synthesizeResult();
248
- return {
249
- content: [{ type: "text", text: partialOutput }],
250
- details: undefined,
251
- };
252
- }
253
- // Non-abort error: try next batch
254
- currentPhases = supervisor.startReadyPhases();
255
- continue;
256
- }
257
- allResults.push(...batchResults);
258
- // Process each phase result
259
- for (let i = 0; i < currentPhases.length; i += 1) {
260
- const cp = currentPhases[i];
261
- const result = batchResults[i];
262
- if (result && result.status === "completed") {
263
- supervisor.assignAgent(cp.phase.phase.name, result.agentId ?? cp.phase.phase.name);
264
- supervisor.completePhase(cp.phase.phase.name, result.result ?? "", result.usage);
265
- if (result.agentId) {
266
- registerAgentInManifest(swarmRoot, runId, result.agentId);
267
- }
268
- if (result.worktreeBranch) {
269
- allBranches.push(result.worktreeBranch);
270
- }
271
- }
272
- else if (result) {
273
- supervisor.failPhase(cp.phase.phase.name, result.error ?? "Unknown error");
274
- if (result.agentId) {
275
- registerAgentInManifest(swarmRoot, runId, result.agentId);
276
- }
277
- }
278
- }
279
- // Save state after each batch
280
- saveTaskState(swarmRoot, runId, supervisor.state.taskGraph.toJSON());
281
- // Get next batch of ready phases
282
- currentPhases = supervisor.startReadyPhases();
283
- }
284
- // Finalize and render
285
- supervisor.finalize();
286
- // Auto-merge worktree branches back to original branch (in Git repos)
287
- // 业务说明:所有阶段完成后,按顺序合并子 agent 创建的分支。
288
- // 冲突时停止合并,保留分支供用户手动解决。
289
- const mergeResults = [];
290
- if (inGitRepo && allBranches.length > 0) {
291
- for (const branch of allBranches) {
292
- try {
293
- const mergeResult = mergeBranch(repoCwd, branch);
294
- if (mergeResult.success) {
295
- mergeResults.push(`Merged: ${branch}`);
296
- }
297
- else {
298
- mergeResults.push(`Merge failed for ${branch}: ${mergeResult.error}`);
299
- }
300
- }
301
- catch (err) {
302
- mergeResults.push(`Merge error for ${branch}: ${err instanceof Error ? err.message : String(err)}`);
303
- }
304
- }
305
- }
306
- // Mark run as completed
307
- if (runCreated) {
308
- const manifest = readManifest(swarmRoot, runId);
309
- if (manifest) {
310
- manifest.status = "completed";
311
- manifest.completedAt = Date.now();
312
- updateManifest(swarmRoot, manifest);
313
- }
314
- }
315
- dashboard?.component.complete();
316
- let output = supervisor.synthesizeResult();
317
- if (mergeResults.length > 0) {
318
- output += `\n\n<auto_merge>\n${mergeResults.join("\n")}\n</auto_merge>`;
319
- }
320
- return {
321
- content: [{ type: "text", text: output }],
322
- details: undefined,
323
- };
324
- }
325
- catch (error) {
326
- const message = error instanceof Error ? error.message : String(error);
327
- // Mark run as failed
328
- if (runCreated) {
329
- const manifest = readManifest(swarmRoot, runId);
330
- if (manifest) {
331
- manifest.status = "failed";
332
- manifest.completedAt = Date.now();
333
- manifest.error = message;
334
- updateManifest(swarmRoot, manifest);
335
- }
336
- }
337
- // Return partial state if available
338
- if (supervisor) {
339
- try {
340
- const partialOutput = supervisor.synthesizeResult();
341
- if (partialOutput) {
342
- return {
343
- content: [
344
- {
345
- type: "text",
346
- text: `${partialOutput}\n\nRun interrupted: ${message}`,
347
- },
348
- ],
349
- isError: true,
350
- details: undefined,
351
- };
352
- }
353
- }
354
- catch {
355
- // Synthesis failed — fall through to generic error
356
- }
357
- }
358
- return {
359
- content: [
360
- {
361
- type: "text",
362
- text: `SwarmTeam failed: ${message}`,
363
- },
364
- ],
365
- isError: true,
366
- details: undefined,
367
- };
368
- }
369
- finally {
370
- // Always tear down the dashboard widget so it does not linger
371
- dashboard?.dispose();
372
- clearTeamDashboardWidget(ctx);
373
- }
374
- },
375
- // -------------------------------------------------------------------
376
- // Custom TUI rendering
377
- // -------------------------------------------------------------------
378
- /**
379
- * Render the tool call with goal summary and phase list.
380
- * 业务说明:在对话记录中展示 team 调用信息 —— 目标、阶段数、角色配置。
381
- */
382
- renderCall(args, theme, _context) {
383
- const goal = args.goal || "";
384
- const phases = args.phases;
385
- const phaseCount = phases?.length ?? 5; // Default 5 phases
386
- const maxAgents = args.max_agents ?? 4;
387
- const container = new Container();
388
- const title = `${theme.fg("toolTitle", theme.bold("team "))}${theme.fg("accent", `${phaseCount} phase${phaseCount !== 1 ? "s" : ""}`)}${theme.fg("muted", ` max ${maxAgents} agents`)}`;
389
- container.addChild(new Text(title, 0, 0));
390
- container.addChild(new Spacer(1));
391
- const goalPreview = goal.length > 80 ? `${goal.slice(0, 80)}...` : goal;
392
- container.addChild(new Text(theme.fg("dim", goalPreview), 0, 0));
393
- if (phases && phases.length > 0) {
394
- container.addChild(new Spacer(1));
395
- const phaseNames = phases
396
- .slice(0, 8)
397
- .map((p) => `${theme.fg("muted", p.role)}:${theme.fg("accent", p.name)}`)
398
- .join(" ");
399
- const more = phases.length > 8
400
- ? ` ${theme.fg("muted", `+${phases.length - 8} more`)}`
401
- : "";
402
- container.addChild(new Text(`${phaseNames}${more}`, 0, 0));
403
- }
404
- return container;
405
- },
406
- /**
407
- * Render the tool result with phase completion summary.
408
- * 业务说明:展示团队执行结果 —— 各阶段完成/失败状态。
409
- */
410
- renderResult(result, _options, theme, context) {
411
- const text = result.content[0]?.type === "text" ? result.content[0].text : "";
412
- const icon = context.isError
413
- ? theme.fg("error", "x")
414
- : theme.fg("success", "V");
415
- // Extract summary from XML output
416
- const summaryMatch = /<summary>(.*?)<\/summary>/.exec(text);
417
- const summary = summaryMatch ? summaryMatch[1] : "";
418
- // Count phase results
419
- const phaseMatches = text.match(/<phase name="(\w+)"[^>]*outcome="(\w+)"/g);
420
- let completedCount = 0;
421
- let failedCount = 0;
422
- if (phaseMatches) {
423
- for (const m of phaseMatches) {
424
- if (m.includes('outcome="completed"'))
425
- completedCount += 1;
426
- else if (m.includes('outcome="failed"'))
427
- failedCount += 1;
428
- }
429
- }
430
- const container = new Container();
431
- container.addChild(new Text(`${icon} ${theme.fg("toolTitle", "team ")}${theme.fg("accent", `${completedCount} done`)}${failedCount > 0 ? theme.fg("error", ` ${failedCount} failed`) : ""}`, 0, 0));
432
- if (summary) {
433
- container.addChild(new Spacer(1));
434
- container.addChild(new Text(theme.fg("dim", summary), 0, 0));
435
- }
436
- if (context.isError && text) {
437
- container.addChild(new Spacer(1));
438
- const errorPreview = text.length > 100 ? `${text.slice(0, 100)}...` : text;
439
- container.addChild(new Text(theme.fg("error", errorPreview), 0, 0));
440
- }
441
- return container;
442
- },
443
- });
444
- }
445
- function createTeamDashboardWidget(ctx, _description) {
446
- if (ctx.mode !== "tui")
447
- return undefined;
448
- const setWidget = ctx.ui?.setWidget;
449
- if (typeof setWidget !== "function")
450
- return undefined;
451
- // 捕获 tui 引用,供组件动画 tick 时调用 requestRender()
452
- let capturedTui;
453
- const component = new TeamDashboardComponent(() => {
454
- capturedTui?.requestRender();
455
- });
456
- try {
457
- // 工厂函数接收 tui 和 theme,捕获 tui 供动画驱动使用
458
- setWidget(TEAM_DASHBOARD_WIDGET_KEY, (tui, _theme) => {
459
- capturedTui = tui;
460
- return component;
461
- }, {
462
- placement: "aboveEditor",
463
- });
464
- }
465
- catch {
466
- component.dispose();
467
- return undefined;
468
- }
469
- return {
470
- component,
471
- dispose() {
472
- component.dispose();
473
- },
474
- };
475
- }
476
- function clearTeamDashboardWidget(ctx) {
477
- if (ctx.mode !== "tui")
478
- return;
479
- const setWidget = ctx.ui?.setWidget;
480
- if (typeof setWidget !== "function")
481
- return;
482
- try {
483
- setWidget(TEAM_DASHBOARD_WIDGET_KEY, undefined, {
484
- placement: "aboveEditor",
485
- });
486
- }
487
- catch {
488
- // Best effort
489
- }
490
- }
491
- //# sourceMappingURL=tool.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/team/tool.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- /**
2
- * tui/permission-prompt — swarm start permission dialog for manual mode.
3
- *
4
- * When the user is in manual permission mode and tries to start a
5
- * swarm, this component asks whether to switch to auto/yolo or cancel.
6
- *
7
- * Ported from MoonshotAI/kimi-code's SwarmStartPermissionPromptComponent.
8
- */
9
- import type { Component } from "@earendil-works/pi-tui";
10
- export type SwarmPermissionChoice = "auto" | "yolo" | "cancel";
11
- export interface SwarmPermissionPromptOptions {
12
- /** Called when the user makes a selection. */
13
- onSelect: (choice: SwarmPermissionChoice) => void;
14
- /** Called when the user cancels (Escape). */
15
- onCancel: () => void;
16
- }
17
- export declare class SwarmPermissionPromptComponent implements Component {
18
- private readonly opts;
19
- private selectedIndex;
20
- private readonly choices;
21
- constructor(opts: SwarmPermissionPromptOptions);
22
- handleInput(data: string): void;
23
- invalidate(): void;
24
- render(width: number): string[];
25
- }
26
- //# sourceMappingURL=permission-prompt.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"permission-prompt.d.ts","sourceRoot":"","sources":["../../src/tui/permission-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAMxD,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE/D,MAAM,WAAW,4BAA4B;IAC3C,8CAA8C;IAC9C,QAAQ,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAClD,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAMD,qBAAa,8BAA+B,YAAW,SAAS;IAQlD,OAAO,CAAC,QAAQ,CAAC,IAAI;IAPjC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAItB;gBAE2B,IAAI,EAAE,4BAA4B;IAE/D,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAwB/B,UAAU,IAAI,IAAI;IAIlB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;CA6BhC"}
@@ -1,98 +0,0 @@
1
- /**
2
- * tui/permission-prompt — swarm start permission dialog for manual mode.
3
- *
4
- * When the user is in manual permission mode and tries to start a
5
- * swarm, this component asks whether to switch to auto/yolo or cancel.
6
- *
7
- * Ported from MoonshotAI/kimi-code's SwarmStartPermissionPromptComponent.
8
- */
9
- // ---------------------------------------------------------------------------
10
- // Component
11
- // ---------------------------------------------------------------------------
12
- export class SwarmPermissionPromptComponent {
13
- opts;
14
- selectedIndex = 0;
15
- choices = [
16
- "auto",
17
- "yolo",
18
- "cancel",
19
- ];
20
- constructor(opts) {
21
- this.opts = opts;
22
- }
23
- handleInput(data) {
24
- if (data === "\x1b[A" || data === "k") {
25
- // Up arrow or 'k'
26
- this.selectedIndex = Math.max(0, this.selectedIndex - 1);
27
- this.invalidate();
28
- }
29
- else if (data === "\x1b[B" || data === "j") {
30
- // Down arrow or 'j'
31
- this.selectedIndex = Math.min(this.choices.length - 1, this.selectedIndex + 1);
32
- this.invalidate();
33
- }
34
- else if (data === "\r" || data === "\n") {
35
- // Enter
36
- const choice = this.choices[this.selectedIndex];
37
- if (choice) {
38
- this.opts.onSelect(choice);
39
- }
40
- }
41
- else if (data === "\x1b") {
42
- // Escape
43
- this.opts.onCancel();
44
- }
45
- }
46
- invalidate() {
47
- // No cached state to clear — render is pure.
48
- }
49
- render(width) {
50
- const safeWidth = Math.max(10, width);
51
- const lines = [];
52
- lines.push(borderTop(safeWidth));
53
- lines.push(padLine("Manual mode can block swarm work.", safeWidth));
54
- lines.push(padLine("", safeWidth));
55
- lines.push(padLine("Choose a permission mode for this swarm:", safeWidth));
56
- lines.push(padLine("", safeWidth));
57
- for (let i = 0; i < this.choices.length; i += 1) {
58
- const choice = this.choices[i];
59
- const isSelected = i === this.selectedIndex;
60
- const prefix = isSelected ? " > " : " ";
61
- const label = choiceLabel(choice);
62
- lines.push(padLine(`${prefix}${label}`, safeWidth));
63
- }
64
- lines.push(padLine("", safeWidth));
65
- lines.push(padLine("Use arrow keys to select, Enter to confirm, Esc to cancel.", safeWidth));
66
- lines.push(borderBottom(safeWidth));
67
- return lines;
68
- }
69
- }
70
- // ---------------------------------------------------------------------------
71
- // Helpers
72
- // ---------------------------------------------------------------------------
73
- function choiceLabel(choice) {
74
- switch (choice) {
75
- case "auto":
76
- return "Auto mode — tools auto-approved, including AgentSwarm";
77
- case "yolo":
78
- return "YOLO mode — all tools auto-approved, no confirmations";
79
- case "cancel":
80
- return "Cancel — do not start the swarm";
81
- }
82
- }
83
- function borderTop(width) {
84
- return `\u250C${"\u2500".repeat(Math.max(0, width - 2))}\u2510`;
85
- }
86
- function borderBottom(width) {
87
- return `\u2514${"\u2500".repeat(Math.max(0, width - 2))}\u2518`;
88
- }
89
- function padLine(text, width) {
90
- const inner = `\u2502 ${text}`;
91
- if (inner.length >= width) {
92
- // Truncate to fit width — reserve 1 char for the right border │
93
- return inner.slice(0, width - 1) + "\u2502";
94
- }
95
- const padding = width - inner.length - 1;
96
- return `${inner}${" ".repeat(padding)}\u2502`;
97
- }
98
- //# sourceMappingURL=permission-prompt.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"permission-prompt.js","sourceRoot":"","sources":["../../src/tui/permission-prompt.ts"],"names":[],"mappings":"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"}