@pome-sh/cli 0.23.46 → 0.23.48

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.
package/README.md CHANGED
@@ -121,14 +121,17 @@ npm test
121
121
 
122
122
  The package publishes the `pome` binary from `dist/src/cli/main.js`.
123
123
 
124
- ### Versioning — every behavior change ships with a bump
124
+ ### Versioning — every behavior change ships with a release, and you do not write the number
125
125
 
126
- Bump `version` in `cli/package.json` and add the user-facing entry to
127
- `CHANGELOG.md` in the same PR. Merging to `main` is the release trigger:
126
+ Add the user-facing entry to `CHANGELOG.md` under an `## Unreleased (patch)` (or
127
+ `(minor)`) heading, above the newest released one, and leave `version` in
128
+ `cli/package.json` alone — a PR that moves it fails CI. Merging to `main` is the
129
+ release trigger: `.github/workflows/allocate-version.yml` allocates the number
130
+ there, rewriting that heading and the manifest in one commit, and
128
131
  `.github/workflows/release.yml` compares the local version against npm and
129
- publishes when they differ. `pome --version` reports the bumped value from a
132
+ publishes when they differ. `pome --version` reports the allocated value from a
130
133
  build-time constant, so a user can always tell whether their install carries a
131
- given fix.
134
+ given fix. See [`RELEASING.md`](../RELEASING.md).
132
135
 
133
136
  ## License
134
137
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "package": "pome-sh",
3
- "version": "0.23.46",
4
- "git_sha": "aeed48f02dd2c05dd42a4a30b777158f785b38af",
5
- "build_time": "2026-08-13T15:15:38.596Z"
3
+ "version": "0.23.48",
4
+ "git_sha": "0dd8faf57062539f921e76f510d0f2cea847a104",
5
+ "build_time": "2026-08-13T20:30:07.412Z"
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-IMJBFVAL.js');
186
+ const { bootTwin } = await import('./twinHarness-WIWX5USC.js');
187
187
  harness = await bootTwin({
188
188
  twin: "github",
189
189
  seedState: void 0,
@@ -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-J2U6LMFM.js';
2
+ import { createHostedClient, perTwinReturnedByCloud, parseTaskFile, runAgentCommand, writeRunArtifactsCore, toTwinHttpEvent, redactJsonl, uploadRunBlobs, scoreFromFinalizeResponse, scoreStatus, evaluationCounts } from './chunk-BZ3RQU56.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 { randomUUID, createHash } from 'node:crypto';
@@ -2,7 +2,7 @@ import { criterionSchema, finalizeResponseSchema, HostedDiscardRefusedError, Hos
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';
5
- import { isTwinName, TWIN_REGISTRY } from './chunk-AS477MNU.js';
5
+ import { isTwinName, TWIN_REGISTRY } from './chunk-DZU4LAYD.js';
6
6
  import { toTwinHttpEventRow } from './chunk-5EGHN6H4.js';
7
7
  import { redactEvent, redactSecrets } from './chunk-SG6ZTIMT.js';
8
8
  import { mkdir, appendFile, writeFile, readFile } from 'node:fs/promises';
@@ -1,6 +1,6 @@
1
1
  // ../packages/twin-github/package.json
2
2
  var package_default = {
3
- version: "0.10.11"};
3
+ version: "0.11.0"};
4
4
 
5
5
  // ../packages/twin-slack/package.json
6
6
  var package_default2 = {
@@ -1,4 +1,4 @@
1
- import { TWIN_NAMES, isTwinName, TWIN_REGISTRY } from './chunk-AS477MNU.js';
1
+ import { TWIN_NAMES, isTwinName, TWIN_REGISTRY } from './chunk-DZU4LAYD.js';
2
2
  import { createFileBackedRecorderStore, createRecorderStore } from './chunk-5EGHN6H4.js';
3
3
 
4
4
  // src/recorder/recorder.ts
@@ -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-J2U6LMFM.js';
4
- import { createRecorder, bootTwin } from './chunk-VVMGE677.js';
3
+ import { parseTaskFile, seedStateForTwin, runAgentCommand, writeRunArtifactsCore } from './chunk-BZ3RQU56.js';
4
+ import { createRecorder, bootTwin } from './chunk-WMHGTTRH.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-TY5365F4.js';
3
+ import { runTask, demoTaskPath, DEMO_TASK_NAME, DEMO_REPO } from './chunk-XWQK4XXD.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-J2U6LMFM.js';
6
+ import { createHostedClient, parseTaskFile, uploadRunBlobs, scoreFromFinalizeResponse, scoreStatus, outcomeOf } from './chunk-BZ3RQU56.js';
7
7
  import './chunk-NW7HGA2K.js';
8
8
  import { HostedQuotaError, HostedOrchError } from './chunk-X66JOOO7.js';
9
9
  import './chunk-B22TYIEM.js';
10
10
  import './chunk-NJ246QPJ.js';
11
11
  import './chunk-IZIZC7ZW.js';
12
- import { bootTwin } from './chunk-VVMGE677.js';
13
- import './chunk-AS477MNU.js';
12
+ import { bootTwin } from './chunk-WMHGTTRH.js';
13
+ import './chunk-DZU4LAYD.js';
14
14
  import './chunk-5EGHN6H4.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-SFB63DN6.js';
2
+ import { runTaskHosted, resolveRunAgentIdentity } from './chunk-4YGE4L6O.js';
3
3
  import './chunk-ABM3CMQB.js';
4
- import { createHostedClient, parseTaskFile, outcomeOf } from './chunk-J2U6LMFM.js';
4
+ import { createHostedClient, parseTaskFile, outcomeOf } from './chunk-BZ3RQU56.js';
5
5
  import './chunk-NW7HGA2K.js';
6
6
  import { HostedQuotaError, HostedTrialError } from './chunk-X66JOOO7.js';
7
7
  import './chunk-B22TYIEM.js';
8
8
  import './chunk-NJ246QPJ.js';
9
9
  import './chunk-IZIZC7ZW.js';
10
- import './chunk-AS477MNU.js';
10
+ import './chunk-DZU4LAYD.js';
11
11
  import './chunk-5EGHN6H4.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-SFB63DN6.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-4YGE4L6O.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-TY5365F4.js';
4
+ import { assetPath, runTask, resolvePackageRoot, DEMO_TASK_NAME, demoTaskPath } from '../../chunk-XWQK4XXD.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-J2U6LMFM.js';
7
+ import { parseTaskFile, scoreStatus, runScoreLine, readLatestRun, readMetaSummary, outcomeOf, readConfigTwins, scoreCountsSummary, markerFor, criterionMarkerLabel, twinSkipSuffix, readCodeCriteria, createHostedClient, toTwinHttpEvent, redactJsonl, scoreFromFinalizeResponse, parseGitHubSeedState, uploadRunBlobs, isPreSatisfied } from '../../chunk-BZ3RQU56.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-IZIZC7ZW.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-VVMGE677.js';
19
- import { TWIN_NAME_LIST, isTwinName, createGitHubSmokeApp } from '../../chunk-AS477MNU.js';
18
+ import '../../chunk-WMHGTTRH.js';
19
+ import { TWIN_NAME_LIST, isTwinName, createGitHubSmokeApp } from '../../chunk-DZU4LAYD.js';
20
20
  import '../../chunk-5EGHN6H4.js';
21
21
  import { isLegacyEventRow, eventSchema } from '../../chunk-VBATFCWR.js';
22
22
  import { redactEvent, redactSecrets } from '../../chunk-SG6ZTIMT.js';
@@ -2103,6 +2103,9 @@ var commitStatus = defineCheck({
2103
2103
  });
2104
2104
 
2105
2105
  // ../packages/twin-github/dist/src/check-tape.js
2106
+ function citations(events) {
2107
+ return events.map((event2) => event2.event_id).filter((id) => typeof id === "string" && id !== "");
2108
+ }
2106
2109
  var noUnsupportedEndpoint = defineCheck({
2107
2110
  id: "github.no-unsupported-endpoint",
2108
2111
  description: 'Scans the recorded call tape for any request the twin answered with fidelity "unsupported" \u2014 a route it does not implement, answered 501. It asserts nothing about whether the run SUCCEEDED, and nothing about calls that were merely rejected: a 404 or a 422 from a route the twin does implement is a semantic answer and passes this check. The tape is scoped to this twin by the engine before the check sees it, so an unsupported call to a DIFFERENT twin in a multi-twin session cannot fail it.',
@@ -2144,7 +2147,7 @@ var noUnsupportedEndpoint = defineCheck({
2144
2147
  reason: `no unsupported GitHub endpoint was called (${tape.length} call(s) inspected)`
2145
2148
  };
2146
2149
  }
2147
- const evidenceEventIds = unsupported.map((event2) => event2.event_id).filter((id) => typeof id === "string" && id !== "");
2150
+ const evidenceEventIds = citations(unsupported);
2148
2151
  const outcome = {
2149
2152
  passed: false,
2150
2153
  reason: `${unsupported.length} unsupported GitHub call(s): [${unsupported.map((event2) => event2.path ?? "?").join(", ")}]`
@@ -2195,7 +2198,7 @@ var toolNeverCalled = defineCheck({
2195
2198
  reason: `\`${args.tool}\` was never called (${tape.length} call(s) inspected)`
2196
2199
  };
2197
2200
  }
2198
- const evidenceEventIds = calls.map((event2) => event2.event_id).filter((id) => typeof id === "string" && id !== "");
2201
+ const evidenceEventIds = citations(calls);
2199
2202
  const outcome = {
2200
2203
  passed: false,
2201
2204
  reason: `${calls.length} call(s) to \`${args.tool}\`: [${calls.map((event2) => `${event2.method ?? "?"} ${event2.path ?? "?"}`).join(", ")}]`
@@ -2203,6 +2206,68 @@ var toolNeverCalled = defineCheck({
2203
2206
  return evidenceEventIds.length > 0 ? { ...outcome, evidenceEventIds } : outcome;
2204
2207
  }
2205
2208
  });
2209
+ var toolWasCalled = defineCheck({
2210
+ id: "github.tool-was-called",
2211
+ description: "Scans the recorded call tape for a request that invoked the named twin action, and passes if one did. The action is matched on the recorded `tool` field, which the runtime stamps identically for an MCP `tools/call` and for the REST route that performs the same thing \u2014 so it asserts about the ACTION, not about the transport the examinee chose. It counts an ATTEMPT, exactly as its prohibition sibling does: a call the twin rejected (bad arguments, 4xx) still called the action, so this measures what the examinee REACHED FOR and never whether it succeeded \u2014 a task that needs the outcome must assert the outcome on state. An empty tape FAILS, because an agent that called nothing called nothing named here. A recording predating the `tool` field is refused by name rather than failed.",
2212
+ template: "`{tool}` was called",
2213
+ params: { tool: toolActionName },
2214
+ substrate: "tape",
2215
+ // Nothing in the seed can satisfy it and only the examinee acting can, which
2216
+ // is the whole property: declared, never inferred from the English (F-1070).
2217
+ polarity: () => "positive",
2218
+ // The action name IS a caller-supplied literal hunted for in a substrate, so
2219
+ // it is declared — and the engine's door-side skip matters MORE here than on
2220
+ // the prohibition. A redactor that ate the name would leave this check finding
2221
+ // nothing, i.e. failing an agent that did the work.
2222
+ subject: (args) => args.tool,
2223
+ // Null, and admitted in `HONEST_NULL_MUTANTS`. Same closed-set argument as the
2224
+ // sibling: the only substitutable value is the OTHER assertable action, which
2225
+ // an agent may well have called too, and a value outside the set does not
2226
+ // re-bind at all.
2227
+ vacuityMutant: () => null,
2228
+ // A POSITIVE check, so the passing world is the one where the action WAS
2229
+ // called. The failing world is deliberately NOT an empty tape: `[]` fails
2230
+ // through "the agent did nothing", which is the reason an empty world already
2231
+ // gives, and `probeDiscrimination`'s third arm rejects a failing world that
2232
+ // fails for that reason. This one fails through the ASSERTION — the agent
2233
+ // acted, stamped an action, and it was not this one.
2234
+ discriminatingWorlds: ({ tool }) => {
2235
+ const other = TAPE_ASSERTABLE_TOOLS.find((name) => name !== tool) ?? null;
2236
+ return {
2237
+ passing: tapeWorld([
2238
+ { twin: "github", method: "GET", path: "/repos/acme/api", status: 200, tool: null, event_id: "evt_read" },
2239
+ { twin: "github", method: "POST", path: "/repos/acme/api/statuses/abc", status: 201, tool, event_id: "evt_did" }
2240
+ ]),
2241
+ failing: tapeWorld([
2242
+ { twin: "github", method: "GET", path: "/repos/acme/api", status: 200, tool: null, event_id: "evt_read" },
2243
+ { twin: "github", method: "POST", path: "/s/ses_1/mcp", status: 200, tool: other, event_id: "evt_other" }
2244
+ ])
2245
+ };
2246
+ },
2247
+ evaluate(args, { tape }) {
2248
+ if (tape === null)
2249
+ return { passed: false, reason: "tape_missing", status: "skipped" };
2250
+ if (tape.length > 0 && !tape.some((event2) => event2.tool !== void 0)) {
2251
+ return { passed: false, status: "skipped", reason: "tool_not_recorded" };
2252
+ }
2253
+ const calls = tape.filter((event2) => event2.tool === args.tool);
2254
+ if (calls.length === 0) {
2255
+ const recorded = [
2256
+ ...new Set(tape.map((event2) => event2.tool).filter((name) => typeof name === "string" && name !== ""))
2257
+ ];
2258
+ return {
2259
+ passed: false,
2260
+ reason: `\`${args.tool}\` was never called (${tape.length} call(s) inspected; actions recorded: [${recorded.join(", ")}])`
2261
+ };
2262
+ }
2263
+ const evidenceEventIds = citations(calls);
2264
+ const outcome = {
2265
+ passed: true,
2266
+ reason: `${calls.length} call(s) to \`${args.tool}\`: [${calls.map((event2) => `${event2.method ?? "?"} ${event2.path ?? "?"}`).join(", ")}]`
2267
+ };
2268
+ return evidenceEventIds.length > 0 ? { ...outcome, evidenceEventIds } : outcome;
2269
+ }
2270
+ });
2206
2271
 
2207
2272
  // ../packages/twin-github/dist/src/checks.js
2208
2273
  var GITHUB_CHECKS = [
@@ -2226,7 +2291,13 @@ var GITHUB_CHECKS = [
2226
2291
  // for first to the ones a specialised task needs — and these are the only ones
2227
2292
  // that assert about the RUN rather than the world it left behind.
2228
2293
  noUnsupportedEndpoint,
2229
- toolNeverCalled
2294
+ toolNeverCalled,
2295
+ // F-1338. Adjacent to its prohibition for the reason the two repo-scoped
2296
+ // deltas sit together above: an author reaching for one usually wants to see
2297
+ // the other, and these two are the same predicate read in opposite
2298
+ // directions off one closed set of actions. It is appended rather than
2299
+ // slotted in front so the existing listing order does not move.
2300
+ toolWasCalled
2230
2301
  ];
2231
2302
 
2232
2303
  // ../packages/twin-stripe/dist/src/check-params.js
@@ -2681,11 +2752,11 @@ var refundCount = defineCheck({
2681
2752
 
2682
2753
  // ../packages/twin-stripe/dist/src/check-tape.js
2683
2754
  var TAPE_MISSING = { passed: false, status: "skipped", reason: "tape_missing" };
2684
- function citations(events) {
2755
+ function citations2(events) {
2685
2756
  return events.map((event2) => event2.event_id).filter((id) => typeof id === "string" && id !== "");
2686
2757
  }
2687
2758
  function withCitations(outcome, events) {
2688
- const ids = citations(events);
2759
+ const ids = citations2(events);
2689
2760
  return ids.length > 0 ? { ...outcome, evidenceEventIds: ids } : outcome;
2690
2761
  }
2691
2762
  function recordedErrorType(body) {
@@ -4580,7 +4651,7 @@ var DEFAULT_AGENT_COMMAND = `node ${DEFAULT_AGENT_FILE}`;
4580
4651
  var MANIFEST_SCHEMA_URL = "https://pome.sh/schemas/v1/pome.json";
4581
4652
  var MAX_UNREADABLE_PATHS_SHOWN = 5;
4582
4653
  function readPackageVersion() {
4583
- if ("0.23.46".length > 0) return "0.23.46";
4654
+ if ("0.23.48".length > 0) return "0.23.48";
4584
4655
  try {
4585
4656
  const here = dirname(fileURLToPath(import.meta.url));
4586
4657
  const candidates = [
@@ -5035,7 +5106,7 @@ function createProgram() {
5035
5106
  return;
5036
5107
  }
5037
5108
  {
5038
- const { runDoctorChecks } = await import('../../checks-T3EWJXDT.js');
5109
+ const { runDoctorChecks } = await import('../../checks-STMFOZA5.js');
5039
5110
  const { renderDoctorReport } = await import('../../render-ZQQ4UMNO.js');
5040
5111
  const doctorReport = await runDoctorChecks({ mode: useLocal ? "full" : "hosted" });
5041
5112
  if (!doctorReport.ok) {
@@ -5073,7 +5144,7 @@ function createProgram() {
5073
5144
  taskForRuns.config.runs
5074
5145
  );
5075
5146
  if (k > 1) {
5076
- const { runTrialGroup } = await import('../../runTrialGroup-JDTUSWGS.js');
5147
+ const { runTrialGroup } = await import('../../runTrialGroup-SG4QQVTN.js');
5077
5148
  const fileForRerun = relative(process.cwd(), file);
5078
5149
  const rerunCommand = defaultTask ? options.trials !== void 0 ? `pome run -n ${k}` : "pome run" : `pome run ${fileForRerun && !fileForRerun.startsWith("..") ? fileForRerun : file} -n ${k}`;
5079
5150
  const groupResult = await runTrialGroup({
@@ -5167,7 +5238,7 @@ function createProgram() {
5167
5238
  process.exitCode = 5;
5168
5239
  return;
5169
5240
  }
5170
- const { runDemo } = await import('../../runDemo-JW6EGT66.js');
5241
+ const { runDemo } = await import('../../runDemo-63ZG7QKS.js');
5171
5242
  const result = await runDemo({
5172
5243
  apiBase: opts.apiUrl.replace(/\/$/, ""),
5173
5244
  dashboardBase: process.env.POME_DASHBOARD_URL ?? DEFAULT_DASHBOARD_URL,
@@ -5185,7 +5256,7 @@ function createProgram() {
5185
5256
  program.command("doctor").description(
5186
5257
  "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."
5187
5258
  ).action(async () => {
5188
- const { runDoctorChecks } = await import('../../checks-T3EWJXDT.js');
5259
+ const { runDoctorChecks } = await import('../../checks-STMFOZA5.js');
5189
5260
  const { renderDoctorReport } = await import('../../render-ZQQ4UMNO.js');
5190
5261
  const report = await runDoctorChecks();
5191
5262
  for (const line of renderDoctorReport(report, { passNote: true })) console.error(line);
@@ -5361,7 +5432,7 @@ function createProgram() {
5361
5432
  ).description(
5362
5433
  "Start a standalone twin as a long-lived foreground server (Ctrl-C to stop)"
5363
5434
  ).action(async (name, options) => {
5364
- const { runTwinStartCommand } = await import('../../twinStart-T7SKWGEL.js');
5435
+ const { runTwinStartCommand } = await import('../../twinStart-Q4EJ4U2C.js');
5365
5436
  await runTwinStartCommand(name, options);
5366
5437
  });
5367
5438
  twin.command("reset").argument("[name]", "Twin name (default: github)", "github").description("Reset standalone twin state").action(async (name) => {
@@ -0,0 +1,5 @@
1
+ export { UnsupportedTwinError, bootTwin } from './chunk-WMHGTTRH.js';
2
+ export { STRIPE_LOCAL_ACCOUNT_ID } from './chunk-DZU4LAYD.js';
3
+ import './chunk-5EGHN6H4.js';
4
+ import './chunk-VBATFCWR.js';
5
+ import './chunk-SG6ZTIMT.js';
@@ -1,5 +1,5 @@
1
- import { bootTwin } from './chunk-VVMGE677.js';
2
- import { isTwinName, TWIN_NAMES, defaultPortFor, TWIN_REGISTRY } from './chunk-AS477MNU.js';
1
+ import { bootTwin } from './chunk-WMHGTTRH.js';
2
+ import { isTwinName, TWIN_NAMES, defaultPortFor, TWIN_REGISTRY } from './chunk-DZU4LAYD.js';
3
3
  import './chunk-5EGHN6H4.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.46",
3
+ "version": "0.23.48",
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-VVMGE677.js';
2
- export { STRIPE_LOCAL_ACCOUNT_ID } from './chunk-AS477MNU.js';
3
- import './chunk-5EGHN6H4.js';
4
- import './chunk-VBATFCWR.js';
5
- import './chunk-SG6ZTIMT.js';