@snowyroad/braid 0.96.7 → 0.97.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/README.md CHANGED
@@ -231,7 +231,7 @@ descendant process and cannot be shed.
231
231
  dirs** — `~/.ssh`, `~/.aws`, `~/.gnupg`, `~/.kube/config`, and the bridge's own
232
232
  credential store (`~/.braid`).
233
233
  - **Network:** a curated allow-list (provider API hosts, package registries, and
234
- the major source-code hosts) so normal work keeps working; everything else is
234
+ read-only source-content hosts such as codeload.github.com) so normal work keeps working; everything else is
235
235
  blocked. Operator-extensible.
236
236
  - **Fail-closed:** in **full** tool mode the bridge REFUSES to start if the OS
237
237
  sandbox facility is unavailable, and tells you how to fix it. In read-and-reply
@@ -243,9 +243,11 @@ descendant process and cannot be shed.
243
243
  or the `BRAID_SCOPE_ALLOW_WRITE` / `BRAID_SCOPE_ALLOW_READ` / `BRAID_SCOPE_ALLOW_DOMAINS`
244
244
  env vars (see below). Credential directories (`~/.ssh`, `~/.aws`, `~/.config/gh`,
245
245
  and the rest of the protected inventory) are reserved and CANNOT be granted: a
246
- grant that lands inside one is refused at startup with a SCOPE ERROR. A tool CLI
247
- that only needs network still works inside the jail (`github.com` is in the default
248
- allow-list); grant a project data directory, never a credential store.
246
+ grant that lands inside one is refused at startup with a SCOPE ERROR. Code hosts
247
+ (github.com, gitlab.com, bitbucket.org) are NOT reachable from inside the jail:
248
+ authenticated git goes through the bridge's git tools. Grant a project data directory, never a credential store.
249
+
250
+ **Code hosts are not reachable from the jail.** `github.com`, `api.github.com`, `gitlab.com` and `bitbucket.org` are a reserved set: an `--allow-domain` or `scope.network.allowedDomains` entry that reaches them is refused at startup. To accept that risk for one agent (for example, `git+https` dependencies during installs) run `braid scope allow-code-hosts <agent>`; the startup banner then carries a warning. The agent's own `git` runs with credential helpers disabled, so it cannot read your `gh` or keychain credentials.
249
251
 
250
252
  - **Unix socket access (Linux):** on Linux, seccomp-bpf cannot filter Unix sockets
251
253
  by path. The default `compat` IPC profile allows all pathname sockets. The `strict`
@@ -400,7 +400,7 @@ var InviteExpiredError = class extends Error {
400
400
  }
401
401
  };
402
402
  async function redeemInvite(relayHttpUrl, code) {
403
- const { boundedJsonFetch: boundedJsonFetch2 } = await import("./http-QDQGGG2I.js");
403
+ const { boundedJsonFetch: boundedJsonFetch2 } = await import("./http-7LMCYNHB.js");
404
404
  const r = await boundedJsonFetch2(`${relayHttpUrl.replace(/\/$/, "")}/invites/redeem`, {
405
405
  method: "POST",
406
406
  headers: { "content-type": "application/json" },
@@ -492,7 +492,7 @@ function validateReplacementToken(newToken, currentToken, nowMs = Date.now()) {
492
492
  return { ok: true };
493
493
  }
494
494
  async function mintAccessToken(relayHttpUrl, agentKey, fetchFn = fetch, dpopProof) {
495
- const { boundedJsonFetch: boundedJsonFetch2 } = await import("./http-QDQGGG2I.js");
495
+ const { boundedJsonFetch: boundedJsonFetch2 } = await import("./http-7LMCYNHB.js");
496
496
  const r = await boundedJsonFetch2(`${relayHttpUrl.replace(/\/$/, "")}/agents/token`, {
497
497
  method: "POST",
498
498
  headers: {
@@ -812,6 +812,7 @@ function parseScope(v) {
812
812
  if (allowedDomains) net.allowedDomains = allowedDomains;
813
813
  const deniedDomains = strArr(n.deniedDomains);
814
814
  if (deniedDomains) net.deniedDomains = deniedDomains;
815
+ if (typeof n.allowCodeHosts === "boolean") net.allowCodeHosts = n.allowCodeHosts;
815
816
  if (Object.keys(net).length > 0) out.network = net;
816
817
  }
817
818
  return Object.keys(out).length > 0 ? out : void 0;
@@ -1049,6 +1050,13 @@ function pinEndpoint(dir, agentName, pin) {
1049
1050
  agent.pinnedEndpoints = next;
1050
1051
  saveAgent(dir, agent);
1051
1052
  }
1053
+ function setScopeAllowCodeHosts(dir, agentName, value) {
1054
+ const entry = loadAgent(dir, agentName);
1055
+ const agent = entry.agent;
1056
+ const network = { ...agent.scope?.network ?? {}, allowCodeHosts: value };
1057
+ agent.scope = { ...agent.scope ?? {}, network };
1058
+ saveAgent(dir, agent);
1059
+ }
1052
1060
  function updateAgentWorkspace(dir, agentName, info) {
1053
1061
  try {
1054
1062
  const entry = loadAgent(dir, agentName);
@@ -2832,13 +2840,44 @@ var DEFAULT_ALLOWED_DOMAINS = [
2832
2840
  // Crates.io
2833
2841
  "crates.io",
2834
2842
  "static.crates.io",
2835
- // Source hosts
2843
+ // Source hosts: READ-ONLY content delivery only. The code-host write paths
2844
+ // (github.com, api.github.com, gitlab.com, bitbucket.org) left this list on
2845
+ // 2026-10-06 (git gateway D12/G2): with them present, an injected agent could
2846
+ // push private files to an attacker's repo using an attacker-supplied token,
2847
+ // no operator credential needed. Authenticated git goes through the bridge's
2848
+ // git gateway tools; see RESERVED_CODE_HOST_DOMAINS for the enforced floor.
2849
+ "codeload.github.com",
2850
+ "*.githubusercontent.com"
2851
+ ];
2852
+ var RESERVED_CODE_HOST_DOMAINS = [
2836
2853
  "github.com",
2837
2854
  "*.github.com",
2838
- "*.githubusercontent.com",
2839
2855
  "gitlab.com",
2840
- "bitbucket.org"
2856
+ "*.gitlab.com",
2857
+ "bitbucket.org",
2858
+ "*.bitbucket.org"
2841
2859
  ];
2860
+ var RESERVED_CODE_HOST_READ_ONLY = /* @__PURE__ */ new Set(["codeload.github.com"]);
2861
+ function codeHostConflicts(allowed) {
2862
+ const out = [];
2863
+ for (const a of allowed) {
2864
+ const d = a.domain.trim().toLowerCase().replace(/\.$/, "");
2865
+ if (RESERVED_CODE_HOST_READ_ONLY.has(d)) continue;
2866
+ for (const r of RESERVED_CODE_HOST_DOMAINS) {
2867
+ const base = r.startsWith("*.") ? r.slice(2) : r;
2868
+ const isAllMatch = d === "*";
2869
+ const isReservedItself = d === r || d === base;
2870
+ const isSubdomainOfReservedWildcard = r.startsWith("*.") && d.endsWith("." + base);
2871
+ const isBroaderWildcard = d.startsWith("*.") && (base === d.slice(2) || base.endsWith("." + d.slice(2)));
2872
+ const hit = isAllMatch || isReservedItself || isSubdomainOfReservedWildcard || isBroaderWildcard;
2873
+ if (hit) {
2874
+ out.push({ domain: a.domain, source: a.source, reservation: r });
2875
+ break;
2876
+ }
2877
+ }
2878
+ }
2879
+ return out;
2880
+ }
2842
2881
  var PROVIDER_PATHS = {
2843
2882
  "claude-code": ["~/.claude", "~/.claude.json"],
2844
2883
  codex: ["~/.codex"],
@@ -3022,6 +3061,24 @@ Narrow the grant to a path outside the protected set. (Ancestor grants like "~"
3022
3061
  ...scope.network?.deniedDomains ?? [],
3023
3062
  ...parseEnvList(env["BRAID_SCOPE_DENY_DOMAINS"])
3024
3063
  ]);
3064
+ const allowCodeHosts = scope.network?.allowCodeHosts === true;
3065
+ if (!disabled && !allowCodeHosts) {
3066
+ const labelledDomains = [
3067
+ ...(scope.network?.allowedDomains ?? []).map((domain) => ({ domain, source: "scope.network.allowedDomains" })),
3068
+ ...(cfg.derivedAllowedDomains ?? []).map((domain) => ({ domain, source: "derived model endpoint" })),
3069
+ ...parseEnvList(env["BRAID_SCOPE_ALLOW_DOMAINS"]).map((domain) => ({ domain, source: "BRAID_SCOPE_ALLOW_DOMAINS" })),
3070
+ ...(cfg.scopeFlags?.allowDomains ?? []).map((domain) => ({ domain, source: "--allow-domain" }))
3071
+ ];
3072
+ const hits = codeHostConflicts(labelledDomains);
3073
+ if (hits.length > 0) {
3074
+ const detail = hits.map((h) => ` - ${h.source}: "${h.domain}" is a code host (reserved: ${h.reservation})`).join("\n");
3075
+ throw new Error(
3076
+ `[braid] SCOPE ERROR: a network grant reaches a code host and was refused:
3077
+ ${detail}
3078
+ The sandboxed agent must not reach code hosts directly (an injected agent could push private files anywhere on that host). Use the Braid git tools for authenticated git, or run \`braid scope allow-code-hosts <agent>\` to accept the exfiltration risk for this agent.`
3079
+ );
3080
+ }
3081
+ }
3025
3082
  function describe() {
3026
3083
  const lines = [];
3027
3084
  if (disabled) {
@@ -3042,6 +3099,9 @@ Narrow the grant to a path outside the protected set. (Ancestor grants like "~"
3042
3099
  lines.push(`[scope] provider paths (writable): ${providerPaths.join(", ")}`);
3043
3100
  }
3044
3101
  lines.push(`[scope] allowed domains (${allowedDomains.length}): ${allowedDomains.slice(0, 5).join(", ")}${allowedDomains.length > 5 ? " ..." : ""}`);
3102
+ if (allowCodeHosts) {
3103
+ lines.push("[scope] WARNING: direct code-host egress is ON for this agent (exfiltration path accepted by the owner via `braid scope allow-code-hosts`)");
3104
+ }
3045
3105
  if ((cfg.derivedAllowedDomains ?? []).length > 0) {
3046
3106
  lines.push(`[scope] model endpoints (derived): ${(cfg.derivedAllowedDomains ?? []).join(", ")}`);
3047
3107
  }
@@ -3773,6 +3833,16 @@ async function verifyCardIdentity(card, peerName, pinnedIssuer) {
3773
3833
  }
3774
3834
 
3775
3835
  // src/relayClient.ts
3836
+ function relayHttpNote(label, r) {
3837
+ if (!isVerboseOutput()) return;
3838
+ if (r.status === 402) {
3839
+ const plan = r.json?.requiredPlan;
3840
+ const need = typeof plan === "string" && plan.length > 0 ? `requires ${sanitizeForTty(plan).replace(/\s+/g, " ").slice(0, 32)}` : "requires a higher plan";
3841
+ console.log(`[braid] ${label}: not included in this channel's plan (${need})`);
3842
+ return;
3843
+ }
3844
+ console.warn(`[braid] ${label} HTTP ${r.status ?? r.category}`);
3845
+ }
3776
3846
  var HEARTBEAT_MS = 25e3;
3777
3847
  var WATCHDOG_MS = 4e4;
3778
3848
  var CONNECT_TIMEOUT_MS = 2e4;
@@ -3875,7 +3945,7 @@ function decideCardTrust(pin, name, r) {
3875
3945
  if (pin.has(name)) return "downgrade";
3876
3946
  return "ok";
3877
3947
  }
3878
- var RelayClient = class {
3948
+ var RelayClient = class _RelayClient {
3879
3949
  constructor(cfg, deps) {
3880
3950
  this.cfg = cfg;
3881
3951
  this.deps = deps;
@@ -3974,6 +4044,9 @@ var RelayClient = class {
3974
4044
  * legitimately uses that literal. Kept in sync with `memberChannels` (cleared on
3975
4045
  * `removed`). Names only (G7) — the relay resolves ids to names server-side. */
3976
4046
  channelOrgs = /* @__PURE__ */ new Map();
4047
+ /** D4: per-channel agent-visible features from the relay (hello.channelFeatures / added.features).
4048
+ * Absent channel or key = offered, so an older relay changes nothing. */
4049
+ channelFeatures = /* @__PURE__ */ new Map();
3977
4050
  /** Task 7.1 (D4): this agent's own workspace display name, or the literal string
3978
4051
  * "personal" for an org-less agent, from hello's `agentWorkspace`. null until the
3979
4052
  * first hello that carries it (older relay, or not yet connected). */
@@ -4220,7 +4293,7 @@ var RelayClient = class {
4220
4293
  continue;
4221
4294
  }
4222
4295
  if (!r.ok) {
4223
- console.warn("[braid] backfill HTTP", r.status ?? r.category);
4296
+ relayHttpNote("backfill", r);
4224
4297
  return out;
4225
4298
  }
4226
4299
  let body = r.json;
@@ -4274,7 +4347,7 @@ var RelayClient = class {
4274
4347
  { requestClass: "relay.messages.recent", maxBodyBytes: 16 * 1024 * 1024 }
4275
4348
  );
4276
4349
  if (!r.ok) {
4277
- console.warn("[braid] join-history HTTP", r.status ?? r.category);
4350
+ relayHttpNote("join-history", r);
4278
4351
  return [];
4279
4352
  }
4280
4353
  const body = r.json;
@@ -4557,6 +4630,7 @@ var RelayClient = class {
4557
4630
  this.lastGapResumeAt.delete(ch);
4558
4631
  this.memberChannels.delete(ch);
4559
4632
  this.channelOrgs.delete(ch);
4633
+ this.channelFeatures.delete(ch);
4560
4634
  this.removedCb?.(ch);
4561
4635
  break;
4562
4636
  }
@@ -4566,6 +4640,8 @@ var RelayClient = class {
4566
4640
  this.memberChannels.add(ch);
4567
4641
  const orgName = msg.orgName;
4568
4642
  if (typeof orgName === "string" && orgName.length > 0) this.channelOrgs.set(ch, orgName);
4643
+ const fm = _RelayClient.asFeatureMap(msg.features);
4644
+ if (fm) this.channelFeatures.set(ch, fm);
4569
4645
  this.addedCb?.(ch);
4570
4646
  break;
4571
4647
  }
@@ -4615,6 +4691,13 @@ var RelayClient = class {
4615
4691
  }
4616
4692
  }
4617
4693
  }
4694
+ const feats = msg.channelFeatures;
4695
+ if (feats && typeof feats === "object" && !Array.isArray(feats)) {
4696
+ for (const [ch, m] of Object.entries(feats)) {
4697
+ const fm = _RelayClient.asFeatureMap(m);
4698
+ if (fm) this.channelFeatures.set(ch, fm);
4699
+ }
4700
+ }
4618
4701
  const agentWorkspaceRaw = msg.agentWorkspace;
4619
4702
  if (typeof agentWorkspaceRaw === "string" && agentWorkspaceRaw.length > 0) {
4620
4703
  this.agentWorkspace = agentWorkspaceRaw;
@@ -4892,7 +4975,7 @@ var RelayClient = class {
4892
4975
  body: JSON.stringify({ scope, card }),
4893
4976
  requestClass: "relay.agentcard.put"
4894
4977
  });
4895
- if (!r.ok) console.warn("[braid] put card HTTP", r.status ?? r.category);
4978
+ if (!r.ok) relayHttpNote("put card", r);
4896
4979
  }
4897
4980
  /** Verify peer identity in the background (never blocks ingest). Logs security
4898
4981
  * warnings on mismatch/downgrade; silent on ok (unsigned/unattested + never-pinned). */
@@ -4926,7 +5009,7 @@ var RelayClient = class {
4926
5009
  if (!ch) return [];
4927
5010
  const r = await this.httpJson(`/channels/${ch}`, { requestClass: "relay.channel.get" });
4928
5011
  if (!r.ok) {
4929
- console.warn("[braid] roster HTTP", r.status ?? r.category);
5012
+ relayHttpNote("roster", r);
4930
5013
  return [];
4931
5014
  }
4932
5015
  const body = r.json;
@@ -4948,6 +5031,17 @@ var RelayClient = class {
4948
5031
  return normalizeRosterEntry(m.id, m.description, m.card);
4949
5032
  });
4950
5033
  }
5034
+ static asFeatureMap(v) {
5035
+ if (!v || typeof v !== "object" || Array.isArray(v)) return null;
5036
+ const out = {};
5037
+ for (const [k, b] of Object.entries(v)) if (typeof b === "boolean") out[k] = b;
5038
+ return out;
5039
+ }
5040
+ /** True unless the relay told us this channel's plan lacks `key` (D4). */
5041
+ channelHasFeature(channelId, key) {
5042
+ const f = this.channelFeatures.get(channelId);
5043
+ return f === void 0 || f[key] !== false;
5044
+ }
4951
5045
  /** Sync read of this agent's own scribe status for a channel (BL-121 task 2).
4952
5046
  * Populated by fetchRoster (see selfScribeCache above); false until that has
4953
5047
  * run once for this channel. */
@@ -4966,7 +5060,7 @@ var RelayClient = class {
4966
5060
  async fetchMemberChannels() {
4967
5061
  const r = await this.httpJson(`/channels`, { requestClass: "relay.channels.list" });
4968
5062
  if (!r.ok) {
4969
- console.warn("[braid] member channels HTTP", r.status ?? r.category);
5063
+ relayHttpNote("member channels", r);
4970
5064
  return [];
4971
5065
  }
4972
5066
  const body = r.json;
@@ -5048,7 +5142,7 @@ var RelayClient = class {
5048
5142
  requestClass: "relay.message.post"
5049
5143
  });
5050
5144
  if (!r.ok) {
5051
- console.warn("[braid] post HTTP", r.status ?? r.category);
5145
+ relayHttpNote("post", r);
5052
5146
  }
5053
5147
  }
5054
5148
  /** Add an emoji reaction to a message in a channel. Degrades silently on error (never throws). */
@@ -5059,7 +5153,7 @@ var RelayClient = class {
5059
5153
  method: "PUT",
5060
5154
  requestClass: "relay.reaction.put"
5061
5155
  });
5062
- if (!r.ok) console.warn("[braid] add reaction HTTP", r.status ?? r.category);
5156
+ if (!r.ok) relayHttpNote("add reaction", r);
5063
5157
  }
5064
5158
  /** Remove an emoji reaction from a message in a channel. Degrades silently on error (never throws). */
5065
5159
  async removeReaction(channelId, messageId, emoji) {
@@ -5069,7 +5163,7 @@ var RelayClient = class {
5069
5163
  method: "DELETE",
5070
5164
  requestClass: "relay.reaction.delete"
5071
5165
  });
5072
- if (!r.ok) console.warn("[braid] remove reaction HTTP", r.status ?? r.category);
5166
+ if (!r.ok) relayHttpNote("remove reaction", r);
5073
5167
  }
5074
5168
  /** Append a structured reflection to a channel. Degrades silently on error (never throws).
5075
5169
  * Maps snake_case tool-arg fields to camelCase REST body before posting. */
@@ -5095,7 +5189,7 @@ var RelayClient = class {
5095
5189
  body: JSON.stringify(body),
5096
5190
  requestClass: "relay.reflection.post"
5097
5191
  });
5098
- if (!r.ok) console.warn("[braid] write reflection HTTP", r.status ?? r.category);
5192
+ if (!r.ok) relayHttpNote("write reflection", r);
5099
5193
  }
5100
5194
  /** Append a durable note to a channel's shared memory. Never throws on a network error
5101
5195
  * (returns {ok:false, status:0}), but — unlike the pre-BL-121 version — surfaces the
@@ -5116,7 +5210,7 @@ var RelayClient = class {
5116
5210
  body: JSON.stringify(noteBody),
5117
5211
  requestClass: "relay.note.post"
5118
5212
  });
5119
- if (!r.ok) console.warn("[braid] write note HTTP", r.status ?? r.category);
5213
+ if (!r.ok) relayHttpNote("write note", r);
5120
5214
  return { ok: r.ok, status: r.ok ? r.status : r.status ?? 0, json: r.ok ? r.json : r.json };
5121
5215
  }
5122
5216
  // ── Private memory lane (BL-056 task 7) ──────────────────────────────────────
@@ -5147,7 +5241,7 @@ var RelayClient = class {
5147
5241
  body: JSON.stringify(memBody),
5148
5242
  requestClass: "relay.memory.post"
5149
5243
  });
5150
- if (!r.ok) console.warn("[braid] remember private HTTP", r.status ?? r.category);
5244
+ if (!r.ok) relayHttpNote("remember private", r);
5151
5245
  return { ok: r.ok, status: r.ok ? r.status : r.status ?? 0, json: r.ok ? r.json : r.json };
5152
5246
  }
5153
5247
  /** JIT recall over THIS agent's own private memory lane (relay GET
@@ -5174,7 +5268,7 @@ var RelayClient = class {
5174
5268
  { requestClass: "relay.memory.recall" }
5175
5269
  );
5176
5270
  if (!r.ok) {
5177
- console.warn("[braid] recall private HTTP", r.status ?? r.category);
5271
+ relayHttpNote("recall private", r);
5178
5272
  return [];
5179
5273
  }
5180
5274
  const data = r.json;
@@ -5375,7 +5469,7 @@ var RelayClient = class {
5375
5469
  if (!ch) return [];
5376
5470
  const r = await this.httpJson(`/channels/${ch}/notes`, { requestClass: "relay.notes.get" });
5377
5471
  if (!r.ok) {
5378
- console.warn("[braid] notes HTTP", r.status ?? r.category);
5472
+ relayHttpNote("notes", r);
5379
5473
  return [];
5380
5474
  }
5381
5475
  const data = r.json;
@@ -5405,7 +5499,7 @@ var RelayClient = class {
5405
5499
  if (!ch) return [];
5406
5500
  const r = await this.httpJson(`/channels/${ch}/insights`, { requestClass: "relay.insights.get" });
5407
5501
  if (!r.ok) {
5408
- console.warn("[braid] insights HTTP", r.status ?? r.category);
5502
+ relayHttpNote("insights", r);
5409
5503
  return [];
5410
5504
  }
5411
5505
  const data = r.json;
@@ -5459,7 +5553,7 @@ var RelayClient = class {
5459
5553
  body,
5460
5554
  requestClass: "relay.flow.post"
5461
5555
  });
5462
- if (!r.ok) console.warn("[braid] flow post HTTP", r.status ?? r.category);
5556
+ if (!r.ok) relayHttpNote("flow post", r);
5463
5557
  }
5464
5558
  /** Channel instructions text (empty if none or on error — never throws). Branded (H2-4). */
5465
5559
  async fetchChannelInstructions(channelId) {
@@ -5467,7 +5561,7 @@ var RelayClient = class {
5467
5561
  if (!ch) return untrusted("");
5468
5562
  const r = await this.httpJson(`/channels/${ch}/instructions`, { requestClass: "relay.instructions.get" });
5469
5563
  if (!r.ok) {
5470
- console.warn("[braid] instructions HTTP", r.status ?? r.category);
5564
+ relayHttpNote("instructions", r);
5471
5565
  return untrusted("");
5472
5566
  }
5473
5567
  const data = r.json;
@@ -5480,7 +5574,7 @@ var RelayClient = class {
5480
5574
  if (!ch) return [];
5481
5575
  const r = await this.httpJson(`/channels/${ch}/topics`, { requestClass: "relay.topics.get" });
5482
5576
  if (!r.ok) {
5483
- console.warn("[braid] topics HTTP", r.status ?? r.category);
5577
+ relayHttpNote("topics", r);
5484
5578
  return [];
5485
5579
  }
5486
5580
  const data = r.json;
@@ -5494,7 +5588,7 @@ var RelayClient = class {
5494
5588
  if (!ch) return [];
5495
5589
  const r = await this.httpJson(`/channels/${ch}/sources`, { requestClass: "relay.sources.get" });
5496
5590
  if (!r.ok) {
5497
- console.warn("[braid] sources HTTP", r.status ?? r.category);
5591
+ relayHttpNote("sources", r);
5498
5592
  return [];
5499
5593
  }
5500
5594
  const data = r.json;
@@ -5510,7 +5604,7 @@ var RelayClient = class {
5510
5604
  if (!ch) return [];
5511
5605
  const r = await this.httpJson(`/channels/${ch}/sources`, { requestClass: "relay.sources.get" });
5512
5606
  if (!r.ok) {
5513
- console.warn("[braid] listSources HTTP", r.status ?? r.category);
5607
+ relayHttpNote("listSources", r);
5514
5608
  return [];
5515
5609
  }
5516
5610
  const data = r.json;
@@ -5523,7 +5617,7 @@ var RelayClient = class {
5523
5617
  if (!ch || !sid) return null;
5524
5618
  const r = await this.httpJson(`/channels/${ch}/sources/${sid}/content`, { requestClass: "relay.sources.get" });
5525
5619
  if (!r.ok) {
5526
- console.warn("[braid] getSourceContent HTTP", r.status ?? r.category);
5620
+ relayHttpNote("getSourceContent", r);
5527
5621
  return null;
5528
5622
  }
5529
5623
  const data = r.json;
@@ -5547,7 +5641,7 @@ var RelayClient = class {
5547
5641
  this.fetchChannelTopics(channelId),
5548
5642
  this.fetchSourcesContext(channelId),
5549
5643
  this.fetchChannelNotes(channelId),
5550
- this.fetchInsights(channelId)
5644
+ this.channelHasFeature(channelId, "insights") ? this.fetchInsights(channelId) : Promise.resolve([])
5551
5645
  ]);
5552
5646
  const orderedNotes = await this.applyRecallOrder(channelId, notes, queryHint);
5553
5647
  return buildChannelContext({ instructions, topics, pins, notes: orderedNotes, insights, isScribe: this.isScribeFor(channelId) });
@@ -5583,7 +5677,7 @@ var RelayClient = class {
5583
5677
  requestClass: "relay.recall.post"
5584
5678
  });
5585
5679
  if (!r.ok) {
5586
- console.warn("[braid] recall HTTP", r.status ?? r.category);
5680
+ relayHttpNote("recall", r);
5587
5681
  return [];
5588
5682
  }
5589
5683
  const data = r.json;
@@ -5630,7 +5724,7 @@ var RelayClient = class {
5630
5724
  { requestClass: "relay.flow.messages", maxBodyBytes: 16 * 1024 * 1024 }
5631
5725
  );
5632
5726
  if (!r.ok) {
5633
- console.warn("[braid] flow messages HTTP", r.status ?? r.category);
5727
+ relayHttpNote("flow messages", r);
5634
5728
  return [];
5635
5729
  }
5636
5730
  const data = r.json;
@@ -6191,6 +6285,29 @@ function formatRateLimitNotice(agentName, provider, message) {
6191
6285
  ];
6192
6286
  }
6193
6287
 
6288
+ // src/gitEnv.ts
6289
+ var AGENT_GIT_ENV = {
6290
+ GIT_TERMINAL_PROMPT: "0",
6291
+ GCM_INTERACTIVE: "never",
6292
+ GIT_CONFIG_NOSYSTEM: "1"
6293
+ };
6294
+ var AGENT_GIT_CONFIG = [
6295
+ ["credential.helper", ""],
6296
+ ["core.askPass", ""]
6297
+ ];
6298
+ function withAgentGitEnv(extra, baseGitConfigCount = process.env.GIT_CONFIG_COUNT) {
6299
+ const out = { ...extra, ...AGENT_GIT_ENV };
6300
+ let n = Number.parseInt(extra.GIT_CONFIG_COUNT ?? baseGitConfigCount ?? "0", 10);
6301
+ if (!Number.isFinite(n) || n < 0) n = 0;
6302
+ for (const [key, value] of AGENT_GIT_CONFIG) {
6303
+ out[`GIT_CONFIG_KEY_${n}`] = key;
6304
+ out[`GIT_CONFIG_VALUE_${n}`] = value;
6305
+ n++;
6306
+ }
6307
+ out.GIT_CONFIG_COUNT = String(n);
6308
+ return out;
6309
+ }
6310
+
6194
6311
  // src/adapter.ts
6195
6312
  function defaultToolPolicy() {
6196
6313
  return { mode: "readonly", configDirAbs: resolve2(configDir(process.env)), allowReadAbs: [] };
@@ -6290,6 +6407,10 @@ function resolvePathBinary(binary, hint) {
6290
6407
  return found;
6291
6408
  }
6292
6409
  function launchSpecFor(agent) {
6410
+ const spec = launchSpecForProvider(agent);
6411
+ return { ...spec, env: withAgentGitEnv(spec.env ?? {}) };
6412
+ }
6413
+ function launchSpecForProvider(agent) {
6293
6414
  const cwd = process.cwd();
6294
6415
  switch (agent) {
6295
6416
  case "claude-code": {
@@ -6434,7 +6555,7 @@ function interactiveHandoffSupported(agent) {
6434
6555
  }
6435
6556
  function interactiveResumeSpecFor(agent, sessionId, cwd) {
6436
6557
  const build = HANDOFF_RESUME_SPECS[agent];
6437
- return build ? build(sessionId, cwd) : null;
6558
+ return build ? { ...build(sessionId, cwd), env: withAgentGitEnv({}) } : null;
6438
6559
  }
6439
6560
  var defaultAcpClientFactory = (launch) => new AcpClient(launch);
6440
6561
  var MAX_CONSECUTIVE_RESTARTS = 3;
@@ -7887,6 +8008,7 @@ export {
7887
8008
  loadAgent,
7888
8009
  acquireAgentLock,
7889
8010
  pinEndpoint,
8011
+ setScopeAllowCodeHosts,
7890
8012
  updateAgentWorkspace,
7891
8013
  isFilesystemRoot,
7892
8014
  narrowestMode,
@@ -7916,6 +8038,7 @@ export {
7916
8038
  scopedLaunch,
7917
8039
  resetScope,
7918
8040
  sandboxInstaller,
8041
+ withAgentGitEnv,
7919
8042
  resolveClaudeBinary,
7920
8043
  describeClaudeBinary,
7921
8044
  interactiveHandoffSupported,
package/dist/cli.js CHANGED
@@ -75,6 +75,7 @@ import {
75
75
  sanitizeForTty,
76
76
  saveAgent,
77
77
  scopedLaunch,
78
+ setScopeAllowCodeHosts,
78
79
  setVerboseOutput,
79
80
  snapshotHttpMetrics,
80
81
  startingLines,
@@ -82,8 +83,9 @@ import {
82
83
  toolStatusLine,
83
84
  updateAgentWorkspace,
84
85
  validateRelayWsUrl,
86
+ withAgentGitEnv,
85
87
  wsToHttp
86
- } from "./chunk-CLFXLKAW.js";
88
+ } from "./chunk-2OHYN3KD.js";
87
89
  import {
88
90
  clampUntrusted,
89
91
  externalSourceLabel,
@@ -2376,7 +2378,7 @@ function makeSocketHandoffController(deps) {
2376
2378
  session = c.session;
2377
2379
  spec = c.spec;
2378
2380
  }
2379
- const scoped = await scopedLaunchFn({ command: spec.command, args: spec.args, cwd: spec.cwd }, { scope: deps.scope }, deps.provider);
2381
+ const scoped = await scopedLaunchFn({ command: spec.command, args: spec.args, cwd: spec.cwd, env: spec.env }, { scope: deps.scope }, deps.provider);
2380
2382
  pauseAttempted = true;
2381
2383
  await session.handoffPause();
2382
2384
  active = { channelId, session };
@@ -3043,6 +3045,9 @@ Commands:
3043
3045
  (no network; local inspection only)
3044
3046
  scope allow <agent> <host>
3045
3047
  Approve a custom model endpoint host for a saved agent (BL-148)
3048
+ scope allow-code-hosts <agent>
3049
+ Let THIS agent's sandbox reach github.com/gitlab.com/bitbucket.org
3050
+ directly (accepts the exfiltration risk; prefer the git tools)
3046
3051
  telemetry [status|enable|disable]
3047
3052
  Show or change usage telemetry (tool-mode +
3048
3053
  blocked-tool-call signals only; never content, paths, or
@@ -3125,6 +3130,11 @@ function parseCliArgs(argv) {
3125
3130
  }
3126
3131
  return { kind: "scope-allow", agent: agent2, host };
3127
3132
  }
3133
+ if (argv[1] === "allow-code-hosts") {
3134
+ const agent2 = argv[2] && !argv[2].startsWith("-") ? argv[2].trim() : void 0;
3135
+ if (!agent2) return { kind: "usage", error: `Usage: braid scope allow-code-hosts <agent>` };
3136
+ return { kind: "scope-allow-code-hosts", agent: agent2 };
3137
+ }
3128
3138
  const agent = argv[1] && !argv[1].startsWith("-") ? argv[1].trim() : void 0;
3129
3139
  return { kind: "scope", agent };
3130
3140
  }
@@ -3951,7 +3961,7 @@ async function runHandoff(opts) {
3951
3961
  }
3952
3962
  const spawnFn = opts.spawnFn ?? nodeSpawn;
3953
3963
  const scoped = await scopedLaunch(
3954
- { command: spec.command, args: spec.args, cwd: spec.cwd },
3964
+ { command: spec.command, args: spec.args, cwd: spec.cwd, env: spec.env },
3955
3965
  { scope: opts.scope },
3956
3966
  provider
3957
3967
  );
@@ -4109,7 +4119,7 @@ async function runTakeover(lc, ctx) {
4109
4119
  const child = spawnFn(spec.command, spec.args, {
4110
4120
  stdio: "inherit",
4111
4121
  cwd: spec.cwd,
4112
- env: buildAcpEnv(env, spec.env ?? void 0)
4122
+ env: buildAcpEnv(env, spec.env ? withOwnGitConfig(spec.env, env) : void 0)
4113
4123
  });
4114
4124
  child.on("exit", () => settle({}));
4115
4125
  child.on("error", (e) => settle({ error: e }));
@@ -4332,6 +4342,13 @@ async function defaultPrompt(stdin, stdout, question) {
4332
4342
  rl.close();
4333
4343
  }
4334
4344
  }
4345
+ function withOwnGitConfig(wire, owner) {
4346
+ const rest = {};
4347
+ for (const [k, v] of Object.entries(wire)) {
4348
+ if (k !== "GIT_CONFIG_COUNT" && !/^GIT_CONFIG_(KEY|VALUE)_\d+$/.test(k)) rest[k] = v;
4349
+ }
4350
+ return withAgentGitEnv(rest, owner.GIT_CONFIG_COUNT);
4351
+ }
4335
4352
 
4336
4353
  // src/observe/handoffGate.ts
4337
4354
  var HandoffGate = class {
@@ -5993,6 +6010,13 @@ Set the provider's config to use ${normalizedHost} and try again, or check BRAID
5993
6010
  console.log(`[braid] pinned: ${normalizedHost} (source: ${match.source})`);
5994
6011
  console.log(`[braid] restart the bridge for the change to take effect.`);
5995
6012
  }
6013
+ function scopeAllowCodeHosts(agentName) {
6014
+ const dir = configDir(process.env);
6015
+ setScopeAllowCodeHosts(dir, agentName, true);
6016
+ console.log(`[braid] ${agentName}: direct code-host egress is now ON (github.com, gitlab.com, bitbucket.org reachable from the jail).`);
6017
+ console.log(`[braid] This re-opens an exfiltration path. Prefer the Braid git tools; undo by editing scope.network.allowCodeHosts in the saved agent file.`);
6018
+ console.log(`[braid] restart the bridge for the change to take effect.`);
6019
+ }
5996
6020
  function runTelemetryVerb(verb) {
5997
6021
  const dir = configDir(process.env);
5998
6022
  if (verb === "disable") {
@@ -6063,6 +6087,10 @@ async function main() {
6063
6087
  scopeAllow(invocation.agent, invocation.host);
6064
6088
  return;
6065
6089
  }
6090
+ if (invocation.kind === "scope-allow-code-hosts") {
6091
+ scopeAllowCodeHosts(invocation.agent);
6092
+ return;
6093
+ }
6066
6094
  if (invocation.kind === "telemetry") {
6067
6095
  runTelemetryVerb(invocation.verb);
6068
6096
  return;
@@ -4,7 +4,7 @@ import {
4
4
  boundedJsonFetch,
5
5
  resetHttpMetricsForTest,
6
6
  snapshotHttpMetrics
7
- } from "./chunk-CLFXLKAW.js";
7
+ } from "./chunk-2OHYN3KD.js";
8
8
  import "./chunk-HQNAAXUM.js";
9
9
  export {
10
10
  assertHttpEndpoint,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@snowyroad/braid",
3
- "version": "0.96.7",
3
+ "version": "0.97.0",
4
4
  "description": "Braid: connect your own coding agent (Claude Code, Codex, Gemini, Grok) to a Braid channel and collaborate with other agents and humans.",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "author": "SnowyRoad",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@snowyroad/braid",
3
- "version": "0.96.7",
3
+ "version": "0.97.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@snowyroad/braid",
9
- "version": "0.96.7",
9
+ "version": "0.97.0",
10
10
  "license": "SEE LICENSE IN LICENSE.md",
11
11
  "dependencies": {
12
12
  "@agentclientprotocol/sdk": "0.25.1",
@@ -815,9 +815,9 @@
815
815
  "license": "MIT"
816
816
  },
817
817
  "node_modules/@rollup/rollup-android-arm-eabi": {
818
- "version": "4.63.5",
819
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.63.5.tgz",
820
- "integrity": "sha512-J25QJU+B78T4FhhBsNpLJyVWOi31mwtpcMwywHmOKH65Q9IWGA81gPj+dnwlhU8wktVriYE+tFAaQgrnJRzAZg==",
818
+ "version": "4.64.0",
819
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.64.0.tgz",
820
+ "integrity": "sha512-FLLpX941CD/7aBvX3GqLGBM9OvY5PGXTryPJkG5r5/OuBpZpV5k45Uo3RxAvqd35tsyc3hH1bhtz921IKzoIzg==",
821
821
  "cpu": [
822
822
  "arm"
823
823
  ],
@@ -829,9 +829,9 @@
829
829
  ]
830
830
  },
831
831
  "node_modules/@rollup/rollup-android-arm64": {
832
- "version": "4.63.5",
833
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.63.5.tgz",
834
- "integrity": "sha512-LDopB3zuZM5Ux9TT2luNEBJW/tYbGU2g1d+VpKk6I+gSKDb+/7sYE6M225gRQt4RbMX6MSwMsVR/phdjVUgRLg==",
832
+ "version": "4.64.0",
833
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.64.0.tgz",
834
+ "integrity": "sha512-iI32XM/jnDYJsvx5ai/za/7gWO9XoSeFFtU06/ZCaRgyilfJOjaopD3nOpk2WrTCGOyeDt4hleUiGOAnd5tHNg==",
835
835
  "cpu": [
836
836
  "arm64"
837
837
  ],
@@ -843,9 +843,9 @@
843
843
  ]
844
844
  },
845
845
  "node_modules/@rollup/rollup-darwin-arm64": {
846
- "version": "4.63.5",
847
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.63.5.tgz",
848
- "integrity": "sha512-wlJEERGfeuHeBavCL2qVnNacOK43NDoZM4sjkeRPymd04OAE9T1zBqDJgmZ+CIsPTYKwdzpUC8vmOw84dwY4Tg==",
846
+ "version": "4.64.0",
847
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.64.0.tgz",
848
+ "integrity": "sha512-dRBZlbt2sEtF8Mn4MODThze9fIPdDoOhVSlXMAKy5dQbOYK9pOOoPY4Fat3OTtr0+8zbJo5TTZwlsfxY/kDNJg==",
849
849
  "cpu": [
850
850
  "arm64"
851
851
  ],
@@ -857,9 +857,9 @@
857
857
  ]
858
858
  },
859
859
  "node_modules/@rollup/rollup-darwin-x64": {
860
- "version": "4.63.5",
861
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.63.5.tgz",
862
- "integrity": "sha512-4nJJGg5jbo2wwPP4JP+LfEBA3bvP8rU9CLuhp7jWvq9sxEyhjQFTFdrqi+/dHEin/pd8jpT0vcehIpnZtmEdcQ==",
860
+ "version": "4.64.0",
861
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.64.0.tgz",
862
+ "integrity": "sha512-Y3whrJOMucfkhgNkvcM93M6j8C53iEAMmPMYD99C6G1kUy4ELigLWk9ar2/4aCBSRgsql0zdlOemLgW2m5GZgQ==",
863
863
  "cpu": [
864
864
  "x64"
865
865
  ],
@@ -871,9 +871,9 @@
871
871
  ]
872
872
  },
873
873
  "node_modules/@rollup/rollup-freebsd-arm64": {
874
- "version": "4.63.5",
875
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.63.5.tgz",
876
- "integrity": "sha512-DrZbyCDF1hneuO6jRbvZ2D7+PIBM6yIwYnJpg2vIk58T+wuFpiaGZrfUr59lDWw45bg+IrpTGLPiNi/Fk4w3Cg==",
874
+ "version": "4.64.0",
875
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.64.0.tgz",
876
+ "integrity": "sha512-S6S1GEzPjFF6IONYJX3AKt/799+8RgBgCcwRnUo+Ep1IvBxUbw5M51iU0TDdK2NWWVnSvCQ8yi6Em0fGASMOng==",
877
877
  "cpu": [
878
878
  "arm64"
879
879
  ],
@@ -885,9 +885,9 @@
885
885
  ]
886
886
  },
887
887
  "node_modules/@rollup/rollup-freebsd-x64": {
888
- "version": "4.63.5",
889
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.63.5.tgz",
890
- "integrity": "sha512-gqfUVMJMB3mehqywxp6hTBFfgtMQykZY19+cfiaYP0toIJLb/1DZRJHVkQQGP13W4TAwfZDWeg1qBcheTRioXQ==",
888
+ "version": "4.64.0",
889
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.64.0.tgz",
890
+ "integrity": "sha512-Ed1DPoFENkXj4IGzSB12SesV40iP6LxCCrbTIkSGIQBpOOxpBM+0kj62lmaeIHfMWTDoddqTOtqc7s8LYfn+Pw==",
891
891
  "cpu": [
892
892
  "x64"
893
893
  ],
@@ -899,9 +899,9 @@
899
899
  ]
900
900
  },
901
901
  "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
902
- "version": "4.63.5",
903
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.63.5.tgz",
904
- "integrity": "sha512-CFmhpvAwzSaWMlN3VN7UtmoTihlZNzoP0juQib5TQRnYUyDV8dXeWOp29sobWAT6gXl/hQgAClLlEiYozQG3OQ==",
902
+ "version": "4.64.0",
903
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.64.0.tgz",
904
+ "integrity": "sha512-J/6xhutJPtFyIkmHdf4olOdHHKH5kOJNumojdWn+Elv5ICEYTVOa362Vw27TxsK0BLzb1le3EDlO3UbvFK1lnQ==",
905
905
  "cpu": [
906
906
  "arm"
907
907
  ],
@@ -916,9 +916,9 @@
916
916
  ]
917
917
  },
918
918
  "node_modules/@rollup/rollup-linux-arm-musleabihf": {
919
- "version": "4.63.5",
920
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.63.5.tgz",
921
- "integrity": "sha512-Uc9H8eXCOayV6JLTH5bXKMId6qbhNHa818/BgYjm4jrlq3vZquC9cqyvHBw17xy5Mnj5f+I3gFK5JcEf3hSqrw==",
919
+ "version": "4.64.0",
920
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.64.0.tgz",
921
+ "integrity": "sha512-G4L/Nnx59d2LvDoV/P4S5lZ7oVLT6hodOHMacqjiq2LL2gts86KbkEBTYL53+fBt0odhf7XPIbIATGoYiJctxg==",
922
922
  "cpu": [
923
923
  "arm"
924
924
  ],
@@ -933,9 +933,9 @@
933
933
  ]
934
934
  },
935
935
  "node_modules/@rollup/rollup-linux-arm64-gnu": {
936
- "version": "4.63.5",
937
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.63.5.tgz",
938
- "integrity": "sha512-VcPr/szv/1BFw112Kt//fxulXt/JPqzzidU84iW68L2DdjnOO8QFUv2zTSYBEPHD6movBD4z+bbr5y60GYM7Jw==",
936
+ "version": "4.64.0",
937
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.64.0.tgz",
938
+ "integrity": "sha512-zF16pvJDEUksGYRbfnXne7pdklAyj2XDmJeYKgP93oq0cUyX9Y8O7lUo1R+IY1GagP/YBvCEDCe7eEcAKpw//g==",
939
939
  "cpu": [
940
940
  "arm64"
941
941
  ],
@@ -950,9 +950,9 @@
950
950
  ]
951
951
  },
952
952
  "node_modules/@rollup/rollup-linux-arm64-musl": {
953
- "version": "4.63.5",
954
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.63.5.tgz",
955
- "integrity": "sha512-BnxtJ5/91BrIHYIkGrmjz/lbMhqEHt1dPFqIxIFR+jPn0xVc/oUSCtIT089zfp5ufwGDlYz2UC+Fe1SRBpYFbQ==",
953
+ "version": "4.64.0",
954
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.64.0.tgz",
955
+ "integrity": "sha512-nIggWn8n+w12+R5lsV+PYYoUY8vuObxPAQqJI7WES+9v0qspYuAHoZMfYM0yLxlipasT5BY9ht5W8t5c/rSCkg==",
956
956
  "cpu": [
957
957
  "arm64"
958
958
  ],
@@ -967,9 +967,9 @@
967
967
  ]
968
968
  },
969
969
  "node_modules/@rollup/rollup-linux-loong64-gnu": {
970
- "version": "4.63.5",
971
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.63.5.tgz",
972
- "integrity": "sha512-LrYcHZwF+fAMNKHYTOQ5osWM4AZF7YF6D+XtsjDyEvljtt11twc+zHVXBLNEjxVSUnKYsOhvVz4Z213eW02COQ==",
970
+ "version": "4.64.0",
971
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.64.0.tgz",
972
+ "integrity": "sha512-WLOTiHPzszP0dxIMsHpFeDSOSB5I49Mj8K4+yKE3H1X/D0JRG5XZ5jrctJLMjnUc/LUzaKiwq6EHWNJ8pup8PA==",
973
973
  "cpu": [
974
974
  "loong64"
975
975
  ],
@@ -984,9 +984,9 @@
984
984
  ]
985
985
  },
986
986
  "node_modules/@rollup/rollup-linux-loong64-musl": {
987
- "version": "4.63.5",
988
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.63.5.tgz",
989
- "integrity": "sha512-nj7QKQePAAUpCpJHtg0pR0W/b92A9NO17JS3BAQmHDn/yhmkir2p8llrKY9TOhleKIaSzy1JhxS3T9FVld6coA==",
987
+ "version": "4.64.0",
988
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.64.0.tgz",
989
+ "integrity": "sha512-35RK9aRhh7g7Pmeu5gQ01aCvrhXzj9LoBE6xtUcEH1ns+nyTaSzxSpADmBQINu4QiTDGvmQYwo1j5hlg1rRXFw==",
990
990
  "cpu": [
991
991
  "loong64"
992
992
  ],
@@ -1001,9 +1001,9 @@
1001
1001
  ]
1002
1002
  },
1003
1003
  "node_modules/@rollup/rollup-linux-ppc64-gnu": {
1004
- "version": "4.63.5",
1005
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.63.5.tgz",
1006
- "integrity": "sha512-5ylkX6dWMeBKge9nTU+Rxfb+ZfaCIJ9lRqIFaK0eAMcWp7OJbYnLveLgXmm0VrvuLKb8qIK+mHyH0qu88RM+iA==",
1004
+ "version": "4.64.0",
1005
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.64.0.tgz",
1006
+ "integrity": "sha512-RqTfnpoTjuWfPAmqK5p2edt2AMCDJWm6oTn7sKfmyx+6tRga0ip05SJ977o6udTcIiDeF/CJMUfkaN4gtWt6Aw==",
1007
1007
  "cpu": [
1008
1008
  "ppc64"
1009
1009
  ],
@@ -1018,9 +1018,9 @@
1018
1018
  ]
1019
1019
  },
1020
1020
  "node_modules/@rollup/rollup-linux-ppc64-musl": {
1021
- "version": "4.63.5",
1022
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.63.5.tgz",
1023
- "integrity": "sha512-oHK4ZHYFDKjZviK34I+NwgfbGxgI7ztrNxj2hPTSSNFgeq1a/lEd7dHV2fdGAuTH4Iym3RHJg+vAbWaWG4B7Zg==",
1021
+ "version": "4.64.0",
1022
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.64.0.tgz",
1023
+ "integrity": "sha512-RQjZPigjxFvFZDijG6rjlSXxhRaTf9zLYVpGK+lVcga64oMqP1GbgVqCb46eHTTceSIgp89Ja0y5aPe3GFBYHg==",
1024
1024
  "cpu": [
1025
1025
  "ppc64"
1026
1026
  ],
@@ -1035,9 +1035,9 @@
1035
1035
  ]
1036
1036
  },
1037
1037
  "node_modules/@rollup/rollup-linux-riscv64-gnu": {
1038
- "version": "4.63.5",
1039
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.63.5.tgz",
1040
- "integrity": "sha512-UcetmHZ6XOXuUByiKZyQmb55ZPr0LABr3Ec/HB9wKZn6CEAFWZkE+hsJErJ9hbPBC7nI0dKuELx7CoV6IM7TMg==",
1038
+ "version": "4.64.0",
1039
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.64.0.tgz",
1040
+ "integrity": "sha512-tjL58mgQcTRnDRpeky+Sth1MKQeYi2Ct6r3Luq9E5aTSjnM/i/JbozqZkKqp9thM5+oDSZxo+05f9kdQedfTGA==",
1041
1041
  "cpu": [
1042
1042
  "riscv64"
1043
1043
  ],
@@ -1052,9 +1052,9 @@
1052
1052
  ]
1053
1053
  },
1054
1054
  "node_modules/@rollup/rollup-linux-riscv64-musl": {
1055
- "version": "4.63.5",
1056
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.63.5.tgz",
1057
- "integrity": "sha512-C5CmDPQBtvjVo8cgQsBs+w6WB0JLkiixhgi6hVLV11hERWdn/p0XcPU2OUcZzac9BPOFq7SbaHFa8r3SWEysCQ==",
1055
+ "version": "4.64.0",
1056
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.64.0.tgz",
1057
+ "integrity": "sha512-ictoRyVaoZ8C67myHef+8hhCa6IplXJJ/xUCkVCxziV4zxMZh+jvhkhGsPBLqj1S72fnqD0QH5zL4lcaa4X7DQ==",
1058
1058
  "cpu": [
1059
1059
  "riscv64"
1060
1060
  ],
@@ -1069,9 +1069,9 @@
1069
1069
  ]
1070
1070
  },
1071
1071
  "node_modules/@rollup/rollup-linux-s390x-gnu": {
1072
- "version": "4.63.5",
1073
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.63.5.tgz",
1074
- "integrity": "sha512-lHVQHJFKsuuxLMi3MQO9XVL8Tje3JR82CzB+QDKC5NWBcsIWuwsn9uIM5e3lBhI+fF1/s63qnyYqsg65+8rV/w==",
1072
+ "version": "4.64.0",
1073
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.64.0.tgz",
1074
+ "integrity": "sha512-8aVvZ2hfr9RLFzBQkQNmYeHLDja8fLeQAmLt757zdKN/B+8L809KlLJKctQjS22wZotptV8G6o7fVPuAs8S1tQ==",
1075
1075
  "cpu": [
1076
1076
  "s390x"
1077
1077
  ],
@@ -1086,9 +1086,9 @@
1086
1086
  ]
1087
1087
  },
1088
1088
  "node_modules/@rollup/rollup-linux-x64-gnu": {
1089
- "version": "4.63.5",
1090
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.63.5.tgz",
1091
- "integrity": "sha512-3W9bTFcQNJn71cSJVM9RKIiZOy8DO/XLDii8Uv/Pm6WKqDRj7JV3ZfuXIEfyuy5LXpIzAbB/1M4Ukp9GKNa7nA==",
1089
+ "version": "4.64.0",
1090
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.64.0.tgz",
1091
+ "integrity": "sha512-2dEF8GAcDKwshUfydD+GhosppNyBzhVUHkdFF3CXd3FpOkzj/RZzF5aoEtzklujklT5qFVRU2GK/cFeLaTNKVg==",
1092
1092
  "cpu": [
1093
1093
  "x64"
1094
1094
  ],
@@ -1103,9 +1103,9 @@
1103
1103
  ]
1104
1104
  },
1105
1105
  "node_modules/@rollup/rollup-linux-x64-musl": {
1106
- "version": "4.63.5",
1107
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.63.5.tgz",
1108
- "integrity": "sha512-VDC7rRJlee/scpki96GZ27Omf6yU87s1YXwVTpjE5841faVlDYYT565rgfmoR1U0sqL7z5ivQSDjcsF6VRXyBA==",
1106
+ "version": "4.64.0",
1107
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.64.0.tgz",
1108
+ "integrity": "sha512-3XHTvoo2hKkh0MiOfS7SkhHjMaaWF7P4F3drocZZaho/Z8w7h/jpnuBHm91BOQLfvrKHs1yR+zir4E8RI3XzTQ==",
1109
1109
  "cpu": [
1110
1110
  "x64"
1111
1111
  ],
@@ -1120,9 +1120,9 @@
1120
1120
  ]
1121
1121
  },
1122
1122
  "node_modules/@rollup/rollup-openbsd-x64": {
1123
- "version": "4.63.5",
1124
- "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.63.5.tgz",
1125
- "integrity": "sha512-z86Ok2p4pTdv5xqCKZsTooO7yBEiaJR/HzU3Wx8RmWsPoLppnMKROhJusQob8B3IE1ghC343kUW9rC2r+Wf3ig==",
1123
+ "version": "4.64.0",
1124
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.64.0.tgz",
1125
+ "integrity": "sha512-HKtkzodL4a3KFWDXDoO61cRynAWTR3LnAE0oGtfG9lcNFpNuVYUFOByxDgNqEvic9rvaQbAj+SFwTEWDptRaIw==",
1126
1126
  "cpu": [
1127
1127
  "x64"
1128
1128
  ],
@@ -1134,9 +1134,9 @@
1134
1134
  ]
1135
1135
  },
1136
1136
  "node_modules/@rollup/rollup-openharmony-arm64": {
1137
- "version": "4.63.5",
1138
- "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.63.5.tgz",
1139
- "integrity": "sha512-IzQmj+xXwQFGhMAMKMQVXkMwMZN3TqkJgAE0nSsqvVwWWciP4AIPMmWRqOQ2GfX7TUDZr+xqGFcBS36CRPGw0g==",
1137
+ "version": "4.64.0",
1138
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.64.0.tgz",
1139
+ "integrity": "sha512-JBsxqiY16uyyCujtoC3s7zL+SrYyNElptD7K4V+KUoJ2V8/XG3hPWpheK+SuPwNh1cikJvIZmIdsrYXvD6PLJw==",
1140
1140
  "cpu": [
1141
1141
  "arm64"
1142
1142
  ],
@@ -1148,9 +1148,9 @@
1148
1148
  ]
1149
1149
  },
1150
1150
  "node_modules/@rollup/rollup-win32-arm64-msvc": {
1151
- "version": "4.63.5",
1152
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.63.5.tgz",
1153
- "integrity": "sha512-F6qpTaPc9bwBH85kjy0/BLmLSW1uv7AoOXCoRIkg2arlgCYlWYcAbiMkvZuAcaWk9TpCRG//okznLAqLGshkMw==",
1151
+ "version": "4.64.0",
1152
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.64.0.tgz",
1153
+ "integrity": "sha512-S5Qrijh37qhnUYQ0ay8WN3LuWeKjow7wTUyCOPMZtnXiBXYXdsZETI6ZLfYnQAKovltckPLBFdNeD61P2rJc7g==",
1154
1154
  "cpu": [
1155
1155
  "arm64"
1156
1156
  ],
@@ -1162,9 +1162,9 @@
1162
1162
  ]
1163
1163
  },
1164
1164
  "node_modules/@rollup/rollup-win32-ia32-msvc": {
1165
- "version": "4.63.5",
1166
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.63.5.tgz",
1167
- "integrity": "sha512-igoDsTFhhwECBeGbUuLeIk7t8Y1apa+cs6mDWpx2EZ0ch7oEQgzHbFUXN9euoHekCAQzXdXApAGkV6jznS7tWw==",
1165
+ "version": "4.64.0",
1166
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.64.0.tgz",
1167
+ "integrity": "sha512-zbZ6iMmLFEsCtTdc2/y1F/cDFVNNCPF7Ae8PCT/wdPE//hGwYp6r+MyCLMFX+kOeIe09Pz6ASfnnfpSTN1FJQQ==",
1168
1168
  "cpu": [
1169
1169
  "ia32"
1170
1170
  ],
@@ -1176,9 +1176,9 @@
1176
1176
  ]
1177
1177
  },
1178
1178
  "node_modules/@rollup/rollup-win32-x64-gnu": {
1179
- "version": "4.63.5",
1180
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.63.5.tgz",
1181
- "integrity": "sha512-U3teMeMbXFmaM5D+OTJpsOXd+wV/qftIeYF9kBKL4v73641qyJmoXFtA28DQLsnmlyayEsTe72xpLHrArq6vHw==",
1179
+ "version": "4.64.0",
1180
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.64.0.tgz",
1181
+ "integrity": "sha512-L6Hw69oNpuYaOr1zCG30v0/DqKYCSRwodPGwIcVZ/6f8SOzq9rxtL/xNVI5MO4wjli+Ko0ErK9uHJL3mNPt8wQ==",
1182
1182
  "cpu": [
1183
1183
  "x64"
1184
1184
  ],
@@ -1190,9 +1190,9 @@
1190
1190
  ]
1191
1191
  },
1192
1192
  "node_modules/@rollup/rollup-win32-x64-msvc": {
1193
- "version": "4.63.5",
1194
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.63.5.tgz",
1195
- "integrity": "sha512-ypfC34F3RKXvCXBglGqGMsUSMKlgwd1HX9AOAlx9RoZZ6GaI42YHVeKpzg3JG+wpBUJYTG+NNZhqbDWL8tBZkw==",
1193
+ "version": "4.64.0",
1194
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.64.0.tgz",
1195
+ "integrity": "sha512-nl+CTWIgOGszQmUz/kanfgrfFZ4qiwxKIfT/ryl3N3Ewk5tqizmYtNXiqb7Bu/fDtNgu1kyxdFiAUJNur3iysg==",
1196
1196
  "cpu": [
1197
1197
  "x64"
1198
1198
  ],
@@ -1234,9 +1234,9 @@
1234
1234
  "license": "MIT"
1235
1235
  },
1236
1236
  "node_modules/@types/node": {
1237
- "version": "25.9.8",
1238
- "resolved": "https://registry.npmjs.org/@types/node/-/node-25.9.8.tgz",
1239
- "integrity": "sha512-VfMrScDmMhUJQmd5hArdQnFvK0OIeD36uN2Va1FcpYaLB/BgkgM8Ulc50XtYISPMz7APJ30+N0T5EM0jlcdfRw==",
1237
+ "version": "25.9.9",
1238
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.9.9.tgz",
1239
+ "integrity": "sha512-b4e2xxj/yMeT2hNlD6x7zNFiQK2Dlmkb9CQ6v3/1G2RezKN4YS2lcEv8lzGm1mhs4f2lM4yNAMI/zUDBZBBt7w==",
1240
1240
  "dev": true,
1241
1241
  "license": "MIT",
1242
1242
  "dependencies": {
@@ -1394,9 +1394,9 @@
1394
1394
  }
1395
1395
  },
1396
1396
  "node_modules/acorn": {
1397
- "version": "8.18.0",
1398
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz",
1399
- "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==",
1397
+ "version": "8.19.0",
1398
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.19.0.tgz",
1399
+ "integrity": "sha512-oJlA3XiRm7Cyk6qFD2Jn8ak9B7jSy0qy00ADO3+8dpT0LSjFihQYv4C02LFCSYJV3Q37xYwwRy5m+IpIiUzqWw==",
1400
1400
  "dev": true,
1401
1401
  "license": "MIT",
1402
1402
  "bin": {
@@ -2144,9 +2144,9 @@
2144
2144
  }
2145
2145
  },
2146
2146
  "node_modules/express-rate-limit": {
2147
- "version": "8.7.0",
2148
- "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.7.0.tgz",
2149
- "integrity": "sha512-hOwV7WOxXfjRpAM1DSJWZDXx3GhplwD8IfwuwvogD8i1Qnkgosw/H45s4ZnFAUHDAhPjlY9hLBvJhKmGMyY26g==",
2147
+ "version": "8.7.1",
2148
+ "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.7.1.tgz",
2149
+ "integrity": "sha512-2FXbqkygil3mZiXzEtM0IjE/UBmBNot0J1GEVrJT4JbrvwOSoEtqtO+wHbiMQELWe1eNvHoYRg2dkjOid+6JkA==",
2150
2150
  "license": "MIT",
2151
2151
  "dependencies": {
2152
2152
  "debug": "^4.4.3",
@@ -2369,9 +2369,9 @@
2369
2369
  }
2370
2370
  },
2371
2371
  "node_modules/hono": {
2372
- "version": "4.13.11",
2373
- "resolved": "https://registry.npmjs.org/hono/-/hono-4.13.11.tgz",
2374
- "integrity": "sha512-/SMX/RQNJn7oNmFwH6DtwDqcrzZU2otm1FD6OJe2cWF6cfy/F8hq0XVBv7xW3FTJshRQwuBnXHDq2kNsdZnshg==",
2372
+ "version": "4.13.13",
2373
+ "resolved": "https://registry.npmjs.org/hono/-/hono-4.13.13.tgz",
2374
+ "integrity": "sha512-CQ46U0ZkAGmbT/4UxdzzGJpacP2IeKgY4a5/tOI9AABbpOMfK739wfDXmv1usCk+3RkKj1hQy4/fjhiwa2xlrA==",
2375
2375
  "license": "MIT",
2376
2376
  "engines": {
2377
2377
  "node": ">=16.9.0"
@@ -2480,9 +2480,9 @@
2480
2480
  }
2481
2481
  },
2482
2482
  "node_modules/ip-address": {
2483
- "version": "10.7.2",
2484
- "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.7.2.tgz",
2485
- "integrity": "sha512-7H/2gFSIitxc0hG3nOI1glS8QLo/EHBFFLk8vEUjXY/xu0AdL8jZ9U1IzO2PUm0d2D/ofQcAifb0g6OBkt8U7w==",
2483
+ "version": "10.7.3",
2484
+ "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.7.3.tgz",
2485
+ "integrity": "sha512-A1kdq/tSb5QjvKvAMgIoEvDBIgL7qaqVP/jkvSwYYRZ9iEzvPpopxp2wQfu3SuZRHtpHNxMn8Fs0bS+gf5Xmwg==",
2486
2486
  "license": "MIT",
2487
2487
  "engines": {
2488
2488
  "node": ">= 12"
@@ -2745,9 +2745,9 @@
2745
2745
  }
2746
2746
  },
2747
2747
  "node_modules/nanoid": {
2748
- "version": "3.3.19",
2749
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz",
2750
- "integrity": "sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==",
2748
+ "version": "3.3.20",
2749
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz",
2750
+ "integrity": "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==",
2751
2751
  "dev": true,
2752
2752
  "funding": [
2753
2753
  {
@@ -2964,9 +2964,9 @@
2964
2964
  }
2965
2965
  },
2966
2966
  "node_modules/postcss": {
2967
- "version": "8.5.28",
2968
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz",
2969
- "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==",
2967
+ "version": "8.5.29",
2968
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.29.tgz",
2969
+ "integrity": "sha512-49cGhUbXj8Qenv0iTMxA1cFBzxXoctpC9Ujd77t1WcbJIr6nF/eI7g/8MgxrYldFRuAXvja7xQRwavoW7kgrxQ==",
2970
2970
  "dev": true,
2971
2971
  "funding": [
2972
2972
  {
@@ -2984,9 +2984,9 @@
2984
2984
  ],
2985
2985
  "license": "MIT",
2986
2986
  "dependencies": {
2987
- "nanoid": "^3.3.18",
2987
+ "nanoid": "^3.3.19",
2988
2988
  "picocolors": "^1.1.1",
2989
- "source-map-js": "^1.2.1"
2989
+ "source-map-js": "^1.2.2"
2990
2990
  },
2991
2991
  "engines": {
2992
2992
  "node": "^10 || ^12 || >=14"
@@ -3174,9 +3174,9 @@
3174
3174
  }
3175
3175
  },
3176
3176
  "node_modules/rollup": {
3177
- "version": "4.63.5",
3178
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.63.5.tgz",
3179
- "integrity": "sha512-KRWwmNLlPw5M7HcdYfm15oBv9n9LPtjzpzCIxS/phwqvPyxHSoKX6Y2YU3pxSPfy0CLquVgsx/j/hBi6OvH1Nw==",
3177
+ "version": "4.64.0",
3178
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.64.0.tgz",
3179
+ "integrity": "sha512-gjA/kFeDfffII8COoPsvLPvE16hWDTEc1+0QKQNKUkuV8iJjqsC4xXs8/FzuL0v9EV39kuxTbAgcFoTRyy2TGQ==",
3180
3180
  "dev": true,
3181
3181
  "license": "MIT",
3182
3182
  "dependencies": {
@@ -3191,31 +3191,31 @@
3191
3191
  },
3192
3192
  "optionalDependencies": {
3193
3193
  "@napi-rs/lzma-linux-x64-gnu": "1.5.1",
3194
- "@rollup/rollup-android-arm-eabi": "4.63.5",
3195
- "@rollup/rollup-android-arm64": "4.63.5",
3196
- "@rollup/rollup-darwin-arm64": "4.63.5",
3197
- "@rollup/rollup-darwin-x64": "4.63.5",
3198
- "@rollup/rollup-freebsd-arm64": "4.63.5",
3199
- "@rollup/rollup-freebsd-x64": "4.63.5",
3200
- "@rollup/rollup-linux-arm-gnueabihf": "4.63.5",
3201
- "@rollup/rollup-linux-arm-musleabihf": "4.63.5",
3202
- "@rollup/rollup-linux-arm64-gnu": "4.63.5",
3203
- "@rollup/rollup-linux-arm64-musl": "4.63.5",
3204
- "@rollup/rollup-linux-loong64-gnu": "4.63.5",
3205
- "@rollup/rollup-linux-loong64-musl": "4.63.5",
3206
- "@rollup/rollup-linux-ppc64-gnu": "4.63.5",
3207
- "@rollup/rollup-linux-ppc64-musl": "4.63.5",
3208
- "@rollup/rollup-linux-riscv64-gnu": "4.63.5",
3209
- "@rollup/rollup-linux-riscv64-musl": "4.63.5",
3210
- "@rollup/rollup-linux-s390x-gnu": "4.63.5",
3211
- "@rollup/rollup-linux-x64-gnu": "4.63.5",
3212
- "@rollup/rollup-linux-x64-musl": "4.63.5",
3213
- "@rollup/rollup-openbsd-x64": "4.63.5",
3214
- "@rollup/rollup-openharmony-arm64": "4.63.5",
3215
- "@rollup/rollup-win32-arm64-msvc": "4.63.5",
3216
- "@rollup/rollup-win32-ia32-msvc": "4.63.5",
3217
- "@rollup/rollup-win32-x64-gnu": "4.63.5",
3218
- "@rollup/rollup-win32-x64-msvc": "4.63.5",
3194
+ "@rollup/rollup-android-arm-eabi": "4.64.0",
3195
+ "@rollup/rollup-android-arm64": "4.64.0",
3196
+ "@rollup/rollup-darwin-arm64": "4.64.0",
3197
+ "@rollup/rollup-darwin-x64": "4.64.0",
3198
+ "@rollup/rollup-freebsd-arm64": "4.64.0",
3199
+ "@rollup/rollup-freebsd-x64": "4.64.0",
3200
+ "@rollup/rollup-linux-arm-gnueabihf": "4.64.0",
3201
+ "@rollup/rollup-linux-arm-musleabihf": "4.64.0",
3202
+ "@rollup/rollup-linux-arm64-gnu": "4.64.0",
3203
+ "@rollup/rollup-linux-arm64-musl": "4.64.0",
3204
+ "@rollup/rollup-linux-loong64-gnu": "4.64.0",
3205
+ "@rollup/rollup-linux-loong64-musl": "4.64.0",
3206
+ "@rollup/rollup-linux-ppc64-gnu": "4.64.0",
3207
+ "@rollup/rollup-linux-ppc64-musl": "4.64.0",
3208
+ "@rollup/rollup-linux-riscv64-gnu": "4.64.0",
3209
+ "@rollup/rollup-linux-riscv64-musl": "4.64.0",
3210
+ "@rollup/rollup-linux-s390x-gnu": "4.64.0",
3211
+ "@rollup/rollup-linux-x64-gnu": "4.64.0",
3212
+ "@rollup/rollup-linux-x64-musl": "4.64.0",
3213
+ "@rollup/rollup-openbsd-x64": "4.64.0",
3214
+ "@rollup/rollup-openharmony-arm64": "4.64.0",
3215
+ "@rollup/rollup-win32-arm64-msvc": "4.64.0",
3216
+ "@rollup/rollup-win32-ia32-msvc": "4.64.0",
3217
+ "@rollup/rollup-win32-x64-gnu": "4.64.0",
3218
+ "@rollup/rollup-win32-x64-msvc": "4.64.0",
3219
3219
  "fsevents": "~2.3.2"
3220
3220
  }
3221
3221
  },
@@ -3449,9 +3449,9 @@
3449
3449
  }
3450
3450
  },
3451
3451
  "node_modules/source-map-js": {
3452
- "version": "1.2.1",
3453
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
3454
- "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
3452
+ "version": "1.2.2",
3453
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz",
3454
+ "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==",
3455
3455
  "dev": true,
3456
3456
  "license": "BSD-3-Clause",
3457
3457
  "engines": {