sproutkit-code 0.2.1 → 0.3.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.
Files changed (2) hide show
  1. package/dist/index.js +576 -268
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -413,8 +413,8 @@ var require_utils = __commonJS({
413
413
  Object.defineProperty(target, keys[i], Object.getOwnPropertyDescriptor(source, keys[i]));
414
414
  }
415
415
  };
416
- module2.exports.wrapperSymbol = /* @__PURE__ */ Symbol("wrapper");
417
- module2.exports.implSymbol = /* @__PURE__ */ Symbol("impl");
416
+ module2.exports.wrapperSymbol = Symbol("wrapper");
417
+ module2.exports.implSymbol = Symbol("impl");
418
418
  module2.exports.wrapperForImpl = function(impl) {
419
419
  return impl[module2.exports.wrapperSymbol];
420
420
  };
@@ -607,7 +607,7 @@ var require_url_state_machine = __commonJS({
607
607
  ws: 80,
608
608
  wss: 443
609
609
  };
610
- var failure = /* @__PURE__ */ Symbol("failure");
610
+ var failure = Symbol("failure");
611
611
  function countSymbols(str) {
612
612
  return punycode.ucs2.decode(str).length;
613
613
  }
@@ -5718,8 +5718,8 @@ var require_lib3 = __commonJS({
5718
5718
  var https = _interopDefault(require("https"));
5719
5719
  var zlib = _interopDefault(require("zlib"));
5720
5720
  var Readable = Stream.Readable;
5721
- var BUFFER = /* @__PURE__ */ Symbol("buffer");
5722
- var TYPE = /* @__PURE__ */ Symbol("type");
5721
+ var BUFFER = Symbol("buffer");
5722
+ var TYPE = Symbol("type");
5723
5723
  var Blob2 = class _Blob {
5724
5724
  constructor() {
5725
5725
  this[TYPE] = "";
@@ -5834,7 +5834,7 @@ var require_lib3 = __commonJS({
5834
5834
  convert = require_encoding().convert;
5835
5835
  } catch (e) {
5836
5836
  }
5837
- var INTERNALS = /* @__PURE__ */ Symbol("Body internals");
5837
+ var INTERNALS = Symbol("Body internals");
5838
5838
  var PassThrough = Stream.PassThrough;
5839
5839
  function Body(body) {
5840
5840
  var _this = this;
@@ -6174,7 +6174,7 @@ var require_lib3 = __commonJS({
6174
6174
  }
6175
6175
  return void 0;
6176
6176
  }
6177
- var MAP = /* @__PURE__ */ Symbol("map");
6177
+ var MAP = Symbol("map");
6178
6178
  var Headers2 = class _Headers {
6179
6179
  /**
6180
6180
  * Headers class
@@ -6382,7 +6382,7 @@ var require_lib3 = __commonJS({
6382
6382
  return [k.toLowerCase(), headers[MAP][k].join(", ")];
6383
6383
  });
6384
6384
  }
6385
- var INTERNAL = /* @__PURE__ */ Symbol("internal");
6385
+ var INTERNAL = Symbol("internal");
6386
6386
  function createHeadersIterator(target, kind) {
6387
6387
  const iterator = Object.create(HeadersIteratorPrototype);
6388
6388
  iterator[INTERNAL] = {
@@ -6451,7 +6451,7 @@ var require_lib3 = __commonJS({
6451
6451
  }
6452
6452
  return headers;
6453
6453
  }
6454
- var INTERNALS$1 = /* @__PURE__ */ Symbol("Response internals");
6454
+ var INTERNALS$1 = Symbol("Response internals");
6455
6455
  var STATUS_CODES = http.STATUS_CODES;
6456
6456
  var Response2 = class _Response {
6457
6457
  constructor() {
@@ -6527,7 +6527,7 @@ var require_lib3 = __commonJS({
6527
6527
  enumerable: false,
6528
6528
  configurable: true
6529
6529
  });
6530
- var INTERNALS$2 = /* @__PURE__ */ Symbol("Request internals");
6530
+ var INTERNALS$2 = Symbol("Request internals");
6531
6531
  var URL2 = Url.URL || whatwgUrl.URL;
6532
6532
  var parse_url = Url.parse;
6533
6533
  var format_url = Url.format;
@@ -9344,15 +9344,15 @@ var require_constants = __commonJS({
9344
9344
  "use strict";
9345
9345
  module2.exports = {
9346
9346
  // agent
9347
- CURRENT_ID: /* @__PURE__ */ Symbol("agentkeepalive#currentId"),
9348
- CREATE_ID: /* @__PURE__ */ Symbol("agentkeepalive#createId"),
9349
- INIT_SOCKET: /* @__PURE__ */ Symbol("agentkeepalive#initSocket"),
9350
- CREATE_HTTPS_CONNECTION: /* @__PURE__ */ Symbol("agentkeepalive#createHttpsConnection"),
9347
+ CURRENT_ID: Symbol("agentkeepalive#currentId"),
9348
+ CREATE_ID: Symbol("agentkeepalive#createId"),
9349
+ INIT_SOCKET: Symbol("agentkeepalive#initSocket"),
9350
+ CREATE_HTTPS_CONNECTION: Symbol("agentkeepalive#createHttpsConnection"),
9351
9351
  // socket
9352
- SOCKET_CREATED_TIME: /* @__PURE__ */ Symbol("agentkeepalive#socketCreatedTime"),
9353
- SOCKET_NAME: /* @__PURE__ */ Symbol("agentkeepalive#socketName"),
9354
- SOCKET_REQUEST_COUNT: /* @__PURE__ */ Symbol("agentkeepalive#socketRequestCount"),
9355
- SOCKET_REQUEST_FINISHED_COUNT: /* @__PURE__ */ Symbol("agentkeepalive#socketRequestFinishedCount")
9352
+ SOCKET_CREATED_TIME: Symbol("agentkeepalive#socketCreatedTime"),
9353
+ SOCKET_NAME: Symbol("agentkeepalive#socketName"),
9354
+ SOCKET_REQUEST_COUNT: Symbol("agentkeepalive#socketRequestCount"),
9355
+ SOCKET_REQUEST_FINISHED_COUNT: Symbol("agentkeepalive#socketRequestFinishedCount")
9356
9356
  };
9357
9357
  }
9358
9358
  });
@@ -23596,7 +23596,7 @@ var require_shams = __commonJS({
23596
23596
  return true;
23597
23597
  }
23598
23598
  var obj = {};
23599
- var sym = /* @__PURE__ */ Symbol("test");
23599
+ var sym = Symbol("test");
23600
23600
  var symObj = Object(sym);
23601
23601
  if (typeof sym === "string") {
23602
23602
  return false;
@@ -23655,7 +23655,7 @@ var require_has_symbols = __commonJS({
23655
23655
  if (typeof origSymbol("foo") !== "symbol") {
23656
23656
  return false;
23657
23657
  }
23658
- if (typeof /* @__PURE__ */ Symbol("bar") !== "symbol") {
23658
+ if (typeof Symbol("bar") !== "symbol") {
23659
23659
  return false;
23660
23660
  }
23661
23661
  return hasSymbolSham();
@@ -26744,7 +26744,7 @@ var require_axios = __commonJS({
26744
26744
  });
26745
26745
  return byteStringHeaders;
26746
26746
  }
26747
- var $internals = /* @__PURE__ */ Symbol("internals");
26747
+ var $internals = Symbol("internals");
26748
26748
  function normalizeHeader(header) {
26749
26749
  return header && String(header).trim().toLowerCase();
26750
26750
  }
@@ -27726,7 +27726,7 @@ var require_axios = __commonJS({
27726
27726
  }
27727
27727
  throw new AxiosError("Unsupported protocol " + protocol, AxiosError.ERR_NOT_SUPPORT);
27728
27728
  }
27729
- var kInternals = /* @__PURE__ */ Symbol("internals");
27729
+ var kInternals = Symbol("internals");
27730
27730
  var AxiosTransformStream = class extends stream.Transform {
27731
27731
  constructor(options) {
27732
27732
  options = utils$1.toFlatObject(options, {
@@ -28280,9 +28280,9 @@ var require_axios = __commonJS({
28280
28280
  }
28281
28281
  });
28282
28282
  }
28283
- var kAxiosSocketListener = /* @__PURE__ */ Symbol("axios.http.socketListener");
28284
- var kAxiosCurrentReq = /* @__PURE__ */ Symbol("axios.http.currentReq");
28285
- var kAxiosInstalledTunnel = /* @__PURE__ */ Symbol("axios.http.installedTunnel");
28283
+ var kAxiosSocketListener = Symbol("axios.http.socketListener");
28284
+ var kAxiosCurrentReq = Symbol("axios.http.currentReq");
28285
+ var kAxiosInstalledTunnel = Symbol("axios.http.installedTunnel");
28286
28286
  var tunnelingAgentCache = /* @__PURE__ */ new Map();
28287
28287
  var tunnelingAgentCacheUser = /* @__PURE__ */ new WeakMap();
28288
28288
  function getTunnelingAgent(agentOptions, userHttpsAgent) {
@@ -30342,6 +30342,205 @@ var require_axios = __commonJS({
30342
30342
  }
30343
30343
  });
30344
30344
 
30345
+ // ../desktop/dist/main/lib/llm.js
30346
+ var require_llm = __commonJS({
30347
+ "../desktop/dist/main/lib/llm.js"(exports2) {
30348
+ "use strict";
30349
+ var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
30350
+ if (k2 === void 0) k2 = k;
30351
+ var desc = Object.getOwnPropertyDescriptor(m, k);
30352
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
30353
+ desc = { enumerable: true, get: function() {
30354
+ return m[k];
30355
+ } };
30356
+ }
30357
+ Object.defineProperty(o, k2, desc);
30358
+ }) : (function(o, m, k, k2) {
30359
+ if (k2 === void 0) k2 = k;
30360
+ o[k2] = m[k];
30361
+ }));
30362
+ var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
30363
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
30364
+ }) : function(o, v) {
30365
+ o["default"] = v;
30366
+ });
30367
+ var __importStar = exports2 && exports2.__importStar || /* @__PURE__ */ (function() {
30368
+ var ownKeys = function(o) {
30369
+ ownKeys = Object.getOwnPropertyNames || function(o2) {
30370
+ var ar = [];
30371
+ for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k;
30372
+ return ar;
30373
+ };
30374
+ return ownKeys(o);
30375
+ };
30376
+ return function(mod) {
30377
+ if (mod && mod.__esModule) return mod;
30378
+ var result = {};
30379
+ if (mod != null) {
30380
+ for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
30381
+ }
30382
+ __setModuleDefault(result, mod);
30383
+ return result;
30384
+ };
30385
+ })();
30386
+ Object.defineProperty(exports2, "__esModule", { value: true });
30387
+ exports2.CLAUDE_CODE_MODELS = void 0;
30388
+ exports2.getBackend = getBackend2;
30389
+ exports2.claudeBin = claudeBin2;
30390
+ exports2.getClaudeCodeModel = getClaudeCodeModel2;
30391
+ exports2.visionUnavailable = visionUnavailable;
30392
+ exports2.generateText = generateText;
30393
+ exports2.checkClaudeCodeAuth = checkClaudeCodeAuth2;
30394
+ var child_process_1 = require("child_process");
30395
+ var db_1 = require_db();
30396
+ var runtime_1 = require_runtime();
30397
+ function readSetting(key) {
30398
+ try {
30399
+ const row = (0, db_1.getDb)().get("SELECT value FROM settings WHERE key = ?", [key]);
30400
+ if (!row)
30401
+ return null;
30402
+ return (0, runtime_1.decryptSettingValue)(key, row.value);
30403
+ } catch {
30404
+ return null;
30405
+ }
30406
+ }
30407
+ function getBackend2() {
30408
+ const v = readSetting("ai_backend");
30409
+ return v === "claude_code" ? "claude_code" : "api";
30410
+ }
30411
+ function claudeBin2() {
30412
+ return process.env.SPROUTKIT_CLAUDE_BIN || "claude";
30413
+ }
30414
+ exports2.CLAUDE_CODE_MODELS = [
30415
+ { alias: "opus", label: "Opus \u2014 most capable" },
30416
+ { alias: "sonnet", label: "Sonnet \u2014 balanced (default)" },
30417
+ { alias: "haiku", label: "Haiku \u2014 fastest / cheapest on your plan" },
30418
+ { alias: "fable", label: "Fable \u2014 frontier (needs 30-day data retention)" }
30419
+ ];
30420
+ function getClaudeCodeModel2() {
30421
+ const v = readSetting("claude_code_model");
30422
+ return v && exports2.CLAUDE_CODE_MODELS.some((m) => m.alias === v) ? v : null;
30423
+ }
30424
+ function visionUnavailable(hasImages) {
30425
+ return hasImages && getBackend2() === "claude_code";
30426
+ }
30427
+ async function generateViaApi(args) {
30428
+ if (!args.apiKey) {
30429
+ throw new Error("No Anthropic API key set for the API backend. Add one in Settings, or switch to the Claude subscription backend.");
30430
+ }
30431
+ const { default: Anthropic } = await Promise.resolve().then(() => __importStar(require_sdk()));
30432
+ const anthropic = new Anthropic({ apiKey: args.apiKey });
30433
+ const content = args.images && args.images.length > 0 ? [
30434
+ { type: "text", text: args.prompt },
30435
+ ...args.images.map((img) => ({
30436
+ type: "image",
30437
+ source: {
30438
+ type: "base64",
30439
+ media_type: img.mediaType,
30440
+ data: img.base64
30441
+ }
30442
+ }))
30443
+ ] : args.prompt;
30444
+ const res = await anthropic.messages.create({
30445
+ model: args.model || "claude-sonnet-4-6",
30446
+ max_tokens: args.maxTokens ?? 8192,
30447
+ messages: [{ role: "user", content }]
30448
+ });
30449
+ const textBlock = res.content.find((b) => b.type === "text");
30450
+ return {
30451
+ text: textBlock?.text ?? "",
30452
+ stopReason: res.stop_reason ?? null,
30453
+ backend: "api"
30454
+ };
30455
+ }
30456
+ async function generateViaClaudeCode(args) {
30457
+ if (args.images && args.images.length > 0) {
30458
+ throw new Error("Image input isn't supported on the Claude subscription backend. This step needs an Anthropic API key.");
30459
+ }
30460
+ const cliArgs = ["-p", "--output-format", "json"];
30461
+ const alias = getClaudeCodeModel2();
30462
+ if (alias)
30463
+ cliArgs.push("--model", alias);
30464
+ const bin = claudeBin2();
30465
+ const timeoutMs = args.timeoutMs ?? 18e4;
30466
+ return new Promise((resolve, reject) => {
30467
+ let child;
30468
+ try {
30469
+ child = (0, child_process_1.spawn)(bin, cliArgs, { stdio: ["pipe", "pipe", "pipe"] });
30470
+ } catch (e) {
30471
+ reject(new Error(`Couldn't launch the Claude Code CLI ("${bin}"). Is it installed and on your PATH? (${e.message})`));
30472
+ return;
30473
+ }
30474
+ let stdout = "";
30475
+ let stderr = "";
30476
+ let settled = false;
30477
+ const timer = setTimeout(() => {
30478
+ if (settled)
30479
+ return;
30480
+ settled = true;
30481
+ child.kill("SIGKILL");
30482
+ reject(new Error(`Claude Code timed out after ${Math.round(timeoutMs / 1e3)}s.`));
30483
+ }, timeoutMs);
30484
+ child.stdout.on("data", (d) => stdout += d.toString());
30485
+ child.stderr.on("data", (d) => stderr += d.toString());
30486
+ child.on("error", (e) => {
30487
+ if (settled)
30488
+ return;
30489
+ settled = true;
30490
+ clearTimeout(timer);
30491
+ const msg = e.code === "ENOENT" ? `Claude Code CLI not found ("${bin}"). Install it and run 'claude /login', or switch to the API-key backend.` : `Failed to run Claude Code: ${e.message}`;
30492
+ reject(new Error(msg));
30493
+ });
30494
+ child.on("close", (code) => {
30495
+ if (settled)
30496
+ return;
30497
+ settled = true;
30498
+ clearTimeout(timer);
30499
+ const raw = stdout.trim();
30500
+ if (!raw) {
30501
+ reject(new Error(`Claude Code returned no output (exit ${code}). ${stderr.trim() || "Check that you're logged in: 'claude /login'."}`));
30502
+ return;
30503
+ }
30504
+ let parsed;
30505
+ try {
30506
+ parsed = JSON.parse(raw);
30507
+ } catch {
30508
+ reject(new Error(`Couldn't parse Claude Code output as JSON: ${raw.slice(0, 300)}`));
30509
+ return;
30510
+ }
30511
+ if (parsed.is_error) {
30512
+ reject(new Error(parsed.result || `Claude Code reported an error (${parsed.subtype ?? "unknown"}).`));
30513
+ return;
30514
+ }
30515
+ resolve({
30516
+ text: parsed.result ?? "",
30517
+ stopReason: parsed.stop_reason ?? null,
30518
+ backend: "claude_code"
30519
+ });
30520
+ });
30521
+ child.stdin.write(args.prompt);
30522
+ child.stdin.end();
30523
+ });
30524
+ }
30525
+ async function generateText(args) {
30526
+ return getBackend2() === "claude_code" ? generateViaClaudeCode(args) : generateViaApi(args);
30527
+ }
30528
+ async function checkClaudeCodeAuth2() {
30529
+ try {
30530
+ const res = await generateViaClaudeCode({
30531
+ prompt: "Reply with the single word: ok",
30532
+ timeoutMs: 6e4
30533
+ });
30534
+ if (res.text.toLowerCase().includes("ok"))
30535
+ return { ok: true };
30536
+ return { ok: true };
30537
+ } catch (e) {
30538
+ return { ok: false, reason: e.message };
30539
+ }
30540
+ }
30541
+ }
30542
+ });
30543
+
30345
30544
  // ../desktop/dist/main/lib/models.js
30346
30545
  var require_models = __commonJS({
30347
30546
  "../desktop/dist/main/lib/models.js"(exports2) {
@@ -34426,7 +34625,7 @@ var require_get_context = __commonJS({
34426
34625
  getContext: () => getContext2
34427
34626
  });
34428
34627
  module2.exports = __toCommonJS(get_context_exports);
34429
- var SYMBOL_FOR_REQ_CONTEXT = /* @__PURE__ */ Symbol.for("@vercel/request-context");
34628
+ var SYMBOL_FOR_REQ_CONTEXT = Symbol.for("@vercel/request-context");
34430
34629
  function getContext2() {
34431
34630
  const fromSymbol = globalThis;
34432
34631
  return fromSymbol[SYMBOL_FOR_REQ_CONTEXT]?.get?.() ?? {};
@@ -35154,7 +35353,7 @@ var require_cross_spawn = __commonJS({
35154
35353
  enoent.hookChildProcess(spawned, parsed);
35155
35354
  return spawned;
35156
35355
  }
35157
- function spawnSync(command, args, options) {
35356
+ function spawnSync2(command, args, options) {
35158
35357
  const parsed = parse(command, args, options);
35159
35358
  const result = cp.spawnSync(parsed.command, parsed.args, parsed.options);
35160
35359
  result.error = result.error || enoent.verifyENOENTSync(result.status, parsed);
@@ -35162,7 +35361,7 @@ var require_cross_spawn = __commonJS({
35162
35361
  }
35163
35362
  module2.exports = spawn;
35164
35363
  module2.exports.spawn = spawn;
35165
- module2.exports.sync = spawnSync;
35364
+ module2.exports.sync = spawnSync2;
35166
35365
  module2.exports._parse = parse;
35167
35366
  module2.exports._enoent = enoent;
35168
35367
  }
@@ -37703,7 +37902,7 @@ var require_core3 = __commonJS({
37703
37902
  Object.defineProperty(_, "name", { value: name });
37704
37903
  return _;
37705
37904
  }
37706
- exports2.$brand = /* @__PURE__ */ Symbol("zod_brand");
37905
+ exports2.$brand = Symbol("zod_brand");
37707
37906
  var $ZodAsyncError = class extends Error {
37708
37907
  constructor() {
37709
37908
  super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);
@@ -37846,7 +38045,7 @@ var require_util = __commonJS({
37846
38045
  const stepInt = Number.parseInt(step.toFixed(decCount).replace(".", ""));
37847
38046
  return valInt % stepInt / 10 ** decCount;
37848
38047
  }
37849
- var EVALUATING = /* @__PURE__ */ Symbol("evaluating");
38048
+ var EVALUATING = Symbol("evaluating");
37850
38049
  function defineLazy(object, key, getter) {
37851
38050
  let value = void 0;
37852
38051
  Object.defineProperty(object, key, {
@@ -48619,8 +48818,8 @@ var require_registries = __commonJS({
48619
48818
  Object.defineProperty(exports2, "__esModule", { value: true });
48620
48819
  exports2.globalRegistry = exports2.$ZodRegistry = exports2.$input = exports2.$output = void 0;
48621
48820
  exports2.registry = registry;
48622
- exports2.$output = /* @__PURE__ */ Symbol("ZodOutput");
48623
- exports2.$input = /* @__PURE__ */ Symbol("ZodInput");
48821
+ exports2.$output = Symbol("ZodOutput");
48822
+ exports2.$input = Symbol("ZodInput");
48624
48823
  var $ZodRegistry = class {
48625
48824
  constructor() {
48626
48825
  this._map = /* @__PURE__ */ new WeakMap();
@@ -55384,7 +55583,7 @@ var require_private_symbols = __commonJS({
55384
55583
  "use strict";
55385
55584
  Object.defineProperty(exports2, "__esModule", { value: true });
55386
55585
  exports2.unprotected = void 0;
55387
- exports2.unprotected = /* @__PURE__ */ Symbol();
55586
+ exports2.unprotected = Symbol();
55388
55587
  }
55389
55588
  });
55390
55589
 
@@ -57295,7 +57494,7 @@ var require_remote = __commonJS({
57295
57494
  const VERSION = "v5.10.0";
57296
57495
  USER_AGENT = `${NAME}/${VERSION}`;
57297
57496
  }
57298
- exports2.jwksCache = /* @__PURE__ */ Symbol();
57497
+ exports2.jwksCache = Symbol();
57299
57498
  function isFreshJwksCache(input, cacheMaxAge) {
57300
57499
  if (typeof input !== "object" || input === null) {
57301
57500
  return false;
@@ -58296,71 +58495,71 @@ var require_lib8 = __commonJS({
58296
58495
  var require_symbols = __commonJS({
58297
58496
  "../../node_modules/undici/lib/core/symbols.js"(exports2, module2) {
58298
58497
  module2.exports = {
58299
- kClose: /* @__PURE__ */ Symbol("close"),
58300
- kDestroy: /* @__PURE__ */ Symbol("destroy"),
58301
- kDispatch: /* @__PURE__ */ Symbol("dispatch"),
58302
- kUrl: /* @__PURE__ */ Symbol("url"),
58303
- kWriting: /* @__PURE__ */ Symbol("writing"),
58304
- kResuming: /* @__PURE__ */ Symbol("resuming"),
58305
- kQueue: /* @__PURE__ */ Symbol("queue"),
58306
- kConnect: /* @__PURE__ */ Symbol("connect"),
58307
- kConnecting: /* @__PURE__ */ Symbol("connecting"),
58308
- kKeepAliveDefaultTimeout: /* @__PURE__ */ Symbol("default keep alive timeout"),
58309
- kKeepAliveMaxTimeout: /* @__PURE__ */ Symbol("max keep alive timeout"),
58310
- kKeepAliveTimeoutThreshold: /* @__PURE__ */ Symbol("keep alive timeout threshold"),
58311
- kKeepAliveTimeoutValue: /* @__PURE__ */ Symbol("keep alive timeout"),
58312
- kKeepAlive: /* @__PURE__ */ Symbol("keep alive"),
58313
- kHeadersTimeout: /* @__PURE__ */ Symbol("headers timeout"),
58314
- kBodyTimeout: /* @__PURE__ */ Symbol("body timeout"),
58315
- kServerName: /* @__PURE__ */ Symbol("server name"),
58316
- kLocalAddress: /* @__PURE__ */ Symbol("local address"),
58317
- kHost: /* @__PURE__ */ Symbol("host"),
58318
- kNoRef: /* @__PURE__ */ Symbol("no ref"),
58319
- kBodyUsed: /* @__PURE__ */ Symbol("used"),
58320
- kBody: /* @__PURE__ */ Symbol("abstracted request body"),
58321
- kRunning: /* @__PURE__ */ Symbol("running"),
58322
- kBlocking: /* @__PURE__ */ Symbol("blocking"),
58323
- kPending: /* @__PURE__ */ Symbol("pending"),
58324
- kSize: /* @__PURE__ */ Symbol("size"),
58325
- kBusy: /* @__PURE__ */ Symbol("busy"),
58326
- kQueued: /* @__PURE__ */ Symbol("queued"),
58327
- kFree: /* @__PURE__ */ Symbol("free"),
58328
- kConnected: /* @__PURE__ */ Symbol("connected"),
58329
- kClosed: /* @__PURE__ */ Symbol("closed"),
58330
- kNeedDrain: /* @__PURE__ */ Symbol("need drain"),
58331
- kReset: /* @__PURE__ */ Symbol("reset"),
58332
- kDestroyed: /* @__PURE__ */ Symbol.for("nodejs.stream.destroyed"),
58333
- kResume: /* @__PURE__ */ Symbol("resume"),
58334
- kOnError: /* @__PURE__ */ Symbol("on error"),
58335
- kMaxHeadersSize: /* @__PURE__ */ Symbol("max headers size"),
58336
- kRunningIdx: /* @__PURE__ */ Symbol("running index"),
58337
- kPendingIdx: /* @__PURE__ */ Symbol("pending index"),
58338
- kError: /* @__PURE__ */ Symbol("error"),
58339
- kClients: /* @__PURE__ */ Symbol("clients"),
58340
- kClient: /* @__PURE__ */ Symbol("client"),
58341
- kParser: /* @__PURE__ */ Symbol("parser"),
58342
- kOnDestroyed: /* @__PURE__ */ Symbol("destroy callbacks"),
58343
- kPipelining: /* @__PURE__ */ Symbol("pipelining"),
58344
- kSocket: /* @__PURE__ */ Symbol("socket"),
58345
- kHostHeader: /* @__PURE__ */ Symbol("host header"),
58346
- kConnector: /* @__PURE__ */ Symbol("connector"),
58347
- kStrictContentLength: /* @__PURE__ */ Symbol("strict content length"),
58348
- kMaxRedirections: /* @__PURE__ */ Symbol("maxRedirections"),
58349
- kMaxRequests: /* @__PURE__ */ Symbol("maxRequestsPerClient"),
58350
- kProxy: /* @__PURE__ */ Symbol("proxy agent options"),
58351
- kCounter: /* @__PURE__ */ Symbol("socket request counter"),
58352
- kInterceptors: /* @__PURE__ */ Symbol("dispatch interceptors"),
58353
- kMaxResponseSize: /* @__PURE__ */ Symbol("max response size"),
58354
- kHTTP2Session: /* @__PURE__ */ Symbol("http2Session"),
58355
- kHTTP2SessionState: /* @__PURE__ */ Symbol("http2Session state"),
58356
- kRetryHandlerDefaultRetry: /* @__PURE__ */ Symbol("retry agent default retry"),
58357
- kConstruct: /* @__PURE__ */ Symbol("constructable"),
58358
- kListeners: /* @__PURE__ */ Symbol("listeners"),
58359
- kHTTPContext: /* @__PURE__ */ Symbol("http context"),
58360
- kMaxConcurrentStreams: /* @__PURE__ */ Symbol("max concurrent streams"),
58361
- kNoProxyAgent: /* @__PURE__ */ Symbol("no proxy agent"),
58362
- kHttpProxyAgent: /* @__PURE__ */ Symbol("http proxy agent"),
58363
- kHttpsProxyAgent: /* @__PURE__ */ Symbol("https proxy agent")
58498
+ kClose: Symbol("close"),
58499
+ kDestroy: Symbol("destroy"),
58500
+ kDispatch: Symbol("dispatch"),
58501
+ kUrl: Symbol("url"),
58502
+ kWriting: Symbol("writing"),
58503
+ kResuming: Symbol("resuming"),
58504
+ kQueue: Symbol("queue"),
58505
+ kConnect: Symbol("connect"),
58506
+ kConnecting: Symbol("connecting"),
58507
+ kKeepAliveDefaultTimeout: Symbol("default keep alive timeout"),
58508
+ kKeepAliveMaxTimeout: Symbol("max keep alive timeout"),
58509
+ kKeepAliveTimeoutThreshold: Symbol("keep alive timeout threshold"),
58510
+ kKeepAliveTimeoutValue: Symbol("keep alive timeout"),
58511
+ kKeepAlive: Symbol("keep alive"),
58512
+ kHeadersTimeout: Symbol("headers timeout"),
58513
+ kBodyTimeout: Symbol("body timeout"),
58514
+ kServerName: Symbol("server name"),
58515
+ kLocalAddress: Symbol("local address"),
58516
+ kHost: Symbol("host"),
58517
+ kNoRef: Symbol("no ref"),
58518
+ kBodyUsed: Symbol("used"),
58519
+ kBody: Symbol("abstracted request body"),
58520
+ kRunning: Symbol("running"),
58521
+ kBlocking: Symbol("blocking"),
58522
+ kPending: Symbol("pending"),
58523
+ kSize: Symbol("size"),
58524
+ kBusy: Symbol("busy"),
58525
+ kQueued: Symbol("queued"),
58526
+ kFree: Symbol("free"),
58527
+ kConnected: Symbol("connected"),
58528
+ kClosed: Symbol("closed"),
58529
+ kNeedDrain: Symbol("need drain"),
58530
+ kReset: Symbol("reset"),
58531
+ kDestroyed: Symbol.for("nodejs.stream.destroyed"),
58532
+ kResume: Symbol("resume"),
58533
+ kOnError: Symbol("on error"),
58534
+ kMaxHeadersSize: Symbol("max headers size"),
58535
+ kRunningIdx: Symbol("running index"),
58536
+ kPendingIdx: Symbol("pending index"),
58537
+ kError: Symbol("error"),
58538
+ kClients: Symbol("clients"),
58539
+ kClient: Symbol("client"),
58540
+ kParser: Symbol("parser"),
58541
+ kOnDestroyed: Symbol("destroy callbacks"),
58542
+ kPipelining: Symbol("pipelining"),
58543
+ kSocket: Symbol("socket"),
58544
+ kHostHeader: Symbol("host header"),
58545
+ kConnector: Symbol("connector"),
58546
+ kStrictContentLength: Symbol("strict content length"),
58547
+ kMaxRedirections: Symbol("maxRedirections"),
58548
+ kMaxRequests: Symbol("maxRequestsPerClient"),
58549
+ kProxy: Symbol("proxy agent options"),
58550
+ kCounter: Symbol("socket request counter"),
58551
+ kInterceptors: Symbol("dispatch interceptors"),
58552
+ kMaxResponseSize: Symbol("max response size"),
58553
+ kHTTP2Session: Symbol("http2Session"),
58554
+ kHTTP2SessionState: Symbol("http2Session state"),
58555
+ kRetryHandlerDefaultRetry: Symbol("retry agent default retry"),
58556
+ kConstruct: Symbol("constructable"),
58557
+ kListeners: Symbol("listeners"),
58558
+ kHTTPContext: Symbol("http context"),
58559
+ kMaxConcurrentStreams: Symbol("max concurrent streams"),
58560
+ kNoProxyAgent: Symbol("no proxy agent"),
58561
+ kHttpProxyAgent: Symbol("http proxy agent"),
58562
+ kHttpsProxyAgent: Symbol("https proxy agent")
58364
58563
  };
58365
58564
  }
58366
58565
  });
@@ -58369,7 +58568,7 @@ var require_symbols = __commonJS({
58369
58568
  var require_errors5 = __commonJS({
58370
58569
  "../../node_modules/undici/lib/core/errors.js"(exports2, module2) {
58371
58570
  "use strict";
58372
- var kUndiciError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR");
58571
+ var kUndiciError = Symbol.for("undici.error.UND_ERR");
58373
58572
  var UndiciError = class extends Error {
58374
58573
  constructor(message) {
58375
58574
  super(message);
@@ -58381,7 +58580,7 @@ var require_errors5 = __commonJS({
58381
58580
  }
58382
58581
  [kUndiciError] = true;
58383
58582
  };
58384
- var kConnectTimeoutError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_CONNECT_TIMEOUT");
58583
+ var kConnectTimeoutError = Symbol.for("undici.error.UND_ERR_CONNECT_TIMEOUT");
58385
58584
  var ConnectTimeoutError = class extends UndiciError {
58386
58585
  constructor(message) {
58387
58586
  super(message);
@@ -58394,7 +58593,7 @@ var require_errors5 = __commonJS({
58394
58593
  }
58395
58594
  [kConnectTimeoutError] = true;
58396
58595
  };
58397
- var kHeadersTimeoutError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_HEADERS_TIMEOUT");
58596
+ var kHeadersTimeoutError = Symbol.for("undici.error.UND_ERR_HEADERS_TIMEOUT");
58398
58597
  var HeadersTimeoutError = class extends UndiciError {
58399
58598
  constructor(message) {
58400
58599
  super(message);
@@ -58407,7 +58606,7 @@ var require_errors5 = __commonJS({
58407
58606
  }
58408
58607
  [kHeadersTimeoutError] = true;
58409
58608
  };
58410
- var kHeadersOverflowError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_HEADERS_OVERFLOW");
58609
+ var kHeadersOverflowError = Symbol.for("undici.error.UND_ERR_HEADERS_OVERFLOW");
58411
58610
  var HeadersOverflowError = class extends UndiciError {
58412
58611
  constructor(message) {
58413
58612
  super(message);
@@ -58420,7 +58619,7 @@ var require_errors5 = __commonJS({
58420
58619
  }
58421
58620
  [kHeadersOverflowError] = true;
58422
58621
  };
58423
- var kBodyTimeoutError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_BODY_TIMEOUT");
58622
+ var kBodyTimeoutError = Symbol.for("undici.error.UND_ERR_BODY_TIMEOUT");
58424
58623
  var BodyTimeoutError = class extends UndiciError {
58425
58624
  constructor(message) {
58426
58625
  super(message);
@@ -58433,7 +58632,7 @@ var require_errors5 = __commonJS({
58433
58632
  }
58434
58633
  [kBodyTimeoutError] = true;
58435
58634
  };
58436
- var kResponseStatusCodeError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_RESPONSE_STATUS_CODE");
58635
+ var kResponseStatusCodeError = Symbol.for("undici.error.UND_ERR_RESPONSE_STATUS_CODE");
58437
58636
  var ResponseStatusCodeError = class extends UndiciError {
58438
58637
  constructor(message, statusCode, headers, body) {
58439
58638
  super(message);
@@ -58450,7 +58649,7 @@ var require_errors5 = __commonJS({
58450
58649
  }
58451
58650
  [kResponseStatusCodeError] = true;
58452
58651
  };
58453
- var kInvalidArgumentError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_INVALID_ARG");
58652
+ var kInvalidArgumentError = Symbol.for("undici.error.UND_ERR_INVALID_ARG");
58454
58653
  var InvalidArgumentError = class extends UndiciError {
58455
58654
  constructor(message) {
58456
58655
  super(message);
@@ -58463,7 +58662,7 @@ var require_errors5 = __commonJS({
58463
58662
  }
58464
58663
  [kInvalidArgumentError] = true;
58465
58664
  };
58466
- var kInvalidReturnValueError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_INVALID_RETURN_VALUE");
58665
+ var kInvalidReturnValueError = Symbol.for("undici.error.UND_ERR_INVALID_RETURN_VALUE");
58467
58666
  var InvalidReturnValueError = class extends UndiciError {
58468
58667
  constructor(message) {
58469
58668
  super(message);
@@ -58476,7 +58675,7 @@ var require_errors5 = __commonJS({
58476
58675
  }
58477
58676
  [kInvalidReturnValueError] = true;
58478
58677
  };
58479
- var kAbortError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_ABORT");
58678
+ var kAbortError = Symbol.for("undici.error.UND_ERR_ABORT");
58480
58679
  var AbortError = class extends UndiciError {
58481
58680
  constructor(message) {
58482
58681
  super(message);
@@ -58489,7 +58688,7 @@ var require_errors5 = __commonJS({
58489
58688
  }
58490
58689
  [kAbortError] = true;
58491
58690
  };
58492
- var kRequestAbortedError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_ABORTED");
58691
+ var kRequestAbortedError = Symbol.for("undici.error.UND_ERR_ABORTED");
58493
58692
  var RequestAbortedError = class extends AbortError {
58494
58693
  constructor(message) {
58495
58694
  super(message);
@@ -58502,7 +58701,7 @@ var require_errors5 = __commonJS({
58502
58701
  }
58503
58702
  [kRequestAbortedError] = true;
58504
58703
  };
58505
- var kInformationalError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_INFO");
58704
+ var kInformationalError = Symbol.for("undici.error.UND_ERR_INFO");
58506
58705
  var InformationalError = class extends UndiciError {
58507
58706
  constructor(message) {
58508
58707
  super(message);
@@ -58515,7 +58714,7 @@ var require_errors5 = __commonJS({
58515
58714
  }
58516
58715
  [kInformationalError] = true;
58517
58716
  };
58518
- var kRequestContentLengthMismatchError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH");
58717
+ var kRequestContentLengthMismatchError = Symbol.for("undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH");
58519
58718
  var RequestContentLengthMismatchError = class extends UndiciError {
58520
58719
  constructor(message) {
58521
58720
  super(message);
@@ -58528,7 +58727,7 @@ var require_errors5 = __commonJS({
58528
58727
  }
58529
58728
  [kRequestContentLengthMismatchError] = true;
58530
58729
  };
58531
- var kResponseContentLengthMismatchError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH");
58730
+ var kResponseContentLengthMismatchError = Symbol.for("undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH");
58532
58731
  var ResponseContentLengthMismatchError = class extends UndiciError {
58533
58732
  constructor(message) {
58534
58733
  super(message);
@@ -58541,7 +58740,7 @@ var require_errors5 = __commonJS({
58541
58740
  }
58542
58741
  [kResponseContentLengthMismatchError] = true;
58543
58742
  };
58544
- var kClientDestroyedError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_DESTROYED");
58743
+ var kClientDestroyedError = Symbol.for("undici.error.UND_ERR_DESTROYED");
58545
58744
  var ClientDestroyedError = class extends UndiciError {
58546
58745
  constructor(message) {
58547
58746
  super(message);
@@ -58554,7 +58753,7 @@ var require_errors5 = __commonJS({
58554
58753
  }
58555
58754
  [kClientDestroyedError] = true;
58556
58755
  };
58557
- var kClientClosedError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_CLOSED");
58756
+ var kClientClosedError = Symbol.for("undici.error.UND_ERR_CLOSED");
58558
58757
  var ClientClosedError = class extends UndiciError {
58559
58758
  constructor(message) {
58560
58759
  super(message);
@@ -58567,7 +58766,7 @@ var require_errors5 = __commonJS({
58567
58766
  }
58568
58767
  [kClientClosedError] = true;
58569
58768
  };
58570
- var kSocketError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_SOCKET");
58769
+ var kSocketError = Symbol.for("undici.error.UND_ERR_SOCKET");
58571
58770
  var SocketError = class extends UndiciError {
58572
58771
  constructor(message, socket) {
58573
58772
  super(message);
@@ -58581,7 +58780,7 @@ var require_errors5 = __commonJS({
58581
58780
  }
58582
58781
  [kSocketError] = true;
58583
58782
  };
58584
- var kNotSupportedError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_NOT_SUPPORTED");
58783
+ var kNotSupportedError = Symbol.for("undici.error.UND_ERR_NOT_SUPPORTED");
58585
58784
  var NotSupportedError = class extends UndiciError {
58586
58785
  constructor(message) {
58587
58786
  super(message);
@@ -58594,7 +58793,7 @@ var require_errors5 = __commonJS({
58594
58793
  }
58595
58794
  [kNotSupportedError] = true;
58596
58795
  };
58597
- var kBalancedPoolMissingUpstreamError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_BPL_MISSING_UPSTREAM");
58796
+ var kBalancedPoolMissingUpstreamError = Symbol.for("undici.error.UND_ERR_BPL_MISSING_UPSTREAM");
58598
58797
  var BalancedPoolMissingUpstreamError = class extends UndiciError {
58599
58798
  constructor(message) {
58600
58799
  super(message);
@@ -58607,7 +58806,7 @@ var require_errors5 = __commonJS({
58607
58806
  }
58608
58807
  [kBalancedPoolMissingUpstreamError] = true;
58609
58808
  };
58610
- var kHTTPParserError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_HTTP_PARSER");
58809
+ var kHTTPParserError = Symbol.for("undici.error.UND_ERR_HTTP_PARSER");
58611
58810
  var HTTPParserError = class extends Error {
58612
58811
  constructor(message, code, data) {
58613
58812
  super(message);
@@ -58620,7 +58819,7 @@ var require_errors5 = __commonJS({
58620
58819
  }
58621
58820
  [kHTTPParserError] = true;
58622
58821
  };
58623
- var kResponseExceededMaxSizeError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE");
58822
+ var kResponseExceededMaxSizeError = Symbol.for("undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE");
58624
58823
  var ResponseExceededMaxSizeError = class extends UndiciError {
58625
58824
  constructor(message) {
58626
58825
  super(message);
@@ -58633,7 +58832,7 @@ var require_errors5 = __commonJS({
58633
58832
  }
58634
58833
  [kResponseExceededMaxSizeError] = true;
58635
58834
  };
58636
- var kRequestRetryError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_REQ_RETRY");
58835
+ var kRequestRetryError = Symbol.for("undici.error.UND_ERR_REQ_RETRY");
58637
58836
  var RequestRetryError = class extends UndiciError {
58638
58837
  constructor(message, code, { headers, data }) {
58639
58838
  super(message);
@@ -58649,7 +58848,7 @@ var require_errors5 = __commonJS({
58649
58848
  }
58650
58849
  [kRequestRetryError] = true;
58651
58850
  };
58652
- var kResponseError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_RESPONSE");
58851
+ var kResponseError = Symbol.for("undici.error.UND_ERR_RESPONSE");
58653
58852
  var ResponseError = class extends UndiciError {
58654
58853
  constructor(message, code, { headers, data }) {
58655
58854
  super(message);
@@ -58665,7 +58864,7 @@ var require_errors5 = __commonJS({
58665
58864
  }
58666
58865
  [kResponseError] = true;
58667
58866
  };
58668
- var kSecureProxyConnectionError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_PRX_TLS");
58867
+ var kSecureProxyConnectionError = Symbol.for("undici.error.UND_ERR_PRX_TLS");
58669
58868
  var SecureProxyConnectionError = class extends UndiciError {
58670
58869
  constructor(cause, message, options) {
58671
58870
  super(message, { cause, ...options ?? {} });
@@ -58679,7 +58878,7 @@ var require_errors5 = __commonJS({
58679
58878
  }
58680
58879
  [kSecureProxyConnectionError] = true;
58681
58880
  };
58682
- var kMessageSizeExceededError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED");
58881
+ var kMessageSizeExceededError = Symbol.for("undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED");
58683
58882
  var MessageSizeExceededError = class extends UndiciError {
58684
58883
  constructor(message) {
58685
58884
  super(message);
@@ -59695,7 +59894,7 @@ var require_request = __commonJS({
59695
59894
  var { channels } = require_diagnostics();
59696
59895
  var { headerNameLowerCasedRecord } = require_constants2();
59697
59896
  var invalidPathRegex = /[^\u0021-\u00ff]/;
59698
- var kHandler = /* @__PURE__ */ Symbol("handler");
59897
+ var kHandler = Symbol("handler");
59699
59898
  var Request2 = class {
59700
59899
  constructor(origin, {
59701
59900
  path: path2,
@@ -60068,10 +60267,10 @@ var require_dispatcher_base = __commonJS({
60068
60267
  InvalidArgumentError
60069
60268
  } = require_errors5();
60070
60269
  var { kDestroy, kClose, kClosed, kDestroyed, kDispatch, kInterceptors } = require_symbols();
60071
- var kOnDestroyed = /* @__PURE__ */ Symbol("onDestroyed");
60072
- var kOnClosed = /* @__PURE__ */ Symbol("onClosed");
60073
- var kInterceptedDispatch = /* @__PURE__ */ Symbol("Intercepted Dispatch");
60074
- var kWebSocketOptions = /* @__PURE__ */ Symbol("webSocketOptions");
60270
+ var kOnDestroyed = Symbol("onDestroyed");
60271
+ var kOnClosed = Symbol("onClosed");
60272
+ var kInterceptedDispatch = Symbol("Intercepted Dispatch");
60273
+ var kWebSocketOptions = Symbol("webSocketOptions");
60075
60274
  var DispatcherBase = class extends Dispatcher {
60076
60275
  constructor(opts) {
60077
60276
  super();
@@ -60234,7 +60433,7 @@ var require_timers = __commonJS({
60234
60433
  var RESOLUTION_MS = 1e3;
60235
60434
  var TICK_MS = (RESOLUTION_MS >> 1) - 1;
60236
60435
  var fastNowTimeout;
60237
- var kFastTimer = /* @__PURE__ */ Symbol("kFastTimer");
60436
+ var kFastTimer = Symbol("kFastTimer");
60238
60437
  var fastTimers = [];
60239
60438
  var NOT_IN_LIST = -2;
60240
60439
  var TO_BE_CLEARED = -1;
@@ -61218,7 +61417,7 @@ var require_constants4 = __commonJS({
61218
61417
  var require_global = __commonJS({
61219
61418
  "../../node_modules/undici/lib/web/fetch/global.js"(exports2, module2) {
61220
61419
  "use strict";
61221
- var globalOrigin = /* @__PURE__ */ Symbol.for("undici.globalOrigin.1");
61420
+ var globalOrigin = Symbol.for("undici.globalOrigin.1");
61222
61421
  function getGlobalOrigin() {
61223
61422
  return globalThis[globalOrigin];
61224
61423
  }
@@ -62896,11 +63095,11 @@ var require_symbols2 = __commonJS({
62896
63095
  "../../node_modules/undici/lib/web/fetch/symbols.js"(exports2, module2) {
62897
63096
  "use strict";
62898
63097
  module2.exports = {
62899
- kUrl: /* @__PURE__ */ Symbol("url"),
62900
- kHeaders: /* @__PURE__ */ Symbol("headers"),
62901
- kSignal: /* @__PURE__ */ Symbol("signal"),
62902
- kState: /* @__PURE__ */ Symbol("state"),
62903
- kDispatcher: /* @__PURE__ */ Symbol("dispatcher")
63098
+ kUrl: Symbol("url"),
63099
+ kHeaders: Symbol("headers"),
63100
+ kSignal: Symbol("signal"),
63101
+ kState: Symbol("state"),
63102
+ kDispatcher: Symbol("dispatcher")
62904
63103
  };
62905
63104
  }
62906
63105
  });
@@ -63738,9 +63937,9 @@ var require_client_h1 = __commonJS({
63738
63937
  var FastBuffer = Buffer[Symbol.species];
63739
63938
  var addListener = util.addListener;
63740
63939
  var removeAllListeners = util.removeAllListeners;
63741
- var kIdleSocketValidation = /* @__PURE__ */ Symbol("kIdleSocketValidation");
63742
- var kIdleSocketValidationTimeout = /* @__PURE__ */ Symbol("kIdleSocketValidationTimeout");
63743
- var kSocketUsed = /* @__PURE__ */ Symbol("kSocketUsed");
63940
+ var kIdleSocketValidation = Symbol("kIdleSocketValidation");
63941
+ var kIdleSocketValidationTimeout = Symbol("kIdleSocketValidationTimeout");
63942
+ var kSocketUsed = Symbol("kSocketUsed");
63744
63943
  var extractBody;
63745
63944
  async function lazyllhttp() {
63746
63945
  const llhttpWasmData = process.env.JEST_WORKER_ID ? require_llhttp_wasm() : void 0;
@@ -64828,7 +65027,7 @@ var require_client_h2 = __commonJS({
64828
65027
  kSize,
64829
65028
  kHTTPContext
64830
65029
  } = require_symbols();
64831
- var kOpenStreams = /* @__PURE__ */ Symbol("open streams");
65030
+ var kOpenStreams = Symbol("open streams");
64832
65031
  var extractBody;
64833
65032
  var h2ExperimentalWarned = false;
64834
65033
  var http2;
@@ -65347,7 +65546,7 @@ var require_redirect_handler = __commonJS({
65347
65546
  var { InvalidArgumentError } = require_errors5();
65348
65547
  var EE = require("node:events");
65349
65548
  var redirectableStatusCodes = [300, 301, 302, 303, 307, 308];
65350
- var kBody = /* @__PURE__ */ Symbol("body");
65549
+ var kBody = Symbol("body");
65351
65550
  var BodyAsyncIterable = class {
65352
65551
  constructor(body) {
65353
65552
  this[kBody] = body;
@@ -65580,7 +65779,7 @@ var require_client = __commonJS({
65580
65779
  var connectH1 = require_client_h1();
65581
65780
  var connectH2 = require_client_h2();
65582
65781
  var deprecatedInterceptorWarned = false;
65583
- var kClosedResolve = /* @__PURE__ */ Symbol("kClosedResolve");
65782
+ var kClosedResolve = Symbol("kClosedResolve");
65584
65783
  var noop = () => {
65585
65784
  };
65586
65785
  function getPipelining(client) {
@@ -66080,7 +66279,7 @@ var require_fixed_queue = __commonJS({
66080
66279
  var require_pool_stats = __commonJS({
66081
66280
  "../../node_modules/undici/lib/dispatcher/pool-stats.js"(exports2, module2) {
66082
66281
  var { kFree, kConnected, kPending, kQueued, kRunning, kSize } = require_symbols();
66083
- var kPool = /* @__PURE__ */ Symbol("pool");
66282
+ var kPool = Symbol("pool");
66084
66283
  var PoolStats = class {
66085
66284
  constructor(pool) {
66086
66285
  this[kPool] = pool;
@@ -66116,18 +66315,18 @@ var require_pool_base = __commonJS({
66116
66315
  var FixedQueue = require_fixed_queue();
66117
66316
  var { kConnected, kSize, kRunning, kPending, kQueued, kBusy, kFree, kUrl, kClose, kDestroy, kDispatch } = require_symbols();
66118
66317
  var PoolStats = require_pool_stats();
66119
- var kClients = /* @__PURE__ */ Symbol("clients");
66120
- var kNeedDrain = /* @__PURE__ */ Symbol("needDrain");
66121
- var kQueue = /* @__PURE__ */ Symbol("queue");
66122
- var kClosedResolve = /* @__PURE__ */ Symbol("closed resolve");
66123
- var kOnDrain = /* @__PURE__ */ Symbol("onDrain");
66124
- var kOnConnect = /* @__PURE__ */ Symbol("onConnect");
66125
- var kOnDisconnect = /* @__PURE__ */ Symbol("onDisconnect");
66126
- var kOnConnectionError = /* @__PURE__ */ Symbol("onConnectionError");
66127
- var kGetDispatcher = /* @__PURE__ */ Symbol("get dispatcher");
66128
- var kAddClient = /* @__PURE__ */ Symbol("add client");
66129
- var kRemoveClient = /* @__PURE__ */ Symbol("remove client");
66130
- var kStats = /* @__PURE__ */ Symbol("stats");
66318
+ var kClients = Symbol("clients");
66319
+ var kNeedDrain = Symbol("needDrain");
66320
+ var kQueue = Symbol("queue");
66321
+ var kClosedResolve = Symbol("closed resolve");
66322
+ var kOnDrain = Symbol("onDrain");
66323
+ var kOnConnect = Symbol("onConnect");
66324
+ var kOnDisconnect = Symbol("onDisconnect");
66325
+ var kOnConnectionError = Symbol("onConnectionError");
66326
+ var kGetDispatcher = Symbol("get dispatcher");
66327
+ var kAddClient = Symbol("add client");
66328
+ var kRemoveClient = Symbol("remove client");
66329
+ var kStats = Symbol("stats");
66131
66330
  var PoolBase = class extends DispatcherBase {
66132
66331
  constructor(opts) {
66133
66332
  super(opts);
@@ -66281,9 +66480,9 @@ var require_pool = __commonJS({
66281
66480
  var util = require_util2();
66282
66481
  var { kUrl, kInterceptors } = require_symbols();
66283
66482
  var buildConnector = require_connect();
66284
- var kOptions = /* @__PURE__ */ Symbol("options");
66285
- var kConnections = /* @__PURE__ */ Symbol("connections");
66286
- var kFactory = /* @__PURE__ */ Symbol("factory");
66483
+ var kOptions = Symbol("options");
66484
+ var kConnections = Symbol("connections");
66485
+ var kFactory = Symbol("factory");
66287
66486
  function defaultFactory(origin, opts) {
66288
66487
  return new Client(origin, opts);
66289
66488
  }
@@ -66373,14 +66572,14 @@ var require_balanced_pool = __commonJS({
66373
66572
  var Pool = require_pool();
66374
66573
  var { kUrl, kInterceptors } = require_symbols();
66375
66574
  var { parseOrigin } = require_util2();
66376
- var kFactory = /* @__PURE__ */ Symbol("factory");
66377
- var kOptions = /* @__PURE__ */ Symbol("options");
66378
- var kGreatestCommonDivisor = /* @__PURE__ */ Symbol("kGreatestCommonDivisor");
66379
- var kCurrentWeight = /* @__PURE__ */ Symbol("kCurrentWeight");
66380
- var kIndex = /* @__PURE__ */ Symbol("kIndex");
66381
- var kWeight = /* @__PURE__ */ Symbol("kWeight");
66382
- var kMaxWeightPerServer = /* @__PURE__ */ Symbol("kMaxWeightPerServer");
66383
- var kErrorPenalty = /* @__PURE__ */ Symbol("kErrorPenalty");
66575
+ var kFactory = Symbol("factory");
66576
+ var kOptions = Symbol("options");
66577
+ var kGreatestCommonDivisor = Symbol("kGreatestCommonDivisor");
66578
+ var kCurrentWeight = Symbol("kCurrentWeight");
66579
+ var kIndex = Symbol("kIndex");
66580
+ var kWeight = Symbol("kWeight");
66581
+ var kMaxWeightPerServer = Symbol("kMaxWeightPerServer");
66582
+ var kErrorPenalty = Symbol("kErrorPenalty");
66384
66583
  function getGreatestCommonDivisor(a, b) {
66385
66584
  if (a === 0) return b;
66386
66585
  while (b !== 0) {
@@ -66509,13 +66708,13 @@ var require_agent3 = __commonJS({
66509
66708
  var Client = require_client();
66510
66709
  var util = require_util2();
66511
66710
  var createRedirectInterceptor = require_redirect_interceptor();
66512
- var kOnConnect = /* @__PURE__ */ Symbol("onConnect");
66513
- var kOnDisconnect = /* @__PURE__ */ Symbol("onDisconnect");
66514
- var kOnConnectionError = /* @__PURE__ */ Symbol("onConnectionError");
66515
- var kMaxRedirections = /* @__PURE__ */ Symbol("maxRedirections");
66516
- var kOnDrain = /* @__PURE__ */ Symbol("onDrain");
66517
- var kFactory = /* @__PURE__ */ Symbol("factory");
66518
- var kOptions = /* @__PURE__ */ Symbol("options");
66711
+ var kOnConnect = Symbol("onConnect");
66712
+ var kOnDisconnect = Symbol("onDisconnect");
66713
+ var kOnConnectionError = Symbol("onConnectionError");
66714
+ var kMaxRedirections = Symbol("maxRedirections");
66715
+ var kOnDrain = Symbol("onDrain");
66716
+ var kFactory = Symbol("factory");
66717
+ var kOptions = Symbol("options");
66519
66718
  function defaultFactory(origin, opts) {
66520
66719
  return opts && opts.connections === 1 ? new Client(origin, opts) : new Pool(origin, opts);
66521
66720
  }
@@ -66607,13 +66806,13 @@ var require_proxy_agent = __commonJS({
66607
66806
  var { InvalidArgumentError, RequestAbortedError, SecureProxyConnectionError } = require_errors5();
66608
66807
  var buildConnector = require_connect();
66609
66808
  var Client = require_client();
66610
- var kAgent = /* @__PURE__ */ Symbol("proxy agent");
66611
- var kClient = /* @__PURE__ */ Symbol("proxy client");
66612
- var kProxyHeaders = /* @__PURE__ */ Symbol("proxy headers");
66613
- var kRequestTls = /* @__PURE__ */ Symbol("request tls settings");
66614
- var kProxyTls = /* @__PURE__ */ Symbol("proxy tls settings");
66615
- var kConnectEndpoint = /* @__PURE__ */ Symbol("connect endpoint function");
66616
- var kTunnelProxy = /* @__PURE__ */ Symbol("tunnel proxy");
66809
+ var kAgent = Symbol("proxy agent");
66810
+ var kClient = Symbol("proxy client");
66811
+ var kProxyHeaders = Symbol("proxy headers");
66812
+ var kRequestTls = Symbol("request tls settings");
66813
+ var kProxyTls = Symbol("proxy tls settings");
66814
+ var kConnectEndpoint = Symbol("connect endpoint function");
66815
+ var kTunnelProxy = Symbol("tunnel proxy");
66617
66816
  function defaultProtocolPort(protocol) {
66618
66817
  return protocol === "https:" ? 443 : 80;
66619
66818
  }
@@ -67296,12 +67495,12 @@ var require_readable = __commonJS({
67296
67495
  var { RequestAbortedError, NotSupportedError, InvalidArgumentError, AbortError } = require_errors5();
67297
67496
  var util = require_util2();
67298
67497
  var { ReadableStreamFrom } = require_util2();
67299
- var kConsume = /* @__PURE__ */ Symbol("kConsume");
67300
- var kReading = /* @__PURE__ */ Symbol("kReading");
67301
- var kBody = /* @__PURE__ */ Symbol("kBody");
67302
- var kAbort = /* @__PURE__ */ Symbol("kAbort");
67303
- var kContentType = /* @__PURE__ */ Symbol("kContentType");
67304
- var kContentLength = /* @__PURE__ */ Symbol("kContentLength");
67498
+ var kConsume = Symbol("kConsume");
67499
+ var kReading = Symbol("kReading");
67500
+ var kBody = Symbol("kBody");
67501
+ var kAbort = Symbol("kAbort");
67502
+ var kContentType = Symbol("kContentType");
67503
+ var kContentLength = Symbol("kContentLength");
67305
67504
  var noop = () => {
67306
67505
  };
67307
67506
  var BodyReadable = class extends Readable {
@@ -67832,8 +68031,8 @@ var require_abort_signal = __commonJS({
67832
68031
  "../../node_modules/undici/lib/api/abort-signal.js"(exports2, module2) {
67833
68032
  var { addAbortListener } = require_util2();
67834
68033
  var { RequestAbortedError } = require_errors5();
67835
- var kListener = /* @__PURE__ */ Symbol("kListener");
67836
- var kSignal = /* @__PURE__ */ Symbol("kSignal");
68034
+ var kListener = Symbol("kListener");
68035
+ var kSignal = Symbol("kSignal");
67837
68036
  function abort(self2) {
67838
68037
  if (self2.abort) {
67839
68038
  self2.abort(self2[kSignal]?.reason);
@@ -68069,7 +68268,7 @@ var require_api_pipeline = __commonJS({
68069
68268
  var { AsyncResource } = require("node:async_hooks");
68070
68269
  var { addSignal, removeSignal } = require_abort_signal();
68071
68270
  var assert = require("node:assert");
68072
- var kResume = /* @__PURE__ */ Symbol("resume");
68271
+ var kResume = Symbol("resume");
68073
68272
  var PipelineRequest = class extends Readable {
68074
68273
  constructor() {
68075
68274
  super({ autoDestroy: true });
@@ -68450,7 +68649,7 @@ var require_mock_errors = __commonJS({
68450
68649
  "../../node_modules/undici/lib/mock/mock-errors.js"(exports2, module2) {
68451
68650
  "use strict";
68452
68651
  var { UndiciError } = require_errors5();
68453
- var kMockNotMatchedError = /* @__PURE__ */ Symbol.for("undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED");
68652
+ var kMockNotMatchedError = Symbol.for("undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED");
68454
68653
  var MockNotMatchedError = class _MockNotMatchedError extends UndiciError {
68455
68654
  constructor(message) {
68456
68655
  super(message);
@@ -68475,25 +68674,25 @@ var require_mock_symbols = __commonJS({
68475
68674
  "../../node_modules/undici/lib/mock/mock-symbols.js"(exports2, module2) {
68476
68675
  "use strict";
68477
68676
  module2.exports = {
68478
- kAgent: /* @__PURE__ */ Symbol("agent"),
68479
- kOptions: /* @__PURE__ */ Symbol("options"),
68480
- kFactory: /* @__PURE__ */ Symbol("factory"),
68481
- kDispatches: /* @__PURE__ */ Symbol("dispatches"),
68482
- kDispatchKey: /* @__PURE__ */ Symbol("dispatch key"),
68483
- kDefaultHeaders: /* @__PURE__ */ Symbol("default headers"),
68484
- kDefaultTrailers: /* @__PURE__ */ Symbol("default trailers"),
68485
- kContentLength: /* @__PURE__ */ Symbol("content length"),
68486
- kMockAgent: /* @__PURE__ */ Symbol("mock agent"),
68487
- kMockAgentSet: /* @__PURE__ */ Symbol("mock agent set"),
68488
- kMockAgentGet: /* @__PURE__ */ Symbol("mock agent get"),
68489
- kMockDispatch: /* @__PURE__ */ Symbol("mock dispatch"),
68490
- kClose: /* @__PURE__ */ Symbol("close"),
68491
- kOriginalClose: /* @__PURE__ */ Symbol("original agent close"),
68492
- kOrigin: /* @__PURE__ */ Symbol("origin"),
68493
- kIsMockActive: /* @__PURE__ */ Symbol("is mock active"),
68494
- kNetConnect: /* @__PURE__ */ Symbol("net connect"),
68495
- kGetNetConnect: /* @__PURE__ */ Symbol("get net connect"),
68496
- kConnected: /* @__PURE__ */ Symbol("connected")
68677
+ kAgent: Symbol("agent"),
68678
+ kOptions: Symbol("options"),
68679
+ kFactory: Symbol("factory"),
68680
+ kDispatches: Symbol("dispatches"),
68681
+ kDispatchKey: Symbol("dispatch key"),
68682
+ kDefaultHeaders: Symbol("default headers"),
68683
+ kDefaultTrailers: Symbol("default trailers"),
68684
+ kContentLength: Symbol("content length"),
68685
+ kMockAgent: Symbol("mock agent"),
68686
+ kMockAgentSet: Symbol("mock agent set"),
68687
+ kMockAgentGet: Symbol("mock agent get"),
68688
+ kMockDispatch: Symbol("mock dispatch"),
68689
+ kClose: Symbol("close"),
68690
+ kOriginalClose: Symbol("original agent close"),
68691
+ kOrigin: Symbol("origin"),
68692
+ kIsMockActive: Symbol("is mock active"),
68693
+ kNetConnect: Symbol("net connect"),
68694
+ kGetNetConnect: Symbol("get net connect"),
68695
+ kConnected: Symbol("connected")
68497
68696
  };
68498
68697
  }
68499
68698
  });
@@ -69268,7 +69467,7 @@ ${pendingInterceptorsFormatter.format(pending)}
69268
69467
  var require_global2 = __commonJS({
69269
69468
  "../../node_modules/undici/lib/global.js"(exports2, module2) {
69270
69469
  "use strict";
69271
- var globalDispatcher = /* @__PURE__ */ Symbol.for("undici.globalDispatcher.1");
69470
+ var globalDispatcher = Symbol.for("undici.globalDispatcher.1");
69272
69471
  var { InvalidArgumentError } = require_errors5();
69273
69472
  var Agent = require_agent3();
69274
69473
  if (getGlobalDispatcher() === void 0) {
@@ -69786,8 +69985,8 @@ var require_headers = __commonJS({
69786
69985
  var { webidl } = require_webidl();
69787
69986
  var assert = require("node:assert");
69788
69987
  var util = require("node:util");
69789
- var kHeadersMap = /* @__PURE__ */ Symbol("headers map");
69790
- var kHeadersSortedMap = /* @__PURE__ */ Symbol("headers map sorted");
69988
+ var kHeadersMap = Symbol("headers map");
69989
+ var kHeadersSortedMap = Symbol("headers map sorted");
69791
69990
  function isHTTPWhiteSpaceCharCode(code) {
69792
69991
  return code === 10 || code === 13 || code === 9 || code === 32;
69793
69992
  }
@@ -70688,7 +70887,7 @@ var require_request2 = __commonJS({
70688
70887
  var { kConstruct } = require_symbols();
70689
70888
  var assert = require("node:assert");
70690
70889
  var { getMaxListeners, setMaxListeners, getEventListeners, defaultMaxListeners } = require("node:events");
70691
- var kAbortController = /* @__PURE__ */ Symbol("abortController");
70890
+ var kAbortController = Symbol("abortController");
70692
70891
  var requestFinalizer = new FinalizationRegistry2(({ signal, abort }) => {
70693
70892
  signal.removeEventListener("abort", abort);
70694
70893
  });
@@ -72424,12 +72623,12 @@ var require_symbols3 = __commonJS({
72424
72623
  "../../node_modules/undici/lib/web/fileapi/symbols.js"(exports2, module2) {
72425
72624
  "use strict";
72426
72625
  module2.exports = {
72427
- kState: /* @__PURE__ */ Symbol("FileReader state"),
72428
- kResult: /* @__PURE__ */ Symbol("FileReader result"),
72429
- kError: /* @__PURE__ */ Symbol("FileReader error"),
72430
- kLastProgressEventFired: /* @__PURE__ */ Symbol("FileReader last progress event fired timestamp"),
72431
- kEvents: /* @__PURE__ */ Symbol("FileReader events"),
72432
- kAborted: /* @__PURE__ */ Symbol("FileReader aborted")
72626
+ kState: Symbol("FileReader state"),
72627
+ kResult: Symbol("FileReader result"),
72628
+ kError: Symbol("FileReader error"),
72629
+ kLastProgressEventFired: Symbol("FileReader last progress event fired timestamp"),
72630
+ kEvents: Symbol("FileReader events"),
72631
+ kAborted: Symbol("FileReader aborted")
72433
72632
  };
72434
72633
  }
72435
72634
  });
@@ -72439,7 +72638,7 @@ var require_progressevent = __commonJS({
72439
72638
  "../../node_modules/undici/lib/web/fileapi/progressevent.js"(exports2, module2) {
72440
72639
  "use strict";
72441
72640
  var { webidl } = require_webidl();
72442
- var kState = /* @__PURE__ */ Symbol("ProgressEvent state");
72641
+ var kState = Symbol("ProgressEvent state");
72443
72642
  var ProgressEvent = class _ProgressEvent extends Event {
72444
72643
  constructor(type, eventInitDict = {}) {
72445
72644
  type = webidl.converters.DOMString(type, "ProgressEvent constructor", "type");
@@ -74703,14 +74902,14 @@ var require_symbols5 = __commonJS({
74703
74902
  "../../node_modules/undici/lib/web/websocket/symbols.js"(exports2, module2) {
74704
74903
  "use strict";
74705
74904
  module2.exports = {
74706
- kWebSocketURL: /* @__PURE__ */ Symbol("url"),
74707
- kReadyState: /* @__PURE__ */ Symbol("ready state"),
74708
- kController: /* @__PURE__ */ Symbol("controller"),
74709
- kResponse: /* @__PURE__ */ Symbol("response"),
74710
- kBinaryType: /* @__PURE__ */ Symbol("binary type"),
74711
- kSentClose: /* @__PURE__ */ Symbol("sent close"),
74712
- kReceivedClose: /* @__PURE__ */ Symbol("received close"),
74713
- kByteParser: /* @__PURE__ */ Symbol("byte parser")
74905
+ kWebSocketURL: Symbol("url"),
74906
+ kReadyState: Symbol("ready state"),
74907
+ kController: Symbol("controller"),
74908
+ kResponse: Symbol("response"),
74909
+ kBinaryType: Symbol("binary type"),
74910
+ kSentClose: Symbol("sent close"),
74911
+ kReceivedClose: Symbol("received close"),
74912
+ kByteParser: Symbol("byte parser")
74714
74913
  };
74715
74914
  }
74716
74915
  });
@@ -75158,8 +75357,8 @@ var require_permessage_deflate = __commonJS({
75158
75357
  var { isValidClientWindowBits } = require_util8();
75159
75358
  var { MessageSizeExceededError } = require_errors5();
75160
75359
  var tail = Buffer.from([0, 0, 255, 255]);
75161
- var kBuffer = /* @__PURE__ */ Symbol("kBuffer");
75162
- var kLength = /* @__PURE__ */ Symbol("kLength");
75360
+ var kBuffer = Symbol("kBuffer");
75361
+ var kLength = Symbol("kLength");
75163
75362
  var PerMessageDeflate = class {
75164
75363
  /** @type {import('node:zlib').InflateRaw} */
75165
75364
  #inflate;
@@ -79278,6 +79477,7 @@ var require_builder = __commonJS({
79278
79477
  var sdk_1 = __importDefault(require_sdk());
79279
79478
  var axios_1 = __importDefault(require_axios());
79280
79479
  var runtime_1 = require_runtime();
79480
+ var llm_1 = require_llm();
79281
79481
  var fs2 = __importStar(require("fs"));
79282
79482
  var path2 = __importStar(require("path"));
79283
79483
  var models_1 = require_models();
@@ -79425,6 +79625,10 @@ var require_builder = __commonJS({
79425
79625
  const present = buffers.map((b, i) => ({ b, i })).filter((x) => !!x.b);
79426
79626
  if (present.length <= 2)
79427
79627
  return present.map((x) => x.i);
79628
+ if ((0, llm_1.visionUnavailable)(true)) {
79629
+ onProgress("Photo relevance check needs an API key \u2014 keeping all photos.");
79630
+ return present.map((x) => x.i);
79631
+ }
79428
79632
  try {
79429
79633
  onProgress("Reviewing photos for relevance\u2026");
79430
79634
  const anthropic = new sdk_1.default({ apiKey: anthropicKey });
@@ -79566,7 +79770,6 @@ var require_builder = __commonJS({
79566
79770
  }
79567
79771
  }
79568
79772
  onProgress("Generating site with Claude...");
79569
- const anthropic = new sdk_1.default({ apiKey: anthropicKey });
79570
79773
  const reviewBlock = details.reviews.length ? details.reviews.map((r, i) => `${i + 1}. "${r.text}" \u2014 ${r.author} (${r.rating}\u2605)`).join("\n") : "(no reviews available \u2014 write 3 generic 5\u2605 testimonials in the right voice for this kind of business)";
79571
79774
  const hoursBlock = details.hours.length ? details.hours.join("\n") : "(no hours available \u2014 DO NOT render an empty Opening Hours section with blank rows; either omit the section entirely OR write a single line like 'Please call for opening hours'. Never leave visible empty lines.)";
79572
79775
  const customBlock = customInstructions?.trim() ? `
@@ -79740,25 +79943,25 @@ Return ONLY the complete App.jsx code. No markdown fences, no explanation, no pr
79740
79943
  const finalPrompt = extraSystemNote ? `${extraSystemNote}
79741
79944
 
79742
79945
  ${prompt}` : prompt;
79743
- const res2 = await anthropic.messages.create({
79946
+ const res2 = await (0, llm_1.generateText)({
79947
+ apiKey: anthropicKey,
79948
+ prompt: finalPrompt,
79744
79949
  model: (0, models_1.getPreferredModel)(),
79745
- // The API requires a max_tokens, so we set it to the model's ceiling
79746
- // rather than an arbitrary low cap — truncation was the main build
79747
- // failure. 64000 covers current Claude output limits; the model stops
79748
- // naturally at end_turn long before this for a normal site.
79749
- max_tokens: 64e3,
79750
- messages: [{ role: "user", content: finalPrompt }]
79950
+ // The API requires a max_tokens; set it to the model's ceiling rather
79951
+ // than an arbitrary low cap — truncation was the main build failure.
79952
+ // (Ignored by the claude_code backend, which uses its own limit.)
79953
+ maxTokens: 64e3,
79954
+ // Site generation can be slow; give the subprocess generous headroom.
79955
+ timeoutMs: 3e5
79751
79956
  });
79752
- lastStop = res2.stop_reason ?? null;
79753
- const textBlock = res2.content.find((b) => b.type === "text");
79754
- if (!textBlock) {
79755
- const types = res2.content.map((b) => b.type).join(", ") || "empty";
79756
- throw new Error(`Claude returned no text (stop_reason=${res2.stop_reason}, blocks=[${types}], model=${res2.model})`);
79957
+ lastStop = res2.stopReason;
79958
+ if (!res2.text) {
79959
+ throw new Error(`Claude returned no text (stop_reason=${res2.stopReason ?? "unknown"}, backend=${res2.backend})`);
79757
79960
  }
79758
- if (res2.stop_reason === "max_tokens") {
79961
+ if (res2.stopReason === "max_tokens") {
79759
79962
  onProgress(`\u26A0\uFE0E Claude hit the length limit \u2014 output was truncated.`);
79760
79963
  }
79761
- return textBlock.text.replace(/^```[a-z]*\s*/i, "").replace(/\s*```$/, "").trim();
79964
+ return res2.text.replace(/^```[a-z]*\s*/i, "").replace(/\s*```$/, "").trim();
79762
79965
  }
79763
79966
  let appCode = await generateOnce();
79764
79967
  if (!appCode.includes("export default App")) {
@@ -80168,7 +80371,6 @@ export default defineConfig({ plugins: [react()] });`;
80168
80371
  const { anthropicKey, appJsx, onProgress } = args;
80169
80372
  if (hasBookLink(appJsx))
80170
80373
  return appJsx;
80171
- const anthropic = new sdk_1.default({ apiKey: anthropicKey });
80172
80374
  const prompt = `You are editing a React component file (App.jsx) for a local business website. Your ONE job: add a "Book now" link that points to /book, in two places, without changing anything else.
80173
80375
 
80174
80376
  REQUIREMENTS:
@@ -80184,17 +80386,17 @@ Source (App.jsx):
80184
80386
  \`\`\`jsx
80185
80387
  ${appJsx.slice(0, 4e4)}
80186
80388
  \`\`\``;
80187
- const res = await anthropic.messages.create({
80389
+ const res = await (0, llm_1.generateText)({
80390
+ apiKey: anthropicKey,
80391
+ prompt,
80188
80392
  model: (0, models_1.getPreferredModel)(),
80189
- max_tokens: 8192,
80190
- messages: [{ role: "user", content: prompt }]
80393
+ maxTokens: 8192
80191
80394
  });
80192
- const block = res.content[0];
80193
- if (block.type !== "text") {
80395
+ if (!res.text) {
80194
80396
  onProgress?.("Book link injection: Claude returned no text \u2014 using original.");
80195
80397
  return appJsx;
80196
80398
  }
80197
- const cleaned = block.text.replace(/^```[a-z]*\s*/i, "").replace(/\s*```$/, "").trim();
80399
+ const cleaned = res.text.replace(/^```[a-z]*\s*/i, "").replace(/\s*```$/, "").trim();
80198
80400
  if (!cleaned.includes("export default App")) {
80199
80401
  onProgress?.("Book link injection: output missing export default \u2014 using original.");
80200
80402
  return appJsx;
@@ -80254,7 +80456,6 @@ ${appJsx.slice(0, 4e4)}
80254
80456
  }
80255
80457
  if (!appJsx || appJsx.length < 200)
80256
80458
  return null;
80257
- const anthropic = new sdk_1.default({ apiKey: anthropicKey });
80258
80459
  const prompt = `You will read the source of a React single-page website built for a small business, and extract the human-written content into a strict JSON structure. This JSON will become the seed for a CMS the business owner will edit.
80259
80460
 
80260
80461
  Business context:
@@ -80287,15 +80488,15 @@ Return this exact shape:
80287
80488
  "contact": { "email": string, "hours": [string] }
80288
80489
  }`;
80289
80490
  try {
80290
- const res = await anthropic.messages.create({
80491
+ const res = await (0, llm_1.generateText)({
80492
+ apiKey: anthropicKey,
80493
+ prompt,
80291
80494
  model: (0, models_1.getPreferredModel)(),
80292
- max_tokens: 2048,
80293
- messages: [{ role: "user", content: prompt }]
80495
+ maxTokens: 2048
80294
80496
  });
80295
- const block = res.content[0];
80296
- if (block.type !== "text")
80497
+ if (!res.text)
80297
80498
  return null;
80298
- const cleaned = block.text.replace(/^```(?:json)?\s*/i, "").replace(/\s*```\s*$/, "").trim();
80499
+ const cleaned = res.text.replace(/^```(?:json)?\s*/i, "").replace(/\s*```\s*$/, "").trim();
80299
80500
  const parsed = JSON.parse(cleaned);
80300
80501
  if (!parsed || typeof parsed !== "object")
80301
80502
  return null;
@@ -82063,7 +82264,7 @@ var require_package = __commonJS({
82063
82264
  "package.json"(exports2, module2) {
82064
82265
  module2.exports = {
82065
82266
  name: "sproutkit-code",
82066
- version: "0.2.1",
82267
+ version: "0.3.1",
82067
82268
  description: "Sproutkit in your terminal \u2014 find leads, build sites, run outreach, all via chat.",
82068
82269
  bin: {
82069
82270
  sproutkit: "./dist/index.js"
@@ -82110,6 +82311,7 @@ var cms = require_cms_provision();
82110
82311
  var bookingPreset = require_booking_preset();
82111
82312
  var builder = require_builder();
82112
82313
  var models = require_models();
82314
+ var llm = require_llm();
82113
82315
  var initDatabase = db.initDatabase;
82114
82316
  var getDb = db.getDb;
82115
82317
  var chatWithTools = chat.chatWithTools;
@@ -82121,10 +82323,15 @@ var refreshModels = models.refreshModels;
82121
82323
  var refreshIfStale = models.refreshIfStale;
82122
82324
  var listCachedModels = models.listCachedModels;
82123
82325
  var getPreferredModel = models.getPreferredModel;
82326
+ var checkClaudeCodeAuth = llm.checkClaudeCodeAuth;
82327
+ var llmBackend = llm.getBackend;
82328
+ var claudeBin = llm.claudeBin;
82329
+ var CLAUDE_CODE_MODELS = llm.CLAUDE_CODE_MODELS;
82330
+ var getClaudeCodeModel = llm.getClaudeCodeModel;
82124
82331
 
82125
82332
  // src/config.ts
82126
82333
  var REQUIRED_KEYS = [
82127
- { key: "anthropic_key", label: "Anthropic API key", hint: "sk-ant-\u2026 \u2014 powers the chat + site generation", required: true },
82334
+ { key: "anthropic_key", label: "Anthropic API key", hint: "sk-ant-\u2026 \u2014 powers the chat + site generation", required: true, apiBackendOnly: true },
82128
82335
  { key: "places_key", label: "Google Places API key", hint: "finds businesses, photos, reviews", required: true },
82129
82336
  { key: "vercel_token", label: "Vercel token", hint: "deploys the generated sites", required: true },
82130
82337
  { key: "blob_token", label: "Vercel Blob token", hint: "optional \u2014 only needed for CMS/booking hand-off", required: false }
@@ -82139,12 +82346,19 @@ function setSetting(key, value) {
82139
82346
  [key, value]
82140
82347
  );
82141
82348
  }
82349
+ function getBackend() {
82350
+ return getSetting("ai_backend") === "claude_code" ? "claude_code" : "api";
82351
+ }
82352
+ function setBackend(b) {
82353
+ setSetting("ai_backend", b);
82354
+ }
82142
82355
  function missingRequiredKeys() {
82143
- return REQUIRED_KEYS.filter((k) => k.required && !getSetting(k.key)).map((k) => ({
82144
- key: k.key,
82145
- label: k.label,
82146
- hint: k.hint
82147
- }));
82356
+ const backend = getBackend();
82357
+ return REQUIRED_KEYS.filter((k) => {
82358
+ if (!k.required) return false;
82359
+ if ("apiBackendOnly" in k && k.apiBackendOnly && backend !== "api") return false;
82360
+ return !getSetting(k.key);
82361
+ }).map((k) => ({ key: k.key, label: k.label, hint: k.hint }));
82148
82362
  }
82149
82363
 
82150
82364
  // src/license.ts
@@ -82306,6 +82520,59 @@ var Status = class {
82306
82520
  };
82307
82521
 
82308
82522
  // src/onboarding.ts
82523
+ var import_child_process = require("child_process");
82524
+ function claudeCliPresent() {
82525
+ try {
82526
+ const bin = process.env.SPROUTKIT_CLAUDE_BIN || "claude";
82527
+ const r = (0, import_child_process.spawnSync)(bin, ["--version"], { stdio: "ignore", timeout: 1e4 });
82528
+ return r.status === 0;
82529
+ } catch {
82530
+ return false;
82531
+ }
82532
+ }
82533
+ async function chooseBackend(force) {
82534
+ if (!force && getSetting("ai_backend")) return getBackend();
82535
+ const hasClaude = claudeCliPresent();
82536
+ say(` ${c.bold("How should Sproutkit talk to Claude?")}`);
82537
+ say(
82538
+ ` ${c.greenBold("1")} Use my Claude subscription ${c.dim(
82539
+ hasClaude ? "(via Claude Code \u2014 no API key, uses your Pro/Max plan)" : "(requires the Claude Code CLI \u2014 not detected)"
82540
+ )}`
82541
+ );
82542
+ say(` ${c.greenBold("2")} Use an Anthropic API key ${c.dim("(pay-as-you-go, sk-ant-\u2026)")}`);
82543
+ say();
82544
+ const pick = await ask(c.green(" Pick 1 or 2 (default 2): "));
82545
+ const wantsSub = pick.trim() === "1";
82546
+ if (!wantsSub) {
82547
+ setBackend("api");
82548
+ return "api";
82549
+ }
82550
+ if (!claudeCliPresent()) {
82551
+ say(c.amber(" The Claude Code CLI isn't installed or isn't on your PATH."));
82552
+ say(c.dim(" Install it from https://claude.com/claude-code, run 'claude /login', then re-run 'sproutkit setup'."));
82553
+ say(c.dim(" Falling back to the API-key path for now."));
82554
+ say();
82555
+ setBackend("api");
82556
+ return "api";
82557
+ }
82558
+ say(c.dim(" \u2026 checking that Claude Code is logged in"));
82559
+ let auth = await checkClaudeCodeAuth();
82560
+ while (!auth.ok) {
82561
+ say(c.amber(` Claude Code isn't authenticated: ${auth.reason}`));
82562
+ say(` Log in in another terminal with: ${c.bold("claude /login")}`);
82563
+ const again = await ask(c.green(" Press Enter once you've logged in (or type 'skip' to use an API key): "));
82564
+ if (again.trim().toLowerCase() === "skip") {
82565
+ setBackend("api");
82566
+ return "api";
82567
+ }
82568
+ say(c.dim(" \u2026 re-checking"));
82569
+ auth = await checkClaudeCodeAuth();
82570
+ }
82571
+ setBackend("claude_code");
82572
+ say(c.green(" \u2713 Using your Claude subscription \u2014 no API key needed for generation."));
82573
+ say();
82574
+ return "claude_code";
82575
+ }
82309
82576
  async function onboardLicense(force) {
82310
82577
  if (!force) {
82311
82578
  const state = await check();
@@ -82342,7 +82609,9 @@ async function runOnboarding(force = false) {
82342
82609
  say();
82343
82610
  const ok = await onboardLicense(force);
82344
82611
  if (!ok) return false;
82612
+ const backend = await chooseBackend(force);
82345
82613
  for (const k of REQUIRED_KEYS) {
82614
+ if ("apiBackendOnly" in k && k.apiBackendOnly && backend !== "api") continue;
82346
82615
  const existing = getSetting(k.key);
82347
82616
  if (existing && !force) continue;
82348
82617
  const req = k.required ? "" : c.dim(" (optional \u2014 press Enter to skip)");
@@ -82597,7 +82866,14 @@ function labelFor(t) {
82597
82866
  async function runTurn(userMessage) {
82598
82867
  const apiKey = getSetting("anthropic_key");
82599
82868
  if (!apiKey) {
82600
- say(c.red(" No Anthropic key set. Run 'sproutkit setup'."));
82869
+ if (getBackend() === "claude_code") {
82870
+ say(c.amber(" You're on the Claude subscription backend, which powers site building."));
82871
+ say(c.dim(" The chat assistant (lead-finding & outreach dispatch) additionally needs an"));
82872
+ say(c.dim(" Anthropic API key. Add one with 'sproutkit setup', or build sites directly:"));
82873
+ say(c.dim(' sproutkit "build a site for <business>"'));
82874
+ } else {
82875
+ say(c.red(" No Anthropic key set. Run 'sproutkit setup'."));
82876
+ }
82601
82877
  return;
82602
82878
  }
82603
82879
  persist("user", userMessage);
@@ -82672,9 +82948,9 @@ async function runTurn(userMessage) {
82672
82948
  }
82673
82949
 
82674
82950
  // src/update.ts
82675
- var import_child_process = require("child_process");
82951
+ var import_child_process2 = require("child_process");
82676
82952
  var import_util = require("util");
82677
- var execFileP = (0, import_util.promisify)(import_child_process.execFile);
82953
+ var execFileP = (0, import_util.promisify)(import_child_process2.execFile);
82678
82954
  var PKG = "sproutkit-code";
82679
82955
  var CURRENT_VERSION = require_package().version;
82680
82956
  async function latestOnRegistry() {
@@ -82737,7 +83013,39 @@ async function notifyIfOutdated() {
82737
83013
  }
82738
83014
 
82739
83015
  // src/models-cmd.ts
83016
+ async function runModelsClaudeCode() {
83017
+ const current = getClaudeCodeModel();
83018
+ say();
83019
+ say(c.bold(" Model (Claude subscription):"));
83020
+ say(c.dim(" Uses your Claude Code login \u2014 pick which model builds run on."));
83021
+ CLAUDE_CODE_MODELS.forEach((m, i) => {
83022
+ const active = m.alias === current ? c.green(" \u2190 current") : "";
83023
+ const isDefault = !current && m.alias === "sonnet" ? c.dim(" (CLI default)") : "";
83024
+ say(` ${c.greenBold(String(i + 1).padStart(2))} ${m.label} ${c.dim(m.alias)}${active}${isDefault}`);
83025
+ });
83026
+ say();
83027
+ const pick = await ask(c.green(" Pick a number to switch (or Enter to keep current): "));
83028
+ if (!pick) {
83029
+ say(c.dim(" No change."));
83030
+ return;
83031
+ }
83032
+ const idx = Number(pick) - 1;
83033
+ if (Number.isNaN(idx) || idx < 0 || idx >= CLAUDE_CODE_MODELS.length) {
83034
+ say(c.amber(" Not a valid choice \u2014 no change made."));
83035
+ return;
83036
+ }
83037
+ const chosen = CLAUDE_CODE_MODELS[idx];
83038
+ setSetting("claude_code_model", chosen.alias);
83039
+ say(c.green(` \u2713 Builds will now use ${chosen.alias}.`));
83040
+ if (chosen.alias === "fable") {
83041
+ say(c.dim(" Note: Fable needs 30-day data retention on your Claude account, or it'll error."));
83042
+ }
83043
+ }
82740
83044
  async function runModels() {
83045
+ if (getBackend() === "claude_code") {
83046
+ await runModelsClaudeCode();
83047
+ return;
83048
+ }
82741
83049
  const apiKey = getSetting("anthropic_key");
82742
83050
  if (!apiKey) {
82743
83051
  say(c.red(" No Anthropic key set. Run 'sproutkit setup' first."));