pinecall 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/README.md +12 -5
  2. package/dist/cli/chat.d.ts.map +1 -1
  3. package/dist/cli/chat.js +4 -2
  4. package/dist/cli/chat.js.map +1 -1
  5. package/dist/cli/config.d.ts.map +1 -1
  6. package/dist/cli/config.js +30 -7
  7. package/dist/cli/config.js.map +1 -1
  8. package/dist/cli/env.d.ts +4 -4
  9. package/dist/cli/env.d.ts.map +1 -1
  10. package/dist/cli/env.js +11 -8
  11. package/dist/cli/env.js.map +1 -1
  12. package/dist/cli/gateway.d.ts +12 -0
  13. package/dist/cli/gateway.d.ts.map +1 -0
  14. package/dist/cli/gateway.js +63 -0
  15. package/dist/cli/gateway.js.map +1 -0
  16. package/dist/cli/index.d.ts.map +1 -1
  17. package/dist/cli/index.js +10 -4
  18. package/dist/cli/index.js.map +1 -1
  19. package/dist/cli/knowledge.d.ts.map +1 -1
  20. package/dist/cli/knowledge.js +6 -3
  21. package/dist/cli/knowledge.js.map +1 -1
  22. package/dist/cli/line.d.ts.map +1 -1
  23. package/dist/cli/line.js +9 -6
  24. package/dist/cli/line.js.map +1 -1
  25. package/dist/cli/login.d.ts +1 -1
  26. package/dist/cli/login.d.ts.map +1 -1
  27. package/dist/cli/login.js +87 -10
  28. package/dist/cli/login.js.map +1 -1
  29. package/dist/cli/profiles.d.ts +24 -2
  30. package/dist/cli/profiles.d.ts.map +1 -1
  31. package/dist/cli/profiles.js +36 -0
  32. package/dist/cli/profiles.js.map +1 -1
  33. package/dist/cli/prompt.d.ts.map +1 -1
  34. package/dist/cli/prompt.js +2 -1
  35. package/dist/cli/prompt.js.map +1 -1
  36. package/dist/cli/run-console.d.ts +15 -0
  37. package/dist/cli/run-console.d.ts.map +1 -0
  38. package/dist/cli/run-console.js +49 -0
  39. package/dist/cli/run-console.js.map +1 -0
  40. package/dist/cli/run-screens.d.ts +1 -0
  41. package/dist/cli/run-screens.d.ts.map +1 -1
  42. package/dist/cli/run-screens.js +1 -1
  43. package/dist/cli/run-screens.js.map +1 -1
  44. package/dist/cli/run.d.ts +4 -5
  45. package/dist/cli/run.d.ts.map +1 -1
  46. package/dist/cli/run.js +73 -46
  47. package/dist/cli/run.js.map +1 -1
  48. package/dist/cli/serve/server.d.ts +35 -0
  49. package/dist/cli/serve/server.d.ts.map +1 -0
  50. package/dist/cli/serve/server.js +199 -0
  51. package/dist/cli/serve/server.js.map +1 -0
  52. package/dist/cli/serve/sidecar.d.ts +31 -0
  53. package/dist/cli/serve/sidecar.d.ts.map +1 -0
  54. package/dist/cli/serve/sidecar.js +74 -0
  55. package/dist/cli/serve/sidecar.js.map +1 -0
  56. package/dist/cli/serve.d.ts +14 -0
  57. package/dist/cli/serve.d.ts.map +1 -0
  58. package/dist/cli/serve.js +81 -0
  59. package/dist/cli/serve.js.map +1 -0
  60. package/dist/cli/signup.d.ts.map +1 -1
  61. package/dist/cli/signup.js +7 -3
  62. package/dist/cli/signup.js.map +1 -1
  63. package/dist/cli/testing/reproduction.d.ts +6 -1
  64. package/dist/cli/testing/reproduction.d.ts.map +1 -1
  65. package/dist/cli/testing/reproduction.js +11 -1
  66. package/dist/cli/testing/reproduction.js.map +1 -1
  67. package/dist/cli/ui/admin/assets/{index-DotmbMtQ.js → index-BpdIOuyO.js} +1 -1
  68. package/dist/cli/ui/admin/index.html +1 -1
  69. package/dist/cli/ui/console/assets/index-C7LdwphQ.css +1 -0
  70. package/dist/cli/ui/console/assets/index-DTMBzpRG.js +102 -0
  71. package/dist/cli/ui/console/favicon.png +0 -0
  72. package/dist/cli/ui/console/index.html +4 -4
  73. package/dist/cli/ui/console/pinecall-logo.png +0 -0
  74. package/dist/cli/ui/console/pinecall-mark.png +0 -0
  75. package/dist/client/client.d.ts +6 -0
  76. package/dist/client/client.d.ts.map +1 -1
  77. package/dist/client/client.js +20 -0
  78. package/dist/client/client.js.map +1 -1
  79. package/package.json +2 -2
  80. package/dist/cli/ui/console/assets/index-BVvP6fgr.js +0 -100
  81. package/dist/cli/ui/console/assets/index-DPF4-rtt.css +0 -1
@@ -0,0 +1,74 @@
1
+ /** One sandbox console per machine: open it, or find the one already up and use that. */
2
+ import { existsSync } from "node:fs";
3
+ import { fileURLToPath } from "node:url";
4
+ import { orgOf } from "../whoami.js";
5
+ import { ABOUT, DEFAULT_PORT, LocalConsole } from "./server.js";
6
+ // A checkout runs everything else from its sources; the console is the one thing that has to be
7
+ // bundled first, because a browser reads no TypeScript. The sentence names the command.
8
+ export const NOT_BUILT = "the console is not built: run scripts/build once, then pinecall serve";
9
+ // How many ports past the first are tried when a stranger holds it. A person with five things on
10
+ // 4100–4104 has said something about their machine, and is told which flag answers it.
11
+ const TRIES = 5;
12
+ // A sidecar answers this at once or is not one: the probe must never hold `pinecall run` back.
13
+ const PROBE_MS = 400;
14
+ /** The port could not be had, or the console was never built: a sentence for the person, not a stack. */
15
+ export class NoSidecar extends Error {
16
+ name = "NoSidecar";
17
+ }
18
+ // The console is a browser program inside this package: vite writes its build to
19
+ // dist/cli/ui/console, which is what `files` publishes. From the compiled verb that is a sibling
20
+ // of this directory's parent; from the source under a loader it is the same path in dist.
21
+ /** Where the built console is, or undefined in a tree that never built one. */
22
+ export function consoleFiles() {
23
+ const compiled = fileURLToPath(new URL("../ui/console/", import.meta.url));
24
+ const source = fileURLToPath(new URL("../ui/console/main.tsx", import.meta.url));
25
+ const found = existsSync(source) ? fileURLToPath(new URL("../../../dist/cli/ui/console/", import.meta.url)) : compiled;
26
+ return existsSync(`${found}index.html`) ? found : undefined;
27
+ }
28
+ /** What is serving on that port, when it is a sidecar of ours; undefined for a stranger or nothing. */
29
+ export async function aliveAt(port = DEFAULT_PORT) {
30
+ try {
31
+ const answer = await fetch(`http://127.0.0.1:${port}${ABOUT}`, { signal: AbortSignal.timeout(PROBE_MS) });
32
+ const said = (await answer.json());
33
+ return answer.ok && said.pinecall === "serve" ? said : undefined;
34
+ }
35
+ catch {
36
+ return undefined;
37
+ }
38
+ }
39
+ /** The sidecar already up on that port for this very gateway and org, as a URL; else undefined. */
40
+ export async function theOneUp(door, who, port = DEFAULT_PORT) {
41
+ const alive = await aliveAt(port);
42
+ return alive !== undefined && sameAs(alive, door, who) ? `http://localhost:${port}` : undefined;
43
+ }
44
+ /**
45
+ * The console for this door: the sidecar already serving it, or a new one.
46
+ *
47
+ * A port in use is one of three things. A sidecar for this same gateway and org is THE console,
48
+ * and is used as it is — two projects on one laptop share one page. A sidecar for another gateway
49
+ * or org, or somebody else's program, is not ours to look through, so the next port is tried.
50
+ */
51
+ export async function openOrReuse(door, who, port = DEFAULT_PORT) {
52
+ const files = consoleFiles();
53
+ if (files === undefined)
54
+ throw new NoSidecar(NOT_BUILT);
55
+ const about = { gateway: door.url, org: orgOf(who), env: who.env };
56
+ for (let trying = port; trying < port + TRIES; trying += 1) {
57
+ try {
58
+ const opened = await LocalConsole.open(door, files, about, trying);
59
+ return { url: opened.url, ours: true, close: () => opened.close() };
60
+ }
61
+ catch (failed) {
62
+ if (failed.code !== "EADDRINUSE")
63
+ throw failed;
64
+ const up = await theOneUp(door, who, trying);
65
+ if (up !== undefined)
66
+ return { url: up, ours: false, close: async () => undefined };
67
+ }
68
+ }
69
+ throw new NoSidecar(`ports ${port}–${port + TRIES - 1} are all taken by something else: name a free one with --port`);
70
+ }
71
+ function sameAs(alive, door, who) {
72
+ return alive.gateway === door.url && alive.org === orgOf(who) && alive.env === who.env;
73
+ }
74
+ //# sourceMappingURL=sidecar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidecar.js","sourceRoot":"","sources":["../../../src/cli/serve/sidecar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /** `pinecall serve`: the sandbox's console on this machine, and nothing else. */
2
+ import type { Group } from "./groups.js";
3
+ export declare const group: Group;
4
+ /** What the verb can be told besides argv: where to print, and how a browser is opened. Tests only. */
5
+ export interface Serving {
6
+ out?: NodeJS.WritableStream;
7
+ err?: NodeJS.WritableStream;
8
+ open?: (url: string) => void;
9
+ until?: () => Promise<void>;
10
+ }
11
+ /** Why a production key serves nothing here, naming where production IS watched. */
12
+ export declare function notTheSandbox(gateway: string): string;
13
+ export declare function run(argv: string[], serving?: Serving): Promise<number>;
14
+ //# sourceMappingURL=serve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/cli/serve.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAMjF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAOzC,eAAO,MAAM,KAAK,EAAE,KAkBnB,CAAC;AAEF,uGAAuG;AACvG,MAAM,WAAW,OAAO;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAC5B,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AAED,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKrD;AAED,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,OAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CA0ChF"}
@@ -0,0 +1,81 @@
1
+ /** `pinecall serve`: the sandbox's console on this machine, and nothing else. */
2
+ import { parseArgs } from "node:util";
3
+ import { openInABrowser } from "./browser.js";
4
+ import { theDoor } from "./env.js";
5
+ import { forever } from "./run-screens.js";
6
+ import { DEFAULT_PORT } from "./serve/server.js";
7
+ import { NoSidecar, openOrReuse } from "./serve/sidecar.js";
8
+ import { cannotTell, PRODUCTION, standing } from "./world.js";
9
+ export const group = {
10
+ purpose: "the sandbox's console on this machine: your copies, your calls, http://localhost:4100",
11
+ usage: `usage: pinecall serve [--port <n>] [--no-open]
12
+
13
+ The console for what YOU are running, on http://localhost:${DEFAULT_PORT}: your sandbox copies of the
14
+ agents, their calls as they happen, chat, evals, knowledge, memory, the widget. It mounts no
15
+ agent — \`pinecall run\` does that, and \`pinecall run --serve\` does both in one terminal.
16
+
17
+ The gateway's own console shows production and only production. This one is the other half, and
18
+ it asks the same gateway: every request the page makes is forwarded there with this machine's
19
+ sandbox key on it. The key never reaches the browser, so there is nothing to sign in to.
20
+
21
+ One per machine. A second \`serve\` for the same gateway and org finds the first and says where
22
+ it is; two projects share one page.
23
+
24
+ --port <n> another port than ${DEFAULT_PORT}
25
+ --no-open print the URL and do not open a browser`,
26
+ run,
27
+ };
28
+ /** Why a production key serves nothing here, naming where production IS watched. */
29
+ export function notTheSandbox(gateway) {
30
+ return (`this key opens ${PRODUCTION}, and production is watched at ${gateway} — \`pinecall serve\` is your sandbox.\n`
31
+ + " `pinecall use <profile>` for a sandbox key — `pinecall config` lists them.");
32
+ }
33
+ export async function run(argv, serving = {}) {
34
+ const out = serving.out ?? process.stdout;
35
+ const err = serving.err ?? process.stderr;
36
+ const { values } = parseArgs({
37
+ args: argv,
38
+ options: { port: { type: "string" }, "no-open": { type: "boolean", default: false } },
39
+ });
40
+ const port = values.port === undefined ? DEFAULT_PORT : Number(values.port);
41
+ if (!Number.isInteger(port) || port < 1 || port > 65535) {
42
+ err.write(`--port takes a port number, not ${JSON.stringify(values.port)}\n`);
43
+ return 2;
44
+ }
45
+ const door = theDoor(process.env, err);
46
+ if (door === undefined)
47
+ return 2;
48
+ let who;
49
+ try {
50
+ who = await standing(door);
51
+ }
52
+ catch (failed) {
53
+ err.write(`${cannotTell("serve", failed)}\n`);
54
+ return 2;
55
+ }
56
+ if (who.env === PRODUCTION) {
57
+ err.write(`${notTheSandbox(door.url)}\n`);
58
+ return 2;
59
+ }
60
+ try {
61
+ const sidecar = await openOrReuse(door, who, port);
62
+ if (!sidecar.ours) {
63
+ out.write(`console ${sidecar.url} (already being served on this machine)\n`);
64
+ return 0;
65
+ }
66
+ out.write(`gateway ${door.url} · key from ${door.source}\n`);
67
+ out.write(`console ${sidecar.url} (your sandbox; Ctrl-C closes it)\n`);
68
+ if (values["no-open"] !== true)
69
+ (serving.open ?? openInABrowser)(sidecar.url);
70
+ await (serving.until ?? forever)();
71
+ await sidecar.close();
72
+ return 0;
73
+ }
74
+ catch (failed) {
75
+ if (!(failed instanceof NoSidecar))
76
+ throw failed;
77
+ err.write(`${failed.message}\n`);
78
+ return 2;
79
+ }
80
+ }
81
+ //# sourceMappingURL=serve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/cli/serve.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"signup.d.ts","sourceRoot":"","sources":["../../src/cli/signup.ts"],"names":[],"mappings":"AAAA,uGAAuG;AAMvG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAiCzC,mGAAmG;AACnG,UAAU,QAAQ;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,KAAK,EAAE,KAkBnB,CAAC;AAEF,0GAA0G;AAC1G,MAAM,WAAW,MAAM;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,wFAAwF;IACxF,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CAClC;AAED,sFAAsF;AACtF,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAgD9E;AAoBD,wFAAwF;AACxF,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAG5D"}
1
+ {"version":3,"file":"signup.d.ts","sourceRoot":"","sources":["../../src/cli/signup.ts"],"names":[],"mappings":"AAAA,uGAAuG;AAMvG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAmCzC,mGAAmG;AACnG,UAAU,QAAQ;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,KAAK,EAAE,KAkBnB,CAAC;AAEF,0GAA0G;AAC1G,MAAM,WAAW,MAAM;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,wFAAwF;IACxF,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CAClC;AAED,sFAAsF;AACtF,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAkD9E;AAoBD,wFAAwF;AACxF,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAG5D"}
@@ -9,7 +9,9 @@ const USAGE = `usage: pinecall signup [<gateway-url>] --org <slug> --email <you@
9
9
  [--name "<Org Name>"] [--password-stdin]`;
10
10
  // Asked for, never echoed, never a flag: a password on a command line is a password in the
11
11
  // shell's history. The same rule `login` holds its key to.
12
- const PROMPT = "Password (12 characters at least): ";
12
+ // The rule is the GATEWAY's, and it says so at `/.well-known/pinecall`: a prompt with a number of
13
+ // its own refused what the box would have taken, and a person read it as their password being bad.
14
+ const PROMPT = (least) => (least > 0 ? `Password (${least} characters at least): ` : "Password: ");
13
15
  // The door a stranger knocks at, and what it answers: the one shape a key travels in, plus the
14
16
  // org's slug, the member and a one-use code for a browser. runtime docs/protocol/people.md.
15
17
  const SIGNUP = "/v1/signup";
@@ -66,11 +68,13 @@ export async function signup(argv, how = {}) {
66
68
  err.write(`missing: ${missing.map((one) => `--${one}`).join(" ")}\n`);
67
69
  return 2;
68
70
  }
69
- if (!(await discovered(url)).signup) {
71
+ const says = await discovered(url);
72
+ if (!says.signup) {
70
73
  err.write(`${SHUT(url)}\n`);
71
74
  return 1;
72
75
  }
73
- const password = (await (how.password ?? (values["password-stdin"] === true ? aLineOfStdin : () => typedInSilence(PROMPT, out)))()).trim();
76
+ const typed = how.password ?? (values["password-stdin"] === true ? aLineOfStdin : () => typedInSilence(PROMPT(says.min_password), out));
77
+ const password = (await typed()).trim();
74
78
  if (password === "") {
75
79
  err.write("no password was typed: nothing was made\n");
76
80
  return 2;
@@ -1 +1 @@
1
- {"version":3,"file":"signup.js","sourceRoot":"","sources":["../../src/cli/signup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signup.js","sourceRoot":"","sources":["../../src/cli/signup.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /** A golden that broke, written out whole: what the model was asked, and everything that happened. */
2
- import type { Entry, EvalRun } from "./gateway.js";
2
+ import type { Cell, Entry, EvalRun } from "./gateway.js";
3
3
  import type { Golden } from "./goldens.js";
4
4
  /** Where a broken golden is left, under the directory the suite was run in. One folder per run. */
5
5
  export declare const REPRODUCTIONS = ".pinecall/evals";
@@ -14,6 +14,11 @@ export declare const NOT_RECORDED: string;
14
14
  * run that is being reproduced is the one reader that asks the runtime for the text.
15
15
  */
16
16
  export declare function writtenOut(run: EvalRun, goldens: Golden[], logs: Record<string, Entry[]>, under?: string): string[];
17
+ /**
18
+ * The name a cell is written under: the golden's, and — when the run broke it on more than one
19
+ * model — the model's beside it, with its slash turned into a dash, since the name is a file's.
20
+ */
21
+ export declare function fileNameOf(cell: Pick<Cell, "golden" | "model">, severalModels: boolean): string;
17
22
  /** The line the report prints under a broken golden, once, naming the folder and not each file. */
18
23
  export declare function whereTheyAre(paths: string[]): string[];
19
24
  //# sourceMappingURL=reproduction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reproduction.d.ts","sourceRoot":"","sources":["../../../src/cli/testing/reproduction.ts"],"names":[],"mappings":"AAAA,sGAAsG;AAKtG,OAAO,KAAK,EAAQ,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,mGAAmG;AACnG,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAE/C,4FAA4F;AAC5F,eAAO,MAAM,YAAY,QAEyD,CAAC;AAEnF;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAC7B,KAAK,GAAE,MAAsB,GAC5B,MAAM,EAAE,CAWV;AAiCD,mGAAmG;AACnG,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAItD"}
1
+ {"version":3,"file":"reproduction.d.ts","sourceRoot":"","sources":["../../../src/cli/testing/reproduction.ts"],"names":[],"mappings":"AAAA,sGAAsG;AAKtG,OAAO,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,mGAAmG;AACnG,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAE/C,4FAA4F;AAC5F,eAAO,MAAM,YAAY,QAEyD,CAAC;AAEnF;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAC7B,KAAK,GAAE,MAAsB,GAC5B,MAAM,EAAE,CAcV;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,EAAE,aAAa,EAAE,OAAO,GAAG,MAAM,CAE/F;AAiCD,mGAAmG;AACnG,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAItD"}
@@ -20,13 +20,23 @@ export function writtenOut(run, goldens, logs, under = REPRODUCTIONS) {
20
20
  return [];
21
21
  const folder = join(under, run.id);
22
22
  mkdirSync(folder, { recursive: true });
23
+ // A matrix breaks one golden on two models as two cells, and one file per golden kept whichever
24
+ // was written last: the nightly's haiku reproduction was gpt-4.1-mini's (2026-09-17).
25
+ const models = new Set(broken.map((cell) => cell.model));
23
26
  return broken.map((cell) => {
24
27
  const call = callOf(run, cell);
25
- const path = join(folder, `${cell.golden}.json`);
28
+ const path = join(folder, `${fileNameOf(cell, models.size > 1)}.json`);
26
29
  writeFileSync(path, `${JSON.stringify(aReproduction(run, cell, call, goldens, logs[call] ?? []), null, 2)}\n`);
27
30
  return path;
28
31
  });
29
32
  }
33
+ /**
34
+ * The name a cell is written under: the golden's, and — when the run broke it on more than one
35
+ * model — the model's beside it, with its slash turned into a dash, since the name is a file's.
36
+ */
37
+ export function fileNameOf(cell, severalModels) {
38
+ return severalModels ? `${cell.golden} · ${cell.model.replace(/[/\\]/g, "-")}` : cell.golden;
39
+ }
30
40
  /** One broken cell as a file: the declaration, the requests, the log, and every verdict on it. */
31
41
  function aReproduction(run, cell, call, goldens, log) {
32
42
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"reproduction.js","sourceRoot":"","sources":["../../../src/cli/testing/reproduction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reproduction.js","sourceRoot":"","sources":["../../../src/cli/testing/reproduction.ts"],"names":[],"mappings":"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"}