Add opt-in Frida session status summaries linked to complete retained Evidence. Share canonical session facts across contracts and preserve observed state, source identity and capture truncation. Validated with native SDK/client workflows, default delivery compatibility, lifecycle and provenance tests. The completed large-history task uses 50.9% fewer estimated request tokens; no general CPU or latency improvement is claimed. Fixes #5640
72 lines
2.5 KiB
TypeScript
72 lines
2.5 KiB
TypeScript
import { writeFile } from "node:fs/promises";
|
|
import { join } from "node:path";
|
|
import { expect } from "vitest";
|
|
import { createEvidence, parseEvidence } from "../../../src/domain/evidence.js";
|
|
import { fridaSessionStatusSummaryViewResultSchema } from "../../../src/domain/analysisView/analysisView.js";
|
|
import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js";
|
|
import { cliTest } from "../../support/cli/cliFixture.js";
|
|
|
|
cliTest(
|
|
"summarizes historical Frida status from a complete Evidence file without a live session",
|
|
async ({ cli }) => {
|
|
const id = "00000000-0000-4000-8000-000000000001";
|
|
const parent = createEvidence(
|
|
undefined,
|
|
{ id: "frida", name: "Frida", version: null },
|
|
{
|
|
operation: "frida_session_status",
|
|
parameters: { session_id: id },
|
|
authority: "external-service",
|
|
environment: null,
|
|
limitations: ["Target OS and architecture were not observed."],
|
|
result: {
|
|
session_id: id,
|
|
device_id: "remote",
|
|
target: "selected target",
|
|
pid: 0,
|
|
mode: "attach",
|
|
state: "detached",
|
|
scripts: [],
|
|
messages: [{ payload: "retained only" }, null],
|
|
messages_truncated: true,
|
|
},
|
|
},
|
|
);
|
|
const root = await createTestTempDirectory("rea-frida-status-view-");
|
|
const source = join(root, "parent.json");
|
|
const request = join(root, "request.json");
|
|
await writeFile(source, JSON.stringify(parent));
|
|
await writeFile(
|
|
request,
|
|
JSON.stringify({
|
|
source: { kind: "evidence-file", path: source },
|
|
view: { kind: "summary" },
|
|
}),
|
|
);
|
|
const result = await cli.run({
|
|
arguments: ["inspect-analysis-view", request, "--json"],
|
|
});
|
|
expect(result.exitCode).toBe(0);
|
|
const evidence = parseEvidence(result.json);
|
|
const view = fridaSessionStatusSummaryViewResultSchema.parse(
|
|
evidence.normalized_result,
|
|
);
|
|
expect(view).toMatchObject({
|
|
parent_evidence_id: parent.evidence_id,
|
|
source_provider: parent.provider,
|
|
source_parameters: parent.parameters,
|
|
artifact: null,
|
|
summary: {
|
|
pid: 0,
|
|
state: "detached",
|
|
messages_retained: 2,
|
|
messages_truncated: true,
|
|
},
|
|
});
|
|
expect(view.unknowns.join(" ")).toContain("does not refresh live state");
|
|
expect(view.limitations).toContain(parent.limitations[0]);
|
|
expect(evidence.authority).toBe("external-service");
|
|
expect(JSON.stringify(evidence)).not.toContain("retained only");
|
|
},
|
|
);
|