@pome-sh/cli 0.26.8 → 0.26.9

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.26.8",
4
- "git_sha": "26bbe25a36b4510303122c7cfd4e385aed5fa135",
5
- "build_time": "2026-08-23T07:35:31.094Z"
3
+ "version": "0.26.9",
4
+ "git_sha": "67b8f65f860de730a4a9136d74c91f89b2110542",
5
+ "build_time": "2026-08-23T08:11:22.683Z"
6
6
  }
@@ -1,7 +1,7 @@
1
- import { findManifestPath, readManifest } from './chunk-U6MQ5KBT.js';
1
+ import { findManifestPath, readManifest } from './chunk-O5MCNQY4.js';
2
2
  import { getAvailablePort } from './chunk-XDU6TD4O.js';
3
3
  import { buildEgressAllowlist } from './chunk-CBFKZZBR.js';
4
- import './chunk-KSX2PAEI.js';
4
+ import './chunk-64NZFX4Z.js';
5
5
  import './chunk-JUESW6G4.js';
6
6
  import './chunk-SG6ZTIMT.js';
7
7
  import { serve } from '@hono/node-server';
@@ -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-7WPD3DTO.js';
3
+ import { parseTaskFile, seedStateForTwin, runAgentCommand, writeRunArtifactsCore } from './chunk-X7V5DMA7.js';
4
4
  import { createRecorder, bootTwin } from './chunk-5EE7YWA3.js';
5
5
  import { eventSchema } from './chunk-JUESW6G4.js';
6
6
  import { redactSecrets, redactEvent } from './chunk-SG6ZTIMT.js';
@@ -320,7 +320,7 @@ async function runTask(options) {
320
320
  authSecret
321
321
  );
322
322
  const proxyEnv = captureServer ? {
323
- // FDRS-399 — agent's outbound traffic flows through the capture-server.
323
+ // Agent's outbound traffic flows through the capture-server.
324
324
  // Twin traffic is localhost, NO_PROXY excludes it so it stays a
325
325
  // TwinHttpEvent (recorded in-process) and isn't double-counted as a
326
326
  // proxy-captured LlmCallEvent.
@@ -138,7 +138,7 @@ var runObjectSchema = z.object({
138
138
  // CLI-computed (BYOK Flavor #1)
139
139
  criteria_results: z.array(criterionResultSchema),
140
140
  trace_s3_key: z.string().nullable(),
141
- // s3 key for events.jsonl (hosted only; F-689 deleted tool_calls.jsonl)
141
+ // s3 key for events.jsonl (hosted only)
142
142
  state_s3_key: z.string().nullable(),
143
143
  // s3 key for state_final.json
144
144
  meta_s3_key: z.string().nullable(),
@@ -149,7 +149,7 @@ var runObjectSchema = z.object({
149
149
  // which model judged [model] criteria (free-form)
150
150
  judge_tokens_in: z.number().int().min(0).nullable(),
151
151
  judge_tokens_out: z.number().int().min(0).nullable(),
152
- // ── FDRS-613: reconciled from pome-cloud /v1 wire truth (all additive with
152
+ // ── Reconciled from pome-cloud /v1 wire truth (all additive with
153
153
  // defaults so pre-existing Run constructors stay valid) ────────────────────
154
154
  // Sim deep-telemetry — per-run agent telemetry rollup, computed at finalize
155
155
  // from the agent's independently-correlated `gen_ai` span tree. Null = no
@@ -163,12 +163,12 @@ var runObjectSchema = z.object({
163
163
  agent_telemetry_span_count: z.number().int().min(0).nullable().default(null),
164
164
  // Which server-side correlator produced lanes/steps.
165
165
  correlator_kind: correlatorKindSchema.default("heuristic"),
166
- // M0.2 (FDRS-509) — which surface this run belongs to. 'simulation' =
166
+ // M0.2 — which surface this run belongs to. 'simulation' =
167
167
  // CLI/staging scenario run (default for every legacy row); 'production' = an
168
168
  // ingested OTLP production trace (M2).
169
169
  environment: z.enum(["production", "simulation"]).default("simulation"),
170
- // M0.5 (FDRS-512) — replay loop linkage (prod-run → task → replay-run).
171
- // W3 vocab: canonical key; 0.3.0 alias: promoted_scenario_id.
170
+ // M0.5 — replay loop linkage (prod-run → task → replay-run).
171
+ // Canonical key; 0.3.0 alias: promoted_scenario_id.
172
172
  promoted_task_id: z.string().nullable().default(null),
173
173
  replay_run_id: z.string().nullable().default(null),
174
174
  // Storage key for the tar-and-upload state archive the replay engine seeds a
@@ -184,7 +184,7 @@ var runObjectSchema = z.object({
184
184
  // LLM endpoint failure, or legacy pre-M4-1 runs.
185
185
  fix_prompt: z.string().nullable().default(null),
186
186
  // Storage KEY (path) of the raw events.jsonl blob — NOT a URL (dashboard mints
187
- // a signed GET URL on read). FDRS-613: relaxed from `.url()` to match the
187
+ // a signed GET URL on read). Relaxed from `.url()` to match the
188
188
  // pome-cloud shape, since persisted storage keys are not URLs. Null in
189
189
  // self-host mode, on upload failure, --no-upload opt-out, or legacy runs.
190
190
  events_jsonl_url: z.string().nullable().default(null),
@@ -415,7 +415,7 @@ var slackSeedStateSchema = z.object({
415
415
  ).default([])
416
416
  })
417
417
  ).default([]),
418
- // F-1509. Mirrors `seedSchema.files` in `@pome-sh/twin-slack`. `user` and
418
+ // Same shape as `seedSchema.files` in `@pome-sh/twin-slack`. `user` and
419
419
  // `channels` are seed HANDLES (a user/channel `name`) or ids.
420
420
  files: z.array(
421
421
  z.object({
@@ -708,7 +708,7 @@ var taskClassSchema = z.enum(["conformance", "restraint", "adversarial"]);
708
708
  var taskConfigSchema = z.object({
709
709
  twins: z.array(z.string()).default(["github"]),
710
710
  class: taskClassSchema.optional(),
711
- // F-1302 — conformance vs the exam half
711
+ // conformance vs the exam half
712
712
  timeout: z.number().int().positive().default(60),
713
713
  // seconds
714
714
  runs: z.number().int().positive().default(1),
@@ -766,7 +766,7 @@ var createSessionRequestObjectSchema = z.object({
766
766
  // base64-encoded UTF-8 markdown; 0.3.0 alias: scenario_source
767
767
  task_id: z.string().optional(),
768
768
  // alternative: stored task; 0.3.0 alias: scenario_id
769
- // FDRS-580 / ADR-015 (adopted from pome-cloud, FDRS-613): the seed override
769
+ // ADR-015 (adopted from pome-cloud): the seed override
770
770
  // is a PERMISSIVE, shape-blind boundary. The twin pod's own `parseSeed` is
771
771
  // the sole authority on the seed's domain shape; the cloud forwards it
772
772
  // verbatim. `z.record` keeps the one invariant that is the boundary's
@@ -780,14 +780,14 @@ var createSessionRequestObjectSchema = z.object({
780
780
  // POST /v1/sessions. The dashboard generates one per Start-button click;
781
781
  // legacy clients work without it.
782
782
  idempotency_key: z.string().uuid().optional(),
783
- // M3 / FDRS-636: client-minted trial-group identity — `pome run -n k`
783
+ // Client-minted trial-group identity — `pome run -n k`
784
784
  // (and `pome demo`) stamp one id per invocation, shared by all k trial
785
785
  // sessions. The cloud copies it onto sessions.group_id at mint and onto
786
786
  // runs.group_id at finalize; the demo/eval mints already accept the same
787
787
  // field. Format mirrors the cloud's GROUP_ID_RE. Legacy clients omit it.
788
788
  group_id: z.string().regex(/^[A-Za-z0-9_-]{6,64}$/).optional(),
789
- // F-818 (spec F-804): per-run override of the manifest's agent.version —
790
- // an opaque user-declared label stamped onto the session/run rows (F-820).
789
+ // Per the manifest format spec: per-run override of the manifest's agent.version —
790
+ // an opaque user-declared label stamped onto the session/run rows.
791
791
  // Absent = the agent's registered version. Additive; older clients omit it
792
792
  // and an older cloud strips it.
793
793
  agent_version: z.string().optional()
@@ -897,9 +897,9 @@ var submitResultRequestObjectSchema = z.object({
897
897
  lanes: z.array(laneSchema).default([]),
898
898
  steps: z.array(stepSchema).default([]),
899
899
  fix_prompt: z.string().nullable().default(null),
900
- // FDRS-357 (adopted from pome-cloud, FDRS-613): storage key (NOT URL) returned
900
+ // Adopted from pome-cloud: storage key (NOT URL) returned
901
901
  // by POST /v1/sessions/:id/result-upload-url. Null on upload failure
902
- // (best-effort), --no-upload opt-out, or pre-FDRS-357 CLI.
902
+ // (best-effort), --no-upload opt-out, or a CLI that predates the key.
903
903
  events_jsonl_url: z.string().nullable().default(null),
904
904
  // Trace blobs — safe to upload (HTTP between agent and twin, not LLM prompts):
905
905
  trace_jsonl_b64: z.string(),
@@ -924,7 +924,7 @@ var createEvalSessionResponseSchema = z.object({
924
924
  var criterionDefSchema = z.object({
925
925
  id: z.string().min(1),
926
926
  text: z.string().min(1),
927
- // Tolerant reader (F-778): released CLIs still send the legacy "D"/"P"
927
+ // Tolerant reader: released CLIs still send the legacy "D"/"P"
928
928
  // spellings; parsed output is always the canonical "code"/"model". Single
929
929
  // source of truth for the rename is LEGACY_CRITERION_KIND_MAP.
930
930
  kind: z.enum(["D", "P", "code", "model"]).transform(
@@ -934,7 +934,7 @@ var criterionDefSchema = z.object({
934
934
  // attributes to. Absent = the session's primary twin (twins[0]). Additive —
935
935
  // single-twin tasks omit it and score against the sole twin as before.
936
936
  twin: z.string().min(1).optional(),
937
- // F-1296 (pome-cloud) / F-1299 — forwards the markdown `always-scored`
937
+ // Forwards the markdown `always-scored`
938
938
  // keyword so the cloud's seed-exclusion rule
939
939
  // (docs/grading/seed-exclusion.md, pome-cloud) knows this [code] criterion
940
940
  // must be graded even when the seed already satisfies it. snake_case to
@@ -948,7 +948,7 @@ var criterionDefSchema = z.object({
948
948
  });
949
949
  z.object({
950
950
  name: z.string().min(1),
951
- // Manifest identity (F-818, spec F-804): human-ish slug input — the server
951
+ // Manifest identity (per the format spec): human-ish slug input — the server
952
952
  // derives the canonical kebab slug with the same deriveAgentSlug exported
953
953
  // from `./manifest.js`, then validates it against SLUG_RE. Cap mirrors the
954
954
  // control-plane edge; shape is deliberately NOT enforced here.
@@ -957,7 +957,7 @@ z.object({
957
957
  // User-declared version label from the manifest's agent.version — an opaque
958
958
  // string, never auto-bumped, never semver-interpreted.
959
959
  version: z.string().optional(),
960
- // Open enum by design (F-804): unknown frameworks get a did-you-mean warning
960
+ // Open enum by design: unknown frameworks get a did-you-mean warning
961
961
  // server-side, never a validation error.
962
962
  framework: z.string().min(1).optional(),
963
963
  // Multi-twin (M3): the twins this agent is allowed to exercise. Absent = the
@@ -971,18 +971,18 @@ var agentResponseSchema = z.object({
971
971
  slug: z.string(),
972
972
  display_name: z.string(),
973
973
  judge_model: z.string(),
974
- // Manifest identity (F-818): registered agent.framework / agent.description /
975
- // agent.version, nullable where the server has nothing stored (F-1213:
976
- // unset, never a guessed default). Optional for the pre-F-820 cloud, which
974
+ // Manifest identity: registered agent.framework / agent.description /
975
+ // agent.version, nullable where the server has nothing stored (unset,
976
+ // never a guessed default). Optional for a cloud that predates the resolver, which
977
977
  // omits them.
978
978
  framework: z.string().nullable().optional(),
979
979
  description: z.string().nullable().optional(),
980
980
  version: z.string().nullable().optional(),
981
- // F-818 resolver semantics: true when POST /v1/agents auto-registered a new
981
+ // Resolver semantics: true when POST /v1/agents auto-registered a new
982
982
  // agent for this slug, false when it resolved an existing one. Optional for
983
- // the pre-F-820 cloud; absence means "unknown", not "resolved".
983
+ // a cloud that predates the resolver; absence means "unknown", not "resolved".
984
984
  created: z.boolean().optional(),
985
- // F-861 slug-rename hint (cloud-emitted since v0.4.18): how the resolver
985
+ // Slug-rename hint (cloud-emitted since v0.4.18): how the resolver
986
986
  // matched this slug. Known values today are "slug" (live match), "alias" (an
987
987
  // old slug that was renamed; the returned `slug` is the new canonical), and
988
988
  // "created" (fresh auto-register) — the CLI surfaces a rename notice only on
@@ -1168,7 +1168,7 @@ var HostedAuthError = class extends Error {
1168
1168
  };
1169
1169
  var HostedQuotaError = class extends Error {
1170
1170
  /** `details` mirrors the cloud error envelope's machine-readable details
1171
- * (e.g. `{ kind: "daily_judge_cap" }`) so `pome demo` (FDRS-643/662) can
1171
+ * (e.g. `{ kind: "daily_judge_cap" }`) so `pome demo` can
1172
1172
  * render honest labeled at-capacity states. Optional: older responses and
1173
1173
  * the twin-pod 401 shape carry none. */
1174
1174
  constructor(message, requestId, details) {
@@ -1183,7 +1183,7 @@ var HostedQuotaError = class extends Error {
1183
1183
  var HostedOrchError = class extends Error {
1184
1184
  /** `status` is the HTTP status that produced this error, when one exists
1185
1185
  * (network/parse failures leave it undefined). `pome eval` uses it to
1186
- * scope its reaped-session retry to 404/410 only (FDRS-656 review). */
1186
+ * scope its reaped-session retry to 404/410 only. */
1187
1187
  constructor(message, requestId, status, type) {
1188
1188
  super(message);
1189
1189
  this.requestId = requestId;
@@ -1,4 +1,4 @@
1
- import { HostedOrchError, manifestSchema, deriveAgentSlug, SLUG_RE } from './chunk-KSX2PAEI.js';
1
+ import { HostedOrchError, manifestSchema, deriveAgentSlug, SLUG_RE } from './chunk-64NZFX4Z.js';
2
2
  import { readFile, writeFile } from 'node:fs/promises';
3
3
  import { resolve, join, dirname } from 'node:path';
4
4
  import { stringify, parse } from 'yaml';
@@ -1,6 +1,6 @@
1
- import { readManifest, normalizeManifestTwins } from './chunk-U6MQ5KBT.js';
2
- import { createHostedClient, perTwinReturnedByCloud, parseTaskFile, runAgentCommand, writeRunArtifactsCore, toTwinHttpEvent, redactJsonl, uploadRunBlobs, scoreFromFinalizeResponse, scoreStatus, evaluationCounts } from './chunk-7WPD3DTO.js';
3
- import { MOUNTED_TWINS, HostedAuthError, HostedDiscardRefusedError, HostedQuotaError, HostedOrchError, HostedTrialError, agentResponseSchema } from './chunk-KSX2PAEI.js';
1
+ import { readManifest, normalizeManifestTwins } from './chunk-O5MCNQY4.js';
2
+ import { createHostedClient, perTwinReturnedByCloud, parseTaskFile, runAgentCommand, writeRunArtifactsCore, toTwinHttpEvent, redactJsonl, uploadRunBlobs, scoreFromFinalizeResponse, scoreStatus, evaluationCounts } from './chunk-X7V5DMA7.js';
3
+ import { MOUNTED_TWINS, HostedAuthError, HostedDiscardRefusedError, HostedQuotaError, HostedOrchError, HostedTrialError, agentResponseSchema } from './chunk-64NZFX4Z.js';
4
4
  import { redactSecrets, redactEvent } from './chunk-SG6ZTIMT.js';
5
5
  import { randomUUID, createHash } from 'node:crypto';
6
6
  import { rm, readFile, stat, mkdir, writeFile, chmod, mkdtemp, readdir, rename } from 'node:fs/promises';
@@ -1118,7 +1118,7 @@ async function runTaskHosted(options) {
1118
1118
  // back. For events.jsonl the conventional `team-<>/session-<>/events.jsonl`
1119
1119
  // path matches what /result-upload-url signs, so omitting traceStorageKey
1120
1120
  // still resolves correctly. For state blobs there is no conventional
1121
- // fallback today (FDRS-395) — omitting them means cloud's judge sees
1121
+ // fallback today — omitting them means cloud's judge sees
1122
1122
  // "{}", which we accept as best-effort degradation.
1123
1123
  traceStorageKey: eventsJsonlUrl ?? void 0,
1124
1124
  stateInitialStorageKey: stateKeys.initialKey ?? void 0,
@@ -1,4 +1,4 @@
1
- import { criterionSchema, finalizeResponseSchema, HostedDiscardRefusedError, HostedOrchError, HostedAuthError, HostedQuotaError, submitResultResponseSchema, createEvalSessionResponseSchema, createSessionResponseSchema, sessionPublicSchema } from './chunk-KSX2PAEI.js';
1
+ import { criterionSchema, finalizeResponseSchema, HostedDiscardRefusedError, HostedOrchError, HostedAuthError, HostedQuotaError, submitResultResponseSchema, createEvalSessionResponseSchema, createSessionResponseSchema, sessionPublicSchema } from './chunk-64NZFX4Z.js';
2
2
  import { seedSchema, parseSeed, defaultSeedState as defaultSeedState$2 } from './chunk-B22TYIEM.js';
3
3
  import { gmailSeedSchema, defaultSeedState } from './chunk-NJ246QPJ.js';
4
4
  import { linearSeedSchema, defaultSeedState as defaultSeedState$1 } from './chunk-IZIZC7ZW.js';
@@ -191,7 +191,7 @@ var slackSeedStateSchema = z.object({
191
191
  team: z.record(z.string(), z.unknown()).optional(),
192
192
  users: z.array(z.record(z.string(), z.unknown())).default([]),
193
193
  channels: z.array(z.record(z.string(), z.unknown())).default([]),
194
- // F-1509. Permissive like its siblings — the vendored `parseSeed` does the
194
+ // Permissive like its siblings — the vendored `parseSeed` does the
195
195
  // regex-level validation. It has to be listed at all because `.strict()`
196
196
  // REJECTS an unlisted key: without this line a slack seed declaring `files`
197
197
  // fails to parse rather than being stripped.
@@ -1177,7 +1177,7 @@ function createHostedClient(config) {
1177
1177
  {
1178
1178
  method: "DELETE",
1179
1179
  // authHeaders, not a hardcoded x-api-key: demo teardown carries a
1180
- // bearer demo_token (FDRS-643 live-run finding — the hardcoded
1180
+ // bearer demo_token (a live-run finding — the hardcoded
1181
1181
  // header made every demo DELETE an opaque 404, silently swallowed
1182
1182
  // by best-effort).
1183
1183
  headers: authHeaders,
@@ -1596,7 +1596,7 @@ var SAFE_PARENT_ENV = /* @__PURE__ */ new Set([
1596
1596
  var DEFAULT_AGENT_ENV_ALLOWLIST = /* @__PURE__ */ new Set([
1597
1597
  "AI_GATEWAY_API_KEY",
1598
1598
  "ANTHROPIC_API_KEY",
1599
- // FDRS-667 — Claude subscription auth (`claude setup-token`). Without
1599
+ // Claude subscription auth (`claude setup-token`). Without
1600
1600
  // this the Claude Agent SDK inside the agent subprocess only sees an API
1601
1601
  // key, and subscription-only users fail auth under `pome run` while the
1602
1602
  // same agent works when launched by hand.
@@ -1,11 +1,11 @@
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-NUXVJ4E6.js';
3
+ import { runTask, demoTaskPath, DEMO_TASK_NAME, DEMO_REPO } from './chunk-5EV4SG3F.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-7WPD3DTO.js';
6
+ import { createHostedClient, parseTaskFile, uploadRunBlobs, scoreFromFinalizeResponse, scoreStatus, outcomeOf } from './chunk-X7V5DMA7.js';
7
7
  import './chunk-NW7HGA2K.js';
8
- import { HostedQuotaError, HostedOrchError } from './chunk-KSX2PAEI.js';
8
+ import { HostedQuotaError, HostedOrchError } from './chunk-64NZFX4Z.js';
9
9
  import './chunk-B22TYIEM.js';
10
10
  import './chunk-NJ246QPJ.js';
11
11
  import './chunk-IZIZC7ZW.js';
@@ -1,9 +1,9 @@
1
1
  import { newGroupId, criterionPhrase } from './chunk-RGZBC7NF.js';
2
- import { runTaskHosted, resolveRunAgentIdentity } from './chunk-OFA4E6RJ.js';
3
- import './chunk-U6MQ5KBT.js';
4
- import { createHostedClient, parseTaskFile, outcomeOf } from './chunk-7WPD3DTO.js';
2
+ import { runTaskHosted, resolveRunAgentIdentity } from './chunk-RG32W733.js';
3
+ import './chunk-O5MCNQY4.js';
4
+ import { createHostedClient, parseTaskFile, outcomeOf } from './chunk-X7V5DMA7.js';
5
5
  import './chunk-NW7HGA2K.js';
6
- import { HostedQuotaError, HostedTrialError } from './chunk-KSX2PAEI.js';
6
+ import { HostedQuotaError, HostedTrialError } from './chunk-64NZFX4Z.js';
7
7
  import './chunk-B22TYIEM.js';
8
8
  import './chunk-NJ246QPJ.js';
9
9
  import './chunk-IZIZC7ZW.js';
@@ -155,7 +155,7 @@ async function runTrialGroup(options) {
155
155
  }
156
156
  } catch (err) {
157
157
  await Promise.all(
158
- // F-983: these sessions were minted and never launched, so there is no
158
+ // These sessions were minted and never launched, so there is no
159
159
  // tape to lose — an explicit discard is honest here.
160
160
  sessions.map(
161
161
  (s) => client.deleteSession(s.session_id, true, { discard: true }).catch(
@@ -206,7 +206,7 @@ async function runTrialGroup(options) {
206
206
  agentModel: options.agentModel,
207
207
  premintedSession: session,
208
208
  abandonOnFailure: true,
209
- // FDRS-644 — stamped into the trial's verdict.json so fix-prompt
209
+ // Stamped into the trial's verdict.json so fix-prompt
210
210
  // can reassemble this run set from local artifacts.
211
211
  groupId
212
212
  });
@@ -217,7 +217,7 @@ async function runTrialGroup(options) {
217
217
  row = {
218
218
  kind: "completed",
219
219
  score: result.score.satisfaction,
220
- // F-925 — the trial's own verdict, carried out of the run rather than
220
+ // The trial's own verdict, carried out of the run rather than
221
221
  // re-derived here. It was `result.exitCode === 0`, which cannot express
222
222
  // the third state (1 means both "failed" and "could not be graded"), so
223
223
  // a 100/100 trial with 3 of 4 criteria skipped counted as a clean pass.
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
- import { DEFAULT_CONTROL_PLANE_URL, DEFAULT_DASHBOARD_URL, clearLocalCredentials, friendlyHostedError, runSessionCreate, runSessionList, runSessionStop, resolveCredentials, runTaskHosted, discoverRunSet, VERDICT_ARTIFACT_VERSION, persistCredentialsAfterLogin, DEFAULT_DOCS_SITE_ORIGIN, resolveSeams, resolveCachedAgentId, readLinkCache, postAgentResolver, writeLinkCache, ensurePomeGitignored } from '../../chunk-OFA4E6RJ.js';
3
- import { readManifest, writeManifest, MANIFEST_JSON, readRequiredManifest, normalizeManifestTwins } from '../../chunk-U6MQ5KBT.js';
4
- import { assetPath, runTask, resolvePackageRoot, DEMO_TASK_NAME, demoTaskPath } from '../../chunk-NUXVJ4E6.js';
2
+ import { DEFAULT_CONTROL_PLANE_URL, DEFAULT_DASHBOARD_URL, clearLocalCredentials, friendlyHostedError, runSessionCreate, runSessionList, runSessionStop, resolveCredentials, runTaskHosted, discoverRunSet, VERDICT_ARTIFACT_VERSION, persistCredentialsAfterLogin, DEFAULT_DOCS_SITE_ORIGIN, resolveSeams, resolveCachedAgentId, readLinkCache, postAgentResolver, writeLinkCache, ensurePomeGitignored } from '../../chunk-RG32W733.js';
3
+ import { readManifest, writeManifest, MANIFEST_JSON, readRequiredManifest, normalizeManifestTwins } from '../../chunk-O5MCNQY4.js';
4
+ import { assetPath, runTask, resolvePackageRoot, DEMO_TASK_NAME, demoTaskPath } from '../../chunk-5EV4SG3F.js';
5
5
  import '../../chunk-XDU6TD4O.js';
6
6
  import '../../chunk-CBFKZZBR.js';
7
- import { parseTaskFile, scoreStatus, runScoreLine, readLatestRun, readMetaSummary, outcomeOf, readConfigTwins, scoreCountsSummary, markerFor, criterionMarkerLabel, twinSkipSuffix, readCodeCriteria, createHostedClient, toTwinHttpEvent, redactJsonl, scoreFromFinalizeResponse, parseGitHubSeedState, uploadRunBlobs, isPreSatisfied } from '../../chunk-7WPD3DTO.js';
7
+ import { parseTaskFile, scoreStatus, runScoreLine, readLatestRun, readMetaSummary, outcomeOf, readConfigTwins, scoreCountsSummary, markerFor, criterionMarkerLabel, twinSkipSuffix, readCodeCriteria, createHostedClient, toTwinHttpEvent, redactJsonl, scoreFromFinalizeResponse, parseGitHubSeedState, uploadRunBlobs, isPreSatisfied } from '../../chunk-X7V5DMA7.js';
8
8
  import '../../chunk-NW7HGA2K.js';
9
- import { MOUNTED_TWINS, deriveAgentSlug, exitCodeFor, HostedUsageError, HostedOrchError, HostedAuthError, HostedQuotaError } from '../../chunk-KSX2PAEI.js';
9
+ import { MOUNTED_TWINS, deriveAgentSlug, exitCodeFor, HostedUsageError, HostedOrchError, HostedAuthError, HostedQuotaError } from '../../chunk-64NZFX4Z.js';
10
10
  import { TAPE_ASSERTABLE_TOOLS } from '../../chunk-C4BVTUA3.js';
11
11
  import { seedSchema } from '../../chunk-B22TYIEM.js';
12
12
  import { SLACK_CHECKS } from '../../chunk-IDNSKKEC.js';
@@ -422,7 +422,7 @@ var DOCS_TOPICS = [
422
422
  "register",
423
423
  "pome.json",
424
424
  "connect",
425
- // Migrated from the retired skills-setup topic (F-893): wiring your own
425
+ // Migrated from the retired skills-setup topic: wiring your own
426
426
  // agent is now the "bring your own agent" path. ("pome-setup" / "setup"
427
427
  // already resolve to getting-started via its "setup" keyword.)
428
428
  "wire"
@@ -434,8 +434,8 @@ var DOCS_TOPICS = [
434
434
  path: "/docs/how-pome-works",
435
435
  keywords: ["twins", "scenarios", "runs", "scoring", "artifacts", "loop"]
436
436
  },
437
- // F-889 dropped the Gen-1 /setup and /test-with-pome skill pages from the
438
- // docs nav; F-893 retired the CLI commands that pointed at them. The two
437
+ // The Gen-1 /setup and /test-with-pome skill pages were dropped from the docs
438
+ // nav, and the CLI commands that pointed at them are gone. The two
439
439
  // topic entries are gone, but their still-live keywords are MIGRATED onto the
440
440
  // surviving replacement topics so `pome docs <kw>` keeps routing:
441
441
  // wire → existing-agent; test-with-pome / pome-test → cli-run;
@@ -482,7 +482,7 @@ var DOCS_TOPICS = [
482
482
  id: "cli",
483
483
  title: "Command Line Interface",
484
484
  path: "/docs/cli",
485
- // "eval" migrated from the retired skills-test topic (F-893): there is no
485
+ // "eval" migrated from the retired skills-test topic: there is no
486
486
  // dedicated `pome eval` docs page, and it is a distinct workflow from
487
487
  // `pome inspect`, so it routes to the CLI reference index that documents
488
488
  // every command rather than to a sibling command's page.
@@ -501,7 +501,7 @@ var DOCS_TOPICS = [
501
501
  "default",
502
502
  "demo task",
503
503
  "run yours",
504
- // Migrated from the retired skills-test topic (F-893): running tasks is
504
+ // Migrated from the retired skills-test topic: running tasks is
505
505
  // how you test an agent with pome.
506
506
  "test-with-pome",
507
507
  "pome-test"
@@ -516,7 +516,7 @@ var DOCS_TOPICS = [
516
516
  {
517
517
  id: "cli-tasks",
518
518
  title: "pome tasks",
519
- // F-912 — the M4 docs door renamed the docs.pome.sh page from
519
+ // The M4 docs door renamed the docs.pome.sh page from
520
520
  // /docs/cli/scenarios to /docs/cli/tasks (a redirect keeps the old URL
521
521
  // alive), so `path` now points at the new route. The "scenarios" keyword
522
522
  // stays so `pome docs scenarios` still resolves to this topic.
@@ -3887,7 +3887,7 @@ async function runEval(options) {
3887
3887
  agentModel: "unknown",
3888
3888
  agentSdk: projectIdentity?.framework ?? null,
3889
3889
  // Eval sessions carry no client-side criteria — the cloud eval judge
3890
- // owns them (FDRS-655). Cloud's finalize schema defaults all scenario
3890
+ // owns them. Cloud's finalize schema defaults all scenario
3891
3891
  // fields, so empty strings are accepted.
3892
3892
  criteria: [],
3893
3893
  taskName,
@@ -3993,7 +3993,7 @@ async function runEvalCommand(runDirArg, opts) {
3993
3993
  );
3994
3994
  } else if (err instanceof HostedOrchError && (err.status === 404 || err.status === 405)) {
3995
3995
  console.error(
3996
- "Tip: this control plane does not serve `POST /v1/eval-sessions` yet \u2014 the Pome cloud eval path (FDRS-655) is not deployed. Upgrade the control plane (or wait for the deploy). In the meantime, a hosted `pome run` still returns a cloud verdict."
3996
+ "Tip: this control plane does not serve `POST /v1/eval-sessions` yet \u2014 the Pome cloud eval path is not deployed. Upgrade the control plane (or wait for the deploy). In the meantime, a hosted `pome run` still returns a cloud verdict."
3997
3997
  );
3998
3998
  }
3999
3999
  process.exitCode = code;
@@ -4651,7 +4651,7 @@ var DEFAULT_AGENT_COMMAND = `node ${DEFAULT_AGENT_FILE}`;
4651
4651
  var MANIFEST_SCHEMA_URL = "https://pome.sh/schemas/v1/pome.json";
4652
4652
  var MAX_UNREADABLE_PATHS_SHOWN = 5;
4653
4653
  function readPackageVersion() {
4654
- if ("0.26.8".length > 0) return "0.26.8";
4654
+ if ("0.26.9".length > 0) return "0.26.9";
4655
4655
  try {
4656
4656
  const here = dirname(fileURLToPath(import.meta.url));
4657
4657
  const candidates = [
@@ -4750,7 +4750,7 @@ function createProgram() {
4750
4750
  console.error(postInitMessage);
4751
4751
  });
4752
4752
  program.command("install").allowUnknownOption().allowExcessArguments().description(
4753
- "Retired (F-893). Prints the Gen-2 wiring path: `claude mcp add \u2026 pome` + `npx skills add pome-sh/digital-twins --skill '*'`, then the pome-intake / REST-launch preflight."
4753
+ "Retired. Prints the Gen-2 wiring path: `claude mcp add \u2026 pome` + `npx skills add pome-sh/digital-twins --skill '*'`, then the pome-intake / REST-launch preflight."
4754
4754
  ).action(async () => {
4755
4755
  const { runInstall } = await import('../../install-4OATBKG3.js');
4756
4756
  runInstall();
@@ -4975,7 +4975,7 @@ function createProgram() {
4975
4975
  process.env.POME_API_URL ?? DEFAULT_CONTROL_PLANE_URL
4976
4976
  ).option(
4977
4977
  "--discard",
4978
- "Confirm destroying a session whose run has not been graded (F-983)",
4978
+ "Confirm destroying a session whose run has not been graded",
4979
4979
  false
4980
4980
  ).action(
4981
4981
  async (sessionId, opts) => {
@@ -4997,7 +4997,7 @@ function createProgram() {
4997
4997
  'Task markdown file or directory. Omit to run the demo task ("that was ours, run yours"): tasks/first-run-demo.md is dropped into your project on first use with runs: 5 pinned.'
4998
4998
  ).option("--agent <command>", "Agent command to run").option(
4999
4999
  "-n, --trials <count>",
5000
- "FDRS-636: run <count> isolated trials of the task as ONE trial group (integer 1-20; hosted only). Default is the task config's `runs` field (capped at 20). k>1 mints sessions with a shared group id up to your plan's concurrent-twin quota (FDRS-663: remaining trials reuse slots as earlier trials finish), runs trials at that concurrency, prints the per-trial verdict table (numeric cloud-judge scores), and exits 0 iff at least one trial completed and every completed trial passed (1: a completed trial failed; 2: nothing completed). k=1 keeps today's single-run behavior exactly."
5000
+ "Run <count> isolated trials of the task as ONE trial group (integer 1-20; hosted only). Default is the task config's `runs` field (capped at 20). k>1 mints sessions with a shared group id up to your plan's concurrent-twin quota (remaining trials reuse slots as earlier trials finish), runs trials at that concurrency, prints the per-trial verdict table (numeric cloud-judge scores), and exits 0 iff at least one trial completed and every completed trial passed (1: a completed trial failed; 2: nothing completed). k=1 keeps today's single-run behavior exactly."
5001
5001
  ).option("--artifacts-dir <dir>", "Directory for run artifacts", "runs").option("--hosted", "Deprecated: hosted is now the default. Flag is a no-op.").option(
5002
5002
  "--api-url <url>",
5003
5003
  "Control-plane base URL.",
@@ -5007,7 +5007,7 @@ function createProgram() {
5007
5007
  "Override the manifest's agent.version for this run (stamped on the session/run)."
5008
5008
  ).option(
5009
5009
  "--no-capture",
5010
- "Self-host only: skip spawning the capture-server child and don't inject HTTP_PROXY/HTTPS_PROXY into the agent. Used by the CI overhead gate (FDRS-405) to baseline proxy-on-vs-off latency. No-op on hosted runs."
5010
+ "Self-host only: skip spawning the capture-server child and don't inject HTTP_PROXY/HTTPS_PROXY into the agent. Used by the CI overhead gate to baseline proxy-on-vs-off latency. No-op on hosted runs."
5011
5011
  ).option(
5012
5012
  "--local",
5013
5013
  "Self-host: run against an in-process twin and CAPTURE a raw trace only (an audit log \u2014 no score, no verdict, no judge). A verdict comes from the cloud: run `pome eval <run-dir>` on the captured trace, or `pome login` and run against Pome cloud."
@@ -5096,7 +5096,7 @@ function createProgram() {
5096
5096
  return;
5097
5097
  }
5098
5098
  {
5099
- const { runDoctorChecks } = await import('../../checks-UOJUUVZB.js');
5099
+ const { runDoctorChecks } = await import('../../checks-NSHCXA6N.js');
5100
5100
  const { renderDoctorReport } = await import('../../render-ZQQ4UMNO.js');
5101
5101
  const doctorReport = await runDoctorChecks({ mode: useLocal ? "full" : "hosted" });
5102
5102
  if (!doctorReport.ok) {
@@ -5134,7 +5134,7 @@ function createProgram() {
5134
5134
  taskForRuns.config.runs
5135
5135
  );
5136
5136
  if (k > 1) {
5137
- const { runTrialGroup } = await import('../../runTrialGroup-INW4QLSL.js');
5137
+ const { runTrialGroup } = await import('../../runTrialGroup-IXIVA2R3.js');
5138
5138
  const fileForRerun = relative(process.cwd(), file);
5139
5139
  const rerunCommand = defaultTask ? options.trials !== void 0 ? `pome run -n ${k}` : "pome run" : `pome run ${fileForRerun && !fileForRerun.startsWith("..") ? fileForRerun : file} -n ${k}`;
5140
5140
  const groupResult = await runTrialGroup({
@@ -5228,7 +5228,7 @@ function createProgram() {
5228
5228
  process.exitCode = 5;
5229
5229
  return;
5230
5230
  }
5231
- const { runDemo } = await import('../../runDemo-MZPIXV6R.js');
5231
+ const { runDemo } = await import('../../runDemo-SA55CMWG.js');
5232
5232
  const result = await runDemo({
5233
5233
  apiBase: opts.apiUrl.replace(/\/$/, ""),
5234
5234
  dashboardBase: process.env.POME_DASHBOARD_URL ?? DEFAULT_DASHBOARD_URL,
@@ -5246,7 +5246,7 @@ function createProgram() {
5246
5246
  program.command("doctor").description(
5247
5247
  "Check the agent\u2194twin wiring: pome.json (or pome.yaml) present + valid, the local twin boots + serves, requests routed to the twin (not a hardcoded production host), egress floor active. On failure prints one named cause (file:line where knowable) + one concrete fix and exits non-zero."
5248
5248
  ).action(async () => {
5249
- const { runDoctorChecks } = await import('../../checks-UOJUUVZB.js');
5249
+ const { runDoctorChecks } = await import('../../checks-NSHCXA6N.js');
5250
5250
  const { renderDoctorReport } = await import('../../render-ZQQ4UMNO.js');
5251
5251
  const report = await runDoctorChecks();
5252
5252
  for (const line of renderDoctorReport(report, { passNote: true })) console.error(line);
@@ -5461,7 +5461,7 @@ function createProgram() {
5461
5461
  "Path to events.jsonl. Created if missing; appended to otherwise."
5462
5462
  ).option(
5463
5463
  "--allow <hosts>",
5464
- "FDRS-635: comma-separated egress allowlist patterns (exact host or *.suffix). The floor is deny-by-default: only these hosts + loopback are tunnelled; everything else gets 403."
5464
+ "Comma-separated egress allowlist patterns (exact host or *.suffix). The floor is deny-by-default: only these hosts + loopback are tunnelled; everything else gets 403."
5465
5465
  ).option(
5466
5466
  "--egress-out <path>",
5467
5467
  "Path to egress.jsonl, the sidecar recording refused CONNECTs. Optional; the floor enforces regardless."
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pome-sh/cli",
3
- "version": "0.26.8",
3
+ "version": "0.26.9",
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",