@root-signals/scorable-cli 0.13.0 → 0.15.0

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 (97) hide show
  1. package/README.md +113 -0
  2. package/dist/client.d.ts +1 -0
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +1 -0
  5. package/dist/commands/annotation/index.d.ts +3 -0
  6. package/dist/commands/annotation/index.d.ts.map +1 -0
  7. package/dist/commands/annotation/index.js +145 -0
  8. package/dist/commands/auth/index.d.ts.map +1 -1
  9. package/dist/commands/auth/index.js +68 -1
  10. package/dist/commands/calibration-run/index.d.ts +3 -0
  11. package/dist/commands/calibration-run/index.d.ts.map +1 -0
  12. package/dist/commands/calibration-run/index.js +83 -0
  13. package/dist/commands/dataset-item/index.d.ts +3 -0
  14. package/dist/commands/dataset-item/index.d.ts.map +1 -0
  15. package/dist/commands/dataset-item/index.js +160 -0
  16. package/dist/commands/evaluator/calibrate.d.ts +3 -0
  17. package/dist/commands/evaluator/calibrate.d.ts.map +1 -0
  18. package/dist/commands/evaluator/calibrate.js +29 -0
  19. package/dist/commands/evaluator/create.d.ts.map +1 -1
  20. package/dist/commands/evaluator/create.js +8 -0
  21. package/dist/commands/evaluator/duplicate.d.ts.map +1 -1
  22. package/dist/commands/evaluator/duplicate.js +5 -2
  23. package/dist/commands/evaluator/execute-by-name.d.ts +1 -0
  24. package/dist/commands/evaluator/execute-by-name.d.ts.map +1 -1
  25. package/dist/commands/evaluator/execute-by-name.js +5 -0
  26. package/dist/commands/evaluator/execute.d.ts +1 -0
  27. package/dist/commands/evaluator/execute.d.ts.map +1 -1
  28. package/dist/commands/evaluator/execute.js +5 -0
  29. package/dist/commands/evaluator/export-yaml.d.ts.map +1 -1
  30. package/dist/commands/evaluator/export-yaml.js +10 -1
  31. package/dist/commands/evaluator/import-yaml.d.ts.map +1 -1
  32. package/dist/commands/evaluator/import-yaml.js +10 -1
  33. package/dist/commands/evaluator/index.d.ts.map +1 -1
  34. package/dist/commands/evaluator/index.js +2 -0
  35. package/dist/commands/evaluator/list.d.ts.map +1 -1
  36. package/dist/commands/evaluator/list.js +5 -0
  37. package/dist/commands/evaluator/update.d.ts.map +1 -1
  38. package/dist/commands/evaluator/update.js +8 -0
  39. package/dist/commands/execution-log/list.d.ts.map +1 -1
  40. package/dist/commands/execution-log/list.js +5 -0
  41. package/dist/commands/judge/create.d.ts.map +1 -1
  42. package/dist/commands/judge/create.js +5 -0
  43. package/dist/commands/judge/duplicate.d.ts.map +1 -1
  44. package/dist/commands/judge/duplicate.js +5 -2
  45. package/dist/commands/judge/exec-openai-generic.d.ts.map +1 -1
  46. package/dist/commands/judge/exec-openai-generic.js +5 -0
  47. package/dist/commands/judge/exec-openai.d.ts.map +1 -1
  48. package/dist/commands/judge/exec-openai.js +5 -0
  49. package/dist/commands/judge/execute-by-name.d.ts +1 -0
  50. package/dist/commands/judge/execute-by-name.d.ts.map +1 -1
  51. package/dist/commands/judge/execute-by-name.js +5 -0
  52. package/dist/commands/judge/execute.d.ts +1 -0
  53. package/dist/commands/judge/execute.d.ts.map +1 -1
  54. package/dist/commands/judge/execute.js +5 -0
  55. package/dist/commands/judge/generate.d.ts.map +1 -1
  56. package/dist/commands/judge/generate.js +4 -0
  57. package/dist/commands/judge/list.d.ts.map +1 -1
  58. package/dist/commands/judge/list.js +5 -0
  59. package/dist/commands/judge/update.d.ts.map +1 -1
  60. package/dist/commands/judge/update.js +5 -0
  61. package/dist/commands/project/create.d.ts +3 -0
  62. package/dist/commands/project/create.d.ts.map +1 -0
  63. package/dist/commands/project/create.js +31 -0
  64. package/dist/commands/project/delete.d.ts +3 -0
  65. package/dist/commands/project/delete.d.ts.map +1 -0
  66. package/dist/commands/project/delete.js +37 -0
  67. package/dist/commands/project/get.d.ts +3 -0
  68. package/dist/commands/project/get.d.ts.map +1 -0
  69. package/dist/commands/project/get.js +23 -0
  70. package/dist/commands/project/index.d.ts +3 -0
  71. package/dist/commands/project/index.d.ts.map +1 -0
  72. package/dist/commands/project/index.js +17 -0
  73. package/dist/commands/project/list.d.ts +3 -0
  74. package/dist/commands/project/list.d.ts.map +1 -0
  75. package/dist/commands/project/list.js +39 -0
  76. package/dist/commands/project/set-default.d.ts +3 -0
  77. package/dist/commands/project/set-default.d.ts.map +1 -0
  78. package/dist/commands/project/set-default.js +23 -0
  79. package/dist/commands/project/update.d.ts +3 -0
  80. package/dist/commands/project/update.d.ts.map +1 -0
  81. package/dist/commands/project/update.js +37 -0
  82. package/dist/commands/prompt-test/init.d.ts.map +1 -1
  83. package/dist/commands/prompt-test/init.js +9 -2
  84. package/dist/commands/prompt-test/run.d.ts +1 -1
  85. package/dist/commands/prompt-test/run.d.ts.map +1 -1
  86. package/dist/commands/prompt-test/run.js +9 -2
  87. package/dist/index.d.ts.map +1 -1
  88. package/dist/index.js +8 -0
  89. package/dist/lib/project-id.d.ts +9 -0
  90. package/dist/lib/project-id.d.ts.map +1 -0
  91. package/dist/lib/project-id.js +23 -0
  92. package/dist/output.d.ts +2 -1
  93. package/dist/output.d.ts.map +1 -1
  94. package/dist/output.js +71 -12
  95. package/dist/types.d.ts +1 -0
  96. package/dist/types.d.ts.map +1 -1
  97. package/package.json +4 -4
@@ -0,0 +1,29 @@
1
+ import ora from "ora";
2
+ import { requireApiKey, getSdkClient } from "../../auth.js";
3
+ import { printSuccess, printJson, handleSdkError } from "../../output.js";
4
+ export function registerCalibrateCommand(evaluator) {
5
+ evaluator
6
+ .command("calibrate <evaluatorId>")
7
+ .description("Start a calibration run for a saved evaluator against a labelled dataset")
8
+ .requiredOption("--dataset-id <id>", "Dataset whose published annotations to calibrate against")
9
+ .option("--score-config-id <id>", "Score config to calibrate against (defaults to the dataset's continuous scores)")
10
+ .action(async (evaluatorId, opts) => {
11
+ const apiKey = await requireApiKey();
12
+ const spinner = ora("Starting calibration run...").start();
13
+ try {
14
+ const client = getSdkClient(apiKey);
15
+ const run = await client.evaluators.calibrateRun(evaluatorId, {
16
+ datasetId: opts.datasetId,
17
+ ...(opts.scoreConfigId !== undefined ? { scoreConfigId: opts.scoreConfigId } : {}),
18
+ });
19
+ spinner.stop();
20
+ printSuccess(`Calibration run ${run.id} started (status: ${run.status}). ` +
21
+ `Poll 'scorable calibration-run get ${run.id}' for metrics.`);
22
+ printJson(run);
23
+ }
24
+ catch (e) {
25
+ spinner.stop();
26
+ handleSdkError(e);
27
+ }
28
+ });
29
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/evaluator/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAiF9D"}
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/evaluator/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CA4F9D"}
@@ -3,6 +3,7 @@ import { z } from "zod";
3
3
  import { requireApiKey, getSdkClient } from "../../auth.js";
4
4
  import { printSuccess, printError, printJson, handleSdkError } from "../../output.js";
5
5
  import { parseJsonArg } from "../../utils.js";
6
+ import { resolveProjectIdValue, PROJECT_ID_FLAG_DESC } from "../../lib/project-id.js";
6
7
  export function registerCreateCommand(evaluator) {
7
8
  evaluator
8
9
  .command("create")
@@ -14,6 +15,8 @@ export function registerCreateCommand(evaluator) {
14
15
  .option("--models <json>", "JSON array of model names, in priority order. E.g., '[\"gpt-5-mini\"]'")
15
16
  .option("--overwrite", "Overwrite if evaluator with same name exists")
16
17
  .option("--objective-version-id <id>", "Objective version ID")
18
+ .option("--demonstration-dataset <id>", "Dataset of labelled examples resolved into few-shot demonstrations at evaluation time.")
19
+ .option("--project-id <uuid>", PROJECT_ID_FLAG_DESC)
17
20
  .action(async (opts) => {
18
21
  if (!opts.intent && !opts.objectiveId) {
19
22
  printError("Either --intent or --objective-id is required.");
@@ -37,6 +40,8 @@ export function registerCreateCommand(evaluator) {
37
40
  payload.overwrite = opts.overwrite;
38
41
  if (opts.objectiveVersionId)
39
42
  payload.objective_version_id = opts.objectiveVersionId;
43
+ if (opts.demonstrationDataset)
44
+ payload.demonstration_dataset_id = opts.demonstrationDataset;
40
45
  if (opts.models) {
41
46
  const r = parseJsonArg(opts.models, z.array(z.string()));
42
47
  if (!r.ok) {
@@ -45,6 +50,9 @@ export function registerCreateCommand(evaluator) {
45
50
  }
46
51
  payload.models = r.value;
47
52
  }
53
+ const projectId = resolveProjectIdValue(opts.projectId);
54
+ if (projectId !== undefined)
55
+ payload.projectId = projectId;
48
56
  const spinner = ora("Creating...").start();
49
57
  try {
50
58
  const apiKey = await requireApiKey();
@@ -1 +1 @@
1
- {"version":3,"file":"duplicate.d.ts","sourceRoot":"","sources":["../../../src/commands/evaluator/duplicate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAkBjE"}
1
+ {"version":3,"file":"duplicate.d.ts","sourceRoot":"","sources":["../../../src/commands/evaluator/duplicate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAuBjE"}
@@ -1,16 +1,19 @@
1
1
  import ora from "ora";
2
2
  import { requireApiKey, getSdkClient } from "../../auth.js";
3
3
  import { printSuccess, printJson, handleSdkError } from "../../output.js";
4
+ import { resolveProjectIdValue, PROJECT_ID_FLAG_DESC } from "../../lib/project-id.js";
4
5
  export function registerDuplicateCommand(evaluator) {
5
6
  evaluator
6
7
  .command("duplicate <evaluatorId>")
7
8
  .description("Duplicate an existing evaluator")
8
- .action(async (evaluatorId) => {
9
+ .option("--project-id <uuid>", PROJECT_ID_FLAG_DESC)
10
+ .action(async (evaluatorId, opts) => {
9
11
  const apiKey = await requireApiKey();
10
12
  const spinner = ora("Duplicating...").start();
11
13
  try {
12
14
  const client = getSdkClient(apiKey);
13
- const result = await client.evaluators.duplicate(evaluatorId);
15
+ const projectId = resolveProjectIdValue(opts.projectId);
16
+ const result = await client.evaluators.duplicate(evaluatorId, projectId !== undefined ? { projectId } : {});
14
17
  spinner.stop();
15
18
  printSuccess(`Evaluator ${evaluatorId} duplicated successfully!`);
16
19
  printJson(result);
@@ -12,6 +12,7 @@ export declare function executeEvaluatorByName(evaluatorName: string, opts: {
12
12
  sessionId?: string;
13
13
  systemPrompt?: string;
14
14
  variables?: string;
15
+ projectId?: string;
15
16
  }, readStdin?: typeof readStdinDefault): Promise<void>;
16
17
  export declare function registerExecuteByNameCommand(evaluator: Command): void;
17
18
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"execute-by-name.d.ts","sourceRoot":"","sources":["../../../src/commands/evaluator/execute-by-name.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,iBAAe,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAIjD;AAED,wBAAsB,sBAAsB,CAC1C,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE;IACJ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,EACD,SAAS,0BAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAyFf;AAED,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAmFrE"}
1
+ {"version":3,"file":"execute-by-name.d.ts","sourceRoot":"","sources":["../../../src/commands/evaluator/execute-by-name.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,iBAAe,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAIjD;AAED,wBAAsB,sBAAsB,CAC1C,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE;IACJ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,EACD,SAAS,0BAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CA4Ff;AAED,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAqFrE"}
@@ -2,6 +2,7 @@ import ora from "ora";
2
2
  import { requireApiKey, getSdkClient } from "../../auth.js";
3
3
  import { printSuccess, printError, printJson, handleSdkError } from "../../output.js";
4
4
  import { isTurnArray, isToolCatalog, isStringArray, isStringRecord } from "../../utils.js";
5
+ import { resolveProjectIdValue, PROJECT_ID_FLAG_DESC } from "../../lib/project-id.js";
5
6
  async function readStdinDefault() {
6
7
  const chunks = [];
7
8
  for await (const chunk of process.stdin)
@@ -89,6 +90,9 @@ export async function executeEvaluatorByName(evaluatorName, opts, readStdin = re
89
90
  return;
90
91
  }
91
92
  }
93
+ const projectId = resolveProjectIdValue(opts.projectId);
94
+ if (projectId !== undefined)
95
+ payload.projectId = projectId;
92
96
  const spinner = ora("Running evaluator...").start();
93
97
  try {
94
98
  const client = getSdkClient(apiKey);
@@ -117,6 +121,7 @@ export function registerExecuteByNameCommand(evaluator) {
117
121
  .option("--turns <json>", 'JSON array of conversation turns. Roles: user|assistant|tool. Assistant turns may carry `tool_calls`; tool results use a `tool` role with `tool_call_id`. E.g., \'[{"role":"user","content":"Hello"}]\'')
118
122
  .option("--tools <json>", "JSON array of OpenAI-style tool definitions available to the agent.")
119
123
  .option("--variables <json>", 'JSON object of extra template variables. E.g., \'{"lang":"EN"}\'')
124
+ .option("--project-id <uuid>", PROJECT_ID_FLAG_DESC)
120
125
  .addHelpText("after", `
121
126
  Examples:
122
127
  # Check helpfulness of a support response
@@ -13,6 +13,7 @@ export declare function executeEvaluator(evaluatorId: string, opts: {
13
13
  systemPrompt?: string;
14
14
  variables?: string;
15
15
  fileIds?: string;
16
+ projectId?: string;
16
17
  }, readStdin?: typeof readStdinDefault): Promise<void>;
17
18
  export declare function registerExecuteCommand(evaluator: Command): void;
18
19
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/commands/evaluator/execute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,iBAAe,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAIjD;AAED,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;IACJ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,EACD,SAAS,0BAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAsGf;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAkG/D"}
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/commands/evaluator/execute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,iBAAe,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAIjD;AAED,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;IACJ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,EACD,SAAS,0BAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAyGf;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAoG/D"}
@@ -2,6 +2,7 @@ import ora from "ora";
2
2
  import { requireApiKey, getSdkClient } from "../../auth.js";
3
3
  import { printSuccess, printError, printJson, handleSdkError } from "../../output.js";
4
4
  import { isTurnArray, isToolCatalog, isStringArray, isStringRecord } from "../../utils.js";
5
+ import { resolveProjectIdValue, PROJECT_ID_FLAG_DESC } from "../../lib/project-id.js";
5
6
  async function readStdinDefault() {
6
7
  const chunks = [];
7
8
  for await (const chunk of process.stdin)
@@ -102,6 +103,9 @@ export async function executeEvaluator(evaluatorId, opts, readStdin = readStdinD
102
103
  }
103
104
  payload.file_ids = parsed;
104
105
  }
106
+ const projectId = resolveProjectIdValue(opts.projectId);
107
+ if (projectId !== undefined)
108
+ payload.projectId = projectId;
105
109
  const spinner = ora("Running evaluator...").start();
106
110
  try {
107
111
  const client = getSdkClient(apiKey);
@@ -131,6 +135,7 @@ export function registerExecuteCommand(evaluator) {
131
135
  .option("--tools <json>", "JSON array of OpenAI-style tool definitions available to the agent.")
132
136
  .option("--variables <json>", 'JSON object of extra template variables. E.g., \'{"lang":"EN"}\'')
133
137
  .option("--file-ids <json>", "JSON array of file UUIDs from 'scorable file upload'. E.g., '[\"uuid1\"]'")
138
+ .option("--project-id <uuid>", PROJECT_ID_FLAG_DESC)
134
139
  .addHelpText("after", `
135
140
  Examples:
136
141
  # Check helpfulness of a support response
@@ -1 +1 @@
1
- {"version":3,"file":"export-yaml.d.ts","sourceRoot":"","sources":["../../../src/commands/evaluator/export-yaml.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAwBlE"}
1
+ {"version":3,"file":"export-yaml.d.ts","sourceRoot":"","sources":["../../../src/commands/evaluator/export-yaml.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAwBlE"}
@@ -1,7 +1,16 @@
1
1
  import { writeFileSync } from "node:fs";
2
+ import yaml from "js-yaml";
2
3
  import ora from "ora";
3
4
  import { requireApiKey, getSdkClient } from "../../auth.js";
4
5
  import { printSuccess, handleSdkError } from "../../output.js";
6
+ function stripProjectId(yamlContent) {
7
+ const parsed = yaml.load(yamlContent);
8
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
9
+ delete parsed.project_id;
10
+ return yaml.dump(parsed);
11
+ }
12
+ return yamlContent;
13
+ }
5
14
  export function registerExportYamlCommand(evaluator) {
6
15
  evaluator
7
16
  .command("export-yaml")
@@ -13,7 +22,7 @@ export function registerExportYamlCommand(evaluator) {
13
22
  try {
14
23
  const apiKey = await requireApiKey();
15
24
  const client = getSdkClient(apiKey);
16
- const yaml = await client.evaluators.exportYaml(id);
25
+ const yaml = stripProjectId(await client.evaluators.exportYaml(id));
17
26
  spinner.stop();
18
27
  if (opts.output) {
19
28
  writeFileSync(opts.output, yaml, "utf8");
@@ -1 +1 @@
1
- {"version":3,"file":"import-yaml.d.ts","sourceRoot":"","sources":["../../../src/commands/evaluator/import-yaml.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CA2ClE"}
1
+ {"version":3,"file":"import-yaml.d.ts","sourceRoot":"","sources":["../../../src/commands/evaluator/import-yaml.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAkDlE"}
@@ -2,12 +2,14 @@ import { readFileSync } from "node:fs";
2
2
  import ora from "ora";
3
3
  import { requireApiKey, getBaseUrl } from "../../auth.js";
4
4
  import { printSuccess, printError, printJson, handleSdkError } from "../../output.js";
5
+ import { resolveProjectIdValue, PROJECT_ID_FLAG_DESC } from "../../lib/project-id.js";
5
6
  export function registerImportYamlCommand(evaluator) {
6
7
  evaluator
7
8
  .command("import-yaml")
8
9
  .description("Import an evaluator from a YAML file")
9
10
  .requiredOption("--file <path>", "Path to the YAML file to import")
10
11
  .option("--overwrite", "Overwrite if an evaluator with the same name already exists")
12
+ .option("--project-id <uuid>", PROJECT_ID_FLAG_DESC)
11
13
  .action(async (opts) => {
12
14
  let yamlContent;
13
15
  try {
@@ -21,13 +23,20 @@ export function registerImportYamlCommand(evaluator) {
21
23
  try {
22
24
  const apiKey = await requireApiKey();
23
25
  const baseUrl = getBaseUrl();
26
+ const projectId = resolveProjectIdValue(opts.projectId);
27
+ const body = {
28
+ yaml: yamlContent,
29
+ overwrite: opts.overwrite ?? false,
30
+ };
31
+ if (projectId !== undefined)
32
+ body["project_id"] = projectId;
24
33
  const response = await fetch(`${baseUrl}/v1/evaluators/import-yaml/`, {
25
34
  method: "POST",
26
35
  headers: {
27
36
  Authorization: `Api-Key ${apiKey}`,
28
37
  "Content-Type": "application/json",
29
38
  },
30
- body: JSON.stringify({ yaml: yamlContent, overwrite: opts.overwrite ?? false }),
39
+ body: JSON.stringify(body),
31
40
  });
32
41
  if (!response.ok) {
33
42
  spinner.stop();
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/evaluator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAehE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/evaluator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgBhE"}
@@ -9,6 +9,7 @@ import { registerExecuteByNameCommand } from "./execute-by-name.js";
9
9
  import { registerDuplicateCommand } from "./duplicate.js";
10
10
  import { registerExportYamlCommand } from "./export-yaml.js";
11
11
  import { registerImportYamlCommand } from "./import-yaml.js";
12
+ import { registerCalibrateCommand } from "./calibrate.js";
12
13
  export function registerEvaluatorCommands(program) {
13
14
  const evaluator = new Command("evaluator").description("Evaluator management commands");
14
15
  registerListCommand(evaluator);
@@ -21,5 +22,6 @@ export function registerEvaluatorCommands(program) {
21
22
  registerDuplicateCommand(evaluator);
22
23
  registerExportYamlCommand(evaluator);
23
24
  registerImportYamlCommand(evaluator);
25
+ registerCalibrateCommand(evaluator);
24
26
  program.addCommand(evaluator);
25
27
  }
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/evaluator/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CA4C5D"}
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/evaluator/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAgD5D"}
@@ -1,6 +1,7 @@
1
1
  import ora from "ora";
2
2
  import { requireApiKey, getSdkClient } from "../../auth.js";
3
3
  import { printMessage, printEvaluatorTable, handleSdkError } from "../../output.js";
4
+ import { resolveProjectIdValue, PROJECT_ID_FLAG_DESC } from "../../lib/project-id.js";
4
5
  export function registerListCommand(evaluator) {
5
6
  evaluator
6
7
  .command("list")
@@ -10,6 +11,7 @@ export function registerListCommand(evaluator) {
10
11
  .option("--search <term>", "A search term to filter by")
11
12
  .option("--name <name>", "Filter by exact evaluator name")
12
13
  .option("--ordering <field>", "Which field to use for ordering the results")
14
+ .option("--project-id <uuid>", PROJECT_ID_FLAG_DESC)
13
15
  .action(async (opts) => {
14
16
  const apiKey = await requireApiKey();
15
17
  const params = {};
@@ -23,6 +25,9 @@ export function registerListCommand(evaluator) {
23
25
  params.name = opts.name;
24
26
  if (opts.ordering !== undefined)
25
27
  params.ordering = opts.ordering;
28
+ const projectId = resolveProjectIdValue(opts.projectId);
29
+ if (projectId !== undefined)
30
+ params.projectId = projectId;
26
31
  const spinner = ora("Fetching...").start();
27
32
  try {
28
33
  const client = getSdkClient(apiKey);
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/evaluator/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CA0D9D"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/evaluator/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAyE9D"}
@@ -3,6 +3,7 @@ import { z } from "zod";
3
3
  import { requireApiKey, getSdkClient } from "../../auth.js";
4
4
  import { printInfo, printSuccess, printError, printJson, handleSdkError } from "../../output.js";
5
5
  import { parseJsonArg } from "../../utils.js";
6
+ import { resolveProjectIdValue, PROJECT_ID_FLAG_DESC } from "../../lib/project-id.js";
6
7
  export function registerUpdateCommand(evaluator) {
7
8
  evaluator
8
9
  .command("update <evaluatorId>")
@@ -12,6 +13,8 @@ export function registerUpdateCommand(evaluator) {
12
13
  .option("--models <json>", "JSON array of model names. E.g., '[\"gpt-5.5\"]'")
13
14
  .option("--objective-id <id>", "The new objective ID")
14
15
  .option("--objective-version-id <id>", "The new objective version ID")
16
+ .option("--demonstration-dataset <id>", "Dataset of labelled examples resolved into few-shot demonstrations at evaluation time.")
17
+ .option("--project-id <uuid>", "Move the evaluator to this project (within the same organization). " + PROJECT_ID_FLAG_DESC)
15
18
  .action(async (evaluatorId, opts) => {
16
19
  const apiKey = await requireApiKey();
17
20
  const payload = {};
@@ -23,6 +26,8 @@ export function registerUpdateCommand(evaluator) {
23
26
  payload.objective_id = opts.objectiveId;
24
27
  if (opts.objectiveVersionId !== undefined)
25
28
  payload.objective_version_id = opts.objectiveVersionId;
29
+ if (opts.demonstrationDataset !== undefined)
30
+ payload.demonstration_dataset_id = opts.demonstrationDataset;
26
31
  if (opts.models !== undefined) {
27
32
  const r = parseJsonArg(opts.models, z.array(z.string()));
28
33
  if (!r.ok) {
@@ -31,6 +36,9 @@ export function registerUpdateCommand(evaluator) {
31
36
  }
32
37
  payload.models = r.value;
33
38
  }
39
+ const projectId = resolveProjectIdValue(opts.projectId);
40
+ if (projectId !== undefined)
41
+ payload.projectId = projectId;
34
42
  if (Object.keys(payload).length === 0) {
35
43
  printInfo("No update parameters provided. Aborting.");
36
44
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/execution-log/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,OAAO,GAAG,IAAI,CAiE/D"}
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/execution-log/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,OAAO,GAAG,IAAI,CAqE/D"}
@@ -1,6 +1,7 @@
1
1
  import ora from "ora";
2
2
  import { requireApiKey, getSdkClient } from "../../auth.js";
3
3
  import { printMessage, printExecutionLogTable, handleSdkError } from "../../output.js";
4
+ import { resolveProjectIdValue, PROJECT_ID_FLAG_DESC } from "../../lib/project-id.js";
4
5
  export function registerListCommand(executionLog) {
5
6
  executionLog
6
7
  .command("list")
@@ -17,6 +18,7 @@ export function registerListCommand(executionLog) {
17
18
  .option("--created-at-after <date>", "Filter logs created after this date (ISO 8601)")
18
19
  .option("--created-at-before <date>", "Filter logs created before this date (ISO 8601)")
19
20
  .option("--owner-email <email>", "Filter by owner email")
21
+ .option("--project-id <uuid>", PROJECT_ID_FLAG_DESC)
20
22
  .action(async (opts) => {
21
23
  const apiKey = await requireApiKey();
22
24
  const params = {};
@@ -44,6 +46,9 @@ export function registerListCommand(executionLog) {
44
46
  params.created_at_before = opts.createdAtBefore;
45
47
  if (opts.ownerEmail !== undefined)
46
48
  params.owner__email = opts.ownerEmail;
49
+ const projectId = resolveProjectIdValue(opts.projectId);
50
+ if (projectId !== undefined)
51
+ params.projectId = projectId;
47
52
  const spinner = ora("Fetching...").start();
48
53
  try {
49
54
  const client = getSdkClient(apiKey);
@@ -1 +1 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/judge/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CA+C1D"}
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/judge/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAoD1D"}
@@ -3,6 +3,7 @@ import { z } from "zod";
3
3
  import { requireApiKey, getSdkClient } from "../../auth.js";
4
4
  import { printSuccess, printError, printJson, handleSdkError } from "../../output.js";
5
5
  import { parseJsonArg } from "../../utils.js";
6
+ import { resolveProjectIdValue, PROJECT_ID_FLAG_DESC } from "../../lib/project-id.js";
6
7
  const EvaluatorRefsSchema = z.array(z.object({ id: z.string() }).passthrough());
7
8
  export function registerCreateCommand(judge) {
8
9
  judge
@@ -12,6 +13,7 @@ export function registerCreateCommand(judge) {
12
13
  .requiredOption("--intent <intent>", "The intent for the new judge")
13
14
  .option("--stage <stage>", "The stage for the new judge")
14
15
  .option("--evaluator-references <json>", 'JSON string for evaluator references. E.g., \'[{"id": "eval-id"}]\'')
16
+ .option("--project-id <uuid>", PROJECT_ID_FLAG_DESC)
15
17
  .action(async (opts) => {
16
18
  const apiKey = await requireApiKey();
17
19
  const payload = { name: opts.name, intent: opts.intent };
@@ -25,6 +27,9 @@ export function registerCreateCommand(judge) {
25
27
  }
26
28
  payload.evaluator_references = r.value;
27
29
  }
30
+ const projectId = resolveProjectIdValue(opts.projectId);
31
+ if (projectId !== undefined)
32
+ payload.projectId = projectId;
28
33
  const spinner = ora("Creating...").start();
29
34
  try {
30
35
  const client = getSdkClient(apiKey);
@@ -1 +1 @@
1
- {"version":3,"file":"duplicate.d.ts","sourceRoot":"","sources":["../../../src/commands/judge/duplicate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAkB7D"}
1
+ {"version":3,"file":"duplicate.d.ts","sourceRoot":"","sources":["../../../src/commands/judge/duplicate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAuB7D"}
@@ -1,16 +1,19 @@
1
1
  import ora from "ora";
2
2
  import { requireApiKey, getSdkClient } from "../../auth.js";
3
3
  import { printSuccess, printJson, handleSdkError } from "../../output.js";
4
+ import { resolveProjectIdValue, PROJECT_ID_FLAG_DESC } from "../../lib/project-id.js";
4
5
  export function registerDuplicateCommand(judge) {
5
6
  judge
6
7
  .command("duplicate <judgeId>")
7
8
  .description("Duplicate an existing judge")
8
- .action(async (judgeId) => {
9
+ .option("--project-id <uuid>", PROJECT_ID_FLAG_DESC)
10
+ .action(async (judgeId, opts) => {
9
11
  const apiKey = await requireApiKey();
10
12
  const spinner = ora("Duplicating...").start();
11
13
  try {
12
14
  const client = getSdkClient(apiKey);
13
- const result = await client.judges.duplicate(judgeId);
15
+ const projectId = resolveProjectIdValue(opts.projectId);
16
+ const result = await client.judges.duplicate(judgeId, projectId !== undefined ? { projectId } : {});
14
17
  spinner.stop();
15
18
  printSuccess(`Judge ${judgeId} duplicated successfully!`);
16
19
  printJson(result);
@@ -1 +1 @@
1
- {"version":3,"file":"exec-openai-generic.d.ts","sourceRoot":"","sources":["../../../src/commands/judge/exec-openai-generic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAiDrE"}
1
+ {"version":3,"file":"exec-openai-generic.d.ts","sourceRoot":"","sources":["../../../src/commands/judge/exec-openai-generic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAwDrE"}
@@ -2,6 +2,7 @@ import { z } from "zod";
2
2
  import { requireApiKey } from "../../auth.js";
3
3
  import { printInfo, printSuccess, printError, printWarning, printJson, handleSdkError, } from "../../output.js";
4
4
  import { parseJsonArg } from "../../utils.js";
5
+ import { resolveProjectIdValue, PROJECT_ID_FLAG_DESC } from "../../lib/project-id.js";
5
6
  import { apiRequest } from "../../client.js";
6
7
  const MessagesSchema = z.array(z.object({ role: z.string() }).passthrough());
7
8
  const ExtraBodySchema = z.record(z.string(), z.unknown());
@@ -12,6 +13,7 @@ export function registerExecOpenaiGenericCommand(judge) {
12
13
  .requiredOption("--model <model>", "Judge ID (or name) to use as the 'model' field")
13
14
  .requiredOption("--messages <json>", "JSON string of the messages payload")
14
15
  .option("--extra-body <json>", "Optional JSON string for extra_body parameters")
16
+ .option("--project-id <uuid>", PROJECT_ID_FLAG_DESC)
15
17
  .action(async (opts) => {
16
18
  const apiKey = await requireApiKey();
17
19
  const messagesResult = parseJsonArg(opts.messages, MessagesSchema);
@@ -35,10 +37,13 @@ export function registerExecOpenaiGenericCommand(judge) {
35
37
  printInfo(`Executing a Judge using generic OpenAI endpoint. Judge ID/Name: ${opts.model}`);
36
38
  printInfo("Attempting to execute with OpenAI compatible payload:");
37
39
  printJson(payload);
40
+ const projectId = resolveProjectIdValue(opts.projectId);
41
+ const headers = projectId !== undefined ? { "X-Project-Id": projectId } : undefined;
38
42
  try {
39
43
  const result = await apiRequest("POST", "judges/openai/chat/completions", {
40
44
  payload,
41
45
  apiKey,
46
+ headers,
42
47
  });
43
48
  if (result) {
44
49
  printSuccess("OpenAI compatible execution successful!");
@@ -1 +1 @@
1
- {"version":3,"file":"exec-openai.d.ts","sourceRoot":"","sources":["../../../src/commands/judge/exec-openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CA4D9D"}
1
+ {"version":3,"file":"exec-openai.d.ts","sourceRoot":"","sources":["../../../src/commands/judge/exec-openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAiE9D"}
@@ -2,6 +2,7 @@ import { z } from "zod";
2
2
  import { requireApiKey } from "../../auth.js";
3
3
  import { printInfo, printSuccess, printError, printWarning, printJson, handleSdkError, } from "../../output.js";
4
4
  import { parseJsonArg } from "../../utils.js";
5
+ import { resolveProjectIdValue, PROJECT_ID_FLAG_DESC } from "../../lib/project-id.js";
5
6
  import { apiRequest } from "../../client.js";
6
7
  const MessagesSchema = z.array(z.object({ role: z.string() }).passthrough());
7
8
  const ExtraBodySchema = z.record(z.string(), z.unknown());
@@ -12,6 +13,7 @@ export function registerExecOpenaiCommand(judge) {
12
13
  .requiredOption("--model <model>", "LLM model for judge execution (e.g., gpt-5.5)")
13
14
  .requiredOption("--messages <json>", "JSON string of the messages payload")
14
15
  .option("--extra-body <json>", "Optional JSON string for extra_body parameters")
16
+ .option("--project-id <uuid>", PROJECT_ID_FLAG_DESC)
15
17
  .action(async (judgeIdInPath, opts) => {
16
18
  const apiKey = await requireApiKey();
17
19
  const messagesResult = parseJsonArg(opts.messages, MessagesSchema);
@@ -35,10 +37,13 @@ export function registerExecOpenaiCommand(judge) {
35
37
  printInfo(`Executing Judge ID (via path): ${judgeIdInPath} using OpenAI chat completions format.`);
36
38
  printInfo("Attempting to execute with OpenAI compatible payload:");
37
39
  printJson(payload);
40
+ const projectId = resolveProjectIdValue(opts.projectId);
41
+ const headers = projectId !== undefined ? { "X-Project-Id": projectId } : undefined;
38
42
  try {
39
43
  const result = await apiRequest("POST", `judges/${judgeIdInPath}/openai/chat/completions`, {
40
44
  payload,
41
45
  apiKey,
46
+ headers,
42
47
  });
43
48
  if (result) {
44
49
  printSuccess("OpenAI compatible execution successful!");
@@ -11,6 +11,7 @@ export declare function executeJudgeByName(judgeName: string, opts: {
11
11
  userId?: string;
12
12
  sessionId?: string;
13
13
  systemPrompt?: string;
14
+ projectId?: string;
14
15
  }, readStdin?: typeof readStdinDefault): Promise<void>;
15
16
  export declare function registerExecuteByNameCommand(judge: Command): void;
16
17
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"execute-by-name.d.ts","sourceRoot":"","sources":["../../../src/commands/judge/execute-by-name.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,iBAAe,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAIjD;AAED,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE;IACJ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,EACD,SAAS,0BAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CA2Ef;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAyEjE"}
1
+ {"version":3,"file":"execute-by-name.d.ts","sourceRoot":"","sources":["../../../src/commands/judge/execute-by-name.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,iBAAe,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAIjD;AAED,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE;IACJ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,EACD,SAAS,0BAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CA8Ef;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CA2EjE"}
@@ -2,6 +2,7 @@ import ora from "ora";
2
2
  import { requireApiKey, getSdkClient } from "../../auth.js";
3
3
  import { printSuccess, printError, printJson, handleSdkError } from "../../output.js";
4
4
  import { isTurnArray, isToolCatalog, isStringArray } from "../../utils.js";
5
+ import { resolveProjectIdValue, PROJECT_ID_FLAG_DESC } from "../../lib/project-id.js";
5
6
  async function readStdinDefault() {
6
7
  const chunks = [];
7
8
  for await (const chunk of process.stdin)
@@ -75,6 +76,9 @@ export async function executeJudgeByName(judgeName, opts, readStdin = readStdinD
75
76
  return;
76
77
  }
77
78
  }
79
+ const projectId = resolveProjectIdValue(opts.projectId);
80
+ if (projectId !== undefined)
81
+ payload.projectId = projectId;
78
82
  const spinner = ora("Running judge...").start();
79
83
  try {
80
84
  const client = getSdkClient(apiKey);
@@ -102,6 +106,7 @@ export function registerExecuteByNameCommand(judge) {
102
106
  .option("--system-prompt <text>", "System prompt that was used for the LLM call")
103
107
  .option("--turns <json>", 'JSON array of conversation turns. Roles: user|assistant|tool. Assistant turns may carry `tool_calls`; tool results use a `tool` role with `tool_call_id`. E.g., \'[{"role":"user","content":"Hello"}]\'')
104
108
  .option("--tools <json>", "JSON array of OpenAI-style tool definitions available to the agent.")
109
+ .option("--project-id <uuid>", PROJECT_ID_FLAG_DESC)
105
110
  .addHelpText("after", `
106
111
  Examples:
107
112
  # Evaluate a customer service response
@@ -11,6 +11,7 @@ export declare function executeJudge(judgeId: string, opts: {
11
11
  userId?: string;
12
12
  sessionId?: string;
13
13
  systemPrompt?: string;
14
+ projectId?: string;
14
15
  }, readStdin?: typeof readStdinDefault): Promise<void>;
15
16
  export declare function registerExecuteCommand(judge: Command): void;
16
17
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/commands/judge/execute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,iBAAe,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAIjD;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;IACJ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,EACD,SAAS,0BAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CA2Ef;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAgF3D"}
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/commands/judge/execute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,iBAAe,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAIjD;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;IACJ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,EACD,SAAS,0BAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CA8Ef;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAkF3D"}
@@ -2,6 +2,7 @@ import ora from "ora";
2
2
  import { requireApiKey, getSdkClient } from "../../auth.js";
3
3
  import { printSuccess, printError, printJson, handleSdkError } from "../../output.js";
4
4
  import { isTurnArray, isToolCatalog, isStringArray } from "../../utils.js";
5
+ import { resolveProjectIdValue, PROJECT_ID_FLAG_DESC } from "../../lib/project-id.js";
5
6
  async function readStdinDefault() {
6
7
  const chunks = [];
7
8
  for await (const chunk of process.stdin)
@@ -75,6 +76,9 @@ export async function executeJudge(judgeId, opts, readStdin = readStdinDefault)
75
76
  return;
76
77
  }
77
78
  }
79
+ const projectId = resolveProjectIdValue(opts.projectId);
80
+ if (projectId !== undefined)
81
+ payload.projectId = projectId;
78
82
  const spinner = ora("Running judge...").start();
79
83
  try {
80
84
  const client = getSdkClient(apiKey);
@@ -102,6 +106,7 @@ export function registerExecuteCommand(judge) {
102
106
  .option("--system-prompt <text>", "System prompt that was used for the LLM call")
103
107
  .option("--turns <json>", 'JSON array of conversation turns. Roles: user|assistant|tool. Assistant turns may carry `tool_calls`; tool results use a `tool` role with `tool_call_id`. E.g., \'[{"role":"user","content":"Hello"}]\'')
104
108
  .option("--tools <json>", "JSON array of OpenAI-style tool definitions available to the agent.")
109
+ .option("--project-id <uuid>", PROJECT_ID_FLAG_DESC)
105
110
  .addHelpText("after", `
106
111
  Examples:
107
112
  # Evaluate a customer service response about return policy
@@ -1 +1 @@
1
- {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/commands/judge/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CA8I5D"}
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/commands/judge/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAkJ5D"}