feat(FN-3956): execute provisioning on approval decisions

The merge completes Step 1 of agent provisioning approval followthrough, executing provisioning actions when approval decisions are made, with supporting documentation in AGENTS.md and docs/agents.md. Test coverage spans provisioning policy, approval routes, gating classifications, extension integra

Fusion-Task-Id: FN-3956
This commit is contained in:
Fusion
2026-05-10 18:35:13 -07:00
committed by gsxdsm
parent 5b32c45393
commit 7d67dc3597
11 changed files with 392 additions and 5 deletions

View File

@@ -188,6 +188,32 @@ describe.skipIf(!SHOULD_RUN_EXTENSION_INTEGRATION)("built fn pi extension integr
expect(persisted?.description).toBe("Ship the packed CLI contract");
});
it("runs provisioning tools through the built extension", async () => {
const createTool = api.tools.get("fn_agent_create")!;
const created = await createTool.execute(
"create-agent-1",
{ name: "built-ext-agent", role: "executor" },
undefined,
undefined,
makeCtx(tmpDir),
);
expect(created.details.outcome).toBe("created");
expect(created.details.agentId).toMatch(/^agent-/);
const deleteTool = api.tools.get("fn_agent_delete")!;
const deleted = await deleteTool.execute(
"delete-agent-1",
{ id: created.details.agentId },
undefined,
undefined,
makeCtx(tmpDir),
);
expect(deleted.details.outcome).toBe("deleted");
expect(deleted.details.agentId).toBe(created.details.agentId);
});
it("delegates to real non-ephemeral agents and rejects runtime workers", async () => {
const agent = await seedAgent(tmpDir, { name: "release-agent" });
const runtimeWorker = await seedAgent(tmpDir, { name: "runtime-worker", ephemeral: true });