Fork Horse repository, listed by its owner. Publisher snapshot.

packages/forkhorse-dashboard/test/usage-fixtures.ts

Snapshot at 34e3175

Containing directory

5,281 bytes · typescriptView raw
1import type { StateResponse, UsageSources } from "../src/contracts.ts";
2import { reviewFixtureState, reviewFixtureDetail } from "./review-fixtures.ts";
3
4export const usageScenarios = [
5  "usage-race",
6  "usage-no-review",
7  "usage-over",
8  "usage-unchecked",
9  "usage-both",
10  "usage-legacy",
11  "usage-unbudgeted",
12  "usage-reordered",
13];
14export function usageFixtureState(id = "usage-race", now = Date.now()): StateResponse {
15  const state = reviewFixtureState("review-approved");
16  state.project.id = id;
17  state.ledger = [];
18  const at = (minutes: number) => new Date(now - minutes * 60000).toISOString();
19  const usage = (total: number): UsageSources => ({
20    reported: {
21      inputTokens: total - 20000,
22      outputTokens: 20000,
23      model: "fixture-model",
24      source: "reported",
25      at: at(2),
26    },
27    metered: null,
28  });
29  const baseReview = structuredClone(state.reviews[0]);
30  state.agents = ["fixture-agent", "fixture-peer", "fixture-third"].map((name, i) => ({
31    name,
32    createdAt: at(60 - i),
33  }));
34  state.reviews = state.agents.map((a, i) => ({
35    ...structuredClone(baseReview),
36    agent: a.name,
37    id: `usage-review-${i}`,
38    repoName: `fixture-fork-${i}`,
39    sha: String(i + 1).repeat(40),
40    createdAt: at(10 - i),
41    approvedAt: at(5 - i),
42    usageAtReview: usage([420000, 820000, 1100000][i]),
43  }));
44  state.forks = state.reviews.map((r) => ({
45    agent: r.agent,
46    repoName: r.repoName,
47    head: r.sha,
48    remote: "https://fixture.idiot.tax/repo.git",
49    createdAt: at(50),
50  }));
51  for (const [i, r] of state.reviews.entries()) {
52    if (r.receipt) {
53      r.receipt.startedAt = at(10 - i);
54      r.receipt.finishedAt = at(8 - i);
55    }
56  }
57  for (const r of state.reviews) r.approval = { sha: r.sha, receiptDigest: r.receiptDigest };
58  state.packets[0].mode = "race";
59  state.packets[0].tokenBudget = 1000000;
60  state.races = [
61    {
62      packet: state.packets[0].id,
63      status: "open",
64      finishedAt: null,
65      winner: null,
66      ledgerEntryId: null,
67      tokenBudget: 1000000,
68      entrants: state.reviews.map((r, i) => ({
69        agent: r.agent,
70        repoName: r.repoName,
71        claimedAt: at(30 - i),
72        firstPushAt: at(20 - i),
73        reviewRequestedAt: r.createdAt,
74        receiptPassedAt: at(8 - i),
75        approvedAt: r.approvedAt!,
76        promotedAt: null,
77        place: null,
78        closedAt: null,
79        closedBy: null,
80        usage: structuredClone(r.usageAtReview),
81        budget: (["within", "near", "over"] as const)[i],
82      })),
83    },
84  ];
85  state.claims = state.races[0].entrants.map((e) => ({
86    packet: state.packets[0].id,
87    agent: e.agent,
88    repoName: e.repoName,
89    paths: state.packets[0].paths,
90    createdAt: e.claimedAt,
91    usage: e.usage,
92  }));
93  state.activity = state.races[0].entrants.map((e, i) => ({
94    sequence: i + 1,
95    namespace: "fixture",
96    agent: e.agent,
97    repoName: e.repoName,
98    ref: "refs/heads/main",
99    before: baseReview.base,
100    after: state.reviews[i].sha,
101    changedPaths: ["src/example.ts"],
102    recordedAt: e.firstPushAt!,
103    eventTimestamp: e.firstPushAt!,
104  }));
105  if (id === "usage-no-review") {
106    state.reviews = state.reviews.slice(0, 2);
107    const entrant = state.races[0].entrants[2];
108    entrant.reviewRequestedAt = null;
109    entrant.receiptPassedAt = null;
110    entrant.approvedAt = null;
111  }
112  if (id === "usage-over") {
113    state.reviews = [state.reviews[2]];
114  }
115  if (id === "usage-unchecked") {
116    state.races[0].entrants[0].usage = { reported: null, metered: null };
117    state.races[0].entrants[0].budget = "unchecked";
118    state.claims[0].usage = state.races[0].entrants[0].usage;
119    state.reviews[0].usageAtReview = state.races[0].entrants[0].usage;
120  }
121  if (id === "usage-both") {
122    for (const e of state.races[0].entrants)
123      e.usage!.metered = { inputTokens: 240000, outputTokens: 10000, source: "metered", at: at(1) };
124    for (const r of state.reviews)
125      r.usageAtReview = structuredClone(
126        state.races[0].entrants.find((e) => e.agent === r.agent)!.usage,
127      );
128    for (const e of state.races[0].entrants) e.budget = "within";
129  }
130  if (id === "usage-unbudgeted") {
131    state.races[0].tokenBudget = null;
132    state.packets[0].tokenBudget = null;
133    for (const entrant of state.races[0].entrants) {
134      entrant.usage = { reported: null, metered: null };
135      entrant.budget = "unchecked";
136    }
137    for (const claim of state.claims) claim.usage = { reported: null, metered: null };
138    for (const review of state.reviews) review.usageAtReview = { reported: null, metered: null };
139  }
140  if (id === "usage-reordered") state.races[0].entrants.reverse();
141  if (id === "usage-legacy") {
142    for (const r of state.reviews) delete r.usageAtReview;
143    for (const c of state.claims) delete c.usage;
144    for (const e of state.races[0].entrants) {
145      delete e.usage;
146      delete e.budget;
147    }
148    delete state.races[0].tokenBudget;
149    delete state.packets[0].tokenBudget;
150  }
151  return state;
152}
153export function usageFixtureDetail(state: StateResponse, id: string) {
154  const review = state.reviews.find((r) => r.id === id)!;
155  const detail = reviewFixtureDetail({ ...state, reviews: [review] });
156  detail.changes.fileCount = detail.changes.files.length;
157  return detail;
158}
159