chore(vendor): import pi 1.3.0
Imported as a linear vendor commit so forge rebases do not replay the upstream root tree. git-subtree-dir: third_party/pi git-subtree-split: 71023aec1546d6d677a65669c5665c0927ce0dd0
This commit is contained in:
@@ -115,16 +115,6 @@ describe("parseArgs", () => {
|
||||
expect(result.appendSystemPrompt).toEqual(["Context A", "Context B"]);
|
||||
});
|
||||
|
||||
test("parses --mode", () => {
|
||||
const result = parseArgs(["--mode", "json"]);
|
||||
expect(result.mode).toBe("json");
|
||||
});
|
||||
|
||||
test("parses --mode rpc", () => {
|
||||
const result = parseArgs(["--mode", "rpc"]);
|
||||
expect(result.mode).toBe("rpc");
|
||||
});
|
||||
|
||||
test("parses --session", () => {
|
||||
const result = parseArgs(["--session", "/path/to/session.jsonl"]);
|
||||
expect(result.session).toBe("/path/to/session.jsonl");
|
||||
@@ -155,6 +145,54 @@ describe("parseArgs", () => {
|
||||
const result = parseArgs(["--models", "gpt-4o,claude-sonnet,gemini-pro"]);
|
||||
expect(result.models).toEqual(["gpt-4o", "claude-sonnet", "gemini-pro"]);
|
||||
});
|
||||
|
||||
// Issue #10334
|
||||
test("ignores empty entries in --models", () => {
|
||||
const result = parseArgs(["--models", "gpt-4o, ,claude-sonnet,"]);
|
||||
expect(result.models).toEqual(["gpt-4o", "claude-sonnet"]);
|
||||
});
|
||||
});
|
||||
|
||||
// Issue #9045
|
||||
describe("--mode flag", () => {
|
||||
test.each(["text", "json", "rpc"] as const)("parses --mode %s", (mode) => {
|
||||
const result = parseArgs(["--mode", mode]);
|
||||
expect(result.mode).toBe(mode);
|
||||
expect(result.diagnostics).toEqual([]);
|
||||
});
|
||||
|
||||
test.each(["yaml", ""])("rejects invalid --mode value %j", (mode) => {
|
||||
const result = parseArgs(["--mode", mode, "--version"]);
|
||||
expect(result.mode).toBeUndefined();
|
||||
expect(result.version).toBe(true);
|
||||
expect(result.messages).toEqual([]);
|
||||
expect(result.unknownFlags.size).toBe(0);
|
||||
expect(result.diagnostics).toEqual([
|
||||
{ type: "error", message: `Invalid mode "${mode}". Valid values: text, json, rpc` },
|
||||
]);
|
||||
});
|
||||
|
||||
test("reports a missing --mode value", () => {
|
||||
const result = parseArgs(["--mode"]);
|
||||
expect(result.mode).toBeUndefined();
|
||||
expect(result.unknownFlags.size).toBe(0);
|
||||
expect(result.diagnostics).toEqual([{ type: "error", message: "--mode requires text, json, or rpc" }]);
|
||||
});
|
||||
|
||||
test("does not consume another option as a --mode value", () => {
|
||||
const result = parseArgs(["--mode", "--version"]);
|
||||
expect(result.mode).toBeUndefined();
|
||||
expect(result.version).toBe(true);
|
||||
expect(result.unknownFlags.size).toBe(0);
|
||||
expect(result.diagnostics).toEqual([{ type: "error", message: "--mode requires text, json, or rpc" }]);
|
||||
});
|
||||
|
||||
test("reports an invalid --mode value after a valid one", () => {
|
||||
const result = parseArgs(["--mode", "json", "--mode", "yaml"]);
|
||||
expect(result.diagnostics).toEqual([
|
||||
{ type: "error", message: 'Invalid mode "yaml". Valid values: text, json, rpc' },
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
||||
describe("--name flag", () => {
|
||||
@@ -244,6 +282,14 @@ describe("parseArgs", () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe("--no-mcp flag", () => {
|
||||
test("parses --no-mcp flag", () => {
|
||||
const result = parseArgs(["--no-mcp"]);
|
||||
expect(result.noMcp).toBe(true);
|
||||
expect(result.unknownFlags.size).toBe(0);
|
||||
});
|
||||
});
|
||||
|
||||
describe("--skill flag", () => {
|
||||
test("parses single --skill", () => {
|
||||
const result = parseArgs(["--skill", "./skill-dir"]);
|
||||
@@ -419,6 +465,31 @@ describe("parseArgs", () => {
|
||||
expect(result.tools).toEqual(["read", "bash"]);
|
||||
});
|
||||
|
||||
test("parses +name and -name tool modifiers", () => {
|
||||
const result = parseArgs(["-t", "+codemode,-write"]);
|
||||
expect(result.tools).toEqual(["+codemode", "-write"]);
|
||||
expect(result.diagnostics).toEqual([]);
|
||||
});
|
||||
|
||||
test("rejects tool names mixed with modifiers", () => {
|
||||
const result = parseArgs(["--tools", "read,+codemode"]);
|
||||
expect(result.tools).toBeUndefined();
|
||||
expect(result.diagnostics).toEqual([
|
||||
{ type: "error", message: "--tools: tool names cannot be mixed with +name or -name entries" },
|
||||
]);
|
||||
});
|
||||
|
||||
test("rejects patterns in tool modifiers", () => {
|
||||
const result = parseArgs(["-t", "+mcp__radius__*"]);
|
||||
expect(result.tools).toBeUndefined();
|
||||
expect(result.diagnostics).toEqual([
|
||||
{
|
||||
type: "error",
|
||||
message: "-t: +name and -name entries take exact tool names, not patterns: +mcp__radius__*",
|
||||
},
|
||||
]);
|
||||
});
|
||||
|
||||
test("parses --exclude-tools flag", () => {
|
||||
const result = parseArgs(["--exclude-tools", "read,bash"]);
|
||||
expect(result.excludeTools).toEqual(["read", "bash"]);
|
||||
|
||||
Reference in New Issue
Block a user