@pome-sh/cli 0.23.0 → 0.23.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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "package": "pome-sh",
3
- "version": "0.23.0",
4
- "git_sha": "ace5f001527e5a1d68cbe3ba5b534338e333a051",
5
- "build_time": "2026-08-10T10:29:32.549Z"
3
+ "version": "0.23.1",
4
+ "git_sha": "f57142b584d0bbeaa6b1c3e6194daf2723ed6d3c",
5
+ "build_time": "2026-08-10T12:44:52.803Z"
6
6
  }
@@ -1,6 +1,6 @@
1
1
  import { getAvailablePort } from './chunk-XDU6TD4O.js';
2
2
  import { buildEgressAllowlist, readBlockedEgress } from './chunk-CBFKZZBR.js';
3
- import { parseTaskFile, seedStateForTwin, runAgentCommand, writeRunArtifactsCore } from './chunk-KS4DD6JC.js';
3
+ import { parseTaskFile, seedStateForTwin, runAgentCommand, writeRunArtifactsCore } from './chunk-Z32CZ45D.js';
4
4
  import { createRecorder, bootTwin } from './chunk-TG22SRUL.js';
5
5
  import { eventSchema } from './chunk-VBATFCWR.js';
6
6
  import { redactSecrets, redactEvent } from './chunk-SG6ZTIMT.js';
@@ -1,5 +1,5 @@
1
1
  import { readManifest, normalizeManifestTwins } from './chunk-KUVTL4NZ.js';
2
- import { createHostedClient, perTwinReturnedByCloud, parseTaskFile, runAgentCommand, writeRunArtifactsCore, toTwinHttpEvent, redactJsonl, uploadRunBlobs, scoreFromFinalizeResponse, scoreStatus } from './chunk-KS4DD6JC.js';
2
+ import { createHostedClient, perTwinReturnedByCloud, parseTaskFile, runAgentCommand, writeRunArtifactsCore, toTwinHttpEvent, redactJsonl, uploadRunBlobs, scoreFromFinalizeResponse, scoreStatus } from './chunk-Z32CZ45D.js';
3
3
  import { MOUNTED_TWINS, HostedAuthError, HostedDiscardRefusedError, HostedQuotaError, HostedOrchError, HostedTrialError, agentResponseSchema } from './chunk-PQYIAA6K.js';
4
4
  import { redactSecrets, redactEvent } from './chunk-SG6ZTIMT.js';
5
5
  import { existsSync } from 'node:fs';
@@ -1232,6 +1232,10 @@ function outcomeOf(result) {
1232
1232
  if (result.skipped) return "skipped";
1233
1233
  return result.passed ? "passed" : "failed";
1234
1234
  }
1235
+ var PRE_SATISFIED_REASON = "already_true_in_seed";
1236
+ function isPreSatisfied(result) {
1237
+ return result.skipped && result.reason === PRE_SATISFIED_REASON;
1238
+ }
1235
1239
  function scoreStatus(score, passThreshold) {
1236
1240
  if (!score.evaluated || !score.can_pass) return "incomplete";
1237
1241
  return score.satisfaction >= passThreshold ? "pass" : "fail";
@@ -1258,15 +1262,23 @@ function twinSkipSuffix(result) {
1258
1262
  const twinRelated = outcome === "skipped" || outcome === "errored" || /no_matching_predicate|no matching predicate/i.test(result.reason);
1259
1263
  return twinRelated ? ` (twin: ${twin})` : "";
1260
1264
  }
1265
+ function criteriaWord(n) {
1266
+ return n === 1 ? "criterion" : "criteria";
1267
+ }
1261
1268
  function scoreCountsSummary(score) {
1262
1269
  return `${score.passed ?? 0} passed, ${score.failed ?? 0} failed, ${score.skipped ?? 0} skipped, ${score.errored ?? 0} errored`;
1263
1270
  }
1264
1271
  function runScoreLine(score, passThreshold, unevaluatedNumericLabel) {
1265
1272
  const status = scoreStatus(score, passThreshold);
1266
1273
  if (status === "incomplete") {
1267
- const notEvaluated = score.skipped + score.errored;
1268
- const total = score.total_required + notEvaluated;
1269
- return `score: incomplete \u2014 ${notEvaluated} of ${total} criteria not evaluated; ${scoreCountsSummary(score)}; ${unevaluatedNumericLabel}: ${score.satisfaction}/100`;
1274
+ const allExcluded = score.skipped + score.errored;
1275
+ const unreached = allExcluded - score.preSatisfied;
1276
+ const total = score.total_required + allExcluded;
1277
+ if (score.total_required === 0 && unreached === 0 && score.preSatisfied > 0) {
1278
+ return `score: incomplete \u2014 nothing was at risk (${score.preSatisfied} ${criteriaWord(score.preSatisfied)} already true in the seed); ${scoreCountsSummary(score)}; ${unevaluatedNumericLabel}: ${score.satisfaction}/100`;
1279
+ }
1280
+ const preSatisfiedClause = score.preSatisfied > 0 ? ` (${score.preSatisfied} already true in the seed)` : "";
1281
+ return `score: incomplete \u2014 ${unreached} of ${total} criteria not evaluated${preSatisfiedClause}; ${scoreCountsSummary(score)}; ${unevaluatedNumericLabel}: ${score.satisfaction}/100`;
1270
1282
  }
1271
1283
  return `score: ${score.satisfaction}/100`;
1272
1284
  }
@@ -1434,16 +1446,21 @@ function scoreFromFinalizeResponse(finalized) {
1434
1446
  const failed = results.filter((r) => outcomeOf(r) === "failed").length;
1435
1447
  const errored = results.filter((r) => outcomeOf(r) === "errored").length;
1436
1448
  const skipped = results.filter((r) => outcomeOf(r) === "skipped").length;
1449
+ const preSatisfied = results.filter(
1450
+ (r) => outcomeOf(r) === "skipped" && isPreSatisfied(r)
1451
+ ).length;
1437
1452
  const totalRequired = passed + failed;
1453
+ const unresolvedAbstentions = skipped - preSatisfied + errored;
1438
1454
  return {
1439
1455
  satisfaction: finalized.score,
1440
1456
  passed,
1441
1457
  failed,
1442
1458
  skipped,
1443
1459
  errored,
1460
+ preSatisfied,
1444
1461
  total_required: totalRequired,
1445
1462
  evaluated: hasCriteriaResults ? totalRequired > 0 : true,
1446
- can_pass: hasCriteriaResults ? totalRequired > 0 && skipped === 0 && errored === 0 : true,
1463
+ can_pass: hasCriteriaResults ? totalRequired > 0 && unresolvedAbstentions === 0 : true,
1447
1464
  results,
1448
1465
  judge_model: finalized.judge_model ?? null,
1449
1466
  judge_tokens_in: null,
@@ -1613,4 +1630,4 @@ function splitCommand(command) {
1613
1630
  return file ? { file, args } : null;
1614
1631
  }
1615
1632
 
1616
- export { createHostedClient, criterionMarkerLabel, markerFor, outcomeOf, parseGitHubSeedState, parseTaskFile, perTwinReturnedByCloud, readCodeCriteria, readConfigTwins, readLatestRun, readMetaSummary, redactJsonl, runAgentCommand, runScoreLine, scoreCountsSummary, scoreFromFinalizeResponse, scoreStatus, seedStateForTwin, toTwinHttpEvent, twinSkipSuffix, uploadRunBlobs, writeRunArtifactsCore };
1633
+ export { createHostedClient, criterionMarkerLabel, isPreSatisfied, markerFor, outcomeOf, parseGitHubSeedState, parseTaskFile, perTwinReturnedByCloud, readCodeCriteria, readConfigTwins, readLatestRun, readMetaSummary, redactJsonl, runAgentCommand, runScoreLine, scoreCountsSummary, scoreFromFinalizeResponse, scoreStatus, seedStateForTwin, toTwinHttpEvent, twinSkipSuffix, uploadRunBlobs, writeRunArtifactsCore };
@@ -1,9 +1,9 @@
1
1
  import { newGroupId, reassuranceBox, twinReadyLine, trialsHeaderLine, trialLine, summaryLines, evaluatingLine, criterionPhrase } from './chunk-RGZBC7NF.js';
2
2
  import { DemoCapacityError, capacityLabel, parseCapacityMarker, capacityKindFrom } from './chunk-ZX4WNSZ5.js';
3
- import { runTask, demoTaskPath, DEMO_TASK_NAME, DEMO_REPO } from './chunk-S3RNVG6R.js';
3
+ import { runTask, demoTaskPath, DEMO_TASK_NAME, DEMO_REPO } from './chunk-54OLERUK.js';
4
4
  import { getAvailablePort } from './chunk-XDU6TD4O.js';
5
5
  import './chunk-CBFKZZBR.js';
6
- import { createHostedClient, parseTaskFile, uploadRunBlobs, scoreFromFinalizeResponse, scoreStatus, outcomeOf } from './chunk-KS4DD6JC.js';
6
+ import { createHostedClient, parseTaskFile, uploadRunBlobs, scoreFromFinalizeResponse, scoreStatus, outcomeOf } from './chunk-Z32CZ45D.js';
7
7
  import './chunk-NW7HGA2K.js';
8
8
  import { HostedQuotaError, HostedOrchError } from './chunk-PQYIAA6K.js';
9
9
  import './chunk-SGDUD7KK.js';
@@ -1,7 +1,7 @@
1
1
  import { newGroupId, criterionPhrase } from './chunk-RGZBC7NF.js';
2
- import { runTaskHosted, resolveRunAgentIdentity } from './chunk-OX2CRKHX.js';
2
+ import { runTaskHosted, resolveRunAgentIdentity } from './chunk-BCI7KJRH.js';
3
3
  import './chunk-KUVTL4NZ.js';
4
- import { createHostedClient, parseTaskFile, outcomeOf } from './chunk-KS4DD6JC.js';
4
+ import { createHostedClient, parseTaskFile, outcomeOf } from './chunk-Z32CZ45D.js';
5
5
  import './chunk-NW7HGA2K.js';
6
6
  import { HostedQuotaError, HostedTrialError } from './chunk-PQYIAA6K.js';
7
7
  import './chunk-SGDUD7KK.js';
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
- import { DEFAULT_CONTROL_PLANE_URL, DEFAULT_DASHBOARD_URL, clearLocalCredentials, friendlyHostedError, runSessionCreate, runSessionList, runSessionStop, resolveCredentials, runTaskHosted, discoverRunSet, loadTrialEvents, persistCredentialsAfterLogin, DEFAULT_DOCS_SITE_ORIGIN, resolveSeams, resolveCachedAgentId, readLinkCache, postAgentResolver, writeLinkCache, ensurePomeGitignored } from '../../chunk-OX2CRKHX.js';
2
+ import { DEFAULT_CONTROL_PLANE_URL, DEFAULT_DASHBOARD_URL, clearLocalCredentials, friendlyHostedError, runSessionCreate, runSessionList, runSessionStop, resolveCredentials, runTaskHosted, discoverRunSet, loadTrialEvents, persistCredentialsAfterLogin, DEFAULT_DOCS_SITE_ORIGIN, resolveSeams, resolveCachedAgentId, readLinkCache, postAgentResolver, writeLinkCache, ensurePomeGitignored } from '../../chunk-BCI7KJRH.js';
3
3
  import { readManifest, writeManifest, MANIFEST_JSON, readRequiredManifest, normalizeManifestTwins } from '../../chunk-KUVTL4NZ.js';
4
- import { assetPath, runTask, resolvePackageRoot, DEMO_TASK_NAME, demoTaskPath } from '../../chunk-S3RNVG6R.js';
4
+ import { assetPath, runTask, resolvePackageRoot, DEMO_TASK_NAME, demoTaskPath } from '../../chunk-54OLERUK.js';
5
5
  import '../../chunk-XDU6TD4O.js';
6
6
  import '../../chunk-CBFKZZBR.js';
7
- import { parseTaskFile, scoreStatus, runScoreLine, readLatestRun, readMetaSummary, readConfigTwins, scoreCountsSummary, markerFor, outcomeOf, criterionMarkerLabel, twinSkipSuffix, readCodeCriteria, createHostedClient, toTwinHttpEvent, redactJsonl, scoreFromFinalizeResponse, parseGitHubSeedState, uploadRunBlobs } from '../../chunk-KS4DD6JC.js';
7
+ import { parseTaskFile, scoreStatus, runScoreLine, readLatestRun, readMetaSummary, readConfigTwins, scoreCountsSummary, markerFor, outcomeOf, criterionMarkerLabel, twinSkipSuffix, readCodeCriteria, createHostedClient, toTwinHttpEvent, redactJsonl, scoreFromFinalizeResponse, parseGitHubSeedState, uploadRunBlobs, isPreSatisfied } from '../../chunk-Z32CZ45D.js';
8
8
  import '../../chunk-NW7HGA2K.js';
9
9
  import { MOUNTED_TWINS, deriveAgentSlug, exitCodeFor, HostedUsageError, HostedOrchError, HostedAuthError, HostedQuotaError } from '../../chunk-PQYIAA6K.js';
10
10
  import { TAPE_ASSERTABLE_TOOLS } from '../../chunk-FKZZWWYC.js';
@@ -4360,7 +4360,7 @@ function renderGroupedSignatures(trials) {
4360
4360
  for (const trial of trials) {
4361
4361
  for (const result of trial.verdict.criteria_results) {
4362
4362
  const key = result.criterion.text;
4363
- const outcome = outcomeOf(result);
4363
+ const outcome = isPreSatisfied(result) ? "excluded" : outcomeOf(result);
4364
4364
  if (outcome === "failed") {
4365
4365
  const entry = byCriterion.get(key) ?? {
4366
4366
  marker: criterionMarker(result.criterion),
@@ -4375,10 +4375,12 @@ function renderGroupedSignatures(trials) {
4375
4375
  }
4376
4376
  }
4377
4377
  const passedEverywhere = [];
4378
+ const preSatisfiedEverywhere = [];
4378
4379
  const notUniformlyEvaluated = [];
4379
4380
  for (const [key, seen] of outcomesSeen) {
4380
4381
  if (byCriterion.has(key)) continue;
4381
4382
  if (seen.size === 1 && seen.has("passed")) passedEverywhere.push(key);
4383
+ else if (seen.size === 1 && seen.has("excluded")) preSatisfiedEverywhere.push(key);
4382
4384
  else notUniformlyEvaluated.push(key);
4383
4385
  }
4384
4386
  const completed = trials.length;
@@ -4389,7 +4391,7 @@ function renderGroupedSignatures(trials) {
4389
4391
  return `${idx + 1}. ${marker} ${flattenLine(text)} \u2014 failed in ${hits.length} of ${completed} completed trials
4390
4392
  ${lines.join("\n")}`;
4391
4393
  });
4392
- if (blocks.length === 0 && passedEverywhere.length === 0 && notUniformlyEvaluated.length === 0) {
4394
+ if (blocks.length === 0 && passedEverywhere.length === 0 && preSatisfiedEverywhere.length === 0 && notUniformlyEvaluated.length === 0) {
4393
4395
  return "(no criteria recorded)";
4394
4396
  }
4395
4397
  const notes = [];
@@ -4401,9 +4403,14 @@ ${lines.join("\n")}`;
4401
4403
  `passed in every completed trial: ${passedEverywhere.map((t) => `"${flattenLine(t)}"`).join(" \xB7 ")}`
4402
4404
  );
4403
4405
  }
4406
+ if (preSatisfiedEverywhere.length > 0) {
4407
+ notes.push(
4408
+ `already true in the seed in every completed trial \u2014 excluded from the score, nothing here to fix: ${preSatisfiedEverywhere.map((t) => `"${flattenLine(t)}"`).join(" \xB7 ")}`
4409
+ );
4410
+ }
4404
4411
  if (notUniformlyEvaluated.length > 0) {
4405
4412
  notes.push(
4406
- `not uniformly evaluated (skipped or errored in some trials \u2014 no pass is claimed for these): ${notUniformlyEvaluated.map((t) => `"${flattenLine(t)}"`).join(" \xB7 ")}`
4413
+ `not uniformly evaluated (not evaluated in some trials \u2014 no pass is claimed for these): ${notUniformlyEvaluated.map((t) => `"${flattenLine(t)}"`).join(" \xB7 ")}`
4407
4414
  );
4408
4415
  }
4409
4416
  return [...blocks, ...notes].join("\n");
@@ -4490,7 +4497,7 @@ var DEFAULT_AGENT_FILE = "examples/agents/scripted-triage-agent.ts";
4490
4497
  var DEFAULT_AGENT_COMMAND = `node ${DEFAULT_AGENT_FILE}`;
4491
4498
  var MANIFEST_SCHEMA_URL = "https://pome.sh/schemas/v1/pome.json";
4492
4499
  function readPackageVersion() {
4493
- if ("0.23.0".length > 0) return "0.23.0";
4500
+ if ("0.23.1".length > 0) return "0.23.1";
4494
4501
  try {
4495
4502
  const here = dirname(fileURLToPath(import.meta.url));
4496
4503
  const candidates = [
@@ -4983,7 +4990,7 @@ function createProgram() {
4983
4990
  taskForRuns.config.runs
4984
4991
  );
4985
4992
  if (k > 1) {
4986
- const { runTrialGroup } = await import('../../runTrialGroup-PGDK4KZ2.js');
4993
+ const { runTrialGroup } = await import('../../runTrialGroup-O7DQIB7T.js');
4987
4994
  const fileForRerun = relative(process.cwd(), file);
4988
4995
  const rerunCommand = defaultTask ? options.trials !== void 0 ? `pome run -n ${k}` : "pome run" : `pome run ${fileForRerun && !fileForRerun.startsWith("..") ? fileForRerun : file} -n ${k}`;
4989
4996
  const groupResult = await runTrialGroup({
@@ -5077,7 +5084,7 @@ function createProgram() {
5077
5084
  process.exitCode = 5;
5078
5085
  return;
5079
5086
  }
5080
- const { runDemo } = await import('../../runDemo-7QCEWKQJ.js');
5087
+ const { runDemo } = await import('../../runDemo-Q3WATCYJ.js');
5081
5088
  const result = await runDemo({
5082
5089
  apiBase: opts.apiUrl.replace(/\/$/, ""),
5083
5090
  dashboardBase: process.env.POME_DASHBOARD_URL ?? DEFAULT_DASHBOARD_URL,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pome-sh/cli",
3
- "version": "0.23.0",
3
+ "version": "0.23.1",
4
4
  "description": "Digital-twin testing for AI agents \u2014 run tasks against resettable local or hosted twins and record tool-call traces for evaluation on pome.sh.",
5
5
  "keywords": [
6
6
  "ai",