mirror of
https://bitbucket.org/siakitem/my-pi.git
synced 2026-08-28 08:35:57 +00:00
feat: vendor permission system source
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import {
|
||||
describeBashCommandContext,
|
||||
flaggedElementLabel,
|
||||
flaggedElements,
|
||||
valueLabel,
|
||||
} from "#src/presentation/fact-vocabulary";
|
||||
import type {
|
||||
PromptEvidence,
|
||||
PromptPayloadKind,
|
||||
} from "#src/presentation/prompt-payload";
|
||||
import { makePromptPayload } from "#test/helpers/prompt-details-fixtures";
|
||||
|
||||
/** A payload of the given kind whose flagged value and evidence are set. */
|
||||
function payloadOf(
|
||||
kind: PromptPayloadKind,
|
||||
value: string,
|
||||
evidence: PromptEvidence[] = [],
|
||||
) {
|
||||
const base = makePromptPayload();
|
||||
return {
|
||||
...base,
|
||||
kind,
|
||||
request: { ...base.request, value },
|
||||
evidence,
|
||||
};
|
||||
}
|
||||
|
||||
/** An `external path` evidence entry, as the bash external-directory gate emits it. */
|
||||
function externalPath(path: string, resolved: string | null): PromptEvidence {
|
||||
return { label: "external path", text: path, detail: resolved };
|
||||
}
|
||||
|
||||
describe("flaggedElements", () => {
|
||||
it("flags the decision-relevant value for a single-value ask", () => {
|
||||
expect(flaggedElements(payloadOf("path", "/etc/hosts"))).toEqual([
|
||||
"/etc/hosts",
|
||||
]);
|
||||
});
|
||||
|
||||
it("flags the command for a bash ask", () => {
|
||||
expect(flaggedElements(payloadOf("bash", "rm -rf build"))).toEqual([
|
||||
"rm -rf build",
|
||||
]);
|
||||
});
|
||||
|
||||
it("flags the escaping paths rather than the command for a bash external-directory ask", () => {
|
||||
expect(
|
||||
flaggedElements(
|
||||
payloadOf("bash_external_directory", "diff /etc/hosts ~/.ssh/config", [
|
||||
{ label: "working directory", text: "/repo", detail: null },
|
||||
externalPath("/etc/hosts", null),
|
||||
externalPath("~/.ssh/config", "/home/me/.ssh/config"),
|
||||
]),
|
||||
),
|
||||
).toEqual(["/etc/hosts", "~/.ssh/config"]);
|
||||
});
|
||||
|
||||
it("flags nothing when the value is empty", () => {
|
||||
expect(flaggedElements(payloadOf("tool", ""))).toEqual([]);
|
||||
});
|
||||
});
|
||||
|
||||
describe("valueLabel", () => {
|
||||
it.each([
|
||||
["bash", "command"],
|
||||
["bash_external_directory", "command"],
|
||||
["mcp", "target"],
|
||||
["tool", "tool"],
|
||||
["path", "path"],
|
||||
["external_directory", "path"],
|
||||
["skill", "skill"],
|
||||
["skill_read", "skill"],
|
||||
] as const)("labels a %s ask's value %s", (kind, label) => {
|
||||
expect(valueLabel(payloadOf(kind, "value"))).toBe(label);
|
||||
});
|
||||
|
||||
it.each([
|
||||
["bash", "command"],
|
||||
["skill", "skill"],
|
||||
["read", "value"],
|
||||
])("infers a payload-less forwarded ask's label from its %s surface", (surface, label) => {
|
||||
const base = payloadOf("forwarded", "value");
|
||||
expect(valueLabel({ ...base, request: { ...base.request, surface } })).toBe(
|
||||
label,
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe("flaggedElementLabel", () => {
|
||||
it("labels the escaping paths a bash external-directory ask flags", () => {
|
||||
expect(
|
||||
flaggedElementLabel(payloadOf("bash_external_directory", "cmd")),
|
||||
).toBe("path");
|
||||
});
|
||||
|
||||
it.each([
|
||||
"bash",
|
||||
"mcp",
|
||||
"path",
|
||||
"skill",
|
||||
] as const)("agrees with the value label for a %s ask, whose value is what it flags", (kind) => {
|
||||
const single = payloadOf(kind, "value");
|
||||
expect(flaggedElementLabel(single)).toBe(valueLabel(single));
|
||||
});
|
||||
});
|
||||
|
||||
describe("describeBashCommandContext", () => {
|
||||
it.each([
|
||||
["command_substitution", "command substitution"],
|
||||
["process_substitution", "process substitution"],
|
||||
["subshell", "subshell"],
|
||||
] as const)("names a %s context", (context, label) => {
|
||||
expect(describeBashCommandContext(context)).toBe(label);
|
||||
});
|
||||
|
||||
it("names no context for a current-shell command", () => {
|
||||
expect(describeBashCommandContext(null)).toBeUndefined();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user