@bridge-ds/core 0.16.0 → 0.18.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.
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
- import { m as modeDisplayName, b as modesOf$1, i as isMultiMode, T as TIER_NAMES, c as TIER_AXIS, d as collectRefs, f as findReferenceProblems, e as evaluatePairs, g as contrastScope, h as contextLabel, S as SINGLE_MODE, j as isAlias$1, k as aliasTarget, l as pathId, v as valuesEqual, n as flattenTokens, s as serializeTokenFile, r as removeToken, u as upsertToken, o as threeWayDiff, q as emptyTokenFile, w as parseTokenFile, E as EXT_ID, x as EXT_SCOPES, y as parseColor, z as rgbaToHex, A as formatValue, B as resolve, C as moveToken, D as effectiveScopes, F as sameScopes, G as defaultScopes, H as readTokenAt, I as modeFile, J as defaultFile, K as selectTokenFiles, L as LayeredTokenSet, M as resolveBranchPreviews, N as loadConfig, O as tokensPath, P as toConfigJson, Q as validateLayered, R as parseContrastChecks, U as classifyRisk, V as CONFIG_FILE, W as RISK_LABELS, X as previewLinks, Y as findPreviewComment, Z as previewsSettled, _ as DEFAULT_TOKEN_PATHS, $ as layoutOptions, a0 as buildTokenSet, a1 as readPreviewComment, a2 as linkStatus, a3 as libraryPreviewState, a4 as parsePiecesRecord, a5 as libraryBranchPlan, a6 as NEEDED_BY_LABEL, a7 as withNeededBy, a8 as withLink, a9 as withPiecesRecord, aa as productBranchSentence, ab as mergePiecesRecord, ac as productOfBranch, ad as defaultProduct, ae as slugify, af as defineConfig, ag as globToRegExp, ah as ConfigError, ai as DEFAULT_CHANGES_MODE, aj as DEFAULT_OVERRIDE, ak as DEFAULT_PRODUCTS } from "./prod-branch-CSM0c2OF.js";
2
- import { al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, aA, aB, aC, aD, aE, aF, aG, aH, aI, aJ, aK, aL, aM, aN, aO, aP, aQ, aR, aS, aT, aU, aV, aW, aX, aY, aZ, a_, a$, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, ba, bb, bc, bd, be, bf, bg, bh, bi, bj, bk, bl, bm, bn, bo, bp, bq, br, bs, bt, bu, bv, bw, bx, by, bz, bA, bB, bC, bD, bE, bF, bG, bH, bI, bJ, bK, bL, bM, p, bN, bO, bP, bQ, bR, bS, bT, bU, bV, bW, bX, a, bY, bZ, b_, b$, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, ca, cb, cc, cd, ce, cf, cg, ch, ci, cj, ck, t, cl, cm, cn, co, cp, cq, cr, cs } from "./prod-branch-CSM0c2OF.js";
3
- import { G as GitHubError, c as collectHistory, p as packageDirCandidates, a as parseChangelog, r as releasesFromTags, m as mergeReleases, b as buildReport, d as applyTokenEdits, e as buildHistoryEntry, f as coerceValue, g as checkLayeredPair, h as formatChangeset, P as PROSE_KEYS, i as markClaudeDraft, j as cleanDraftText, k as docsPrompt, D as DRAFT_LINE_MAX, R as REQUESTS_BRANCH, l as REQUEST_KINDS, s as sanitizeDraftLine, n as parseExplorationBody, E as EXPLORATION_PREFIX, o as explorationSlug, q as explorationStatus, t as explorationTryIt, u as isExplorationPull, v as promotionPlan, w as EXPLORATION_LABEL, x as explorationProblems, y as explorationNote, z as explorationNotePath, A as explorationPrTitle, B as explorationPrBody, C as variantKeyOf, F as overrideComment, O as OVERRIDE_HEADING, H as overrideRefusedComment, I as suggestionStateFromLabels, J as suggestionStatus, K as composeRequestIssue, L as EXPLORATION_NOTES_DIR, M as isExplorationBranch, N as diffLayered, Q as contrastDelta, S as runLayeredContrast, T as layeredImpact, U as classifyLayered, V as composeProposalBody, W as createSuggestionOnGitHub, X as gitBlobSha, Y as SUGGESTION_SCHEMA, Z as branchWithJiraKey, _ as titleWithJiraKey, $ as figmaSpecPath, a0 as formatFigmaSpec, a1 as figmaDraftBrief, a2 as parseFigmaOrigin, a3 as figmaPushStatus, a4 as parseFigmaSpec, a5 as FIGMA_SPEC_DIR, a6 as FROM_FIGMA_LABEL, a7 as withFigmaOrigin, a8 as WAITING_FOR_CLAUDE_LABEL, a9 as DRAFTED_BY_CLAUDE_LABEL, aa as planComponentPush, ab as figmaOriginSection, ac as figmaBranchTitle, ad as figmaSpecSlug, ae as figmaDraftBody, af as REQUEST_LABEL, ag as figmaNodeUrl, ah as parentDir, ai as parseComponentSpecs, aj as readRepoTexts, ak as normalizeRepoPath, al as isUnder } from "./repo-source-73kARDJv.js";
4
- import { am as am2, an as an2, ao as ao2, ap as ap2, aq as aq2, ar as ar2, as as as2, at as at2, au as au2, av as av2, aw as aw2, ax as ax2, ay as ay2, az as az2, aA as aA2, aB as aB2, aC as aC2, aD as aD2, aE as aE2, aF as aF2, aG as aG2, aH as aH2, aI as aI2, aJ as aJ2, aK as aK2, aL as aL2, aM as aM2, aN as aN2, aO as aO2, aP as aP2, aQ as aQ2, aR as aR2, aS as aS2, aT as aT2, aU as aU2, aV as aV2, aW as aW2, aX as aX2, aY as aY2, aZ as aZ2, a_ as a_2, a$ as a$2, b0 as b02, b1 as b12, b2 as b22, b3 as b32, b4 as b42, b5 as b52, b6 as b62, b7 as b72, b8 as b82, b9 as b92, ba as ba2, bb as bb2, bc as bc2, bd as bd2, be as be2, bf as bf2, bg as bg2, bh as bh2, bi as bi2, bj as bj2, bk as bk2, bl as bl2, bm as bm2, bn as bn2, bo as bo2, bp as bp2, bq as bq2, br as br2, bs as bs2, bt as bt2, bu as bu2, bv as bv2, bw as bw2, bx as bx2, by as by2, bz as bz2, bA as bA2, bB as bB2, bC as bC2, bD as bD2, bE as bE2, bF as bF2, bG as bG2, bH as bH2, bI as bI2, bJ as bJ2, bK as bK2, bL as bL2, bM as bM2, bN as bN2, bO as bO2, bP as bP2, bQ as bQ2, bR as bR2, bS as bS2, bT as bT2, bU as bU2, bV as bV2, bW as bW2, bX as bX2, bY as bY2, bZ as bZ2, b_ as b_2, b$ as b$2, c0 as c02, c1 as c12, c2 as c22, c3 as c32, c4 as c42, c5 as c52, c6 as c62, c7 as c72, c8 as c82, c9 as c92, ca as ca2, cb as cb2, cc as cc2, cd as cd2, ce as ce2, cf as cf2, cg as cg2, ch as ch2, ci as ci2, cj as cj2, ck as ck2, cl as cl2, cm as cm2, cn as cn2, co as co2, cp as cp2, cq as cq2, cr as cr2, cs as cs2, ct, cu, cv, cw, cx, cy, cz, cA, cB, cC, cD, cE, cF, cG, cH, cI, cJ, cK, cL, cM, cN, cO, cP, cQ, cR, cS, cT, cU, cV, cW, cX, cY, cZ, c_, c$, d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, da, db, dc, dd, de, df, dg, dh, di, dj, dk, dl, dm, dn, dp, dq, dr, ds, dt } from "./repo-source-73kARDJv.js";
1
+ import { m as modeDisplayName, b as modesOf$1, i as isMultiMode, T as TIER_NAMES, c as TIER_AXIS, d as collectRefs, f as findReferenceProblems, e as evaluatePairs, g as contrastScope, h as contextLabel, S as SINGLE_MODE, j as isAlias$1, k as aliasTarget, l as pathId, v as valuesEqual, n as flattenTokens, s as serializeTokenFile, r as removeToken, u as upsertToken, o as threeWayDiff, q as emptyTokenFile, w as parseTokenFile, E as EXT_ID, x as EXT_SCOPES, y as parseColor, z as rgbaToHex, A as formatValue, B as resolve, C as moveToken, D as effectiveScopes, F as sameScopes, G as defaultScopes, H as readTokenAt, I as modeFile, J as defaultFile, K as selectTokenFiles, L as LayeredTokenSet, M as resolveBranchPreviews, N as loadConfig, O as tokensPath, P as toConfigJson, Q as validateLayered, R as parseContrastChecks, U as classifyRisk, V as CONFIG_FILE, W as RISK_LABELS, X as previewLinks, Y as findPreviewComment, Z as previewsSettled, _ as DEFAULT_TOKEN_PATHS, $ as layoutOptions, a0 as buildTokenSet, a1 as readPreviewComment, a2 as linkStatus, a3 as libraryPreviewState, a4 as parsePiecesRecord, a5 as libraryBranchPlan, a6 as NEEDED_BY_LABEL, a7 as withNeededBy, a8 as withLink, a9 as withPiecesRecord, aa as productBranchSentence, ab as mergePiecesRecord, ac as productOfBranch, ad as defaultProduct, ae as slugify, af as defineConfig, ag as globToRegExp, ah as ConfigError, ai as DEFAULT_CHANGES_MODE, aj as DEFAULT_OVERRIDE, ak as DEFAULT_PRODUCTS } from "./prod-branch-DenQkr_e.js";
2
+ import { al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, aA, aB, aC, aD, aE, aF, aG, aH, aI, aJ, aK, aL, aM, aN, aO, aP, aQ, aR, aS, aT, aU, aV, aW, aX, aY, aZ, a_, a$, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, ba, bb, bc, bd, be, bf, bg, bh, bi, bj, bk, bl, bm, bn, bo, bp, bq, br, bs, bt, bu, bv, bw, bx, by, bz, bA, bB, bC, bD, bE, bF, bG, bH, bI, bJ, bK, bL, bM, bN, bO, bP, p, bQ, bR, bS, bT, bU, bV, bW, bX, bY, bZ, b_, a, b$, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, ca, cb, cc, cd, ce, cf, cg, ch, ci, cj, ck, cl, cm, cn, t, co, cp, cq, cr, cs, ct, cu, cv, cw } from "./prod-branch-DenQkr_e.js";
3
+ import { G as GitHubError, c as collectHistory, p as packageDirCandidates, a as parseChangelog, r as releasesFromTags, m as mergeReleases, b as buildReport, d as applyTokenEdits, e as buildHistoryEntry, f as coerceValue, g as checkLayeredPair, h as formatChangeset, P as PROSE_KEYS, i as markClaudeDraft, j as cleanDraftText, k as docsPrompt, D as DRAFT_LINE_MAX, R as REQUESTS_BRANCH, l as REQUEST_KINDS, s as sanitizeDraftLine, n as parseExplorationBody, E as EXPLORATION_PREFIX, o as explorationSlug, q as explorationStatus, t as explorationTryIt, u as isExplorationPull, v as promotionPlan, w as EXPLORATION_LABEL, x as explorationProblems, y as explorationNote, z as explorationNotePath, A as explorationPrTitle, B as explorationPrBody, C as variantKeyOf, F as overrideComment, O as OVERRIDE_HEADING, H as overrideRefusedComment, I as suggestionStateFromLabels, J as suggestionStatus, K as composeRequestIssue, L as EXPLORATION_NOTES_DIR, M as isExplorationBranch, N as diffLayered, Q as contrastDelta, S as runLayeredContrast, T as layeredImpact, U as classifyLayered, V as composeProposalBody, W as createSuggestionOnGitHub, X as gitBlobSha, Y as SUGGESTION_SCHEMA, Z as branchWithJiraKey, _ as titleWithJiraKey, $ as figmaSpecPath, a0 as formatFigmaSpec, a1 as figmaDraftBrief, a2 as parseFigmaOrigin, a3 as figmaPushStatus, a4 as parseFigmaSpec, a5 as FIGMA_SPEC_DIR, a6 as FROM_FIGMA_LABEL, a7 as withFigmaOrigin, a8 as WAITING_FOR_CLAUDE_LABEL, a9 as DRAFTED_BY_CLAUDE_LABEL, aa as planComponentPush, ab as figmaOriginSection, ac as figmaBranchTitle, ad as figmaSpecSlug, ae as figmaDraftBody, af as REQUEST_LABEL, ag as figmaNodeUrl, ah as parentDir, ai as parseComponentSpecs, aj as readRepoTexts, ak as normalizeRepoPath, al as isUnder, am as GitHubClient, an as effectiveTier, ao as parseRequestIssue, ap as requestStatus, aq as listSuggestionsOnGitHub, ar as getSuggestionOnGitHub } from "./repo-source-CRfhLO87.js";
4
+ import { as as as2, at as at2, au as au2, av as av2, aw as aw2, ax as ax2, ay as ay2, az as az2, aA as aA2, aB as aB2, aC as aC2, aD as aD2, aE as aE2, aF as aF2, aG as aG2, aH as aH2, aI as aI2, aJ as aJ2, aK as aK2, aL as aL2, aM as aM2, aN as aN2, aO as aO2, aP as aP2, aQ as aQ2, aR as aR2, aS as aS2, aT as aT2, aU as aU2, aV as aV2, aW as aW2, aX as aX2, aY as aY2, aZ as aZ2, a_ as a_2, a$ as a$2, b0 as b02, b1 as b12, b2 as b22, b3 as b32, b4 as b42, b5 as b52, b6 as b62, b7 as b72, b8 as b82, b9 as b92, ba as ba2, bb as bb2, bc as bc2, bd as bd2, be as be2, bf as bf2, bg as bg2, bh as bh2, bi as bi2, bj as bj2, bk as bk2, bl as bl2, bm as bm2, bn as bn2, bo as bo2, bp as bp2, bq as bq2, br as br2, bs as bs2, bt as bt2, bu as bu2, bv as bv2, bw as bw2, bx as bx2, by as by2, bz as bz2, bA as bA2, bB as bB2, bC as bC2, bD as bD2, bE as bE2, bF as bF2, bG as bG2, bH as bH2, bI as bI2, bJ as bJ2, bK as bK2, bL as bL2, bM as bM2, bN as bN2, bO as bO2, bP as bP2, bQ as bQ2, bR as bR2, bS as bS2, bT as bT2, bU as bU2, bV as bV2, bW as bW2, bX as bX2, bY as bY2, bZ as bZ2, b_ as b_2, b$ as b$2, c0 as c02, c1 as c12, c2 as c22, c3 as c32, c4 as c42, c5 as c52, c6 as c62, c7 as c72, c8 as c82, c9 as c92, ca as ca2, cb as cb2, cc as cc2, cd as cd2, ce as ce2, cf as cf2, cg as cg2, ch as ch2, ci as ci2, cj as cj2, ck as ck2, cl as cl2, cm as cm2, cn as cn2, co as co2, cp as cp2, cq as cq2, cr as cr2, cs as cs2, ct as ct2, cu as cu2, cv as cv2, cw as cw2, cx, cy, cz, cA, cB, cC, cD, cE, cF, cG, cH, cI, cJ, cK, cL, cM, cN, cO, cP, cQ, cR, cS, cT, cU, cV, cW, cX, cY, cZ, c_, c$, d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, da, db, dc, dd, de, df, dg, dh, di, dj, dk, dl, dm, dn, dp, dq, dr, ds, dt, du, dv, dw, dx, dy, dz, dA, dB, dC, dD, dE, dF, dG, dH } from "./repo-source-CRfhLO87.js";
5
5
  const issueKey$1 = (i) => `${i.code}|${i.path ?? ""}|${i.mode ?? ""}|${i.code === "file-problem" ? i.message : ""}`;
6
6
  const modeName = (mode) => mode === SINGLE_MODE ? "all modes" : modeDisplayName(mode);
7
7
  const isPalette = (t2) => t2.tier === "brand" && t2.path.startsWith("palette.");
@@ -831,6 +831,7 @@ function gitHubHistoryBackend(client, config, opts = {}) {
831
831
  }
832
832
  return t2;
833
833
  };
834
+ const body = async (sha, e) => (!client.canWrite ? await client.readRawFile(e.path, sha).catch(() => void 0) : void 0) ?? client.getBlobText(e.sha);
834
835
  const root = config.tokens.root.replace(/\/$/, "");
835
836
  const prefix = root === "." || !root ? "" : `${root}/`;
836
837
  const limit = Math.max(1, opts.concurrency ?? 4);
@@ -885,7 +886,7 @@ function gitHubHistoryBackend(client, config, opts = {}) {
885
886
  const blobs = entries.filter((e) => e.type === "blob" && e.path.startsWith(prefix));
886
887
  const picked = new Set(selectTokenFiles(config, blobs.map((e) => e.path)));
887
888
  const wanted = blobs.filter((e) => picked.has(prefix ? e.path.slice(prefix.length) : e.path));
888
- const texts = await pool(wanted, async (e) => [prefix ? e.path.slice(prefix.length) : e.path, await client.getBlobText(e.sha)]);
889
+ const texts = await pool(wanted, async (e) => [prefix ? e.path.slice(prefix.length) : e.path, await body(sha, e)]);
889
890
  return new Map(texts);
890
891
  },
891
892
  async changesetPaths(sha) {
@@ -895,7 +896,7 @@ function gitHubHistoryBackend(client, config, opts = {}) {
895
896
  },
896
897
  async readFile(sha, path) {
897
898
  const e = (await tree(sha)).find((x) => x.type === "blob" && x.path === path);
898
- return e ? client.getBlobText(e.sha) : null;
899
+ return e ? body(sha, e) : null;
899
900
  }
900
901
  };
901
902
  }
@@ -1112,7 +1113,7 @@ const RADIUS_ROLES = ["inset", "control", "container", "overlay"];
1112
1113
  const RESERVED = /* @__PURE__ */ new Set(["default", "base", "all", "none", "new", "blank", "primitives", "semantic", "components", "density"]);
1113
1114
  const BRAND_SLUG_RE = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;
1114
1115
  const DEFAULT_PRIMARY_CHROMA = 0.14;
1115
- const isObj$2 = (x) => !!x && typeof x === "object" && !Array.isArray(x);
1116
+ const isObj$3 = (x) => !!x && typeof x === "object" && !Array.isArray(x);
1116
1117
  const fileMap = (f) => f instanceof Map ? new Map(f) : new Map(Object.entries(f));
1117
1118
  const brandDisplayName = (slug) => slug.split("-").filter(Boolean).map((w) => w[0].toUpperCase() + w.slice(1)).join(" ");
1118
1119
  function brandLayers(config) {
@@ -1133,27 +1134,27 @@ function setAt(doc, path, node) {
1133
1134
  const keys = path.split(".");
1134
1135
  let cur = doc;
1135
1136
  for (const k of keys.slice(0, -1)) {
1136
- if (!isObj$2(cur[k])) cur[k] = {};
1137
+ if (!isObj$3(cur[k])) cur[k] = {};
1137
1138
  cur = cur[k];
1138
1139
  }
1139
1140
  const last = keys[keys.length - 1];
1140
- const prev = isObj$2(cur[last]) ? cur[last] : {};
1141
+ const prev = isObj$3(cur[last]) ? cur[last] : {};
1141
1142
  cur[last] = { ...prev, ...node };
1142
1143
  }
1143
1144
  function getAt(doc, path) {
1144
1145
  let cur = doc;
1145
- for (const k of path.split(".")) cur = isObj$2(cur) ? cur[k] : void 0;
1146
- return isObj$2(cur) ? cur : void 0;
1146
+ for (const k of path.split(".")) cur = isObj$3(cur) ? cur[k] : void 0;
1147
+ return isObj$3(cur) ? cur : void 0;
1147
1148
  }
1148
1149
  function typeAt(doc, path) {
1149
1150
  let cur = doc;
1150
1151
  let type;
1151
1152
  for (const k of path.split(".")) {
1152
- if (!isObj$2(cur)) return type;
1153
+ if (!isObj$3(cur)) return type;
1153
1154
  if (typeof cur.$type === "string") type = cur.$type;
1154
1155
  cur = cur[k];
1155
1156
  }
1156
- return isObj$2(cur) && typeof cur.$type === "string" ? cur.$type : type;
1157
+ return isObj$3(cur) && typeof cur.$type === "string" ? cur.$type : type;
1157
1158
  }
1158
1159
  function rampFor(input, pinStep, kind) {
1159
1160
  if (typeof input === "number" || typeof input === "string" && /^\d+(\.\d+)?$/.test(input.trim())) {
@@ -1210,7 +1211,7 @@ function listBrands(source) {
1210
1211
  doc = JSON.parse(files.get(file) ?? "{}");
1211
1212
  } catch {
1212
1213
  }
1213
- const meta = isObj$2(doc.$extensions) && isObj$2(doc.$extensions["dev.bridge.brand"]) ? doc.$extensions["dev.bridge.brand"] : {};
1214
+ const meta = isObj$3(doc.$extensions) && isObj$3(doc.$extensions["dev.bridge.brand"]) ? doc.$extensions["dev.bridge.brand"] : {};
1214
1215
  const combo = set.normalizeCombo({ brand: slug });
1215
1216
  const primary = set.resolve("color.action.primary.bg", combo);
1216
1217
  const overrides = layers.override ? (config.axes[layers.overrideAxis]?.values ?? []).map((v) => fill(layers.override, { brand: slug, [layers.overrideAxis]: v })).filter((f) => files.has(f)) : [];
@@ -1300,7 +1301,7 @@ function planNewBrand(source, input) {
1300
1301
  for (const [path, defs] of before.view(before.defaultCombo)) {
1301
1302
  const m = /^radius\.([\w-]+)$/.exec(path);
1302
1303
  const v = defs[defs.length - 1].value;
1303
- if (m && isObj$2(v) && typeof v.value === "number" && v.unit === "px" && !getAt(doc, path)) scale.set(v.value, m[1]);
1304
+ if (m && isObj$3(v) && typeof v.value === "number" && v.unit === "px" && !getAt(doc, path)) scale.set(v.value, m[1]);
1304
1305
  }
1305
1306
  const radius = input.radius ?? (blank ? RADIUS_PRESETS[0].radius : void 0);
1306
1307
  if (radius) {
@@ -1339,9 +1340,9 @@ function planNewBrand(source, input) {
1339
1340
  }
1340
1341
  const palette = getAt(doc, "palette");
1341
1342
  for (const [role, group] of Object.entries(palette ?? {})) {
1342
- if (role.startsWith("$") || !isObj$2(group)) continue;
1343
+ if (role.startsWith("$") || !isObj$3(group)) continue;
1343
1344
  for (const [step, node] of Object.entries(group)) {
1344
- if (step.startsWith("$") || !isObj$2(node) || !("$value" in node) || typeof node.$value === "string") continue;
1345
+ if (step.startsWith("$") || !isObj$3(node) || !("$value" in node) || typeof node.$value === "string") continue;
1345
1346
  const ramp = `${slug}-${role}`;
1346
1347
  const entry = prims.get(ramp) ?? { description: `${name} ${role}. Exact values set when the brand was created.`, steps: /* @__PURE__ */ new Map() };
1347
1348
  entry.steps.set(Number(step), node.$value);
@@ -1354,7 +1355,7 @@ function planNewBrand(source, input) {
1354
1355
  if (prims.size && files.has(primFile)) issues.push({ level: "error", code: "slug-file-exists", message: `${tokensPath(config, primFile)} already exists. Pick another name.` });
1355
1356
  for (const r of prims.keys()) if (before.allPaths().some((p2) => p2.startsWith(`color.${r}.`))) issues.push({ level: "error", code: "ramp-exists", message: `A primitive ramp color.${r} already exists. Pick another name.` });
1356
1357
  doc.$description = `${name}: created with Bridge, started from ${blank ? "a blank brand" : brandDisplayName(from)}.`;
1357
- doc.$extensions = { ...isObj$2(doc.$extensions) ? doc.$extensions : {}, "dev.bridge.brand": { name, from, ...Object.keys(anchors).length ? { anchors } : {} } };
1358
+ doc.$extensions = { ...isObj$3(doc.$extensions) ? doc.$extensions : {}, "dev.bridge.brand": { name, from, ...Object.keys(anchors).length ? { anchors } : {} } };
1358
1359
  const { $description, $extensions, ...rest } = doc;
1359
1360
  const brandFile = fill(layers.brand, { brand: slug });
1360
1361
  const nextFiles = new Map(files);
@@ -2224,7 +2225,7 @@ function colorDelta(a2, b) {
2224
2225
  return 0.5053 * y * y + 0.299 * i * i + 0.1957 * q * q;
2225
2226
  }
2226
2227
  function foundNear(img, x, y, c, radius, max) {
2227
- for (let dy = -radius; dy <= radius; dy++) for (let dx = -radius; dx <= radius; dx++) if (colorDelta(c, rgbAt(img, x + dx, y + dy)) <= max) return true;
2228
+ for (let dy2 = -radius; dy2 <= radius; dy2++) for (let dx2 = -radius; dx2 <= radius; dx2++) if (colorDelta(c, rgbAt(img, x + dx2, y + dy2)) <= max) return true;
2228
2229
  return false;
2229
2230
  }
2230
2231
  function compareImages(figma, code2, options = {}) {
@@ -3221,15 +3222,15 @@ class StorybookIndexError extends Error {
3221
3222
  code;
3222
3223
  status;
3223
3224
  }
3224
- const isObj$1 = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
3225
+ const isObj$2 = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
3225
3226
  const str = (v) => typeof v === "string" && v.trim() ? v : void 0;
3226
3227
  function entryFrom(key, raw, v3) {
3227
- if (!isObj$1(raw)) return null;
3228
+ if (!isObj$2(raw)) return null;
3228
3229
  const id = str(raw.id) ?? key;
3229
3230
  const title = str(raw.title) ?? str(raw.kind);
3230
3231
  const name = str(raw.name) ?? str(raw.story);
3231
3232
  if (!id || !title || !name) return null;
3232
- const params = isObj$1(raw.parameters) ? raw.parameters : {};
3233
+ const params = isObj$2(raw.parameters) ? raw.parameters : {};
3233
3234
  const type = raw.type === "docs" || raw.type === "story" ? raw.type : v3 && params.docsOnly === true ? "docs" : "story";
3234
3235
  const e = {
3235
3236
  id,
@@ -3265,13 +3266,13 @@ function groupStorybookComponents(entries) {
3265
3266
  return out.sort((a2, b) => a2.title.localeCompare(b.title));
3266
3267
  }
3267
3268
  function parseStorybookIndex(json, source) {
3268
- if (!isObj$1(json)) throw new StorybookIndexError("not-json", "The Storybook index is not a JSON object.");
3269
+ if (!isObj$2(json)) throw new StorybookIndexError("not-json", "The Storybook index is not a JSON object.");
3269
3270
  if (typeof json.loginUrl === "string" && !("entries" in json) && !("stories" in json)) {
3270
3271
  throw new StorybookIndexError("private", "This Storybook is private: it asks for a sign-in before showing its index.");
3271
3272
  }
3272
- const map = isObj$1(json.entries) ? json.entries : isObj$1(json.stories) ? json.stories : null;
3273
+ const map = isObj$2(json.entries) ? json.entries : isObj$2(json.stories) ? json.stories : null;
3273
3274
  if (!map) throw new StorybookIndexError("empty", "This file has no Storybook entries.");
3274
- const v3 = !isObj$1(json.entries);
3275
+ const v3 = !isObj$2(json.entries);
3275
3276
  const entries = Object.entries(map).map(([k, raw]) => entryFrom(k, raw, v3)).filter((e) => e !== null);
3276
3277
  if (!entries.length) throw new StorybookIndexError("empty", "This Storybook index lists no stories or docs.");
3277
3278
  const version = typeof json.v === "number" ? json.v : v3 ? 3 : 4;
@@ -4208,7 +4209,7 @@ const SNAPSHOT_AUDITS_DIR = "audits";
4208
4209
  const SNAPSHOT_MAX_BYTES = 5e6;
4209
4210
  class SnapshotError extends Error {
4210
4211
  }
4211
- const isObj = (x) => !!x && typeof x === "object" && !Array.isArray(x);
4212
+ const isObj$1 = (x) => !!x && typeof x === "object" && !Array.isArray(x);
4212
4213
  const isStr = (x) => typeof x === "string";
4213
4214
  function parseSnapshot(input) {
4214
4215
  let data = input;
@@ -4219,18 +4220,18 @@ function parseSnapshot(input) {
4219
4220
  throw new SnapshotError(`${SNAPSHOT_FILE} is not valid JSON (${err.message})`);
4220
4221
  }
4221
4222
  }
4222
- if (!isObj(data) || data.kind !== "bridge-snapshot") throw new SnapshotError(`${SNAPSHOT_FILE} is not a Bridge snapshot`);
4223
+ if (!isObj$1(data) || data.kind !== "bridge-snapshot") throw new SnapshotError(`${SNAPSHOT_FILE} is not a Bridge snapshot`);
4223
4224
  if (data.schemaVersion !== SNAPSHOT_SCHEMA_VERSION) throw new SnapshotError(`${SNAPSHOT_FILE} is schema version ${String(data.schemaVersion)}; this version of Bridge reads ${SNAPSHOT_SCHEMA_VERSION}`);
4224
4225
  const repo = data.repo;
4225
- if (!isObj(repo) || !isStr(repo.owner) || !isStr(repo.name) || !isStr(repo.branch)) throw new SnapshotError(`${SNAPSHOT_FILE}: repo needs owner, name and branch`);
4226
+ if (!isObj$1(repo) || !isStr(repo.owner) || !isStr(repo.name) || !isStr(repo.branch)) throw new SnapshotError(`${SNAPSHOT_FILE}: repo needs owner, name and branch`);
4226
4227
  if (!isStr(data.sourceSha) || !data.sourceSha) throw new SnapshotError(`${SNAPSHOT_FILE}: sourceSha is missing`);
4227
4228
  if (!isStr(data.generatedAt)) throw new SnapshotError(`${SNAPSHOT_FILE}: generatedAt is missing`);
4228
4229
  if (!Array.isArray(data.paths) || !data.paths.every(isStr)) throw new SnapshotError(`${SNAPSHOT_FILE}: paths must be a list of strings`);
4229
- if (!isObj(data.files) || !Object.values(data.files).every(isStr)) throw new SnapshotError(`${SNAPSHOT_FILE}: files must map paths to text`);
4230
- if (data.figma !== null && (!isObj(data.figma) || !isStr(data.figma.path) || !Array.isArray(data.figma.coverage))) throw new SnapshotError(`${SNAPSHOT_FILE}: figma must be null or { path, coverage }`);
4231
- if (!isObj(data.summary) || typeof data.summary.tokens !== "number") throw new SnapshotError(`${SNAPSHOT_FILE}: summary is missing`);
4232
- if (!isObj(data.contrast) || !Array.isArray(data.contrast.pairs)) throw new SnapshotError(`${SNAPSHOT_FILE}: contrast needs pairs`);
4233
- if (!Array.isArray(data.audits) || !data.audits.every((a2) => isObj(a2) && isStr(a2.id) && isStr(a2.path) && isObj(a2.metrics))) throw new SnapshotError(`${SNAPSHOT_FILE}: audits must be a list of { id, path, metrics }`);
4230
+ if (!isObj$1(data.files) || !Object.values(data.files).every(isStr)) throw new SnapshotError(`${SNAPSHOT_FILE}: files must map paths to text`);
4231
+ if (data.figma !== null && (!isObj$1(data.figma) || !isStr(data.figma.path) || !Array.isArray(data.figma.coverage))) throw new SnapshotError(`${SNAPSHOT_FILE}: figma must be null or { path, coverage }`);
4232
+ if (!isObj$1(data.summary) || typeof data.summary.tokens !== "number") throw new SnapshotError(`${SNAPSHOT_FILE}: summary is missing`);
4233
+ if (!isObj$1(data.contrast) || !Array.isArray(data.contrast.pairs)) throw new SnapshotError(`${SNAPSHOT_FILE}: contrast needs pairs`);
4234
+ if (!Array.isArray(data.audits) || !data.audits.every((a2) => isObj$1(a2) && isStr(a2.id) && isStr(a2.path) && isObj$1(a2.metrics))) throw new SnapshotError(`${SNAPSHOT_FILE}: audits must be a list of { id, path, metrics }`);
4234
4235
  if (!Array.isArray(data.problems)) throw new SnapshotError(`${SNAPSHOT_FILE}: problems must be a list`);
4235
4236
  return data;
4236
4237
  }
@@ -4382,41 +4383,441 @@ function snapshotLlmsTxt(model, snapshot) {
4382
4383
  return `${out.join("\n").replace(/\n{3,}/g, "\n\n").trim()}
4383
4384
  `;
4384
4385
  }
4386
+ const ACTIVITY_SCHEMA_VERSION = 1;
4387
+ const ACTIVITY_FILE = "activity.json";
4388
+ const ACTIVITY_MAX_BYTES = 3e6;
4389
+ const ACTIVITY_MAX_AGE_MS = 24 * 60 * 60 * 1e3;
4390
+ const ACTIVITY_LIMITS = {
4391
+ /** Open pull requests recorded in full (the page of each; the list carries every open one). */
4392
+ branches: 30,
4393
+ /** Open suggestions read with their comments (parsed payload, counted approvals). */
4394
+ suggestions: 30,
4395
+ /** Request issues listed (open and closed); open ones are read with their comments. */
4396
+ requests: 30,
4397
+ /** Merged pull requests summarized. */
4398
+ merged: 20,
4399
+ /** Token history entries (core loadGitHubHistory limit). */
4400
+ history: 20,
4401
+ /** History entries whose two commits' file lists are recorded, so their before/after opens without the API. */
4402
+ historyTrees: 10
4403
+ };
4404
+ class ActivityError extends Error {
4405
+ }
4406
+ const isObj = (x) => !!x && typeof x === "object" && !Array.isArray(x);
4407
+ const API = "https://api.github.com";
4408
+ function activityKey(url) {
4409
+ let u;
4410
+ try {
4411
+ u = new URL(url, API);
4412
+ } catch {
4413
+ return null;
4414
+ }
4415
+ if (u.origin !== API) return null;
4416
+ const parts = u.pathname.split("/");
4417
+ if (parts[1] === "repos" && parts.length > 3) {
4418
+ parts[2] = parts[2].toLowerCase();
4419
+ parts[3] = parts[3].toLowerCase();
4420
+ } else if (parts[1] === "users" && parts.length > 2) parts[2] = parts[2].toLowerCase();
4421
+ const q = [...u.searchParams].sort(([a2, av3], [b, bv3]) => a2 === b ? av3 < bv3 ? -1 : 1 : a2 < b ? -1 : 1);
4422
+ const search = q.length ? `?${new URLSearchParams(q).toString()}` : "";
4423
+ return parts.join("/") + search;
4424
+ }
4425
+ const KEPT_URLS = /* @__PURE__ */ new Set(["html_url", "avatar_url", "target_url", "details_url", "environment_url", "raw_url"]);
4426
+ const DROPPED = /* @__PURE__ */ new Set(["_links", "patch", "body_html", "body_text", "reactions", "performed_via_github_app", "node_id", "gravatar_id", "user_view_type", "site_admin", "event", "sub_issues_summary", "issue_dependencies_summary", "pull_request_review_id"]);
4427
+ const LONG_TEXT = 6e4;
4428
+ const trimUser = (u) => ({
4429
+ login: u.login,
4430
+ ...u.id !== void 0 ? { id: u.id } : {},
4431
+ ...u.avatar_url ? { avatar_url: u.avatar_url } : {},
4432
+ ...u.html_url ? { html_url: u.html_url } : {},
4433
+ ...u.type ? { type: u.type } : {}
4434
+ });
4435
+ const trimRepo = (r) => ({
4436
+ ...r.id !== void 0 ? { id: r.id } : {},
4437
+ name: r.name,
4438
+ full_name: r.full_name,
4439
+ ...r.private !== void 0 ? { private: r.private } : {},
4440
+ ...r.fork !== void 0 ? { fork: r.fork } : {},
4441
+ ...r.default_branch ? { default_branch: r.default_branch } : {},
4442
+ ...isObj(r.owner) ? { owner: trimUser(r.owner) } : {},
4443
+ ...r.html_url ? { html_url: r.html_url } : {}
4444
+ });
4445
+ function trimGitHub(value, key = "") {
4446
+ if (typeof value === "string") return value.length > LONG_TEXT ? value.slice(0, LONG_TEXT) : value;
4447
+ if (Array.isArray(value)) return value.map((v) => trimGitHub(v, key));
4448
+ if (!isObj(value)) return value;
4449
+ if (key === "tree" && typeof value.path === "string" && typeof value.type === "string") return { path: value.path, type: value.type, sha: value.sha, ...value.mode ? { mode: value.mode } : {} };
4450
+ if ((key === "repo" || key === "repository" || key === "head_repository") && typeof value.full_name === "string") return trimRepo(value);
4451
+ if (typeof value.login === "string" && ("avatar_url" in value || "type" in value)) return trimUser(value);
4452
+ const out = {};
4453
+ for (const [k, v] of Object.entries(value)) {
4454
+ if (DROPPED.has(k)) continue;
4455
+ if ((k === "url" || k.endsWith("_url")) && !KEPT_URLS.has(k)) continue;
4456
+ if (k === "output" && isObj(v)) {
4457
+ out[k] = { title: v.title ?? null, summary: typeof v.summary === "string" ? v.summary.slice(0, 2e3) : null, annotations_count: v.annotations_count ?? 0 };
4458
+ continue;
4459
+ }
4460
+ if (k === "app" && isObj(v)) {
4461
+ out[k] = { id: v.id, slug: v.slug, name: v.name };
4462
+ continue;
4463
+ }
4464
+ out[k] = trimGitHub(v, k);
4465
+ }
4466
+ return out;
4467
+ }
4468
+ const JSON_ACCEPT = /application\/(vnd\.github\+)?json/;
4469
+ const SKIP = /* @__PURE__ */ Symbol("skip");
4470
+ function activityTreeFilter(config) {
4471
+ const under = (dir) => {
4472
+ const d = (dir ?? "").replace(/^\.\/|\/$/g, "");
4473
+ return d && d !== "." ? `${d}/` : "";
4474
+ };
4475
+ const tokens = under(config.tokens.root);
4476
+ const changesets = config.changesets ? under(config.changesets.dir) : null;
4477
+ const pkg = new Set(packageDirCandidates(config).flatMap((d) => [d ? `${d}/CHANGELOG.md` : "CHANGELOG.md", d ? `${d}/package.json` : "package.json"]));
4478
+ return (p2) => p2 === "bridge.config.json" || pkg.has(p2) || (tokens ? p2.startsWith(tokens) : p2.endsWith(".json")) || changesets !== null && changesets !== "" && p2.startsWith(changesets);
4479
+ }
4480
+ const UNREAD = [/\/git\/blobs\//, /\/commits\/[^/]+\/pulls$/, /\/commits\?/, /\/tags\?/, /\/contents\//];
4481
+ function activityShaper(config) {
4482
+ const keep = activityTreeFilter(config);
4483
+ return (key, body) => {
4484
+ if (UNREAD.some((r) => r.test(key))) return SKIP;
4485
+ if (key.includes("/git/trees/") && isObj(body) && Array.isArray(body.tree)) return { sha: body.sha, tree: body.tree.filter((e) => keep(e.path)), truncated: Boolean(body.truncated) };
4486
+ if (key.includes("/compare/") && isObj(body)) {
4487
+ const c = body;
4488
+ return {
4489
+ status: c.status,
4490
+ ahead_by: c.ahead_by,
4491
+ behind_by: c.behind_by,
4492
+ total_commits: c.total_commits,
4493
+ merge_base_commit: c.merge_base_commit ? { sha: c.merge_base_commit.sha } : null,
4494
+ base_commit: c.base_commit ? { sha: c.base_commit.sha, commit: { tree: { sha: c.base_commit.commit?.tree?.sha } } } : null,
4495
+ files: Array.isArray(c.files) ? c.files.map((f) => ({ filename: f.filename, status: f.status, ...f.previous_filename ? { previous_filename: f.previous_filename } : {}, sha: f.sha, additions: f.additions, deletions: f.deletions, changes: f.changes })) : []
4496
+ };
4497
+ }
4498
+ return body;
4499
+ };
4500
+ }
4501
+ const HISTORY_MAX_CHANGES = 100;
4502
+ function capHistory(report, max = HISTORY_MAX_CHANGES) {
4503
+ return {
4504
+ ...report,
4505
+ entries: report.entries.map((e) => e.changes.length > max || (e.reasons?.length ?? 0) > max ? { ...e, changes: e.changes.slice(0, max), ...e.reasons ? { reasons: e.reasons.slice(0, max) } : {} } : e)
4506
+ };
4507
+ }
4508
+ function recordingFetch(fetchImpl, into, shape2 = (_k, b) => b) {
4509
+ return async (url, init) => {
4510
+ const res = await fetchImpl(url, init);
4511
+ const method = (init?.method ?? "GET").toUpperCase();
4512
+ const accept = init?.headers?.Accept ?? init?.headers?.accept ?? "application/vnd.github+json";
4513
+ const key = activityKey(url);
4514
+ if (method !== "GET" || !key || !JSON_ACCEPT.test(accept) || res.status !== 200 && res.status !== 404) return res;
4515
+ const text = await res.text();
4516
+ let body;
4517
+ try {
4518
+ body = JSON.parse(text);
4519
+ } catch {
4520
+ return { ok: res.ok, status: res.status, headers: res.headers, json: async () => JSON.parse(text), text: async () => text };
4521
+ }
4522
+ const shaped = shape2(key, trimGitHub(body));
4523
+ if (shaped !== SKIP) into.set(key, { status: res.status, body: shaped });
4524
+ return { ok: res.ok, status: res.status, ...res.headers ? { headers: res.headers } : {}, json: async () => JSON.parse(text), text: async () => text };
4525
+ };
4526
+ }
4527
+ const labelObjs = (labels) => labelNames(labels).map((name) => ({ name }));
4528
+ function labelNames(labels) {
4529
+ return (labels ?? []).map((l) => typeof l === "string" ? l : l.name ?? "").filter(Boolean);
4530
+ }
4531
+ const byUpdated = (a2, b) => a2.updated_at < b.updated_at ? 1 : a2.updated_at > b.updated_at ? -1 : 0;
4532
+ async function collectActivity(input) {
4533
+ const limits = { ...ACTIVITY_LIMITS, ...input.limits };
4534
+ const responses = /* @__PURE__ */ new Map();
4535
+ const rec = recordingFetch(input.fetch, responses, activityShaper(input.config));
4536
+ const client = new GitHubClient(`${input.owner}/${input.repo}`, input.token, rec, { attempts: 2, baseDelayMs: 500, sleep: (ms) => new Promise((r) => setTimeout(r, ms)) }, { etags: false });
4537
+ const R = `/repos/${input.owner}/${input.repo}`;
4538
+ const problems = [];
4539
+ const truncated = [];
4540
+ let limited = false;
4541
+ const headers = { Accept: "application/vnd.github+json", "X-GitHub-Api-Version": "2022-11-28", ...input.token ? { Authorization: `Bearer ${input.token}` } : {} };
4542
+ const get = async (path) => {
4543
+ if (limited) return void 0;
4544
+ try {
4545
+ const res = await rec(`${API}${path}`, { headers });
4546
+ if (res.status === 404) return void 0;
4547
+ if (!res.ok) {
4548
+ if ((res.status === 403 || res.status === 429) && res.headers?.get("x-ratelimit-remaining") === "0") {
4549
+ limited = true;
4550
+ problems.push("GitHub hourly limit reached while reading activity: the rest was left out.");
4551
+ } else problems.push(`GitHub answered ${res.status} for ${path}`);
4552
+ return void 0;
4553
+ }
4554
+ return await res.json();
4555
+ } catch (err) {
4556
+ problems.push(`Could not read ${path}: ${err.message}`);
4557
+ return void 0;
4558
+ }
4559
+ };
4560
+ const safely = async (what, fn, fallback) => {
4561
+ if (limited) return fallback;
4562
+ try {
4563
+ return await fn();
4564
+ } catch (err) {
4565
+ const msg = err.message;
4566
+ if (/limit/i.test(msg) && err.status === 429) limited = true;
4567
+ problems.push(`${what}: ${msg}`);
4568
+ return fallback;
4569
+ }
4570
+ };
4571
+ const info = await safely("Repository", () => client.getRepo(), null);
4572
+ const branch = info?.defaultBranch ?? input.config.repo?.defaultBranch ?? "main";
4573
+ const headSha = await safely("Default branch", () => client.getBranchSha(branch), void 0) ?? "";
4574
+ const open = await get(`${R}/pulls?state=open&per_page=100`) ?? [];
4575
+ const closed = await get(`${R}/pulls?state=closed&sort=updated&direction=desc&per_page=30`) ?? [];
4576
+ await get(`${R}/pulls?state=closed&per_page=50&sort=updated&direction=desc`);
4577
+ await get(`${R}/rules/branches/${encodeURIComponent(branch)}`);
4578
+ await get(`${R}/git/matching-refs/heads/bridge-visual`);
4579
+ await safely("Owner account", () => client.getAccountType(input.owner), null);
4580
+ const prev = input.previous ?? null;
4581
+ const sameRepoPrev = Boolean(prev && sameRepo(prev, input));
4582
+ const prevOk = sameRepoPrev && Boolean(headSha) && prev.headSha === headSha;
4583
+ const kept = async (path, reuse) => {
4584
+ const key = reuse ? activityKey(`${API}${path}`) : null;
4585
+ const hit = key ? prev.responses[key] : void 0;
4586
+ if (key && hit) {
4587
+ responses.set(key, hit);
4588
+ return hit.status === 200 ? hit.body : void 0;
4589
+ }
4590
+ return get(path);
4591
+ };
4592
+ const branches = [];
4593
+ const sorted = [...open].sort(byUpdated);
4594
+ if (sorted.length > limits.branches) truncated.push(`${sorted.length - limits.branches} open branches beyond the ${limits.branches} most recently updated are listed without their pages.`);
4595
+ for (const [i, p2] of sorted.entries()) {
4596
+ const full = i < limits.branches;
4597
+ const base = {
4598
+ number: p2.number,
4599
+ title: p2.title,
4600
+ author: p2.user?.login ?? "",
4601
+ url: p2.html_url,
4602
+ branch: p2.head.ref,
4603
+ base: p2.base.ref,
4604
+ headSha: p2.head.sha,
4605
+ baseSha: p2.base.sha,
4606
+ state: p2.draft ? "draft" : "open",
4607
+ labels: labelNames(p2.labels),
4608
+ tier: effectiveTier(labelObjs(p2.labels), p2.body ?? null, null),
4609
+ createdAt: p2.created_at,
4610
+ updatedAt: p2.updated_at,
4611
+ comments: null,
4612
+ files: null,
4613
+ previews: [],
4614
+ checks: null
4615
+ };
4616
+ if (!full || limited) {
4617
+ branches.push(base);
4618
+ continue;
4619
+ }
4620
+ const n = p2.number;
4621
+ const was = prevOk ? prev.branches.find((b) => b.number === n) : void 0;
4622
+ const same = Boolean(was && was.updatedAt === p2.updated_at && was.headSha === p2.head.sha && was.comments !== null);
4623
+ const [pull, files, , , , , status] = await Promise.all([
4624
+ kept(`${R}/pulls/${n}`, same),
4625
+ kept(`${R}/pulls/${n}/files?per_page=100`, same),
4626
+ kept(`${R}/pulls/${n}/reviews?per_page=100`, same),
4627
+ kept(`${R}/issues/${n}/comments?per_page=100`, same),
4628
+ kept(`${R}/pulls/${n}/comments?per_page=100`, same),
4629
+ get(`${R}/commits/${p2.head.sha}/check-runs?per_page=100`),
4630
+ get(`${R}/commits/${p2.head.sha}/status`),
4631
+ kept(`${R}/compare/${encodeURIComponent(p2.base.ref)}...${p2.head.sha}`, same),
4632
+ kept(`${R}/git/trees/${p2.base.sha}?recursive=1`, sameRepoPrev),
4633
+ kept(`${R}/git/trees/${p2.head.sha}?recursive=1`, sameRepoPrev),
4634
+ kept(`${R}/issues/${n}/labels`, same)
4635
+ ]);
4636
+ const root = input.config.tokens.root.replace(/\/$/, "");
4637
+ branches.push({
4638
+ ...base,
4639
+ tier: effectiveTier(labelObjs((pull ?? p2).labels), (pull ?? p2).body ?? null, files ?? null),
4640
+ comments: pull ? (pull.comments ?? 0) + (pull.review_comments ?? 0) : null,
4641
+ files: files ? { changed: files.length, tokens: files.map((f) => f.filename).filter((f) => f.startsWith(`${root}/`) && f.endsWith(".json")) } : null,
4642
+ previews: (status?.statuses ?? []).filter((s) => s.state === "success" && s.target_url && /^https:\/\//.test(s.target_url)).map((s) => ({ context: s.context, url: s.target_url })),
4643
+ checks: status ? status.state === "success" || status.state === "failure" || status.state === "pending" ? status.state : "none" : null
4644
+ });
4645
+ }
4646
+ const gov = { owners: input.config.governance.owners, rights: input.config.governance.rights, soloOwnerCanApproveBoth: input.config.governance.soloOwnerCanApproveBoth };
4647
+ const items = await safely("Suggestions", () => listSuggestionsOnGitHub(client, { state: "open" }), []);
4648
+ const pullsAll = items.length ? await safely("Pull requests", () => client.listPullRequests("all"), []) : [];
4649
+ if (items.length > limits.suggestions) truncated.push(`${items.length - limits.suggestions} open suggestions beyond the ${limits.suggestions} newest are listed without their pages.`);
4650
+ const suggestions = [];
4651
+ for (const [i, s] of items.entries()) {
4652
+ const d = i < limits.suggestions ? await safely(`Suggestion #${s.number}`, () => getSuggestionOnGitHub(client, s.number, gov, { pulls: pullsAll }), null) : null;
4653
+ suggestions.push({
4654
+ number: s.number,
4655
+ title: s.title,
4656
+ author: s.author,
4657
+ url: s.url,
4658
+ createdAt: s.createdAt,
4659
+ kind: s.kind ?? null,
4660
+ status: d?.status ?? s.status,
4661
+ labels: s.labels,
4662
+ comments: d ? d.comments.length : null,
4663
+ payload: d?.parsed.ok ? d.parsed.payload : null,
4664
+ approvers: d?.approvals?.approvers ?? []
4665
+ });
4666
+ }
4667
+ const issues = await safely("Requests", () => client.listIssues({ label: REQUEST_LABEL, state: "all", perPage: 50 }), []);
4668
+ const requests = [];
4669
+ const openIssues = issues.filter((i) => i.state === "open");
4670
+ if (openIssues.length > limits.requests) truncated.push(`${openIssues.length - limits.requests} open requests beyond the ${limits.requests} newest are listed without their pages.`);
4671
+ for (const [i, r] of issues.slice(0, Math.max(limits.requests, 0)).entries()) {
4672
+ if (r.state === "open" && i < limits.requests) {
4673
+ await get(`${R}/issues/${r.number}`);
4674
+ await get(`${R}/issues/${r.number}/comments?per_page=100`);
4675
+ }
4676
+ const parsed = parseRequestIssue(r.body);
4677
+ const linked = [...open, ...closed].filter((p2) => new RegExp(`(?:close[sd]?|fix(?:e[sd])?|resolve[sd]?)\\s+#${r.number}\\b`, "i").test(p2.body ?? ""));
4678
+ requests.push({
4679
+ number: r.number,
4680
+ title: r.title,
4681
+ author: r.author,
4682
+ url: r.url,
4683
+ state: r.state,
4684
+ status: requestStatus({ state: r.state, stateReason: r.stateReason, linkedPrs: linked.map((p2) => ({ state: p2.state === "open" ? "open" : "closed", merged: Boolean(p2.merged_at) })) }),
4685
+ kind: parsed?.kind ?? null,
4686
+ component: parsed?.component ?? null,
4687
+ labels: r.labels,
4688
+ createdAt: r.createdAt
4689
+ });
4690
+ }
4691
+ const merged = closed.filter((p2) => p2.merged_at).slice(0, limits.merged).map((p2) => ({ number: p2.number, title: p2.title, author: p2.user?.login ?? "", url: p2.html_url, mergedAt: p2.merged_at, labels: labelNames(p2.labels), tier: effectiveTier(labelObjs(p2.labels), p2.body ?? null, null) }));
4692
+ let history = null;
4693
+ if (prevOk && prev.history) {
4694
+ history = prev.history;
4695
+ for (const [k, v] of Object.entries(prev.responses)) if (isHistoryKey(k) && !responses.has(k)) responses.set(k, v);
4696
+ } else if (!limited && headSha) {
4697
+ const read = await safely("Token history", () => loadGitHubHistory(client, input.config, { ref: branch, limit: limits.history }), null);
4698
+ history = read && capHistory(read);
4699
+ if (history) {
4700
+ const backend = gitHubHistoryBackend(client, input.config, { concurrency: 2 });
4701
+ const shas = [...new Set(history.entries.filter((e) => !e.bulk).slice(0, limits.historyTrees).flatMap((e) => [e.sha, ...e.baseSha ? [e.baseSha] : []]))];
4702
+ for (const sha of shas) await safely(`Files at ${sha.slice(0, 7)}`, () => backend.tree(sha), []);
4703
+ }
4704
+ }
4705
+ const activity = {
4706
+ kind: "bridge-activity",
4707
+ schemaVersion: ACTIVITY_SCHEMA_VERSION,
4708
+ tool: { name: "bridge", version: input.version },
4709
+ generatedAt: input.generatedAt ?? (/* @__PURE__ */ new Date()).toISOString(),
4710
+ repo: { owner: input.owner, name: input.repo, branch },
4711
+ headSha,
4712
+ branches,
4713
+ suggestions,
4714
+ requests,
4715
+ merged,
4716
+ history,
4717
+ responses: Object.fromEntries([...responses].sort(([a2], [b]) => a2 < b ? -1 : a2 > b ? 1 : 0)),
4718
+ truncated,
4719
+ problems
4720
+ };
4721
+ return fitActivity(activity);
4722
+ }
4723
+ const sameRepo = (a2, b) => a2.repo.owner.toLowerCase() === b.owner.toLowerCase() && a2.repo.name.toLowerCase() === b.repo.toLowerCase();
4724
+ const isHistoryKey = (k) => /\/git\/commits\/[0-9a-f]+$/.test(k) || /\/git\/trees\/[0-9a-f]+\?recursive=1$/.test(k);
4725
+ const activityBytes = (a2) => new TextEncoder().encode(`${JSON.stringify(a2)}
4726
+ `).length;
4727
+ function fitActivity(activity, max = ACTIVITY_MAX_BYTES) {
4728
+ if (activityBytes(activity) <= max) return activity;
4729
+ const out = { ...activity, responses: { ...activity.responses }, truncated: [...activity.truncated] };
4730
+ const drop = (test) => {
4731
+ for (const k of Object.keys(out.responses)) if (test(k)) delete out.responses[k];
4732
+ };
4733
+ drop((k) => k.includes("/git/trees/"));
4734
+ out.truncated.push("File lists were left out to keep activity.json small: a branch or history change reads them from GitHub.");
4735
+ if (activityBytes(out) <= max) return out;
4736
+ const old = [...out.branches].sort((a2, b) => a2.updatedAt < b.updatedAt ? -1 : 1);
4737
+ for (const b of old) {
4738
+ drop((k) => new RegExp(`/(pulls|issues)/${b.number}(/|$|\\?)`).test(k) || k.includes(`/commits/${b.headSha}/`) || k.includes(`...${b.headSha}`));
4739
+ if (activityBytes(out) <= max) {
4740
+ out.truncated.push("The pages of the least recently updated branches were left out: they read from GitHub.");
4741
+ return out;
4742
+ }
4743
+ }
4744
+ out.responses = {};
4745
+ out.truncated.push("Every recorded read was left out: pages read GitHub live.");
4746
+ return out;
4747
+ }
4748
+ function parseActivity(input) {
4749
+ let data = input;
4750
+ if (typeof input === "string") {
4751
+ try {
4752
+ data = JSON.parse(input);
4753
+ } catch (err) {
4754
+ throw new ActivityError(`${ACTIVITY_FILE} is not valid JSON (${err.message})`);
4755
+ }
4756
+ }
4757
+ if (!isObj(data) || data.kind !== "bridge-activity") throw new ActivityError(`${ACTIVITY_FILE} is not a Bridge activity file`);
4758
+ if (data.schemaVersion !== ACTIVITY_SCHEMA_VERSION) throw new ActivityError(`${ACTIVITY_FILE} is schema version ${String(data.schemaVersion)}; this version of Bridge reads ${ACTIVITY_SCHEMA_VERSION}`);
4759
+ const repo = data.repo;
4760
+ if (!isObj(repo) || typeof repo.owner !== "string" || typeof repo.name !== "string" || typeof repo.branch !== "string") throw new ActivityError(`${ACTIVITY_FILE}: repo needs owner, name and branch`);
4761
+ if (typeof data.generatedAt !== "string" || Number.isNaN(Date.parse(data.generatedAt))) throw new ActivityError(`${ACTIVITY_FILE}: generatedAt is missing`);
4762
+ for (const k of ["branches", "suggestions", "requests", "merged", "truncated", "problems"]) if (!Array.isArray(data[k])) throw new ActivityError(`${ACTIVITY_FILE}: ${k} must be a list`);
4763
+ if (!isObj(data.responses) || !Object.values(data.responses).every((r) => isObj(r) && typeof r.status === "number")) throw new ActivityError(`${ACTIVITY_FILE}: responses must map paths to { status, body }`);
4764
+ if (data.history !== null && !(isObj(data.history) && Array.isArray(data.history.entries))) throw new ActivityError(`${ACTIVITY_FILE}: history must be null or a history report`);
4765
+ return data;
4766
+ }
4767
+ const activityAge = (a2, now = Date.now()) => Math.max(0, now - Date.parse(a2.generatedAt));
4768
+ function activityIsUsable(a2, team, now = Date.now(), maxAge = ACTIVITY_MAX_AGE_MS) {
4769
+ return a2.repo.owner.toLowerCase() === team.owner.toLowerCase() && a2.repo.name.toLowerCase() === team.repo.toLowerCase() && activityAge(a2, now) <= maxAge;
4770
+ }
4771
+ function activityAnswer(a2, url) {
4772
+ const key = activityKey(url);
4773
+ if (!key) return void 0;
4774
+ const own = `/repos/${a2.repo.owner.toLowerCase()}/${a2.repo.name.toLowerCase()}`;
4775
+ if (!(key === own || key.startsWith(`${own}/`) || key.startsWith(`${own}?`) || key.startsWith("/users/"))) return void 0;
4776
+ return Object.prototype.hasOwnProperty.call(a2.responses, key) ? a2.responses[key] : void 0;
4777
+ }
4778
+ const activityRawUrl = (owner, repo) => `https://raw.githubusercontent.com/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/${SNAPSHOT_BRANCH}/${ACTIVITY_FILE}`;
4385
4779
  export {
4386
4780
  al as AAA_MIN,
4387
4781
  am as AA_MIN,
4782
+ ACTIVITY_FILE,
4783
+ ACTIVITY_LIMITS,
4784
+ ACTIVITY_MAX_AGE_MS,
4785
+ ACTIVITY_MAX_BYTES,
4786
+ ACTIVITY_SCHEMA_VERSION,
4388
4787
  ADMIN_ROLE_ID,
4389
4788
  ANTHROPIC_MESSAGES_URL,
4789
+ ActivityError,
4390
4790
  BELL,
4391
4791
  BRAND_FONTS,
4392
4792
  BRAND_SLUG_RE,
4393
- am2 as BULK_LIMIT,
4793
+ as2 as BULK_LIMIT,
4394
4794
  an as CHANGES_MODES,
4395
- an2 as COLOR_FIELDS,
4795
+ at2 as CI_STATE_LABEL,
4796
+ au2 as COLOR_FIELDS,
4396
4797
  COMBINE_COMPARE_LIMIT,
4397
4798
  COMPARE_FILE_LIMIT,
4398
- ao2 as COMPONENT_SPECS_VERSION,
4799
+ av2 as COMPONENT_SPECS_VERSION,
4399
4800
  CONFIG_FILE,
4400
- ap2 as CONFLICT_REASON,
4801
+ aw2 as CONFLICT_REASON,
4401
4802
  ao as CONTRAST_CELL_MAX,
4402
4803
  ap as CONTRAST_CHECKS_FILE,
4403
4804
  CONTRAST_THRESHOLDS,
4404
4805
  ConfigError,
4405
4806
  DEFAULT_CHANGES_MODE,
4406
- aq2 as DEFAULT_COMPONENT_SPECS_FILE,
4807
+ ax2 as DEFAULT_COMPONENT_SPECS_FILE,
4407
4808
  aq as DEFAULT_GOVERNANCE,
4408
4809
  DEFAULT_OVERRIDE,
4409
4810
  DEFAULT_PRODUCTS,
4410
- ar2 as DEFAULT_PROTECTED_BRANCHES,
4811
+ ay2 as DEFAULT_PROTECTED_BRANCHES,
4411
4812
  ar as DEFAULT_RIGHTS,
4412
4813
  DEFAULT_TOKEN_PATHS,
4413
4814
  as as DEFAULT_VISUAL_IMPACT,
4414
4815
  DEMO_RELEASES,
4415
- as2 as DOCS_CHANGE_BUMP,
4816
+ az2 as DOCS_CHANGE_BUMP,
4416
4817
  DOCS_DRAFT_MODEL,
4417
- at2 as DOCS_EDITOR_ORIGIN,
4418
- au2 as DOCS_KEYS,
4419
- av2 as DOCS_MCP_ORIGIN,
4818
+ aA2 as DOCS_EDITOR_ORIGIN,
4819
+ aB2 as DOCS_KEYS,
4820
+ aC2 as DOCS_MCP_ORIGIN,
4420
4821
  DOCS_SELECTION_MODES,
4421
4822
  DRAFTED_BY_CLAUDE_LABEL,
4422
4823
  DRAFTS_DIR,
@@ -4431,13 +4832,13 @@ export {
4431
4832
  DRAFT_VOICE_RULES,
4432
4833
  at as DTCG_TYPES,
4433
4834
  DraftPoller,
4434
- aw2 as EXPLORATION_CHECK,
4835
+ aD2 as EXPLORATION_CHECK,
4435
4836
  EXPLORATION_LABEL,
4436
4837
  EXPLORATION_NOTES_DIR,
4437
4838
  EXPLORATION_PREFIX,
4438
- ax2 as EXPLORATION_STATUS_LABEL,
4439
- ay2 as EXPLORATION_TIER_LABEL,
4440
- az2 as EXPLORATION_USE_CASES,
4839
+ aE2 as EXPLORATION_STATUS_LABEL,
4840
+ aF2 as EXPLORATION_TIER_LABEL,
4841
+ aG2 as EXPLORATION_USE_CASES,
4441
4842
  EXT_ID,
4442
4843
  EXT_SCOPES,
4443
4844
  FIDELITY_DEFAULTS,
@@ -4448,8 +4849,9 @@ export {
4448
4849
  FIGMA_REFERENCE_STORY,
4449
4850
  FIGMA_SPEC_DIR,
4450
4851
  FROM_FIGMA_LABEL,
4451
- aA2 as GitHubClient,
4852
+ GitHubClient,
4452
4853
  GitHubError,
4854
+ HISTORY_MAX_CHANGES,
4453
4855
  au as JsonParseError,
4454
4856
  LIGHTNESS,
4455
4857
  av as LINK_STATUS_TONE,
@@ -4472,16 +4874,17 @@ export {
4472
4874
  PROSE_KEYS,
4473
4875
  PROTECTION_PARTS,
4474
4876
  PROTECTION_PART_PHRASE,
4475
- aB2 as PULL_STATE_PILL,
4476
- aC2 as ProtectedBranchError,
4877
+ aH2 as PULL_STATE_PILL,
4878
+ aI2 as ProtectedBranchError,
4477
4879
  RADIUS_PRESETS,
4478
- aD2 as REDUCED_MOTION_NOTE,
4880
+ aJ2 as REDUCED_MOTION_NOTE,
4479
4881
  REPO_MODEL_DEFAULTS,
4480
4882
  REQUESTS_BRANCH,
4481
4883
  REQUEST_KINDS,
4482
4884
  REQUEST_LABEL,
4483
- aE2 as REQUEST_STATUS_LABEL,
4484
- aF2 as REVIEW_STATUS_ORDER,
4885
+ aK2 as REQUEST_STATUS_LABEL,
4886
+ aL2 as REVIEW_STATUS_LABEL,
4887
+ aM2 as REVIEW_STATUS_ORDER,
4485
4888
  aC as RIGHTS,
4486
4889
  aD as RIGHT_LABEL,
4487
4890
  RISK_LABELS,
@@ -4489,74 +4892,88 @@ export {
4489
4892
  SHARE_EXPLAIN,
4490
4893
  SIMILARITY_THRESHOLD,
4491
4894
  SINGLE_MODE,
4895
+ SKIP,
4492
4896
  SNAPSHOT_AUDITS_DIR,
4493
4897
  SNAPSHOT_BRANCH,
4494
4898
  SNAPSHOT_FILE,
4495
4899
  SNAPSHOT_LLMS_FILE,
4496
4900
  SNAPSHOT_MAX_BYTES,
4497
4901
  SNAPSHOT_SCHEMA_VERSION,
4498
- aG2 as SPEC_FIELDS,
4902
+ aN2 as SPEC_FIELDS,
4499
4903
  STEPS,
4500
- aH2 as SUGGESTION_APPLIED_MARK,
4501
- aI2 as SUGGESTION_APPLY_EXIT,
4502
- aJ2 as SUGGESTION_KINDS,
4503
- aK2 as SUGGESTION_LABEL,
4504
- aL2 as SUGGESTION_LIMITS,
4505
- aM2 as SUGGESTION_REVIEW_MARK,
4904
+ aO2 as SUGGESTION_APPLIED_MARK,
4905
+ aP2 as SUGGESTION_APPLY_EXIT,
4906
+ aQ2 as SUGGESTION_FINAL_LABELS,
4907
+ aR2 as SUGGESTION_KINDS,
4908
+ aS2 as SUGGESTION_LABEL,
4909
+ aT2 as SUGGESTION_LIMITS,
4910
+ aU2 as SUGGESTION_REVIEW_MARK,
4506
4911
  SUGGESTION_SCHEMA,
4507
- aN2 as SUGGESTION_STATE_LABELS,
4508
- aO2 as SUGGESTION_STATUS_LABEL,
4509
- aP2 as SUGGESTION_TOO_LARGE,
4912
+ aV2 as SUGGESTION_STATE_LABELS,
4913
+ aW2 as SUGGESTION_STATUS_LABEL,
4914
+ aX2 as SUGGESTION_STATUS_LABELS,
4915
+ aY2 as SUGGESTION_TOO_LARGE,
4510
4916
  SnapshotError,
4511
4917
  StorybookIndexError,
4512
- aQ2 as SuggestionError,
4918
+ aZ2 as SuggestionError,
4513
4919
  TIER_AXIS,
4514
4920
  TIER_NAMES,
4515
4921
  aF as TIER_ORDER,
4516
- aR2 as TOKEN_REJECTED_MESSAGE,
4517
- aS2 as TOKEN_SETTINGS_URL,
4518
- aT2 as TRIGGER_LABELS,
4922
+ a_2 as TOKEN_REJECTED_MESSAGE,
4923
+ a$2 as TOKEN_SETTINGS_URL,
4924
+ b02 as TRIGGER_LABELS,
4519
4925
  aG as TeamDirectory,
4520
- aU2 as UNRELEASED,
4521
- aH as VISUAL_CHECK_LABEL,
4926
+ b12 as UNRELEASED,
4927
+ aH as VISUAL_CHECKS_DOCS,
4928
+ aI as VISUAL_CHECK_LABEL,
4929
+ aJ as VISUAL_WORKFLOW_FILES,
4522
4930
  WAITING_FOR_CLAUDE_LABEL,
4523
- aV2 as acceptDocsDraft,
4524
- aW2 as acceptDocsText,
4931
+ b22 as acceptDocsDraft,
4932
+ b32 as acceptDocsText,
4525
4933
  accessAtLeast,
4526
4934
  accessState,
4935
+ activityAge,
4936
+ activityAnswer,
4937
+ activityBytes,
4938
+ activityIsUsable,
4939
+ activityKey,
4940
+ activityRawUrl,
4941
+ activityShaper,
4942
+ activityTreeFilter,
4527
4943
  addBrandToConfigText,
4528
4944
  addedComment,
4529
- aI as affectedContrast,
4530
- aJ as aliasOf,
4945
+ aK as affectedContrast,
4946
+ aL as aliasOf,
4531
4947
  aliasTarget,
4532
- aX2 as allowedMergeMethods,
4533
- aY2 as anatomyLabel,
4948
+ b42 as allowedMergeMethods,
4949
+ b52 as anatomyLabel,
4534
4950
  anchoredRamp,
4535
4951
  anthropicReplyText,
4536
4952
  anthropicRequest,
4537
- aK as appForProject,
4538
- aL as appUrl,
4953
+ aM as appForProject,
4954
+ aN as appUrl,
4955
+ b62 as appliedStatus,
4539
4956
  applyConfirmedRenames,
4540
4957
  applyDocsSections,
4541
4958
  applyTokenEdits,
4542
4959
  applyTokenMerge,
4543
- aM as approverEntries,
4544
- aN as approverLists,
4960
+ aO as approverEntries,
4961
+ aP as approverLists,
4545
4962
  askOthersToReviewOnGitHub,
4546
- aZ2 as assertSafeBranch,
4547
- a_2 as assignRequestOnGitHub,
4548
- a$2 as assignVersions,
4963
+ b72 as assertSafeBranch,
4964
+ b82 as assignRequestOnGitHub,
4965
+ b92 as assignVersions,
4549
4966
  auditId,
4550
- b02 as base64ToUtf8,
4551
- aO as baseBranchOf,
4967
+ ba2 as base64ToUtf8,
4968
+ aQ as baseBranchOf,
4552
4969
  bellChroma,
4553
- aP as branchName,
4970
+ aR as branchName,
4554
4971
  branchPreviewUrls,
4555
- aQ as branchSlug,
4972
+ aS as branchSlug,
4556
4973
  branchWithJiraKey,
4557
4974
  brandDisplayName,
4558
4975
  brandPreviewVariables,
4559
- b12 as bridgeMcpInstallCommand,
4976
+ bb2 as bridgeMcpInstallCommand,
4560
4977
  buildFidelityReport,
4561
4978
  buildHistoryEntry,
4562
4979
  buildReport,
@@ -4565,143 +4982,145 @@ export {
4565
4982
  buildTokenSet,
4566
4983
  buildUsageIndex,
4567
4984
  canAddTo,
4568
- b22 as canOverride,
4985
+ bc2 as canOverride,
4569
4986
  canShare,
4570
- aR as canShip,
4571
- b32 as canonicalJson,
4987
+ aT as canShip,
4988
+ bd2 as canonicalJson,
4989
+ capHistory,
4572
4990
  changeEdits,
4573
- aS as changeKind,
4991
+ aU as changeKind,
4574
4992
  changeList,
4575
- b42 as changeTable,
4576
- aT as changedModes,
4577
- aU as changesMode,
4578
- b52 as changesetBump,
4993
+ be2 as changeTable,
4994
+ aV as changedModes,
4995
+ aW as changesMode,
4996
+ bf2 as changesetBump,
4579
4997
  checkBrandSlug,
4580
4998
  checkLayeredPair,
4581
4999
  choiceFor,
4582
- b62 as classifyAuth,
5000
+ bg2 as classifyAuth,
4583
5001
  classifyLayered,
4584
5002
  classifyRisk,
4585
- b72 as cleanDocs,
5003
+ bh2 as cleanDocs,
4586
5004
  cleanDocsText,
4587
5005
  cleanDraftText,
4588
- aV as clearRawDeep,
4589
- b82 as clearSharedEtags,
5006
+ aX as clearRawDeep,
5007
+ bi2 as clearSharedEtags,
4590
5008
  closeExplorationOnGitHub,
4591
5009
  closeOnGitHub,
4592
- b92 as closingIssueNumbers,
5010
+ bj2 as closingIssueNumbers,
4593
5011
  coerceValue,
5012
+ collectActivity,
4594
5013
  collectHistory,
4595
5014
  collectRefs,
4596
5015
  colorDelta,
4597
- aW as colorToCss,
4598
- aX as colorsEqual,
5016
+ aY as colorToCss,
5017
+ aZ as colorsEqual,
4599
5018
  combineChanges,
4600
5019
  combineConflicts,
4601
- aY as comboKey,
5020
+ a_ as comboKey,
4602
5021
  commentOnGitHub,
4603
- ba2 as commitFileOnGitHub,
5022
+ bk2 as commitFileOnGitHub,
4604
5023
  commitLibraryResolution,
4605
- aZ as commitMessage,
4606
- a_ as compactJson,
5024
+ a$ as commitMessage,
5025
+ b0 as compactJson,
4607
5026
  compareImages,
4608
- bb2 as componentContrastPairs,
5027
+ bl2 as componentContrastPairs,
4609
5028
  componentForPath,
4610
- bc2 as componentMotion,
5029
+ bm2 as componentMotion,
4611
5030
  componentSlug,
4612
5031
  componentSpecSuggestionPayload,
4613
- bd2 as componentsUsingMotionToken,
4614
- be2 as composeChangeset,
5032
+ bn2 as componentsUsingMotionToken,
5033
+ bo2 as composeChangeset,
4615
5034
  composeFiles,
4616
5035
  composeNewBrandBody,
4617
5036
  composePendingDrafts,
4618
- a$ as composePrBody,
5037
+ b1 as composePrBody,
4619
5038
  composeProposalBody,
4620
5039
  composeRequestIssue,
4621
- bf2 as composeSuggestionAppliedComment,
4622
- bg2 as composeSuggestionIssue,
4623
- bh2 as composeSuggestionReviewComment,
4624
- b0 as composite,
5040
+ bp2 as composeSuggestionAppliedComment,
5041
+ bq2 as composeSuggestionIssue,
5042
+ br2 as composeSuggestionReviewComment,
5043
+ b2 as composite,
4625
5044
  conflictRoute,
4626
- b1 as contextFor,
5045
+ b3 as contextFor,
4627
5046
  contextLabel,
4628
- bi2 as continueDocsProposalOnGitHub,
5047
+ bs2 as continueDocsProposalOnGitHub,
4629
5048
  contrastDelta,
4630
- bj2 as contrastDeltaTable,
4631
- b2 as contrastLevel,
4632
- b3 as contrastPair,
4633
- b4 as contrastRatio,
5049
+ bt2 as contrastDeltaTable,
5050
+ b4 as contrastLevel,
5051
+ b5 as contrastPair,
5052
+ b6 as contrastRatio,
4634
5053
  contrastScope,
4635
- bk2 as countChanges,
4636
- bl2 as coverageSummary,
5054
+ bu2 as countChanges,
5055
+ bv2 as coverageSummary,
4637
5056
  createDocsDraftSession,
4638
5057
  createPendingDrafts,
4639
5058
  createSuggestionOnGitHub,
4640
- bm2 as cssModuleClasses,
5059
+ bw2 as cssModuleClasses,
4641
5060
  cssOf,
4642
5061
  cssVarOf,
4643
5062
  cssVarsIn,
4644
- bn2 as declineComment,
4645
- bo2 as declineReasonProblems,
4646
- bp2 as declineRequestOnGitHub,
4647
- bq2 as declineSuggestionOnGitHub,
5063
+ bx2 as declineComment,
5064
+ by2 as declineReasonProblems,
5065
+ bz2 as declineRequestOnGitHub,
5066
+ bA2 as declineSuggestionOnGitHub,
4648
5067
  decodePicks,
4649
5068
  defaultChoiceFor,
4650
- b5 as defaultContext,
4651
- br2 as defaultDocsFooter,
5069
+ b7 as defaultContext,
5070
+ bB2 as defaultDocsFooter,
4652
5071
  defaultFile,
4653
5072
  defaultModelConfig,
4654
5073
  defaultProduct,
4655
5074
  defaultScopes,
4656
- b6 as defaultTitle,
5075
+ b8 as defaultTitle,
4657
5076
  defineConfig,
4658
5077
  deletePendingDrafts,
4659
5078
  demoHistory,
4660
- b7 as detectLayout,
5079
+ b9 as detectLayout,
4661
5080
  diffLayered,
4662
5081
  dismissStaleFrom,
4663
- bs2 as docsAuthorLine,
4664
- bt2 as docsFileText,
5082
+ bC2 as docsAuthorLine,
5083
+ bD2 as docsFileText,
4665
5084
  docsPrompt,
4666
- bu2 as docsProposal,
4667
- bv2 as docsSectionShapes,
5085
+ bE2 as docsProposal,
5086
+ bF2 as docsSectionShapes,
4668
5087
  docsSectionsAnswer,
4669
5088
  docsSectionsResult,
4670
5089
  docsSelectionPrompt,
4671
- bw2 as docsSlug,
4672
- bx2 as docsSuggestionPayload,
5090
+ bG2 as docsSlug,
5091
+ bH2 as docsSuggestionPayload,
4673
5092
  docsTaskKeys,
4674
5093
  docsTaskPrompt,
4675
- by2 as docsText,
4676
- bz2 as draftChangeLine,
5094
+ bI2 as docsText,
5095
+ bJ2 as draftChangeLine,
4677
5096
  draftImagePath,
4678
5097
  draftItemBrief,
4679
- bA2 as draftPushDescription,
4680
- bB2 as draftRequestText,
5098
+ bK2 as draftPushDescription,
5099
+ bL2 as draftRequestText,
4681
5100
  draftSessionPath,
4682
5101
  dtcgColor,
4683
5102
  effectiveScopes,
4684
- bC2 as effectiveTier,
4685
- bD2 as eligibleReviewers,
5103
+ effectiveTier,
5104
+ bM2 as eligibleReviewers,
4686
5105
  emptyTokenFile,
4687
5106
  encodePicks,
4688
5107
  ensureRequestsBranch,
4689
- b8 as entriesFor,
4690
- b9 as entryLabel,
5108
+ ba as entriesFor,
5109
+ bb as entryLabel,
4691
5110
  evaluateContrastPairs,
4692
5111
  evaluatePairs,
4693
- ba as expandEntries,
4694
- bb as expandOwners,
4695
- bE2 as explorationBranch,
5112
+ bc as expandEntries,
5113
+ bd as expandOwners,
5114
+ bN2 as explorationBranch,
4696
5115
  explorationNote,
4697
5116
  explorationNotePath,
4698
5117
  explorationPrBody,
4699
5118
  explorationPrTitle,
4700
5119
  explorationProblems,
4701
- bF2 as explorationRules,
4702
- bG2 as explorationShareMessage,
5120
+ bO2 as explorationRules,
5121
+ bP2 as explorationShareMessage,
4703
5122
  explorationSlug,
4704
- bH2 as explorationSlugFromBranch,
5123
+ bQ2 as explorationSlugFromBranch,
4705
5124
  explorationStatus,
4706
5125
  explorationSummary,
4707
5126
  explorationTestBuildOnGitHub,
@@ -4710,9 +5129,9 @@ export {
4710
5129
  fetchStorybookIndex,
4711
5130
  fidelityComponentLine,
4712
5131
  fidelityVerdict,
4713
- bc as fieldChanges,
5132
+ be as fieldChanges,
4714
5133
  figmaBranchTitle,
4715
- bI2 as figmaCell,
5134
+ bR2 as figmaCell,
4716
5135
  figmaChangeOnGitHub,
4717
5136
  figmaDraftBody,
4718
5137
  figmaDraftBrief,
@@ -4723,158 +5142,164 @@ export {
4723
5142
  figmaPushStatusesOnGitHub,
4724
5143
  figmaSpecPath,
4725
5144
  figmaSpecSlug,
4726
- bJ2 as fileModes,
4727
- bK2 as filterHistory,
5145
+ bS2 as fileModes,
5146
+ bT2 as filterHistory,
4728
5147
  findExplorationOnGitHub,
4729
- bL2 as findOpenDocsProposal,
4730
- bM2 as findOpenDocsProposalOnGitHub,
5148
+ bU2 as findOpenDocsProposal,
5149
+ bV2 as findOpenDocsProposalOnGitHub,
4731
5150
  findPreviewComment,
4732
- bd as findProduct,
5151
+ bf as findProduct,
4733
5152
  findReferenceProblems,
4734
- be as findToken,
4735
- bf as findVercelComment,
4736
- bN2 as firstParagraph,
4737
- bg as flattenLayerFile,
5153
+ bg as findToken,
5154
+ bh as findVercelComment,
5155
+ bW2 as firstParagraph,
5156
+ fitActivity,
5157
+ bi as flattenLayerFile,
4738
5158
  flattenTokenFile,
4739
5159
  flattenTokens,
4740
5160
  formatChangeset,
4741
- bO2 as formatDocsJson,
5161
+ bX2 as formatDocsJson,
4742
5162
  formatFigmaSpec,
4743
- bh as formatNumber,
4744
- bi as formatOwnerEntry,
5163
+ bj as formatNumber,
5164
+ bk as formatOwnerEntry,
4745
5165
  formatValue,
4746
5166
  freshness,
4747
- bP2 as friendlyMessage,
5167
+ bY2 as friendlyMessage,
4748
5168
  fromHex,
4749
- bj as fromPlain,
5169
+ bl as fromPlain,
4750
5170
  generateRamp,
4751
- bk as getChild,
4752
- bl as getEntry,
4753
- bQ2 as getSuggestionOnGitHub,
5171
+ bm as getChild,
5172
+ bn as getEntry,
5173
+ getSuggestionOnGitHub,
4754
5174
  gitBlobSha,
4755
5175
  gitHubHistoryBackend,
4756
5176
  gitHubSource,
5177
+ bZ2 as githubSuggestionWorkspace,
4757
5178
  globBase,
4758
5179
  globToRegExp,
4759
5180
  groupStorybookComponents,
4760
- bm as groupsPhrase,
4761
- bR2 as hasSuggestionBlock,
4762
- bS2 as hasWriteAccess,
4763
- bT2 as hashSpec,
5181
+ bo as groupsPhrase,
5182
+ b_2 as hasSuggestionBlock,
5183
+ bp as hasVisualWorkflow,
5184
+ b$2 as hasWriteAccess,
5185
+ c02 as hashSpec,
4764
5186
  hexContrastRatio,
4765
5187
  hexLuminance,
4766
- bn as hexToRgba,
4767
- bo as holdersOf,
4768
- bU2 as iconComponentName,
5188
+ bq as hexToRgba,
5189
+ br as holdersOf,
5190
+ c12 as iconComponentName,
4769
5191
  idExtensionFor,
4770
5192
  impactedModules,
4771
5193
  importsIn,
4772
- bp as indexByPath,
4773
- bq as inheritedTypeAt,
4774
- br as installCommand,
4775
- bs as installCommandFromPreviewComment,
4776
- bV2 as installationFor,
4777
- bW2 as isActiveExploration,
5194
+ bs as indexByPath,
5195
+ bt as inheritedTypeAt,
5196
+ bu as installCommand,
5197
+ bv as installCommandFromPreviewComment,
5198
+ c22 as installationFor,
5199
+ c32 as isActiveExploration,
4778
5200
  isAlias$1 as isAlias,
4779
- bX2 as isAutomationPull,
4780
- bY2 as isDocsProposalBranch,
5201
+ c42 as isAutomationPull,
5202
+ c52 as isDocsProposalBranch,
4781
5203
  isDocsSelectionMode,
4782
5204
  isDraftSessionId,
4783
5205
  isExplorationBranch,
4784
5206
  isExplorationPull,
4785
- bt as isGuardrail,
4786
- bZ2 as isGuardrailPath,
5207
+ bw as isGuardrail,
5208
+ c62 as isGuardrailPath,
4787
5209
  isHex,
4788
- b_2 as isJiraKey,
4789
- b$2 as isMissingPermission,
5210
+ c72 as isJiraKey,
5211
+ c82 as isMissingPermission,
4790
5212
  isMultiMode,
4791
5213
  isPlanRefusal,
4792
5214
  isProseKey,
4793
- c02 as isReleasePull,
4794
- bu as isTeamEntry,
4795
- bv as isTokenFile,
4796
- c12 as isTokenRejected,
5215
+ c92 as isReleasePull,
5216
+ bx as isTeamEntry,
5217
+ by as isTokenFile,
5218
+ ca2 as isTokenRejected,
4797
5219
  isUnder,
4798
- bw as isVercelComment,
4799
- c22 as jiraIssueFields,
4800
- c32 as jiraKeyOf,
4801
- c42 as joinRepoPath,
4802
- bx as kindForMin,
5220
+ bz as isVercelComment,
5221
+ cb2 as jiraIssueFields,
5222
+ cc2 as jiraKeyOf,
5223
+ cd2 as joinRepoPath,
5224
+ bA as kindForMin,
4803
5225
  layeredImpact,
4804
- by as layeredParityIssues,
5226
+ bB as layeredParityIssues,
4805
5227
  layoutOptions,
4806
5228
  levenshtein,
4807
5229
  libraryBranchPlan,
4808
- bz as libraryIsPublic,
5230
+ bC as libraryIsPublic,
4809
5231
  libraryPreviewState,
4810
- c52 as linkRequestToExplorationOnGitHub,
5232
+ ce2 as linkRequestToExplorationOnGitHub,
4811
5233
  linkStatus,
4812
- c62 as linkSuggestionPrOnGitHub,
5234
+ cf2 as linkSuggestionPrOnGitHub,
4813
5235
  linkedLibraryBranchOnGitHub,
4814
- c72 as linkedPullsOf,
5236
+ cg2 as linkedPullsOf,
4815
5237
  listBrands,
4816
5238
  listExplorationsOnGitHub,
4817
5239
  listFigmaChangesOnGitHub,
4818
5240
  listPendingDrafts,
4819
5241
  listStylesheets,
4820
- c82 as listSuggestionsOnGitHub,
5242
+ listSuggestionsOnGitHub,
4821
5243
  loadConfig,
4822
5244
  loadGitHubHistory,
4823
5245
  loadProtection,
4824
- c92 as loadRepoFiles,
5246
+ ch2 as loadRepoFiles,
4825
5247
  loadRepoModel,
4826
5248
  loadRequiredChecks,
4827
- bA as luminance,
5249
+ ci2 as lowerFirstWord,
5250
+ bD as luminance,
4828
5251
  mailtoHref,
4829
5252
  markClaudeDraft,
4830
5253
  markFigmaChangeDraftedOnGitHub,
4831
- ca2 as memoryEtagStore,
4832
- cb2 as memorySource,
5254
+ cj2 as markSuggestionsAppliedOnGitHub,
5255
+ ck2 as memoryEtagStore,
5256
+ cl2 as memorySource,
4833
5257
  mergeDocsDraft,
4834
5258
  mergeDraftResults,
4835
- cc2 as mergeGate,
5259
+ cm2 as mergeGate,
4836
5260
  mergeOnGitHub,
4837
5261
  mergePiecesRecord,
4838
5262
  mergeReleases,
4839
5263
  missingChoices,
4840
- cd2 as missingPermissionMessage,
4841
- ce2 as missingProse,
5264
+ cn2 as missingPermissionMessage,
5265
+ co2 as missingProse,
4842
5266
  modeDisplayName,
4843
5267
  modeFile,
4844
- cf2 as modeLabel,
5268
+ cp2 as modeLabel,
4845
5269
  modesOf$1 as modesOf,
4846
5270
  moveToken,
4847
- bB as nearestQuestion,
5271
+ bE as nearestQuestion,
4848
5272
  nearestStep,
4849
- bC as neededBySection,
4850
- cg2 as needsDocsReview,
5273
+ bF as neededBySection,
5274
+ cq2 as needsDocsReview,
4851
5275
  neutralChroma,
4852
5276
  neutralOffset,
4853
5277
  newBrandSection,
4854
5278
  newDraftSessionId,
4855
- bD as nodesEqual,
5279
+ bG as nodesEqual,
4856
5280
  normalizeRepoPath,
4857
- bE as normalizeRights,
5281
+ bH as normalizeRights,
4858
5282
  normalizeStorybookUrl,
4859
5283
  oklch,
4860
5284
  oklchToLinear,
4861
5285
  onlyTokens,
4862
5286
  openComponentPushOnGitHub,
4863
5287
  openLibraryBranchOnGitHub,
4864
- ch2 as openPulls,
5288
+ cr2 as openPulls,
4865
5289
  overlap,
4866
5290
  overrideComment,
4867
- bF as overrideKey,
5291
+ bI as overrideKey,
4868
5292
  overrideMergeOnGitHub,
4869
- ci2 as overrideReasonProblem,
5293
+ cs2 as overrideReasonProblem,
4870
5294
  overrideRefusedComment,
4871
- bG as ownerEntryProblems,
5295
+ bJ as ownerEntryProblems,
4872
5296
  packageDir,
4873
5297
  packageDirCandidates,
4874
- bH as pairKey,
5298
+ bK as pairKey,
4875
5299
  parentDir,
5300
+ parseActivity,
4876
5301
  parseChangelog,
4877
- cj2 as parseChangesetText,
5302
+ ct2 as parseChangesetText,
4878
5303
  parseColor,
4879
5304
  parseComponentCss,
4880
5305
  parseComponentFamilies,
@@ -4883,84 +5308,84 @@ export {
4883
5308
  parseComponentTsx,
4884
5309
  parseContrastChecks,
4885
5310
  parseContrastSpecs,
4886
- bI as parseDimension,
5311
+ bL as parseDimension,
4887
5312
  parseDocsReply,
4888
5313
  parseDocsTaskAnswer,
4889
5314
  parseExplorationBody,
4890
5315
  parseFigmaOrigin,
4891
5316
  parseFigmaSpec,
4892
- ck2 as parseJiraKey,
4893
- bJ as parseJson,
5317
+ cu2 as parseJiraKey,
5318
+ bM as parseJson,
4894
5319
  parseModelConfig,
4895
- bK as parseNeededBy,
4896
- cl2 as parseOverrideComment,
4897
- bL as parseOwnerEntry,
5320
+ bN as parseNeededBy,
5321
+ cv2 as parseOverrideComment,
5322
+ bO as parseOwnerEntry,
4898
5323
  parsePendingDrafts,
4899
5324
  parsePiecesRecord,
4900
- cm2 as parseRepo,
4901
- cn2 as parseRequestIssue,
5325
+ cw2 as parseRepo,
5326
+ parseRequestIssue,
4902
5327
  parseSnapshot,
4903
5328
  parseStorybookIndex,
4904
- co2 as parseStructureChange,
4905
- cp2 as parseSuggestionAppliedComment,
4906
- cq2 as parseSuggestionIssue,
4907
- cr2 as parseSuggestionReviewComment,
4908
- cs2 as parseTier,
5329
+ cx as parseStructureChange,
5330
+ cy as parseSuggestionAppliedComment,
5331
+ cz as parseSuggestionIssue,
5332
+ cA as parseSuggestionReviewComment,
5333
+ cB as parseTier,
4909
5334
  parseTokenFile,
4910
- bM as parseVercelComment,
4911
- ct as patchDocsJson,
5335
+ bP as parseVercelComment,
5336
+ cC as patchDocsJson,
4912
5337
  pathId,
4913
5338
  pathSimilarity,
4914
- cu as pendingApprovals,
4915
- cv as permissionLabel,
5339
+ cD as pendingApprovals,
5340
+ cE as permissionLabel,
4916
5341
  pickedOption,
4917
5342
  p as pieceId,
4918
- bN as piecesSection,
4919
- bO as plainEqual,
5343
+ bQ as piecesSection,
5344
+ bR as plainEqual,
4920
5345
  planComponentPush,
4921
5346
  planNewBrand,
4922
5347
  planReference,
4923
5348
  planReferences,
4924
- cw as planRestore,
4925
- cx as planRevert,
4926
- cy as planSuggestionApply,
4927
- cz as planToJson,
5349
+ cF as planRestore,
5350
+ cG as planRevert,
5351
+ cH as planSuggestionApply,
5352
+ cI as planToJson,
4928
5353
  planTokenMerge,
4929
5354
  planTokenProposal,
4930
- cA as prNumberFromSubject,
4931
- cB as prefillDocs,
4932
- bP as previewComment,
5355
+ cJ as prNumberFromSubject,
5356
+ cK as prefillDocs,
5357
+ bS as previewComment,
4933
5358
  previewLinks,
4934
- bQ as previewLinksOf,
5359
+ bT as previewLinksOf,
4935
5360
  previewOverrides,
4936
- bR as previewUrl,
5361
+ bU as previewUrl,
4937
5362
  previewsSettled,
4938
5363
  productBranchRef,
4939
5364
  productBranchSentence,
4940
5365
  productBranchViewOnGitHub,
4941
- bS as productForPlace,
4942
- bT as productLabel,
4943
- bU as productMarks,
5366
+ bV as productForPlace,
5367
+ bW as productLabel,
5368
+ bX as productMarks,
4944
5369
  productOfBranch,
4945
5370
  productPreview,
4946
- bV as productProblems,
4947
- bW as productsOf,
4948
- bX as projectOfLabel,
5371
+ bY as productProblems,
5372
+ bZ as productsOf,
5373
+ b_ as projectOfLabel,
4949
5374
  promoteExplorationOnGitHub,
4950
5375
  promotionPlan,
4951
- cC as proposeDocsOnGitHub,
5376
+ cL as proposeDocsOnGitHub,
4952
5377
  a as proposedTokenPath,
4953
- cD as propsTable,
5378
+ cM as propsTable,
4954
5379
  protectLibrary,
4955
5380
  protectRefusal,
4956
- bY as protectedBranchesOf,
5381
+ b$ as protectedBranchesOf,
4957
5382
  protectionRuleset,
4958
5383
  protectionRulesetName,
4959
5384
  protectionSentence,
4960
5385
  protectionState,
4961
- cE as pullState,
4962
- cF as pushChangeRows,
4963
- cG as rateLimitMessage,
5386
+ cN as pullState,
5387
+ cO as pushChangeRows,
5388
+ cP as rateLimitMessage,
4964
5389
  readCombineBranch,
4965
5390
  readLibraryConflicts,
4966
5391
  readPendingDrafts,
@@ -4971,22 +5396,23 @@ export {
4971
5396
  readTokenAt,
4972
5397
  reconcileIds,
4973
5398
  recordPiecesOnGitHub,
5399
+ recordingFetch,
4974
5400
  recordingSource,
4975
5401
  referenceImagePath,
4976
- cH as releasePull,
5402
+ cQ as releasePull,
4977
5403
  releasesFromTags,
4978
5404
  removeToken,
4979
5405
  removedSide,
4980
- bZ as renderedColor,
4981
- cI as reopenEligibility,
5406
+ c0 as renderedColor,
5407
+ cR as reopenEligibility,
4982
5408
  reopenOnGitHub,
4983
- cJ as requestBrief,
4984
- cK as requestImagePath,
4985
- cL as requestIssueTitle,
4986
- cM as requestStatus,
4987
- cN as requiredApprovals,
5409
+ cS as requestBrief,
5410
+ cT as requestImagePath,
5411
+ cU as requestIssueTitle,
5412
+ requestStatus,
5413
+ cV as requiredApprovals,
4988
5414
  requiredCheckNames,
4989
- cO as requiredPermission,
5415
+ cW as requiredPermission,
4990
5416
  resolutionMessage,
4991
5417
  resolve,
4992
5418
  resolveBranchPreviews,
@@ -4994,20 +5420,20 @@ export {
4994
5420
  resolveRepoAccess,
4995
5421
  resolvedTokenFiles,
4996
5422
  reviewOnGitHub,
4997
- cP as reviewQueue,
4998
- cQ as reviewStatusKind,
4999
- cR as reviewSuggestionOnGitHub,
5000
- cS as reviewersToAsk,
5001
- b_ as rgbaToDtcg,
5423
+ cX as reviewQueue,
5424
+ cY as reviewStatusKind,
5425
+ cZ as reviewSuggestionOnGitHub,
5426
+ c_ as reviewersToAsk,
5427
+ c1 as rgbaToDtcg,
5002
5428
  rgbaToHex,
5003
- b$ as rightsProblems,
5429
+ c2 as rightsProblems,
5004
5430
  round3,
5005
5431
  rulesSettingsUrl,
5006
5432
  rulesetTargetsDefault,
5007
5433
  runLayeredContrast,
5008
- c0 as sameProducts,
5434
+ c3 as sameProducts,
5009
5435
  sameScopes,
5010
- c1 as sameToken,
5436
+ c4 as sameToken,
5011
5437
  sanitizeDocsReplacement,
5012
5438
  sanitizeDocsResult,
5013
5439
  sanitizeDocsSections,
@@ -5016,19 +5442,19 @@ export {
5016
5442
  sanitizeDraftTitle,
5017
5443
  sanitizeResultLines,
5018
5444
  scanComponents,
5019
- cT as sectionsNeedingReview,
5445
+ c$ as sectionsNeedingReview,
5020
5446
  selectTokenFiles,
5021
- c2 as serializeJson,
5447
+ c5 as serializeJson,
5022
5448
  serializePendingDrafts,
5023
5449
  serializeTokenFile,
5024
- cU as sha256Hex,
5450
+ d0 as sha256Hex,
5025
5451
  shadowedEdits,
5026
5452
  shareDescription,
5027
5453
  shareMessage,
5028
5454
  shareState,
5029
- c3 as shipPolicy,
5030
- cV as shortVariant,
5031
- cW as shortVariants,
5455
+ c6 as shipPolicy,
5456
+ d1 as shortVariant,
5457
+ d2 as shortVariants,
5032
5458
  showShare,
5033
5459
  siteRepoFromConfig,
5034
5460
  slugify,
@@ -5037,68 +5463,73 @@ export {
5037
5463
  snapshotLlmsTxt,
5038
5464
  snapshotSource,
5039
5465
  snapshotSummary,
5040
- c4 as snapshotUrl,
5041
- c5 as soloApprover,
5042
- c6 as soloOwnerOf,
5043
- c7 as soloOwnerSentence,
5044
- cX as specHash,
5045
- cY as specsUsage,
5466
+ c7 as snapshotUrl,
5467
+ c8 as soloApprover,
5468
+ c9 as soloOwnerOf,
5469
+ ca as soloOwnerSentence,
5470
+ d3 as specHash,
5471
+ d4 as specsUsage,
5046
5472
  stableCommand,
5473
+ d5 as stalenessStatus,
5047
5474
  startExplorationOnGitHub,
5048
5475
  stateSentence,
5049
5476
  storybookIframeUrl,
5050
5477
  storybookIndexUrls,
5051
5478
  storybookManagerUrl,
5052
- c8 as storybookUrl,
5479
+ cb as storybookUrl,
5053
5480
  styleGlobs,
5054
- c9 as suggestNearestComment,
5481
+ d6 as subjectTitle,
5482
+ cc as suggestNearestComment,
5055
5483
  suggestTokenProposalOnGitHub,
5056
- cZ as suggestionAllowedRoots,
5057
- c_ as suggestionAppliedComment,
5058
- c$ as suggestionApplyTable,
5059
- d0 as suggestionIssueTitle,
5060
- d1 as suggestionKindFromLabels,
5061
- d2 as suggestionLabels,
5062
- d3 as suggestionPathProblems,
5063
- d4 as suggestionPayloadSha,
5064
- d5 as suggestionReviewState,
5065
- d6 as suggestionShapeProblems,
5484
+ d7 as suggestionAllowedRoots,
5485
+ d8 as suggestionAppliedComment,
5486
+ d9 as suggestionApplyTable,
5487
+ da as suggestionIssueTitle,
5488
+ db as suggestionKindFromLabels,
5489
+ dc as suggestionLabelChanges,
5490
+ dd as suggestionLabels,
5491
+ de as suggestionPathProblems,
5492
+ df as suggestionPayloadSha,
5493
+ dg as suggestionReviewState,
5494
+ dh as suggestionShapeProblems,
5495
+ di as suggestionStalenessOnGitHub,
5066
5496
  suggestionStateFromLabels,
5067
- d7 as suggestionStateLabel,
5497
+ dj as suggestionStateLabel,
5068
5498
  suggestionStatus,
5069
- d8 as suggestionSubject,
5070
- d9 as summarizeApprovals,
5071
- da as summarizeCi,
5499
+ dk as suggestionSubject,
5500
+ dl as suggestionTouches,
5501
+ dm as summarizeApprovals,
5502
+ dn as summarizeCi,
5072
5503
  summarizeComponent,
5073
- db as summarizeSuggestionApprovals,
5074
- ca as summarizeTokenChange,
5504
+ dp as summarizeSuggestionApprovals,
5505
+ cd as summarizeTokenChange,
5075
5506
  switchToPublishedOnGitHub,
5076
- dc as syncSuggestionStateLabel,
5507
+ dq as syncSuggestionStateLabel,
5077
5508
  takeMine,
5078
- cb as tarballAssetName,
5079
- cc as tarballUrl,
5080
- cd as teamKey,
5081
- ce as teamKeyOf,
5082
- cf as teamUnreadableMessage,
5083
- cg as teamsIn,
5509
+ ce as tarballAssetName,
5510
+ cf as tarballUrl,
5511
+ cg as teamKey,
5512
+ ch as teamKeyOf,
5513
+ ci as teamUnreadableMessage,
5514
+ cj as teamsIn,
5084
5515
  threeWayDiff,
5085
5516
  tintedNeutral,
5086
- dd as titleOf,
5517
+ dr as titleOf,
5087
5518
  titleWithJiraKey,
5088
- ch as toAlias,
5089
- de as toChangeSummary,
5519
+ ck as toAlias,
5520
+ ds as toChangeSummary,
5090
5521
  toConfigJson,
5091
5522
  toHex,
5092
- ci as toMap,
5523
+ cl as toMap,
5093
5524
  toOklch,
5094
- cj as toPlain,
5095
- ck as tokenBump,
5096
- df as tokenCssVar,
5525
+ cm as toPlain,
5526
+ cn as tokenBump,
5527
+ dt as tokenCssVar,
5097
5528
  tokenFilesOf,
5098
- dg as tokenFingerprint,
5099
- dh as tokenHistory,
5529
+ du as tokenFingerprint,
5530
+ dv as tokenHistory,
5100
5531
  t as tokenLabel,
5101
- cl as tokenNode,
5532
+ co as tokenNode,
5102
5533
  tokenRowAxes,
5103
5534
  tokenRowCssVar,
5104
5535
  tokenRowFigmaName,
@@ -5109,41 +5540,44 @@ export {
5109
5540
  tokenValueCss,
5110
5541
  tokensPath,
5111
5542
  touchesPackages,
5543
+ trimGitHub,
5112
5544
  tryInProductUrl,
5113
5545
  tryTogetherUrl,
5114
5546
  unpicked,
5115
- cm as unreadableShipTeams,
5116
- cn as unreadableTeams,
5117
- di as unsafePathProblem,
5547
+ cp as unreadableShipTeams,
5548
+ cq as unreadableTeams,
5549
+ dw as unsafePathProblem,
5118
5550
  updatePendingDrafts,
5119
5551
  upsertToken,
5120
5552
  useLibraryPreviewOnGitHub,
5121
- dj as utf8ToBase64,
5122
- dk as validateComponentSpec,
5123
- dl as validateDocs,
5553
+ dx as utf8ToBase64,
5554
+ dy as validateComponentSpec,
5555
+ dz as validateDocs,
5124
5556
  validateDocsTask,
5125
- dm as validateIntegrations,
5557
+ dA as validateIntegrations,
5126
5558
  validateLayered,
5127
5559
  validatePendingDrafts,
5128
5560
  validateProposal,
5129
5561
  validateSet,
5130
- co as valueIn,
5131
- cp as valueToCss,
5562
+ cr as valueIn,
5563
+ cs as valueToCss,
5132
5564
  valuesEqual,
5133
5565
  variantKeyOf,
5134
- dn as variantName,
5135
- dp as versionTimeline,
5136
- cq as visualImpactProblems,
5137
- dq as webStorageEtagStore,
5138
- cr as whoCanShipSentence,
5139
- cs as whyItExists,
5140
- dr as withAuthorLine,
5566
+ dB as variantName,
5567
+ dC as versionTimeline,
5568
+ ct as visualImpactProblems,
5569
+ cu as visualOffer,
5570
+ dD as webStorageEtagStore,
5571
+ cv as whoCanShipSentence,
5572
+ cw as whyItExists,
5573
+ dE as withAuthorLine,
5141
5574
  withFigmaOrigin,
5142
5575
  withLink,
5143
5576
  withNeededBy,
5577
+ dF as withOutdated,
5144
5578
  withPiecesRecord,
5145
- ds as withRequestExploration,
5146
- dt as withoutJiraKey,
5579
+ dG as withRequestExploration,
5580
+ dH as withoutJiraKey,
5147
5581
  writeDraftResults,
5148
5582
  writeTokenProposalOnGitHub
5149
5583
  };