Add 5 pi extensions: pi-subagents, pi-crew, rpiv-pi, pi-interactive-shell, pi-intercom

This commit is contained in:
2026-05-08 15:59:25 +10:00
parent d0d1d9b045
commit 31b4110c87
457 changed files with 85157 additions and 0 deletions

View File

@@ -0,0 +1,41 @@
import type { TeamToolParamsValue } from "../../schema/team-tool-schema.ts";
import { readEvents } from "../../state/event-log.ts";
import { loadRunManifestById } from "../../state/state-store.ts";
import { aggregateUsage, formatUsage } from "../../state/usage.ts";
import type { PiTeamsToolResult } from "../tool-result.ts";
import { result, type TeamContext } from "./context.ts";
export function handleEvents(params: TeamToolParamsValue, ctx: TeamContext): PiTeamsToolResult {
if (!params.runId) return result("Events requires runId.", { action: "events", status: "error" }, true);
const loaded = loadRunManifestById(ctx.cwd, params.runId);
if (!loaded) return result(`Run '${params.runId}' not found.`, { action: "events", status: "error" }, true);
const events = readEvents(loaded.manifest.eventsPath);
const lines = [`Events for ${loaded.manifest.runId}:`, ...(events.length ? events.map((event) => `${event.time} ${event.type}${event.taskId ? ` ${event.taskId}` : ""}${event.message ? `: ${event.message}` : ""}${event.data ? ` ${JSON.stringify(event.data)}` : ""}`) : ["(none)"])];
return result(lines.join("\n"), { action: "events", status: "ok", runId: loaded.manifest.runId, artifactsRoot: loaded.manifest.artifactsRoot });
}
export function handleArtifacts(params: TeamToolParamsValue, ctx: TeamContext): PiTeamsToolResult {
if (!params.runId) return result("Artifacts requires runId.", { action: "artifacts", status: "error" }, true);
const loaded = loadRunManifestById(ctx.cwd, params.runId);
if (!loaded) return result(`Run '${params.runId}' not found.`, { action: "artifacts", status: "error" }, true);
const lines = [`Artifacts for ${loaded.manifest.runId}:`, ...(loaded.manifest.artifacts.length ? loaded.manifest.artifacts.map((artifact) => `- ${artifact.kind}: ${artifact.path}${artifact.sizeBytes !== undefined ? ` (${artifact.sizeBytes} bytes)` : ""}${artifact.contentHash ? ` sha256=${artifact.contentHash.slice(0, 12)}` : ""}`) : ["- (none)"])];
return result(lines.join("\n"), { action: "artifacts", status: "ok", runId: loaded.manifest.runId, artifactsRoot: loaded.manifest.artifactsRoot });
}
export function handleSummary(params: TeamToolParamsValue, ctx: TeamContext): PiTeamsToolResult {
if (!params.runId) return result("Summary requires runId.", { action: "summary", status: "error" }, true);
const loaded = loadRunManifestById(ctx.cwd, params.runId);
if (!loaded) return result(`Run '${params.runId}' not found.`, { action: "summary", status: "error" }, true);
const usage = aggregateUsage(loaded.tasks);
const lines = [
`Summary for ${loaded.manifest.runId}`,
`Status: ${loaded.manifest.status}`,
`Team: ${loaded.manifest.team}`,
`Workflow: ${loaded.manifest.workflow ?? "(none)"}`,
`Goal: ${loaded.manifest.goal}`,
`Usage: ${formatUsage(usage)}`,
"Tasks:",
...loaded.tasks.map((task) => `- ${task.id}: ${task.status} (${task.role} -> ${task.agent})${task.error ? ` - ${task.error}` : ""}`),
];
return result(lines.join("\n"), { action: "summary", status: "ok", runId: loaded.manifest.runId, artifactsRoot: loaded.manifest.artifactsRoot });
}