feat: integrate Pi backend and Pi Web

This commit is contained in:
luckyyzh
2026-07-30 19:37:53 +08:00
commit 7392ab9dd7
1390 changed files with 337197 additions and 0 deletions
+63
View File
@@ -0,0 +1,63 @@
import { existsSync, mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { randomUUID } from "node:crypto";
import { agentDir } from "./profile.mjs";
const baseUrl = process.env.PI_WEB_URL ?? "http://127.0.0.1:30141";
const suffix = randomUUID().replaceAll("-", "");
const managedSkillName = `managed-probe-${suffix}`;
const externalSkillName = `external-probe-${suffix}`;
const managedSkillDir = join(agentDir, "skills", managedSkillName);
const workspace = mkdtempSync(join(tmpdir(), "pi-managed-workspace-"));
const externalSkillDir = join(workspace, ".agents", "skills", externalSkillName);
const externalExtensionDir = join(workspace, ".pi", "extensions");
const externalExtensionMarker = join(workspace, "external-extension-executed");
async function readJson(path, init) {
const response = await fetch(`${baseUrl}${path}`, init);
const data = await response.json();
if (!response.ok) throw new Error(`${path} returned ${response.status}: ${data.error ?? "unknown error"}`);
return data;
}
try {
mkdirSync(managedSkillDir, { recursive: true });
mkdirSync(externalSkillDir, { recursive: true });
mkdirSync(externalExtensionDir, { recursive: true });
writeFileSync(
join(managedSkillDir, "SKILL.md"),
`---\nname: ${managedSkillName}\ndescription: managed isolation probe\n---\nManaged probe.\n`,
);
writeFileSync(
join(externalSkillDir, "SKILL.md"),
`---\nname: ${externalSkillName}\ndescription: external isolation probe\n---\nExternal probe.\n`,
);
writeFileSync(
join(externalExtensionDir, "probe.js"),
`import { writeFileSync } from "node:fs";\nexport default () => { writeFileSync(${JSON.stringify(externalExtensionMarker)}, "executed"); };\n`,
);
await readJson("/api/cwd/validate", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ cwd: workspace }),
});
const result = await readJson(`/api/skills?cwd=${encodeURIComponent(workspace)}`);
const names = new Set(result.skills.map((skill) => skill.name));
const managedSkillLoaded = names.has(managedSkillName);
const externalWorkspaceSkillLoaded = names.has(externalSkillName);
const externalWorkspaceExtensionExecuted = existsSync(externalExtensionMarker);
if (!managedSkillLoaded || externalWorkspaceSkillLoaded || externalWorkspaceExtensionExecuted) {
throw new Error("Managed resource isolation check failed");
}
console.log(JSON.stringify({
managedSkillLoaded,
externalWorkspaceSkillLoaded,
externalWorkspaceExtensionExecuted,
}, null, 2));
} finally {
rmSync(managedSkillDir, { recursive: true, force: true });
rmSync(workspace, { recursive: true, force: true });
}