39 lines
1.6 KiB
TypeScript
39 lines
1.6 KiB
TypeScript
// What the generated tenant-isolation suite needs of this module: seeds and one fixture per
|
|
// tenant-scoped procedure, built from the OTHER tenant's ids.
|
|
|
|
import type { TransportCaller } from "@conusai-kit/core"
|
|
import type { IsolationFixture, IsolationTenant } from "@conusai-kit/testing"
|
|
|
|
export interface ModuleIsolation {
|
|
seed(
|
|
call: TransportCaller,
|
|
inProject: { org: string; workspace: string; project: string },
|
|
): Promise<Record<string, string>>
|
|
fixtures: Record<string, IsolationFixture>
|
|
}
|
|
|
|
const NOWHERE = "00000000-0000-0000-0000-000000000000"
|
|
const inProjectOf = (t: IsolationTenant) => ({ org: t.orgSlug, workspace: t.workspaceSlug, project: t.projectSlug })
|
|
const runOf = (t: IsolationTenant) => t.extra.agentRunId ?? NOWHERE
|
|
|
|
const PLAN = [{ key: "read", label: "Read", tool: "documents.read", args: {} }]
|
|
|
|
export const isolation: ModuleIsolation = {
|
|
async seed(call, inProject) {
|
|
const started = (await call.callByName("agent.run.start", { ...inProject, goal: "Seed run", plan: PLAN })) as {
|
|
runId: string
|
|
}
|
|
return { agentRunId: started.runId }
|
|
},
|
|
fixtures: {
|
|
"agent.run.start": { input: (t) => ({ ...inProjectOf(t), goal: "Intruder", plan: PLAN }) },
|
|
"agent.run.status": { input: (t) => ({ ...inProjectOf(t), runId: runOf(t) }) },
|
|
"agent.run.cancel": { input: (t) => ({ ...inProjectOf(t), runId: runOf(t) }) },
|
|
"agent.run.list": { input: (t) => inProjectOf(t) },
|
|
"agent.approval.list": { input: (t) => inProjectOf(t) },
|
|
"agent.approval.review": {
|
|
input: (t) => ({ ...inProjectOf(t), runId: runOf(t), stepKey: "read", decision: "approve" }),
|
|
},
|
|
},
|
|
}
|