@pome-sh/cli 0.26.9 → 0.26.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/dist/build-info.json +3 -3
  2. package/dist/{checks-NSHCXA6N.js → checks-3LVRPHOK.js} +4 -4
  3. package/dist/{chunk-IDNSKKEC.js → chunk-2ZGVDTJC.js} +1 -1
  4. package/dist/{chunk-RG32W733.js → chunk-6IVXTU67.js} +3 -3
  5. package/dist/{chunk-JUESW6G4.js → chunk-6KJC4BTO.js} +5 -5
  6. package/dist/{chunk-X7V5DMA7.js → chunk-ANKO3RCB.js} +4 -4
  7. package/dist/{chunk-64NZFX4Z.js → chunk-BZO3YCJS.js} +1 -1
  8. package/dist/{chunk-WEKJIGUD.js → chunk-CFXEETE3.js} +4 -4
  9. package/dist/{chunk-O5MCNQY4.js → chunk-CXGMLUZ4.js} +1 -1
  10. package/dist/{chunk-CKN743FJ.js → chunk-EIUCTFQV.js} +11 -11
  11. package/dist/{chunk-5EV4SG3F.js → chunk-FQGR7KDT.js} +3 -3
  12. package/dist/{chunk-2Q3P45LK.js → chunk-IZFM7W2V.js} +1 -1
  13. package/dist/{chunk-5EE7YWA3.js → chunk-KIXYRPVY.js} +2 -2
  14. package/dist/{chunk-B22TYIEM.js → chunk-QXQAVKTE.js} +6 -6
  15. package/dist/{runDemo-SA55CMWG.js → runDemo-XO5R5QTM.js} +8 -8
  16. package/dist/{runTrialGroup-IXIVA2R3.js → runTrialGroup-CLJJOO4J.js} +8 -8
  17. package/dist/{server-TPAFPKLC.js → server-TK5YBK6E.js} +2 -2
  18. package/dist/src/cli/main.js +20 -20
  19. package/dist/{src-AAF7TZMO.js → src-FXRQSKBK.js} +31 -32
  20. package/dist/{src-2M54EY2P.js → src-GWA7QVQS.js} +9 -9
  21. package/dist/{src-UEO2KIBJ.js → src-JJNS46T6.js} +55 -55
  22. package/dist/{src-4E5WAGNJ.js → src-L6F5YXSP.js} +14 -14
  23. package/dist/{src-Q4MBHYC5.js → src-Q4JNJE5S.js} +14 -14
  24. package/dist/twinHarness-6NVAKIOB.js +5 -0
  25. package/dist/{twinStart-2VP545N6.js → twinStart-WIT4UVAC.js} +4 -4
  26. package/package.json +1 -1
  27. package/dist/twinHarness-OC6VQRXO.js +0 -5
@@ -1,9 +1,9 @@
1
1
  import './chunk-C4BVTUA3.js';
2
- import { defaultSeedState, parseSeed } from './chunk-B22TYIEM.js';
3
- export { defaultSeedState, parseSeed, seedSchema } from './chunk-B22TYIEM.js';
4
- import { routeInputDeclarer, integerInput, mountDeclaredRoute, UndeclaredInputError, MalformedBodyError } from './chunk-2Q3P45LK.js';
5
- import { loadMcpToolFixture, defineTwin, twinBuildInfo, deriveMcpToolTable, UnknownToolError, openTwinDatabase, createApp, typeDisagreements } from './chunk-WEKJIGUD.js';
6
- import './chunk-JUESW6G4.js';
2
+ import { defaultSeedState, parseSeed } from './chunk-QXQAVKTE.js';
3
+ export { defaultSeedState, parseSeed, seedSchema } from './chunk-QXQAVKTE.js';
4
+ import { routeInputDeclarer, integerInput, mountDeclaredRoute, UndeclaredInputError, MalformedBodyError } from './chunk-IZFM7W2V.js';
5
+ import { loadMcpToolFixture, defineTwin, twinBuildInfo, deriveMcpToolTable, UnknownToolError, openTwinDatabase, createApp, typeDisagreements } from './chunk-CFXEETE3.js';
6
+ import './chunk-6KJC4BTO.js';
7
7
  import './chunk-SG6ZTIMT.js';
8
8
  import { z, ZodError } from 'zod';
9
9
  import { createHash, randomUUID } from 'node:crypto';
@@ -26,7 +26,7 @@ var commentBody = { body: z.string().min(1) };
26
26
  var GITHUB_ROUTES = {
27
27
  // ----- search -----
28
28
  //
29
- // GH-DECL-IN-001 / GH-DECL-IN-002 (F-1389) — all five take `q` and nothing but
29
+ // GH-DECL-IN-001 / GH-DECL-IN-002 — all five take `q` and nothing but
30
30
  // `q`. GitHub's search API has ONE scoping input and encodes every filter as a
31
31
  // qualifier inside it (`repo:octocat/hello-world`, `state:open`); its OpenAPI
32
32
  // declares `q, sort, order, per_page, page`. `/search/code`,
@@ -76,7 +76,7 @@ var GITHUB_ROUTES = {
76
76
  method: "POST",
77
77
  path: "/user/repos",
78
78
  bodyEncoding: "json",
79
- // F-1389 (GH-DECL-IN-003) — no `owner`. This surface creates a repository
79
+ // GH-DECL-IN — no `owner`. This surface creates a repository
80
80
  // for the AUTHENTICATED USER, which is its whole meaning;
81
81
  // `repos/create-for-authenticated-user` declares 23 body properties and
82
82
  // `owner` is not one. `routes.ts` passed the body straight to
@@ -129,12 +129,12 @@ var GITHUB_ROUTES = {
129
129
  content: z.string(),
130
130
  branch: z.string().optional(),
131
131
  sha: z.string().optional()
132
- // F-1389 (GH-DECL-IN-005) — no `encoding`. GitHub declares `content` as
132
+ // GH-DECL-IN — no `encoding`. GitHub declares `content` as
133
133
  // "the new file content, using Base64 encoding" and takes no `encoding`
134
134
  // parameter: base64 is the only encoding this surface has. Undeclared
135
135
  // now, so github's measured disposition (`ignore`) discards it.
136
136
  //
137
- // F-1460 closed the behavioural half too: `routes.ts` base64-decodes this
137
+ // The behavioural half is closed too: `routes.ts` base64-decodes this
138
138
  // field via `rest-content.ts`, and invalid base64 gets GitHub's own 422.
139
139
  // ⚠️ ON THIS DOOR ONLY — the MCP write tools take plain text, because
140
140
  // GitHub's MCP server does. Divergence 24 is retired; see FIDELITY.md
@@ -1488,10 +1488,10 @@ var toolArgumentSchemas = [
1488
1488
  },
1489
1489
  {
1490
1490
  name: "create_or_update_file",
1491
- // F-1460 — no `encoding`. GitHub's MCP server declares none and needs none:
1491
+ // No `encoding`. GitHub's MCP server declares none and needs none:
1492
1492
  // it takes `content` as PLAIN TEXT and base64-encodes it itself before
1493
1493
  // calling the REST API, which its own tool description says outright. The
1494
- // switch survived F-1389 because that ticket removed it from the REST
1494
+ // switch survived the declaration cut because that only removed it from the REST
1495
1495
  // DECLARATION, and the served table (a capture) and these validators are two
1496
1496
  // different objects. Undeclared now, so `ignore` discards it if sent.
1497
1497
  schema: z.object({ ...ownerRepo, path: z.string().min(1), message: z.string().min(1), content: z.string(), branch: z.string().min(1), sha: z.string().optional() })
@@ -1506,7 +1506,7 @@ var toolArgumentSchemas = [
1506
1506
  // file's `content` straight to a Git tree entry, which takes plain UTF-8.
1507
1507
  schema: z.object({ ...ownerRepo, branch: z.string().optional(), message: z.string().min(1), files: z.array(z.object({ path: z.string().min(1), content: z.string() })).min(1) })
1508
1508
  },
1509
- // GitHub's consolidated issue pair (F-1376). `issue_read` and `issue_write`
1509
+ // GitHub's consolidated issue pair. `issue_read` and `issue_write`
1510
1510
  // replace the seven single-purpose tools this twin used to serve — `get_issue`,
1511
1511
  // `update_issue`, `list_issue_comments`, `list_issue_labels`,
1512
1512
  // `add_issue_labels`, `remove_issue_label`, `add_assignees` — none of which
@@ -1556,7 +1556,7 @@ var toolArgumentSchemas = [
1556
1556
  name: "add_issue_comment",
1557
1557
  schema: z.object({ ...ownerRepo, issue_number: z.coerce.number().int().positive().optional(), issueNumber: z.coerce.number().int().positive().optional(), body: z.string().min(1) }).refine((value) => value.issue_number ?? value.issueNumber, "issue_number is required")
1558
1558
  },
1559
- // Kept, and registered as a divergence rather than removed (F-1376): GitHub
1559
+ // Kept, and registered as a divergence rather than removed: GitHub
1560
1560
  // serves this exact name from the `issues` toolset when the client sets
1561
1561
  // `X-MCP-Features: issues_granular`, so an examinee can legitimately call it.
1562
1562
  // The divergence is that this twin serves it unconditionally.
@@ -1573,7 +1573,7 @@ var toolArgumentSchemas = [
1573
1573
  perPage: z.coerce.number().int().positive().optional()
1574
1574
  })
1575
1575
  },
1576
- // GitHub's consolidated pull-request reader (F-1376), replacing the seven
1576
+ // GitHub's consolidated pull-request reader, replacing the seven
1577
1577
  // `get_pull_request*` tools GitHub no longer declares.
1578
1578
  {
1579
1579
  name: "pull_request_read",
@@ -1628,7 +1628,7 @@ var toolArgumentSchemas = [
1628
1628
  name: "create_pull_request",
1629
1629
  schema: z.object({ ...ownerRepo, title: z.string().min(1), body: z.string().optional(), head: z.string().min(1), base: z.string().optional() })
1630
1630
  },
1631
- // ===== v2 hot paths (FDRS-300) ==========================================
1631
+ // ===== v2 hot paths ==========================================
1632
1632
  // Cluster A — branches & files
1633
1633
  {
1634
1634
  name: "list_branches",
@@ -1656,7 +1656,7 @@ var toolArgumentSchemas = [
1656
1656
  // fourteen tools GitHub's MCP server does not register under any toolset or
1657
1657
  // feature flag. They were GitHub REST operations that were never MCP tools,
1658
1658
  // so an examinee could only ever have reached them the way it still can —
1659
- // over this twin's REST door, which is unchanged (F-1376, group D).
1659
+ // over this twin's REST door, which is unchanged (group D).
1660
1660
  // Cluster G — tags & releases
1661
1661
  {
1662
1662
  name: "list_tags",
@@ -1675,7 +1675,7 @@ var toolArgumentSchemas = [
1675
1675
  name: "get_me",
1676
1676
  schema: z.object({})
1677
1677
  },
1678
- // M5 hot gaps (F-735)
1678
+ // M5 hot gaps
1679
1679
  {
1680
1680
  name: "search_commits",
1681
1681
  schema: z.object({ query: z.string().optional(), q: z.string().optional(), owner: z.string().optional(), repo: z.string().optional(), ...pageShape }).refine((value) => value.query !== void 0 || value.q !== void 0, "query is required")
@@ -1706,7 +1706,7 @@ var MUTATING_TOOL_NAMES = /* @__PURE__ */ new Set([
1706
1706
  "merge_pull_request",
1707
1707
  "update_pull_request_branch",
1708
1708
  "create_pull_request",
1709
- // v2 hot paths (FDRS-300)
1709
+ // v2 hot paths
1710
1710
  "delete_file",
1711
1711
  "update_pull_request",
1712
1712
  "add_reply_to_pull_request_comment"
@@ -1797,12 +1797,12 @@ function dispatchTool(domain, name, parsed, onDelta, options = {}) {
1797
1797
  // GitHub distinguishes the issue-level `get_comments` from the
1798
1798
  // diff-level `get_review_comments`, and so does this twin: a PR's
1799
1799
  // CONVERSATION lives in `issue_comments`, keyed on the PR's own number
1800
- // because GitHub models a pull request as an issue (F-1151), while the
1800
+ // because GitHub models a pull request as an issue, while the
1801
1801
  // comments anchored to a file and line live in
1802
1802
  // `pull_request_review_comments`. Both halves of the justification that
1803
1803
  // stood here — one thread per PR, a split the twin does not model —
1804
- // stopped being true at F-1151, and F-1421 then gave the seed both
1805
- // vocabularies as separate fields (F-1423).
1804
+ // stopped being true, and the seed then gained both
1805
+ // vocabularies as separate fields.
1806
1806
  case "get_comments":
1807
1807
  return domain.getPullRequestConversation(pull);
1808
1808
  case "get_review_comments":
@@ -1836,7 +1836,7 @@ function dispatchTool(domain, name, parsed, onDelta, options = {}) {
1836
1836
  return domain.updatePullRequestBranch(normalizePullNumber(parsed), onDelta);
1837
1837
  case "create_pull_request":
1838
1838
  return domain.createPullRequest({ ...parsed, actor: parsed.actor ?? options.actor }, onDelta);
1839
- // ===== v2 hot paths (FDRS-300) ========================================
1839
+ // ===== v2 hot paths ========================================
1840
1840
  case "list_branches":
1841
1841
  return domain.listBranchesForRepo(parsed);
1842
1842
  case "delete_file":
@@ -1855,7 +1855,7 @@ function dispatchTool(domain, name, parsed, onDelta, options = {}) {
1855
1855
  return domain.getLatestRelease(parsed);
1856
1856
  case "get_me":
1857
1857
  return domain.getMe({ actor: options.actor });
1858
- // M5 hot gaps (F-735)
1858
+ // M5 hot gaps
1859
1859
  case "search_commits":
1860
1860
  return domain.searchCommits(parsed);
1861
1861
  case "get_release_by_tag":
@@ -1911,7 +1911,7 @@ var githubAccessControlEndpointSchema = z.object({
1911
1911
  category: githubAccessControlCategorySchema,
1912
1912
  /** Default allow/deny when a session has no explicit override. */
1913
1913
  default_allowed: z.boolean(),
1914
- /** FDRS-300 v2 hot-path; false for the original 25-endpoint surface. */
1914
+ /** v2 hot-path; false for the original 25-endpoint surface. */
1915
1915
  v2: z.boolean().default(false)
1916
1916
  });
1917
1917
  var githubAccessControlCategoryGroupSchema = z.object({
@@ -2222,7 +2222,7 @@ CREATE TABLE IF NOT EXISTS issue_labels (
2222
2222
  );
2223
2223
 
2224
2224
  -- issue_number names an issue OR a pull request, so no FK to issues \u2014 see
2225
- -- ensureCommentsAllowPullRequests below (F-1151).
2225
+ -- ensureCommentsAllowPullRequests below.
2226
2226
  CREATE TABLE IF NOT EXISTS issue_comments (
2227
2227
  id INTEGER PRIMARY KEY AUTOINCREMENT,
2228
2228
  repo_id INTEGER NOT NULL,
@@ -2271,7 +2271,7 @@ CREATE TABLE IF NOT EXISTS pull_request_files (
2271
2271
  raw_url TEXT NOT NULL DEFAULT '',
2272
2272
  contents_url TEXT NOT NULL DEFAULT '',
2273
2273
  patch TEXT NOT NULL DEFAULT '',
2274
- -- F-1500 \u2014 the pre-rename path, NULL on every status but 'renamed'. Nullable
2274
+ -- The pre-rename path, NULL on every status but 'renamed'. Nullable
2275
2275
  -- rather than DEFAULT '': the serializer reads presence off the status, and
2276
2276
  -- an empty string here would be indistinguishable from a rename whose source
2277
2277
  -- path the diff failed to resolve. (No backticks in this literal: it is a
@@ -2458,7 +2458,7 @@ SET
2458
2458
  head_sha = COALESCE(head_sha, (SELECT head_sha FROM branches WHERE branches.repo_id = pull_requests.head_repo_id AND branches.name = pull_requests.head_ref)),
2459
2459
  base_sha = COALESCE(base_sha, (SELECT head_sha FROM branches WHERE branches.repo_id = pull_requests.base_repo_id AND branches.name = pull_requests.base_ref));
2460
2460
 
2461
- -- F-1459. \`updated_at\` arrived after \`releases\` existed, so a database written
2461
+ -- \`updated_at\` arrived after \`releases\` existed, so a database written
2462
2462
  -- by an earlier build has it at the column default (''). A release this twin
2463
2463
  -- serves has never been edited \u2014 there is no release-update route \u2014 so its
2464
2464
  -- update instant IS its creation instant, and backfilling is exact rather than
@@ -2718,7 +2718,7 @@ function branchJson(branch, repo) {
2718
2718
  // Upstream `commit.url` is a required non-null string; the twin surfaces
2719
2719
  // null in the pre-resolution state (no commit seeded yet). Intentional
2720
2720
  // twin behavior — narrow the null away for the type anchor only
2721
- // (FDRS-454: a faithful twin may surface a pre-resolution null), runtime
2721
+ // (a faithful twin may surface a pre-resolution null), runtime
2722
2722
  // value unchanged.
2723
2723
  url: branch.head_sha ? `https://api.github.com/repos/${repo.full_name}/commits/${branch.head_sha}` : null
2724
2724
  },
@@ -2789,13 +2789,13 @@ function contentDirectoryEntryJson(path, repo, branch, file) {
2789
2789
  // entry the twin has no git blob to point at; rather than emit `git_url: null`
2790
2790
  // (a string→null type-changed against real GitHub's blob URL on files), omit the
2791
2791
  // key entirely on directories so the field-removed direction is covered by the
2792
- // categorical hypermedia exemption (FDRS-451) — a faithful twin returning a
2793
- // SUBSET of GitHub's link relations, not drift (FDRS-454).
2792
+ // categorical hypermedia exemption — a faithful twin returning a
2793
+ // SUBSET of GitHub's link relations, not drift.
2794
2794
  ...isFile ? { git_url: `https://api.github.com/repos/${repo.full_name}/git/blobs/${file.sha}` } : {},
2795
2795
  html_url: `https://github.com/${repo.full_name}/${isFile ? "blob" : "tree"}/${branch}/${path}`,
2796
2796
  download_url: isFile ? `https://raw.githubusercontent.com/${repo.full_name}/${branch}/${path}` : null
2797
2797
  // `_links` is intentionally omitted — the categorical hypermedia subset
2798
- // exemption (FDRS-451); DeepPartial makes it optional so omission is legal.
2798
+ // exemption; DeepPartial makes it optional so omission is legal.
2799
2799
  // The upstream `content-directory` schema is an ARRAY of entries; this
2800
2800
  // serializer emits one entry, so it anchors against the element type.
2801
2801
  };
@@ -2869,7 +2869,7 @@ function pullRequestSimpleJson(pr, baseRepo, headRepo, headSha = null, baseSha =
2869
2869
  ref: pr.head_ref,
2870
2870
  // Upstream merge-base `sha` is a non-null string; the twin emits null when
2871
2871
  // the head SHA is unresolved (no commits seeded yet). Intentional twin
2872
- // behavior — narrow the null away for the type anchor only (FDRS-454:
2872
+ // behavior — narrow the null away for the type anchor only (
2873
2873
  // faithful twin may surface a pre-resolution null), runtime value unchanged.
2874
2874
  sha: headSha,
2875
2875
  repo: repoJson(headRepo),
@@ -2918,7 +2918,7 @@ function pullRequestFileJson(file) {
2918
2918
  raw_url: file.raw_url,
2919
2919
  contents_url: file.contents_url,
2920
2920
  patch: file.patch,
2921
- // F-1500 — GitHub sends `previous_filename` exactly when `status` is
2921
+ // GitHub sends `previous_filename` exactly when `status` is
2922
2922
  // `"renamed"` and omits the KEY otherwise, so this is a conditional spread
2923
2923
  // rather than a `null`: emitting `previous_filename: null` on an added file
2924
2924
  // would trade a missing-field divergence for a type-changed one and have
@@ -3024,7 +3024,7 @@ function releaseJson(release, repo) {
3024
3024
  prerelease: Boolean(release.prerelease),
3025
3025
  author: userJson(release.author_login),
3026
3026
  created_at: release.created_at,
3027
- // F-1459 — real GitHub returns this on every release; the twin used to omit
3027
+ // Real GitHub returns this on every release; the twin used to omit
3028
3028
  // the key, which read as `field-removed` on all three release surfaces.
3029
3029
  // Falls back to `created_at` for a row written before the column existed.
3030
3030
  updated_at: release.updated_at || release.created_at,
@@ -3036,8 +3036,8 @@ function releaseJson(release, repo) {
3036
3036
  tarball_url: `https://api.github.com/repos/${repo.full_name}/tarball/${release.tag_name}`,
3037
3037
  zipball_url: `https://api.github.com/repos/${repo.full_name}/zipball/${release.tag_name}`,
3038
3038
  assets: [],
3039
- // F-1533 — the last leaf real GitHub sends on all three release surfaces
3040
- // that this twin did not. Same shape of fix as `updated_at` above (F-1459),
3039
+ // The last leaf real GitHub sends on all three release surfaces
3040
+ // that this twin did not. Same shape of fix as `updated_at` above,
3041
3041
  // and the same reason it went unnoticed: `satisfies DeepPartial<Release>`
3042
3042
  // encodes "faithful SUBSET", so it cannot see an omission.
3043
3043
  //
@@ -3045,7 +3045,7 @@ function releaseJson(release, repo) {
3045
3045
  // immutable-release feature and has no route that could enable one — no
3046
3046
  // `PUT /repos/:o/:r/immutable-releases`, nothing on the seed — so every
3047
3047
  // release in every reachable twin state IS mutable. That is what separates
3048
- // this from the nine sibling fields F-1504 registered rather than fixed:
3048
+ // this from the nine sibling fields registered rather than fixed:
3049
3049
  // stating `false` invents no model.
3050
3050
  //
3051
3051
  // Not a column. A stored value would be a second source of truth for a
@@ -3084,7 +3084,7 @@ function checkRunJson(run, repo) {
3084
3084
  // conclusion vocabulary including `"stale"`, but the pinned
3085
3085
  // @octokit/openapi-types version's `check-run.conclusion` enum predates
3086
3086
  // `"stale"`. The twin faithfully emits a real upstream value; narrow it to
3087
- // the schema's declared union for the type anchor only (FDRS-454: twin
3087
+ // the schema's declared union for the type anchor only (twin
3088
3088
  // tracks live GitHub, not a lagging spec snapshot), runtime value unchanged.
3089
3089
  conclusion: run.conclusion,
3090
3090
  started_at: run.started_at,
@@ -3129,12 +3129,12 @@ function pullRequestReviewCommentJson(comment, repo) {
3129
3129
  // nullable (`number | null`); all the sibling line/position fields below
3130
3130
  // are non-null in the schema. The twin's row column is `number | null`, so
3131
3131
  // for the non-null schema fields we narrow the row's pre-resolution null
3132
- // away for the type anchor only (FDRS-454: a faithful twin may surface a
3132
+ // away for the type anchor only (a faithful twin may surface a
3133
3133
  // pre-resolution null on a not-yet-positioned comment), runtime unchanged.
3134
3134
  position: comment.line,
3135
3135
  original_position: comment.line,
3136
3136
  // `commit_sha` row column is `string | null`; schema commit ids are
3137
- // non-null strings (FDRS-454 pre-resolution null narrow).
3137
+ // non-null strings (pre-resolution null narrow).
3138
3138
  commit_id: comment.commit_sha,
3139
3139
  original_commit_id: comment.commit_sha,
3140
3140
  in_reply_to_id: comment.in_reply_to_id,
@@ -4087,7 +4087,7 @@ function createRelease(domain, input, options = {}, onDelta) {
4087
4087
  prerelease,
4088
4088
  options.actor ?? "pome-agent",
4089
4089
  now,
4090
- // F-1459 — `updated_at` on creation IS `created_at`. There is no release
4090
+ // `updated_at` on creation IS `created_at`. There is no release
4091
4091
  // update route on this twin, so nothing can ever move it apart; when one
4092
4092
  // is added it must set this column, which is why it is a real column and
4093
4093
  // not `created_at` aliased in the serializer.
@@ -4559,7 +4559,7 @@ var GitHubDomain = class {
4559
4559
  });
4560
4560
  }
4561
4561
  /**
4562
- * F-1500 — expand a branch's seeded file entries into the commit that produces
4562
+ * Expand a branch's seeded file entries into the commit that produces
4563
4563
  * them, turning each `renamed_from` into what a move actually is: the source
4564
4564
  * path deleted and its content written at the new path, in ONE commit.
4565
4565
  *
@@ -4587,14 +4587,14 @@ var GitHubDomain = class {
4587
4587
  return changes;
4588
4588
  }
4589
4589
  /**
4590
- * F-1421 — plant one conversation comment on an issue or a pull request.
4590
+ * Plant one conversation comment on an issue or a pull request.
4591
4591
  *
4592
4592
  * A direct INSERT, for the same reason the seeded reviews above bypass
4593
4593
  * `createPullRequestReview`: `addIssueComment` stamps `user_login =
4594
4594
  * "pome-agent"` unconditionally, and a seeded world where the agent under
4595
4595
  * test wrote every comment it is being asked to read has nothing to read.
4596
4596
  * The one check the write path does that matters here is kept — the comment
4597
- * must hang off an issue or a pull request that exists (F-1151).
4597
+ * must hang off an issue or a pull request that exists.
4598
4598
  */
4599
4599
  seedComment(repo, number, comment) {
4600
4600
  this.requireCommentTarget(repo.id, number);
@@ -4626,7 +4626,7 @@ var GitHubDomain = class {
4626
4626
  files: this.listPullRequestFileRows(repo.id, pull.number),
4627
4627
  reviews: this.listPullRequestReviewRows(repo.id, pull.number),
4628
4628
  review_comments: this.listPullRequestReviewCommentRows(repo.id, pull.number),
4629
- // F-1151. THREE distinct comment surfaces reach a pull request and this
4629
+ // THREE distinct comment surfaces reach a pull request and this
4630
4630
  // is the third, so the export keeps them apart rather than merging them
4631
4631
  // into one count a predicate could not attribute:
4632
4632
  // `reviews[].body` — the prose attached to a review verdict
@@ -4985,7 +4985,7 @@ var GitHubDomain = class {
4985
4985
  raw_url: `https://raw.githubusercontent.com/${repo.full_name}/${commit.sha}/${version.path}`,
4986
4986
  contents_url: `https://api.github.com/repos/${repo.full_name}/contents/${version.path}?ref=${commit.sha}`,
4987
4987
  patch: `@@ ${version.path} @@`,
4988
- // F-1513 moved the COMPARE surface onto the shared `diffFileRows`; this
4988
+ // The COMPARE surface moved onto the shared `diffFileRows`; this
4989
4989
  // one is still outside it, and for a reason that is not scope. A single
4990
4990
  // commit's change set is read straight out of `file_versions`, whose
4991
4991
  // `status` column has no `renamed` member, so there is no pair of trees
@@ -5114,7 +5114,7 @@ var GitHubDomain = class {
5114
5114
  this.db.prepare("INSERT INTO pull_request_files (repo_id, pull_number, filename, status, additions, deletions, changes, blob_url, raw_url, contents_url, patch, previous_filename) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)").run(repoId, pullNumber, file.filename, file.status, file.additions, file.deletions, file.changes, file.blob_url, file.raw_url, file.contents_url, file.patch, file.previous_filename);
5115
5115
  }
5116
5116
  }
5117
- // F-1178 — the `stack` member of GitHub's `pull-request` / `pull-request-simple`
5117
+ // The `stack` member of GitHub's `pull-request` / `pull-request-simple`
5118
5118
  // schemas. GitHub models a stack as its own entity with its own id and number;
5119
5119
  // the twin has no stack table, so it reads a stack off the state that DOES
5120
5120
  // encode one — pull requests linked `base_ref` -> `head_ref`, i.e. a PR whose
@@ -5272,7 +5272,7 @@ var GitHubDomain = class {
5272
5272
  requireIssue(repoId, number) {
5273
5273
  return this.db.prepare("SELECT * FROM issues WHERE repo_id = ? AND number = ?").get(repoId, number) ?? notFound("Issue not found");
5274
5274
  }
5275
- // F-1151 — what the ISSUE COMMENT endpoints may address.
5275
+ // What the ISSUE COMMENT endpoints may address.
5276
5276
  //
5277
5277
  // Real GitHub models every pull request as an issue and documents
5278
5278
  // `/repos/:o/:r/issues/:number/comments` as the way to comment on a PR's
@@ -5332,7 +5332,7 @@ var GitHubDomain = class {
5332
5332
  listPullRequestReviewRows(repoId, pullNumber) {
5333
5333
  return this.db.prepare("SELECT * FROM pull_request_reviews WHERE repo_id = ? AND pull_number = ? ORDER BY submitted_at ASC").all(repoId, pullNumber);
5334
5334
  }
5335
- // F-1422 — `PullRequestReviewCommentRow`, not a six-key structural subset of
5335
+ // `PullRequestReviewCommentRow`, not a six-key structural subset of
5336
5336
  // it. The query is `SELECT *` and always was, so the narrow cast described
5337
5337
  // less than the reader was handed and every caller inherited that description
5338
5338
  // as its ceiling: `getPullRequestComments` served exactly the six keys named
@@ -5730,13 +5730,13 @@ var githubTwinDefinition = defineTwin({
5730
5730
  domain.seed(seed, reportDelta);
5731
5731
  return { ok: true, repositories: seed.repositories.length };
5732
5732
  },
5733
- // F-1497: the admin-gate 403 body is BUILT HERE now, not defaulted in
5733
+ // The admin-gate 403 body is BUILT HERE now, not defaulted in
5734
5734
  // `@pome-sh/sdk`. The gate is shared by all five twins, so its default
5735
5735
  // cannot carry GitHub's `documentation_url`/`status` leaves — and while
5736
5736
  // it defaulted, this twin's 403 said `documentation_url: ""`.
5737
5737
  //
5738
5738
  // The url is the GENERIC one on purpose. Real GitHub's measured 403s
5739
- // name the operation (3 of 3, F-1490), but `/admin/*` is a twin-only
5739
+ // name the operation (3 of 3), but `/admin/*` is a twin-only
5740
5740
  // route with no GitHub operation behind it, which is the same reason
5741
5741
  // `/pulls/:n/diff` and `/pulls/:n/status` stay generic (divergence 32).
5742
5742
  forbidden: () => ({ status: 403, body: githubError("Forbidden", 403) })
@@ -5759,7 +5759,7 @@ var githubTwinDefinition = defineTwin({
5759
5759
  pomeRoutes: {
5760
5760
  "access-control": () => githubAccessControlPayload()
5761
5761
  },
5762
- // FDRS-402 adapter-rich tape pin: x-pome-correlation-id persists as
5762
+ // adapter-rich tape pin: x-pome-correlation-id persists as
5763
5763
  // tool_call_id on every recorded event (github's frozen tape shape).
5764
5764
  stampToolCallId: true,
5765
5765
  // Frozen JSON-RPC unknown-tool result text (the legacy /mcp/call surface
@@ -5768,7 +5768,7 @@ var githubTwinDefinition = defineTwin({
5768
5768
  unsupported: () => unsupportedEnvelope,
5769
5769
  errorEnvelope: githubErrorEnvelope,
5770
5770
  auth: {
5771
- // F-712 pins (wire-frozen): Bearer-header only (no extra token
5771
+ // Frozen pins (wire-frozen): Bearer-header only (no extra token
5772
5772
  // resolvers), raw bearer rejected (allowRawBearer=false), sid mismatch
5773
5773
  // → 401 {message:"Forbidden"}, and an expired JWT rendering as
5774
5774
  // "Bad credentials". The pre-port explicit "Token expired" branch was
@@ -5776,7 +5776,7 @@ var githubTwinDefinition = defineTwin({
5776
5776
  // was ever reached, so the wire always said "Bad credentials"
5777
5777
  // (pre-ruled: deleting it is zero wire diff).
5778
5778
  //
5779
- // ── F-1497 changed two things about these bodies ────────────────────
5779
+ // ── Two things changed about these bodies ──────────────────────────
5780
5780
  //
5781
5781
  // 1. They are built by `githubError` now instead of by hand, which is
5782
5782
  // what gives them the `documentation_url` and `status` leaves real
@@ -5784,7 +5784,7 @@ var githubTwinDefinition = defineTwin({
5784
5784
  // `{"message":…,"documentation_url":"https://docs.github.com/rest","status":"401"}`.
5785
5785
  // The url is GitHub's GENERIC one and MUST STAY generic — GitHub
5786
5786
  // names no operation on a 401 because authentication fails before
5787
- // dispatch (8 of 8 measured, F-1490), which is the half of
5787
+ // dispatch (8 of 8 measured), which is the half of
5788
5788
  // divergence 32 that is a requirement rather than a gap. `githubError`
5789
5789
  // defaults to exactly that url and this call passes no override.
5790
5790
  //
@@ -1,8 +1,8 @@
1
- export { SLACK_CHECKS } from './chunk-IDNSKKEC.js';
1
+ export { SLACK_CHECKS } from './chunk-2ZGVDTJC.js';
2
2
  import './chunk-JWJYNAWI.js';
3
- import { routeInputDeclarer, booleanInput, integerInput, mountDeclaredRoute, UndeclaredInputError } from './chunk-2Q3P45LK.js';
4
- import { loadMcpToolFixture, defineTwin, queryTokenResolver, formTokenResolver, deriveMcpToolTable, UnknownToolError, openTwinDatabase, createApp, typeDisagreements } from './chunk-WEKJIGUD.js';
5
- import './chunk-JUESW6G4.js';
3
+ import { routeInputDeclarer, booleanInput, integerInput, mountDeclaredRoute, UndeclaredInputError } from './chunk-IZFM7W2V.js';
4
+ import { loadMcpToolFixture, defineTwin, queryTokenResolver, formTokenResolver, deriveMcpToolTable, UnknownToolError, openTwinDatabase, createApp, typeDisagreements } from './chunk-CFXEETE3.js';
5
+ import './chunk-6KJC4BTO.js';
6
6
  import './chunk-SG6ZTIMT.js';
7
7
  import { z, ZodError } from 'zod';
8
8
 
@@ -599,7 +599,7 @@ function serializeUser(row, opts = {}) {
599
599
  // The embedded profile carries `team` (both users.list and users.info) but
600
600
  // OMITS `email` on users.list — real Slack only returns the email on the
601
601
  // single-user reads (users.info / lookupByEmail), not in the list envelope
602
- // (FDRS-473 Kind B). `omitProfileEmail` is set by the users.list caller.
602
+ // (Kind B). `omitProfileEmail` is set by the users.list caller.
603
603
  // serializeUserProfile returns Record<string, unknown> (its own `...profile`
604
604
  // spread is an open record); cast to the upstream Profile shape so the parent
605
605
  // `satisfies` stays exact without re-anchoring the nested record here.
@@ -923,7 +923,7 @@ var seedSchema = z.object({
923
923
  reactions: z.array(z.object({ name: z.string(), user: z.string() })).default([])
924
924
  })).default([])
925
925
  })).default([]),
926
- // F-1509. Files present in the world before the agent runs. `user` and
926
+ // Files present in the world before the agent runs. `user` and
927
927
  // `channels` are seed HANDLES (a user/channel `name`) or ids — the same
928
928
  // currency `channels[].members` and `channels[].messages[].user` already use.
929
929
  files: z.array(z.object({
@@ -1454,7 +1454,7 @@ function conversationsHistory(domain, args, actor = {}) {
1454
1454
  // Real Slack OMITS `response_metadata` on conversations.history when there is
1455
1455
  // no next page (it only carries the pagination cursor when hasMore); it does
1456
1456
  // NOT return an empty-cursor envelope here the way conversations.list does
1457
- // (FDRS-473 Kind B — conditional pagination matched per endpoint).
1457
+ // (Kind B — conditional pagination matched per endpoint).
1458
1458
  ...hasMore ? { response_metadata: { next_cursor: cursorEncode({ offset: offset + slice.length }) } } : {}
1459
1459
  };
1460
1460
  }
@@ -1493,7 +1493,7 @@ function conversationsReplies(domain, args, actor = {}) {
1493
1493
  }),
1494
1494
  has_more: hasMore,
1495
1495
  // Real Slack OMITS `response_metadata` on conversations.replies when there is
1496
- // no next page (cursor present only when hasMore) — FDRS-473 Kind B.
1496
+ // no next page (cursor present only when hasMore) — Kind B.
1497
1497
  ...hasMore ? { response_metadata: { next_cursor: cursorEncode({ offset: offset + slice.length }) } } : {}
1498
1498
  };
1499
1499
  }
@@ -1605,7 +1605,7 @@ function filesList(domain, args) {
1605
1605
  // files.list paginates via `paging` (page/pages), not a cursor. Real Slack
1606
1606
  // does NOT return a `response_metadata.next_cursor` envelope on files.list,
1607
1607
  // so the twin omits it rather than emitting an empty-cursor stub that diffs
1608
- // as a twin-only field (FDRS-473 Kind B).
1608
+ // as a twin-only field (Kind B).
1609
1609
  };
1610
1610
  }
1611
1611
  function filesDelete(domain, args, actor, onDelta = NOOP3) {
@@ -1801,7 +1801,7 @@ function usersList(domain, args) {
1801
1801
  const slice = rows.slice(0, limit);
1802
1802
  return {
1803
1803
  // users.list embeds each user's profile WITHOUT `email` — real Slack only
1804
- // returns the email on the single-user reads (FDRS-473 Kind B).
1804
+ // returns the email on the single-user reads (Kind B).
1805
1805
  members: slice.map((row) => serializeUser(row, { include_locale: args.include_locale, omitProfileEmail: true })),
1806
1806
  cache_ts: nowUnix(),
1807
1807
  response_metadata: {
@@ -2409,7 +2409,7 @@ var SLACK_READS = {
2409
2409
  }),
2410
2410
  bookmarksList: slackRead("/bookmarks.list", { channel_id: emptyIfAbsent() }),
2411
2411
  teamInfo: slackRead("/team.info", { team: absentIfEmpty() }),
2412
- // `domain.emojiList` reads no argument at all, and the pre-F-1179 handler
2412
+ // `domain.emojiList` reads no argument at all, and the legacy handler
2413
2413
  // forwarded the whole merged bag — the silent hole this ticket exists to
2414
2414
  // close. `include_categories` is what Slack's `emoji.list` declares beyond
2415
2415
  // `token`, so that is the surface, and an unnamed argument is now refused.
@@ -2504,7 +2504,7 @@ var SLACK_WRITES = {
2504
2504
  timestamp: emptyIfAbsent()
2505
2505
  }),
2506
2506
  filesUpload: slackWrite("/files.upload", {
2507
- // F-1389 (SLACK-DECL-IN-003) — `channels` (plural, comma-separated) only.
2507
+ // SLACK-DECL-IN-003 — `channels` (plural, comma-separated) only.
2508
2508
  // Slack has never documented a singular `channel` here, and the vendored
2509
2509
  // `slack_web_openapi_v2` snapshot agrees: it declares `channels` and eight
2510
2510
  // other real arguments, so it is not thin on this method. An upload
@@ -3230,7 +3230,7 @@ var slackTwinDefinition = defineTwin({
3230
3230
  return domain;
3231
3231
  },
3232
3232
  routes: registerSlackRoutes,
3233
- // Frozen slack body parsing (F-683 review pin): form-or-JSON on every
3233
+ // Frozen slack body parsing (review pin): form-or-JSON on every
3234
3234
  // engine-owned surface — official Slack SDKs default to
3235
3235
  // application/x-www-form-urlencoded — and malformed JSON collapses to {}.
3236
3236
  bodyReader: (c) => parseFormOrJson(c),
@@ -3274,7 +3274,7 @@ var slackTwinDefinition = defineTwin({
3274
3274
  unsupported: () => unsupportedEnvelope,
3275
3275
  errorEnvelope: slackErrorEnvelope,
3276
3276
  auth: {
3277
- // F-712 pins: Bearer header + ?token= + form-body token; raw bearer
3277
+ // Frozen pins: Bearer header + ?token= + form-body token; raw bearer
3278
3278
  // rejected (allowRawBearer default false); sid mismatch → 401
3279
3279
  // invalid_auth; expired vs invalid classified by the engine and
3280
3280
  // rendered through the envelope hook.
@@ -2,9 +2,9 @@ export { LINEAR_CHECKS } from './chunk-XBT6ZLBG.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-IZIZC7ZW.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-IZIZC7ZW.js';
4
4
  import './chunk-JWJYNAWI.js';
5
- import { routeInputDeclarer, mountDeclaredRoute, UndeclaredInputError } from './chunk-2Q3P45LK.js';
6
- import { loadMcpToolFixture, deriveMcpToolTable, openTwinDatabase, defineTwin, createApp } from './chunk-WEKJIGUD.js';
7
- import './chunk-JUESW6G4.js';
5
+ import { routeInputDeclarer, mountDeclaredRoute, UndeclaredInputError } from './chunk-IZFM7W2V.js';
6
+ import { loadMcpToolFixture, deriveMcpToolTable, openTwinDatabase, defineTwin, createApp } from './chunk-CFXEETE3.js';
7
+ import './chunk-6KJC4BTO.js';
8
8
  import './chunk-SG6ZTIMT.js';
9
9
  import { createHmac, timingSafeEqual, createHash, randomBytes } from 'node:crypto';
10
10
  import { z } from 'zod';
@@ -510,7 +510,7 @@ var AGENT_SESSION_STATUSES = [
510
510
  ];
511
511
  function readSessionStatus(value) {
512
512
  if (!AGENT_SESSION_STATUSES.includes(value)) {
513
- throw new LinearTwinError(500, "INTERNAL_SERVER_ERROR", `Stored agent session status "${value}" is not one of Linear's AgentSessionStatus members (${AGENT_SESSION_STATUSES.join(", ")}). This database predates the F-1172 rename and was not migrated.`);
513
+ throw new LinearTwinError(500, "INTERNAL_SERVER_ERROR", `Stored agent session status "${value}" is not one of Linear's AgentSessionStatus members (${AGENT_SESSION_STATUSES.join(", ")}). This database predates the rename and was not migrated.`);
514
514
  }
515
515
  return value;
516
516
  }
@@ -4731,7 +4731,7 @@ function createRootValue(ctx) {
4731
4731
  return payload({ agentSession: formatAgentSession(session) });
4732
4732
  },
4733
4733
  // `id` is non-null on the schema, as it is upstream — there is no longer an
4734
- // `input.id` to fall back to (F-1176).
4734
+ // No `input.id` to fall back to.
4735
4735
  agentSessionUpdate: ({ id, input }) => {
4736
4736
  const session = commands.updateAgentSession(id, parseAgentSessionUpdateInput(input), actor);
4737
4737
  return payload({ agentSession: formatAgentSession(session) });
@@ -5040,7 +5040,7 @@ var linearGraphQLSchema = buildSchema(`
5040
5040
  team: Team
5041
5041
  }
5042
5042
 
5043
- """Linear's AgentSessionStatus, member-for-member (F-1172)."""
5043
+ """Linear's AgentSessionStatus, member-for-member."""
5044
5044
  enum AgentSessionStatus {
5045
5045
  pending
5046
5046
  active
@@ -5063,7 +5063,7 @@ var linearGraphQLSchema = buildSchema(`
5063
5063
  activities(first: Int, after: String, last: Int, before: String): AgentActivityConnection!
5064
5064
  }
5065
5065
 
5066
- """Linear's AgentActivitySignal, member-for-member (F-1176)."""
5066
+ """Linear's AgentActivitySignal, member-for-member."""
5067
5067
  enum AgentActivitySignal {
5068
5068
  stop
5069
5069
  continue
@@ -5077,7 +5077,7 @@ var linearGraphQLSchema = buildSchema(`
5077
5077
  Linear's AgentActivityContent union, carried as an opaque payload: a
5078
5078
  {type, body} object for five of the six members, {type, action, parameter}
5079
5079
  for the action member. The union itself is a scalar-level divergence,
5080
- written up in REFERENCE-DIVERGENCES.md (F-1176).
5080
+ written up in REFERENCE-DIVERGENCES.md.
5081
5081
  """
5082
5082
  content: JSON!
5083
5083
  signal: AgentActivitySignal
@@ -5239,13 +5239,13 @@ var linearGraphQLSchema = buildSchema(`
5239
5239
  enabled: Boolean
5240
5240
  }
5241
5241
 
5242
- """Linear's AgentSessionExternalUrlInput, field-for-field (F-1172)."""
5242
+ """Linear's AgentSessionExternalUrlInput, field-for-field."""
5243
5243
  input AgentSessionExternalUrlInput {
5244
5244
  url: String!
5245
5245
  label: String!
5246
5246
  }
5247
5247
 
5248
- """Linear's AgentSessionCreateOnIssue, minus the fields the twin does not model (F-1176)."""
5248
+ """Linear's AgentSessionCreateOnIssue, minus the fields the twin does not model."""
5249
5249
  input AgentSessionCreateOnIssue {
5250
5250
  issueId: String!
5251
5251
  externalUrls: [AgentSessionExternalUrlInput!]
@@ -5257,7 +5257,7 @@ var linearGraphQLSchema = buildSchema(`
5257
5257
  }
5258
5258
 
5259
5259
  """
5260
- Linear declares no status and no id field here (F-1176). Status follows the
5260
+ Linear declares no status and no id field here. Status follows the
5261
5261
  agent's activities; id is the mutation's own non-null argument.
5262
5262
  """
5263
5263
  input AgentSessionUpdateInput {
@@ -5462,7 +5462,7 @@ function createLinearTwinDefinition(db) {
5462
5462
  reportDelta(linearStateDelta(before, domain.exportState()));
5463
5463
  return { ok: true };
5464
5464
  },
5465
- // F-1497 — declared, so the shared gate in `@pome-sh/sdk` stops
5465
+ // Declared, so the shared gate in `@pome-sh/sdk` stops
5466
5466
  // answering a GraphQL twin with GitHub's `{message, documentation_url}`.
5467
5467
  forbidden: () => forbiddenEnvelope()
5468
5468
  },
@@ -5480,8 +5480,8 @@ function createLinearTwinDefinition(db) {
5480
5480
  allowRawBearer: true,
5481
5481
  resolveCredential: (token2) => resolveLinearCredential(db, token2),
5482
5482
  // Both take `unauthorizedEnvelope`'s default: Linear answers a bad
5483
- // bearer and a missing one with the SAME body (measured 2026-08-13,
5484
- // F-1497), and has no session-id concept to give the mismatch leg a
5483
+ // bearer and a missing one with the SAME body (measured 2026-08-13),
5484
+ // and has no session-id concept to give the mismatch leg a
5485
5485
  // third one. The messages that used to be here — "Bad credentials" and
5486
5486
  // "Session id mismatch" — were the twin's own inventions, and the first
5487
5487
  // was GitHub's.
@@ -0,0 +1,5 @@
1
+ export { UnsupportedTwinError, bootTwin } from './chunk-KIXYRPVY.js';
2
+ export { STRIPE_LOCAL_ACCOUNT_ID } from './chunk-EIUCTFQV.js';
3
+ import './chunk-CFXEETE3.js';
4
+ import './chunk-6KJC4BTO.js';
5
+ import './chunk-SG6ZTIMT.js';
@@ -1,7 +1,7 @@
1
- import { bootTwin } from './chunk-5EE7YWA3.js';
2
- import { isTwinName, TWIN_NAMES, defaultPortFor, TWIN_REGISTRY } from './chunk-CKN743FJ.js';
3
- import './chunk-WEKJIGUD.js';
4
- import './chunk-JUESW6G4.js';
1
+ import { bootTwin } from './chunk-KIXYRPVY.js';
2
+ import { isTwinName, TWIN_NAMES, defaultPortFor, TWIN_REGISTRY } from './chunk-EIUCTFQV.js';
3
+ import './chunk-CFXEETE3.js';
4
+ import './chunk-6KJC4BTO.js';
5
5
  import './chunk-SG6ZTIMT.js';
6
6
  import { randomBytes } from 'node:crypto';
7
7
  import { readFileSync } from 'node:fs';