Something went wrong. Try again.
This repository has no description
Something went wrong. Try again.
JavaScript
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509import assert from "node:assert/strict";import { test } from "node:test";import { build } from "esbuild";import { Miniflare, convertV4MiniflareOptions } from "miniflare";import { mkdtemp, rm } from "node:fs/promises";import { tmpdir } from "node:os";import { join } from "node:path";
const packageOf = ( version = "1.0.0", body = "Inspect these exact instructions. 🦊",) => ({ formatVersion: 1, files: [ { path: "SKILL.md", content: `---\nname: managed-skill\ndescription: A managed package\nlicense: Internal-use-only\ncompatibility: Requires Python 3.12\nmetadata:\n version: "${version}"\n author: Alice\nallowed-tools: "shell network"\n---\n${body}`, }, { path: "references/guide.md", content: "# Reference\n<script>never execute this HTML</script>", }, { path: "scripts/run.js", content: 'throw new Error("The inspection script must never execute");', }, { path: "assets/pixel.png", encoding: "base64", content: "iVBORw0KGgo=" }, ],});const origin = { kind: "upload", filename: "managed.skill.json" };const identity = (skill) => ({ source: skill.origin.kind === "bundled" ? "bundled" : "installed", name: skill.name, fingerprint: skill.fingerprint, revision: skill.revision,});async function until(read, predicate) { const deadline = Date.now() + 10_000; do { const value = await read(); if (predicate(value)) return value; await new Promise((resolve) => setTimeout(resolve, 10)); } while (Date.now() < deadline); assert.fail("Native management fixture did not reach the expected state");}
test( "Skill management inspects exact native package bytes and guards current owner identities", { timeout: 90_000 }, async (t) => { const bundle = await build({ entryPoints: ["tests/fixtures/installed-skills-worker.ts"], alias: { path: "node:path" }, target: "es2022", bundle: true, write: false, format: "esm", platform: "neutral", conditions: ["workerd", "worker", "browser"], mainFields: ["module", "main"], external: ["cloudflare:*", "node:*"], }); const persistence = await mkdtemp( join(tmpdir(), "flarebot-skill-management-"), ); let outbound = 0; const options = { ...convertV4MiniflareOptions({ modules: true, script: bundle.outputFiles[0].text, compatibilityDate: "2026-09-04", compatibilityFlags: ["nodejs_compat"], durableObjects: { MODEL: { className: "InstalledSkillsFixture", useSQLite: true }, }, r2Buckets: ["PACKAGES"], outboundService() { outbound++; throw new Error("Inspection must not fetch external content"); }, }), resourcePersistencePath: persistence, }; let worker = new Miniflare(options); const dispatch = (action, value, owner = "alice") => worker.dispatchFetch(`https://fixture.example/${owner}`, { method: "POST", body: JSON.stringify({ action, value }), }); const call = async (action, value, owner) => { const response = await dispatch(action, value, owner); assert.equal(response.status, 200); const result = await response.json(); assert.equal(result.ok, true, JSON.stringify(result)); return result.value; }; const install = (owner, envelope = packageOf(), expectedRevision = null) => call("install", { envelope, origin, expectedRevision }, owner); const manageRaw = async (value, owner = "alice") => { const response = await dispatch("manage", value, owner); assert.equal(response.headers.get("Cache-Control"), "no-store"); return { status: response.status, body: await response.json() }; }; const manage = (action, skill, owner = "alice", extra = {}) => manageRaw( { request: { action, skill: identity(skill), ...extra } }, owner, ); const error = (result, status, code) => { assert.equal(result.status, status, JSON.stringify(result)); assert.equal(result.body.error.code, code, JSON.stringify(result)); assert.deepEqual(Object.keys(result.body.error).sort(), [ "code", "message", "path", ]); assert.ok( result.body.error.message.length > 0 && result.body.error.message.length <= 512, ); assert.equal(result.body.error.path, ""); }; const enabled = async (skill, value, owner = "alice") => ( await call("facade-set", { ...identity(skill), enabled: value }, owner) ).find((item) => item.name === skill.name); const objects = (owner) => call("objects", undefined, owner); const ownObjects = async (owner) => (await objects(owner)).filter((item) => item.key.startsWith(`skills/v1/${owner}/`), ); try { await t.test( "disabled packages expose complete metadata and exact inert file contents", async () => { const envelope = packageOf(); let current = await install("alice", envelope); assert.equal(current.enabled, false); const beforeList = await call("metrics"); const list = await call("facade-list"); assert.equal(list.length, 3); assert.deepEqual( await call("metrics"), beforeList, "listing must not read package objects", ); const preview = await manage("inspect", current); assert.equal(preview.status, 200, JSON.stringify(preview)); assert.equal(preview.body.action, "inspect"); const inspection = preview.body.inspection; assert.equal(inspection.skill.enabled, false); assert.equal(inspection.skill.revision, current.revision); assert.equal(inspection.skill.fingerprint, current.fingerprint); assert.deepEqual(inspection.skill.origin, origin); assert.equal( inspection.instructions, "Inspect these exact instructions. 🦊", ); assert.equal(inspection.license, "Internal-use-only"); assert.equal(inspection.compatibility, "Requires Python 3.12"); assert.deepEqual(inspection.metadata, { version: "1.0.0", author: "Alice", }); assert.equal(inspection.allowedTools, "shell network"); assert.equal(inspection.files.length, envelope.files.length); for (const file of envelope.files) { const metadata = inspection.files.find( (item) => item.path === file.path, ); assert.equal(metadata.encoding, file.encoding ?? "text"); assert.equal( metadata.bytes, file.encoding === "base64" ? Buffer.from(file.content, "base64").length : Buffer.byteLength(file.content), ); const result = await manage("file", current, "alice", { path: file.path, }); assert.equal(result.status, 200, JSON.stringify(result)); assert.deepEqual(result.body, { action: "file", file: { ...file, encoding: file.encoding ?? "text" }, }); } assert.equal( inspection.files.find((item) => item.path === "SKILL.md").kind, "instructions", ); assert.equal( inspection.files.find((item) => item.path === "scripts/run.js") .kind, "script", ); assert.equal( inspection.files.find((item) => item.path === "assets/pixel.png") .mimeType, "image/png", ); const afterReads = await call("metrics"); assert.equal(afterReads.get, beforeList.get + 5); assert.equal(afterReads.put, beforeList.put); assert.equal(afterReads.delete, beforeList.delete); assert.equal(afterReads.list, beforeList.list); current = await enabled(current, true); const enabledPreview = await manage("inspect", current); assert.equal(enabledPreview.body.inspection.skill.enabled, true); assert.equal( (await call("facade-list")).find( (item) => item.name === current.name, ).enabled, true, ); await worker.dispose(); worker = new Miniflare(options); const restored = await manage("inspect", current); assert.equal(restored.status, 200, JSON.stringify(restored)); assert.equal( restored.body.inspection.instructions, inspection.instructions, ); assert.equal(restored.body.inspection.skill.enabled, true); }, );
await t.test( "bundled files are inspectable and removal remains forbidden", async () => { const bundled = (await call("facade-list")).find( (item) => item.origin.kind === "bundled", ); const before = await call("metrics"); const preview = await manage("inspect", bundled); assert.equal(preview.status, 200, JSON.stringify(preview)); assert.ok(preview.body.inspection.instructions.length > 0); const resource = preview.body.inspection.files.find( (file) => file.kind === "reference", ); assert.ok(resource); assert.equal( (await manage("file", bundled, "alice", { path: resource.path })) .status, 200, ); error(await manage("remove", bundled), 400, "skill_bundled"); assert.deepEqual( await call("metrics"), before, "bundled inspection/removal must not touch R2", ); }, );
await t.test( "invalid, stale and cross-owner requests cannot mutate or disclose packages", async () => { const current = (await call("list"))[0]; const before = await call("metrics"); for (const changed of [ { ...current, fingerprint: "0".repeat(64) }, { ...current, revision: current.revision - 1 }, { ...current, origin: { kind: "bundled", release: "forged" } }, ]) for (const action of ["inspect", "file", "remove"]) error( await manage( action, changed, "alice", action === "file" ? { path: "SKILL.md" } : {}, ), 409, "skill_changed", ); assert.deepEqual(await call("metrics"), before); await install( "bob", packageOf("1.0.0", "Bob's different private instructions."), ); for (const action of ["inspect", "file", "remove"]) error( await manage( action, current, "bob", action === "file" ? { path: "SKILL.md" } : {}, ), 409, "skill_changed", ); const invalid = [ { action: "inspect", skill: { ...identity(current), source: "remote" }, }, { action: "remove", skill: { ...identity(current), enabled: true }, }, { action: "file", skill: identity(current), path: "" }, { action: "file", skill: identity(current), path: "x".repeat(241) }, { action: "inspect", skill: identity(current), trusted: true }, ]; for (const request of invalid) error(await manageRaw({ request }), 400, "skill_invalid_request"); error( await manageRaw({ raw: "{broken" }), 400, "skill_invalid_request", ); error( await manageRaw({ raw: " ".repeat(4097) }), 400, "skill_invalid_request", ); error(await manageRaw({ method: "GET" }), 405, "method_not_allowed"); for (const path of [ "../SKILL.md", "references/../SKILL.md", "references%2Fguide.md", "references\\guide.md", "/SKILL.md", "scripts/missing.js", ]) error( await manage("file", current, "alice", { path }), 400, "skill_file_missing", ); for (const action of ["inspect", "file", "remove"]) { const beforeAbort = await call("metrics"); const response = await dispatch("manage-aborted", { request: { action, skill: identity(current), ...(action === "file" ? { path: "SKILL.md" } : {}), }, }); assert.deepEqual(await response.json(), { rejected: true }); assert.deepEqual( await call("metrics"), beforeAbort, "pre-aborted management must perform no R2 operations", ); } assert.equal((await call("list"))[0].enabled, true); }, );
for (const mutation of ["toggle", "update", "remove"]) await t.test( `${mutation} while native R2 is held invalidates the old file result`, async () => { const owner = `race-${mutation}`; let current = await install(owner); await call("fault", { holdGet: true }, owner); const pending = manage("file", current, owner, { path: "references/guide.md", }); await until( () => call("metrics", undefined, owner), (metrics) => metrics.waitingGet, ); if (mutation === "toggle") current = await enabled(current, true, owner); else if (mutation === "update") current = await install( owner, packageOf("2.0.0", "New instructions."), current.revision, ); else assert.equal( (await manage("remove", current, owner)).status, 200, ); await call("fault", { holdGet: false }, owner); const stale = await pending; error(stale, 409, "skill_changed"); assert.ok( !JSON.stringify(stale).includes("never execute this HTML"), ); if (mutation !== "remove") { const fresh = await manage("inspect", current, owner); assert.equal(fresh.status, 200, JSON.stringify(fresh)); assert.equal( fresh.body.inspection.skill.revision, current.revision, ); } }, );
await t.test( "missing, tampered and failed R2 reads fail safely without changing the index", async () => { for (const mode of ["missing", "tampered", "unavailable"]) { const owner = `health-${mode}`; const current = await install(owner); const [object] = await ownObjects(owner); if (mode === "unavailable") await call("fault", { failGet: true }, owner); else await call( "tamper", { key: object.key, content: mode === "missing" ? null : JSON.stringify( packageOf("1.0.0", "Tampered secret instructions."), ), }, owner, ); const beforeList = await call("metrics", undefined, owner); assert.equal( (await call("facade-list", undefined, owner)).length, 3, ); assert.deepEqual( await call("metrics", undefined, owner), beforeList, ); for (const action of ["inspect", "file"]) { const result = await manage( action, current, owner, action === "file" ? { path: "SKILL.md" } : {}, ); error( result, mode === "unavailable" ? 503 : 409, mode === "unavailable" ? "skill_unavailable" : "skill_unreadable", ); assert.ok(!JSON.stringify(result).includes("private R2 error")); assert.ok(!JSON.stringify(result).includes("Tampered secret")); } assert.deepEqual( (await call("list", undefined, owner)).map(identity), [identity(current)], ); assert.equal( (await manage("remove", current, owner)).status, 200, "unreadable bytes do not prevent removal of their current index entry", ); } }, );
await t.test( "removal compares current identity, unpublishes before cleanup and prevents reinstall ABA", async () => { const owner = "removal"; const current = await install(owner); const [object] = await ownObjects(owner); await call("fault", { failDelete: true }, owner); const removed = await manage("remove", current, owner); assert.deepEqual(removed, { status: 200, body: { action: "remove" }, }); assert.deepEqual(await call("list", undefined, owner), []); assert.ok( (await ownObjects(owner)).some((item) => item.key === object.key), ); error(await manage("remove", current, owner), 409, "skill_changed"); await call("fault", { failDelete: false }, owner); await call("gc", undefined, owner); assert.deepEqual(await ownObjects(owner), []); const reinstalled = await install(owner); assert.equal(reinstalled.fingerprint, current.fingerprint); assert.ok(reinstalled.revision > current.revision); const beforeStale = await call("metrics", undefined, owner); error(await manage("remove", current, owner), 409, "skill_changed"); assert.deepEqual( await call("metrics", undefined, owner), beforeStale, ); assert.equal( (await manage("inspect", reinstalled, owner)).status, 200, ); assert.equal( (await manage("remove", reinstalled, owner)).status, 200, ); assert.deepEqual(await ownObjects(owner), []); assert.equal((await call("list", undefined, "bob")).length, 1); }, ); assert.equal( outbound, 0, "inspection never fetches URLs or invokes script transports", ); } finally { await worker.dispose(); await rm(persistence, { recursive: true, force: true }); } },);