HOMELAB-1345: feat(pi-swarm-suite): merge pi-subagents, pi-swarm, and pi-swarm-view #4
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "plane/HOMELAB-1345-swarm-suite"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
HOMELAB-1345 — pi-swarm-suite merge
Consolidates three extensions (
pi-subagents,pi-swarm,pi-swarm-view) into a single unifiedpi-swarm-suiteextension. The legacypi-swarm/andpi-swarm-view/directories were moved out to~/.pi/agent/.disabled-extensions/and show as deletions here; git detected the relocated files as renames intopi-swarm-suite/.Verification
npm run typecheck— clean (tsc --noEmit, no errors)npm run test— 28 test files, 198 tests passed, 0 failedBranch
plane/HOMELAB-1345-swarm-suite→main952f9b1The Paperclip listIssues endpoint now returns a raw array [{...}] instead of the legacy shape { issues: [...], nextCursor?, totalCount? }. This broke paperclip_get_issue, paperclip_list_issues, and any tool calling getIssueByIdentifier(), which all assumed the old wrapper shape. - listIssues: normalize raw array to { issues: res } before returning - getIssueByIdentifier: defensively read from both array and .issues - listApprovalIssues, listAgents: apply same guard pattern for safety - paperclip_list_issues tool: handle both shapes in execute() body Tested: getIssueByIdentifier('HOM-71') resolves correctly against live API returning raw array.Review (Claude, against docs/plans/2026-07-01-pi-swarm-suite-migration.md)
Verdict: solid — good to merge. Structure, vendoring fidelity, and the compatibility contract all match the plan. Verified locally:
tsc --noEmitclean, 198/198 tests pass, and a livepi -psmoke test spawned a subagent through the suite end-to-end (queued → ran → streamed a universal.outputfile → result returned).What's right
agent-manager.ts,index.ts,settings.ts) are exactly the plan's §5 list, all markedSUITE:.Agent/get_subagent_result/steer_subagenttools,/agents,/swarm,/swarm-view,subagents:*events, RPC channels,subagents.json, agent-md dirs, output-file layout.manager.onAnyChange(), swarm collector in-process, transcripts prefer in-memoryrecord.sessionwith file fallback, output files on all spawn paths.Findings
maxConcurrentclobber —suite-settings.tsseeds core knobs fromloadProjectSettings()(project file only), but the comment claims "current effective values". Global~/.pi/agent/subagents.jsonhasmaxConcurrent: 20; the page would show 4. If a settings host ever emits full values on change,syncCorewrites 4 into<cwd>/.pi/subagents.json, silently downgrading 20 → 4 (the exact bug we fought in HOMELAB-1335). One-line fix: seed fromloadSettings()(merged).pi-extension-settings:register/ answersextension:settings:get(checked pi core, all npm packages, all extensions). All swarm/view knobs run on hardcoded defaults; README's claim that the page "appears in pi's extension-settings UI" doesn't hold today. Not a regression (legacy pages were equally dead), just know that ~335 lines + tests serve an uninstalled host.pi -pnever exits after spawning a subagent — confirmed NOT a regression: reproduced identically with the unmodified upstream npm package (pi -ne -e …/pi-subagents/dist/index.js). Agent completes in seconds; process hangs indefinitely (event loop held by the retained child session). Matters for headless runs (Paperclip pi-over-SSH). Now that we own the core, a follow-up could dispose terminal sessions when!hasUI.Minor
b47a87a(paperclip listIssues array fix) is scope creep in this PR — fine since it's its own commit.swarm/index.ts:60re-wires the no-opregisterSettingsonpi-extension-settings:ready— dead code.