mirror of
https://bitbucket.org/siakitem/my-pi.git
synced 2026-08-28 08:35:57 +00:00
feat: enable permission-aware subagents
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import subagentsExtension from "../src/index.js";
|
||||
|
||||
function agentTool() {
|
||||
const tools = new Map<string, any>();
|
||||
const pi = {
|
||||
registerMessageRenderer: vi.fn(),
|
||||
registerTool: vi.fn((tool: any) => tools.set(tool.name, tool)),
|
||||
registerCommand: vi.fn(),
|
||||
on: vi.fn(),
|
||||
events: { emit: vi.fn(), on: vi.fn(() => vi.fn()) },
|
||||
appendEntry: vi.fn(),
|
||||
sendMessage: vi.fn(),
|
||||
} as any;
|
||||
subagentsExtension(pi);
|
||||
return tools.get("Agent");
|
||||
}
|
||||
|
||||
const theme = {
|
||||
fg: (_color: string, text: string) => text,
|
||||
bold: (text: string) => text,
|
||||
} as any;
|
||||
|
||||
function render(tool: any, result: any): string {
|
||||
return tool.renderResult(
|
||||
{ content: result.content, details: result.details },
|
||||
{ expanded: false, isPartial: false },
|
||||
theme,
|
||||
{ isError: result.isError },
|
||||
).render(120).join("\n");
|
||||
}
|
||||
|
||||
describe("Agent tool invocation error rendering", () => {
|
||||
it("shows a Pi tool error instead of structured terminal status", () => {
|
||||
const output = render(agentTool(), {
|
||||
content: [{ type: "text", text: 'Cannot run with isolation: "worktree" — Git probe failed.' }],
|
||||
isError: true,
|
||||
details: { status: "aborted" },
|
||||
});
|
||||
|
||||
expect(output).toContain('Cannot run with isolation: "worktree" — Git probe failed.');
|
||||
expect(output).not.toContain("Aborted (max turns exceeded)");
|
||||
});
|
||||
|
||||
it.each([
|
||||
["missing details", undefined],
|
||||
["empty details", {}],
|
||||
["unknown status", { status: "unknown" }],
|
||||
["a status with no rendering of its own", { status: "queued" }],
|
||||
])("shows the real result text for %s", (_name, details) => {
|
||||
const output = render(agentTool(), {
|
||||
content: [{ type: "text", text: "Unstructured Agent result." }],
|
||||
isError: false,
|
||||
details,
|
||||
});
|
||||
|
||||
expect(output).toContain("Unstructured Agent result.");
|
||||
expect(output).not.toContain("Aborted (max turns exceeded)");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user