53 lines
2.3 KiB
TypeScript
53 lines
2.3 KiB
TypeScript
// 验è¯<C3A8>命令授æ<CB86>ƒçº§åˆ«ï¼šlow=全部ä¸<C3A4>审æ ? high=æ¯<C3A6>个都审æ ? medium=ä»…å<E280A6>±é™©å®¡æ ?const dec = new TextDecoder();
|
||
|
||
async function setLevel(level: string) {
|
||
await fetch("http://127.0.0.1:3100/api/settings", {
|
||
method: "POST", headers: { "Content-Type": "application/json" },
|
||
body: JSON.stringify({ CMD_APPROVE_LEVEL: level }),
|
||
});
|
||
}
|
||
|
||
async function run(prompt: string): Promise<{ text: string; approval: boolean }> {
|
||
const resp = await fetch("http://127.0.0.1:3100/api/chat", {
|
||
method: "POST", headers: { "Content-Type": "application/json" },
|
||
body: JSON.stringify({ messages: [{ role: "user", content: prompt }] }),
|
||
});
|
||
const reader = resp.body!.getReader();
|
||
let buf = "", out = "", approval = false;
|
||
while (true) {
|
||
const { done, value } = await reader.read();
|
||
if (done) break;
|
||
buf += dec.decode(value, { stream: true });
|
||
const lines = buf.split("\n"); buf = lines.pop() || "";
|
||
for (const line of lines) {
|
||
const t = line.trim(); if (!t.startsWith("data:")) continue;
|
||
let ev: any; try { ev = JSON.parse(t.slice(5).trim()); } catch { continue; }
|
||
if (ev.type === "token") out += ev.content;
|
||
if (ev.type === "approval_required") { approval = true; console.log(" [需审批]", ev.tool, "�, ev.command); }
|
||
}
|
||
}
|
||
return { text: out, approval };
|
||
}
|
||
|
||
console.log("=== low:执行命ä»?echo,应ä¸<EFBFBD>å®¡æ ¸ç›´æŽ¥æ‰§è¡?===");
|
||
await setLevel("low");
|
||
const low = await run("请执行命ä»? echo ä½ å¥½å°<EFBFBD>é‘«");
|
||
console.log(" 需审批?", low.approval, "| 包å<EFBFBD>«è¾“出?", low.text.includes("ä½ å¥½å°<EFBFBD>é‘«"));
|
||
console.log(" 判定:", !low.approval && low.text.includes("ä½ å¥½å°<EFBFBD>é‘«") ? "PASS âœ? : "FAIL â<>?);
|
||
|
||
console.log("\n=== high:执行命ä»?echo,应æ¯<EFBFBD>次都审æ ?===");
|
||
await setLevel("high");
|
||
const high = await run("请执行命ä»? echo ä½ å¥½å°<EFBFBD>é‘«");
|
||
console.log(" 需审批?", high.approval);
|
||
console.log(" 判定:", high.approval ? "PASS âœ? : "FAIL â<>?);
|
||
|
||
console.log("\n=== medium:å<EFBFBD>±é™©å‘½ä»?åˆ é™¤)åº”å®¡æ ¸ï¼Œå®‰å…¨å‘½ä»¤ä¸<EFBFBD>审æ ?===");
|
||
await setLevel("medium");
|
||
const med = await run("请执行命� echo 安全命令测试");
|
||
console.log(" 安全命令需审批?", med.approval, "(应�false�);
|
||
console.log(" 判定:", !med.approval ? "PASS âœ? : "FAIL â<EFBFBD>?);
|
||
|
||
// æ<>¢å¤<C3A5>默认
|
||
await setLevel("medium");
|
||
console.log("\nå·²æ<EFBFBD>¢å¤?mediumã€?);
|