@pome-sh/cli 0.23.23 → 0.23.24

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.23",
4
- "git_sha": "2c62979022a91451befdac6f2aa1253adaff0a26",
5
- "build_time": "2026-08-12T17:24:42.358Z"
3
+ "version": "0.23.24",
4
+ "git_sha": "49e8e785730ed42e124f5f253681804da21dd4a3",
5
+ "build_time": "2026-08-12T18:12:45.426Z"
6
6
  }
@@ -183,7 +183,7 @@ async function checkTwinReachable(_configDir) {
183
183
  });
184
184
  let harness;
185
185
  try {
186
- const { bootTwin } = await import('./twinHarness-DTJ4CPJL.js');
186
+ const { bootTwin } = await import('./twinHarness-WVKOQ7UP.js');
187
187
  harness = await bootTwin({
188
188
  twin: "github",
189
189
  seedState: void 0,
@@ -1,6 +1,6 @@
1
1
  // ../packages/twin-github/package.json
2
2
  var package_default = {
3
- version: "0.10.7"};
3
+ version: "0.10.8"};
4
4
 
5
5
  // ../packages/twin-slack/package.json
6
6
  var package_default2 = {
@@ -39,7 +39,7 @@ var TWIN_REGISTRY = {
39
39
  defaultSeedState,
40
40
  GitHubDomain,
41
41
  openGitHubCloneDatabase
42
- } = await import('./src-X43MUN4B.js');
42
+ } = await import('./src-VQOLQJJT.js');
43
43
  const db = openGitHubCloneDatabase();
44
44
  const domain = new GitHubDomain(db);
45
45
  domain.seed(seedState === void 0 ? defaultSeedState() : seedState);
@@ -173,7 +173,7 @@ var TWIN_REGISTRY = {
173
173
  }
174
174
  };
175
175
  async function createGitHubSmokeApp() {
176
- const { createGitHubCloneApp } = await import('./src-X43MUN4B.js');
176
+ const { createGitHubCloneApp } = await import('./src-VQOLQJJT.js');
177
177
  return createGitHubCloneApp();
178
178
  }
179
179
  function defaultPortFor(twin, env = process.env) {
@@ -1,4 +1,4 @@
1
- import { TWIN_NAMES, isTwinName, TWIN_REGISTRY } from './chunk-XFPCVBUX.js';
1
+ import { TWIN_NAMES, isTwinName, TWIN_REGISTRY } from './chunk-4VVQMRWP.js';
2
2
  import { createFileBackedRecorderStore, createRecorderStore } from './chunk-OW7VVW6X.js';
3
3
 
4
4
  // src/recorder/recorder.ts
@@ -1,5 +1,5 @@
1
1
  import { readManifest, normalizeManifestTwins } from './chunk-ABM3CMQB.js';
2
- import { createHostedClient, perTwinReturnedByCloud, parseTaskFile, runAgentCommand, writeRunArtifactsCore, toTwinHttpEvent, redactJsonl, uploadRunBlobs, scoreFromFinalizeResponse, scoreStatus, evaluationCounts } from './chunk-63BAZ37N.js';
2
+ import { createHostedClient, perTwinReturnedByCloud, parseTaskFile, runAgentCommand, writeRunArtifactsCore, toTwinHttpEvent, redactJsonl, uploadRunBlobs, scoreFromFinalizeResponse, scoreStatus, evaluationCounts } from './chunk-VBLY7LYM.js';
3
3
  import { MOUNTED_TWINS, HostedAuthError, HostedDiscardRefusedError, HostedQuotaError, HostedOrchError, HostedTrialError, agentResponseSchema } from './chunk-X66JOOO7.js';
4
4
  import { redactSecrets, redactEvent } from './chunk-SG6ZTIMT.js';
5
5
  import { existsSync } from 'node:fs';
@@ -2,7 +2,7 @@ import { criterionSchema, finalizeResponseSchema, HostedDiscardRefusedError, Hos
2
2
  import { seedSchema, parseSeed, defaultSeedState as defaultSeedState$2 } from './chunk-KIUIKAVU.js';
3
3
  import { gmailSeedSchema, defaultSeedState } from './chunk-NJ246QPJ.js';
4
4
  import { linearSeedSchema, defaultSeedState as defaultSeedState$1 } from './chunk-ZKID2HS3.js';
5
- import { isTwinName, TWIN_REGISTRY } from './chunk-XFPCVBUX.js';
5
+ import { isTwinName, TWIN_REGISTRY } from './chunk-4VVQMRWP.js';
6
6
  import { toTwinHttpEventRow } from './chunk-OW7VVW6X.js';
7
7
  import { redactEvent, redactSecrets } from './chunk-SG6ZTIMT.js';
8
8
  import { mkdir, appendFile, writeFile, readFile } from 'node:fs/promises';
@@ -1,7 +1,7 @@
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-63BAZ37N.js';
4
- import { createRecorder, bootTwin } from './chunk-66WODSX4.js';
3
+ import { parseTaskFile, seedStateForTwin, runAgentCommand, writeRunArtifactsCore } from './chunk-VBLY7LYM.js';
4
+ import { createRecorder, bootTwin } from './chunk-DG2VDEQE.js';
5
5
  import { eventSchema } from './chunk-VBATFCWR.js';
6
6
  import { redactSecrets, redactEvent } from './chunk-SG6ZTIMT.js';
7
7
  import { serve } from '@hono/node-server';
@@ -1,16 +1,16 @@
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-G3DO5MZM.js';
3
+ import { runTask, demoTaskPath, DEMO_TASK_NAME, DEMO_REPO } from './chunk-ZUQYEPY4.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-63BAZ37N.js';
6
+ import { createHostedClient, parseTaskFile, uploadRunBlobs, scoreFromFinalizeResponse, scoreStatus, outcomeOf } from './chunk-VBLY7LYM.js';
7
7
  import './chunk-NW7HGA2K.js';
8
8
  import { HostedQuotaError, HostedOrchError } from './chunk-X66JOOO7.js';
9
9
  import './chunk-KIUIKAVU.js';
10
10
  import './chunk-NJ246QPJ.js';
11
11
  import './chunk-ZKID2HS3.js';
12
- import { bootTwin } from './chunk-66WODSX4.js';
13
- import './chunk-XFPCVBUX.js';
12
+ import { bootTwin } from './chunk-DG2VDEQE.js';
13
+ import './chunk-4VVQMRWP.js';
14
14
  import './chunk-OW7VVW6X.js';
15
15
  import './chunk-VBATFCWR.js';
16
16
  import './chunk-SG6ZTIMT.js';
@@ -1,13 +1,13 @@
1
1
  import { newGroupId, criterionPhrase } from './chunk-RGZBC7NF.js';
2
- import { runTaskHosted, resolveRunAgentIdentity } from './chunk-JFODF7QI.js';
2
+ import { runTaskHosted, resolveRunAgentIdentity } from './chunk-DINCNFAQ.js';
3
3
  import './chunk-ABM3CMQB.js';
4
- import { createHostedClient, parseTaskFile, outcomeOf } from './chunk-63BAZ37N.js';
4
+ import { createHostedClient, parseTaskFile, outcomeOf } from './chunk-VBLY7LYM.js';
5
5
  import './chunk-NW7HGA2K.js';
6
6
  import { HostedQuotaError, HostedTrialError } from './chunk-X66JOOO7.js';
7
7
  import './chunk-KIUIKAVU.js';
8
8
  import './chunk-NJ246QPJ.js';
9
9
  import './chunk-ZKID2HS3.js';
10
- import './chunk-XFPCVBUX.js';
10
+ import './chunk-4VVQMRWP.js';
11
11
  import './chunk-OW7VVW6X.js';
12
12
  import './chunk-VBATFCWR.js';
13
13
  import './chunk-SG6ZTIMT.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, VERDICT_ARTIFACT_VERSION, persistCredentialsAfterLogin, DEFAULT_DOCS_SITE_ORIGIN, resolveSeams, resolveCachedAgentId, readLinkCache, postAgentResolver, writeLinkCache, ensurePomeGitignored } from '../../chunk-JFODF7QI.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-DINCNFAQ.js';
3
3
  import { readManifest, writeManifest, MANIFEST_JSON, readRequiredManifest, normalizeManifestTwins } from '../../chunk-ABM3CMQB.js';
4
- import { assetPath, runTask, resolvePackageRoot, DEMO_TASK_NAME, demoTaskPath } from '../../chunk-G3DO5MZM.js';
4
+ import { assetPath, runTask, resolvePackageRoot, DEMO_TASK_NAME, demoTaskPath } from '../../chunk-ZUQYEPY4.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-63BAZ37N.js';
7
+ import { parseTaskFile, scoreStatus, runScoreLine, readLatestRun, readMetaSummary, outcomeOf, readConfigTwins, scoreCountsSummary, markerFor, criterionMarkerLabel, twinSkipSuffix, readCodeCriteria, createHostedClient, toTwinHttpEvent, redactJsonl, scoreFromFinalizeResponse, parseGitHubSeedState, uploadRunBlobs, isPreSatisfied } from '../../chunk-VBLY7LYM.js';
8
8
  import '../../chunk-NW7HGA2K.js';
9
9
  import { MOUNTED_TWINS, deriveAgentSlug, exitCodeFor, HostedUsageError, HostedOrchError, HostedAuthError, HostedQuotaError } from '../../chunk-X66JOOO7.js';
10
10
  import { TAPE_ASSERTABLE_TOOLS } from '../../chunk-FKZZWWYC.js';
@@ -15,8 +15,8 @@ import '../../chunk-NJ246QPJ.js';
15
15
  import { LINEAR_CHECKS } from '../../chunk-XBT6ZLBG.js';
16
16
  import '../../chunk-ZKID2HS3.js';
17
17
  import { oneOf, defineCheck, repoRef, VACUITY_SENTINEL_NUMBER, childStatePath, VACUITY_SENTINEL, statePath, templateSlots, renderCheck, checksDigest, checkPattern, checkNearMissPattern } from '../../chunk-JWJYNAWI.js';
18
- import '../../chunk-66WODSX4.js';
19
- import { TWIN_NAME_LIST, isTwinName, createGitHubSmokeApp } from '../../chunk-XFPCVBUX.js';
18
+ import '../../chunk-DG2VDEQE.js';
19
+ import { TWIN_NAME_LIST, isTwinName, createGitHubSmokeApp } from '../../chunk-4VVQMRWP.js';
20
20
  import '../../chunk-OW7VVW6X.js';
21
21
  import { isLegacyEventRow, eventSchema } from '../../chunk-VBATFCWR.js';
22
22
  import { redactEvent, redactSecrets } from '../../chunk-SG6ZTIMT.js';
@@ -850,7 +850,7 @@ async function throwForStatus(res) {
850
850
 
851
851
  // src/task/seed-verifier.ts
852
852
  async function verifySeedWithTwin(seed) {
853
- const { GitHubDomain, openGitHubCloneDatabase } = await import('../../src-X43MUN4B.js');
853
+ const { GitHubDomain, openGitHubCloneDatabase } = await import('../../src-VQOLQJJT.js');
854
854
  const db = openGitHubCloneDatabase(":memory:");
855
855
  try {
856
856
  new GitHubDomain(db).seed(seed);
@@ -4541,7 +4541,7 @@ var DEFAULT_AGENT_COMMAND = `node ${DEFAULT_AGENT_FILE}`;
4541
4541
  var MANIFEST_SCHEMA_URL = "https://pome.sh/schemas/v1/pome.json";
4542
4542
  var MAX_UNREADABLE_PATHS_SHOWN = 5;
4543
4543
  function readPackageVersion() {
4544
- if ("0.23.23".length > 0) return "0.23.23";
4544
+ if ("0.23.24".length > 0) return "0.23.24";
4545
4545
  try {
4546
4546
  const here = dirname(fileURLToPath(import.meta.url));
4547
4547
  const candidates = [
@@ -4996,7 +4996,7 @@ function createProgram() {
4996
4996
  return;
4997
4997
  }
4998
4998
  {
4999
- const { runDoctorChecks } = await import('../../checks-YQFN75H4.js');
4999
+ const { runDoctorChecks } = await import('../../checks-UINTOJ2L.js');
5000
5000
  const { renderDoctorReport } = await import('../../render-ZQQ4UMNO.js');
5001
5001
  const doctorReport = await runDoctorChecks({ mode: useLocal ? "full" : "hosted" });
5002
5002
  if (!doctorReport.ok) {
@@ -5034,7 +5034,7 @@ function createProgram() {
5034
5034
  taskForRuns.config.runs
5035
5035
  );
5036
5036
  if (k > 1) {
5037
- const { runTrialGroup } = await import('../../runTrialGroup-ZII4WC4H.js');
5037
+ const { runTrialGroup } = await import('../../runTrialGroup-CL4EJZD2.js');
5038
5038
  const fileForRerun = relative(process.cwd(), file);
5039
5039
  const rerunCommand = defaultTask ? options.trials !== void 0 ? `pome run -n ${k}` : "pome run" : `pome run ${fileForRerun && !fileForRerun.startsWith("..") ? fileForRerun : file} -n ${k}`;
5040
5040
  const groupResult = await runTrialGroup({
@@ -5128,7 +5128,7 @@ function createProgram() {
5128
5128
  process.exitCode = 5;
5129
5129
  return;
5130
5130
  }
5131
- const { runDemo } = await import('../../runDemo-USSQMPPB.js');
5131
+ const { runDemo } = await import('../../runDemo-5Z7PIYTZ.js');
5132
5132
  const result = await runDemo({
5133
5133
  apiBase: opts.apiUrl.replace(/\/$/, ""),
5134
5134
  dashboardBase: process.env.POME_DASHBOARD_URL ?? DEFAULT_DASHBOARD_URL,
@@ -5146,7 +5146,7 @@ function createProgram() {
5146
5146
  program.command("doctor").description(
5147
5147
  "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."
5148
5148
  ).action(async () => {
5149
- const { runDoctorChecks } = await import('../../checks-YQFN75H4.js');
5149
+ const { runDoctorChecks } = await import('../../checks-UINTOJ2L.js');
5150
5150
  const { renderDoctorReport } = await import('../../render-ZQQ4UMNO.js');
5151
5151
  const report = await runDoctorChecks();
5152
5152
  for (const line of renderDoctorReport(report, { passNote: true })) console.error(line);
@@ -5322,7 +5322,7 @@ function createProgram() {
5322
5322
  ).description(
5323
5323
  "Start a standalone twin as a long-lived foreground server (Ctrl-C to stop)"
5324
5324
  ).action(async (name, options) => {
5325
- const { runTwinStartCommand } = await import('../../twinStart-Q6BQGQX4.js');
5325
+ const { runTwinStartCommand } = await import('../../twinStart-MVO22G7C.js');
5326
5326
  await runTwinStartCommand(name, options);
5327
5327
  });
5328
5328
  twin.command("reset").argument("[name]", "Twin name (default: github)", "github").description("Reset standalone twin state").action(async (name) => {
@@ -134,10 +134,11 @@ var GITHUB_ROUTES = {
134
134
  // parameter: base64 is the only encoding this surface has. Undeclared
135
135
  // now, so github's measured disposition (`ignore`) discards it.
136
136
  //
137
- // ⚠️ This closes the DECLARED drift, not the behavioural one. The twin
138
- // still treats `content` as plain text rather than base64 — recorded as
139
- // divergence 24, and unified across both doors in the follow-up ticket
140
- // that owns the 47-call-site migration.
137
+ // F-1460 closed the behavioural half too: `routes.ts` base64-decodes this
138
+ // field via `rest-content.ts`, and invalid base64 gets GitHub's own 422.
139
+ // ⚠️ ON THIS DOOR ONLY the MCP write tools take plain text, because
140
+ // GitHub's MCP server does. Divergence 24 is retired; see FIDELITY.md
141
+ // "The two doors take `content` differently" before touching either.
141
142
  }
142
143
  }),
143
144
  listCommits: declareInputs({
@@ -695,16 +696,18 @@ Available methods:
695
696
  var TwinError = class extends Error {
696
697
  status;
697
698
  errors;
698
- constructor(message, status, errors) {
699
+ documentationUrl;
700
+ constructor(message, status, errors, documentationUrl) {
699
701
  super(message);
700
702
  this.status = status;
701
703
  this.errors = errors;
704
+ this.documentationUrl = documentationUrl;
702
705
  }
703
706
  };
704
- function githubError(message, status, errors) {
707
+ function githubError(message, status, errors, documentationUrl) {
705
708
  return {
706
709
  message,
707
- documentation_url: "https://docs.github.com/rest",
710
+ documentation_url: documentationUrl ?? "https://docs.github.com/rest",
708
711
  status,
709
712
  ...errors ? { errors } : {}
710
713
  };
@@ -790,7 +793,13 @@ var toolArgumentSchemas = [
790
793
  },
791
794
  {
792
795
  name: "create_or_update_file",
793
- schema: z.object({ ...ownerRepo, path: z.string().min(1), message: z.string().min(1), content: z.string(), branch: z.string().min(1), sha: z.string().optional(), encoding: z.enum(["utf-8", "base64"]).optional() })
796
+ // F-1460 no `encoding`. GitHub's MCP server declares none and needs none:
797
+ // it takes `content` as PLAIN TEXT and base64-encodes it itself before
798
+ // calling the REST API, which its own tool description says outright. The
799
+ // switch survived F-1389 because that ticket removed it from the REST
800
+ // DECLARATION, and the served table (a capture) and these validators are two
801
+ // different objects. Undeclared now, so `ignore` discards it if sent.
802
+ schema: z.object({ ...ownerRepo, path: z.string().min(1), message: z.string().min(1), content: z.string(), branch: z.string().min(1), sha: z.string().optional() })
794
803
  },
795
804
  {
796
805
  name: "create_branch",
@@ -798,7 +807,9 @@ var toolArgumentSchemas = [
798
807
  },
799
808
  {
800
809
  name: "push_files",
801
- schema: z.object({ ...ownerRepo, branch: z.string().optional(), message: z.string().min(1), files: z.array(z.object({ path: z.string().min(1), content: z.string(), encoding: z.enum(["utf-8", "base64"]).optional() })).min(1) })
810
+ // Same as `create_or_update_file` above: GitHub's `push_files` hands each
811
+ // file's `content` straight to a Git tree entry, which takes plain UTF-8.
812
+ schema: z.object({ ...ownerRepo, branch: z.string().optional(), message: z.string().min(1), files: z.array(z.object({ path: z.string().min(1), content: z.string() })).min(1) })
802
813
  },
803
814
  // GitHub's consolidated issue pair (F-1376). `issue_read` and `issue_write`
804
815
  // replace the seven single-purpose tools this twin used to serve — `get_issue`,
@@ -2554,8 +2565,7 @@ function createOrUpdateFile(domain, input, options = {}, onDelta) {
2554
2565
  validationFailed("sha", "missing", path);
2555
2566
  if (existing && input.sha !== existing.sha)
2556
2567
  validationFailed("sha", "invalid", input.sha);
2557
- const content = input.encoding === "base64" ? Buffer.from(input.content, "base64").toString("utf8") : input.content;
2558
- const commit = domain.commitFiles(repo, branch, input.message, [{ path, content }], options.actor ?? "pome-agent");
2568
+ const commit = domain.commitFiles(repo, branch, input.message, [{ path, content: input.content }], options.actor ?? "pome-agent");
2559
2569
  const file = domain.getFile(repo.id, branch, path);
2560
2570
  afterFile = file;
2561
2571
  return { content: contentFileJson(file, repo), commit: commitJson(commit, repo) };
@@ -2576,7 +2586,7 @@ function pushFiles(domain, input, options = {}, onDelta) {
2576
2586
  if (paths.has(path))
2577
2587
  validationFailed("files.path", "duplicate", path);
2578
2588
  paths.add(path);
2579
- return { path, content: file.encoding === "base64" ? Buffer.from(file.content, "base64").toString("utf8") : file.content };
2589
+ return { path, content: file.content };
2580
2590
  });
2581
2591
  const beforeFiles = files.map((file) => {
2582
2592
  const existing = domain.getFile(repo.id, branch, file.path);
@@ -4489,6 +4499,20 @@ var GitHubDomain = class {
4489
4499
  }
4490
4500
  };
4491
4501
 
4502
+ // ../packages/twin-github/dist/src/rest-content.js
4503
+ var BASE64 = /^[A-Za-z0-9+/]*={0,2}$/;
4504
+ function invalidBase64() {
4505
+ throw new TwinError("content is not valid Base64", 422, void 0, "https://docs.github.com/rest/repos/contents#create-or-update-file-contents");
4506
+ }
4507
+ function decodeRestContent(content) {
4508
+ const stripped = content.replace(/\s+/g, "");
4509
+ if (!BASE64.test(stripped))
4510
+ invalidBase64();
4511
+ if (stripped.length % 4 !== 0)
4512
+ invalidBase64();
4513
+ return Buffer.from(stripped, "base64");
4514
+ }
4515
+
4492
4516
  // ../packages/twin-github/dist/src/routes.js
4493
4517
  function captureDelta(fn) {
4494
4518
  let delta = null;
@@ -4531,7 +4555,8 @@ function registerGitHubRoutes(session, { domain, recorder }) {
4531
4555
  route(GITHUB_ROUTES.getRepositoryRootContents, ({ path, query }) => ok(domain.getFileContents({ owner: path.owner, repo: path.repo, path: "", ref: query.ref })));
4532
4556
  route(GITHUB_ROUTES.getFileContents, ({ path, query }) => ok(domain.getFileContents({ ...path, ref: query.ref })));
4533
4557
  route(GITHUB_ROUTES.createOrUpdateFile, ({ path, body }, c) => {
4534
- const { value, delta } = captureDelta((onDelta) => domain.createOrUpdateFile({ ...path, ...body }, { actor: sessionLogin(c) }, onDelta));
4558
+ const content = decodeRestContent(body.content).toString("utf8");
4559
+ const { value, delta } = captureDelta((onDelta) => domain.createOrUpdateFile({ ...path, ...body, content }, { actor: sessionLogin(c) }, onDelta));
4535
4560
  const status = delta !== null && delta.before === null ? 201 : 200;
4536
4561
  return { status, body: value, mutation: true, delta };
4537
4562
  });
@@ -4784,7 +4809,10 @@ function githubErrorEnvelope(err) {
4784
4809
  };
4785
4810
  }
4786
4811
  if (err instanceof TwinError) {
4787
- return { status: err.status, body: githubError(err.message, err.status, err.errors) };
4812
+ return {
4813
+ status: err.status,
4814
+ body: githubError(err.message, err.status, err.errors, err.documentationUrl)
4815
+ };
4788
4816
  }
4789
4817
  const issues = zodIssues(err);
4790
4818
  if (issues) {
@@ -0,0 +1,5 @@
1
+ export { UnsupportedTwinError, bootTwin } from './chunk-DG2VDEQE.js';
2
+ export { STRIPE_LOCAL_ACCOUNT_ID } from './chunk-4VVQMRWP.js';
3
+ import './chunk-OW7VVW6X.js';
4
+ import './chunk-VBATFCWR.js';
5
+ import './chunk-SG6ZTIMT.js';
@@ -1,5 +1,5 @@
1
- import { bootTwin } from './chunk-66WODSX4.js';
2
- import { isTwinName, TWIN_NAMES, defaultPortFor, TWIN_REGISTRY } from './chunk-XFPCVBUX.js';
1
+ import { bootTwin } from './chunk-DG2VDEQE.js';
2
+ import { isTwinName, TWIN_NAMES, defaultPortFor, TWIN_REGISTRY } from './chunk-4VVQMRWP.js';
3
3
  import './chunk-OW7VVW6X.js';
4
4
  import './chunk-VBATFCWR.js';
5
5
  import './chunk-SG6ZTIMT.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pome-sh/cli",
3
- "version": "0.23.23",
3
+ "version": "0.23.24",
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",
@@ -1,5 +0,0 @@
1
- export { UnsupportedTwinError, bootTwin } from './chunk-66WODSX4.js';
2
- export { STRIPE_LOCAL_ACCOUNT_ID } from './chunk-XFPCVBUX.js';
3
- import './chunk-OW7VVW6X.js';
4
- import './chunk-VBATFCWR.js';
5
- import './chunk-SG6ZTIMT.js';