@gjczone/pi-swarm 0.1.2 → 0.1.3

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 CHANGED
@@ -6,9 +6,9 @@ Think of it as **kimi-code's AgentSwarm + Claude Code's agent teams** — inside
6
6
 
7
7
  ## What It Does
8
8
 
9
- **Swarm** — parallel agents. Like kimi-code's AgentSwarm: one template, many items, running simultaneously. Each agent gets a dedicated git worktree. The main agent auto-cleans worktrees when done.
9
+ **Swarm** — parallel agents. Like kimi-code's AgentSwarm: one template, many items, running simultaneously. Each agent is an isolated `pi --print` child process with its own context window.
10
10
 
11
- **Team** — collaborative agents. Like Claude Code's agent teams or pi-crew: role-based agents (explorer, planner, coder, reviewer, tester) working in sequence. Each phase agent receives context from previous phases via a shared mailbox. Agents run in isolated git worktrees.
11
+ **Team** — collaborative agents. Like Claude Code's agent teams or pi-crew: role-based agents (explorer, planner, coder, reviewer, tester) working in sequence. Each phase agent receives context from previous phases via a shared mailbox. Every agent runs as an independent child process.
12
12
 
13
13
  All agents are created on-the-fly. No `agents/*.md` files. The main agent decides what to spawn based on the task.
14
14
 
@@ -66,18 +66,9 @@ Two of the five swarm reviews failed — retry those
66
66
 
67
67
  Press `Ctrl+C` during a swarm or team run. Completed agents are preserved. In-progress agents are cancelled gracefully. For teams, completed phases are saved and returned as partial results.
68
68
 
69
- ## Git Worktree Isolation
70
-
71
- Every agent runs in its own `git worktree`:
72
-
73
- - Isolated working directory — no file conflicts between agents
74
- - Main agent's working tree stays clean
75
- - Worktrees are **auto-created** on spawn and **auto-cleaned** when the agent finishes
76
- - Failed or cancelled agents also get their worktrees cleaned up
77
-
78
69
  ## Runtime Files
79
70
 
80
- State is stored per-project under `.pi/swarm/state/`. If `.pi/` doesn't exist, it's created automatically.
71
+ State is stored under `.pi/swarm/state/`. The extension auto-creates `.pi/` if it doesn't exist, and auto-appends `.pi/swarm/state/` to the project's `.gitignore`.
81
72
 
82
73
  ```
83
74
  .pi/swarm/state/runs/{runId}/
@@ -96,10 +87,10 @@ Runs auto-clean: completed runs deleted after 7 days, stale runs (30min no heart
96
87
 
97
88
  ## Settings
98
89
 
99
- Default max concurrency is **5**. Recommended: **3-10**. Can be set to any positive integer. Settings files:
90
+ Default max concurrency is **5**. Recommended: **3-10**. Can be set to any positive integer.
100
91
 
101
- | Location | Scope |
102
- |----------|-------|
92
+ | Settings file | Scope |
93
+ |---------------|-------|
103
94
  | `.pi/settings.json` | Project (current directory) |
104
95
  | `~/.pi/agent/settings.json` | Global (all projects) |
105
96
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAWpE,MAAM,CAAC,OAAO,WAAW,EAAE,EAAE,YAAY,GAAG,IAAI,CA+F/C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAiFpE,MAAM,CAAC,OAAO,WAAW,EAAE,EAAE,YAAY,GAAG,IAAI,CAkG/C"}
package/dist/index.js CHANGED
@@ -13,6 +13,65 @@ import { registerSwarmCommand } from "./swarm/command.js";
13
13
  import { registerAgentTeamTool } from "./team/tool.js";
14
14
  import { registerTeamCommand } from "./team/command.js";
15
15
  import { recoverRuns } from "./state/recovery.js";
16
+ import * as fs from "node:fs";
17
+ import * as path from "node:path";
18
+ // ---------------------------------------------------------------------------
19
+ // Auto-gitignore
20
+ // ---------------------------------------------------------------------------
21
+ const GITIGNORE_ENTRY = ".pi/swarm/state/";
22
+ /**
23
+ * Ensure `.pi/swarm/state/` is listed in the project's `.gitignore`.
24
+ * Appends the entry if the file exists but doesn't contain it.
25
+ * Creates `.gitignore` if neither `.gitignore` nor any `*ignore` file exists.
26
+ */
27
+ function ensureGitignore(cwd) {
28
+ const gitignorePath = findGitignore(cwd);
29
+ if (!gitignorePath) {
30
+ // No gitignore file exists — create one
31
+ try {
32
+ fs.writeFileSync(path.join(cwd, ".gitignore"), `${GITIGNORE_ENTRY}\n`, "utf-8");
33
+ }
34
+ catch {
35
+ // Best effort
36
+ }
37
+ return;
38
+ }
39
+ try {
40
+ const content = fs.readFileSync(gitignorePath, "utf-8");
41
+ if (content.includes(GITIGNORE_ENTRY))
42
+ return; // Already present
43
+ // Append with a leading newline if the file doesn't end with one
44
+ const separator = content.endsWith("\n") ? "" : "\n";
45
+ fs.appendFileSync(gitignorePath, `${separator}${GITIGNORE_ENTRY}\n`, "utf-8");
46
+ }
47
+ catch {
48
+ // Best effort
49
+ }
50
+ }
51
+ /**
52
+ * Find the project's gitignore file.
53
+ * Checks `.gitignore` first, then any `*ignore` file (e.g., `.dockerignore` is skipped).
54
+ */
55
+ function findGitignore(cwd) {
56
+ // Standard .gitignore
57
+ const standard = path.join(cwd, ".gitignore");
58
+ if (fs.existsSync(standard))
59
+ return standard;
60
+ // Check for any other *ignore file (but prefer .gitignore)
61
+ try {
62
+ const entries = fs.readdirSync(cwd);
63
+ for (const entry of entries) {
64
+ if (entry.endsWith("ignore") && entry !== ".gitignore") {
65
+ // Found a non-standard ignore file — use .gitignore instead (don't pollute others)
66
+ return null;
67
+ }
68
+ }
69
+ }
70
+ catch {
71
+ // Can't read directory
72
+ }
73
+ return null;
74
+ }
16
75
  // ---------------------------------------------------------------------------
17
76
  // Default export — extension entry point
18
77
  // ---------------------------------------------------------------------------
@@ -65,6 +124,8 @@ export default function (pi) {
65
124
  pi.on("session_start", async () => {
66
125
  log("Session started — swarm extension loaded.");
67
126
  swarmActive = false;
127
+ // Ensure .pi/swarm/state/ is gitignored
128
+ ensureGitignore(process.cwd());
68
129
  // Run recovery: detect stale/abandoned runs, clean up expired ones
69
130
  try {
70
131
  const result = recoverRuns(process.cwd());
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAyB,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,8EAA8E;AAC9E,yCAAyC;AACzC,8EAA8E;AAE9E,MAAM,CAAC,OAAO,WAAW,EAAgB;IACvC,kBAAkB;IAElB,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,MAAM,GAAG,GAAG,CAAC,GAAW,EAAQ,EAAE;QAChC,8EAA8E;QAC9E,OAAO,CAAC,KAAK,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC;IAEF,yBAAyB;IAEzB,MAAM,WAAW,GAAqB;QACpC,EAAE;QACF,IAAI,WAAW;YACb,OAAO,WAAW,CAAC;QACrB,CAAC;QACD,cAAc,CAAC,MAAe,EAAE,QAAoC;YAClE,WAAW,GAAG,MAAM,CAAC;QACvB,CAAC;QACD,mBAAmB,CAAC,MAAc;YAChC,EAAE,CAAC,WAAW,CAAC;gBACb,UAAU,EAAE,kBAAkB;gBAC9B,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;QACL,CAAC;QACD,UAAU,CAAC,OAAe;YACxB,GAAG,CAAC,OAAO,CAAC,CAAC;QACf,CAAC;QACD,SAAS,CAAC,OAAe;YACvB,OAAO,CAAC,KAAK,CAAC,qBAAqB,OAAO,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,QAAQ;YACN,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC;gBACpC,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YACjD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,iBAAiB;YACf,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,KAAK,CAAC,iBAAiB,CAAC,KAAa;YACnC,kCAAkC;QACpC,CAAC;KACF,CAAC;IAEF,4BAA4B;IAE5B,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE;QAChC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QACjD,WAAW,GAAG,KAAK,CAAC;QAEpB,mEAAmE;QACnE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YAC1C,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,GAAG,CACD,aAAa,MAAM,CAAC,SAAS,CAAC,MAAM,2BAA2B,CAChE,CAAC;YACJ,CAAC;YACD,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,GAAG,CACD,aAAa,MAAM,CAAC,SAAS,CAAC,MAAM,6BAA6B,CAClE,CAAC;YACJ,CAAC;YACD,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,GAAG,CACD,aAAa,MAAM,CAAC,SAAS,CAAC,MAAM,+BAA+B,CACpE,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,+BAA+B,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;QAC5B,sDAAsD;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;QACnC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QAC9B,WAAW,GAAG,KAAK,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,wCAAwC;IAExC,sBAAsB,CAAC,EAAE,CAAC,CAAC;IAC3B,oBAAoB,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IACtC,qBAAqB,CAAC,EAAE,CAAC,CAAC;IAC1B,mBAAmB,CAAC,EAAE,CAAC,CAAC;IAExB,GAAG,CAAC,4FAA4F,CAAC,CAAC;AACpG,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gjczone/pi-swarm",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Agent Swarm for pi-coding-agent — launch multiple subagents from a prompt template with live TUI progress. Ported from MoonshotAI/kimi-code swarm with gratitude.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",