@pome-sh/cli 0.29.1 → 0.31.0

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.29.1",
4
- "git_sha": "c89dc0c40e2f591a46a0802285b043acf5b084bf",
5
- "build_time": "2026-08-26T22:31:38.093Z"
3
+ "version": "0.31.0",
4
+ "git_sha": "0c525a5023e8941e14fb2420e222fc90baea0140",
5
+ "build_time": "2026-08-27T11:38:56.203Z"
6
6
  }
@@ -1,6 +1,6 @@
1
- import { findManifestPath, readManifest } from './chunk-XWGZ5C7Y.js';
1
+ import { findManifestPath, readManifest } from './chunk-2V5A7NWP.js';
2
2
  import { getAvailablePort } from './chunk-XDU6TD4O.js';
3
- import './chunk-OTFDQT3H.js';
3
+ import './chunk-72CG3JNL.js';
4
4
  import { buildEgressAllowlist } from './chunk-CBFKZZBR.js';
5
5
  import './chunk-6KJC4BTO.js';
6
6
  import './chunk-SG6ZTIMT.js';
@@ -183,7 +183,7 @@ async function checkTwinReachable(_configDir) {
183
183
  });
184
184
  let harness;
185
185
  try {
186
- const { bootTwin } = await import('./twinHarness-CUVRO5IV.js');
186
+ const { bootTwin } = await import('./twinHarness-TSAQYDC5.js');
187
187
  harness = await bootTwin({
188
188
  twin: "github",
189
189
  seedState: void 0,
@@ -253,7 +253,7 @@ async function checkRouting(configDir) {
253
253
  cause: `no POME_*_REST_URL / POME_*_MCP_URL read and no @pome-sh adapter found in the ${scan.filesScanned} source file(s) under ${relative(process.cwd(), configDir) || "."} \u2014 the agent has no path to the twin.`,
254
254
  fix: [
255
255
  'wire the adapter: import { withPome } from "@pome-sh/adapter-claude-sdk"; call withPome() at startup;',
256
- "read the twin base URL from POME_GITHUB_REST_URL (injected by the runner) \u2014 or let your own coding agent wire it with the Gen-2 skills (`npx skills add pome-sh/digital-twins --skill '*'`)."
256
+ "read the twin base URL from POME_GITHUB_REST_URL (injected by the runner) \u2014 or let your own coding agent wire it with the coach skills (`npx skills add pome-sh/digital-twins --skill '*'`)."
257
257
  ].join("\n")
258
258
  };
259
259
  }
@@ -1,4 +1,4 @@
1
- import { HostedOrchError, manifestSchema, deriveAgentSlug, SLUG_RE } from './chunk-OTFDQT3H.js';
1
+ import { HostedOrchError, manifestSchema, deriveAgentSlug, SLUG_RE } from './chunk-72CG3JNL.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';
@@ -1286,6 +1286,7 @@ function exitCodeFor(err) {
1286
1286
  if (err instanceof HostedAuthError) return 3;
1287
1287
  if (err instanceof HostedQuotaError) return 4;
1288
1288
  if (err instanceof HostedUsageError) return 5;
1289
+ if (err instanceof HostedDiscardRefusedError) return 5;
1289
1290
  return 2;
1290
1291
  }
1291
1292
 
@@ -1,7 +1,7 @@
1
1
  import { gmailSeedSchema, defaultSeedState } from './chunk-3T5XN64P.js';
2
2
  import { linearSeedSchema, defaultSeedState as defaultSeedState$1 } from './chunk-Q5NBPR57.js';
3
- import { isTwinName, TWIN_REGISTRY } from './chunk-SRG22BIH.js';
4
- import { criterionSchema, normalizeTaskConfigKeys, finalizeResponseSchema, HostedDiscardRefusedError, HostedOrchError, HostedAuthError, HostedQuotaError, submitResultResponseSchema, createEvalSessionResponseSchema, createSessionResponseSchema, sessionPublicSchema } from './chunk-OTFDQT3H.js';
3
+ import { isTwinName, TWIN_REGISTRY } from './chunk-SDBBGCE7.js';
4
+ import { criterionSchema, normalizeTaskConfigKeys, finalizeResponseSchema, HostedDiscardRefusedError, HostedOrchError, HostedAuthError, HostedQuotaError, submitResultResponseSchema, createEvalSessionResponseSchema, createSessionResponseSchema, sessionPublicSchema } from './chunk-72CG3JNL.js';
5
5
  import { seedSchema, parseSeed, defaultSeedState as defaultSeedState$2 } from './chunk-HJX25USP.js';
6
6
  import { toTwinHttpEventRow } from './chunk-E665XWYU.js';
7
7
  import { redactEvent, redactSecrets } from './chunk-SG6ZTIMT.js';
@@ -421,7 +421,6 @@ function splitSections(markdown) {
421
421
  return sections;
422
422
  }
423
423
  var CRITERION_LINE_RE = /^[-*]\s+\[(code|model)(?::([a-z][a-z0-9_-]*))?(\s+always-scored)?\]\s+(.+)$/;
424
- var LEGACY_CRITERION_LINE_RE = /^[-*]\s+\[([DP])(?::([a-z][a-z0-9_-]*))?\]\s+(.+)$/;
425
424
  var NEAR_MISS_CRITERION_LINE_RE = /^[-*]\s*\[\s*(code|model)\b[^\]]*\]/;
426
425
  function nearMissCriterionMessage(line) {
427
426
  return `Criterion line "${line}" reaches for a [code]/[model] marker but does not match the criterion grammar ${CRITERION_LINE_RE.source} \u2014 fix the marker (e.g. "[code]", "[code:slack]", "[code:slack always-scored]"); a line this close to a criterion is refused rather than silently dropped as prose.`;
@@ -433,13 +432,6 @@ function parseCriteria(input, twins) {
433
432
  const criteria = [];
434
433
  for (const rawLine of input.split("\n")) {
435
434
  const line = rawLine.trim();
436
- const legacy = line.match(LEGACY_CRITERION_LINE_RE);
437
- if (legacy) {
438
- const legacyMarker = `[${legacy[1]}${legacy[2] ? `:${legacy[2]}` : ""}]`;
439
- throw new Error(
440
- `Criterion "${legacyMarker} ${legacy[3].trim()}" uses a retired marker \u2014 markers were renamed [D]\u2192[code] and [P]\u2192[model] (tags carry over: [D:github]\u2192[code:github]).`
441
- );
442
- }
443
435
  const match = line.match(CRITERION_LINE_RE);
444
436
  if (!match) {
445
437
  if (NEAR_MISS_CRITERION_LINE_RE.test(line)) {
@@ -1,5 +1,5 @@
1
- import { parseTaskFile, seedStateForTwin, runAgentCommand, writeRunArtifactsCore } from './chunk-VORBQXJN.js';
2
- import { createRecorder, bootTwin } from './chunk-S6JLWI4S.js';
1
+ import { parseTaskFile, seedStateForTwin, runAgentCommand, writeRunArtifactsCore } from './chunk-EMIRZNHN.js';
2
+ import { createRecorder, bootTwin } from './chunk-WJFRBXL5.js';
3
3
  import { getAvailablePort } from './chunk-XDU6TD4O.js';
4
4
  import { buildEgressAllowlist, readBlockedEgress } from './chunk-CBFKZZBR.js';
5
5
  import { eventSchema } from './chunk-6KJC4BTO.js';
@@ -1,7 +1,7 @@
1
- import { createHostedClient, perTwinReturnedByCloud, parseTaskFile, runAgentCommand, writeRunArtifactsCore, toTwinHttpEvent, redactJsonl, uploadRunBlobs, scoreFromFinalizeResponse, scoreStatus, evaluationCounts } from './chunk-VORBQXJN.js';
2
- import { readSeedFileText, parseSeedFileText, soleTwinOf, seedsForTwins } from './chunk-B7PA7UDX.js';
3
- import { readManifest, normalizeManifestTwins } from './chunk-XWGZ5C7Y.js';
4
- import { MOUNTED_TWINS, HostedAuthError, HostedDiscardRefusedError, HostedQuotaError, HostedOrchError, HostedTrialError, agentResponseSchema, isMultiTwinSeedEnvelope } from './chunk-OTFDQT3H.js';
1
+ import { createHostedClient, perTwinReturnedByCloud, parseTaskFile, runAgentCommand, writeRunArtifactsCore, toTwinHttpEvent, redactJsonl, uploadRunBlobs, scoreFromFinalizeResponse, scoreStatus, evaluationCounts } from './chunk-EMIRZNHN.js';
2
+ import { readSeedFileText, parseSeedFileText, soleTwinOf, seedsForTwins } from './chunk-IHKUFGYW.js';
3
+ import { readManifest, normalizeManifestTwins } from './chunk-2V5A7NWP.js';
4
+ import { MOUNTED_TWINS, HostedAuthError, HostedDiscardRefusedError, HostedQuotaError, HostedOrchError, HostedTrialError, agentResponseSchema, isMultiTwinSeedEnvelope } from './chunk-72CG3JNL.js';
5
5
  import { redactSecrets, redactEvent } from './chunk-SG6ZTIMT.js';
6
6
  import { randomUUID, createHash } from 'node:crypto';
7
7
  import { rm, readFile, stat, mkdir, writeFile, chmod, mkdtemp, readdir, rename } from 'node:fs/promises';
@@ -79,7 +79,7 @@ function looksLikeVerdictArtifactBase(parsed) {
79
79
  if (v.source !== "cloud-finalize") return false;
80
80
  if (typeof v.session_id !== "string") return false;
81
81
  if (typeof v.task_name !== "string") return false;
82
- if (typeof v.task_path !== "string" && typeof v.scenario_path !== "string") return false;
82
+ if (typeof v.task_path !== "string") return false;
83
83
  if (v.group_id !== null && typeof v.group_id !== "string") return false;
84
84
  if (typeof v.finalized_at !== "string") return false;
85
85
  if (typeof v.passed !== "boolean") return false;
@@ -640,7 +640,7 @@ function redactSession(res) {
640
640
  }
641
641
  function formatEnvExport(res, twins) {
642
642
  const lines = [
643
- `# Pome hosted session \u2014 treat as secret. Twins: ${twins.join(", ")}`,
643
+ `# Pome hosted sandbox \u2014 treat as secret. Twins: ${twins.join(", ")}`,
644
644
  `export POME_AUTH_TOKEN=${JSON.stringify(res.agent_token)}`,
645
645
  `export POME_SESSION_ID=${JSON.stringify(res.session_id)}`,
646
646
  // Legacy single-endpoint URL (= the primary twin's api_url). Kept for
@@ -733,7 +733,7 @@ async function runSessionCreate(opts) {
733
733
  });
734
734
  if (opts.secretsFile) {
735
735
  await writeSecretsFile(opts.secretsFile, formatEnvExport(session, twins));
736
- console.error(`Wrote session secrets to ${opts.secretsFile} (mode 0600).`);
736
+ console.error(`Wrote sandbox secrets to ${opts.secretsFile} (mode 0600).`);
737
737
  }
738
738
  if (opts.format === "json") {
739
739
  const payload = redactSession(session);
@@ -750,7 +750,7 @@ async function runSessionCreate(opts) {
750
750
  process.exitCode = 2;
751
751
  return;
752
752
  }
753
- console.error(`Session: ${session.session_id}`);
753
+ console.error(`Sandbox: ${session.session_id}`);
754
754
  console.error(`Expires: ${session.expires_at}`);
755
755
  if (opts.seedPath !== void 0) {
756
756
  console.error(`Seed: ${opts.seedPath} (replaces the default for ${twins.join(", ")}).`);
@@ -770,9 +770,6 @@ async function runSessionCreate(opts) {
770
770
  if (!printedAny) {
771
771
  console.error(`Twin URL: ${session.twin_url}`);
772
772
  }
773
- if (opts.showSecrets) {
774
- console.error("--show-secrets no longer prints secrets. Use --secrets-file <path>.");
775
- }
776
773
  console.error("Secrets redacted.");
777
774
  console.error(`Dashboard: ${DEFAULT_DASHBOARD_URL}/twins/${session.session_id}`);
778
775
  }
@@ -806,7 +803,7 @@ async function runSessionList(opts) {
806
803
  }
807
804
  if (rows.length === 0) {
808
805
  const scope = opts.state === "all" ? "any" : `state=${opts.state}`;
809
- console.error(`No sessions returned (${scope}).`);
806
+ console.error(`No sandboxes returned (${scope}).`);
810
807
  return;
811
808
  }
812
809
  for (const r of rows) {
@@ -833,12 +830,12 @@ async function runSessionStop(opts) {
833
830
  if (err.taskName) console.error(` Task: ${err.taskName}`);
834
831
  console.error(` Open for ${err.openSeconds}s.`);
835
832
  console.error(
836
- ` To keep the run, finalize it instead. To discard it anyway: pome session stop ${err.sessionId} --discard`
833
+ ` To keep the run, finalize it instead. To discard it anyway: pome sandbox stop ${err.sessionId} --discard`
837
834
  );
838
835
  }
839
836
  throw err;
840
837
  }
841
- console.error(`Stopped session ${opts.sessionId}.`);
838
+ console.error(`Stopped sandbox ${opts.sessionId}.`);
842
839
  }
843
840
  function friendlyHostedError(err) {
844
841
  if (err instanceof HostedDiscardRefusedError) {
@@ -1,4 +1,4 @@
1
- import { isTwinName, TWIN_REGISTRY, TWIN_NAMES } from './chunk-SRG22BIH.js';
1
+ import { isTwinName, TWIN_REGISTRY, TWIN_NAMES } from './chunk-SDBBGCE7.js';
2
2
  import { readFileSync } from 'node:fs';
3
3
  import { parse } from 'yaml';
4
4
 
@@ -165,7 +165,7 @@ var TWIN_REGISTRY = {
165
165
  LinearDomain,
166
166
  openLinearTwinDatabase,
167
167
  parseSeed
168
- } = await import('./src-5YCI6VIR.js');
168
+ } = await import('./src-FK536BIR.js');
169
169
  const db = openLinearTwinDatabase(":memory:");
170
170
  const seed = parseSeed(seedState);
171
171
  const domain = new LinearDomain(db);
@@ -363,7 +363,7 @@ var issueState = defineCheck({
363
363
  });
364
364
  var issueHasLabel = defineCheck({
365
365
  id: "linear.issue-has-label",
366
- description: "Resolves the issue, joins its `labelIds` to the workspace label catalog, and asserts the named label is among them \u2014 case-insensitively, as the legacy rule's comparison was. The join is the point: this export carries label IDS where the seed writes names and twin-github writes objects, so one concept has three shapes and only this one is exported. A label id with no catalog row is a partial export and SKIPS rather than failing.",
366
+ description: "Resolves the issue, joins its `labelIds` to the workspace label catalog, and asserts the named label is among them, case-insensitively. The join is the point: this export carries label IDS where the seed writes names and twin-github writes objects, so one concept has three shapes and only this one is exported. A label id with no catalog row is a partial export and SKIPS rather than failing.",
367
367
  template: 'Issue "{title}" in `{team}` has label "{label}"',
368
368
  params: { title: issueTitle, team: teamKey, label: labelName },
369
369
  substrate: "final",
@@ -429,7 +429,7 @@ var issueEstimate = defineCheck({
429
429
  });
430
430
  var issueAssignee = defineCheck({
431
431
  id: "linear.issue-assignee",
432
- description: "Resolves the issue, then its assignee, and matches the given reference against that user's email, name OR displayName \u2014 every spelling the legacy rule accepted. An UNASSIGNED issue is a real FAIL. Declared with no shipped corpus user, carrying a legacy capability forward. This is the check whose `subject` earns its keep: an email reference is destroyed by a team's `PII_PATTERNS`, which the twin's own redactor has no equivalent of, so without the declaration the criterion would silently be unable to fire.",
432
+ description: "Resolves the issue, then its assignee, and matches the given reference against that user's email, name OR displayName. An UNASSIGNED issue is a real FAIL. Declared with no shipped corpus user. This is the check whose `subject` earns its keep: an email reference is destroyed by a team's `PII_PATTERNS`, which the twin's own redactor has no equivalent of, so without the declaration the criterion would silently be unable to fire.",
433
433
  template: 'Issue "{title}" in `{team}` is assigned to `{user}`',
434
434
  params: { title: issueTitle, team: teamKey, user: userRef },
435
435
  substrate: "final",
@@ -1,4 +1,4 @@
1
- import { TWIN_NAMES, isTwinName, TWIN_REGISTRY } from './chunk-SRG22BIH.js';
1
+ import { TWIN_NAMES, isTwinName, TWIN_REGISTRY } from './chunk-SDBBGCE7.js';
2
2
  import { createFileBackedRecorderStore, createRecorderStore } from './chunk-E665XWYU.js';
3
3
 
4
4
  // src/recorder/recorder.ts
@@ -1,14 +1,14 @@
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-ZYQK4PNC.js';
4
- import { createHostedClient, parseTaskFile, uploadRunBlobs, scoreFromFinalizeResponse, scoreStatus, outcomeOf } from './chunk-VORBQXJN.js';
3
+ import { runTask, demoTaskPath, DEMO_TASK_NAME, DEMO_REPO } from './chunk-GNMDGZJF.js';
4
+ import { createHostedClient, parseTaskFile, uploadRunBlobs, scoreFromFinalizeResponse, scoreStatus, outcomeOf } from './chunk-EMIRZNHN.js';
5
5
  import './chunk-NW7HGA2K.js';
6
6
  import './chunk-3T5XN64P.js';
7
7
  import './chunk-Q5NBPR57.js';
8
- import { bootTwin } from './chunk-S6JLWI4S.js';
9
- import './chunk-SRG22BIH.js';
8
+ import { bootTwin } from './chunk-WJFRBXL5.js';
9
+ import './chunk-SDBBGCE7.js';
10
10
  import { getAvailablePort } from './chunk-XDU6TD4O.js';
11
- import { HostedQuotaError, HostedOrchError } from './chunk-OTFDQT3H.js';
11
+ import { HostedQuotaError, HostedOrchError } from './chunk-72CG3JNL.js';
12
12
  import './chunk-CBFKZZBR.js';
13
13
  import './chunk-HJX25USP.js';
14
14
  import './chunk-E665XWYU.js';
@@ -1,13 +1,13 @@
1
1
  import { newGroupId, criterionPhrase } from './chunk-RGZBC7NF.js';
2
- import { runTaskHosted, resolveRunAgentIdentity } from './chunk-EFX32JE3.js';
3
- import { createHostedClient, parseTaskFile, outcomeOf } from './chunk-VORBQXJN.js';
4
- import './chunk-B7PA7UDX.js';
2
+ import { runTaskHosted, resolveRunAgentIdentity } from './chunk-GUAGU65D.js';
3
+ import { createHostedClient, parseTaskFile, outcomeOf } from './chunk-EMIRZNHN.js';
4
+ import './chunk-IHKUFGYW.js';
5
5
  import './chunk-NW7HGA2K.js';
6
6
  import './chunk-3T5XN64P.js';
7
7
  import './chunk-Q5NBPR57.js';
8
- import './chunk-SRG22BIH.js';
9
- import './chunk-XWGZ5C7Y.js';
10
- import { HostedQuotaError, HostedTrialError } from './chunk-OTFDQT3H.js';
8
+ import './chunk-SDBBGCE7.js';
9
+ import './chunk-2V5A7NWP.js';
10
+ import { HostedQuotaError, HostedTrialError } from './chunk-72CG3JNL.js';
11
11
  import './chunk-HJX25USP.js';
12
12
  import './chunk-E665XWYU.js';
13
13
  import './chunk-6KJC4BTO.js';
@@ -1,25 +1,25 @@
1
1
  #!/usr/bin/env node
2
- import { DEFAULT_CONTROL_PLANE_URL, DEFAULT_DASHBOARD_URL, clearLocalCredentials, friendlyHostedError, SESSION_TWIN_NAMES, runSessionCreate, runSessionList, runSessionStop, resolveCredentials, runTaskHosted, discoverRunSet, VERDICT_ARTIFACT_VERSION, persistCredentialsAfterLogin, DEFAULT_DOCS_SITE_ORIGIN, resolveSeams, resolveCachedAgentId, readLinkCache, postAgentResolver, writeLinkCache, ensurePomeGitignored } from '../../chunk-EFX32JE3.js';
3
- import { assetPath, runTask, resolvePackageRoot, DEMO_TASK_NAME, demoTaskPath } from '../../chunk-ZYQK4PNC.js';
4
- import { parseTaskFile, scoreStatus, runScoreLine, readLatestRun, readMetaSummary, outcomeOf, readConfigTwins, scoreCountsSummary, markerFor, criterionMarkerLabel, twinSkipSuffix, readCodeCriteria, createHostedClient, toTwinHttpEvent, redactJsonl, scoreFromFinalizeResponse, parseGitHubSeedState, uploadRunBlobs, isPreSatisfied } from '../../chunk-VORBQXJN.js';
5
- import '../../chunk-B7PA7UDX.js';
2
+ import { DEFAULT_CONTROL_PLANE_URL, DEFAULT_DASHBOARD_URL, clearLocalCredentials, friendlyHostedError, SESSION_TWIN_NAMES, runSessionCreate, runSessionList, runSessionStop, resolveCredentials, runTaskHosted, discoverRunSet, VERDICT_ARTIFACT_VERSION, persistCredentialsAfterLogin, DEFAULT_DOCS_SITE_ORIGIN, resolveSeams, resolveCachedAgentId, readLinkCache, postAgentResolver, writeLinkCache, ensurePomeGitignored } from '../../chunk-GUAGU65D.js';
3
+ import { assetPath, runTask, resolvePackageRoot, DEMO_TASK_NAME, demoTaskPath } from '../../chunk-GNMDGZJF.js';
4
+ import { parseTaskFile, scoreStatus, runScoreLine, readLatestRun, readMetaSummary, outcomeOf, readConfigTwins, scoreCountsSummary, markerFor, criterionMarkerLabel, twinSkipSuffix, readCodeCriteria, createHostedClient, toTwinHttpEvent, redactJsonl, scoreFromFinalizeResponse, parseGitHubSeedState, uploadRunBlobs, isPreSatisfied } from '../../chunk-EMIRZNHN.js';
5
+ import '../../chunk-IHKUFGYW.js';
6
6
  import '../../chunk-NW7HGA2K.js';
7
7
  import { GMAIL_CHECKS } from '../../chunk-JM6VS62R.js';
8
8
  import '../../chunk-3T5XN64P.js';
9
- import { LINEAR_CHECKS } from '../../chunk-XBT6ZLBG.js';
9
+ import { LINEAR_CHECKS } from '../../chunk-TSOSDKXP.js';
10
10
  import '../../chunk-Q5NBPR57.js';
11
- import '../../chunk-S6JLWI4S.js';
12
- import { TWIN_NAME_LIST, isTwinName, createGitHubSmokeApp } from '../../chunk-SRG22BIH.js';
13
- import { readManifest, writeManifest, MANIFEST_JSON, readRequiredManifest, normalizeManifestTwins } from '../../chunk-XWGZ5C7Y.js';
11
+ import '../../chunk-WJFRBXL5.js';
12
+ import { TWIN_NAME_LIST, isTwinName, createGitHubSmokeApp } from '../../chunk-SDBBGCE7.js';
13
+ import { readManifest, writeManifest, MANIFEST_JSON, readRequiredManifest, normalizeManifestTwins } from '../../chunk-2V5A7NWP.js';
14
14
  import '../../chunk-XDU6TD4O.js';
15
- import { MOUNTED_TWINS, deriveAgentSlug, exitCodeFor, HostedUsageError, HostedOrchError, HostedAuthError, HostedQuotaError } from '../../chunk-OTFDQT3H.js';
15
+ import { MOUNTED_TWINS, deriveAgentSlug, exitCodeFor, HostedUsageError, HostedOrchError, HostedAuthError, HostedQuotaError } from '../../chunk-72CG3JNL.js';
16
16
  import '../../chunk-CBFKZZBR.js';
17
17
  import { TAPE_ASSERTABLE_TOOLS } from '../../chunk-C4BVTUA3.js';
18
18
  import { seedSchema } from '../../chunk-HJX25USP.js';
19
19
  import { SLACK_CHECKS } from '../../chunk-2ZGVDTJC.js';
20
20
  import { oneOf, defineCheck, repoRef, VACUITY_SENTINEL_NUMBER, childStatePath, VACUITY_SENTINEL, statePath, templateSlots, renderCheck, checksDigest, checkPattern, checkNearMissPattern } from '../../chunk-JWJYNAWI.js';
21
21
  import '../../chunk-E665XWYU.js';
22
- import { isLegacyEventRow, eventSchema } from '../../chunk-6KJC4BTO.js';
22
+ import { eventSchema, isLegacyEventRow } from '../../chunk-6KJC4BTO.js';
23
23
  import { redactEvent, redactSecrets } from '../../chunk-SG6ZTIMT.js';
24
24
  import '../../chunk-CF6EIU2U.js';
25
25
  import { Command } from 'commander';
@@ -35,7 +35,6 @@ import { z } from 'zod';
35
35
  import Anthropic from '@anthropic-ai/sdk';
36
36
  import { zodOutputFormat } from '@anthropic-ai/sdk/helpers/zod';
37
37
 
38
- var LEGACY_EVENTS_MESSAGE = "this run was produced by an older CLI version (pre-M0); rerun against current CLI to view";
39
38
  async function readEventsJsonl(runDir) {
40
39
  let raw;
41
40
  try {
@@ -47,9 +46,6 @@ async function readEventsJsonl(runDir) {
47
46
  throw err;
48
47
  }
49
48
  const rows = raw.split("\n").map((line) => line.trim()).filter((line) => line.length > 0).map((line) => JSON.parse(line));
50
- if (rows.some(isLegacyEventRow)) {
51
- return { kind: "legacy" };
52
- }
53
49
  const events = rows.map((row) => eventSchema.parse(row));
54
50
  return { kind: "events", events };
55
51
  }
@@ -242,7 +238,7 @@ async function loginWithClerk(options) {
242
238
  console.error(`Saved Pome credentials to ${path}`);
243
239
  }
244
240
  console.error("Pome login complete.");
245
- console.error("Next: `pome session create --twin github` or `pome run <task>.md`");
241
+ console.error("Next: `pome sandbox create --twin github` or `pome run <task>.md`");
246
242
  }
247
243
  async function exchangeCode(input) {
248
244
  const ctrl = new AbortController();
@@ -409,7 +405,7 @@ var DOCS_TOPICS = [
409
405
  {
410
406
  id: "getting-started",
411
407
  title: "Quickstart",
412
- path: "/getting-started",
408
+ path: "/quickstart/claude-code",
413
409
  keywords: ["install", "quickstart", "setup", "begin"]
414
410
  },
415
411
  {
@@ -424,9 +420,6 @@ var DOCS_TOPICS = [
424
420
  "register",
425
421
  "pome.json",
426
422
  "connect",
427
- // Migrated from the retired skills-setup topic: wiring your own
428
- // agent is now the "bring your own agent" path. ("pome-setup" / "setup"
429
- // already resolve to getting-started via its "setup" keyword.)
430
423
  "wire"
431
424
  ]
432
425
  },
@@ -436,14 +429,6 @@ var DOCS_TOPICS = [
436
429
  path: "/docs/how-pome-works",
437
430
  keywords: ["twins", "scenarios", "runs", "scoring", "artifacts", "loop"]
438
431
  },
439
- // The Gen-1 /setup and /test-with-pome skill pages were dropped from the docs
440
- // nav, and the CLI commands that pointed at them are gone. The two
441
- // topic entries are gone, but their still-live keywords are MIGRATED onto the
442
- // surviving replacement topics so `pome docs <kw>` keeps routing:
443
- // wire → existing-agent; test-with-pome / pome-test → cli-run;
444
- // eval → cli (the CLI reference index — no dedicated eval page exists).
445
- // (setup / pome-setup / register / run scenarios / /setup all already
446
- // resolve via existing substrings — see the tests.)
447
432
  {
448
433
  id: "dashboard",
449
434
  title: "Pome Dashboard",
@@ -453,7 +438,7 @@ var DOCS_TOPICS = [
453
438
  {
454
439
  id: "twins",
455
440
  title: "Twins overview",
456
- path: "/docs/twins/index",
441
+ path: "/docs/twins/coverage",
457
442
  keywords: ["sandbox", "digital twin", "hosted"]
458
443
  },
459
444
  {
@@ -484,10 +469,8 @@ var DOCS_TOPICS = [
484
469
  id: "cli",
485
470
  title: "Command Line Interface",
486
471
  path: "/docs/cli",
487
- // "eval" migrated from the retired skills-test topic: there is no
488
- // dedicated `pome eval` docs page, and it is a distinct workflow from
489
- // `pome inspect`, so it routes to the CLI reference index that documents
490
- // every command rather than to a sibling command's page.
472
+ // No dedicated `pome eval` page exists, and eval is a distinct workflow
473
+ // from `pome inspect`, so "eval" routes to the reference index.
491
474
  keywords: ["commands", "flags", "pome run", "reference", "eval"]
492
475
  },
493
476
  {
@@ -502,26 +485,18 @@ var DOCS_TOPICS = [
502
485
  "artifacts",
503
486
  "default",
504
487
  "demo task",
505
- "run yours",
506
- // Migrated from the retired skills-test topic: running tasks is
507
- // how you test an agent with pome.
508
- "test-with-pome",
509
- "pome-test"
488
+ "run yours"
510
489
  ]
511
490
  },
512
491
  {
513
- id: "cli-session",
514
- title: "pome session",
515
- path: "/docs/cli/session",
516
- keywords: ["session", "hosted", "sandbox", "twin"]
492
+ id: "cli-sandbox",
493
+ title: "pome sandbox",
494
+ path: "/docs/cli/sandbox",
495
+ keywords: ["sandbox", "hosted", "twin"]
517
496
  },
518
497
  {
519
498
  id: "cli-tasks",
520
499
  title: "pome tasks",
521
- // The M4 docs door renamed the docs.pome.sh page from
522
- // /docs/cli/scenarios to /docs/cli/tasks (a redirect keeps the old URL
523
- // alive), so `path` now points at the new route. The "scenarios" keyword
524
- // stays so `pome docs scenarios` still resolves to this topic.
525
500
  path: "/docs/cli/tasks",
526
501
  keywords: ["tasks", "scenarios", "catalog", "copy", "library", "twin"]
527
502
  },
@@ -548,12 +523,6 @@ var DOCS_TOPICS = [
548
523
  title: "Troubleshooting",
549
524
  path: "/docs/troubleshooting",
550
525
  keywords: ["errors", "help", "fix", "debug"]
551
- },
552
- {
553
- id: "changelog",
554
- title: "Changelog",
555
- path: "/changelog",
556
- keywords: ["release", "version", "news"]
557
526
  }
558
527
  ];
559
528
 
@@ -4653,7 +4622,7 @@ var DEFAULT_AGENT_COMMAND = `node ${DEFAULT_AGENT_FILE}`;
4653
4622
  var MANIFEST_SCHEMA_URL = "https://pome.sh/schemas/v1/pome.json";
4654
4623
  var MAX_UNREADABLE_PATHS_SHOWN = 5;
4655
4624
  function readPackageVersion() {
4656
- if ("0.29.1".length > 0) return "0.29.1";
4625
+ if ("0.31.0".length > 0) return "0.31.0";
4657
4626
  try {
4658
4627
  const here = dirname(fileURLToPath(import.meta.url));
4659
4628
  const candidates = [
@@ -4751,12 +4720,6 @@ function createProgram() {
4751
4720
  }
4752
4721
  console.error(postInitMessage);
4753
4722
  });
4754
- program.command("install").allowUnknownOption().allowExcessArguments().description(
4755
- "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."
4756
- ).action(async () => {
4757
- const { runInstall } = await import('../../install-4OATBKG3.js');
4758
- runInstall();
4759
- });
4760
4723
  program.command("login").description("Sign in with Clerk and store a hosted team API key (macOS Keychain or ~/.pome/credentials.json)").option(
4761
4724
  "--api-url <url>",
4762
4725
  "Control-plane base URL.",
@@ -4786,7 +4749,7 @@ function createProgram() {
4786
4749
  "Override docs site origin (default https://docs.pome.sh)"
4787
4750
  ).option(
4788
4751
  "--url",
4789
- "Print docs.pome.sh URLs (default behavior; retained for compatibility).",
4752
+ "Print the URL instead of opening the interactive topic picker.",
4790
4753
  false
4791
4754
  ).description(
4792
4755
  "Navigate canonical narrative docs on docs.pome.sh"
@@ -4819,7 +4782,7 @@ function createProgram() {
4819
4782
  }
4820
4783
  );
4821
4784
  const checks = program.command("checks").argument("[twin]", "Twin id (e.g. github). Omit to list twins that declare checks.").option("--json", "Emit the declaration as JSON (for skills and agents).", false).description(
4822
- "Browse the typed checks a twin declares \u2014 the closed set [code] criteria come from"
4785
+ "Browse the typed checks a twin declares \u2014 the closed set a [code] criterion is graded by"
4823
4786
  ).action(async (twin2, opts) => {
4824
4787
  await runChecksCommand(twin2, { json: opts.json });
4825
4788
  });
@@ -4894,10 +4857,10 @@ function createProgram() {
4894
4857
  }
4895
4858
  }
4896
4859
  );
4897
- const session = program.command("session").alias("sandbox").description(
4898
- "Hosted sandbox sessions (same API as the dashboard Twins page \u2014 requires login)"
4860
+ const session = program.command("sandbox").description(
4861
+ "Hosted sandboxes (same API as the dashboard Twins page \u2014 requires login)"
4899
4862
  );
4900
- session.command("create").description("Create a hosted sandbox session for one or more twins and print its connection info").option(
4863
+ session.command("create").description("Create a hosted sandbox for one or more twins and print its connection info").option(
4901
4864
  "--twin <name>",
4902
4865
  // The enumeration is derived, never typed: this line is the public
4903
4866
  // discovery surface for which twins exist, and a hand-written copy of the
@@ -4911,7 +4874,7 @@ function createProgram() {
4911
4874
  // reject the invocation before the action runs, so the check moved into
4912
4875
  // `runSessionCreate`, which fails with the same "No twin specified"
4913
4876
  // sentence when neither source supplies one.
4914
- `${SESSION_TWIN_NAMES.join(" | ")}. Repeat the flag for a multi-twin session (e.g. --twin github --twin gmail). Optional when --seed names exactly one twin.`,
4877
+ `${SESSION_TWIN_NAMES.join(" | ")}. Repeat the flag for a multi-twin sandbox (e.g. --twin github --twin gmail). Optional when --seed names exactly one twin.`,
4915
4878
  (value, previous = []) => [...previous, value]
4916
4879
  ).option(
4917
4880
  "--seed <path>",
@@ -4920,7 +4883,7 @@ function createProgram() {
4920
4883
  "--api-url <url>",
4921
4884
  "Control-plane URL",
4922
4885
  process.env.POME_API_URL ?? DEFAULT_CONTROL_PLANE_URL
4923
- ).option("--show-secrets", "Deprecated: secrets are never printed; use --secrets-file", false).option(
4886
+ ).option(
4924
4887
  "--secrets-file <path>",
4925
4888
  "Write shell exports containing session secrets to a local file with mode 0600"
4926
4889
  ).option(
@@ -4939,7 +4902,6 @@ function createProgram() {
4939
4902
  await runSessionCreate({
4940
4903
  apiBaseUrl: opts.apiUrl,
4941
4904
  twins: opts.twin ?? [],
4942
- showSecrets: opts.showSecrets,
4943
4905
  format,
4944
4906
  secretsFile: opts.secretsFile,
4945
4907
  seedPath: opts.seed
@@ -4950,7 +4912,7 @@ function createProgram() {
4950
4912
  }
4951
4913
  }
4952
4914
  );
4953
- session.command("list").description("List hosted sessions (defaults to --state running, like the dashboard)").option(
4915
+ session.command("list").description("List hosted sandboxes (defaults to --state running, like the dashboard)").option(
4954
4916
  "--api-url <url>",
4955
4917
  "Control-plane URL",
4956
4918
  process.env.POME_API_URL ?? DEFAULT_CONTROL_PLANE_URL
@@ -4987,7 +4949,7 @@ function createProgram() {
4987
4949
  }
4988
4950
  }
4989
4951
  );
4990
- session.command("stop").alias("kill").description("Stop a hosted session (aliased as `kill`)").argument("<session-id>", "Session id (ses_\u2026)").option(
4952
+ session.command("stop").description("Stop a hosted sandbox").argument("<session-id>", "Sandbox id (ses_\u2026)").option(
4991
4953
  "--api-url <url>",
4992
4954
  "Control-plane URL",
4993
4955
  process.env.POME_API_URL ?? DEFAULT_CONTROL_PLANE_URL
@@ -5006,7 +4968,7 @@ function createProgram() {
5006
4968
  } catch (err) {
5007
4969
  const friendly = friendlyHostedError(err);
5008
4970
  if (friendly) console.error(friendly);
5009
- process.exitCode = 2;
4971
+ process.exitCode = exitCodeFor(err);
5010
4972
  }
5011
4973
  }
5012
4974
  );
@@ -5016,7 +4978,7 @@ function createProgram() {
5016
4978
  ).option("--agent <command>", "Agent command to run").option(
5017
4979
  "-n, --trials <count>",
5018
4980
  "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."
5019
- ).option("--artifacts-dir <dir>", "Directory for run artifacts", "runs").option("--hosted", "Deprecated: hosted is now the default. Flag is a no-op.").option(
4981
+ ).option("--artifacts-dir <dir>", "Directory for run artifacts", "runs").option(
5020
4982
  "--api-url <url>",
5021
4983
  "Control-plane base URL.",
5022
4984
  process.env.POME_API_URL ?? DEFAULT_CONTROL_PLANE_URL
@@ -5099,13 +5061,6 @@ function createProgram() {
5099
5061
  const agentCommand = resolvedCommand ?? DEFAULT_AGENT_COMMAND;
5100
5062
  let worstExit = 0;
5101
5063
  const useLocal = options.local === true || process.env.POME_LOCAL === "1";
5102
- if (options.hosted && useLocal) {
5103
- console.error(
5104
- "Warning: --hosted is a no-op; running against a local twin (--local / POME_LOCAL=1). Drop it to record runs to the cloud."
5105
- );
5106
- } else if (options.hosted) {
5107
- console.error("Note: --hosted is now the default; the flag is a deprecated no-op and will be removed in a future release.");
5108
- }
5109
5064
  if (trialsFlag !== void 0 && useLocal) {
5110
5065
  console.error(
5111
5066
  "-n/--trials needs the hosted path (verdicts come from the cloud judge); --local runs capture a single trace. Drop --local or -n."
@@ -5114,7 +5069,7 @@ function createProgram() {
5114
5069
  return;
5115
5070
  }
5116
5071
  {
5117
- const { runDoctorChecks } = await import('../../checks-BZ5L2YNC.js');
5072
+ const { runDoctorChecks } = await import('../../checks-KGDGQ35O.js');
5118
5073
  const { renderDoctorReport } = await import('../../render-ZQQ4UMNO.js');
5119
5074
  const doctorReport = await runDoctorChecks({ mode: useLocal ? "full" : "hosted" });
5120
5075
  if (!doctorReport.ok) {
@@ -5123,7 +5078,7 @@ function createProgram() {
5123
5078
  console.error(
5124
5079
  "pome run: wiring check failed \u2014 refusing to spawn the agent. Fix the cause above and re-run (there is no --force)."
5125
5080
  );
5126
- process.exitCode = 1;
5081
+ process.exitCode = 5;
5127
5082
  return;
5128
5083
  }
5129
5084
  }
@@ -5152,7 +5107,7 @@ function createProgram() {
5152
5107
  taskForRuns.config.runs
5153
5108
  );
5154
5109
  if (k > 1) {
5155
- const { runTrialGroup } = await import('../../runTrialGroup-IFRZWVRB.js');
5110
+ const { runTrialGroup } = await import('../../runTrialGroup-T2H7T54Z.js');
5156
5111
  const fileForRerun = relative(process.cwd(), file);
5157
5112
  const rerunCommand = defaultTask ? options.trials !== void 0 ? `pome run -n ${k}` : "pome run" : `pome run ${fileForRerun && !fileForRerun.startsWith("..") ? fileForRerun : file} -n ${k}`;
5158
5113
  const groupResult = await runTrialGroup({
@@ -5246,7 +5201,7 @@ function createProgram() {
5246
5201
  process.exitCode = 5;
5247
5202
  return;
5248
5203
  }
5249
- const { runDemo } = await import('../../runDemo-NKSDEHRR.js');
5204
+ const { runDemo } = await import('../../runDemo-PSXUXCR5.js');
5250
5205
  const result = await runDemo({
5251
5206
  apiBase: opts.apiUrl.replace(/\/$/, ""),
5252
5207
  dashboardBase: process.env.POME_DASHBOARD_URL ?? DEFAULT_DASHBOARD_URL,
@@ -5264,7 +5219,7 @@ function createProgram() {
5264
5219
  program.command("doctor").description(
5265
5220
  "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."
5266
5221
  ).action(async () => {
5267
- const { runDoctorChecks } = await import('../../checks-BZ5L2YNC.js');
5222
+ const { runDoctorChecks } = await import('../../checks-KGDGQ35O.js');
5268
5223
  const { renderDoctorReport } = await import('../../render-ZQQ4UMNO.js');
5269
5224
  const report = await runDoctorChecks();
5270
5225
  for (const line of renderDoctorReport(report, { passNote: true })) console.error(line);
@@ -5298,11 +5253,6 @@ function createProgram() {
5298
5253
  const latest = run === "latest" ? await readLatestRun(options.artifactsDir) : void 0;
5299
5254
  const runDir = latest?.run_dir ?? resolve(run);
5300
5255
  const eventsResult = await readEventsJsonl(runDir);
5301
- if (eventsResult.kind === "legacy") {
5302
- console.error(LEGACY_EVENTS_MESSAGE);
5303
- process.exitCode = 2;
5304
- return;
5305
- }
5306
5256
  const meta = await readMetaSummary(runDir);
5307
5257
  console.log(`Run: ${latest?.run_id ?? run}`);
5308
5258
  console.log(`Directory: ${runDir}`);
@@ -5324,7 +5274,7 @@ function createProgram() {
5324
5274
  "[task]",
5325
5275
  "Path to the task .md file (only with an events.jsonl target)"
5326
5276
  ).description(
5327
- "Assemble a paste-into-IDE fix prompt (no LLM call, no network). With no args, reads the latest FAILED run set under ./runs: the persisted cloud verdicts (verdict.json) become grouped failure signatures over the raw traces, in one prompt. Point it at a trial run dir to target that set, or use the legacy `<events.jsonl> <task.md>` form for a single trace."
5277
+ "Assemble a paste-into-IDE fix prompt (no LLM call, no network). With no args, reads the latest FAILED run set under ./runs: the persisted cloud verdicts (verdict.json) become grouped failure signatures over the raw traces, in one prompt. Point it at a trial run dir to target that set, or point it at an `events.jsonl` with its task file for a single trace."
5328
5278
  ).action(async (target, taskArg) => {
5329
5279
  if (target !== void 0 && target.endsWith(".jsonl")) {
5330
5280
  if (!taskArg) {
@@ -5446,13 +5396,13 @@ function createProgram() {
5446
5396
  ).description(
5447
5397
  "Start a standalone twin as a long-lived foreground server (Ctrl-C to stop)"
5448
5398
  ).action(async (name, options) => {
5449
- const { runTwinStartCommand } = await import('../../twinStart-ZDWFU6M4.js');
5399
+ const { runTwinStartCommand } = await import('../../twinStart-VUCN4CFY.js');
5450
5400
  await runTwinStartCommand(name, options);
5451
5401
  });
5452
5402
  twin.command("seed").argument("<name...>", `Twin name (${TWIN_NAME_LIST.join(" | ")}). Repeat for one file covering several.`).option("--out <path>", "Write to this file instead of stdout. Refuses to overwrite.").description(
5453
5403
  "Print a starter seed file for a twin, generated from the twin's own starting state"
5454
5404
  ).action(async (names, options) => {
5455
- const { runTwinSeedCommand } = await import('../../twinSeed-MOQXJDEG.js');
5405
+ const { runTwinSeedCommand } = await import('../../twinSeed-XIKTIHX2.js');
5456
5406
  await runTwinSeedCommand(names, options);
5457
5407
  });
5458
5408
  twin.command("reset").argument("[name]", "Twin name (default: github)", "github").description("Reset standalone twin state").action(async (name) => {
@@ -1,4 +1,4 @@
1
- export { LINEAR_CHECKS } from './chunk-XBT6ZLBG.js';
1
+ export { LINEAR_CHECKS } from './chunk-TSOSDKXP.js';
2
2
  import { MCP_PAGE_MAX, defaultSeedState, linearSeedSchema, notFound, badUserInput, MCP_PAGE_DEFAULT, DEFAULT_LINEAR_EMAIL, RELAY_PAGE_MAX, RELAY_PAGE_DEFAULT, STATE_EXPORT_CAP, parseSeed, DEFAULT_LINEAR_CLOCK, LINEAR_PROVIDER_TOKEN_PREFIX, DEFAULT_LINEAR_SID, DEFAULT_SCOPES, linearErrorEnvelope, unauthorizedEnvelope, unsupportedEnvelope, forbiddenEnvelope, assertWebhookUrl, ACCESS_TOKEN_TTL_SECONDS, OAUTH_CODE_TTL_SECONDS, TITLE_MAX_BYTES, BODY_MAX_BYTES, LinearTwinError, GRAPHQL_QUERY_MAX_BYTES, GRAPHQL_SELECTION_DEPTH_MAX } from './chunk-Q5NBPR57.js';
3
3
  export { DEFAULT_LINEAR_CLOCK, DEFAULT_LINEAR_EMAIL, DEFAULT_LINEAR_PORT, DEFAULT_LINEAR_SID, DEFAULT_LINEAR_TOKEN, LINEAR_PROVIDER_TOKEN_PREFIX, LinearTwinError, STATE_EXPORT_CAP, assertWebhookUrl, defaultSeedState, linearErrorEnvelope, linearSeedSchema, loadSeedFromEnv, parseSeed, unauthorizedEnvelope, unsupportedEnvelope, webhookUrlError } from './chunk-Q5NBPR57.js';
4
4
  import './chunk-JWJYNAWI.js';
@@ -0,0 +1,6 @@
1
+ export { UnsupportedTwinError, bootTwin } from './chunk-WJFRBXL5.js';
2
+ export { STRIPE_LOCAL_ACCOUNT_ID } from './chunk-SDBBGCE7.js';
3
+ import './chunk-E665XWYU.js';
4
+ import './chunk-6KJC4BTO.js';
5
+ import './chunk-SG6ZTIMT.js';
6
+ import './chunk-CF6EIU2U.js';
@@ -1,4 +1,4 @@
1
- import { TWIN_NAMES, isTwinName, TWIN_REGISTRY } from './chunk-SRG22BIH.js';
1
+ import { TWIN_NAMES, isTwinName, TWIN_REGISTRY } from './chunk-SDBBGCE7.js';
2
2
  import { writeFile } from 'node:fs/promises';
3
3
 
4
4
  async function generateSeedFile(twins) {
@@ -1,6 +1,6 @@
1
- import { readSeedFileText, seedForTwin, parseSeedFileText, soleTwinOf, twinsNamedBy } from './chunk-B7PA7UDX.js';
2
- import { bootTwin } from './chunk-S6JLWI4S.js';
3
- import { TWIN_REGISTRY, isTwinName, TWIN_NAMES, defaultPortFor } from './chunk-SRG22BIH.js';
1
+ import { readSeedFileText, seedForTwin, parseSeedFileText, soleTwinOf, twinsNamedBy } from './chunk-IHKUFGYW.js';
2
+ import { bootTwin } from './chunk-WJFRBXL5.js';
3
+ import { TWIN_REGISTRY, isTwinName, TWIN_NAMES, defaultPortFor } from './chunk-SDBBGCE7.js';
4
4
  import './chunk-E665XWYU.js';
5
5
  import './chunk-6KJC4BTO.js';
6
6
  import './chunk-SG6ZTIMT.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pome-sh/cli",
3
- "version": "0.29.1",
3
+ "version": "0.31.0",
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,22 +0,0 @@
1
- // src/cli/install.ts
2
- var GEN2_REDIRECT = [
3
- "pome install (Gen-1 agent-driven wiring) is retired.",
4
- "",
5
- "Wire your own agent to pome the Gen-2 way:",
6
- " 1. claude mcp add --transport http pome https://mcp.pome.sh/mcp",
7
- " # connect the pome control MCP",
8
- " 2. npx skills add pome-sh/digital-twins --skill '*'",
9
- " # install the Gen-2 coach skills",
10
- " # (--skill '*' takes all six; the",
11
- " # picker opens with none ticked)",
12
- " 3. run the pome-intake skill to register the examinee and check twin",
13
- " coverage (self-hosted REST agent: use the coach's REST-launch preflight).",
14
- "",
15
- "Already have pome.json? `pome register agent <name>` and `pome doctor` still apply.",
16
- "See `pome docs getting-started`."
17
- ];
18
- function runInstall() {
19
- for (const line of GEN2_REDIRECT) console.error(line);
20
- }
21
-
22
- export { runInstall };
@@ -1,6 +0,0 @@
1
- export { UnsupportedTwinError, bootTwin } from './chunk-S6JLWI4S.js';
2
- export { STRIPE_LOCAL_ACCOUNT_ID } from './chunk-SRG22BIH.js';
3
- import './chunk-E665XWYU.js';
4
- import './chunk-6KJC4BTO.js';
5
- import './chunk-SG6ZTIMT.js';
6
- import './chunk-CF6EIU2U.js';