Files
UHD_Media_Tool/packages/agent/test/fixtures/crash-run.ts
T
rootandClaude Fable 5.1 9c881e737f feat(agent): capability registry, Pi AgentRuntimePort, fake model provider and redaction guard (W1-5)
- CapabilityRegistry: descriptor(id/version/schema/scope/risk/idempotent/preview/replay),
  invoke = scope limit -> input schema -> server-side authorize -> idempotency key -> handler
  -> output schema -> audit; capability id <-> tool name mapping (download.submit <-> download__submit)
- PiAgentRuntime (pi-agent-core AgentHarness 0.87.1): whitelist tools + before_tool re-check,
  redacted event stream, JSONL session at sessionDir/<runId>.jsonl, resume/abort/compact,
  tool-call/duration/token/cost budgets -> abort + run_failed(budget)
- AgentSettings -> pi-ai createProvider (anthropic / openai-compatible), compaction mapping
- FakeModelProvider + createFakeRuntime (scripted, transcript-derived, survives crash/resume)
- buildSystemPrompt, redactForModel; 27 tests incl. SIGKILL + resume

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-27 17:55:28 +08:00

27 lines
999 B
TypeScript

// 子进程:启动 run,download.submit 执行中挂起;父进程收到 SUBMIT_STARTED 后 SIGKILL 本进程。
import { createFakeRuntime } from "../../src";
import { makeFixture, settings } from "../helpers";
import { crashScript, RUN_ID } from "./crash-script";
const sessionDir = process.argv[2]!;
const fx = makeFixture({ slowMs: 60_000 });
fx.grants.set("user:1", new Set(["download.submit"]));
const { runtime } = createFakeRuntime({
registry: fx.registry,
scripts: [crashScript],
onEvent: (e) => {
if (e.type === "tool_call_start" && e.capabilityId === "download.submit") process.stdout.write("SUBMIT_STARTED\n");
},
});
const run = await runtime.createRun({
runId: RUN_ID,
goal: "把 Dune 1080p 收进来",
systemPrompt: "媒体库助手",
capabilities: ["inventory.query", "download.submit"],
settings: settings(),
sessionDir,
actor: { actorId: "user:1", taskId: "task:crash", scopeIds: [] },
});
await run.prompt();
process.stdout.write("UNEXPECTED_FINISH\n");