Open History to see the last commit
1import { assert } from "@effect/vitest";
2import type { ProviderReplayTranscript } from "@t3tools/contracts";
3
4import type { OrchestratorV2ScenarioResult } from "../../OrchestratorScenario.ts";
5import {
6 assertBaseProjection,
7 assertSemanticProjectionIntegrity,
8 assertUserMessagesInclude,
9 assertVisibleTurnItemsMirrorLocalTurnItems,
10 OPENCODE2_PERMISSION_PROMPT,
11 projectionFor,
12} from "../shared.ts";
13
14export function assertOpenCode2PermissionOutput(
15 result: OrchestratorV2ScenarioResult,
16 transcript: ProviderReplayTranscript,
17) {
18 assertBaseProjection({ result, transcript, runCount: 1, runStatuses: ["completed"] });
19 const projection = projectionFor(result, transcript.scenario);
20 assertSemanticProjectionIntegrity(projection);
21 assertVisibleTurnItemsMirrorLocalTurnItems(projection);
22 assertUserMessagesInclude(projection, [OPENCODE2_PERMISSION_PROMPT]);
23
24 const requests = projection.runtimeRequests.toSorted((left, right) =>
25 left.createdAt < right.createdAt ? -1 : 1,
26 );
27 assert.deepEqual(
28 requests.map((request) => [request.kind, request.status, request.decision]),
29 [
30 ["command", "resolved", "accept"],
31 ["command", "resolved", "decline"],
32 ["command", "resolved", "decline"],
33 ["command", "resolved", "decline"],
34 ],
35 );
36 assert.deepEqual(
37 requests.map((request) => request.nativeRequestRef?.nativeId),
38 [
39 "per_0eb7c4d7e001Pyt8o50Vi4KrOO",
40 "per_0eb7c5376001gkpJzQEeWtaoRE",
41 "per_0eb7c5b1f001zGfBgDhzxz8z10",
42 "per_0eb7c6755001DdRDvkLLSYU4BD",
43 ],
44 );
45
46 const approvals = projection.turnItems.filter((item) => item.type === "approval_request");
47 assert.deepEqual(
48 approvals.map((item) => [item.status, item.type === "approval_request" ? item.prompt : null]),
49 [
50 ["completed", "echo FIRST"],
51 ["cancelled", "echo SECOND"],
52 ["cancelled", "echo SECOND"],
53 ["cancelled", "echo THIRD_PROBE"],
54 ],
55 );
56 const options = approvals[0]?.type === "approval_request" ? (approvals[0].options ?? []) : [];
57 assert.deepInclude(options, {
58 decision: "acceptForSession",
59 label: "Allow echo * this session",
60 });
61
62 const shells = projection.turnItems.filter((item) => item.type === "command_execution");
63 assert.deepEqual(
64 shells.map((item) => [
65 item.type === "command_execution" ? item.input : null,
66 item.status,
67 item.type === "command_execution" ? item.output : null,
68 ]),
69 [
70 ["echo FIRST", "completed", "FIRST\n"],
71 ["echo SECOND", "failed", "Unable to execute command: echo SECOND"],
72 ["echo SECOND", "failed", "Unable to execute command: echo SECOND"],
73 ["echo THIRD_PROBE", "failed", "Unable to execute command: echo THIRD_PROBE"],
74 ],
75 );
76}