@pome-sh/cli 0.26.8 → 0.26.10

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 (27) hide show
  1. package/dist/build-info.json +3 -3
  2. package/dist/{checks-UOJUUVZB.js → checks-3LVRPHOK.js} +4 -4
  3. package/dist/{chunk-IDNSKKEC.js → chunk-2ZGVDTJC.js} +1 -1
  4. package/dist/{chunk-OFA4E6RJ.js → chunk-6IVXTU67.js} +4 -4
  5. package/dist/{chunk-JUESW6G4.js → chunk-6KJC4BTO.js} +5 -5
  6. package/dist/{chunk-7WPD3DTO.js → chunk-ANKO3RCB.js} +7 -7
  7. package/dist/{chunk-KSX2PAEI.js → chunk-BZO3YCJS.js} +27 -27
  8. package/dist/{chunk-WEKJIGUD.js → chunk-CFXEETE3.js} +4 -4
  9. package/dist/{chunk-U6MQ5KBT.js → chunk-CXGMLUZ4.js} +1 -1
  10. package/dist/{chunk-CKN743FJ.js → chunk-EIUCTFQV.js} +11 -11
  11. package/dist/{chunk-NUXVJ4E6.js → chunk-FQGR7KDT.js} +4 -4
  12. package/dist/{chunk-2Q3P45LK.js → chunk-IZFM7W2V.js} +1 -1
  13. package/dist/{chunk-5EE7YWA3.js → chunk-KIXYRPVY.js} +2 -2
  14. package/dist/{chunk-B22TYIEM.js → chunk-QXQAVKTE.js} +6 -6
  15. package/dist/{runDemo-MZPIXV6R.js → runDemo-XO5R5QTM.js} +8 -8
  16. package/dist/{runTrialGroup-INW4QLSL.js → runTrialGroup-CLJJOO4J.js} +11 -11
  17. package/dist/{server-TPAFPKLC.js → server-TK5YBK6E.js} +2 -2
  18. package/dist/src/cli/main.js +33 -33
  19. package/dist/{src-AAF7TZMO.js → src-FXRQSKBK.js} +31 -32
  20. package/dist/{src-2M54EY2P.js → src-GWA7QVQS.js} +9 -9
  21. package/dist/{src-UEO2KIBJ.js → src-JJNS46T6.js} +55 -55
  22. package/dist/{src-4E5WAGNJ.js → src-L6F5YXSP.js} +14 -14
  23. package/dist/{src-Q4MBHYC5.js → src-Q4JNJE5S.js} +14 -14
  24. package/dist/twinHarness-6NVAKIOB.js +5 -0
  25. package/dist/{twinStart-2VP545N6.js → twinStart-WIT4UVAC.js} +4 -4
  26. package/package.json +1 -1
  27. package/dist/twinHarness-OC6VQRXO.js +0 -5
@@ -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.10",
4
+ "git_sha": "dc130eecd4b26498dee164b4ba3ad4750b4c9f39",
5
+ "build_time": "2026-08-23T18:53:01.788Z"
6
6
  }
@@ -1,8 +1,8 @@
1
- import { findManifestPath, readManifest } from './chunk-U6MQ5KBT.js';
1
+ import { findManifestPath, readManifest } from './chunk-CXGMLUZ4.js';
2
2
  import { getAvailablePort } from './chunk-XDU6TD4O.js';
3
3
  import { buildEgressAllowlist } from './chunk-CBFKZZBR.js';
4
- import './chunk-KSX2PAEI.js';
5
- import './chunk-JUESW6G4.js';
4
+ import './chunk-BZO3YCJS.js';
5
+ import './chunk-6KJC4BTO.js';
6
6
  import './chunk-SG6ZTIMT.js';
7
7
  import { serve } from '@hono/node-server';
8
8
  import { randomUUID, randomBytes } from 'node:crypto';
@@ -183,7 +183,7 @@ async function checkTwinReachable(_configDir) {
183
183
  });
184
184
  let harness;
185
185
  try {
186
- const { bootTwin } = await import('./twinHarness-OC6VQRXO.js');
186
+ const { bootTwin } = await import('./twinHarness-6NVAKIOB.js');
187
187
  harness = await bootTwin({
188
188
  twin: "github",
189
189
  seedState: void 0,
@@ -179,7 +179,7 @@ var noReactionAdded = defineCheck({
179
179
  polarity: () => "negative",
180
180
  // The reaction name, because that is the literal this predicate compares
181
181
  // against `reactions[].name` — the line below has said so since the check
182
- // shipped, and this field said `null` anyway (F-1157).
182
+ // shipped, and this field said `null` anyway.
183
183
  //
184
184
  // It is the sharpest case in the vocabulary for why that mattered. A NEGATIVE
185
185
  // criterion asserting a scanned literal is absent reads a redactor's work as
@@ -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-CXGMLUZ4.js';
2
+ import { createHostedClient, perTwinReturnedByCloud, parseTaskFile, runAgentCommand, writeRunArtifactsCore, toTwinHttpEvent, redactJsonl, uploadRunBlobs, scoreFromFinalizeResponse, scoreStatus, evaluationCounts } from './chunk-ANKO3RCB.js';
3
+ import { MOUNTED_TWINS, HostedAuthError, HostedDiscardRefusedError, HostedQuotaError, HostedOrchError, HostedTrialError, agentResponseSchema } from './chunk-BZO3YCJS.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,
@@ -18,7 +18,7 @@ var recorderEventObjectSchema = z.object({
18
18
  // the correlator (dynamic grouping: "this event landed in Step stp_xyz").
19
19
  // 90% of events use only one; both can coexist.
20
20
  //
21
- // W3 vocab (FDRS-653): `task_step_id` is canonical; `scenario_step_id` is
21
+ // Task vocab: `task_step_id` is canonical; `scenario_step_id` is
22
22
  // the 0.3.0-era spelling. BOTH stay in the schema for the tolerant-reader
23
23
  // window — this row shape is the frozen v1 trace format and its emitters
24
24
  // (twin runtimes, shipped CLIs on vendored 0.3.0) still write the old key.
@@ -34,7 +34,7 @@ var recorderEventObjectSchema = z.object({
34
34
  method: z.string().min(1),
35
35
  path: z.string(),
36
36
  request_body: z.unknown(),
37
- // F-1125 — the request headers as received, keys lowercased by the runtime.
37
+ // The request headers as received, keys lowercased by the runtime.
38
38
  //
39
39
  // Recorded WHOLESALE rather than through an allowlist. An allowlist is a
40
40
  // narrowing no downstream consumer can lift and no task author can extend,
@@ -46,14 +46,14 @@ var recorderEventObjectSchema = z.object({
46
46
  // by key. Asserted both ways in `packages/sdk/test/redaction.test.ts`: the
47
47
  // bearer must not survive, and `x-payment` must.
48
48
  //
49
- // Optional, not nullable: ABSENT means this row predates F-1125, and a
49
+ // Optional, not nullable: ABSENT means this row predates the field, and a
50
50
  // present-but-empty map would erase that distinction. A required field here
51
51
  // would be far worse than a missing one — `twinHttpEventSchema` is the only
52
52
  // gate into the cloud's tape and a row that fails it is dropped SILENTLY, so
53
53
  // every recording an older CLI wrote would arrive as an empty tape, which for
54
54
  // a negative criterion is a free pass.
55
55
  request_headers: z.record(z.string(), z.string()).optional(),
56
- // F-1125 — the twin ACTION this call invoked, when the twin declares one for
56
+ // The twin ACTION this call invoked, when the twin declares one for
57
57
  // the surface that served it. This is the field that stops a tape check from
58
58
  // reverse-engineering a tool name out of an MCP transport path.
59
59
  //
@@ -335,7 +335,7 @@ var otelSpanEventObjectSchema = z.object({
335
335
  // ── shared event-union base (mirrors `eventBaseShape` in recorder-events.ts) ─
336
336
  ts: z.string().datetime(),
337
337
  event_id: canonicalSpanIdSchema,
338
- // F-1200 — `parent_event_id` replaces `parent_id`. For THIS kind the field is
338
+ // `parent_event_id` replaces `parent_id`. For THIS kind the field is
339
339
  // fully redundant with `parent_span_id` (the invariant below pins them
340
340
  // equal), so the tolerant read needs no `parent_id` lookup at all: a row
341
341
  // written under either spelling normalizes to the same value, derived from
@@ -1,9 +1,9 @@
1
- import { criterionSchema, finalizeResponseSchema, HostedDiscardRefusedError, HostedOrchError, HostedAuthError, HostedQuotaError, submitResultResponseSchema, createEvalSessionResponseSchema, createSessionResponseSchema, sessionPublicSchema } from './chunk-KSX2PAEI.js';
2
- import { seedSchema, parseSeed, defaultSeedState as defaultSeedState$2 } from './chunk-B22TYIEM.js';
1
+ import { criterionSchema, finalizeResponseSchema, HostedDiscardRefusedError, HostedOrchError, HostedAuthError, HostedQuotaError, submitResultResponseSchema, createEvalSessionResponseSchema, createSessionResponseSchema, sessionPublicSchema } from './chunk-BZO3YCJS.js';
2
+ import { seedSchema, parseSeed, defaultSeedState as defaultSeedState$2 } from './chunk-QXQAVKTE.js';
3
3
  import { gmailSeedSchema, defaultSeedState } from './chunk-NJ246QPJ.js';
4
4
  import { linearSeedSchema, defaultSeedState as defaultSeedState$1 } from './chunk-IZIZC7ZW.js';
5
- import { isTwinName, TWIN_REGISTRY } from './chunk-CKN743FJ.js';
6
- import { toTwinHttpEventRow } from './chunk-WEKJIGUD.js';
5
+ import { isTwinName, TWIN_REGISTRY } from './chunk-EIUCTFQV.js';
6
+ import { toTwinHttpEventRow } from './chunk-CFXEETE3.js';
7
7
  import { redactEvent, redactSecrets } from './chunk-SG6ZTIMT.js';
8
8
  import { mkdir, appendFile, writeFile, readFile } from 'node:fs/promises';
9
9
  import { existsSync } from 'node:fs';
@@ -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,4 +1,4 @@
1
- import { twinIdSchema } from './chunk-JUESW6G4.js';
1
+ import { twinIdSchema } from './chunk-6KJC4BTO.js';
2
2
  import { z } from 'zod';
3
3
 
4
4
  var SLUG_RE = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
@@ -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;
@@ -970,13 +970,13 @@ function buildEventCore(c, deps, fields) {
970
970
  task_step_id: stepId,
971
971
  scenario_step_id: stepId,
972
972
  step_id: null,
973
- // FDRS-402 adapter-rich path — per-twin pin, see recorder.ts (F-682).
973
+ // adapter-rich path — per-twin pin, see recorder.ts.
974
974
  tool_call_id: deps.definition.stampToolCallId ? correlationHeader : null,
975
975
  method: c.req.method,
976
976
  path: new URL(c.req.url).pathname,
977
977
  request_body: fields.requestBody,
978
978
  request_headers: recordedRequestHeaders(c),
979
- // F-1125 — the whole reason the field exists. This surface is where the
979
+ // The whole reason the field exists. This surface is where the
980
980
  // tool name used to be reachable only by digging it out of `request_body`
981
981
  // on a `/mcp` path; a check that had to do that was reverse-engineering
982
982
  // transport, and getting it wrong false-passes a negative criterion.
@@ -1176,7 +1176,7 @@ function createRecorderHandle(options) {
1176
1176
  task_step_id: stepId,
1177
1177
  scenario_step_id: stepId,
1178
1178
  step_id: null,
1179
- // FDRS-402 adapter-rich path: only twins that pin `stampToolCallId`
1179
+ // adapter-rich path: only twins that pin `stampToolCallId`
1180
1180
  // persist the header here (github); the default tape stamps null.
1181
1181
  tool_call_id: options.stampToolCallId ? correlationHeader : null,
1182
1182
  method: c.req.method,
@@ -1478,7 +1478,7 @@ function failureInjectionMiddleware(store, options) {
1478
1478
  method,
1479
1479
  path: rawPath,
1480
1480
  request_body: requestBody,
1481
- // F-1125 — same capture policy as the engine's emit(); an injected
1481
+ // Same capture policy as the engine's emit(); an injected
1482
1482
  // fault must not be the one row a header-reading check cannot see.
1483
1483
  request_headers: recordedRequestHeaders(c),
1484
1484
  // Injection is transport-level: it intercepts a (method, path) tuple,
@@ -1,4 +1,4 @@
1
- import { HostedOrchError, manifestSchema, deriveAgentSlug, SLUG_RE } from './chunk-KSX2PAEI.js';
1
+ import { HostedOrchError, manifestSchema, deriveAgentSlug, SLUG_RE } from './chunk-BZO3YCJS.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';
@@ -39,7 +39,7 @@ var TWIN_REGISTRY = {
39
39
  defaultSeedState,
40
40
  GitHubDomain,
41
41
  openGitHubCloneDatabase
42
- } = await import('./src-UEO2KIBJ.js');
42
+ } = await import('./src-JJNS46T6.js');
43
43
  const db = openGitHubCloneDatabase();
44
44
  const domain = new GitHubDomain(db);
45
45
  domain.seed(seedState === void 0 ? defaultSeedState() : seedState);
@@ -59,9 +59,9 @@ var TWIN_REGISTRY = {
59
59
  envName: "SLACK",
60
60
  defaultPort: 3333,
61
61
  version: package_default2.version,
62
- defaultSeed: async () => (await import('./src-4E5WAGNJ.js')).defaultSeedState(),
62
+ defaultSeed: async () => (await import('./src-L6F5YXSP.js')).defaultSeedState(),
63
63
  async boot({ seedState, runId, recorder }) {
64
- const { createSlackTwinApp, openSlackTwinDatabase, SlackDomain } = await import('./src-4E5WAGNJ.js');
64
+ const { createSlackTwinApp, openSlackTwinDatabase, SlackDomain } = await import('./src-L6F5YXSP.js');
65
65
  const db = openSlackTwinDatabase(":memory:");
66
66
  const domain = new SlackDomain(db);
67
67
  domain.applySeed(seedState);
@@ -84,10 +84,10 @@ var TWIN_REGISTRY = {
84
84
  envName: "STRIPE",
85
85
  defaultPort: 3333,
86
86
  version: package_default3.version,
87
- defaultSeed: async () => (await import('./src-AAF7TZMO.js')).defaultSeed(),
87
+ defaultSeed: async () => (await import('./src-FXRQSKBK.js')).defaultSeed(),
88
88
  async boot({ seedState, runId, recorder, twinBaseUrl }) {
89
- const stripeTwin = await import('./src-AAF7TZMO.js');
90
- const { createApp } = await import('./server-TPAFPKLC.js');
89
+ const stripeTwin = await import('./src-FXRQSKBK.js');
90
+ const { createApp } = await import('./server-TK5YBK6E.js');
91
91
  const {
92
92
  applySeed: applyStripeSeed,
93
93
  createTwinStripeApp,
@@ -128,9 +128,9 @@ var TWIN_REGISTRY = {
128
128
  portEnvName: "GMAIL_TWIN_PORT",
129
129
  tokenEnvName: "POME_GMAIL_TOKEN",
130
130
  version: package_default4.version,
131
- defaultSeed: async () => (await import('./src-2M54EY2P.js')).defaultSeedState(),
131
+ defaultSeed: async () => (await import('./src-GWA7QVQS.js')).defaultSeedState(),
132
132
  async boot({ seedState, runId, recorder }) {
133
- const { createGmailTwinApp, GmailDomain, openGmailTwinDatabase, parseSeed } = await import('./src-2M54EY2P.js');
133
+ const { createGmailTwinApp, GmailDomain, openGmailTwinDatabase, parseSeed } = await import('./src-GWA7QVQS.js');
134
134
  const db = openGmailTwinDatabase(":memory:");
135
135
  const seed = parseSeed(seedState);
136
136
  const domain = new GmailDomain(db);
@@ -149,7 +149,7 @@ var TWIN_REGISTRY = {
149
149
  portEnvName: "LINEAR_TWIN_PORT",
150
150
  tokenEnvName: "POME_LINEAR_TOKEN",
151
151
  version: package_default5.version,
152
- defaultSeed: async () => (await import('./src-Q4MBHYC5.js')).defaultSeedState(),
152
+ defaultSeed: async () => (await import('./src-Q4JNJE5S.js')).defaultSeedState(),
153
153
  async boot({ seedState, runId, recorder }) {
154
154
  const {
155
155
  createLinearTwinApp,
@@ -157,7 +157,7 @@ var TWIN_REGISTRY = {
157
157
  LinearDomain,
158
158
  openLinearTwinDatabase,
159
159
  parseSeed
160
- } = await import('./src-Q4MBHYC5.js');
160
+ } = await import('./src-Q4JNJE5S.js');
161
161
  const db = openLinearTwinDatabase(":memory:");
162
162
  const seed = parseSeed(seedState);
163
163
  const domain = new LinearDomain(db);
@@ -173,7 +173,7 @@ var TWIN_REGISTRY = {
173
173
  }
174
174
  };
175
175
  async function createGitHubSmokeApp() {
176
- const { createGitHubCloneApp } = await import('./src-UEO2KIBJ.js');
176
+ const { createGitHubCloneApp } = await import('./src-JJNS46T6.js');
177
177
  return createGitHubCloneApp();
178
178
  }
179
179
  function defaultPortFor(twin, env = process.env) {
@@ -1,8 +1,8 @@
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';
4
- import { createRecorder, bootTwin } from './chunk-5EE7YWA3.js';
5
- import { eventSchema } from './chunk-JUESW6G4.js';
3
+ import { parseTaskFile, seedStateForTwin, runAgentCommand, writeRunArtifactsCore } from './chunk-ANKO3RCB.js';
4
+ import { createRecorder, bootTwin } from './chunk-KIXYRPVY.js';
5
+ import { eventSchema } from './chunk-6KJC4BTO.js';
6
6
  import { redactSecrets, redactEvent } from './chunk-SG6ZTIMT.js';
7
7
  import { serve } from '@hono/node-server';
8
8
  import { randomUUID, randomBytes } from 'node:crypto';
@@ -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.
@@ -132,7 +132,7 @@ function declareRouteInputs(spec) {
132
132
  function routeInputDeclarer(undeclared) {
133
133
  return (spec) => {
134
134
  if (spec.undeclared !== void 0) {
135
- throw new Error(`route-inputs: ${spec.method} ${spec.path} sets undeclared: '${spec.undeclared}' on its own spec, but its twin already rules '${undeclared}' for every route \u2014 the disposition is one ruling per twin (F-1372)`);
135
+ throw new Error(`route-inputs: ${spec.method} ${spec.path} sets undeclared: '${spec.undeclared}' on its own spec, but its twin already rules '${undeclared}' for every route \u2014 the disposition is one ruling per twin`);
136
136
  }
137
137
  return declareRouteInputs({ ...spec, undeclared });
138
138
  };
@@ -1,5 +1,5 @@
1
- import { TWIN_NAMES, isTwinName, TWIN_REGISTRY } from './chunk-CKN743FJ.js';
2
- import { createFileBackedRecorderStore, createRecorderStore } from './chunk-WEKJIGUD.js';
1
+ import { TWIN_NAMES, isTwinName, TWIN_REGISTRY } from './chunk-EIUCTFQV.js';
2
+ import { createFileBackedRecorderStore, createRecorderStore } from './chunk-CFXEETE3.js';
3
3
 
4
4
  // src/recorder/recorder.ts
5
5
  function createRecorder(options = {}) {
@@ -19,7 +19,7 @@ var seedSchema = z.object({
19
19
  color: z.string().default("ededed"),
20
20
  description: z.string().default("")
21
21
  })).default([]),
22
- // F-1500 — `renamed_from` is how a seed expresses a MOVE, and with it the
22
+ // `renamed_from` is how a seed expresses a MOVE, and with it the
23
23
  // `status: "renamed"` the row type has always declared and no world could
24
24
  // reach. A seeded branch is created from the default branch and inherits
25
25
  // every path, and a plain `files[]` entry can only add or overwrite, so
@@ -65,7 +65,7 @@ var seedSchema = z.object({
65
65
  });
66
66
  }
67
67
  })).default([]),
68
- // F-1421 — milestones, tags and releases are repository-level entities the
68
+ // Milestones, tags and releases are repository-level entities the
69
69
  // twin already SERVES (`GET /milestones`, `/tags`, `/releases`,
70
70
  // `/releases/latest`, `/releases/tags/:tag`) and the seed could not
71
71
  // express. Zod strips unknown keys, so a seed naming one reached the
@@ -111,7 +111,7 @@ var seedSchema = z.object({
111
111
  labels: z.array(z.string().min(1)).default([]),
112
112
  assignees: z.array(z.string().min(1)).default([]),
113
113
  // The issue's conversation timeline, served at
114
- // `GET /repos/:o/:r/issues/:n/comments` (F-1421). `author` is
114
+ // `GET /repos/:o/:r/issues/:n/comments`. `author` is
115
115
  // seeded honestly rather than taken from the write path, which
116
116
  // stamps every comment `pome-agent`: a world in which the agent
117
117
  // under test wrote every comment on the issue it is being asked to
@@ -144,9 +144,9 @@ var seedSchema = z.object({
144
144
  state: z.enum(["error", "failure", "pending", "success"]).default("success"),
145
145
  description: z.string().default("")
146
146
  })).default([]),
147
- // F-1421 — the PR's CONVERSATION timeline. Same table, same route
147
+ // The PR's CONVERSATION timeline. Same table, same route
148
148
  // and same number space as an issue's comments, because GitHub
149
- // models a pull request as an issue (F-1151). This is the third
149
+ // models a pull request as an issue. This is the third
150
150
  // thing a reader could call "a comment on the PR" and the seed
151
151
  // keeps all three apart: `reviews[].body` is the prose on a review
152
152
  // verdict, `review_comments[]` below is anchored to a file and
@@ -155,7 +155,7 @@ var seedSchema = z.object({
155
155
  body: z.string().min(1),
156
156
  author: z.string().min(1).optional()
157
157
  })).default([]),
158
- // F-1421 — inline review comments, served at
158
+ // Inline review comments, served at
159
159
  // `GET /repos/:o/:r/pulls/:n/comments`. Seeded through the domain's
160
160
  // own write path, so `path` must name a file the PR changes and
161
161
  // `line` must exist in it: a seeded review comment is one
@@ -1,18 +1,18 @@
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-FQGR7KDT.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-ANKO3RCB.js';
7
7
  import './chunk-NW7HGA2K.js';
8
- import { HostedQuotaError, HostedOrchError } from './chunk-KSX2PAEI.js';
9
- import './chunk-B22TYIEM.js';
8
+ import { HostedQuotaError, HostedOrchError } from './chunk-BZO3YCJS.js';
9
+ import './chunk-QXQAVKTE.js';
10
10
  import './chunk-NJ246QPJ.js';
11
11
  import './chunk-IZIZC7ZW.js';
12
- import { bootTwin } from './chunk-5EE7YWA3.js';
13
- import './chunk-CKN743FJ.js';
14
- import './chunk-WEKJIGUD.js';
15
- import './chunk-JUESW6G4.js';
12
+ import { bootTwin } from './chunk-KIXYRPVY.js';
13
+ import './chunk-EIUCTFQV.js';
14
+ import './chunk-CFXEETE3.js';
15
+ import './chunk-6KJC4BTO.js';
16
16
  import './chunk-SG6ZTIMT.js';
17
17
  import { readFile } from 'node:fs/promises';
18
18
  import { join } from 'node:path';
@@ -1,15 +1,15 @@
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-6IVXTU67.js';
3
+ import './chunk-CXGMLUZ4.js';
4
+ import { createHostedClient, parseTaskFile, outcomeOf } from './chunk-ANKO3RCB.js';
5
5
  import './chunk-NW7HGA2K.js';
6
- import { HostedQuotaError, HostedTrialError } from './chunk-KSX2PAEI.js';
7
- import './chunk-B22TYIEM.js';
6
+ import { HostedQuotaError, HostedTrialError } from './chunk-BZO3YCJS.js';
7
+ import './chunk-QXQAVKTE.js';
8
8
  import './chunk-NJ246QPJ.js';
9
9
  import './chunk-IZIZC7ZW.js';
10
- import './chunk-CKN743FJ.js';
11
- import './chunk-WEKJIGUD.js';
12
- import './chunk-JUESW6G4.js';
10
+ import './chunk-EIUCTFQV.js';
11
+ import './chunk-CFXEETE3.js';
12
+ import './chunk-6KJC4BTO.js';
13
13
  import './chunk-SG6ZTIMT.js';
14
14
  import { randomUUID } from 'node:crypto';
15
15
  import { readFile } from 'node:fs/promises';
@@ -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,3 +1,3 @@
1
- export { FAILURE_INJECTION_OVERRIDE_KEY, POME_RECORDER_EVENTS_PATH, PROVIDER_SHAPED_TEAM_ID, TwinBootError, TwinError, UnknownToolError, bearerAuth, createAdminGate, createApp, createFailureInjectionStore, createFileBackedRecorderStore, createRecorderHandle, createRecorderStore, created, ensureTwinAuthSecret, failureInjectionMiddleware, failureInjectionRuleSchema, formTokenResolver, isLoopbackHost, mintProviderToken, ok, queryTokenResolver, recordedRequestHeaders, requireAdminAuth, resolveAuthSecret, resolveRecorderStore, serve, setClientIp, setRecordedTool, toTwinHttpEventRow, twinBuildInfo, verifyProviderToken } from './chunk-WEKJIGUD.js';
2
- import './chunk-JUESW6G4.js';
1
+ export { FAILURE_INJECTION_OVERRIDE_KEY, POME_RECORDER_EVENTS_PATH, PROVIDER_SHAPED_TEAM_ID, TwinBootError, TwinError, UnknownToolError, bearerAuth, createAdminGate, createApp, createFailureInjectionStore, createFileBackedRecorderStore, createRecorderHandle, createRecorderStore, created, ensureTwinAuthSecret, failureInjectionMiddleware, failureInjectionRuleSchema, formTokenResolver, isLoopbackHost, mintProviderToken, ok, queryTokenResolver, recordedRequestHeaders, requireAdminAuth, resolveAuthSecret, resolveRecorderStore, serve, setClientIp, setRecordedTool, toTwinHttpEventRow, twinBuildInfo, verifyProviderToken } from './chunk-CFXEETE3.js';
2
+ import './chunk-6KJC4BTO.js';
3
3
  export { redactEvent, redactSecrets } from './chunk-SG6ZTIMT.js';