@kmugalkhod/lightcode 0.16.0 → 0.17.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 +50 -5
- package/assets/web/geist-LICENSE.txt +93 -0
- package/assets/web/geist-latin.woff2 +0 -0
- package/assets/web/index-1g5dqbda.js +149 -0
- package/assets/web/index-jx3m6bxd.css +1 -0
- package/assets/web/index.html +1 -1
- package/cli.js +244 -81
- package/lightcode.cjs +21 -16
- package/package.json +5 -5
- package/server.js +304 -110
- package/assets/web/index-wma2v20c.css +0 -1
- package/assets/web/index-wzb9vzdt.js +0 -149
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
|
|
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: "
|
|
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 {
|
|
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
|
-
|
|
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
|
-
|
|
5353
|
+
const match = /^\uFEFF?---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/.exec(content);
|
|
5354
|
+
if (!match)
|
|
5334
5355
|
return {};
|
|
5335
|
-
|
|
5336
|
-
|
|
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 >
|
|
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
|
|
5378
|
+
for (const entry of entries) {
|
|
5357
5379
|
const entryPath = path11.join(directory, entry);
|
|
5358
|
-
|
|
5359
|
-
|
|
5360
|
-
|
|
5361
|
-
|
|
5362
|
-
|
|
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
|
|
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(
|
|
5377
|
-
skillsCache.
|
|
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(
|
|
5413
|
+
function listSkillsUncached(roots) {
|
|
5384
5414
|
const seen = new Set;
|
|
5385
5415
|
const summaries = [];
|
|
5386
|
-
for (const root of
|
|
5416
|
+
for (const root of roots) {
|
|
5387
5417
|
for (const skillPath of findSkillFiles(root)) {
|
|
5388
|
-
|
|
5389
|
-
|
|
5390
|
-
|
|
5391
|
-
|
|
5392
|
-
|
|
5393
|
-
|
|
5394
|
-
|
|
5395
|
-
|
|
5396
|
-
|
|
5397
|
-
|
|
5398
|
-
|
|
5399
|
-
|
|
5400
|
-
|
|
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,
|
|
5438
|
+
function loadSkill(input, options = {}) {
|
|
5407
5439
|
const parsedInput = skillInputSchema.parse(input);
|
|
5408
5440
|
const normalizedName = normalizeSkillName(parsedInput.name);
|
|
5409
|
-
const skill = listSkills(
|
|
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(
|
|
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
|
|
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 (!
|
|
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.
|
|
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.
|
|
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 ??
|
|
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
|
|
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
|
|
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 (!
|
|
7848
|
+
if (!existsSync5(credentialsPath)) {
|
|
7691
7849
|
return {};
|
|
7692
7850
|
}
|
|
7693
7851
|
try {
|
|
7694
|
-
const parsed = storedCredentialsSchema.safeParse(JSON.parse(
|
|
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 ??
|
|
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 ??
|
|
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
|
|
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 (!
|
|
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 (!
|
|
9668
|
+
if (!existsSync6(manifestPath)) {
|
|
9510
9669
|
continue;
|
|
9511
9670
|
}
|
|
9512
|
-
const manifest = pluginManifestSchema.parse(JSON.parse(
|
|
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.
|
|
10325
|
-
engineVersion: "
|
|
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_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-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.
|
|
10639
|
-
engine: "
|
|
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
|
|
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 (!
|
|
13165
|
+
if (!existsSync7(cachePath)) {
|
|
13003
13166
|
return null;
|
|
13004
13167
|
}
|
|
13005
|
-
return modelsCacheSchema.parse(JSON.parse(
|
|
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
|
|
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 =
|
|
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 (
|
|
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
|
-
|
|
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
|
-
|
|
13236
|
-
|
|
13237
|
-
|
|
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
|
-
|
|
13240
|
-
|
|
13433
|
+
async cancel(reason) {
|
|
13434
|
+
cleanup();
|
|
13435
|
+
controller.abort(reason);
|
|
13436
|
+
await reader.cancel(reason);
|
|
13241
13437
|
}
|
|
13242
13438
|
});
|
|
13243
|
-
return new Response(
|
|
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
|
|
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
|
-
`)}
|
|
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,
|
|
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
|
|
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:
|
|
16412
|
-
summary:
|
|
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
|
|
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
|
|
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
|
|
16925
|
+
return realpathSync3(candidate);
|
|
16732
16926
|
}
|
|
16733
16927
|
} catch {}
|
|
16734
16928
|
}
|