@gjczone/pi-swarm 0.4.1 → 0.7.0

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 (75) hide show
  1. package/README.md +35 -89
  2. package/dist/index.d.ts +3 -10
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +4 -16
  5. package/dist/index.js.map +1 -1
  6. package/dist/shared/controller.d.ts +19 -5
  7. package/dist/shared/controller.d.ts.map +1 -1
  8. package/dist/shared/controller.js +139 -17
  9. package/dist/shared/controller.js.map +1 -1
  10. package/dist/shared/render.d.ts +1 -12
  11. package/dist/shared/render.d.ts.map +1 -1
  12. package/dist/shared/render.js +4 -37
  13. package/dist/shared/render.js.map +1 -1
  14. package/dist/shared/spawner.js +49 -5
  15. package/dist/shared/spawner.js.map +1 -1
  16. package/dist/shared/types.d.ts +38 -0
  17. package/dist/shared/types.d.ts.map +1 -1
  18. package/dist/shared/types.js.map +1 -1
  19. package/dist/shared/worktree.d.ts +2 -0
  20. package/dist/shared/worktree.d.ts.map +1 -1
  21. package/dist/shared/worktree.js +10 -3
  22. package/dist/shared/worktree.js.map +1 -1
  23. package/dist/shared/xml.d.ts +18 -0
  24. package/dist/shared/xml.d.ts.map +1 -0
  25. package/dist/shared/xml.js +31 -0
  26. package/dist/shared/xml.js.map +1 -0
  27. package/dist/state/recovery.d.ts.map +1 -1
  28. package/dist/state/recovery.js +25 -4
  29. package/dist/state/recovery.js.map +1 -1
  30. package/dist/swarm/command.d.ts +4 -5
  31. package/dist/swarm/command.d.ts.map +1 -1
  32. package/dist/swarm/command.js +26 -74
  33. package/dist/swarm/command.js.map +1 -1
  34. package/dist/swarm/mode.d.ts +1 -1
  35. package/dist/swarm/mode.js +2 -2
  36. package/dist/swarm/mode.js.map +1 -1
  37. package/dist/swarm/tool.d.ts +4 -4
  38. package/dist/swarm/tool.d.ts.map +1 -1
  39. package/dist/swarm/tool.js +115 -160
  40. package/dist/swarm/tool.js.map +1 -1
  41. package/dist/team/command.d.ts +2 -4
  42. package/dist/team/command.d.ts.map +1 -1
  43. package/dist/team/command.js +5 -13
  44. package/dist/team/command.js.map +1 -1
  45. package/dist/team/mailbox.d.ts +7 -0
  46. package/dist/team/mailbox.d.ts.map +1 -1
  47. package/dist/team/mailbox.js +99 -13
  48. package/dist/team/mailbox.js.map +1 -1
  49. package/dist/tui/progress.d.ts +26 -9
  50. package/dist/tui/progress.d.ts.map +1 -1
  51. package/dist/tui/progress.js +262 -163
  52. package/dist/tui/progress.js.map +1 -1
  53. package/dist/tui/swarm-markers.d.ts +1 -1
  54. package/dist/tui/swarm-markers.js +1 -1
  55. package/package.json +13 -2
  56. package/dist/team/supervisor.d.ts +0 -171
  57. package/dist/team/supervisor.d.ts.map +0 -1
  58. package/dist/team/supervisor.js +0 -700
  59. package/dist/team/supervisor.js.map +0 -1
  60. package/dist/team/task-graph.d.ts +0 -64
  61. package/dist/team/task-graph.d.ts.map +0 -1
  62. package/dist/team/task-graph.js +0 -216
  63. package/dist/team/task-graph.js.map +0 -1
  64. package/dist/team/tool.d.ts +0 -11
  65. package/dist/team/tool.d.ts.map +0 -1
  66. package/dist/team/tool.js +0 -455
  67. package/dist/team/tool.js.map +0 -1
  68. package/dist/tui/permission-prompt.d.ts +0 -26
  69. package/dist/tui/permission-prompt.d.ts.map +0 -1
  70. package/dist/tui/permission-prompt.js +0 -98
  71. package/dist/tui/permission-prompt.js.map +0 -1
  72. package/dist/tui/team-dashboard.d.ts +0 -48
  73. package/dist/tui/team-dashboard.d.ts.map +0 -1
  74. package/dist/tui/team-dashboard.js +0 -249
  75. package/dist/tui/team-dashboard.js.map +0 -1
package/dist/team/tool.js DELETED
@@ -1,455 +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 = `Launch a collaborative team of role-based agents to complete a complex multi-phase task.
23
-
24
- **IMPORTANT: ONLY use SwarmTeam when the user EXPLICITLY asks for a "team", "swarm-team", or role-based collaboration with communication between agents. For nearly all parallel tasks, use AgentSwarm instead.**
25
-
26
- SwarmTeam is best for COMPLEX tasks that REQUIRE multiple specialized roles collaborating sequentially:
27
- explorer (codebase understanding) → planner (design) → coder (implementation)
28
- → reviewer (quality check) → tester (verification).
29
-
30
- Do NOT use SwarmTeam for:
31
- - Simple parallel tasks (use AgentSwarm)
32
- - Single subagent tasks (use AgentSwarm with 1 item)
33
- - Tasks where agents don't need to communicate results to each other
34
-
35
- Each agent communicates via a shared mailbox. The supervisor decomposes the goal
36
- into phases, assigns each phase to a role agent, and synthesizes the final result.
37
- Agents receive context from previous phases automatically.
38
-
39
- Default phases: explore → plan → implement → review → test.
40
- Custom phases and roles can be specified.
41
-
42
- If SwarmTeam is called, that call must be the only tool call in the response.`;
43
- // ---------------------------------------------------------------------------
44
- // Registration
45
- // ---------------------------------------------------------------------------
46
- export function registerSwarmTeamTool(pi) {
47
- pi.registerTool({
48
- name: "SwarmTeam",
49
- label: "Swarm Team",
50
- description: AGENT_TEAM_DESCRIPTION,
51
- parameters: Type.Object({
52
- goal: Type.String({
53
- description: "High-level goal for the team.",
54
- }),
55
- description: Type.String({
56
- description: "Short description for the team run.",
57
- }),
58
- phases: Type.Optional(Type.Array(Type.Object({
59
- name: Type.String(),
60
- role: Type.String(),
61
- dependsOn: Type.Optional(Type.Array(Type.String())),
62
- modelTier: Type.Optional(Type.Union([Type.Literal("small"), Type.Literal("default")])),
63
- model: Type.Optional(Type.String()),
64
- tools: Type.Optional(Type.Array(Type.String())),
65
- }), {
66
- description: "Custom phase definitions. Defaults to explore/plan/implement/review/test.",
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
- })),
76
- small_model: Type.Optional(Type.String({
77
- description: "Lightweight/fast model for exploration roles (e.g. explorer). Other roles use the default model.",
78
- })),
79
- max_agents: Type.Optional(Type.Number({
80
- description: "Max concurrent agents. Default 4.",
81
- })),
82
- }, { additionalProperties: false }),
83
- execute: async (toolCallId, params, signal, _onUpdate, ctxRaw) => {
84
- const p = params;
85
- const ctx = ctxRaw;
86
- const dashboard = createTeamDashboardWidget(ctx, p.description);
87
- // Persistent run state - declared outside try for catch access
88
- const swarmRoot = process.env.PI_SWARM_ROOT ?? resolveSwarmRoot(process.cwd());
89
- const runId = `team-${Date.now().toString(36)}`;
90
- let runCreated = false;
91
- let supervisor = null;
92
- try {
93
- // Build phase definitions
94
- const phases = p.phases?.map((ph) => ({
95
- name: ph.name,
96
- role: ph.role,
97
- dependsOn: ph.dependsOn,
98
- modelTier: ph.modelTier,
99
- model: ph.model,
100
- tools: ph.tools,
101
- }));
102
- // Build role configs
103
- const roles = p.roles?.map((r) => ({
104
- role: r.role,
105
- model: r.model,
106
- tools: r.tools,
107
- systemPrompt: r.systemPrompt,
108
- }));
109
- // Create supervisor
110
- supervisor = new TeamSupervisor({
111
- cwd: process.cwd(),
112
- swarmRoot,
113
- runId,
114
- goal: p.goal,
115
- phases,
116
- roles,
117
- smallModel: p.small_model,
118
- maxAgents: p.max_agents ?? 4,
119
- onProgress: (snapshot) => {
120
- dashboard?.component.update(snapshotToDashboardState(snapshot));
121
- },
122
- });
123
- // Create manifest and save initial state
124
- createManifest(swarmRoot, {
125
- runId,
126
- type: "team",
127
- status: "running",
128
- goal: p.goal,
129
- startedAt: Date.now(),
130
- agentIds: [],
131
- });
132
- runCreated = true;
133
- saveTaskState(swarmRoot, runId, supervisor.state.taskGraph.toJSON());
134
- // Run phases through the task graph — launch all ready phases concurrently
135
- // 业务说明:同时启动所有依赖已满足的阶段。独立阶段并行执行,
136
- // 有依赖的阶段在依赖完成后自动成为下一批。
137
- const allResults = [];
138
- const allBranches = [];
139
- const maxConcurrency = p.max_agents ?? 4;
140
- const repoCwd = process.cwd();
141
- const inGitRepo = isGitRepository(repoCwd);
142
- let currentPhases = supervisor.startReadyPhases();
143
- while (currentPhases.length > 0) {
144
- // Check abort signal between batches
145
- signal?.throwIfAborted();
146
- // Update heartbeat before batch
147
- updateHeartbeat(swarmRoot, runId);
148
- // Build tasks for all ready phases
149
- const tasks = currentPhases.map((cp, idx) => {
150
- const execConfig = supervisor.getPhaseExecutionConfig(cp.phase.phase.name);
151
- const phaseName = cp.phase.phase.name;
152
- const mailboxPath = supervisor.getMailboxPath();
153
- return {
154
- kind: "spawn",
155
- data: { phase: phaseName, role: cp.role },
156
- profileName: cp.role,
157
- parentToolCallId: toolCallId,
158
- prompt: cp.prompt,
159
- description: `${p.description} — ${phaseName} (${cp.role})`,
160
- swarmIndex: idx + 1,
161
- runInBackground: false,
162
- signal,
163
- timeout: DEFAULT_SUBAGENT_TIMEOUT_MS,
164
- model: execConfig.model,
165
- tools: execConfig.tools,
166
- cwd: execConfig.cwd,
167
- useWorktree: true,
168
- swarmRoot,
169
- runId,
170
- mailboxPath,
171
- roleName: cp.role,
172
- onUsage: (usage) => {
173
- supervisor?.updatePhaseUsage(phaseName, usage);
174
- },
175
- onMessage: (message) => {
176
- supervisor?.handleRealtimeMessage(cp.role, message);
177
- },
178
- };
179
- });
180
- const controller = new SubagentBatchController({
181
- spawn: spawnSubagent,
182
- resume: resumeSubagent,
183
- retry: retrySubagent,
184
- }, tasks, {
185
- maxConcurrency: Math.min(maxConcurrency, tasks.length),
186
- });
187
- let batchResults;
188
- try {
189
- batchResults = await controller.run();
190
- }
191
- catch (err) {
192
- // Batch was aborted or failed catastrophically
193
- // Mark all phases in this batch as failed
194
- for (const cp of currentPhases) {
195
- supervisor.failPhase(cp.phase.phase.name, err instanceof Error ? err.message : String(err));
196
- }
197
- // Save state after failure
198
- saveTaskState(swarmRoot, runId, supervisor.state.taskGraph.toJSON());
199
- // Abort signal: stop the entire run
200
- if (signal?.aborted) {
201
- supervisor.finalize();
202
- if (runCreated) {
203
- const m = readManifest(swarmRoot, runId);
204
- if (m) {
205
- m.status = "failed";
206
- m.completedAt = Date.now();
207
- m.error = "Aborted by user";
208
- updateManifest(swarmRoot, m);
209
- }
210
- }
211
- const partialOutput = supervisor.synthesizeResult();
212
- return {
213
- content: [{ type: "text", text: partialOutput }],
214
- details: undefined,
215
- };
216
- }
217
- // Non-abort error: try next batch
218
- currentPhases = supervisor.startReadyPhases();
219
- continue;
220
- }
221
- allResults.push(...batchResults);
222
- // Process each phase result
223
- for (let i = 0; i < currentPhases.length; i += 1) {
224
- const cp = currentPhases[i];
225
- const result = batchResults[i];
226
- if (result && result.status === "completed") {
227
- supervisor.assignAgent(cp.phase.phase.name, result.agentId ?? cp.phase.phase.name);
228
- supervisor.completePhase(cp.phase.phase.name, result.result ?? "", result.usage);
229
- if (result.agentId) {
230
- registerAgentInManifest(swarmRoot, runId, result.agentId);
231
- }
232
- if (result.worktreeBranch) {
233
- allBranches.push(result.worktreeBranch);
234
- }
235
- }
236
- else if (result) {
237
- supervisor.failPhase(cp.phase.phase.name, result.error ?? "Unknown error");
238
- if (result.agentId) {
239
- registerAgentInManifest(swarmRoot, runId, result.agentId);
240
- }
241
- }
242
- }
243
- // Save state after each batch
244
- saveTaskState(swarmRoot, runId, supervisor.state.taskGraph.toJSON());
245
- // Get next batch of ready phases
246
- currentPhases = supervisor.startReadyPhases();
247
- }
248
- // Finalize and render
249
- supervisor.finalize();
250
- // Auto-merge worktree branches back to original branch (in Git repos)
251
- // 业务说明:所有阶段完成后,按顺序合并子 agent 创建的分支。
252
- // 冲突时停止合并,保留分支供用户手动解决。
253
- const mergeResults = [];
254
- if (inGitRepo && allBranches.length > 0) {
255
- for (const branch of allBranches) {
256
- try {
257
- const mergeResult = mergeBranch(repoCwd, branch);
258
- if (mergeResult.success) {
259
- mergeResults.push(`Merged: ${branch}`);
260
- }
261
- else {
262
- mergeResults.push(`Merge failed for ${branch}: ${mergeResult.error}`);
263
- }
264
- }
265
- catch (err) {
266
- mergeResults.push(`Merge error for ${branch}: ${err instanceof Error ? err.message : String(err)}`);
267
- }
268
- }
269
- }
270
- // Mark run as completed
271
- if (runCreated) {
272
- const manifest = readManifest(swarmRoot, runId);
273
- if (manifest) {
274
- manifest.status = "completed";
275
- manifest.completedAt = Date.now();
276
- updateManifest(swarmRoot, manifest);
277
- }
278
- }
279
- dashboard?.component.complete();
280
- let output = supervisor.synthesizeResult();
281
- if (mergeResults.length > 0) {
282
- output += `\n\n<auto_merge>\n${mergeResults.join("\n")}\n</auto_merge>`;
283
- }
284
- return {
285
- content: [{ type: "text", text: output }],
286
- details: undefined,
287
- };
288
- }
289
- catch (error) {
290
- const message = error instanceof Error ? error.message : String(error);
291
- // Mark run as failed
292
- if (runCreated) {
293
- const manifest = readManifest(swarmRoot, runId);
294
- if (manifest) {
295
- manifest.status = "failed";
296
- manifest.completedAt = Date.now();
297
- manifest.error = message;
298
- updateManifest(swarmRoot, manifest);
299
- }
300
- }
301
- // Return partial state if available
302
- if (supervisor) {
303
- try {
304
- const partialOutput = supervisor.synthesizeResult();
305
- if (partialOutput) {
306
- return {
307
- content: [
308
- {
309
- type: "text",
310
- text: `${partialOutput}\n\nRun interrupted: ${message}`,
311
- },
312
- ],
313
- isError: true,
314
- details: undefined,
315
- };
316
- }
317
- }
318
- catch {
319
- // Synthesis failed — fall through to generic error
320
- }
321
- }
322
- return {
323
- content: [
324
- {
325
- type: "text",
326
- text: `SwarmTeam failed: ${message}`,
327
- },
328
- ],
329
- isError: true,
330
- details: undefined,
331
- };
332
- }
333
- finally {
334
- // Always tear down the dashboard widget so it does not linger
335
- dashboard?.dispose();
336
- clearTeamDashboardWidget(ctx);
337
- }
338
- },
339
- // -------------------------------------------------------------------
340
- // Custom TUI rendering
341
- // -------------------------------------------------------------------
342
- /**
343
- * Render the tool call with goal summary and phase list.
344
- * 业务说明:在对话记录中展示 team 调用信息 —— 目标、阶段数、角色配置。
345
- */
346
- renderCall(args, theme, _context) {
347
- const goal = args.goal || "";
348
- const phases = args.phases;
349
- const phaseCount = phases?.length ?? 5; // Default 5 phases
350
- const maxAgents = args.max_agents ?? 4;
351
- const container = new Container();
352
- const title = `${theme.fg("toolTitle", theme.bold("team "))}${theme.fg("accent", `${phaseCount} phase${phaseCount !== 1 ? "s" : ""}`)}${theme.fg("muted", ` max ${maxAgents} agents`)}`;
353
- container.addChild(new Text(title, 0, 0));
354
- container.addChild(new Spacer(1));
355
- const goalPreview = goal.length > 80 ? `${goal.slice(0, 80)}...` : goal;
356
- container.addChild(new Text(theme.fg("dim", goalPreview), 0, 0));
357
- if (phases && phases.length > 0) {
358
- container.addChild(new Spacer(1));
359
- const phaseNames = phases
360
- .slice(0, 8)
361
- .map((p) => `${theme.fg("muted", p.role)}:${theme.fg("accent", p.name)}`)
362
- .join(" ");
363
- const more = phases.length > 8
364
- ? ` ${theme.fg("muted", `+${phases.length - 8} more`)}`
365
- : "";
366
- container.addChild(new Text(`${phaseNames}${more}`, 0, 0));
367
- }
368
- return container;
369
- },
370
- /**
371
- * Render the tool result with phase completion summary.
372
- * 业务说明:展示团队执行结果 —— 各阶段完成/失败状态。
373
- */
374
- renderResult(result, _options, theme, context) {
375
- const text = result.content[0]?.type === "text" ? result.content[0].text : "";
376
- const icon = context.isError
377
- ? theme.fg("error", "x")
378
- : theme.fg("success", "V");
379
- // Extract summary from XML output
380
- const summaryMatch = /<summary>(.*?)<\/summary>/.exec(text);
381
- const summary = summaryMatch ? summaryMatch[1] : "";
382
- // Count phase results
383
- const phaseMatches = text.match(/<phase name="(\w+)"[^>]*outcome="(\w+)"/g);
384
- let completedCount = 0;
385
- let failedCount = 0;
386
- if (phaseMatches) {
387
- for (const m of phaseMatches) {
388
- if (m.includes('outcome="completed"'))
389
- completedCount += 1;
390
- else if (m.includes('outcome="failed"'))
391
- failedCount += 1;
392
- }
393
- }
394
- const container = new Container();
395
- container.addChild(new Text(`${icon} ${theme.fg("toolTitle", "team ")}${theme.fg("accent", `${completedCount} done`)}${failedCount > 0 ? theme.fg("error", ` ${failedCount} failed`) : ""}`, 0, 0));
396
- if (summary) {
397
- container.addChild(new Spacer(1));
398
- container.addChild(new Text(theme.fg("dim", summary), 0, 0));
399
- }
400
- if (context.isError && text) {
401
- container.addChild(new Spacer(1));
402
- const errorPreview = text.length > 100 ? `${text.slice(0, 100)}...` : text;
403
- container.addChild(new Text(theme.fg("error", errorPreview), 0, 0));
404
- }
405
- return container;
406
- },
407
- });
408
- }
409
- function createTeamDashboardWidget(ctx, _description) {
410
- if (ctx.mode !== "tui")
411
- return undefined;
412
- const setWidget = ctx.ui?.setWidget;
413
- if (typeof setWidget !== "function")
414
- return undefined;
415
- // 捕获 tui 引用,供组件动画 tick 时调用 requestRender()
416
- let capturedTui;
417
- const component = new TeamDashboardComponent(() => {
418
- capturedTui?.requestRender();
419
- });
420
- try {
421
- // 工厂函数接收 tui 和 theme,捕获 tui 供动画驱动使用
422
- setWidget(TEAM_DASHBOARD_WIDGET_KEY, (tui, _theme) => {
423
- capturedTui = tui;
424
- return component;
425
- }, {
426
- placement: "aboveEditor",
427
- });
428
- }
429
- catch {
430
- component.dispose();
431
- return undefined;
432
- }
433
- return {
434
- component,
435
- dispose() {
436
- component.dispose();
437
- },
438
- };
439
- }
440
- function clearTeamDashboardWidget(ctx) {
441
- if (ctx.mode !== "tui")
442
- return;
443
- const setWidget = ctx.ui?.setWidget;
444
- if (typeof setWidget !== "function")
445
- return;
446
- try {
447
- setWidget(TEAM_DASHBOARD_WIDGET_KEY, undefined, {
448
- placement: "aboveEditor",
449
- });
450
- }
451
- catch {
452
- // Best effort
453
- }
454
- }
455
- //# 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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"}