@pome-sh/cli 0.21.7 → 0.21.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "package": "pome-sh",
3
- "version": "0.21.7",
4
- "git_sha": "96e10b0c62901bb98b27cc2542bb0dacfd13819f",
5
- "build_time": "2026-08-06T00:44:03.453Z"
3
+ "version": "0.21.9",
4
+ "git_sha": "452daee9323032a6875be318ed440521e2a6e1c8",
5
+ "build_time": "2026-08-06T10:42:27.896Z"
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-KFZ2ZNAX.js');
186
+ const { bootTwin } = await import('./twinHarness-CJX3IXR3.js');
187
187
  harness = await bootTwin({
188
188
  twin: "github",
189
189
  seedState: void 0,
@@ -1,5 +1,5 @@
1
- import { TWIN_NAMES, isTwinName, TWIN_REGISTRY } from './chunk-A3IDZXJY.js';
2
- import { createFileBackedRecorderStore, createRecorderStore } from './chunk-LZIPGCQJ.js';
1
+ import { TWIN_NAMES, isTwinName, TWIN_REGISTRY } from './chunk-BK7HSHRA.js';
2
+ import { createFileBackedRecorderStore, createRecorderStore } from './chunk-35TG2GHS.js';
3
3
 
4
4
  // src/recorder/recorder.ts
5
5
  function createRecorder(options = {}) {
@@ -1177,6 +1177,8 @@ function createFailureInjectionStore() {
1177
1177
  }
1178
1178
  };
1179
1179
  }
1180
+
1181
+ // ../packages/sdk/dist/failure-injection.js
1180
1182
  function failureInjectionMiddleware(store, options) {
1181
1183
  return async (c, next) => {
1182
1184
  const session = c.get("session");
@@ -292,7 +292,7 @@ var issueThreadedReply = defineCheck({
292
292
  // ../packages/twin-linear/dist/src/check-issues.js
293
293
  var issueExists = defineCheck({
294
294
  id: "linear.issue-exists",
295
- description: "Asserts an unarchived issue with this exact title exists in the named team. Declared and unused by the shipped corpus on purpose: `linear.issue-state` FAILS on a missing issue and therefore subsumes this one, so task 26 carries the state criterion alone \u2014 twin-github ships the same pair for the same reason. A vocabulary is what an author may pick from, not what the corpus happens to exercise. Title matching is EXACT and archived issues do not count, so an examinee that renames or archives the issue fails this.",
295
+ description: "Asserts an unarchived issue with this exact title exists in the named team. Declared and unused by the shipped corpus on purpose: `linear.issue-state` FAILS on a missing issue and therefore subsumes this one, so a task carries the state criterion alone \u2014 twin-github ships the same pair for the same reason. A vocabulary is what an author may pick from, not what the corpus happens to exercise. Title matching is EXACT and archived issues do not count, so an examinee that renames or archives the issue fails this.",
296
296
  template: 'An issue titled "{title}" exists in `{team}`',
297
297
  params: { title: issueTitle, team: teamKey },
298
298
  substrate: "final",
@@ -2,8 +2,8 @@ import { criterionSchema, finalizeResponseSchema, HostedDiscardRefusedError, Hos
2
2
  import { seedSchema, parseSeed, defaultSeedState as defaultSeedState$2 } from './chunk-SGDUD7KK.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-A3IDZXJY.js';
6
- import { toTwinHttpEventRow } from './chunk-LZIPGCQJ.js';
5
+ import { isTwinName, TWIN_REGISTRY } from './chunk-BK7HSHRA.js';
6
+ import { toTwinHttpEventRow } from './chunk-35TG2GHS.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';
@@ -4,11 +4,11 @@ var package_default = {
4
4
 
5
5
  // ../packages/twin-slack/package.json
6
6
  var package_default2 = {
7
- version: "0.3.3"};
7
+ version: "0.3.4"};
8
8
 
9
9
  // ../packages/twin-stripe/package.json
10
10
  var package_default3 = {
11
- version: "0.4.4"};
11
+ version: "0.4.5"};
12
12
 
13
13
  // ../packages/twin-gmail/package.json
14
14
  var package_default4 = {
@@ -39,7 +39,7 @@ var TWIN_REGISTRY = {
39
39
  defaultSeedState,
40
40
  GitHubDomain,
41
41
  openGitHubCloneDatabase
42
- } = await import('./src-RVUEXCKN.js');
42
+ } = await import('./src-WQE3MFBD.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-GGRWNJTK.js')).defaultSeedState(),
62
+ defaultSeed: async () => (await import('./src-4ZLCEPCN.js')).defaultSeedState(),
63
63
  async boot({ seedState, runId, recorder }) {
64
- const { createSlackTwinApp, openSlackTwinDatabase, SlackDomain } = await import('./src-GGRWNJTK.js');
64
+ const { createSlackTwinApp, openSlackTwinDatabase, SlackDomain } = await import('./src-4ZLCEPCN.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-4SVLX7UK.js')).defaultSeed(),
87
+ defaultSeed: async () => (await import('./src-PJGE6SSY.js')).defaultSeed(),
88
88
  async boot({ seedState, runId, recorder, twinBaseUrl }) {
89
- const stripeTwin = await import('./src-4SVLX7UK.js');
90
- const { createApp } = await import('./server-Y52EIWDP.js');
89
+ const stripeTwin = await import('./src-PJGE6SSY.js');
90
+ const { createApp } = await import('./server-NJBWJIS3.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-FLTYWM6P.js')).defaultSeedState(),
131
+ defaultSeed: async () => (await import('./src-TKGHXPEM.js')).defaultSeedState(),
132
132
  async boot({ seedState, runId, recorder }) {
133
- const { createGmailTwinApp, GmailDomain, openGmailTwinDatabase, parseSeed } = await import('./src-FLTYWM6P.js');
133
+ const { createGmailTwinApp, GmailDomain, openGmailTwinDatabase, parseSeed } = await import('./src-TKGHXPEM.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-K3KTJTMG.js')).defaultSeedState(),
152
+ defaultSeed: async () => (await import('./src-CI5W335G.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-K3KTJTMG.js');
160
+ } = await import('./src-CI5W335G.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-RVUEXCKN.js');
176
+ const { createGitHubCloneApp } = await import('./src-WQE3MFBD.js');
177
177
  return createGitHubCloneApp();
178
178
  }
179
179
  function defaultPortFor(twin, env = process.env) {
@@ -193,20 +193,19 @@ var draftAddressedTo2 = defineCheck({
193
193
  template: "A draft addressed to {email} exists",
194
194
  params: { email: emailAddress },
195
195
  substrate: "final",
196
- // An achievement: task 22's seed ships one draft addressed to bob, so an
197
- // examinee that does nothing does not satisfy this.
196
+ // An achievement: the seeded mailbox already contains a draft with a
197
+ // recipient, so an examinee that does nothing does not satisfy this.
198
198
  polarity: () => "positive",
199
199
  //
200
200
  // THE LOAD-BEARING DECLARATION ON THIS CHECK.
201
201
  //
202
- // pome-cloud's `corpus.ts` has carried a prediction about this exact criterion
203
- // since F-1028: `22-gmail-inbox-triage`'s `alice@example.com` "becomes visible
204
- // here as 'unguarded' the day a gmail draft-recipient predicate lands without a
205
- // `subject`, which is precisely when it starts to matter." An email address is
206
- // squarely inside what a team's redaction config may destroy. Without this
207
- // field the evaluator has no way to turn an impossible comparison into an
208
- // honest skip, so the criterion scores a vacuous verdict at both doors
209
- // instead — and the count of unguarded hazards must stay at zero.
202
+ // `subject` names the value the assertion is actually about, and on this check
203
+ // that value is an email address — squarely inside what a redaction config may
204
+ // legitimately destroy before an evaluator ever sees the state. Declaring it
205
+ // is what lets a consumer detect that the comparison has become impossible and
206
+ // record an honest skip. Without it there is nothing to detect: the address is
207
+ // simply absent, the comparison silently cannot match, and the criterion
208
+ // reports a vacuous verdict that reads like a real one.
210
209
  subject: ({ email }) => email,
211
210
  // The address is the scanned literal, so the mutant points at it. It stays
212
211
  // email-shaped so it re-binds to this same check: a mutant that stops matching
@@ -236,7 +235,7 @@ var draftAddressedTo2 = defineCheck({
236
235
  // address. A reader following this pointer lands on the thing the
237
236
  // sentence is about — "a draft addressed to X" — and the join to the
238
237
  // message is an implementation detail of how the twin exports, not the
239
- // claim (F-1197).
238
+ // claim.
240
239
  evidenceStatePaths: [childStatePath(DRAFTS_PATH, index)]
241
240
  };
242
241
  }
@@ -270,8 +269,9 @@ var draftCountAtLeast = defineCheck({
270
269
  // is nothing to resolve: it is compared directly against a cardinality the
271
270
  // predicate computes, so falsifying it moves the verdict THROUGH the
272
271
  // assertion. That is the same argument `stripe.payment-intent-amount` makes,
273
- // and it is why this check is the second entry in pome-cloud's
274
- // `NUMERIC_SENTINEL_ALLOWED`.
272
+ // and it is why a numeric sentinel is admissible on this check and on very few
273
+ // others: an evaluator that allowlists the numeric sentinel per check should
274
+ // expect these two.
275
275
  vacuityMutant: (args) => ({ ...args, count: String(VACUITY_SENTINEL_NUMBER) }),
276
276
  discriminatingWorlds: ({ count }) => {
277
277
  const wanted = parseCount(count) ?? 1;
@@ -316,7 +316,7 @@ var labelExists = defineCheck({
316
316
  template: "A label named {label} exists",
317
317
  params: { label: labelName },
318
318
  substrate: "final",
319
- // An achievement — task 23's seed defines no `Parity Complete`, so the
319
+ // An achievement — the seed defines no `Parity Complete`, so the
320
320
  // examinee has to create it.
321
321
  polarity: () => "positive",
322
322
  // The name is a caller-supplied literal compared against state.
@@ -339,7 +339,7 @@ var labelExists = defineCheck({
339
339
  reason: `no label named "${label}" exists`,
340
340
  // The label COLLECTION — the honest citation for a lookup that found
341
341
  // nothing, and the arm a reader most wants to open: see for yourself
342
- // that the name is not in it (F-1197).
342
+ // that the name is not in it.
343
343
  ...found.searched === void 0 ? {} : { evidenceStatePaths: [found.searched] }
344
344
  };
345
345
  }
@@ -393,7 +393,7 @@ var messageHasLabel = defineCheck({
393
393
  // places: the message row it resolved by id, and the join table it then
394
394
  // questioned. Labels are not nested under their message in this export —
395
395
  // that is the whole reason `messageCarriesLabel` exists — so one pointer
396
- // could not say where this verdict came from (F-1197).
396
+ // could not say where this verdict came from.
397
397
  evidenceStatePaths: [found.path, carried.path]
398
398
  };
399
399
  }
@@ -513,7 +513,7 @@ var oneMessagePerRecipient = defineCheck({
513
513
  // ../packages/twin-gmail/dist/src/check-tape.js
514
514
  var noUnsupportedEndpoint = defineCheck({
515
515
  id: "gmail.no-unsupported-endpoint",
516
- 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 \u2014 which matters here, because task 27 runs gmail and github together.',
516
+ 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 \u2014 which matters here, because a single task may run gmail and github together.',
517
517
  // No slots, and no twin word. The legacy cloud rule accepted "No unsupported
518
518
  // Gmail endpoint was called" alongside the bare form, plus plural and `were`
519
519
  // variants, because an author typed English. Under position 2 an author PICKS
@@ -1,5 +1,5 @@
1
1
  import { readManifest, normalizeManifestTwins } from './chunk-KUVTL4NZ.js';
2
- import { createHostedClient, perTwinReturnedByCloud, parseTaskFile, runAgentCommand, writeRunArtifactsCore, toTwinHttpEvent, redactJsonl, uploadRunBlobs, scoreFromFinalizeResponse, scoreStatus } from './chunk-4ILBTPO4.js';
2
+ import { createHostedClient, perTwinReturnedByCloud, parseTaskFile, runAgentCommand, writeRunArtifactsCore, toTwinHttpEvent, redactJsonl, uploadRunBlobs, scoreFromFinalizeResponse, scoreStatus } from './chunk-5TEVH6RY.js';
3
3
  import { MOUNTED_TWINS, HostedAuthError, HostedDiscardRefusedError, HostedQuotaError, HostedOrchError, HostedTrialError, agentResponseSchema } from './chunk-PQYIAA6K.js';
4
4
  import { redactSecrets, redactEvent } from './chunk-SG6ZTIMT.js';
5
5
  import { existsSync } from 'node:fs';
@@ -98,7 +98,7 @@ var noMessageContaining = defineCheck({
98
98
  params: { needle: messageNeedle, scope: messageScope },
99
99
  substrate: "final",
100
100
  polarity: () => "negative",
101
- // The quoted needle IS the subject (F-1028).
101
+ // The quoted needle IS the subject.
102
102
  subject: ({ needle }) => needle,
103
103
  // The needle is SCANNED, so falsifying it is a real trigger. The scope only
104
104
  // narrows the candidate set, so a closed set costs nothing here.
@@ -127,7 +127,7 @@ var noMessageContaining = defineCheck({
127
127
  passed: !hit,
128
128
  reason: hit ? `${publicOnly ? "public " : ""}channel "${hit.name}" has a message containing "${needle}"` : `no ${publicOnly ? "public channel" : "channel"} has a message containing "${needle}" (${candidates.length} channel(s) scanned)`,
129
129
  // The workspace's channel list, on BOTH arms and under both scopes
130
- // (F-1197). Not the hitting channel on a fail and the list on a pass:
130
+ // Not the hitting channel on a fail and the list on a pass:
131
131
  // a citation whose PRECISION moves with the verdict is fine, but one whose
132
132
  // PRESENCE does is not, and once both arms must cite, the list is the
133
133
  // honest answer under `any public channel` too — the public set is
@@ -144,11 +144,10 @@ var noMessagePosted = defineCheck({
144
144
  substrate: "final",
145
145
  polarity: () => "negative",
146
146
  // No subject, and NOT merely because a channel name is a selector no redactor
147
- // can eat. pome-cloud's `corpus.test.ts` proves the UNGUARDED
148
- // redaction-hazard arm "a predicate that compares a literal but forgets
149
- // `subject`" using THIS check with a channel named like a key. Declaring a
150
- // subject here would reclassify that case as `dead` and leave the
151
- // forgot-`subject` regression arm with nothing to test.
147
+ // can eat. This check is the canonical example of a predicate that compares a
148
+ // literal and deliberately declares no subject, so it is the one a consumer's
149
+ // own test suite is likely to reach for when exercising that case. Declaring a
150
+ // subject here would change which category it demonstrates.
152
151
  subject: () => null,
153
152
  // No falsifiable trigger. The channel is the only literal and it only
154
153
  // RESOLVES: a sentinel channel is `channel_not_found`, which skips, so the
@@ -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-4ILBTPO4.js';
4
- import { createRecorder, bootTwin } from './chunk-M3X6OT4N.js';
3
+ import { parseTaskFile, seedStateForTwin, runAgentCommand, writeRunArtifactsCore } from './chunk-5TEVH6RY.js';
4
+ import { createRecorder, bootTwin } from './chunk-2CMCN5PW.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,17 +1,17 @@
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-WR7KP3LE.js';
3
+ import { runTask, demoTaskPath, DEMO_TASK_NAME, DEMO_REPO } from './chunk-PRCZLT4W.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-4ILBTPO4.js';
6
+ import { createHostedClient, parseTaskFile, uploadRunBlobs, scoreFromFinalizeResponse, scoreStatus, outcomeOf } from './chunk-5TEVH6RY.js';
7
7
  import './chunk-NW7HGA2K.js';
8
8
  import { HostedQuotaError, HostedOrchError } from './chunk-PQYIAA6K.js';
9
9
  import './chunk-SGDUD7KK.js';
10
10
  import './chunk-NJ246QPJ.js';
11
11
  import './chunk-ZKID2HS3.js';
12
- import { bootTwin } from './chunk-M3X6OT4N.js';
13
- import './chunk-A3IDZXJY.js';
14
- import './chunk-LZIPGCQJ.js';
12
+ import { bootTwin } from './chunk-2CMCN5PW.js';
13
+ import './chunk-BK7HSHRA.js';
14
+ import './chunk-35TG2GHS.js';
15
15
  import './chunk-VBATFCWR.js';
16
16
  import './chunk-SG6ZTIMT.js';
17
17
  import { readFile } from 'node:fs/promises';
@@ -1,14 +1,14 @@
1
1
  import { newGroupId, criterionPhrase } from './chunk-RGZBC7NF.js';
2
- import { runTaskHosted, resolveRunAgentIdentity } from './chunk-JULH5ECU.js';
2
+ import { runTaskHosted, resolveRunAgentIdentity } from './chunk-F7YLHTCM.js';
3
3
  import './chunk-KUVTL4NZ.js';
4
- import { createHostedClient, parseTaskFile, outcomeOf } from './chunk-4ILBTPO4.js';
4
+ import { createHostedClient, parseTaskFile, outcomeOf } from './chunk-5TEVH6RY.js';
5
5
  import './chunk-NW7HGA2K.js';
6
6
  import { HostedQuotaError, HostedTrialError } from './chunk-PQYIAA6K.js';
7
7
  import './chunk-SGDUD7KK.js';
8
8
  import './chunk-NJ246QPJ.js';
9
9
  import './chunk-ZKID2HS3.js';
10
- import './chunk-A3IDZXJY.js';
11
- import './chunk-LZIPGCQJ.js';
10
+ import './chunk-BK7HSHRA.js';
11
+ import './chunk-35TG2GHS.js';
12
12
  import './chunk-VBATFCWR.js';
13
13
  import './chunk-SG6ZTIMT.js';
14
14
  import { randomUUID } from 'node:crypto';
@@ -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-LZIPGCQJ.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-35TG2GHS.js';
2
2
  import './chunk-VBATFCWR.js';
3
3
  export { redactEvent, redactSecrets } from './chunk-SG6ZTIMT.js';
@@ -1,23 +1,23 @@
1
1
  #!/usr/bin/env node
2
- import { DEFAULT_CONTROL_PLANE_URL, DEFAULT_DASHBOARD_URL, clearLocalCredentials, friendlyHostedError, runSessionCreate, runSessionList, runSessionStop, resolveCredentials, runTaskHosted, discoverRunSet, loadTrialEvents, persistCredentialsAfterLogin, DEFAULT_DOCS_SITE_ORIGIN, resolveSeams, resolveCachedAgentId, readLinkCache, postAgentResolver, writeLinkCache, ensurePomeGitignored } from '../../chunk-JULH5ECU.js';
2
+ import { DEFAULT_CONTROL_PLANE_URL, DEFAULT_DASHBOARD_URL, clearLocalCredentials, friendlyHostedError, runSessionCreate, runSessionList, runSessionStop, resolveCredentials, runTaskHosted, discoverRunSet, loadTrialEvents, persistCredentialsAfterLogin, DEFAULT_DOCS_SITE_ORIGIN, resolveSeams, resolveCachedAgentId, readLinkCache, postAgentResolver, writeLinkCache, ensurePomeGitignored } from '../../chunk-F7YLHTCM.js';
3
3
  import { readManifest, writeManifest, MANIFEST_JSON, readRequiredManifest, normalizeManifestTwins } from '../../chunk-KUVTL4NZ.js';
4
- import { assetPath, runTask, resolvePackageRoot, DEMO_TASK_NAME, demoTaskPath } from '../../chunk-WR7KP3LE.js';
4
+ import { assetPath, runTask, resolvePackageRoot, DEMO_TASK_NAME, demoTaskPath } from '../../chunk-PRCZLT4W.js';
5
5
  import '../../chunk-XDU6TD4O.js';
6
6
  import '../../chunk-CBFKZZBR.js';
7
- import { parseTaskFile, scoreStatus, runScoreLine, readLatestRun, readMetaSummary, readConfigTwins, scoreCountsSummary, markerFor, outcomeOf, criterionMarkerLabel, twinSkipSuffix, readCodeCriteria, createHostedClient, toTwinHttpEvent, redactJsonl, scoreFromFinalizeResponse, parseGitHubSeedState, uploadRunBlobs } from '../../chunk-4ILBTPO4.js';
7
+ import { parseTaskFile, scoreStatus, runScoreLine, readLatestRun, readMetaSummary, readConfigTwins, scoreCountsSummary, markerFor, outcomeOf, criterionMarkerLabel, twinSkipSuffix, readCodeCriteria, createHostedClient, toTwinHttpEvent, redactJsonl, scoreFromFinalizeResponse, parseGitHubSeedState, uploadRunBlobs } from '../../chunk-5TEVH6RY.js';
8
8
  import '../../chunk-NW7HGA2K.js';
9
9
  import { MOUNTED_TWINS, deriveAgentSlug, exitCodeFor, HostedUsageError, HostedOrchError, HostedAuthError, HostedQuotaError } from '../../chunk-PQYIAA6K.js';
10
10
  import { TAPE_ASSERTABLE_TOOLS } from '../../chunk-FKZZWWYC.js';
11
11
  import { seedSchema } from '../../chunk-SGDUD7KK.js';
12
- import { SLACK_CHECKS } from '../../chunk-IY6G5NWT.js';
13
- import { GMAIL_CHECKS } from '../../chunk-5ETJZJR6.js';
12
+ import { SLACK_CHECKS } from '../../chunk-LH4EGGQW.js';
13
+ import { GMAIL_CHECKS } from '../../chunk-EU6SGN7A.js';
14
14
  import '../../chunk-NJ246QPJ.js';
15
- import { LINEAR_CHECKS } from '../../chunk-XS66ZRBJ.js';
15
+ import { LINEAR_CHECKS } from '../../chunk-3QVSXFJI.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-NY55QTVQ.js';
18
- import '../../chunk-M3X6OT4N.js';
19
- import { TWIN_NAME_LIST, isTwinName, createGitHubSmokeApp } from '../../chunk-A3IDZXJY.js';
20
- import '../../chunk-LZIPGCQJ.js';
18
+ import '../../chunk-2CMCN5PW.js';
19
+ import { TWIN_NAME_LIST, isTwinName, createGitHubSmokeApp } from '../../chunk-BK7HSHRA.js';
20
+ import '../../chunk-35TG2GHS.js';
21
21
  import { isLegacyEventRow, eventSchema } from '../../chunk-VBATFCWR.js';
22
22
  import { redactEvent, redactSecrets } from '../../chunk-SG6ZTIMT.js';
23
23
  import { Command } from 'commander';
@@ -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-RVUEXCKN.js');
853
+ const { GitHubDomain, openGitHubCloneDatabase } = await import('../../src-WQE3MFBD.js');
854
854
  const db = openGitHubCloneDatabase(":memory:");
855
855
  try {
856
856
  new GitHubDomain(db).seed(seed);
@@ -1589,7 +1589,7 @@ var issueStateCheck = defineCheck({
1589
1589
  template: "Issue #{issue} in `{repo}` is in state {state}",
1590
1590
  params: { issue: issueNumber, repo: repoRef, state: issueState },
1591
1591
  substrate: "final",
1592
- // Per-arg. "is closed" asks the examinee to close it; "is open" is F-915's
1592
+ // Per-arg. "is closed" asks the examinee to close it; "is open" is the twin's
1593
1593
  // "the agent did not close issue #1" — a prohibition wearing a state word.
1594
1594
  polarity: ({ state }) => state === "open" ? "negative" : "positive",
1595
1595
  subject: () => null,
@@ -1619,7 +1619,7 @@ var issueStateCheck = defineCheck({
1619
1619
  // The ROW, not `…/state` — the field this branch exists for is the one
1620
1620
  // that is absent, and a pointer at it would not resolve. Pointing at the
1621
1621
  // row is what lets a reader see the gap for themselves instead of taking
1622
- // the reason's word for it (F-1197).
1622
+ // the reason's word for it.
1623
1623
  evidenceStatePaths: [found.path]
1624
1624
  };
1625
1625
  }
@@ -1639,7 +1639,7 @@ var issueHasLabel = defineCheck({
1639
1639
  substrate: "final",
1640
1640
  polarity: () => "positive",
1641
1641
  // The label is a caller-supplied literal compared against the state tree, so
1642
- // a redactor that destroys it makes this check unable to fire (F-1028).
1642
+ // a redactor that destroys it makes this check unable to fire.
1643
1643
  subject: ({ label }) => label,
1644
1644
  // The label is what the scan ranges over; the issue number only resolves.
1645
1645
  vacuityMutant: (args) => ({ ...args, label: VACUITY_SENTINEL }),
@@ -1769,7 +1769,7 @@ var pullRequestStateCheck = defineCheck({
1769
1769
  template: "Pull request #{pr} in `{repo}` is {state}",
1770
1770
  params: { pr: prNumber, repo: repoRef, state: pullRequestState },
1771
1771
  substrate: "final",
1772
- // Per-arg, and the reason polarity takes the args at all: task 05 asserts
1772
+ // Per-arg, and the reason polarity takes the args at all: one shipped task asserts
1773
1773
  // "PR #1 is merged" and "PR #2 is not merged" through this one template.
1774
1774
  // "open" is the same prohibition as the issue check's.
1775
1775
  polarity: ({ state }) => state === "not merged" || state === "open" ? "negative" : "positive",
@@ -1809,7 +1809,7 @@ var pullRequestStateCheck = defineCheck({
1809
1809
  status: "skipped",
1810
1810
  reason: `pull request #${pr} has no ${onMergeFlag ? "merged" : "state"} field in state_final (state_incomplete)`,
1811
1811
  // The ROW: the field this branch exists for is the absent one, so a
1812
- // pointer at it would resolve to nothing (F-1197).
1812
+ // pointer at it would resolve to nothing.
1813
1813
  evidenceStatePaths: [found.path]
1814
1814
  };
1815
1815
  }
@@ -1924,7 +1924,7 @@ var pullRequestReviewExists = defineCheck({
1924
1924
  // ../packages/twin-github/dist/src/check-repos.js
1925
1925
  var noNewLabels = defineCheck({
1926
1926
  id: "github.no-new-labels",
1927
- // F-1074 — the same explanation the comment below carries, in the one place
1927
+ // The same explanation the comment below carries, in the one place
1928
1928
  // an author can actually reach it.
1929
1929
  description: "Compares the repository's label DEFINITIONS in the seed against the final state. Applying an ALREADY-DEFINED label to an issue PASSES this check \u2014 only creating a label the repo did not already define fails it. `addIssueLabels` rejects an undefined label, so an examinee cannot apply a new one without creating it first, which is what makes this tight. Needs the seed: it is a delta, not a state assertion.",
1930
1930
  // The repo is named on purpose. Without it the sentence reads as an
@@ -2110,7 +2110,7 @@ var noUnsupportedEndpoint = defineCheck({
2110
2110
  // and under position 2 an author PICKS the check rather than typing it — so
2111
2111
  // the legacy regex's optional twin word ("No unsupported GitHub endpoint was
2112
2112
  // called") and its plural/`were` variants are retired rather than ported,
2113
- // exactly as F-1075 retired `issue-has-label-generic`.
2113
+ // exactly as the generic `issue-has-label` phrasing was retired.
2114
2114
  template: "No unsupported endpoint was called",
2115
2115
  params: {},
2116
2116
  substrate: "tape",
@@ -2124,7 +2124,7 @@ var noUnsupportedEndpoint = defineCheck({
2124
2124
  // trigger is "a call with fidelity=unsupported exists", which lives on the
2125
2125
  // tape and not in the sentence. Reported as `no_trigger`, never as clean.
2126
2126
  vacuityMutant: () => null,
2127
- // F-1076 already shipped both of these as tests; this is the same pair,
2127
+ // Both of these already shipped as tests; this is the same pair,
2128
2128
  // promoted to the declaration.
2129
2129
  discriminatingWorlds: () => ({
2130
2130
  passing: tapeWorld([
@@ -2439,7 +2439,7 @@ var paymentIntentAmount = defineCheck({
2439
2439
  return {
2440
2440
  passed: found,
2441
2441
  reason: found ? `a PaymentIntent exists with amount ${wanted}` : `no PaymentIntent has amount ${wanted} (amounts: [${pis.map((pi) => pi.amount ?? "?").join(", ")}])`,
2442
- // The COLLECTION, not the matching row (F-1197). Every check in this file
2442
+ // The COLLECTION, not the matching row. Every check in this file
2443
2443
  // scans a whole collection and answers a question about the set — "does
2444
2444
  // one exist with…" — so the set is what was read. Citing the hit on a pass
2445
2445
  // and the collection on a fail would make the pointer's shape track the
@@ -2567,7 +2567,7 @@ var eventEmitted = defineCheck({
2567
2567
  id: "stripe.event-emitted",
2568
2568
  description: "Asserts the account's event log contains at least one event of this type. The twin delivers no webhooks in v1 \u2014 an examinee observes events by polling `GET /v1/events` \u2014 so this reads the log the twin appended, not anything the examinee received. It asserts nothing about WHICH resource the event names: `payment_intent.succeeded` is emitted by both the card confirm path and the x402 crypto-deposit settlement, and this check deliberately does not distinguish them, because the criterion asking for it is about the outcome rather than the rail. An absent `events` key is a SKIP.",
2569
2569
  // No quotes, and that is load-bearing: the corpus already says
2570
- // `payment_intent.succeeded is emitted`, so this template re-renders task 12's
2570
+ // `payment_intent.succeeded is emitted`, so this template re-renders that task's
2571
2571
  // existing criterion byte-identically and the migration rewrites it not at
2572
2572
  // all. The dot lives inside the closed set's members, which `oneOf` escapes,
2573
2573
  // so it matches a dot rather than any character.
@@ -2629,7 +2629,7 @@ var refundExists = defineCheck({
2629
2629
  return {
2630
2630
  passed: rows.found.length > 0,
2631
2631
  reason: rows.found.length > 0 ? `charge "${args.charge}" has ${rows.found.length} refund row(s)` : `charge "${args.charge}" has no refund rows`,
2632
- // The refund COLLECTION (F-1197). Rows are not nested under their charge —
2632
+ // The refund COLLECTION. Rows are not nested under their charge —
2633
2633
  // they carry a `charge` wire field — so the per-charge list this counted
2634
2634
  // exists nowhere in the tree, and on the zero side there is no row to point
2635
2635
  // at at all, which is precisely the arm a reader wants to open.
@@ -4490,7 +4490,7 @@ var DEFAULT_AGENT_FILE = "examples/agents/scripted-triage-agent.ts";
4490
4490
  var DEFAULT_AGENT_COMMAND = `node ${DEFAULT_AGENT_FILE}`;
4491
4491
  var MANIFEST_SCHEMA_URL = "https://pome.sh/schemas/v1/pome.json";
4492
4492
  function readPackageVersion() {
4493
- if ("0.21.7".length > 0) return "0.21.7";
4493
+ if ("0.21.9".length > 0) return "0.21.9";
4494
4494
  try {
4495
4495
  const here = dirname(fileURLToPath(import.meta.url));
4496
4496
  const candidates = [
@@ -4945,7 +4945,7 @@ function createProgram() {
4945
4945
  return;
4946
4946
  }
4947
4947
  {
4948
- const { runDoctorChecks } = await import('../../checks-4GJB73YX.js');
4948
+ const { runDoctorChecks } = await import('../../checks-ZWCORWK4.js');
4949
4949
  const { renderDoctorReport } = await import('../../render-ZQQ4UMNO.js');
4950
4950
  const doctorReport = await runDoctorChecks({ mode: useLocal ? "full" : "hosted" });
4951
4951
  if (!doctorReport.ok) {
@@ -4983,7 +4983,7 @@ function createProgram() {
4983
4983
  taskForRuns.config.runs
4984
4984
  );
4985
4985
  if (k > 1) {
4986
- const { runTrialGroup } = await import('../../runTrialGroup-YCSGW56C.js');
4986
+ const { runTrialGroup } = await import('../../runTrialGroup-BYUY5WJ7.js');
4987
4987
  const fileForRerun = relative(process.cwd(), file);
4988
4988
  const rerunCommand = defaultTask ? options.trials !== void 0 ? `pome run -n ${k}` : "pome run" : `pome run ${fileForRerun && !fileForRerun.startsWith("..") ? fileForRerun : file} -n ${k}`;
4989
4989
  const groupResult = await runTrialGroup({
@@ -5077,7 +5077,7 @@ function createProgram() {
5077
5077
  process.exitCode = 5;
5078
5078
  return;
5079
5079
  }
5080
- const { runDemo } = await import('../../runDemo-BCB6EDDN.js');
5080
+ const { runDemo } = await import('../../runDemo-7NYX7S5T.js');
5081
5081
  const result = await runDemo({
5082
5082
  apiBase: opts.apiUrl.replace(/\/$/, ""),
5083
5083
  dashboardBase: process.env.POME_DASHBOARD_URL ?? DEFAULT_DASHBOARD_URL,
@@ -5095,7 +5095,7 @@ function createProgram() {
5095
5095
  program.command("doctor").description(
5096
5096
  "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."
5097
5097
  ).action(async () => {
5098
- const { runDoctorChecks } = await import('../../checks-4GJB73YX.js');
5098
+ const { runDoctorChecks } = await import('../../checks-ZWCORWK4.js');
5099
5099
  const { renderDoctorReport } = await import('../../render-ZQQ4UMNO.js');
5100
5100
  const report = await runDoctorChecks();
5101
5101
  for (const line of renderDoctorReport(report, { passNote: true })) console.error(line);
@@ -5227,7 +5227,7 @@ function createProgram() {
5227
5227
  ).description(
5228
5228
  "Start a standalone twin as a long-lived foreground server (Ctrl-C to stop)"
5229
5229
  ).action(async (name, options) => {
5230
- const { runTwinStartCommand } = await import('../../twinStart-4OGP2GBY.js');
5230
+ const { runTwinStartCommand } = await import('../../twinStart-5ZWCVBPZ.js');
5231
5231
  await runTwinStartCommand(name, options);
5232
5232
  });
5233
5233
  twin.command("reset").argument("[name]", "Twin name (default: github)", "github").description("Reset standalone twin state").action(async (name) => {
@@ -1,6 +1,6 @@
1
- export { SLACK_CHECKS } from './chunk-IY6G5NWT.js';
1
+ export { SLACK_CHECKS } from './chunk-LH4EGGQW.js';
2
2
  import './chunk-NY55QTVQ.js';
3
- import { defineTwin, queryTokenResolver, formTokenResolver, UnknownToolError, openTwinDatabase, createApp } from './chunk-LZIPGCQJ.js';
3
+ import { defineTwin, queryTokenResolver, formTokenResolver, UnknownToolError, openTwinDatabase, createApp } from './chunk-35TG2GHS.js';
4
4
  import './chunk-VBATFCWR.js';
5
5
  import './chunk-SG6ZTIMT.js';
6
6
  import { z, ZodError } from 'zod';
@@ -1,8 +1,8 @@
1
- export { LINEAR_CHECKS } from './chunk-XS66ZRBJ.js';
1
+ export { LINEAR_CHECKS } from './chunk-3QVSXFJI.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, 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-ZKID2HS3.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-ZKID2HS3.js';
4
4
  import './chunk-NY55QTVQ.js';
5
- import { openTwinDatabase, defineTwin, createApp } from './chunk-LZIPGCQJ.js';
5
+ import { openTwinDatabase, defineTwin, createApp } from './chunk-35TG2GHS.js';
6
6
  import './chunk-VBATFCWR.js';
7
7
  import './chunk-SG6ZTIMT.js';
8
8
  import { createHmac, timingSafeEqual, createHash, randomBytes } from 'node:crypto';
@@ -1,4 +1,4 @@
1
- import { failureInjectionRuleSchema, openTwinDatabase, createFailureInjectionStore, defineTwin, twinBuildInfo, failureInjectionMiddleware, createApp, FAILURE_INJECTION_OVERRIDE_KEY, recordedRequestHeaders, UnknownToolError } from './chunk-LZIPGCQJ.js';
1
+ import { failureInjectionRuleSchema, openTwinDatabase, createFailureInjectionStore, defineTwin, twinBuildInfo, failureInjectionMiddleware, createApp, FAILURE_INJECTION_OVERRIDE_KEY, recordedRequestHeaders, UnknownToolError } from './chunk-35TG2GHS.js';
2
2
  import './chunk-VBATFCWR.js';
3
3
  import './chunk-SG6ZTIMT.js';
4
4
  import { z, ZodError } from 'zod';
@@ -1,8 +1,8 @@
1
- export { GMAIL_CHECKS } from './chunk-5ETJZJR6.js';
1
+ export { GMAIL_CHECKS } from './chunk-EU6SGN7A.js';
2
2
  import { gmailErrorEnvelope, gmailSeedSchema, parseSeed, defaultSeedState, notFound, invalidArgument, checkFault, unsupported, validateSearchQuery, SEARCH_MAILBOX_MESSAGE_BUDGET, GmailError, parseSearchQuery, CATEGORY_LABELS, parseDate, parseSize, KNOWN_FIELDS, parseDuration, assertHasOperator } from './chunk-NJ246QPJ.js';
3
3
  export { DEFAULT_GMAIL_AGENT_EMAIL, GmailError, SEARCH_MAILBOX_MESSAGE_BUDGET, agentPathInboxMailbox, defaultSeedState, gmailErrorEnvelope, gmailSeedSchema, loadSeedFromEnv, parseSearchQuery, parseSeed, validateSearchQuery } from './chunk-NJ246QPJ.js';
4
4
  import './chunk-NY55QTVQ.js';
5
- import { defineTwin, openTwinDatabase, createApp } from './chunk-LZIPGCQJ.js';
5
+ import { defineTwin, openTwinDatabase, createApp } from './chunk-35TG2GHS.js';
6
6
  import './chunk-VBATFCWR.js';
7
7
  import './chunk-SG6ZTIMT.js';
8
8
  import { createHash, createHmac, timingSafeEqual, randomBytes } from 'node:crypto';
@@ -1,7 +1,7 @@
1
1
  import './chunk-FKZZWWYC.js';
2
2
  import { defaultSeedState, parseSeed } from './chunk-SGDUD7KK.js';
3
3
  export { defaultSeedState, parseSeed, seedSchema } from './chunk-SGDUD7KK.js';
4
- import { defineTwin, twinBuildInfo, UnknownToolError, openTwinDatabase, createApp } from './chunk-LZIPGCQJ.js';
4
+ import { defineTwin, twinBuildInfo, UnknownToolError, openTwinDatabase, createApp } from './chunk-35TG2GHS.js';
5
5
  import './chunk-VBATFCWR.js';
6
6
  import './chunk-SG6ZTIMT.js';
7
7
  import { z, ZodError } from 'zod';
@@ -0,0 +1,5 @@
1
+ export { UnsupportedTwinError, bootTwin } from './chunk-2CMCN5PW.js';
2
+ export { STRIPE_LOCAL_ACCOUNT_ID } from './chunk-BK7HSHRA.js';
3
+ import './chunk-35TG2GHS.js';
4
+ import './chunk-VBATFCWR.js';
5
+ import './chunk-SG6ZTIMT.js';
@@ -1,6 +1,6 @@
1
- import { bootTwin } from './chunk-M3X6OT4N.js';
2
- import { isTwinName, TWIN_NAMES, defaultPortFor, TWIN_REGISTRY } from './chunk-A3IDZXJY.js';
3
- import './chunk-LZIPGCQJ.js';
1
+ import { bootTwin } from './chunk-2CMCN5PW.js';
2
+ import { isTwinName, TWIN_NAMES, defaultPortFor, TWIN_REGISTRY } from './chunk-BK7HSHRA.js';
3
+ import './chunk-35TG2GHS.js';
4
4
  import './chunk-VBATFCWR.js';
5
5
  import './chunk-SG6ZTIMT.js';
6
6
  import { randomBytes } from 'node:crypto';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pome-sh/cli",
3
- "version": "0.21.7",
4
- "description": "Digital-twin testing for AI agents run tasks against resettable local or hosted twins and record tool-call traces for evaluation on pome.sh.",
3
+ "version": "0.21.9",
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",
7
7
  "agents",
@@ -1,5 +0,0 @@
1
- export { UnsupportedTwinError, bootTwin } from './chunk-M3X6OT4N.js';
2
- export { STRIPE_LOCAL_ACCOUNT_ID } from './chunk-A3IDZXJY.js';
3
- import './chunk-LZIPGCQJ.js';
4
- import './chunk-VBATFCWR.js';
5
- import './chunk-SG6ZTIMT.js';