@kmugalkhod/lightcode 0.16.0 → 0.17.1

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/server.js CHANGED
@@ -2061,10 +2061,11 @@ var init_schema10 = __esm(() => {
2061
2061
 
2062
2062
  // packages/ai/src/skills/schema.ts
2063
2063
  import { z as z21 } from "zod";
2064
- var skillDescription = "Load a local Lightcode skill by name and return its instructions and metadata.", skillInputSchema, skillProviderInputSchema, skillSummarySchema, skillOutputSchema, skillListOutputSchema;
2064
+ var skillDescription = "Load an installed skill by name before following its instructions. Use resource to read a supporting file relative to that skill's directory.", skillInputSchema, skillProviderInputSchema, skillSummarySchema, skillOutputSchema, skillListOutputSchema;
2065
2065
  var init_schema11 = __esm(() => {
2066
2066
  skillInputSchema = z21.object({
2067
- name: z21.string().min(1).max(160)
2067
+ name: z21.string().min(1).max(160),
2068
+ resource: z21.string().min(1).max(1024).optional()
2068
2069
  });
2069
2070
  skillProviderInputSchema = skillInputSchema;
2070
2071
  skillSummarySchema = z21.object({
@@ -2414,7 +2415,7 @@ var init_tool_registry = __esm(() => {
2414
2415
  permissionMode: "read-only",
2415
2416
  execution: "server",
2416
2417
  availability: "skills",
2417
- activation: "specialized",
2418
+ activation: "core",
2418
2419
  outputPolicy: "artifact-if-large"
2419
2420
  },
2420
2421
  list_mcp_resources: {
@@ -3067,7 +3068,7 @@ ${environmentContext.trim()}` : "");
3067
3068
  var cwdPromptPlaceholder = "{cwd}", defaultCodingAgentSystemPrompt, toolCallingDisciplineAddendum;
3068
3069
  var init_coding_agent_prompt = __esm(() => {
3069
3070
  init_coding_agent_modes();
3070
- defaultCodingAgentSystemPrompt = "You are a coding agent working inside the user's project at this working directory: {cwd}. " + 'You can already see the project \u2014 proactively read it. When the user asks you to review, explain, or work on "my code"/"this", inspect the working directory yourself with list_files, glob_search, grep, and read_file; NEVER ask the user to paste or share code that lives in this directory \u2014 open it. ' + "Use tools for filesystem and codebase tasks instead of guessing, and only interact with files under the working directory. " + "Prefer dedicated tools \u2014 glob_search for paths, grep for text search, structured git tools for repository inspection \u2014 and bash only when those are not enough. " + `Inspect context before risky operations. Progress notes: before a major tool action you may emit ONE short note (one sentence, ~15 words) saying what you are about to do. After a tool returns, mention a finding only if it changes your plan, and state it as fact grounded in what the tool actually returned \u2014 cite the file/line/symbol. NEVER claim you found, changed, or fixed something before a tool result confirms it. Skip notes for routine reads, and do not restate the todo list in prose.
3071
+ defaultCodingAgentSystemPrompt = "You are a coding agent working inside the user's project at this working directory: {cwd}. " + 'You can already see the project \u2014 proactively read it. When the user asks you to review, explain, or work on "my code"/"this", inspect the working directory yourself with list_files, glob_search, grep, and read_file; NEVER ask the user to paste or share code that lives in this directory \u2014 open it. ' + "Use tools for filesystem and codebase tasks instead of guessing, and only interact with files under the working directory. " + "Prefer dedicated tools \u2014 glob_search for paths, grep for text search, structured git tools for repository inspection \u2014 and bash only when those are not enough. " + "Check the available skill descriptions for every task. When a skill is explicitly named or clearly matches the task, load it with the skill tool before acting and follow its instructions within the user's scope and tool permissions. Skill files may be installed outside the workspace; use the skill tool to read their relative supporting resources. Never claim to have used a skill you have not loaded. " + `Inspect context before risky operations. Progress notes: before a major tool action you may emit ONE short note (one sentence, ~15 words) saying what you are about to do. After a tool returns, mention a finding only if it changes your plan, and state it as fact grounded in what the tool actually returned \u2014 cite the file/line/symbol. NEVER claim you found, changed, or fixed something before a tool result confirms it. Skip notes for routine reads, and do not restate the todo list in prose.
3071
3072
 
3072
3073
  ` + `Task list discipline \u2014 use the todo_write tool to keep a visible, evolving checklist:
3073
3074
  ` + `- Create the list FIRST. For any task with roughly three or more distinct steps, or any multi-file or multi-stage work, call todo_write as your very first action \u2014 before reading or editing \u2014 with every step listed and all of them set to pending.
@@ -5316,103 +5317,145 @@ var init_runtime10 = __esm(() => {
5316
5317
  });
5317
5318
 
5318
5319
  // packages/ai/src/skills/runtime.ts
5319
- import { existsSync as existsSync4, readFileSync as readFileSync2, readdirSync as readdirSync2, statSync as statSync2 } from "fs";
5320
+ import { readFileSync as readFileSync2, readdirSync as readdirSync2, realpathSync as realpathSync2, statSync as statSync2 } from "fs";
5320
5321
  import os from "os";
5321
5322
  import path11 from "path";
5322
- function defaultSkillRoots(cwd) {
5323
+ function defaultSkillRoots(cwd, home, env) {
5323
5324
  return [
5324
5325
  { source: "project", path: path11.join(cwd, ".lightcode", "skills") },
5325
5326
  { source: "project", path: path11.join(cwd, ".agents", "skills") },
5326
- { source: "user", path: path11.join(os.homedir(), ".lightcode", "skills") }
5327
+ ...[".claude", ".codex", ".opencode"].map((dir) => ({
5328
+ source: "project",
5329
+ path: path11.join(cwd, dir, "skills")
5330
+ })),
5331
+ ...[".lightcode", ".agents", ".claude"].map((dir) => ({
5332
+ source: "user",
5333
+ path: path11.join(home, dir, "skills")
5334
+ })),
5335
+ {
5336
+ source: "user",
5337
+ path: path11.join(env.CODEX_HOME || path11.join(home, ".codex"), "skills")
5338
+ },
5339
+ {
5340
+ source: "user",
5341
+ path: path11.join(env.XDG_CONFIG_HOME || path11.join(home, ".config"), "opencode", "skills")
5342
+ },
5343
+ ...(env.LIGHTCODE_SKILL_PATHS ?? "").split(path11.delimiter).filter(Boolean).map((root) => ({
5344
+ source: "user",
5345
+ path: path11.resolve(cwd, root)
5346
+ }))
5327
5347
  ];
5328
5348
  }
5329
5349
  function normalizeSkillName(value) {
5330
5350
  return value.trim().toLowerCase().replace(/[^a-z0-9._-]+/g, "-");
5331
5351
  }
5332
5352
  function parseBasicFrontmatter(content) {
5333
- if (!content.startsWith("---")) {
5353
+ const match = /^\uFEFF?---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/.exec(content);
5354
+ if (!match)
5334
5355
  return {};
5335
- }
5336
- const endIndex = content.indexOf(`
5337
- ---`, 3);
5338
- if (endIndex === -1) {
5356
+ const parsed = Bun.YAML.parse(match[1]);
5357
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
5339
5358
  return {};
5340
- }
5341
- const frontmatter = content.slice(3, endIndex).trim();
5342
- return Object.fromEntries(frontmatter.split(/\r?\n/).map((line) => line.match(/^([A-Za-z0-9_-]+):\s*(.*)$/)).filter((match) => match !== null).map((match) => [
5343
- match[1],
5344
- match[2].replace(/^["']|["']$/g, "").trim()
5345
- ]));
5359
+ return Object.fromEntries(Object.entries(parsed).filter((entry) => typeof entry[1] === "string"));
5346
5360
  }
5347
5361
  function findSkillFiles(root) {
5348
- if (!existsSync4(root.path)) {
5349
- return [];
5350
- }
5351
5362
  const files = [];
5363
+ const visited = new Set;
5352
5364
  const visit = (directory, depth) => {
5353
- if (depth > 4) {
5365
+ if (depth > 8 || visited.size >= 2000) {
5366
+ return;
5367
+ }
5368
+ let entries;
5369
+ try {
5370
+ const real = realpathSync2(directory);
5371
+ if (visited.has(real))
5372
+ return;
5373
+ visited.add(real);
5374
+ entries = readdirSync2(directory).sort();
5375
+ } catch {
5354
5376
  return;
5355
5377
  }
5356
- for (const entry of readdirSync2(directory)) {
5378
+ for (const entry of entries) {
5357
5379
  const entryPath = path11.join(directory, entry);
5358
- const stat3 = statSync2(entryPath);
5359
- if (stat3.isDirectory()) {
5360
- visit(entryPath, depth + 1);
5361
- } else if (entry.toLowerCase() === "skill.md") {
5362
- files.push(entryPath);
5363
- }
5380
+ try {
5381
+ const stat3 = statSync2(entryPath);
5382
+ if (stat3.isDirectory()) {
5383
+ visit(entryPath, depth + 1);
5384
+ } else if (stat3.isFile() && stat3.size <= 1048576 && entry.toLowerCase() === "skill.md") {
5385
+ files.push(entryPath);
5386
+ }
5387
+ } catch {}
5364
5388
  }
5365
5389
  };
5366
5390
  visit(root.path, 0);
5367
5391
  return files;
5368
5392
  }
5369
5393
  function listSkills({
5370
- cwd = process.cwd()
5394
+ cwd = process.cwd(),
5395
+ home = os.homedir(),
5396
+ env = process.env
5371
5397
  } = {}) {
5372
- const cached = skillsCache.get(cwd);
5398
+ const roots = defaultSkillRoots(path11.resolve(cwd), home, env);
5399
+ const cacheKey = JSON.stringify(roots);
5400
+ const cached = skillsCache.get(cacheKey);
5373
5401
  if (cached && cached.expiresAt > Date.now()) {
5374
5402
  return cached.skills;
5375
5403
  }
5376
- const skills = listSkillsUncached(cwd);
5377
- skillsCache.set(cwd, {
5404
+ const skills = listSkillsUncached(roots);
5405
+ if (skillsCache.size >= 100)
5406
+ skillsCache.delete(skillsCache.keys().next().value);
5407
+ skillsCache.set(cacheKey, {
5378
5408
  expiresAt: Date.now() + skillsCacheTtlMs,
5379
5409
  skills
5380
5410
  });
5381
5411
  return skills;
5382
5412
  }
5383
- function listSkillsUncached(cwd) {
5413
+ function listSkillsUncached(roots) {
5384
5414
  const seen = new Set;
5385
5415
  const summaries = [];
5386
- for (const root of defaultSkillRoots(cwd)) {
5416
+ for (const root of roots) {
5387
5417
  for (const skillPath of findSkillFiles(root)) {
5388
- const content = readFileSync2(skillPath, "utf8");
5389
- const frontmatter = parseBasicFrontmatter(content);
5390
- const fallbackName = path11.basename(path11.dirname(skillPath));
5391
- const name = normalizeSkillName(frontmatter.name ?? fallbackName);
5392
- if (!name || seen.has(name)) {
5393
- continue;
5394
- }
5395
- seen.add(name);
5396
- summaries.push({
5397
- name,
5398
- description: frontmatter.description || null,
5399
- path: skillPath,
5400
- source: root.source
5401
- });
5418
+ try {
5419
+ const content = readFileSync2(skillPath, "utf8");
5420
+ const frontmatter = parseBasicFrontmatter(content);
5421
+ const fallbackName = path11.basename(path11.dirname(skillPath));
5422
+ const name = normalizeSkillName(frontmatter.name ?? fallbackName);
5423
+ if (!name || name.length > 160 || seen.has(name)) {
5424
+ continue;
5425
+ }
5426
+ seen.add(name);
5427
+ summaries.push({
5428
+ name,
5429
+ description: frontmatter.description || null,
5430
+ path: skillPath,
5431
+ source: root.source
5432
+ });
5433
+ } catch {}
5402
5434
  }
5403
5435
  }
5404
5436
  return summaries.sort((left, right) => left.name.localeCompare(right.name));
5405
5437
  }
5406
- function loadSkill(input, { cwd = process.cwd() } = {}) {
5438
+ function loadSkill(input, options = {}) {
5407
5439
  const parsedInput = skillInputSchema.parse(input);
5408
5440
  const normalizedName = normalizeSkillName(parsedInput.name);
5409
- const skill = listSkills({ cwd }).find((candidate) => normalizeSkillName(candidate.name) === normalizedName);
5441
+ const skill = listSkills(options).find((candidate) => normalizeSkillName(candidate.name) === normalizedName);
5410
5442
  if (!skill) {
5411
5443
  throw new Error(`Skill not found: ${parsedInput.name}`);
5412
5444
  }
5445
+ const root = realpathSync2(path11.dirname(skill.path));
5446
+ const target = parsedInput.resource ? realpathSync2(path11.resolve(root, parsedInput.resource)) : skill.path;
5447
+ if (parsedInput.resource) {
5448
+ const relative = path11.relative(root, target);
5449
+ if (relative === ".." || relative.startsWith(`..${path11.sep}`) || path11.isAbsolute(relative)) {
5450
+ throw new Error("Skill resources must stay inside the installed skill directory.");
5451
+ }
5452
+ }
5453
+ const stat3 = statSync2(target);
5454
+ if (!stat3.isFile() || stat3.size > 1048576)
5455
+ throw new Error("Skill resource must be a file smaller than 1 MiB.");
5413
5456
  return skillOutputSchema.parse({
5414
5457
  skill,
5415
- content: readFileSync2(skill.path, "utf8")
5458
+ content: readFileSync2(target, "utf8")
5416
5459
  });
5417
5460
  }
5418
5461
  var skillsCacheTtlMs = 30000, skillsCache;
@@ -7086,7 +7129,7 @@ var init_context = __esm(() => {
7086
7129
  });
7087
7130
 
7088
7131
  // packages/ai/src/config/lightcode-config.ts
7089
- import { existsSync as existsSync5, mkdirSync as mkdirSync3, readFileSync as readFileSync3, writeFileSync } from "fs";
7132
+ import { existsSync as existsSync4, mkdirSync as mkdirSync3, readFileSync as readFileSync3, writeFileSync } from "fs";
7090
7133
  import os2 from "os";
7091
7134
  import path13 from "path";
7092
7135
  import { z as z34 } from "zod";
@@ -7097,7 +7140,7 @@ function getDefaultUserConfigPath(env) {
7097
7140
  return path13.join(os2.homedir(), ".lightcode", "settings.json");
7098
7141
  }
7099
7142
  function readConfigFile(scope, configPath) {
7100
- if (!existsSync5(configPath)) {
7143
+ if (!existsSync4(configPath)) {
7101
7144
  return {
7102
7145
  config: {},
7103
7146
  file: {
@@ -7559,17 +7602,101 @@ var init_runtime12 = __esm(() => {
7559
7602
  init_schema8();
7560
7603
  });
7561
7604
 
7605
+ // packages/shared/src/network-fetch.ts
7606
+ import { readFileSync as readFileSync4, statSync as statSync3 } from "fs";
7607
+ import { X509Certificate } from "crypto";
7608
+ import * as tls from "tls";
7609
+ function isCertificateError(error) {
7610
+ const seen = new Set;
7611
+ let current = error;
7612
+ while (current && typeof current === "object" && !seen.has(current) && seen.size < 12) {
7613
+ seen.add(current);
7614
+ const record = current;
7615
+ if (certificateErrorPattern.test(`${record.code ?? ""} ${record.message ?? ""}`))
7616
+ return true;
7617
+ current = record.cause;
7618
+ }
7619
+ return false;
7620
+ }
7621
+ function createNetworkFetch({
7622
+ env = process.env,
7623
+ fetchImpl
7624
+ } = {}) {
7625
+ let cachedKey = "";
7626
+ let cachedCa;
7627
+ let checkedAt = 0;
7628
+ const resolveCa = () => {
7629
+ const paths = [
7630
+ ...new Set([env.LIGHTCODE_CA_CERTS, env.NODE_EXTRA_CA_CERTS, env.SSL_CERT_FILE].map((value) => value?.trim()).filter((value) => Boolean(value)))
7631
+ ];
7632
+ const key = JSON.stringify(paths);
7633
+ if (key === cachedKey && Date.now() - checkedAt < 30000)
7634
+ return cachedCa;
7635
+ const extra = [];
7636
+ for (const file of paths) {
7637
+ try {
7638
+ if (statSync3(file).size > 4 * 1024 * 1024)
7639
+ throw new Error("CA bundle exceeds 4 MiB");
7640
+ const certificates = readFileSync4(file, "utf8").match(certificatePattern);
7641
+ if (!certificates?.length)
7642
+ throw new Error("No PEM certificates found");
7643
+ for (const cert of certificates)
7644
+ new X509Certificate(cert);
7645
+ extra.push(...certificates);
7646
+ } catch (cause) {
7647
+ throw new Error("Cannot load configured TLS CA certificate bundle. Check LIGHTCODE_CA_CERTS, NODE_EXTRA_CA_CERTS and SSL_CERT_FILE for readable PEM files.", { cause });
7648
+ }
7649
+ }
7650
+ let defaults = [...tls.rootCertificates];
7651
+ try {
7652
+ defaults.push(...tls.getCACertificates("default"), ...tls.getCACertificates("system"));
7653
+ } catch {}
7654
+ cachedCa = extra.length ? [...new Set([...defaults, ...extra])] : undefined;
7655
+ cachedKey = key;
7656
+ checkedAt = Date.now();
7657
+ return cachedCa;
7658
+ };
7659
+ return async (input, init) => {
7660
+ const url = new URL(input instanceof Request ? input.url : String(input));
7661
+ const ca = url.protocol === "https:" ? resolveCa() : undefined;
7662
+ const local = ["localhost", "127.0.0.1", "[::1]"].includes(url.hostname);
7663
+ try {
7664
+ return await (fetchImpl ?? globalThis.fetch)(input, {
7665
+ ...init,
7666
+ ...local && init?.proxy === undefined ? { proxy: "" } : {},
7667
+ ...ca ? {
7668
+ tls: {
7669
+ ...init?.tls,
7670
+ ca: init?.tls?.ca ?? ca,
7671
+ rejectUnauthorized: true
7672
+ }
7673
+ } : {}
7674
+ });
7675
+ } catch (cause) {
7676
+ if (isCertificateError(cause))
7677
+ throw new Error(certificateErrorHint, { cause });
7678
+ throw cause;
7679
+ }
7680
+ };
7681
+ }
7682
+ var certificatePattern, certificateErrorPattern, certificateErrorHint = "TLS certificate verification failed. Configure your company CA PEM with NODE_EXTRA_CA_CERTS or LIGHTCODE_CA_CERTS, then restart Lightcode. If a CA is already configured, check the server certificate hostname, expiry, and chain.", networkFetch;
7683
+ var init_network_fetch = __esm(() => {
7684
+ certificatePattern = /-----BEGIN CERTIFICATE-----[\s\S]*?-----END CERTIFICATE-----/g;
7685
+ certificateErrorPattern = /CERT_(?:HAS_EXPIRED|NOT_YET_VALID|REVOKED|UNTRUSTED|SIGNATURE_FAILURE)|CERTIFICATE_VERIFY_FAILED|UNABLE_TO_(?:GET_ISSUER_CERT(?:_LOCALLY)?|VERIFY_LEAF_SIGNATURE)|DEPTH_ZERO_SELF_SIGNED_CERT|SELF_SIGNED_CERT_IN_CHAIN|ERR_TLS_CERT_ALTNAME_INVALID|certificate|self.signed|unable to (?:get local issuer|verify the first)/i;
7686
+ networkFetch = createNetworkFetch();
7687
+ });
7688
+
7562
7689
  // packages/ai/src/web-fetch/runtime.ts
7563
7690
  function decodeHtmlEntities(value) {
7564
7691
  return value.replace(/&(#x?[0-9a-f]+|[a-z]+);/gi, (match, entity) => {
7565
7692
  const normalized = entity.toLowerCase();
7566
7693
  if (normalized.startsWith("#x")) {
7567
7694
  const codePoint = Number.parseInt(normalized.slice(2), 16);
7568
- return Number.isFinite(codePoint) ? String.fromCodePoint(codePoint) : match;
7695
+ return Number.isInteger(codePoint) && codePoint >= 0 && codePoint <= 1114111 ? String.fromCodePoint(codePoint) : match;
7569
7696
  }
7570
7697
  if (normalized.startsWith("#")) {
7571
7698
  const codePoint = Number.parseInt(normalized.slice(1), 10);
7572
- return Number.isFinite(codePoint) ? String.fromCodePoint(codePoint) : match;
7699
+ return Number.isInteger(codePoint) && codePoint >= 0 && codePoint <= 1114111 ? String.fromCodePoint(codePoint) : match;
7573
7700
  }
7574
7701
  return htmlEntityMap[normalized] ?? match;
7575
7702
  });
@@ -7596,6 +7723,34 @@ function normalizeContentToText(content, contentType) {
7596
7723
  return content.replace(/\r\n/g, `
7597
7724
  `).trim();
7598
7725
  }
7726
+ async function readBoundedBody(response) {
7727
+ if (!response.body)
7728
+ return { text: "", truncated: false };
7729
+ const reader = response.body.getReader();
7730
+ const decoder = new TextDecoder;
7731
+ let bytes = 0;
7732
+ let text = "";
7733
+ let truncated = false;
7734
+ try {
7735
+ for (;; ) {
7736
+ const { done, value } = await reader.read();
7737
+ if (done)
7738
+ break;
7739
+ const available = maxDownloadBytes - bytes;
7740
+ text += decoder.decode(value.subarray(0, available), { stream: true });
7741
+ bytes += value.byteLength;
7742
+ if (bytes >= maxDownloadBytes) {
7743
+ truncated = true;
7744
+ await reader.cancel();
7745
+ break;
7746
+ }
7747
+ }
7748
+ text += decoder.decode();
7749
+ return { text, truncated };
7750
+ } finally {
7751
+ reader.releaseLock();
7752
+ }
7753
+ }
7599
7754
  function errorOutput({
7600
7755
  parsedInput,
7601
7756
  code,
@@ -7623,7 +7778,7 @@ async function executeWebFetch(input, options = {}) {
7623
7778
  const timeoutSignal = AbortSignal.timeout(parsedInput.timeoutMs);
7624
7779
  const signal = options.signal ? AbortSignal.any([options.signal, timeoutSignal]) : timeoutSignal;
7625
7780
  try {
7626
- const response = await (options.fetch ?? globalThis.fetch)(parsedInput.url, {
7781
+ const response = await (options.fetch ?? networkFetch)(parsedInput.url, {
7627
7782
  redirect: "follow",
7628
7783
  signal,
7629
7784
  headers: {
@@ -7632,7 +7787,8 @@ async function executeWebFetch(input, options = {}) {
7632
7787
  }
7633
7788
  });
7634
7789
  const contentType = response.headers.get("content-type");
7635
- const rawText = await response.text();
7790
+ const downloaded = await readBoundedBody(response);
7791
+ const rawText = downloaded.text;
7636
7792
  const normalizedText = normalizeContentToText(rawText, contentType);
7637
7793
  const truncated = truncateText(normalizedText, parsedInput.maxChars);
7638
7794
  return webFetchOutputSchema.parse({
@@ -7644,7 +7800,7 @@ async function executeWebFetch(input, options = {}) {
7644
7800
  contentType,
7645
7801
  title: contentType?.toLowerCase().includes("html") ? extractTitle(rawText) : null,
7646
7802
  text: truncated.text,
7647
- truncated: truncated.truncated,
7803
+ truncated: truncated.truncated || downloaded.truncated,
7648
7804
  fetchedAt: new Date().toISOString(),
7649
7805
  error: response.ok ? null : {
7650
7806
  code: "http_error",
@@ -7659,8 +7815,9 @@ async function executeWebFetch(input, options = {}) {
7659
7815
  });
7660
7816
  }
7661
7817
  }
7662
- var htmlEntityMap;
7818
+ var htmlEntityMap, maxDownloadBytes;
7663
7819
  var init_runtime13 = __esm(() => {
7820
+ init_network_fetch();
7664
7821
  init_output_utils();
7665
7822
  init_schema14();
7666
7823
  htmlEntityMap = {
@@ -7671,10 +7828,11 @@ var init_runtime13 = __esm(() => {
7671
7828
  apos: "'",
7672
7829
  nbsp: " "
7673
7830
  };
7831
+ maxDownloadBytes = 2 * 1024 * 1024;
7674
7832
  });
7675
7833
 
7676
7834
  // packages/ai/src/config/credentials.ts
7677
- import { chmodSync, existsSync as existsSync6, mkdirSync as mkdirSync4, readFileSync as readFileSync4, writeFileSync as writeFileSync2 } from "fs";
7835
+ import { chmodSync, existsSync as existsSync5, mkdirSync as mkdirSync4, readFileSync as readFileSync5, writeFileSync as writeFileSync2 } from "fs";
7678
7836
  import os3 from "os";
7679
7837
  import path14 from "path";
7680
7838
  import { z as z35 } from "zod";
@@ -7687,11 +7845,11 @@ function getCredentialsPath(env = process.env) {
7687
7845
  }
7688
7846
  function readStoredCredentials(env = process.env) {
7689
7847
  const credentialsPath = getCredentialsPath(env);
7690
- if (!existsSync6(credentialsPath)) {
7848
+ if (!existsSync5(credentialsPath)) {
7691
7849
  return {};
7692
7850
  }
7693
7851
  try {
7694
- const parsed = storedCredentialsSchema.safeParse(JSON.parse(readFileSync4(credentialsPath, "utf8")));
7852
+ const parsed = storedCredentialsSchema.safeParse(JSON.parse(readFileSync5(credentialsPath, "utf8")));
7695
7853
  return parsed.success ? parsed.data : {};
7696
7854
  } catch {
7697
7855
  return {};
@@ -7903,7 +8061,7 @@ async function executeWebSearch(input, options = {}) {
7903
8061
  }
7904
8062
  return await searchBrave(parsedInput, {
7905
8063
  apiKey: keys.brave,
7906
- fetch: options.fetch ?? globalThis.fetch,
8064
+ fetch: options.fetch ?? networkFetch,
7907
8065
  signal,
7908
8066
  maxCharactersPerResult: config2.maxCharactersPerResult
7909
8067
  });
@@ -7919,7 +8077,7 @@ async function executeWebSearch(input, options = {}) {
7919
8077
  }
7920
8078
  return await searchTavily(parsedInput, {
7921
8079
  apiKey: keys.tavily,
7922
- fetch: options.fetch ?? globalThis.fetch,
8080
+ fetch: options.fetch ?? networkFetch,
7923
8081
  signal,
7924
8082
  maxCharactersPerResult: config2.maxCharactersPerResult
7925
8083
  });
@@ -7960,6 +8118,7 @@ async function executeWebSearch(input, options = {}) {
7960
8118
  }
7961
8119
  var localUsesByTurn;
7962
8120
  var init_runtime14 = __esm(() => {
8121
+ init_network_fetch();
7963
8122
  init_lightcode_config();
7964
8123
  init_credentials();
7965
8124
  init_config2();
@@ -9486,7 +9645,7 @@ var init_schema18 = __esm(() => {
9486
9645
  });
9487
9646
 
9488
9647
  // packages/ai/src/plugins/runtime.ts
9489
- import { existsSync as existsSync7, readFileSync as readFileSync5, readdirSync as readdirSync3 } from "fs";
9648
+ import { existsSync as existsSync6, readFileSync as readFileSync6, readdirSync as readdirSync3 } from "fs";
9490
9649
  import os4 from "os";
9491
9650
  import path16 from "path";
9492
9651
  function pluginRoots(cwd) {
@@ -9498,7 +9657,7 @@ function pluginRoots(cwd) {
9498
9657
  function listPlugins({ cwd = process.cwd() } = {}) {
9499
9658
  const plugins = [];
9500
9659
  for (const root of pluginRoots(cwd)) {
9501
- if (!existsSync7(root)) {
9660
+ if (!existsSync6(root)) {
9502
9661
  continue;
9503
9662
  }
9504
9663
  for (const entry of readdirSync3(root, { withFileTypes: true })) {
@@ -9506,10 +9665,10 @@ function listPlugins({ cwd = process.cwd() } = {}) {
9506
9665
  continue;
9507
9666
  }
9508
9667
  const manifestPath = path16.join(root, entry.name, "plugin.json");
9509
- if (!existsSync7(manifestPath)) {
9668
+ if (!existsSync6(manifestPath)) {
9510
9669
  continue;
9511
9670
  }
9512
- const manifest = pluginManifestSchema.parse(JSON.parse(readFileSync5(manifestPath, "utf8")));
9671
+ const manifest = pluginManifestSchema.parse(JSON.parse(readFileSync6(manifestPath, "utf8")));
9513
9672
  plugins.push({
9514
9673
  id: manifest.id,
9515
9674
  name: manifest.name,
@@ -10008,6 +10167,9 @@ function classifyChatError(error) {
10008
10167
  if (RetryError.isInstance(error) && error.lastError) {
10009
10168
  return classifyChatError(error.lastError);
10010
10169
  }
10170
+ if (!(APICallError.isInstance(error) && typeof error.statusCode === "number") && isCertificateError(error)) {
10171
+ return { kind: "network", retryable: false, message: certificateErrorHint };
10172
+ }
10011
10173
  if (APICallError.isInstance(error)) {
10012
10174
  const responseBody = error.responseBody ?? "";
10013
10175
  const message2 = responseBody.length > 0 ? responseBody : error.message;
@@ -10106,6 +10268,7 @@ function logChatDisconnectEvent({
10106
10268
  var chatFailureCounters, logger2, retryableStatusCodes, contextOverflowPattern, contextLimitPattern;
10107
10269
  var init_chat_observability = __esm(() => {
10108
10270
  init_src();
10271
+ init_network_fetch();
10109
10272
  chatFailureCounters = {
10110
10273
  provider_schema_rejection: 0,
10111
10274
  provider_billing_quota: 0,
@@ -10321,8 +10484,8 @@ var config5;
10321
10484
  var init_class = __esm(() => {
10322
10485
  config5 = {
10323
10486
  previewFeatures: [],
10324
- clientVersion: "7.8.0",
10325
- engineVersion: "3c6e192761c0362d496ed980de936e2f3cebcd3a",
10487
+ clientVersion: "7.10.0",
10488
+ engineVersion: "0edf323efd1d98336f3f0a68684b56f689b900d3",
10326
10489
  activeProvider: "sqlite",
10327
10490
  inlineSchema: `generator client {
10328
10491
  provider = "prisma-client"
@@ -10565,7 +10728,7 @@ model SubagentTask {
10565
10728
  graph: ""
10566
10729
  }
10567
10730
  };
10568
- config5.runtimeDataModel = JSON.parse('{"models":{"ChatSession":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"title","kind":"scalar","type":"String"},{"name":"autoTitled","kind":"scalar","type":"Boolean","dbName":"auto_titled"},{"name":"cwd","kind":"scalar","type":"String"},{"name":"workspaceDevice","kind":"scalar","type":"String","dbName":"workspace_device"},{"name":"workspaceInode","kind":"scalar","type":"String","dbName":"workspace_inode"},{"name":"mode","kind":"scalar","type":"String"},{"name":"permissionMode","kind":"scalar","type":"String","dbName":"permission_mode"},{"name":"model","kind":"scalar","type":"String"},{"name":"revision","kind":"scalar","type":"Int"},{"name":"createdAt","kind":"scalar","type":"DateTime","dbName":"created_at"},{"name":"updatedAt","kind":"scalar","type":"DateTime","dbName":"updated_at"},{"name":"messages","kind":"object","type":"ChatMessage","relationName":"ChatMessageToChatSession"},{"name":"interactions","kind":"object","type":"ChatInteraction","relationName":"ChatInteractionToChatSession"},{"name":"subagentTasks","kind":"object","type":"SubagentTask","relationName":"ChatSessionToSubagentTask"},{"name":"contextState","kind":"object","type":"SessionContextState","relationName":"ChatSessionToSessionContextState"},{"name":"runs","kind":"object","type":"ChatRun","relationName":"ChatRunToChatSession"},{"name":"turnReverts","kind":"object","type":"ChatTurnRevert","relationName":"ChatSessionToChatTurnRevert"}],"dbName":"sessions"},"SessionContextState":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"sessionId","kind":"scalar","type":"String","dbName":"session_id"},{"name":"summary","kind":"scalar","type":"String"},{"name":"anchorMessageId","kind":"scalar","type":"String","dbName":"anchor_message_id"},{"name":"coveredMessageCount","kind":"scalar","type":"Int","dbName":"covered_message_count"},{"name":"estimatedTokens","kind":"scalar","type":"Int","dbName":"estimated_tokens"},{"name":"tier","kind":"scalar","type":"String"},{"name":"model","kind":"scalar","type":"String"},{"name":"createdAt","kind":"scalar","type":"DateTime","dbName":"created_at"},{"name":"updatedAt","kind":"scalar","type":"DateTime","dbName":"updated_at"},{"name":"session","kind":"object","type":"ChatSession","relationName":"ChatSessionToSessionContextState"}],"dbName":"session_context_states"},"ChatMessage":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"sessionId","kind":"scalar","type":"String","dbName":"session_id"},{"name":"messageId","kind":"scalar","type":"String","dbName":"message_id"},{"name":"role","kind":"enum","type":"MessageRole"},{"name":"model","kind":"scalar","type":"String"},{"name":"sequence","kind":"scalar","type":"Int"},{"name":"payload","kind":"scalar","type":"Json"},{"name":"createdAt","kind":"scalar","type":"DateTime","dbName":"created_at"},{"name":"updatedAt","kind":"scalar","type":"DateTime","dbName":"updated_at"},{"name":"session","kind":"object","type":"ChatSession","relationName":"ChatMessageToChatSession"},{"name":"parts","kind":"object","type":"ChatMessagePart","relationName":"ChatMessageToChatMessagePart"}],"dbName":"messages"},"ChatMessagePart":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"messageId","kind":"scalar","type":"String","dbName":"message_id"},{"name":"partIndex","kind":"scalar","type":"Int","dbName":"part_index"},{"name":"payload","kind":"scalar","type":"Json"},{"name":"createdAt","kind":"scalar","type":"DateTime","dbName":"created_at"},{"name":"message","kind":"object","type":"ChatMessage","relationName":"ChatMessageToChatMessagePart"}],"dbName":"message_parts"},"ChatRun":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"sessionId","kind":"scalar","type":"String","dbName":"session_id"},{"name":"clientTurnId","kind":"scalar","type":"String","dbName":"client_turn_id"},{"name":"status","kind":"enum","type":"ChatRunStatus"},{"name":"baseRevision","kind":"scalar","type":"Int","dbName":"base_revision"},{"name":"finalRevision","kind":"scalar","type":"Int","dbName":"final_revision"},{"name":"error","kind":"scalar","type":"String"},{"name":"startedAt","kind":"scalar","type":"DateTime","dbName":"started_at"},{"name":"finishedAt","kind":"scalar","type":"DateTime","dbName":"finished_at"},{"name":"createdAt","kind":"scalar","type":"DateTime","dbName":"created_at"},{"name":"updatedAt","kind":"scalar","type":"DateTime","dbName":"updated_at"},{"name":"session","kind":"object","type":"ChatSession","relationName":"ChatRunToChatSession"},{"name":"events","kind":"object","type":"ChatRunEvent","relationName":"ChatRunToChatRunEvent"}],"dbName":"chat_runs"},"ChatRunEvent":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"runId","kind":"scalar","type":"String","dbName":"run_id"},{"name":"cursor","kind":"scalar","type":"Int"},{"name":"kind","kind":"scalar","type":"String"},{"name":"payload","kind":"scalar","type":"Json"},{"name":"createdAt","kind":"scalar","type":"DateTime","dbName":"created_at"},{"name":"run","kind":"object","type":"ChatRun","relationName":"ChatRunToChatRunEvent"}],"dbName":"chat_run_events"},"ChatTurnRevert":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"sessionId","kind":"scalar","type":"String","dbName":"session_id"},{"name":"turnKey","kind":"scalar","type":"String","dbName":"turn_key"},{"name":"messages","kind":"scalar","type":"Json"},{"name":"state","kind":"scalar","type":"String"},{"name":"createdAt","kind":"scalar","type":"DateTime","dbName":"created_at"},{"name":"reappliedAt","kind":"scalar","type":"DateTime","dbName":"reapplied_at"},{"name":"session","kind":"object","type":"ChatSession","relationName":"ChatSessionToChatTurnRevert"}],"dbName":"chat_turn_reverts"},"ChatInteraction":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"sessionId","kind":"scalar","type":"String","dbName":"session_id"},{"name":"toolCallId","kind":"scalar","type":"String","dbName":"tool_call_id"},{"name":"kind","kind":"enum","type":"ChatInteractionKind"},{"name":"status","kind":"enum","type":"ChatInteractionStatus"},{"name":"payload","kind":"scalar","type":"Json"},{"name":"response","kind":"scalar","type":"Json"},{"name":"resolvedAt","kind":"scalar","type":"DateTime","dbName":"resolved_at"},{"name":"createdAt","kind":"scalar","type":"DateTime","dbName":"created_at"},{"name":"updatedAt","kind":"scalar","type":"DateTime","dbName":"updated_at"},{"name":"session","kind":"object","type":"ChatSession","relationName":"ChatInteractionToChatSession"}],"dbName":"chat_interactions"},"SubagentTask":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"parentSessionId","kind":"scalar","type":"String","dbName":"parent_session_id"},{"name":"prompt","kind":"scalar","type":"String"},{"name":"status","kind":"enum","type":"SubagentTaskStatus"},{"name":"mode","kind":"scalar","type":"String"},{"name":"model","kind":"scalar","type":"String"},{"name":"allowedTools","kind":"scalar","type":"Json","dbName":"allowed_tools"},{"name":"output","kind":"scalar","type":"Json"},{"name":"error","kind":"scalar","type":"String"},{"name":"startedAt","kind":"scalar","type":"DateTime","dbName":"started_at"},{"name":"finishedAt","kind":"scalar","type":"DateTime","dbName":"finished_at"},{"name":"createdAt","kind":"scalar","type":"DateTime","dbName":"created_at"},{"name":"updatedAt","kind":"scalar","type":"DateTime","dbName":"updated_at"},{"name":"parentSession","kind":"object","type":"ChatSession","relationName":"ChatSessionToSubagentTask"}],"dbName":"subagent_tasks"}},"enums":{},"types":{}}');
10731
+ config5.runtimeDataModel = JSON.parse('{"models":{"ChatSession":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"title","kind":"scalar","type":"String"},{"name":"autoTitled","kind":"scalar","type":"Boolean","dbName":"auto_titled"},{"name":"cwd","kind":"scalar","type":"String"},{"name":"workspaceDevice","kind":"scalar","type":"String","dbName":"workspace_device"},{"name":"workspaceInode","kind":"scalar","type":"String","dbName":"workspace_inode"},{"name":"mode","kind":"scalar","type":"String"},{"name":"permissionMode","kind":"scalar","type":"String","dbName":"permission_mode"},{"name":"model","kind":"scalar","type":"String"},{"name":"revision","kind":"scalar","type":"Int"},{"name":"createdAt","kind":"scalar","type":"DateTime","dbName":"created_at"},{"name":"updatedAt","kind":"scalar","type":"DateTime","dbName":"updated_at"},{"name":"messages","kind":"object","type":"ChatMessage","relationName":"ChatMessageToChatSession"},{"name":"interactions","kind":"object","type":"ChatInteraction","relationName":"ChatInteractionToChatSession"},{"name":"subagentTasks","kind":"object","type":"SubagentTask","relationName":"ChatSessionToSubagentTask"},{"name":"contextState","kind":"object","type":"SessionContextState","relationName":"ChatSessionToSessionContextState"},{"name":"runs","kind":"object","type":"ChatRun","relationName":"ChatRunToChatSession"},{"name":"turnReverts","kind":"object","type":"ChatTurnRevert","relationName":"ChatSessionToChatTurnRevert"}],"dbName":"sessions","schema":null},"SessionContextState":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"sessionId","kind":"scalar","type":"String","dbName":"session_id"},{"name":"summary","kind":"scalar","type":"String"},{"name":"anchorMessageId","kind":"scalar","type":"String","dbName":"anchor_message_id"},{"name":"coveredMessageCount","kind":"scalar","type":"Int","dbName":"covered_message_count"},{"name":"estimatedTokens","kind":"scalar","type":"Int","dbName":"estimated_tokens"},{"name":"tier","kind":"scalar","type":"String"},{"name":"model","kind":"scalar","type":"String"},{"name":"createdAt","kind":"scalar","type":"DateTime","dbName":"created_at"},{"name":"updatedAt","kind":"scalar","type":"DateTime","dbName":"updated_at"},{"name":"session","kind":"object","type":"ChatSession","relationName":"ChatSessionToSessionContextState"}],"dbName":"session_context_states","schema":null},"ChatMessage":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"sessionId","kind":"scalar","type":"String","dbName":"session_id"},{"name":"messageId","kind":"scalar","type":"String","dbName":"message_id"},{"name":"role","kind":"enum","type":"MessageRole"},{"name":"model","kind":"scalar","type":"String"},{"name":"sequence","kind":"scalar","type":"Int"},{"name":"payload","kind":"scalar","type":"Json"},{"name":"createdAt","kind":"scalar","type":"DateTime","dbName":"created_at"},{"name":"updatedAt","kind":"scalar","type":"DateTime","dbName":"updated_at"},{"name":"session","kind":"object","type":"ChatSession","relationName":"ChatMessageToChatSession"},{"name":"parts","kind":"object","type":"ChatMessagePart","relationName":"ChatMessageToChatMessagePart"}],"dbName":"messages","schema":null},"ChatMessagePart":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"messageId","kind":"scalar","type":"String","dbName":"message_id"},{"name":"partIndex","kind":"scalar","type":"Int","dbName":"part_index"},{"name":"payload","kind":"scalar","type":"Json"},{"name":"createdAt","kind":"scalar","type":"DateTime","dbName":"created_at"},{"name":"message","kind":"object","type":"ChatMessage","relationName":"ChatMessageToChatMessagePart"}],"dbName":"message_parts","schema":null},"ChatRun":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"sessionId","kind":"scalar","type":"String","dbName":"session_id"},{"name":"clientTurnId","kind":"scalar","type":"String","dbName":"client_turn_id"},{"name":"status","kind":"enum","type":"ChatRunStatus"},{"name":"baseRevision","kind":"scalar","type":"Int","dbName":"base_revision"},{"name":"finalRevision","kind":"scalar","type":"Int","dbName":"final_revision"},{"name":"error","kind":"scalar","type":"String"},{"name":"startedAt","kind":"scalar","type":"DateTime","dbName":"started_at"},{"name":"finishedAt","kind":"scalar","type":"DateTime","dbName":"finished_at"},{"name":"createdAt","kind":"scalar","type":"DateTime","dbName":"created_at"},{"name":"updatedAt","kind":"scalar","type":"DateTime","dbName":"updated_at"},{"name":"session","kind":"object","type":"ChatSession","relationName":"ChatRunToChatSession"},{"name":"events","kind":"object","type":"ChatRunEvent","relationName":"ChatRunToChatRunEvent"}],"dbName":"chat_runs","schema":null},"ChatRunEvent":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"runId","kind":"scalar","type":"String","dbName":"run_id"},{"name":"cursor","kind":"scalar","type":"Int"},{"name":"kind","kind":"scalar","type":"String"},{"name":"payload","kind":"scalar","type":"Json"},{"name":"createdAt","kind":"scalar","type":"DateTime","dbName":"created_at"},{"name":"run","kind":"object","type":"ChatRun","relationName":"ChatRunToChatRunEvent"}],"dbName":"chat_run_events","schema":null},"ChatTurnRevert":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"sessionId","kind":"scalar","type":"String","dbName":"session_id"},{"name":"turnKey","kind":"scalar","type":"String","dbName":"turn_key"},{"name":"messages","kind":"scalar","type":"Json"},{"name":"state","kind":"scalar","type":"String"},{"name":"createdAt","kind":"scalar","type":"DateTime","dbName":"created_at"},{"name":"reappliedAt","kind":"scalar","type":"DateTime","dbName":"reapplied_at"},{"name":"session","kind":"object","type":"ChatSession","relationName":"ChatSessionToChatTurnRevert"}],"dbName":"chat_turn_reverts","schema":null},"ChatInteraction":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"sessionId","kind":"scalar","type":"String","dbName":"session_id"},{"name":"toolCallId","kind":"scalar","type":"String","dbName":"tool_call_id"},{"name":"kind","kind":"enum","type":"ChatInteractionKind"},{"name":"status","kind":"enum","type":"ChatInteractionStatus"},{"name":"payload","kind":"scalar","type":"Json"},{"name":"response","kind":"scalar","type":"Json"},{"name":"resolvedAt","kind":"scalar","type":"DateTime","dbName":"resolved_at"},{"name":"createdAt","kind":"scalar","type":"DateTime","dbName":"created_at"},{"name":"updatedAt","kind":"scalar","type":"DateTime","dbName":"updated_at"},{"name":"session","kind":"object","type":"ChatSession","relationName":"ChatInteractionToChatSession"}],"dbName":"chat_interactions","schema":null},"SubagentTask":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"parentSessionId","kind":"scalar","type":"String","dbName":"parent_session_id"},{"name":"prompt","kind":"scalar","type":"String"},{"name":"status","kind":"enum","type":"SubagentTaskStatus"},{"name":"mode","kind":"scalar","type":"String"},{"name":"model","kind":"scalar","type":"String"},{"name":"allowedTools","kind":"scalar","type":"Json","dbName":"allowed_tools"},{"name":"output","kind":"scalar","type":"Json"},{"name":"error","kind":"scalar","type":"String"},{"name":"startedAt","kind":"scalar","type":"DateTime","dbName":"started_at"},{"name":"finishedAt","kind":"scalar","type":"DateTime","dbName":"finished_at"},{"name":"createdAt","kind":"scalar","type":"DateTime","dbName":"created_at"},{"name":"updatedAt","kind":"scalar","type":"DateTime","dbName":"updated_at"},{"name":"parentSession","kind":"object","type":"ChatSession","relationName":"ChatSessionToSubagentTask"}],"dbName":"subagent_tasks","schema":null}},"enums":{},"types":{}}');
10569
10732
  config5.parameterizationSchema = {
10570
10733
  strings: JSON.parse('["where","orderBy","cursor","session","message","parts","_count","messages","interactions","parentSession","subagentTasks","contextState","run","events","runs","turnReverts","ChatSession.findUnique","ChatSession.findUniqueOrThrow","ChatSession.findFirst","ChatSession.findFirstOrThrow","ChatSession.findMany","data","ChatSession.createOne","ChatSession.createMany","ChatSession.createManyAndReturn","ChatSession.updateOne","ChatSession.updateMany","ChatSession.updateManyAndReturn","create","update","ChatSession.upsertOne","ChatSession.deleteOne","ChatSession.deleteMany","having","_avg","_sum","_min","_max","ChatSession.groupBy","ChatSession.aggregate","SessionContextState.findUnique","SessionContextState.findUniqueOrThrow","SessionContextState.findFirst","SessionContextState.findFirstOrThrow","SessionContextState.findMany","SessionContextState.createOne","SessionContextState.createMany","SessionContextState.createManyAndReturn","SessionContextState.updateOne","SessionContextState.updateMany","SessionContextState.updateManyAndReturn","SessionContextState.upsertOne","SessionContextState.deleteOne","SessionContextState.deleteMany","SessionContextState.groupBy","SessionContextState.aggregate","ChatMessage.findUnique","ChatMessage.findUniqueOrThrow","ChatMessage.findFirst","ChatMessage.findFirstOrThrow","ChatMessage.findMany","ChatMessage.createOne","ChatMessage.createMany","ChatMessage.createManyAndReturn","ChatMessage.updateOne","ChatMessage.updateMany","ChatMessage.updateManyAndReturn","ChatMessage.upsertOne","ChatMessage.deleteOne","ChatMessage.deleteMany","ChatMessage.groupBy","ChatMessage.aggregate","ChatMessagePart.findUnique","ChatMessagePart.findUniqueOrThrow","ChatMessagePart.findFirst","ChatMessagePart.findFirstOrThrow","ChatMessagePart.findMany","ChatMessagePart.createOne","ChatMessagePart.createMany","ChatMessagePart.createManyAndReturn","ChatMessagePart.updateOne","ChatMessagePart.updateMany","ChatMessagePart.updateManyAndReturn","ChatMessagePart.upsertOne","ChatMessagePart.deleteOne","ChatMessagePart.deleteMany","ChatMessagePart.groupBy","ChatMessagePart.aggregate","ChatRun.findUnique","ChatRun.findUniqueOrThrow","ChatRun.findFirst","ChatRun.findFirstOrThrow","ChatRun.findMany","ChatRun.createOne","ChatRun.createMany","ChatRun.createManyAndReturn","ChatRun.updateOne","ChatRun.updateMany","ChatRun.updateManyAndReturn","ChatRun.upsertOne","ChatRun.deleteOne","ChatRun.deleteMany","ChatRun.groupBy","ChatRun.aggregate","ChatRunEvent.findUnique","ChatRunEvent.findUniqueOrThrow","ChatRunEvent.findFirst","ChatRunEvent.findFirstOrThrow","ChatRunEvent.findMany","ChatRunEvent.createOne","ChatRunEvent.createMany","ChatRunEvent.createManyAndReturn","ChatRunEvent.updateOne","ChatRunEvent.updateMany","ChatRunEvent.updateManyAndReturn","ChatRunEvent.upsertOne","ChatRunEvent.deleteOne","ChatRunEvent.deleteMany","ChatRunEvent.groupBy","ChatRunEvent.aggregate","ChatTurnRevert.findUnique","ChatTurnRevert.findUniqueOrThrow","ChatTurnRevert.findFirst","ChatTurnRevert.findFirstOrThrow","ChatTurnRevert.findMany","ChatTurnRevert.createOne","ChatTurnRevert.createMany","ChatTurnRevert.createManyAndReturn","ChatTurnRevert.updateOne","ChatTurnRevert.updateMany","ChatTurnRevert.updateManyAndReturn","ChatTurnRevert.upsertOne","ChatTurnRevert.deleteOne","ChatTurnRevert.deleteMany","ChatTurnRevert.groupBy","ChatTurnRevert.aggregate","ChatInteraction.findUnique","ChatInteraction.findUniqueOrThrow","ChatInteraction.findFirst","ChatInteraction.findFirstOrThrow","ChatInteraction.findMany","ChatInteraction.createOne","ChatInteraction.createMany","ChatInteraction.createManyAndReturn","ChatInteraction.updateOne","ChatInteraction.updateMany","ChatInteraction.updateManyAndReturn","ChatInteraction.upsertOne","ChatInteraction.deleteOne","ChatInteraction.deleteMany","ChatInteraction.groupBy","ChatInteraction.aggregate","SubagentTask.findUnique","SubagentTask.findUniqueOrThrow","SubagentTask.findFirst","SubagentTask.findFirstOrThrow","SubagentTask.findMany","SubagentTask.createOne","SubagentTask.createMany","SubagentTask.createManyAndReturn","SubagentTask.updateOne","SubagentTask.updateMany","SubagentTask.updateManyAndReturn","SubagentTask.upsertOne","SubagentTask.deleteOne","SubagentTask.deleteMany","SubagentTask.groupBy","SubagentTask.aggregate","AND","OR","NOT","id","parentSessionId","prompt","SubagentTaskStatus","status","mode","model","allowedTools","output","error","startedAt","finishedAt","createdAt","updatedAt","equals","in","notIn","lt","lte","gt","gte","not","string_contains","string_starts_with","string_ends_with","array_starts_with","array_ends_with","contains","startsWith","endsWith","sessionId","toolCallId","ChatInteractionKind","kind","ChatInteractionStatus","payload","response","resolvedAt","turnKey","state","reappliedAt","runId","clientTurnId","ChatRunStatus","baseRevision","finalRevision","messageId","partIndex","MessageRole","role","sequence","summary","anchorMessageId","coveredMessageCount","estimatedTokens","tier","title","autoTitled","cwd","workspaceDevice","workspaceInode","permissionMode","revision","every","some","none","runId_cursor","sessionId_clientTurnId","sessionId_toolCallId","messageId_partIndex","sessionId_messageId","sessionId_sequence","is","isNot","connectOrCreate","upsert","createMany","set","disconnect","delete","connect","updateMany","deleteMany","increment","decrement","multiply","divide"]'),
10571
10734
  graph: "sgRYkAEVBwAArAIAIAgAAK0CACAKAACuAgAgCwAArwIAIA4AALACACAPAACxAgAgqAEAAKoCADCpAQAAKQAQqgEAAKoCADCrAQEAAAABsAEBAKECACGxAQEAowIAIbcBQACkAgAhuAFAAKQCACHjAQEAowIAIeQBIACrAgAh5QEBAKMCACHmAQEAowIAIecBAQCjAgAh6AEBAKMCACHpAQIAogIAIQEAAAABACAOAwAApQIAIAUAAMsCACCoAQAAyQIAMKkBAAADABCqAQAAyQIAMKsBAQChAgAhsQEBAKMCACG3AUAApAIAIbgBQACkAgAhyQEBAKECACHOAQAAswIAINkBAQChAgAh3AEAAMoC3AEi3QECAKICACEDAwAApgMAIAUAAIMEACCxAQAAzAIAIBADAAClAgAgBQAAywIAIKgBAADJAgAwqQEAAAMAEKoBAADJAgAwqwEBAAAAAbEBAQCjAgAhtwFAAKQCACG4AUAApAIAIckBAQChAgAhzgEAALMCACDZAQEAoQIAIdwBAADKAtwBIt0BAgCiAgAh8QEAAMcCACDyAQAAyAIAIAMAAAADACABAAAEADACAAAFACAJBAAAxgIAIKgBAADFAgAwqQEAAAcAEKoBAADFAgAwqwEBAKECACG3AUAApAIAIc4BAACzAgAg2QEBAKECACHaAQIAogIAIQEEAACCBAAgCgQAAMYCACCoAQAAxQIAMKkBAAAHABCqAQAAxQIAMKsBAQAAAAG3AUAApAIAIc4BAACzAgAg2QEBAKECACHaAQIAogIAIfABAADEAgAgAwAAAAcAIAEAAAgAMAIAAAkAIAEAAAAHACAOAwAApQIAIKgBAADBAgAwqQEAAAwAEKoBAADBAgAwqwEBAKECACGvAQAAwwLOASK3AUAApAIAIbgBQACkAgAhyQEBAKECACHKAQEAoQIAIcwBAADCAswBIs4BAACzAgAgzwEAAL8CACDQAUAAtAIAIQMDAACmAwAgzwEAAMwCACDQAQAAzAIAIA8DAAClAgAgqAEAAMECADCpAQAADAAQqgEAAMECADCrAQEAAAABrwEAAMMCzgEitwFAAKQCACG4AUAApAIAIckBAQChAgAhygEBAKECACHMAQAAwgLMASLOAQAAswIAIM8BAAC_AgAg0AFAALQCACHvAQAAwAIAIAMAAAAMACABAAANADACAAAOACARCQAApQIAIKgBAAC9AgAwqQEAABAAEKoBAAC9AgAwqwEBAKECACGsAQEAoQIAIa0BAQChAgAhrwEAAL4CrwEisAEBAKECACGxAQEAowIAIbIBAACzAgAgswEAAL8CACC0AQEAowIAIbUBQAC0AgAhtgFAALQCACG3AUAApAIAIbgBQACkAgAhBgkAAKYDACCxAQAAzAIAILMBAADMAgAgtAEAAMwCACC1AQAAzAIAILYBAADMAgAgEQkAAKUCACCoAQAAvQIAMKkBAAAQABCqAQAAvQIAMKsBAQAAAAGsAQEAoQIAIa0BAQChAgAhrwEAAL4CrwEisAEBAKECACGxAQEAowIAIbIBAACzAgAgswEAAL8CACC0AQEAowIAIbUBQAC0AgAhtgFAALQCACG3AUAApAIAIbgBQACkAgAhAwAAABAAIAEAABEAMAIAABIAIA4DAAClAgAgqAEAAKACADCpAQAAFAAQqgEAAKACADCrAQEAoQIAIbEBAQCjAgAhtwFAAKQCACG4AUAApAIAIckBAQChAgAh3gEBAKECACHfAQEAoQIAIeABAgCiAgAh4QECAKICACHiAQEAoQIAIQEAAAAUACAQAwAApQIAIA0AALwCACCoAQAAuQIAMKkBAAAWABCqAQAAuQIAMKsBAQChAgAhrwEAALoC1wEitAEBAKMCACG1AUAAtAIAIbYBQAC0AgAhtwFAAKQCACG4AUAApAIAIckBAQChAgAh1QEBAKECACHXAQIAogIAIdgBAgC7AgAhBgMAAKYDACANAACBBAAgtAEAAMwCACC1AQAAzAIAILYBAADMAgAg2AEAAMwCACARAwAApQIAIA0AALwCACCoAQAAuQIAMKkBAAAWABCqAQAAuQIAMKsBAQAAAAGvAQAAugLXASK0AQEAowIAIbUBQAC0AgAhtgFAALQCACG3AUAApAIAIbgBQACkAgAhyQEBAKECACHVAQEAoQIAIdcBAgCiAgAh2AECALsCACHuAQAAuAIAIAMAAAAWACABAAAXADACAAAYACAKAgIAogIAIQwAALcCACCoAQAAtgIAMKkBAAAaABCqAQAAtgIAMKsBAQChAgAhtwFAAKQCACHMAQEAoQIAIc4BAACzAgAg1AEBAKECACEBDAAAgAQAIAsCAgCiAgAhDAAAtwIAIKgBAAC2AgAwqQEAABoAEKoBAAC2AgAwqwEBAAAAAbcBQACkAgAhzAEBAKECACHOAQAAswIAINQBAQChAgAh7QEAALUCACADAAAAGgAgAQAAGwAwAgAAHAAgAQAAABoAIAsDAAClAgAgBwAAswIAIKgBAACyAgAwqQEAAB8AEKoBAACyAgAwqwEBAKECACG3AUAApAIAIckBAQChAgAh0QEBAKECACHSAQEAoQIAIdMBQAC0AgAhAgMAAKYDACDTAQAAzAIAIAsDAAClAgAgBwAAswIAIKgBAACyAgAwqQEAAB8AEKoBAACyAgAwqwEBAAAAAbcBQACkAgAhyQEBAKECACHRAQEAoQIAIdIBAQChAgAh0wFAALQCACEDAAAAHwAgAQAAIAAwAgAAIQAgAQAAAAMAIAEAAAAMACABAAAAEAAgAQAAABYAIAEAAAAfACABAAAAAQAgFQcAAKwCACAIAACtAgAgCgAArgIAIAsAAK8CACAOAACwAgAgDwAAsQIAIKgBAACqAgAwqQEAACkAEKoBAACqAgAwqwEBAKECACGwAQEAoQIAIbEBAQCjAgAhtwFAAKQCACG4AUAApAIAIeMBAQCjAgAh5AEgAKsCACHlAQEAowIAIeYBAQCjAgAh5wEBAKMCACHoAQEAowIAIekBAgCiAgAhDAcAAPoDACAIAAD7AwAgCgAA_AMAIAsAAP0DACAOAAD-AwAgDwAA_wMAILEBAADMAgAg4wEAAMwCACDlAQAAzAIAIOYBAADMAgAg5wEAAMwCACDoAQAAzAIAIAMAAAApACABAAAqADACAAABACADAAAAKQAgAQAAKgAwAgAAAQAgAwAAACkAIAEAACoAMAIAAAEAIBIHAAD0AwAgCAAA9QMAIAoAAPYDACALAAD3AwAgDgAA-AMAIA8AAPkDACCrAQEAAAABsAEBAAAAAbEBAQAAAAG3AUAAAAABuAFAAAAAAeMBAQAAAAHkASAAAAAB5QEBAAAAAeYBAQAAAAHnAQEAAAAB6AEBAAAAAekBAgAAAAEBFQAALgAgDKsBAQAAAAGwAQEAAAABsQEBAAAAAbcBQAAAAAG4AUAAAAAB4wEBAAAAAeQBIAAAAAHlAQEAAAAB5gEBAAAAAecBAQAAAAHoAQEAAAAB6QECAAAAAQEVAAAwADABFQAAMAAwEgcAAK0DACAIAACuAwAgCgAArwMAIAsAALADACAOAACxAwAgDwAAsgMAIKsBAQDQAgAhsAEBANACACGxAQEA0gIAIbcBQADUAgAhuAFAANQCACHjAQEA0gIAIeQBIACsAwAh5QEBANICACHmAQEA0gIAIecBAQDSAgAh6AEBANICACHpAQIA6AIAIQIAAAABACAVAAAzACAMqwEBANACACGwAQEA0AIAIbEBAQDSAgAhtwFAANQCACG4AUAA1AIAIeMBAQDSAgAh5AEgAKwDACHlAQEA0gIAIeYBAQDSAgAh5wEBANICACHoAQEA0gIAIekBAgDoAgAhAgAAACkAIBUAADUAIAIAAAApACAVAAA1ACADAAAAAQAgHAAALgAgHQAAMwAgAQAAAAEAIAEAAAApACALBgAApwMAICIAAKgDACAjAACrAwAgJAAAqgMAICUAAKkDACCxAQAAzAIAIOMBAADMAgAg5QEAAMwCACDmAQAAzAIAIOcBAADMAgAg6AEAAMwCACAPqAEAAKYCADCpAQAAPAAQqgEAAKYCADCrAQEA8gEAIbABAQDyAQAhsQEBAPQBACG3AUAA-AEAIbgBQAD4AQAh4wEBAPQBACHkASAApwIAIeUBAQD0AQAh5gEBAPQBACHnAQEA9AEAIegBAQD0AQAh6QECAJACACEDAAAAKQAgAQAAOwAwIQAAPAAgAwAAACkAIAEAACoAMAIAAAEAIA4DAAClAgAgqAEAAKACADCpAQAAFAAQqgEAAKACADCrAQEAAAABsQEBAKMCACG3AUAApAIAIbgBQACkAgAhyQEBAAAAAd4BAQChAgAh3wEBAKECACHgAQIAogIAIeEBAgCiAgAh4gEBAKECACEBAAAAPwAgAQAAAD8AIAIDAACmAwAgsQEAAMwCACADAAAAFAAgAQAAQgAwAgAAPwAgAwAAABQAIAEAAEIAMAIAAD8AIAMAAAAUACABAABCADACAAA_ACALAwAApQMAIKsBAQAAAAGxAQEAAAABtwFAAAAAAbgBQAAAAAHJAQEAAAAB3gEBAAAAAd8BAQAAAAHgAQIAAAAB4QECAAAAAeIBAQAAAAEBFQAARgAgCqsBAQAAAAGxAQEAAAABtwFAAAAAAbgBQAAAAAHJAQEAAAAB3gEBAAAAAd8BAQAAAAHgAQIAAAAB4QECAAAAAeIBAQAAAAEBFQAASAAwARUAAEgAMAsDAACkAwAgqwEBANACACGxAQEA0gIAIbcBQADUAgAhuAFAANQCACHJAQEA0AIAId4BAQDQAgAh3wEBANACACHgAQIA6AIAIeEBAgDoAgAh4gEBANACACECAAAAPwAgFQAASwAgCqsBAQDQAgAhsQEBANICACG3AUAA1AIAIbgBQADUAgAhyQEBANACACHeAQEA0AIAId8BAQDQAgAh4AECAOgCACHhAQIA6AIAIeIBAQDQAgAhAgAAABQAIBUAAE0AIAIAAAAUACAVAABNACADAAAAPwAgHAAARgAgHQAASwAgAQAAAD8AIAEAAAAUACAGBgAAnwMAICIAAKADACAjAACjAwAgJAAAogMAICUAAKEDACCxAQAAzAIAIA2oAQAAnwIAMKkBAABUABCqAQAAnwIAMKsBAQDyAQAhsQEBAPQBACG3AUAA-AEAIbgBQAD4AQAhyQEBAPIBACHeAQEA8gEAId8BAQDyAQAh4AECAJACACHhAQIAkAIAIeIBAQDyAQAhAwAAABQAIAEAAFMAMCEAAFQAIAMAAAAUACABAABCADACAAA_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_AQEAAAABwAEBAIECACHGAQEAAAABxwEBAAAAAcgBAQAAAAEKBgAA-gEAICQAAIACACAlAACAAgAguQGAAAAAAcABgAAAAAHBAQEAAAABwgEBAAAAAcMBAQAAAAHEAYAAAAABxQGAAAAAAQoGAAD9AQAgJAAA_wEAICUAAP8BACC5AYAAAAABwAGAAAAAAcEBAQAAAAHCAQEAAAABwwEBAAAAAcQBgAAAAAHFAYAAAAABCwYAAP0BACAkAAD-AQAgJQAA_gEAILkBQAAAAAG6AUAAAAAFuwFAAAAABbwBQAAAAAG9AUAAAAABvgFAAAAAAb8BQAAAAAHAAUAA_AEAIQsGAAD6AQAgJAAA-wEAICUAAPsBACC5AUAAAAABugFAAAAABLsBQAAAAAS8AUAAAAABvQFAAAAAAb4BQAAAAAG_AUAAAAABwAFAAPkBACELBgAA-gEAICQAAPsBACAlAAD7AQAguQFAAAAAAboBQAAAAAS7AUAAAAAEvAFAAAAAAb0BQAAAAAG-AUAAAAABvwFAAAAAAcABQAD5AQAhCLkBAgAAAAG6AQIAAAAEuwECAAAABLwBAgAAAAG9AQIAAAABvgECAAAAAb8BAgAAAAHAAQIA-gEAIQi5AUAAAAABugFAAAAABLsBQAAAAAS8AUAAAAABvQFAAAAAAb4BQAAAAAG_AUAAAAABwAFAAPsBACELBgAA_QEAICQAAP4BACAlAAD-AQAguQFAAAAAAboBQAAAAAW7AUAAAAAFvAFAAAAAAb0BQAAAAAG-AUAAAAABvwFAAAAAAcABQAD8AQAhCLkBAgAAAAG6AQIAAAAFuwECAAAABbwBAgAAAAG9AQIAAAABvgECAAAAAb8BAgAAAAHAAQIA_QEAIQi5AUAAAAABugFAAAAABbsBQAAAAAW8AUAAAAABvQFAAAAAAb4BQAAAAAG_AUAAAAABwAFAAP4BACEHuQGAAAAAAcABgAAAAAHBAQEAAAABwgEBAAAAAcMBAQAAAAHEAYAAAAABxQGAAAAAAQe5AYAAAAABwAGAAAAAAcEBAQAAAAHCAQEAAAABwwEBAAAAAcQBgAAAAAHFAYAAAAABDgYAAP0BACAkAACCAgAgJQAAggIAILkBAQAAAAG6AQEAAAAFuwEBAAAABbwBAQAAAAG9AQEAAAABvgEBAAAAAb8BAQAAAAHAAQEAgQIAIcYBAQAAAAHHAQEAAAAByAEBAAAAAQu5AQEAAAABugEBAAAABbsBAQAAAAW8AQEAAAABvQEBAAAAAb4BAQAAAAG_AQEAAAABwAEBAIICACHGAQEAAAABxwEBAAAAAcgBAQAAAAEHBgAA-gEAICQAAIQCACAlAACEAgAguQEAAACvAQK6AQAAAK8BCLsBAAAArwEIwAEAAIMCrwEiBLkBAAAArwECugEAAACvAQi7AQAAAK8BCMABAACEAq8BIg4GAAD6AQAgJAAAhgIAICUAAIYCACC5AQEAAAABugEBAAAABLsBAQAAAAS8AQEAAAABvQEBAAAAAb4BAQAAAAG_AQEAAAABwAEBAIUCACHGAQEAAAABxwEBAAAAAcgBAQAAAAELuQEBAAAAAboBAQAAAAS7AQEAAAAEvAEBAAAAAb0BAQAAAAG-AQEAAAABvwEBAAAAAcABAQCGAgAhxgEBAAAAAccBAQAAAAHIAQEAAAABDagBAACHAgAwqQEAANgBABCqAQAAhwIAMKsBAQDyAQAhrwEAAIkCzgEitwFAAPgBACG4AUAA-AEAIckBAQDyAQAhygEBAPIBACHMAQAAiALMASLOAQAA9QEAIM8BAAD2AQAg0AFAAPcBACEHBgAA-gEAICQAAI0CACAlAACNAgAguQEAAADMAQK6AQAAAMwBCLsBAAAAzAEIwAEAAIwCzAEiBwYAAPoBACAkAACLAgAgJQAAiwIAILkBAAAAzgECugEAAADOAQi7AQAAAM4BCMABAACKAs4BIgcGAAD6AQAgJAAAiwIAICUAAIsCACC5AQAAAM4BAroBAAAAzgEIuwEAAADOAQjAAQAAigLOASIEuQEAAADOAQK6AQAAAM4BCLsBAAAAzgEIwAEAAIsCzgEiBwYAAPoBACAkAACNAgAgJQAAjQIAILkBAAAAzAECugEAAADMAQi7AQAAAMwBCMABAACMAswBIgS5AQAAAMwBAroBAAAAzAEIuwEAAADMAQjAAQAAjQLMASIKBwAA9QEAIKgBAACOAgAwqQEAAMIBABCqAQAAjgIAMKsBAQDyAQAhtwFAAPgBACHJAQEA8gEAIdEBAQDyAQAh0gEBAPIBACHTAUAA9wEAIQkCAgCQAgAhqAEAAI8CADCpAQAArAEAEKoBAACPAgAwqwEBAPIBACG3AUAA-AEAIcwBAQDyAQAhzgEAAPUBACDUAQEA8gEAIQ0GAAD6AQAgIgAAkgIAICMAAPoBACAkAAD6AQAgJQAA-gEAILkBAgAAAAG6AQIAAAAEuwECAAAABLwBAgAAAAG9AQIAAAABvgECAAAAAb8BAgAAAAHAAQIAkQIAIQ0GAAD6AQAgIgAAkgIAICMAAPoBACAkAAD6AQAgJQAA-gEAILkBAgAAAAG6AQIAAAAEuwECAAAABLwBAgAAAAG9AQIAAAABvgECAAAAAb8BAgAAAAHAAQIAkQIAIQi5AQgAAAABugEIAAAABLsBCAAAAAS8AQgAAAABvQEIAAAAAb4BCAAAAAG_AQgAAAABwAEIAJICACEOqAEAAJMCADCpAQAAlgEAEKoBAACTAgAwqwEBAPIBACGvAQAAlALXASK0AQEA9AEAIbUBQAD3AQAhtgFAAPcBACG3AUAA-AEAIbgBQAD4AQAhyQEBAPIBACHVAQEA8gEAIdcBAgCQAgAh2AECAJUCACEHBgAA-gEAICQAAJkCACAlAACZAgAguQEAAADXAQK6AQAAANcBCLsBAAAA1wEIwAEAAJgC1wEiDQYAAP0BACAiAACXAgAgIwAA_QEAICQAAP0BACAlAAD9AQAguQECAAAAAboBAgAAAAW7AQIAAAAFvAECAAAAAb0BAgAAAAG-AQIAAAABvwECAAAAAcABAgCWAgAhDQYAAP0BACAiAACXAgAgIwAA_QEAICQAAP0BACAlAAD9AQAguQECAAAAAboBAgAAAAW7AQIAAAAFvAECAAAAAb0BAgAAAAG-AQIAAAABvwECAAAAAcABAgCWAgAhCLkBCAAAAAG6AQgAAAAFuwEIAAAABbwBCAAAAAG9AQgAAAABvgEIAAAAAb8BCAAAAAHAAQgAlwIAIQcGAAD6AQAgJAAAmQIAICUAAJkCACC5AQAAANcBAroBAAAA1wEIuwEAAADXAQjAAQAAmALXASIEuQEAAADXAQK6AQAAANcBCLsBAAAA1wEIwAEAAJkC1wEiCKgBAACaAgAwqQEAAIABABCqAQAAmgIAMKsBAQDyAQAhtwFAAPgBACHOAQAA9QEAINkBAQDyAQAh2gECAJACACEMqAEAAJsCADCpAQAAagAQqgEAAJsCADCrAQEA8gEAIbEBAQD0AQAhtwFAAPgBACG4AUAA-AEAIckBAQDyAQAhzgEAAPUBACDZAQEA8gEAIdwBAACcAtwBIt0BAgCQAgAhBwYAAPoBACAkAACeAgAgJQAAngIAILkBAAAA3AECugEAAADcAQi7AQAAANwBCMABAACdAtwBIgcGAAD6AQAgJAAAngIAICUAAJ4CACC5AQAAANwBAroBAAAA3AEIuwEAAADcAQjAAQAAnQLcASIEuQEAAADcAQK6AQAAANwBCLsBAAAA3AEIwAEAAJ4C3AEiDagBAACfAgAwqQEAAFQAEKoBAACfAgAwqwEBAPIBACGxAQEA9AEAIbcBQAD4AQAhuAFAAPgBACHJAQEA8gEAId4BAQDyAQAh3wEBAPIBACHgAQIAkAIAIeEBAgCQAgAh4gEBAPIBACEOAwAApQIAIKgBAACgAgAwqQEAABQAEKoBAACgAgAwqwEBAKECACGxAQEAowIAIbcBQACkAgAhuAFAAKQCACHJAQEAoQIAId4BAQChAgAh3wEBAKECACHgAQIAogIAIeEBAgCiAgAh4gEBAKECACELuQEBAAAAAboBAQAAAAS7AQEAAAAEvAEBAAAAAb0BAQAAAAG-AQEAAAABvwEBAAAAAcABAQCGAgAhxgEBAAAAAccBAQAAAAHIAQEAAAABCLkBAgAAAAG6AQIAAAAEuwECAAAABLwBAgAAAAG9AQIAAAABvgECAAAAAb8BAgAAAAHAAQIA-gEAIQu5AQEAAAABugEBAAAABbsBAQAAAAW8AQEAAAABvQEBAAAAAb4BAQAAAAG_AQEAAAABwAEBAIICACHGAQEAAAABxwEBAAAAAcgBAQAAAAEIuQFAAAAAAboBQAAAAAS7AUAAAAAEvAFAAAAAAb0BQAAAAAG-AUAAAAABvwFAAAAAAcABQAD7AQAhFwcAAKwCACAIAACtAgAgCgAArgIAIAsAAK8CACAOAACwAgAgDwAAsQIAIKgBAACqAgAwqQEAACkAEKoBAACqAgAwqwEBAKECACGwAQEAoQIAIbEBAQCjAgAhtwFAAKQCACG4AUAApAIAIeMBAQCjAgAh5AEgAKsCACHlAQEAowIAIeYBAQCjAgAh5wEBAKMCACHoAQEAowIAIekBAgCiAgAh8wEAACkAIPQBAAApACAPqAEAAKYCADCpAQAAPAAQqgEAAKYCADCrAQEA8gEAIbABAQDyAQAhsQEBAPQBACG3AUAA-AEAIbgBQAD4AQAh4wEBAPQBACHkASAApwIAIeUBAQD0AQAh5gEBAPQBACHnAQEA9AEAIegBAQD0AQAh6QECAJACACEFBgAA-gEAICQAAKkCACAlAACpAgAguQEgAAAAAcABIACoAgAhBQYAAPoBACAkAACpAgAgJQAAqQIAILkBIAAAAAHAASAAqAIAIQK5ASAAAAABwAEgAKkCACEVBwAArAIAIAgAAK0CACAKAACuAgAgCwAArwIAIA4AALACACAPAACxAgAgqAEAAKoCADCpAQAAKQAQqgEAAKoCADCrAQEAoQIAIbABAQChAgAhsQEBAKMCACG3AUAApAIAIbgBQACkAgAh4wEBAKMCACHkASAAqwIAIeUBAQCjAgAh5gEBAKMCACHnAQEAowIAIegBAQCjAgAh6QECAKICACECuQEgAAAAAcABIACpAgAhA-oBAAADACDrAQAAAwAg7AEAAAMAIAPqAQAADAAg6wEAAAwAIOwBAAAMACAD6gEAABAAIOsBAAAQACDsAQAAEAAgEAMAAKUCACCoAQAAoAIAMKkBAAAUABCqAQAAoAIAMKsBAQChAgAhsQEBAKMCACG3AUAApAIAIbgBQACkAgAhyQEBAKECACHeAQEAoQIAId8BAQChAgAh4AECAKICACHhAQIAogIAIeIBAQChAgAh8wEAABQAIPQBAAAUACAD6gEAABYAIOsBAAAWACDsAQAAFgAgA-oBAAAfACDrAQAAHwAg7AEAAB8AIAsDAAClAgAgBwAAswIAIKgBAACyAgAwqQEAAB8AEKoBAACyAgAwqwEBAKECACG3AUAApAIAIckBAQChAgAh0QEBAKECACHSAQEAoQIAIdMBQAC0AgAhB7kBgAAAAAHAAYAAAAABwQEBAAAAAcIBAQAAAAHDAQEAAAABxAGAAAAAAcUBgAAAAAEIuQFAAAAAAboBQAAAAAW7AUAAAAAFvAFAAAAAAb0BQAAAAAG-AUAAAAABvwFAAAAAAcABQAD-AQAhAgICAAAAAdQBAQAAAAEKAgIAogIAIQwAALcCACCoAQAAtgIAMKkBAAAaABCqAQAAtgIAMKsBAQChAgAhtwFAAKQCACHMAQEAoQIAIc4BAACzAgAg1AEBAKECACESAwAApQIAIA0AALwCACCoAQAAuQIAMKkBAAAWABCqAQAAuQIAMKsBAQChAgAhrwEAALoC1wEitAEBAKMCACG1AUAAtAIAIbYBQAC0AgAhtwFAAKQCACG4AUAApAIAIckBAQChAgAh1QEBAKECACHXAQIAogIAIdgBAgC7AgAh8wEAABYAIPQBAAAWACACyQEBAAAAAdUBAQAAAAEQAwAApQIAIA0AALwCACCoAQAAuQIAMKkBAAAWABCqAQAAuQIAMKsBAQChAgAhrwEAALoC1wEitAEBAKMCACG1AUAAtAIAIbYBQAC0AgAhtwFAAKQCACG4AUAApAIAIckBAQChAgAh1QEBAKECACHXAQIAogIAIdgBAgC7AgAhBLkBAAAA1wECugEAAADXAQi7AQAAANcBCMABAACZAtcBIgi5AQIAAAABugECAAAABbsBAgAAAAW8AQIAAAABvQECAAAAAb4BAgAAAAG_AQIAAAABwAECAP0BACED6gEAABoAIOsBAAAaACDsAQAAGgAgEQkAAKUCACCoAQAAvQIAMKkBAAAQABCqAQAAvQIAMKsBAQChAgAhrAEBAKECACGtAQEAoQIAIa8BAAC-Aq8BIrABAQChAgAhsQEBAKMCACGyAQAAswIAILMBAAC_AgAgtAEBAKMCACG1AUAAtAIAIbYBQAC0AgAhtwFAAKQCACG4AUAApAIAIQS5AQAAAK8BAroBAAAArwEIuwEAAACvAQjAAQAAhAKvASIHuQGAAAAAAcABgAAAAAHBAQEAAAABwgEBAAAAAcMBAQAAAAHEAYAAAAABxQGAAAAAAQLJAQEAAAABygEBAAAAAQ4DAAClAgAgqAEAAMECADCpAQAADAAQqgEAAMECADCrAQEAoQIAIa8BAADDAs4BIrcBQACkAgAhuAFAAKQCACHJAQEAoQIAIcoBAQChAgAhzAEAAMICzAEizgEAALMCACDPAQAAvwIAINABQAC0AgAhBLkBAAAAzAECugEAAADMAQi7AQAAAMwBCMABAACNAswBIgS5AQAAAM4BAroBAAAAzgEIuwEAAADOAQjAAQAAiwLOASIC2QEBAAAAAdoBAgAAAAEJBAAAxgIAIKgBAADFAgAwqQEAAAcAEKoBAADFAgAwqwEBAKECACG3AUAApAIAIc4BAACzAgAg2QEBAKECACHaAQIAogIAIRADAAClAgAgBQAAywIAIKgBAADJAgAwqQEAAAMAEKoBAADJAgAwqwEBAKECACGxAQEAowIAIbcBQACkAgAhuAFAAKQCACHJAQEAoQIAIc4BAACzAgAg2QEBAKECACHcAQAAygLcASLdAQIAogIAIfMBAAADACD0AQAAAwAgAskBAQAAAAHZAQEAAAABAskBAQAAAAHdAQIAAAABDgMAAKUCACAFAADLAgAgqAEAAMkCADCpAQAAAwAQqgEAAMkCADCrAQEAoQIAIbEBAQCjAgAhtwFAAKQCACG4AUAApAIAIckBAQChAgAhzgEAALMCACDZAQEAoQIAIdwBAADKAtwBIt0BAgCiAgAhBLkBAAAA3AECugEAAADcAQi7AQAAANwBCMABAACeAtwBIgPqAQAABwAg6wEAAAcAIOwBAAAHACAAAAAAAfgBAQAAAAEB-AEAAACvAQIB-AEBAAAAAQH4AUAAAAABAfgBQAAAAAEFHAAArgQAIB0AALEEACD1AQAArwQAIPYBAACwBAAg-wEAAAEAIAMcAACuBAAg9QEAAK8EACD7AQAAAQAgAAAAAfgBAAAAzAECAfgBAAAAzgECBRwAAKkEACAdAACsBAAg9QEAAKoEACD2AQAAqwQAIPsBAAABACADHAAAqQQAIPUBAACqBAAg-wEAAAEAIAAAAAUcAACkBAAgHQAApwQAIPUBAAClBAAg9gEAAKYEACD7AQAAAQAgAxwAAKQEACD1AQAApQQAIPsBAAABACAAAAAAAAX4AQIAAAAB_gECAAAAAf8BAgAAAAGAAgIAAAABgQICAAAAAQUcAACfBAAgHQAAogQAIPUBAACgBAAg9gEAAKEEACD7AQAAGAAgAxwAAJ8EACD1AQAAoAQAIPsBAAAYACAAAAAAAAH4AQAAANcBAgX4AQIAAAAB_gECAAAAAf8BAgAAAAGAAgIAAAABgQICAAAAAQUcAACZBAAgHQAAnQQAIPUBAACaBAAg9gEAAJwEACD7AQAAAQAgCxwAAPQCADAdAAD5AgAw9QEAAPUCADD2AQAA9gIAMPcBAAD3AgAg-AEAAPgCADD5AQAA-AIAMPoBAAD4AgAw-wEAAPgCADD8AQAA-gIAMP0BAAD7AgAwBQICAAAAAasBAQAAAAG3AUAAAAABzAEBAAAAAc4BgAAAAAECAAAAHAAgHAAA_wIAIAMAAAAcACAcAAD_AgAgHQAA_gIAIAEVAACbBAAwCwICAKICACEMAAC3AgAgqAEAALYCADCpAQAAGgAQqgEAALYCADCrAQEAAAABtwFAAKQCACHMAQEAoQIAIc4BAACzAgAg1AEBAKECACHtAQAAtQIAIAIAAAAcACAVAAD-AgAgAgAAAPwCACAVAAD9AgAgCQICAKICACGoAQAA-wIAMKkBAAD8AgAQqgEAAPsCADCrAQEAoQIAIbcBQACkAgAhzAEBAKECACHOAQAAswIAINQBAQChAgAhCQICAKICACGoAQAA-wIAMKkBAAD8AgAQqgEAAPsCADCrAQEAoQIAIbcBQACkAgAhzAEBAKECACHOAQAAswIAINQBAQChAgAhBQICAOgCACGrAQEA0AIAIbcBQADUAgAhzAEBANACACHOAYAAAAABBQICAOgCACGrAQEA0AIAIbcBQADUAgAhzAEBANACACHOAYAAAAABBQICAAAAAasBAQAAAAG3AUAAAAABzAEBAAAAAc4BgAAAAAEDHAAAmQQAIPUBAACaBAAg-wEAAAEAIAQcAAD0AgAw9QEAAPUCADD3AQAA9wIAIPsBAAD4AgAwAAAAAAAFHAAAlAQAIB0AAJcEACD1AQAAlQQAIPYBAACWBAAg-wEAAAUAIAMcAACUBAAg9QEAAJUEACD7AQAABQAgAAAAAAAB-AEAAADcAQIFHAAAjgQAIB0AAJIEACD1AQAAjwQAIPYBAACRBAAg-wEAAAEAIAscAACRAwAwHQAAlgMAMPUBAACSAwAw9gEAAJMDADD3AQAAlAMAIPgBAACVAwAw-QEAAJUDADD6AQAAlQMAMPsBAACVAwAw_AEAAJcDADD9AQAAmAMAMASrAQEAAAABtwFAAAAAAc4BgAAAAAHaAQIAAAABAgAAAAkAIBwAAJwDACADAAAACQAgHAAAnAMAIB0AAJsDACABFQAAkAQAMAoEAADGAgAgqAEAAMUCADCpAQAABwAQqgEAAMUCADCrAQEAAAABtwFAAKQCACHOAQAAswIAINkBAQChAgAh2gECAKICACHwAQAAxAIAIAIAAAAJACAVAACbAwAgAgAAAJkDACAVAACaAwAgCKgBAACYAwAwqQEAAJkDABCqAQAAmAMAMKsBAQChAgAhtwFAAKQCACHOAQAAswIAINkBAQChAgAh2gECAKICACEIqAEAAJgDADCpAQAAmQMAEKoBAACYAwAwqwEBAKECACG3AUAApAIAIc4BAACzAgAg2QEBAKECACHaAQIAogIAIQSrAQEA0AIAIbcBQADUAgAhzgGAAAAAAdoBAgDoAgAhBKsBAQDQAgAhtwFAANQCACHOAYAAAAAB2gECAOgCACEEqwEBAAAAAbcBQAAAAAHOAYAAAAAB2gECAAAAAQMcAACOBAAg9QEAAI8EACD7AQAAAQAgBBwAAJEDADD1AQAAkgMAMPcBAACUAwAg-wEAAJUDADAAAAAAAAUcAACJBAAgHQAAjAQAIPUBAACKBAAg9gEAAIsEACD7AQAAAQAgAxwAAIkEACD1AQAAigQAIPsBAAABACAMBwAA-gMAIAgAAPsDACAKAAD8AwAgCwAA_QMAIA4AAP4DACAPAAD_AwAgsQEAAMwCACDjAQAAzAIAIOUBAADMAgAg5gEAAMwCACDnAQAAzAIAIOgBAADMAgAgAAAAAAAB-AEgAAAAAQscAADoAwAwHQAA7QMAMPUBAADpAwAw9gEAAOoDADD3AQAA6wMAIPgBAADsAwAw-QEAAOwDADD6AQAA7AMAMPsBAADsAwAw_AEAAO4DADD9AQAA7wMAMAscAADcAwAwHQAA4QMAMPUBAADdAwAw9gEAAN4DADD3AQAA3wMAIPgBAADgAwAw-QEAAOADADD6AQAA4AMAMPsBAADgAwAw_AEAAOIDADD9AQAA4wMAMAscAADQAwAwHQAA1QMAMPUBAADRAwAw9gEAANIDADD3AQAA0wMAIPgBAADUAwAw-QEAANQDADD6AQAA1AMAMPsBAADUAwAw_AEAANYDADD9AQAA1wMAMAccAADLAwAgHQAAzgMAIPUBAADMAwAg9gEAAM0DACD5AQAAFAAg-gEAABQAIPsBAAA_ACALHAAAvwMAMB0AAMQDADD1AQAAwAMAMPYBAADBAwAw9wEAAMIDACD4AQAAwwMAMPkBAADDAwAw-gEAAMMDADD7AQAAwwMAMPwBAADFAwAw_QEAAMYDADALHAAAswMAMB0AALgDADD1AQAAtAMAMPYBAAC1AwAw9wEAALYDACD4AQAAtwMAMPkBAAC3AwAw-gEAALcDADD7AQAAtwMAMPwBAAC5AwAw_QEAALoDADAGB4AAAAABqwEBAAAAAbcBQAAAAAHRAQEAAAAB0gEBAAAAAdMBQAAAAAECAAAAIQAgHAAAvgMAIAMAAAAhACAcAAC-AwAgHQAAvQMAIAEVAACIBAAwCwMAAKUCACAHAACzAgAgqAEAALICADCpAQAAHwAQqgEAALICADCrAQEAAAABtwFAAKQCACHJAQEAoQIAIdEBAQChAgAh0gEBAKECACHTAUAAtAIAIQIAAAAhACAVAAC9AwAgAgAAALsDACAVAAC8AwAgCgcAALMCACCoAQAAugMAMKkBAAC7AwAQqgEAALoDADCrAQEAoQIAIbcBQACkAgAhyQEBAKECACHRAQEAoQIAIdIBAQChAgAh0wFAALQCACEKBwAAswIAIKgBAAC6AwAwqQEAALsDABCqAQAAugMAMKsBAQChAgAhtwFAAKQCACHJAQEAoQIAIdEBAQChAgAh0gEBAKECACHTAUAAtAIAIQYHgAAAAAGrAQEA0AIAIbcBQADUAgAh0QEBANACACHSAQEA0AIAIdMBQADTAgAhBgeAAAAAAasBAQDQAgAhtwFAANQCACHRAQEA0AIAIdIBAQDQAgAh0wFAANMCACEGB4AAAAABqwEBAAAAAbcBQAAAAAHRAQEAAAAB0gEBAAAAAdMBQAAAAAELDQAAgQMAIKsBAQAAAAGvAQAAANcBArQBAQAAAAG1AUAAAAABtgFAAAAAAbcBQAAAAAG4AUAAAAAB1QEBAAAAAdcBAgAAAAHYAQIAAAABAgAAABgAIBwAAMoDACADAAAAGAAgHAAAygMAIB0AAMkDACABFQAAhwQAMBEDAAClAgAgDQAAvAIAIKgBAAC5AgAwqQEAABYAEKoBAAC5AgAwqwEBAAAAAa8BAAC6AtcBIrQBAQCjAgAhtQFAALQCACG2AUAAtAIAIbcBQACkAgAhuAFAAKQCACHJAQEAoQIAIdUBAQChAgAh1wECAKICACHYAQIAuwIAIe4BAAC4AgAgAgAAABgAIBUAAMkDACACAAAAxwMAIBUAAMgDACAOqAEAAMYDADCpAQAAxwMAEKoBAADGAwAwqwEBAKECACGvAQAAugLXASK0AQEAowIAIbUBQAC0AgAhtgFAALQCACG3AUAApAIAIbgBQACkAgAhyQEBAKECACHVAQEAoQIAIdcBAgCiAgAh2AECALsCACEOqAEAAMYDADCpAQAAxwMAEKoBAADGAwAwqwEBAKECACGvAQAAugLXASK0AQEAowIAIbUBQAC0AgAhtgFAALQCACG3AUAApAIAIbgBQACkAgAhyQEBAKECACHVAQEAoQIAIdcBAgCiAgAh2AECALsCACEKqwEBANACACGvAQAA8ALXASK0AQEA0gIAIbUBQADTAgAhtgFAANMCACG3AUAA1AIAIbgBQADUAgAh1QEBANACACHXAQIA6AIAIdgBAgDxAgAhCw0AAPMCACCrAQEA0AIAIa8BAADwAtcBIrQBAQDSAgAhtQFAANMCACG2AUAA0wIAIbcBQADUAgAhuAFAANQCACHVAQEA0AIAIdcBAgDoAgAh2AECAPECACELDQAAgQMAIKsBAQAAAAGvAQAAANcBArQBAQAAAAG1AUAAAAABtgFAAAAAAbcBQAAAAAG4AUAAAAAB1QEBAAAAAdcBAgAAAAHYAQIAAAABCasBAQAAAAGxAQEAAAABtwFAAAAAAbgBQAAAAAHeAQEAAAAB3wEBAAAAAeABAgAAAAHhAQIAAAAB4gEBAAAAAQIAAAA_ACAcAADLAwAgAwAAABQAIBwAAMsDACAdAADPAwAgCwAAABQAIBUAAM8DACCrAQEA0AIAIbEBAQDSAgAhtwFAANQCACG4AUAA1AIAId4BAQDQAgAh3wEBANACACHgAQIA6AIAIeEBAgDoAgAh4gEBANACACEJqwEBANACACGxAQEA0gIAIbcBQADUAgAhuAFAANQCACHeAQEA0AIAId8BAQDQAgAh4AECAOgCACHhAQIA6AIAIeIBAQDQAgAhDKsBAQAAAAGtAQEAAAABrwEAAACvAQKwAQEAAAABsQEBAAAAAbIBgAAAAAGzAYAAAAABtAEBAAAAAbUBQAAAAAG2AUAAAAABtwFAAAAAAbgBQAAAAAECAAAAEgAgHAAA2wMAIAMAAAASACAcAADbAwAgHQAA2gMAIAEVAACGBAAwEQkAAKUCACCoAQAAvQIAMKkBAAAQABCqAQAAvQIAMKsBAQAAAAGsAQEAoQIAIa0BAQChAgAhrwEAAL4CrwEisAEBAKECACGxAQEAowIAIbIBAACzAgAgswEAAL8CACC0AQEAowIAIbUBQAC0AgAhtgFAALQCACG3AUAApAIAIbgBQACkAgAhAgAAABIAIBUAANoDACACAAAA2AMAIBUAANkDACAQqAEAANcDADCpAQAA2AMAEKoBAADXAwAwqwEBAKECACGsAQEAoQIAIa0BAQChAgAhrwEAAL4CrwEisAEBAKECACGxAQEAowIAIbIBAACzAgAgswEAAL8CACC0AQEAowIAIbUBQAC0AgAhtgFAALQCACG3AUAApAIAIbgBQACkAgAhEKgBAADXAwAwqQEAANgDABCqAQAA1wMAMKsBAQChAgAhrAEBAKECACGtAQEAoQIAIa8BAAC-Aq8BIrABAQChAgAhsQEBAKMCACGyAQAAswIAILMBAAC_AgAgtAEBAKMCACG1AUAAtAIAIbYBQAC0AgAhtwFAAKQCACG4AUAApAIAIQyrAQEA0AIAIa0BAQDQAgAhrwEAANECrwEisAEBANACACGxAQEA0gIAIbIBgAAAAAGzAYAAAAABtAEBANICACG1AUAA0wIAIbYBQADTAgAhtwFAANQCACG4AUAA1AIAIQyrAQEA0AIAIa0BAQDQAgAhrwEAANECrwEisAEBANACACGxAQEA0gIAIbIBgAAAAAGzAYAAAAABtAEBANICACG1AUAA0wIAIbYBQADTAgAhtwFAANQCACG4AUAA1AIAIQyrAQEAAAABrQEBAAAAAa8BAAAArwECsAEBAAAAAbEBAQAAAAGyAYAAAAABswGAAAAAAbQBAQAAAAG1AUAAAAABtgFAAAAAAbcBQAAAAAG4AUAAAAABCasBAQAAAAGvAQAAAM4BArcBQAAAAAG4AUAAAAABygEBAAAAAcwBAAAAzAECzgGAAAAAAc8BgAAAAAHQAUAAAAABAgAAAA4AIBwAAOcDACADAAAADgAgHAAA5wMAIB0AAOYDACABFQAAhQQAMA8DAAClAgAgqAEAAMECADCpAQAADAAQqgEAAMECADCrAQEAAAABrwEAAMMCzgEitwFAAKQCACG4AUAApAIAIckBAQChAgAhygEBAKECACHMAQAAwgLMASLOAQAAswIAIM8BAAC_AgAg0AFAALQCACHvAQAAwAIAIAIAAAAOACAVAADmAwAgAgAAAOQDACAVAADlAwAgDagBAADjAwAwqQEAAOQDABCqAQAA4wMAMKsBAQChAgAhrwEAAMMCzgEitwFAAKQCACG4AUAApAIAIckBAQChAgAhygEBAKECACHMAQAAwgLMASLOAQAAswIAIM8BAAC_AgAg0AFAALQCACENqAEAAOMDADCpAQAA5AMAEKoBAADjAwAwqwEBAKECACGvAQAAwwLOASK3AUAApAIAIbgBQACkAgAhyQEBAKECACHKAQEAoQIAIcwBAADCAswBIs4BAACzAgAgzwEAAL8CACDQAUAAtAIAIQmrAQEA0AIAIa8BAADbAs4BIrcBQADUAgAhuAFAANQCACHKAQEA0AIAIcwBAADaAswBIs4BgAAAAAHPAYAAAAAB0AFAANMCACEJqwEBANACACGvAQAA2wLOASK3AUAA1AIAIbgBQADUAgAhygEBANACACHMAQAA2gLMASLOAYAAAAABzwGAAAAAAdABQADTAgAhCasBAQAAAAGvAQAAAM4BArcBQAAAAAG4AUAAAAABygEBAAAAAcwBAAAAzAECzgGAAAAAAc8BgAAAAAHQAUAAAAABCQUAAJ4DACCrAQEAAAABsQEBAAAAAbcBQAAAAAG4AUAAAAABzgGAAAAAAdkBAQAAAAHcAQAAANwBAt0BAgAAAAECAAAABQAgHAAA8wMAIAMAAAAFACAcAADzAwAgHQAA8gMAIAEVAACEBAAwEAMAAKUCACAFAADLAgAgqAEAAMkCADCpAQAAAwAQqgEAAMkCADCrAQEAAAABsQEBAKMCACG3AUAApAIAIbgBQACkAgAhyQEBAKECACHOAQAAswIAINkBAQChAgAh3AEAAMoC3AEi3QECAKICACHxAQAAxwIAIPIBAADIAgAgAgAAAAUAIBUAAPIDACACAAAA8AMAIBUAAPEDACAMqAEAAO8DADCpAQAA8AMAEKoBAADvAwAwqwEBAKECACGxAQEAowIAIbcBQACkAgAhuAFAAKQCACHJAQEAoQIAIc4BAACzAgAg2QEBAKECACHcAQAAygLcASLdAQIAogIAIQyoAQAA7wMAMKkBAADwAwAQqgEAAO8DADCrAQEAoQIAIbEBAQCjAgAhtwFAAKQCACG4AUAApAIAIckBAQChAgAhzgEAALMCACDZAQEAoQIAIdwBAADKAtwBIt0BAgCiAgAhCKsBAQDQAgAhsQEBANICACG3AUAA1AIAIbgBQADUAgAhzgGAAAAAAdkBAQDQAgAh3AEAAI4D3AEi3QECAOgCACEJBQAAkAMAIKsBAQDQAgAhsQEBANICACG3AUAA1AIAIbgBQADUAgAhzgGAAAAAAdkBAQDQAgAh3AEAAI4D3AEi3QECAOgCACEJBQAAngMAIKsBAQAAAAGxAQEAAAABtwFAAAAAAbgBQAAAAAHOAYAAAAAB2QEBAAAAAdwBAAAA3AEC3QECAAAAAQQcAADoAwAw9QEAAOkDADD3AQAA6wMAIPsBAADsAwAwBBwAANwDADD1AQAA3QMAMPcBAADfAwAg-wEAAOADADAEHAAA0AMAMPUBAADRAwAw9wEAANMDACD7AQAA1AMAMAMcAADLAwAg9QEAAMwDACD7AQAAPwAgBBwAAL8DADD1AQAAwAMAMPcBAADCAwAg-wEAAMMDADAEHAAAswMAMPUBAAC0AwAw9wEAALYDACD7AQAAtwMAMAAAAAIDAACmAwAgsQEAAMwCACAAAAYDAACmAwAgDQAAgQQAILQBAADMAgAgtQEAAMwCACC2AQAAzAIAINgBAADMAgAgAAMDAACmAwAgBQAAgwQAILEBAADMAgAgAAirAQEAAAABsQEBAAAAAbcBQAAAAAG4AUAAAAABzgGAAAAAAdkBAQAAAAHcAQAAANwBAt0BAgAAAAEJqwEBAAAAAa8BAAAAzgECtwFAAAAAAbgBQAAAAAHKAQEAAAABzAEAAADMAQLOAYAAAAABzwGAAAAAAdABQAAAAAEMqwEBAAAAAa0BAQAAAAGvAQAAAK8BArABAQAAAAGxAQEAAAABsgGAAAAAAbMBgAAAAAG0AQEAAAABtQFAAAAAAbYBQAAAAAG3AUAAAAABuAFAAAAAAQqrAQEAAAABrwEAAADXAQK0AQEAAAABtQFAAAAAAbYBQAAAAAG3AUAAAAABuAFAAAAAAdUBAQAAAAHXAQIAAAAB2AECAAAAAQYHgAAAAAGrAQEAAAABtwFAAAAAAdEBAQAAAAHSAQEAAAAB0wFAAAAAAREHAAD0AwAgCAAA9QMAIAoAAPYDACAOAAD4AwAgDwAA-QMAIKsBAQAAAAGwAQEAAAABsQEBAAAAAbcBQAAAAAG4AUAAAAAB4wEBAAAAAeQBIAAAAAHlAQEAAAAB5gEBAAAAAecBAQAAAAHoAQEAAAAB6QECAAAAAQIAAAABACAcAACJBAAgAwAAACkAIBwAAIkEACAdAACNBAAgEwAAACkAIAcAAK0DACAIAACuAwAgCgAArwMAIA4AALEDACAPAACyAwAgFQAAjQQAIKsBAQDQAgAhsAEBANACACGxAQEA0gIAIbcBQADUAgAhuAFAANQCACHjAQEA0gIAIeQBIACsAwAh5QEBANICACHmAQEA0gIAIecBAQDSAgAh6AEBANICACHpAQIA6AIAIREHAACtAwAgCAAArgMAIAoAAK8DACAOAACxAwAgDwAAsgMAIKsBAQDQAgAhsAEBANACACGxAQEA0gIAIbcBQADUAgAhuAFAANQCACHjAQEA0gIAIeQBIACsAwAh5QEBANICACHmAQEA0gIAIecBAQDSAgAh6AEBANICACHpAQIA6AIAIREIAAD1AwAgCgAA9gMAIAsAAPcDACAOAAD4AwAgDwAA-QMAIKsBAQAAAAGwAQEAAAABsQEBAAAAAbcBQAAAAAG4AUAAAAAB4wEBAAAAAeQBIAAAAAHlAQEAAAAB5gEBAAAAAecBAQAAAAHoAQEAAAAB6QECAAAAAQIAAAABACAcAACOBAAgBKsBAQAAAAG3AUAAAAABzgGAAAAAAdoBAgAAAAEDAAAAKQAgHAAAjgQAIB0AAJMEACATAAAAKQAgCAAArgMAIAoAAK8DACALAACwAwAgDgAAsQMAIA8AALIDACAVAACTBAAgqwEBANACACGwAQEA0AIAIbEBAQDSAgAhtwFAANQCACG4AUAA1AIAIeMBAQDSAgAh5AEgAKwDACHlAQEA0gIAIeYBAQDSAgAh5wEBANICACHoAQEA0gIAIekBAgDoAgAhEQgAAK4DACAKAACvAwAgCwAAsAMAIA4AALEDACAPAACyAwAgqwEBANACACGwAQEA0AIAIbEBAQDSAgAhtwFAANQCACG4AUAA1AIAIeMBAQDSAgAh5AEgAKwDACHlAQEA0gIAIeYBAQDSAgAh5wEBANICACHoAQEA0gIAIekBAgDoAgAhCgMAAJ0DACCrAQEAAAABsQEBAAAAAbcBQAAAAAG4AUAAAAAByQEBAAAAAc4BgAAAAAHZAQEAAAAB3AEAAADcAQLdAQIAAAABAgAAAAUAIBwAAJQEACADAAAAAwAgHAAAlAQAIB0AAJgEACAMAAAAAwAgAwAAjwMAIBUAAJgEACCrAQEA0AIAIbEBAQDSAgAhtwFAANQCACG4AUAA1AIAIckBAQDQAgAhzgGAAAAAAdkBAQDQAgAh3AEAAI4D3AEi3QECAOgCACEKAwAAjwMAIKsBAQDQAgAhsQEBANICACG3AUAA1AIAIbgBQADUAgAhyQEBANACACHOAYAAAAAB2QEBANACACHcAQAAjgPcASLdAQIA6AIAIREHAAD0AwAgCAAA9QMAIAoAAPYDACALAAD3AwAgDwAA-QMAIKsBAQAAAAGwAQEAAAABsQEBAAAAAbcBQAAAAAG4AUAAAAAB4wEBAAAAAeQBIAAAAAHlAQEAAAAB5gEBAAAAAecBAQAAAAHoAQEAAAAB6QECAAAAAQIAAAABACAcAACZBAAgBQICAAAAAasBAQAAAAG3AUAAAAABzAEBAAAAAc4BgAAAAAEDAAAAKQAgHAAAmQQAIB0AAJ4EACATAAAAKQAgBwAArQMAIAgAAK4DACAKAACvAwAgCwAAsAMAIA8AALIDACAVAACeBAAgqwEBANACACGwAQEA0AIAIbEBAQDSAgAhtwFAANQCACG4AUAA1AIAIeMBAQDSAgAh5AEgAKwDACHlAQEA0gIAIeYBAQDSAgAh5wEBANICACHoAQEA0gIAIekBAgDoAgAhEQcAAK0DACAIAACuAwAgCgAArwMAIAsAALADACAPAACyAwAgqwEBANACACGwAQEA0AIAIbEBAQDSAgAhtwFAANQCACG4AUAA1AIAIeMBAQDSAgAh5AEgAKwDACHlAQEA0gIAIeYBAQDSAgAh5wEBANICACHoAQEA0gIAIekBAgDoAgAhDAMAAIADACCrAQEAAAABrwEAAADXAQK0AQEAAAABtQFAAAAAAbYBQAAAAAG3AUAAAAABuAFAAAAAAckBAQAAAAHVAQEAAAAB1wECAAAAAdgBAgAAAAECAAAAGAAgHAAAnwQAIAMAAAAWACAcAACfBAAgHQAAowQAIA4AAAAWACADAADyAgAgFQAAowQAIKsBAQDQAgAhrwEAAPAC1wEitAEBANICACG1AUAA0wIAIbYBQADTAgAhtwFAANQCACG4AUAA1AIAIckBAQDQAgAh1QEBANACACHXAQIA6AIAIdgBAgDxAgAhDAMAAPICACCrAQEA0AIAIa8BAADwAtcBIrQBAQDSAgAhtQFAANMCACG2AUAA0wIAIbcBQADUAgAhuAFAANQCACHJAQEA0AIAIdUBAQDQAgAh1wECAOgCACHYAQIA8QIAIREHAAD0AwAgCAAA9QMAIAoAAPYDACALAAD3AwAgDgAA-AMAIKsBAQAAAAGwAQEAAAABsQEBAAAAAbcBQAAAAAG4AUAAAAAB4wEBAAAAAeQBIAAAAAHlAQEAAAAB5gEBAAAAAecBAQAAAAHoAQEAAAAB6QECAAAAAQIAAAABACAcAACkBAAgAwAAACkAIBwAAKQEACAdAACoBAAgEwAAACkAIAcAAK0DACAIAACuAwAgCgAArwMAIAsAALADACAOAACxAwAgFQAAqAQAIKsBAQDQAgAhsAEBANACACGxAQEA0gIAIbcBQADUAgAhuAFAANQCACHjAQEA0gIAIeQBIACsAwAh5QEBANICACHmAQEA0gIAIecBAQDSAgAh6AEBANICACHpAQIA6AIAIREHAACtAwAgCAAArgMAIAoAAK8DACALAACwAwAgDgAAsQMAIKsBAQDQAgAhsAEBANACACGxAQEA0gIAIbcBQADUAgAhuAFAANQCACHjAQEA0gIAIeQBIACsAwAh5QEBANICACHmAQEA0gIAIecBAQDSAgAh6AEBANICACHpAQIA6AIAIREHAAD0AwAgCgAA9gMAIAsAAPcDACAOAAD4AwAgDwAA-QMAIKsBAQAAAAGwAQEAAAABsQEBAAAAAbcBQAAAAAG4AUAAAAAB4wEBAAAAAeQBIAAAAAHlAQEAAAAB5gEBAAAAAecBAQAAAAHoAQEAAAAB6QECAAAAAQIAAAABACAcAACpBAAgAwAAACkAIBwAAKkEACAdAACtBAAgEwAAACkAIAcAAK0DACAKAACvAwAgCwAAsAMAIA4AALEDACAPAACyAwAgFQAArQQAIKsBAQDQAgAhsAEBANACACGxAQEA0gIAIbcBQADUAgAhuAFAANQCACHjAQEA0gIAIeQBIACsAwAh5QEBANICACHmAQEA0gIAIecBAQDSAgAh6AEBANICACHpAQIA6AIAIREHAACtAwAgCgAArwMAIAsAALADACAOAACxAwAgDwAAsgMAIKsBAQDQAgAhsAEBANACACGxAQEA0gIAIbcBQADUAgAhuAFAANQCACHjAQEA0gIAIeQBIACsAwAh5QEBANICACHmAQEA0gIAIecBAQDSAgAh6AEBANICACHpAQIA6AIAIREHAAD0AwAgCAAA9QMAIAsAAPcDACAOAAD4AwAgDwAA-QMAIKsBAQAAAAGwAQEAAAABsQEBAAAAAbcBQAAAAAG4AUAAAAAB4wEBAAAAAeQBIAAAAAHlAQEAAAAB5gEBAAAAAecBAQAAAAHoAQEAAAAB6QECAAAAAQIAAAABACAcAACuBAAgAwAAACkAIBwAAK4EACAdAACyBAAgEwAAACkAIAcAAK0DACAIAACuAwAgCwAAsAMAIA4AALEDACAPAACyAwAgFQAAsgQAIKsBAQDQAgAhsAEBANACACGxAQEA0gIAIbcBQADUAgAhuAFAANQCACHjAQEA0gIAIeQBIACsAwAh5QEBANICACHmAQEA0gIAIecBAQDSAgAh6AEBANICACHpAQIA6AIAIREHAACtAwAgCAAArgMAIAsAALADACAOAACxAwAgDwAAsgMAIKsBAQDQAgAhsAEBANACACGxAQEA0gIAIbcBQADUAgAhuAFAANQCACHjAQEA0gIAIeQBIACsAwAh5QEBANICACHmAQEA0gIAIecBAQDSAgAh6AEBANICACHpAQIA6AIAIQcGAAwHBgIIDwUKEwYLFQcOGQgPIgsDAwABBQoDBgAEAQQAAgEFCwABAwABAQkAAQEDAAEDAwABBgAKDR0JAQwACAENHgABAwABBQcjAAgkAAolAA4mAA8nAAAAAAUGABEiABIjABMkABQlABUAAAAAAAUGABEiABIjABMkABQlABUBAwABAQMAAQUGABoiABsjABwkAB0lAB4AAAAAAAUGABoiABsjABwkAB0lAB4BAwABAQMAAQUGACMiACQjACUkACYlACcAAAAAAAUGACMiACQjACUkACYlACcBBAACAQQAAgUGACwiAC0jAC4kAC8lADAAAAAAAAUGACwiAC0jAC4kAC8lADABAwABAQMAAQUGADUiADYjADckADglADkAAAAAAAUGADUiADYjADckADglADkBDAAIAQwACAUGAD4iAD8jAEAkAEElAEIAAAAAAAUGAD4iAD8jAEAkAEElAEIBAwABAQMAAQMGAEckAEglAEkAAAADBgBHJABIJQBJAQMAAQEDAAEDBgBOJABPJQBQAAAAAwYATiQATyUAUAEJAAEBCQABAwYAVSQAViUAVwAAAAMGAFUkAFYlAFcQAgERKAESKwETLAEULQEWLwEXMQ0YMg4ZNAEaNg0bNw8eOAEfOQEgOg0mPRAnPhYoQAcpQQcqQwcrRAcsRQctRwcuSQ0vShcwTAcxTg0yTxgzUAc0UQc1Ug02VRk3Vh84VwI5WAI6WQI7WgI8WwI9XQI-Xw0_YCBAYgJBZA1CZSFDZgJEZwJFaA1GayJHbChIbQNJbgNKbwNLcANMcQNNcwNOdQ1PdilQeANReg1SeypTfANUfQNVfg1WgQErV4IBMViDAQhZhAEIWoUBCFuGAQhchwEIXYkBCF6LAQ1fjAEyYI4BCGGQAQ1ikQEzY5IBCGSTAQhllAENZpcBNGeYATpomQEJaZoBCWqbAQlrnAEJbJ0BCW2fAQluoQENb6IBO3CkAQlxpgENcqcBPHOoAQl0qQEJdaoBDXatAT13rgFDeK8BC3mwAQt6sQELe7IBC3yzAQt9tQELfrcBDX-4AUSAAboBC4EBvAENggG9AUWDAb4BC4QBvwELhQHAAQ2GAcMBRocBxAFKiAHFAQWJAcYBBYoBxwEFiwHIAQWMAckBBY0BywEFjgHNAQ2PAc4BS5AB0AEFkQHSAQ2SAdMBTJMB1AEFlAHVAQWVAdYBDZYB2QFNlwHaAVGYAdsBBpkB3AEGmgHdAQabAd4BBpwB3wEGnQHhAQaeAeMBDZ8B5AFSoAHmAQahAegBDaIB6QFTowHqAQakAesBBqUB7AENpgHvAVSnAfABWA"
@@ -10635,8 +10798,8 @@ var init_prismaNamespace = __esm(() => {
10635
10798
  Decimal2 = runtime18.Decimal;
10636
10799
  getExtensionContext = runtime18.Extensions.getExtensionContext;
10637
10800
  prismaVersion = {
10638
- client: "7.8.0",
10639
- engine: "3c6e192761c0362d496ed980de936e2f3cebcd3a"
10801
+ client: "7.10.0",
10802
+ engine: "0edf323efd1d98336f3f0a68684b56f689b900d3"
10640
10803
  };
10641
10804
  NullTypes2 = {
10642
10805
  DbNull: runtime18.NullTypes.DbNull,
@@ -12990,7 +13153,7 @@ var init_sse_heartbeat = __esm(() => {
12990
13153
  });
12991
13154
 
12992
13155
  // apps/server/src/lib/openrouter-models.ts
12993
- import { existsSync as existsSync8, mkdirSync as mkdirSync5, readFileSync as readFileSync6, writeFileSync as writeFileSync3 } from "fs";
13156
+ import { existsSync as existsSync7, mkdirSync as mkdirSync5, readFileSync as readFileSync7, writeFileSync as writeFileSync3 } from "fs";
12994
13157
  import path20 from "path";
12995
13158
  import { z as z39 } from "zod";
12996
13159
  function getCacheFilePath() {
@@ -12999,10 +13162,10 @@ function getCacheFilePath() {
12999
13162
  function readCache() {
13000
13163
  try {
13001
13164
  const cachePath = getCacheFilePath();
13002
- if (!existsSync8(cachePath)) {
13165
+ if (!existsSync7(cachePath)) {
13003
13166
  return null;
13004
13167
  }
13005
- return modelsCacheSchema.parse(JSON.parse(readFileSync6(cachePath, "utf8")));
13168
+ return modelsCacheSchema.parse(JSON.parse(readFileSync7(cachePath, "utf8")));
13006
13169
  } catch {
13007
13170
  return null;
13008
13171
  }
@@ -13049,14 +13212,14 @@ function summarizeRawModel(raw3) {
13049
13212
  };
13050
13213
  }
13051
13214
  async function fetchModelsFromApi() {
13052
- const response = await fetch(openRouterModelsUrl, {
13215
+ const response = await networkFetch(openRouterModelsUrl, {
13053
13216
  signal: AbortSignal.timeout(fetchTimeoutMs)
13054
13217
  });
13055
13218
  if (!response.ok) {
13056
13219
  throw new Error(`OpenRouter models API returned HTTP ${response.status}.`);
13057
13220
  }
13058
- const payload = await response.json();
13059
- const models = (payload.data ?? []).map(summarizeRawModel).filter((model) => model !== null);
13221
+ const payload = z39.object({ data: z39.array(z39.unknown()) }).parse(await response.json());
13222
+ const models = payload.data.map(summarizeRawModel).filter((model) => model !== null);
13060
13223
  if (models.length === 0) {
13061
13224
  throw new Error("OpenRouter models API returned no models.");
13062
13225
  }
@@ -13117,6 +13280,7 @@ function toCapabilityPricing(pricing) {
13117
13280
  var logger5, openRouterModelsUrl = "https://openrouter.ai/api/v1/models", cacheTtlMs, fetchTimeoutMs = 15000, openRouterModelSummarySchema, modelsCacheSchema;
13118
13281
  var init_openrouter_models = __esm(() => {
13119
13282
  init_src();
13283
+ init_network_fetch();
13120
13284
  logger5 = createLogger("openrouter-models");
13121
13285
  cacheTtlMs = 24 * 60 * 60 * 1000;
13122
13286
  openRouterModelSummarySchema = z39.object({
@@ -13165,7 +13329,7 @@ function createIdleTimeoutFetch({
13165
13329
  }
13166
13330
  const idleTimeoutFetch = async (input, init) => {
13167
13331
  const controller = new AbortController;
13168
- const callerSignal = init?.signal ?? undefined;
13332
+ const callerSignal = init?.signal ?? (input instanceof Request ? input.signal : undefined);
13169
13333
  const forwardCallerAbort = () => controller.abort(callerSignal?.reason);
13170
13334
  if (callerSignal) {
13171
13335
  if (callerSignal.aborted) {
@@ -13189,13 +13353,16 @@ function createIdleTimeoutFetch({
13189
13353
  let response;
13190
13354
  try {
13191
13355
  response = await fetchImpl(input, { ...init, signal: controller.signal });
13356
+ } catch (error) {
13357
+ callerSignal?.removeEventListener("abort", forwardCallerAbort);
13358
+ throw controller.signal.aborted ? controller.signal.reason : error;
13192
13359
  } finally {
13193
13360
  if (headersTimer) {
13194
13361
  clearTimeout(headersTimer);
13195
13362
  }
13196
13363
  }
13197
13364
  const body = response.body;
13198
- if (idleTimeoutMs <= 0 || !body) {
13365
+ if (!body) {
13199
13366
  if (callerSignal) {
13200
13367
  callerSignal.removeEventListener("abort", forwardCallerAbort);
13201
13368
  }
@@ -13211,16 +13378,30 @@ function createIdleTimeoutFetch({
13211
13378
  callerSignal.removeEventListener("abort", forwardCallerAbort);
13212
13379
  }
13213
13380
  };
13381
+ const reader = body.getReader();
13214
13382
  let rearm = () => {};
13215
- const transform = new TransformStream({
13383
+ let onAbort = () => {};
13384
+ const cleanup = () => {
13385
+ stopIdleTimer();
13386
+ controller.signal.removeEventListener("abort", onAbort);
13387
+ };
13388
+ const stream = new ReadableStream({
13216
13389
  start(streamController) {
13390
+ onAbort = () => {
13391
+ cleanup();
13392
+ streamController.error(controller.signal.reason);
13393
+ reader.cancel(controller.signal.reason).catch(() => {});
13394
+ };
13395
+ controller.signal.addEventListener("abort", onAbort, { once: true });
13396
+ if (controller.signal.aborted) {
13397
+ onAbort();
13398
+ return;
13399
+ }
13217
13400
  const arm = () => {
13401
+ if (idleTimeoutMs <= 0)
13402
+ return;
13218
13403
  idleTimer = setTimeout(() => {
13219
13404
  const error = new HttpIdleTimeoutError(`Provider stream timed out: no bytes received for ${idleTimeoutMs}ms`);
13220
- stopIdleTimer();
13221
- try {
13222
- streamController.error(error);
13223
- } catch {}
13224
13405
  abortWithTimeout(error);
13225
13406
  }, idleTimeoutMs);
13226
13407
  };
@@ -13232,15 +13413,30 @@ function createIdleTimeoutFetch({
13232
13413
  arm();
13233
13414
  };
13234
13415
  },
13235
- transform(chunk, streamController) {
13236
- rearm();
13237
- streamController.enqueue(chunk);
13416
+ async pull(streamController) {
13417
+ try {
13418
+ const result = await reader.read();
13419
+ if (controller.signal.aborted)
13420
+ return;
13421
+ if (result.done) {
13422
+ cleanup();
13423
+ streamController.close();
13424
+ } else {
13425
+ rearm();
13426
+ streamController.enqueue(result.value);
13427
+ }
13428
+ } catch (error) {
13429
+ cleanup();
13430
+ streamController.error(error);
13431
+ }
13238
13432
  },
13239
- flush() {
13240
- stopIdleTimer();
13433
+ async cancel(reason) {
13434
+ cleanup();
13435
+ controller.abort(reason);
13436
+ await reader.cancel(reason);
13241
13437
  }
13242
13438
  });
13243
- return new Response(body.pipeThrough(transform), {
13439
+ return new Response(stream, {
13244
13440
  status: response.status,
13245
13441
  statusText: response.statusText,
13246
13442
  headers: response.headers
@@ -13458,9 +13654,7 @@ function resolveOpenAITransportModel({
13458
13654
  needsToolCallDiscipline: true,
13459
13655
  providerOptions: isOpenRouter ? getOpenRouterProviderOptions(configuredModel) : undefined,
13460
13656
  contextWindow: capabilities?.contextLength ?? getModelContextWindow(config6.provider, configuredModel),
13461
- missingCredentialHints: apiKey ? [] : isOpenCodeZen ? ["Set OPENCODE_API_KEY to call OpenCode Zen models."] : isOpenRouter ? ["Set OPENROUTER_API_KEY to call OpenRouter models."] : [
13462
- "Set LIGHTCODE_OPENAI_COMPATIBLE_API_KEY or OPENAI_API_KEY if your OpenAI-compatible endpoint requires authentication."
13463
- ],
13657
+ missingCredentialHints: apiKey ? [] : isOpenCodeZen ? ["Set OPENCODE_API_KEY to call OpenCode Zen models."] : isOpenRouter ? ["Set OPENROUTER_API_KEY to call OpenRouter models."] : [],
13464
13658
  maxCompletionTokens: capabilities?.maxCompletionTokens ?? null,
13465
13659
  supportsPromptCaching: isOpenRouter && isOpenRouterAnthropicFamilyModel(configuredModel),
13466
13660
  pricing: resolveCapabilityPricing(capabilities, isOpenRouter && isOpenRouterAnthropicFamilyModel(configuredModel) ? 0.1 : null),
@@ -13526,9 +13720,10 @@ function createConfigStatus({
13526
13720
  }
13527
13721
  var providerFetch, anthropicModelAliases, opencodeZenDefaultBaseUrl = "https://opencode.ai/zen/v1", openRouterDefaultBaseUrl = "https://openrouter.ai/api/v1";
13528
13722
  var init_provider_registry = __esm(() => {
13723
+ init_network_fetch();
13529
13724
  init_src2();
13530
13725
  init_idle_timeout_fetch();
13531
- providerFetch = createIdleTimeoutFetch(resolveIdleTimeoutsFromEnv());
13726
+ providerFetch = createIdleTimeoutFetch({ ...resolveIdleTimeoutsFromEnv(), fetchImpl: networkFetch });
13532
13727
  anthropicModelAliases = {
13533
13728
  haiku: "claude-haiku-4-5",
13534
13729
  sonnet: "claude-sonnet-4-6",
@@ -13988,13 +14183,11 @@ function formatAvailableSkills(skills) {
13988
14183
  if (skills.length === 0) {
13989
14184
  return "";
13990
14185
  }
13991
- const shown = skills.slice(0, maxListedSkills);
13992
- const lines = shown.map((skill) => `- ${skill.name}${skill.description ? `: ${skill.description}` : ""}`);
13993
- const more = skills.length > shown.length ? `
13994
- \u2026 and ${skills.length - shown.length} more` : "";
14186
+ const shown = skills;
14187
+ const lines = shown.map((skill) => `- ${skill.name}${skill.description ? `: ${skill.description.replace(/\s+/g, " ").slice(0, 300)}` : ""}`);
13995
14188
  return `Available skills (load by name with the skill tool):
13996
14189
  ${lines.join(`
13997
- `)}${more}`;
14190
+ `)}`;
13998
14191
  }
13999
14192
  function buildAvailableSkills(cwd) {
14000
14193
  try {
@@ -14186,7 +14379,7 @@ ${skills}` : "",
14186
14379
  ].join(`
14187
14380
  `);
14188
14381
  }
14189
- var logger7, projectInstructionNames, maxListedEntries = 40, maxListedSkills = 20, maxInstructionChars = 6000, maxNestedInstructionChars = 6000, maxNestedInstructionFileChars = 1600, maxBlockChars = 18000, instructionEpochSchema, instructionEpochStateSchema, gitSummaryCacheTtlMs = 5000, gitSummaryCache;
14382
+ var logger7, projectInstructionNames, maxListedEntries = 40, maxInstructionChars = 6000, maxNestedInstructionChars = 6000, maxNestedInstructionFileChars = 1600, maxBlockChars = 18000, instructionEpochSchema, instructionEpochStateSchema, gitSummaryCacheTtlMs = 5000, gitSummaryCache;
14190
14383
  var init_workspace_context = __esm(() => {
14191
14384
  init_runtime17();
14192
14385
  init_src2();
@@ -16267,7 +16460,7 @@ var init_extension_runtime = __esm(() => {
16267
16460
  });
16268
16461
 
16269
16462
  // apps/server/src/routes/diagnostics-routes.ts
16270
- import { existsSync as existsSync9, readdirSync as readdirSync4 } from "fs";
16463
+ import { existsSync as existsSync8, readdirSync as readdirSync4 } from "fs";
16271
16464
  import path22 from "path";
16272
16465
  import { Hono as Hono3 } from "hono";
16273
16466
  function combineStatuses(statuses) {
@@ -16408,8 +16601,8 @@ function checkWorkspace() {
16408
16601
  return {
16409
16602
  id: "workspace",
16410
16603
  label: "Workspace",
16411
- status: existsSync9(cwd) ? "ok" : "error",
16412
- summary: existsSync9(cwd) ? `Workspace is accessible: ${cwd}` : `Workspace is missing: ${cwd}`,
16604
+ status: existsSync8(cwd) ? "ok" : "error",
16605
+ summary: existsSync8(cwd) ? `Workspace is accessible: ${cwd}` : `Workspace is missing: ${cwd}`,
16413
16606
  details: []
16414
16607
  };
16415
16608
  }
@@ -16549,7 +16742,7 @@ async function buildConnectivityPayload() {
16549
16742
  httpsProxy: Boolean(Bun.env.HTTPS_PROXY ?? Bun.env.https_proxy),
16550
16743
  httpProxy: Boolean(Bun.env.HTTP_PROXY ?? Bun.env.http_proxy),
16551
16744
  noProxy: Boolean(Bun.env.NO_PROXY ?? Bun.env.no_proxy),
16552
- extraCaCerts: Boolean(Bun.env.NODE_EXTRA_CA_CERTS)
16745
+ extraCaCerts: Boolean(Bun.env.NODE_EXTRA_CA_CERTS || Bun.env.LIGHTCODE_CA_CERTS || Bun.env.SSL_CERT_FILE)
16553
16746
  };
16554
16747
  if (!baseUrl) {
16555
16748
  return {
@@ -16566,7 +16759,7 @@ async function buildConnectivityPayload() {
16566
16759
  const target = new URL("models", baseUrl.endsWith("/") ? baseUrl : `${baseUrl}/`);
16567
16760
  const startedAt = performance.now();
16568
16761
  try {
16569
- const response = await fetch(target, {
16762
+ const response = await networkFetch(target, {
16570
16763
  signal: AbortSignal.timeout(connectivityProbeTimeoutMs)
16571
16764
  });
16572
16765
  return {
@@ -16621,6 +16814,7 @@ async function buildLogsTailPayload(requestedLines) {
16621
16814
  }
16622
16815
  var connectivityProbeTimeoutMs = 1e4, maxLogTailLines = 1000, diagnosticsRoutes;
16623
16816
  var init_diagnostics_routes = __esm(() => {
16817
+ init_network_fetch();
16624
16818
  init_src2();
16625
16819
  init_src();
16626
16820
  init_chat_store();
@@ -16709,7 +16903,7 @@ var init_root_routes = __esm(() => {
16709
16903
  });
16710
16904
 
16711
16905
  // apps/server/src/routes/web-routes.ts
16712
- import { lstatSync as lstatSync3, realpathSync as realpathSync2 } from "fs";
16906
+ import { lstatSync as lstatSync3, realpathSync as realpathSync3 } from "fs";
16713
16907
  import { lstat as lstat4, realpath as realpath4 } from "fs/promises";
16714
16908
  import path23 from "path";
16715
16909
  import { fileURLToPath as fileURLToPath3 } from "url";
@@ -16728,7 +16922,7 @@ function resolveWebAssetsRoot() {
16728
16922
  try {
16729
16923
  const metadata = lstatSync3(candidate);
16730
16924
  if (metadata.isDirectory() && !metadata.isSymbolicLink()) {
16731
- return realpathSync2(candidate);
16925
+ return realpathSync3(candidate);
16732
16926
  }
16733
16927
  } catch {}
16734
16928
  }