sproutkit-code 0.2.1 → 0.3.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.
Files changed (2) hide show
  1. package/dist/index.js +529 -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,192 @@ 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.getBackend = getBackend2;
30388
+ exports2.claudeBin = claudeBin2;
30389
+ exports2.visionUnavailable = visionUnavailable;
30390
+ exports2.generateText = generateText;
30391
+ exports2.checkClaudeCodeAuth = checkClaudeCodeAuth2;
30392
+ var child_process_1 = require("child_process");
30393
+ var db_1 = require_db();
30394
+ var runtime_1 = require_runtime();
30395
+ function readSetting(key) {
30396
+ try {
30397
+ const row = (0, db_1.getDb)().get("SELECT value FROM settings WHERE key = ?", [key]);
30398
+ if (!row)
30399
+ return null;
30400
+ return (0, runtime_1.decryptSettingValue)(key, row.value);
30401
+ } catch {
30402
+ return null;
30403
+ }
30404
+ }
30405
+ function getBackend2() {
30406
+ const v = readSetting("ai_backend");
30407
+ return v === "claude_code" ? "claude_code" : "api";
30408
+ }
30409
+ function claudeBin2() {
30410
+ return process.env.SPROUTKIT_CLAUDE_BIN || "claude";
30411
+ }
30412
+ function visionUnavailable(hasImages) {
30413
+ return hasImages && getBackend2() === "claude_code";
30414
+ }
30415
+ async function generateViaApi(args) {
30416
+ if (!args.apiKey) {
30417
+ throw new Error("No Anthropic API key set for the API backend. Add one in Settings, or switch to the Claude subscription backend.");
30418
+ }
30419
+ const { default: Anthropic } = await Promise.resolve().then(() => __importStar(require_sdk()));
30420
+ const anthropic = new Anthropic({ apiKey: args.apiKey });
30421
+ const content = args.images && args.images.length > 0 ? [
30422
+ { type: "text", text: args.prompt },
30423
+ ...args.images.map((img) => ({
30424
+ type: "image",
30425
+ source: {
30426
+ type: "base64",
30427
+ media_type: img.mediaType,
30428
+ data: img.base64
30429
+ }
30430
+ }))
30431
+ ] : args.prompt;
30432
+ const res = await anthropic.messages.create({
30433
+ model: args.model || "claude-sonnet-4-6",
30434
+ max_tokens: args.maxTokens ?? 8192,
30435
+ messages: [{ role: "user", content }]
30436
+ });
30437
+ const textBlock = res.content.find((b) => b.type === "text");
30438
+ return {
30439
+ text: textBlock?.text ?? "",
30440
+ stopReason: res.stop_reason ?? null,
30441
+ backend: "api"
30442
+ };
30443
+ }
30444
+ async function generateViaClaudeCode(args) {
30445
+ if (args.images && args.images.length > 0) {
30446
+ throw new Error("Image input isn't supported on the Claude subscription backend. This step needs an Anthropic API key.");
30447
+ }
30448
+ const cliArgs = ["-p", "--output-format", "json"];
30449
+ if (args.model)
30450
+ cliArgs.push("--model", args.model);
30451
+ const bin = claudeBin2();
30452
+ const timeoutMs = args.timeoutMs ?? 18e4;
30453
+ return new Promise((resolve, reject) => {
30454
+ let child;
30455
+ try {
30456
+ child = (0, child_process_1.spawn)(bin, cliArgs, { stdio: ["pipe", "pipe", "pipe"] });
30457
+ } catch (e) {
30458
+ reject(new Error(`Couldn't launch the Claude Code CLI ("${bin}"). Is it installed and on your PATH? (${e.message})`));
30459
+ return;
30460
+ }
30461
+ let stdout = "";
30462
+ let stderr = "";
30463
+ let settled = false;
30464
+ const timer = setTimeout(() => {
30465
+ if (settled)
30466
+ return;
30467
+ settled = true;
30468
+ child.kill("SIGKILL");
30469
+ reject(new Error(`Claude Code timed out after ${Math.round(timeoutMs / 1e3)}s.`));
30470
+ }, timeoutMs);
30471
+ child.stdout.on("data", (d) => stdout += d.toString());
30472
+ child.stderr.on("data", (d) => stderr += d.toString());
30473
+ child.on("error", (e) => {
30474
+ if (settled)
30475
+ return;
30476
+ settled = true;
30477
+ clearTimeout(timer);
30478
+ 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}`;
30479
+ reject(new Error(msg));
30480
+ });
30481
+ child.on("close", (code) => {
30482
+ if (settled)
30483
+ return;
30484
+ settled = true;
30485
+ clearTimeout(timer);
30486
+ const raw = stdout.trim();
30487
+ if (!raw) {
30488
+ reject(new Error(`Claude Code returned no output (exit ${code}). ${stderr.trim() || "Check that you're logged in: 'claude /login'."}`));
30489
+ return;
30490
+ }
30491
+ let parsed;
30492
+ try {
30493
+ parsed = JSON.parse(raw);
30494
+ } catch {
30495
+ reject(new Error(`Couldn't parse Claude Code output as JSON: ${raw.slice(0, 300)}`));
30496
+ return;
30497
+ }
30498
+ if (parsed.is_error) {
30499
+ reject(new Error(parsed.result || `Claude Code reported an error (${parsed.subtype ?? "unknown"}).`));
30500
+ return;
30501
+ }
30502
+ resolve({
30503
+ text: parsed.result ?? "",
30504
+ stopReason: parsed.stop_reason ?? null,
30505
+ backend: "claude_code"
30506
+ });
30507
+ });
30508
+ child.stdin.write(args.prompt);
30509
+ child.stdin.end();
30510
+ });
30511
+ }
30512
+ async function generateText(args) {
30513
+ return getBackend2() === "claude_code" ? generateViaClaudeCode(args) : generateViaApi(args);
30514
+ }
30515
+ async function checkClaudeCodeAuth2() {
30516
+ try {
30517
+ const res = await generateViaClaudeCode({
30518
+ prompt: "Reply with the single word: ok",
30519
+ timeoutMs: 6e4
30520
+ });
30521
+ if (res.text.toLowerCase().includes("ok"))
30522
+ return { ok: true };
30523
+ return { ok: true };
30524
+ } catch (e) {
30525
+ return { ok: false, reason: e.message };
30526
+ }
30527
+ }
30528
+ }
30529
+ });
30530
+
30345
30531
  // ../desktop/dist/main/lib/models.js
30346
30532
  var require_models = __commonJS({
30347
30533
  "../desktop/dist/main/lib/models.js"(exports2) {
@@ -34426,7 +34612,7 @@ var require_get_context = __commonJS({
34426
34612
  getContext: () => getContext2
34427
34613
  });
34428
34614
  module2.exports = __toCommonJS(get_context_exports);
34429
- var SYMBOL_FOR_REQ_CONTEXT = /* @__PURE__ */ Symbol.for("@vercel/request-context");
34615
+ var SYMBOL_FOR_REQ_CONTEXT = Symbol.for("@vercel/request-context");
34430
34616
  function getContext2() {
34431
34617
  const fromSymbol = globalThis;
34432
34618
  return fromSymbol[SYMBOL_FOR_REQ_CONTEXT]?.get?.() ?? {};
@@ -35154,7 +35340,7 @@ var require_cross_spawn = __commonJS({
35154
35340
  enoent.hookChildProcess(spawned, parsed);
35155
35341
  return spawned;
35156
35342
  }
35157
- function spawnSync(command, args, options) {
35343
+ function spawnSync2(command, args, options) {
35158
35344
  const parsed = parse(command, args, options);
35159
35345
  const result = cp.spawnSync(parsed.command, parsed.args, parsed.options);
35160
35346
  result.error = result.error || enoent.verifyENOENTSync(result.status, parsed);
@@ -35162,7 +35348,7 @@ var require_cross_spawn = __commonJS({
35162
35348
  }
35163
35349
  module2.exports = spawn;
35164
35350
  module2.exports.spawn = spawn;
35165
- module2.exports.sync = spawnSync;
35351
+ module2.exports.sync = spawnSync2;
35166
35352
  module2.exports._parse = parse;
35167
35353
  module2.exports._enoent = enoent;
35168
35354
  }
@@ -37703,7 +37889,7 @@ var require_core3 = __commonJS({
37703
37889
  Object.defineProperty(_, "name", { value: name });
37704
37890
  return _;
37705
37891
  }
37706
- exports2.$brand = /* @__PURE__ */ Symbol("zod_brand");
37892
+ exports2.$brand = Symbol("zod_brand");
37707
37893
  var $ZodAsyncError = class extends Error {
37708
37894
  constructor() {
37709
37895
  super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);
@@ -37846,7 +38032,7 @@ var require_util = __commonJS({
37846
38032
  const stepInt = Number.parseInt(step.toFixed(decCount).replace(".", ""));
37847
38033
  return valInt % stepInt / 10 ** decCount;
37848
38034
  }
37849
- var EVALUATING = /* @__PURE__ */ Symbol("evaluating");
38035
+ var EVALUATING = Symbol("evaluating");
37850
38036
  function defineLazy(object, key, getter) {
37851
38037
  let value = void 0;
37852
38038
  Object.defineProperty(object, key, {
@@ -48619,8 +48805,8 @@ var require_registries = __commonJS({
48619
48805
  Object.defineProperty(exports2, "__esModule", { value: true });
48620
48806
  exports2.globalRegistry = exports2.$ZodRegistry = exports2.$input = exports2.$output = void 0;
48621
48807
  exports2.registry = registry;
48622
- exports2.$output = /* @__PURE__ */ Symbol("ZodOutput");
48623
- exports2.$input = /* @__PURE__ */ Symbol("ZodInput");
48808
+ exports2.$output = Symbol("ZodOutput");
48809
+ exports2.$input = Symbol("ZodInput");
48624
48810
  var $ZodRegistry = class {
48625
48811
  constructor() {
48626
48812
  this._map = /* @__PURE__ */ new WeakMap();
@@ -55384,7 +55570,7 @@ var require_private_symbols = __commonJS({
55384
55570
  "use strict";
55385
55571
  Object.defineProperty(exports2, "__esModule", { value: true });
55386
55572
  exports2.unprotected = void 0;
55387
- exports2.unprotected = /* @__PURE__ */ Symbol();
55573
+ exports2.unprotected = Symbol();
55388
55574
  }
55389
55575
  });
55390
55576
 
@@ -57295,7 +57481,7 @@ var require_remote = __commonJS({
57295
57481
  const VERSION = "v5.10.0";
57296
57482
  USER_AGENT = `${NAME}/${VERSION}`;
57297
57483
  }
57298
- exports2.jwksCache = /* @__PURE__ */ Symbol();
57484
+ exports2.jwksCache = Symbol();
57299
57485
  function isFreshJwksCache(input, cacheMaxAge) {
57300
57486
  if (typeof input !== "object" || input === null) {
57301
57487
  return false;
@@ -58296,71 +58482,71 @@ var require_lib8 = __commonJS({
58296
58482
  var require_symbols = __commonJS({
58297
58483
  "../../node_modules/undici/lib/core/symbols.js"(exports2, module2) {
58298
58484
  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")
58485
+ kClose: Symbol("close"),
58486
+ kDestroy: Symbol("destroy"),
58487
+ kDispatch: Symbol("dispatch"),
58488
+ kUrl: Symbol("url"),
58489
+ kWriting: Symbol("writing"),
58490
+ kResuming: Symbol("resuming"),
58491
+ kQueue: Symbol("queue"),
58492
+ kConnect: Symbol("connect"),
58493
+ kConnecting: Symbol("connecting"),
58494
+ kKeepAliveDefaultTimeout: Symbol("default keep alive timeout"),
58495
+ kKeepAliveMaxTimeout: Symbol("max keep alive timeout"),
58496
+ kKeepAliveTimeoutThreshold: Symbol("keep alive timeout threshold"),
58497
+ kKeepAliveTimeoutValue: Symbol("keep alive timeout"),
58498
+ kKeepAlive: Symbol("keep alive"),
58499
+ kHeadersTimeout: Symbol("headers timeout"),
58500
+ kBodyTimeout: Symbol("body timeout"),
58501
+ kServerName: Symbol("server name"),
58502
+ kLocalAddress: Symbol("local address"),
58503
+ kHost: Symbol("host"),
58504
+ kNoRef: Symbol("no ref"),
58505
+ kBodyUsed: Symbol("used"),
58506
+ kBody: Symbol("abstracted request body"),
58507
+ kRunning: Symbol("running"),
58508
+ kBlocking: Symbol("blocking"),
58509
+ kPending: Symbol("pending"),
58510
+ kSize: Symbol("size"),
58511
+ kBusy: Symbol("busy"),
58512
+ kQueued: Symbol("queued"),
58513
+ kFree: Symbol("free"),
58514
+ kConnected: Symbol("connected"),
58515
+ kClosed: Symbol("closed"),
58516
+ kNeedDrain: Symbol("need drain"),
58517
+ kReset: Symbol("reset"),
58518
+ kDestroyed: Symbol.for("nodejs.stream.destroyed"),
58519
+ kResume: Symbol("resume"),
58520
+ kOnError: Symbol("on error"),
58521
+ kMaxHeadersSize: Symbol("max headers size"),
58522
+ kRunningIdx: Symbol("running index"),
58523
+ kPendingIdx: Symbol("pending index"),
58524
+ kError: Symbol("error"),
58525
+ kClients: Symbol("clients"),
58526
+ kClient: Symbol("client"),
58527
+ kParser: Symbol("parser"),
58528
+ kOnDestroyed: Symbol("destroy callbacks"),
58529
+ kPipelining: Symbol("pipelining"),
58530
+ kSocket: Symbol("socket"),
58531
+ kHostHeader: Symbol("host header"),
58532
+ kConnector: Symbol("connector"),
58533
+ kStrictContentLength: Symbol("strict content length"),
58534
+ kMaxRedirections: Symbol("maxRedirections"),
58535
+ kMaxRequests: Symbol("maxRequestsPerClient"),
58536
+ kProxy: Symbol("proxy agent options"),
58537
+ kCounter: Symbol("socket request counter"),
58538
+ kInterceptors: Symbol("dispatch interceptors"),
58539
+ kMaxResponseSize: Symbol("max response size"),
58540
+ kHTTP2Session: Symbol("http2Session"),
58541
+ kHTTP2SessionState: Symbol("http2Session state"),
58542
+ kRetryHandlerDefaultRetry: Symbol("retry agent default retry"),
58543
+ kConstruct: Symbol("constructable"),
58544
+ kListeners: Symbol("listeners"),
58545
+ kHTTPContext: Symbol("http context"),
58546
+ kMaxConcurrentStreams: Symbol("max concurrent streams"),
58547
+ kNoProxyAgent: Symbol("no proxy agent"),
58548
+ kHttpProxyAgent: Symbol("http proxy agent"),
58549
+ kHttpsProxyAgent: Symbol("https proxy agent")
58364
58550
  };
58365
58551
  }
58366
58552
  });
@@ -58369,7 +58555,7 @@ var require_symbols = __commonJS({
58369
58555
  var require_errors5 = __commonJS({
58370
58556
  "../../node_modules/undici/lib/core/errors.js"(exports2, module2) {
58371
58557
  "use strict";
58372
- var kUndiciError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR");
58558
+ var kUndiciError = Symbol.for("undici.error.UND_ERR");
58373
58559
  var UndiciError = class extends Error {
58374
58560
  constructor(message) {
58375
58561
  super(message);
@@ -58381,7 +58567,7 @@ var require_errors5 = __commonJS({
58381
58567
  }
58382
58568
  [kUndiciError] = true;
58383
58569
  };
58384
- var kConnectTimeoutError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_CONNECT_TIMEOUT");
58570
+ var kConnectTimeoutError = Symbol.for("undici.error.UND_ERR_CONNECT_TIMEOUT");
58385
58571
  var ConnectTimeoutError = class extends UndiciError {
58386
58572
  constructor(message) {
58387
58573
  super(message);
@@ -58394,7 +58580,7 @@ var require_errors5 = __commonJS({
58394
58580
  }
58395
58581
  [kConnectTimeoutError] = true;
58396
58582
  };
58397
- var kHeadersTimeoutError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_HEADERS_TIMEOUT");
58583
+ var kHeadersTimeoutError = Symbol.for("undici.error.UND_ERR_HEADERS_TIMEOUT");
58398
58584
  var HeadersTimeoutError = class extends UndiciError {
58399
58585
  constructor(message) {
58400
58586
  super(message);
@@ -58407,7 +58593,7 @@ var require_errors5 = __commonJS({
58407
58593
  }
58408
58594
  [kHeadersTimeoutError] = true;
58409
58595
  };
58410
- var kHeadersOverflowError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_HEADERS_OVERFLOW");
58596
+ var kHeadersOverflowError = Symbol.for("undici.error.UND_ERR_HEADERS_OVERFLOW");
58411
58597
  var HeadersOverflowError = class extends UndiciError {
58412
58598
  constructor(message) {
58413
58599
  super(message);
@@ -58420,7 +58606,7 @@ var require_errors5 = __commonJS({
58420
58606
  }
58421
58607
  [kHeadersOverflowError] = true;
58422
58608
  };
58423
- var kBodyTimeoutError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_BODY_TIMEOUT");
58609
+ var kBodyTimeoutError = Symbol.for("undici.error.UND_ERR_BODY_TIMEOUT");
58424
58610
  var BodyTimeoutError = class extends UndiciError {
58425
58611
  constructor(message) {
58426
58612
  super(message);
@@ -58433,7 +58619,7 @@ var require_errors5 = __commonJS({
58433
58619
  }
58434
58620
  [kBodyTimeoutError] = true;
58435
58621
  };
58436
- var kResponseStatusCodeError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_RESPONSE_STATUS_CODE");
58622
+ var kResponseStatusCodeError = Symbol.for("undici.error.UND_ERR_RESPONSE_STATUS_CODE");
58437
58623
  var ResponseStatusCodeError = class extends UndiciError {
58438
58624
  constructor(message, statusCode, headers, body) {
58439
58625
  super(message);
@@ -58450,7 +58636,7 @@ var require_errors5 = __commonJS({
58450
58636
  }
58451
58637
  [kResponseStatusCodeError] = true;
58452
58638
  };
58453
- var kInvalidArgumentError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_INVALID_ARG");
58639
+ var kInvalidArgumentError = Symbol.for("undici.error.UND_ERR_INVALID_ARG");
58454
58640
  var InvalidArgumentError = class extends UndiciError {
58455
58641
  constructor(message) {
58456
58642
  super(message);
@@ -58463,7 +58649,7 @@ var require_errors5 = __commonJS({
58463
58649
  }
58464
58650
  [kInvalidArgumentError] = true;
58465
58651
  };
58466
- var kInvalidReturnValueError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_INVALID_RETURN_VALUE");
58652
+ var kInvalidReturnValueError = Symbol.for("undici.error.UND_ERR_INVALID_RETURN_VALUE");
58467
58653
  var InvalidReturnValueError = class extends UndiciError {
58468
58654
  constructor(message) {
58469
58655
  super(message);
@@ -58476,7 +58662,7 @@ var require_errors5 = __commonJS({
58476
58662
  }
58477
58663
  [kInvalidReturnValueError] = true;
58478
58664
  };
58479
- var kAbortError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_ABORT");
58665
+ var kAbortError = Symbol.for("undici.error.UND_ERR_ABORT");
58480
58666
  var AbortError = class extends UndiciError {
58481
58667
  constructor(message) {
58482
58668
  super(message);
@@ -58489,7 +58675,7 @@ var require_errors5 = __commonJS({
58489
58675
  }
58490
58676
  [kAbortError] = true;
58491
58677
  };
58492
- var kRequestAbortedError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_ABORTED");
58678
+ var kRequestAbortedError = Symbol.for("undici.error.UND_ERR_ABORTED");
58493
58679
  var RequestAbortedError = class extends AbortError {
58494
58680
  constructor(message) {
58495
58681
  super(message);
@@ -58502,7 +58688,7 @@ var require_errors5 = __commonJS({
58502
58688
  }
58503
58689
  [kRequestAbortedError] = true;
58504
58690
  };
58505
- var kInformationalError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_INFO");
58691
+ var kInformationalError = Symbol.for("undici.error.UND_ERR_INFO");
58506
58692
  var InformationalError = class extends UndiciError {
58507
58693
  constructor(message) {
58508
58694
  super(message);
@@ -58515,7 +58701,7 @@ var require_errors5 = __commonJS({
58515
58701
  }
58516
58702
  [kInformationalError] = true;
58517
58703
  };
58518
- var kRequestContentLengthMismatchError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH");
58704
+ var kRequestContentLengthMismatchError = Symbol.for("undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH");
58519
58705
  var RequestContentLengthMismatchError = class extends UndiciError {
58520
58706
  constructor(message) {
58521
58707
  super(message);
@@ -58528,7 +58714,7 @@ var require_errors5 = __commonJS({
58528
58714
  }
58529
58715
  [kRequestContentLengthMismatchError] = true;
58530
58716
  };
58531
- var kResponseContentLengthMismatchError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH");
58717
+ var kResponseContentLengthMismatchError = Symbol.for("undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH");
58532
58718
  var ResponseContentLengthMismatchError = class extends UndiciError {
58533
58719
  constructor(message) {
58534
58720
  super(message);
@@ -58541,7 +58727,7 @@ var require_errors5 = __commonJS({
58541
58727
  }
58542
58728
  [kResponseContentLengthMismatchError] = true;
58543
58729
  };
58544
- var kClientDestroyedError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_DESTROYED");
58730
+ var kClientDestroyedError = Symbol.for("undici.error.UND_ERR_DESTROYED");
58545
58731
  var ClientDestroyedError = class extends UndiciError {
58546
58732
  constructor(message) {
58547
58733
  super(message);
@@ -58554,7 +58740,7 @@ var require_errors5 = __commonJS({
58554
58740
  }
58555
58741
  [kClientDestroyedError] = true;
58556
58742
  };
58557
- var kClientClosedError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_CLOSED");
58743
+ var kClientClosedError = Symbol.for("undici.error.UND_ERR_CLOSED");
58558
58744
  var ClientClosedError = class extends UndiciError {
58559
58745
  constructor(message) {
58560
58746
  super(message);
@@ -58567,7 +58753,7 @@ var require_errors5 = __commonJS({
58567
58753
  }
58568
58754
  [kClientClosedError] = true;
58569
58755
  };
58570
- var kSocketError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_SOCKET");
58756
+ var kSocketError = Symbol.for("undici.error.UND_ERR_SOCKET");
58571
58757
  var SocketError = class extends UndiciError {
58572
58758
  constructor(message, socket) {
58573
58759
  super(message);
@@ -58581,7 +58767,7 @@ var require_errors5 = __commonJS({
58581
58767
  }
58582
58768
  [kSocketError] = true;
58583
58769
  };
58584
- var kNotSupportedError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_NOT_SUPPORTED");
58770
+ var kNotSupportedError = Symbol.for("undici.error.UND_ERR_NOT_SUPPORTED");
58585
58771
  var NotSupportedError = class extends UndiciError {
58586
58772
  constructor(message) {
58587
58773
  super(message);
@@ -58594,7 +58780,7 @@ var require_errors5 = __commonJS({
58594
58780
  }
58595
58781
  [kNotSupportedError] = true;
58596
58782
  };
58597
- var kBalancedPoolMissingUpstreamError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_BPL_MISSING_UPSTREAM");
58783
+ var kBalancedPoolMissingUpstreamError = Symbol.for("undici.error.UND_ERR_BPL_MISSING_UPSTREAM");
58598
58784
  var BalancedPoolMissingUpstreamError = class extends UndiciError {
58599
58785
  constructor(message) {
58600
58786
  super(message);
@@ -58607,7 +58793,7 @@ var require_errors5 = __commonJS({
58607
58793
  }
58608
58794
  [kBalancedPoolMissingUpstreamError] = true;
58609
58795
  };
58610
- var kHTTPParserError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_HTTP_PARSER");
58796
+ var kHTTPParserError = Symbol.for("undici.error.UND_ERR_HTTP_PARSER");
58611
58797
  var HTTPParserError = class extends Error {
58612
58798
  constructor(message, code, data) {
58613
58799
  super(message);
@@ -58620,7 +58806,7 @@ var require_errors5 = __commonJS({
58620
58806
  }
58621
58807
  [kHTTPParserError] = true;
58622
58808
  };
58623
- var kResponseExceededMaxSizeError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE");
58809
+ var kResponseExceededMaxSizeError = Symbol.for("undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE");
58624
58810
  var ResponseExceededMaxSizeError = class extends UndiciError {
58625
58811
  constructor(message) {
58626
58812
  super(message);
@@ -58633,7 +58819,7 @@ var require_errors5 = __commonJS({
58633
58819
  }
58634
58820
  [kResponseExceededMaxSizeError] = true;
58635
58821
  };
58636
- var kRequestRetryError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_REQ_RETRY");
58822
+ var kRequestRetryError = Symbol.for("undici.error.UND_ERR_REQ_RETRY");
58637
58823
  var RequestRetryError = class extends UndiciError {
58638
58824
  constructor(message, code, { headers, data }) {
58639
58825
  super(message);
@@ -58649,7 +58835,7 @@ var require_errors5 = __commonJS({
58649
58835
  }
58650
58836
  [kRequestRetryError] = true;
58651
58837
  };
58652
- var kResponseError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_RESPONSE");
58838
+ var kResponseError = Symbol.for("undici.error.UND_ERR_RESPONSE");
58653
58839
  var ResponseError = class extends UndiciError {
58654
58840
  constructor(message, code, { headers, data }) {
58655
58841
  super(message);
@@ -58665,7 +58851,7 @@ var require_errors5 = __commonJS({
58665
58851
  }
58666
58852
  [kResponseError] = true;
58667
58853
  };
58668
- var kSecureProxyConnectionError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_PRX_TLS");
58854
+ var kSecureProxyConnectionError = Symbol.for("undici.error.UND_ERR_PRX_TLS");
58669
58855
  var SecureProxyConnectionError = class extends UndiciError {
58670
58856
  constructor(cause, message, options) {
58671
58857
  super(message, { cause, ...options ?? {} });
@@ -58679,7 +58865,7 @@ var require_errors5 = __commonJS({
58679
58865
  }
58680
58866
  [kSecureProxyConnectionError] = true;
58681
58867
  };
58682
- var kMessageSizeExceededError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED");
58868
+ var kMessageSizeExceededError = Symbol.for("undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED");
58683
58869
  var MessageSizeExceededError = class extends UndiciError {
58684
58870
  constructor(message) {
58685
58871
  super(message);
@@ -59695,7 +59881,7 @@ var require_request = __commonJS({
59695
59881
  var { channels } = require_diagnostics();
59696
59882
  var { headerNameLowerCasedRecord } = require_constants2();
59697
59883
  var invalidPathRegex = /[^\u0021-\u00ff]/;
59698
- var kHandler = /* @__PURE__ */ Symbol("handler");
59884
+ var kHandler = Symbol("handler");
59699
59885
  var Request2 = class {
59700
59886
  constructor(origin, {
59701
59887
  path: path2,
@@ -60068,10 +60254,10 @@ var require_dispatcher_base = __commonJS({
60068
60254
  InvalidArgumentError
60069
60255
  } = require_errors5();
60070
60256
  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");
60257
+ var kOnDestroyed = Symbol("onDestroyed");
60258
+ var kOnClosed = Symbol("onClosed");
60259
+ var kInterceptedDispatch = Symbol("Intercepted Dispatch");
60260
+ var kWebSocketOptions = Symbol("webSocketOptions");
60075
60261
  var DispatcherBase = class extends Dispatcher {
60076
60262
  constructor(opts) {
60077
60263
  super();
@@ -60234,7 +60420,7 @@ var require_timers = __commonJS({
60234
60420
  var RESOLUTION_MS = 1e3;
60235
60421
  var TICK_MS = (RESOLUTION_MS >> 1) - 1;
60236
60422
  var fastNowTimeout;
60237
- var kFastTimer = /* @__PURE__ */ Symbol("kFastTimer");
60423
+ var kFastTimer = Symbol("kFastTimer");
60238
60424
  var fastTimers = [];
60239
60425
  var NOT_IN_LIST = -2;
60240
60426
  var TO_BE_CLEARED = -1;
@@ -61218,7 +61404,7 @@ var require_constants4 = __commonJS({
61218
61404
  var require_global = __commonJS({
61219
61405
  "../../node_modules/undici/lib/web/fetch/global.js"(exports2, module2) {
61220
61406
  "use strict";
61221
- var globalOrigin = /* @__PURE__ */ Symbol.for("undici.globalOrigin.1");
61407
+ var globalOrigin = Symbol.for("undici.globalOrigin.1");
61222
61408
  function getGlobalOrigin() {
61223
61409
  return globalThis[globalOrigin];
61224
61410
  }
@@ -62896,11 +63082,11 @@ var require_symbols2 = __commonJS({
62896
63082
  "../../node_modules/undici/lib/web/fetch/symbols.js"(exports2, module2) {
62897
63083
  "use strict";
62898
63084
  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")
63085
+ kUrl: Symbol("url"),
63086
+ kHeaders: Symbol("headers"),
63087
+ kSignal: Symbol("signal"),
63088
+ kState: Symbol("state"),
63089
+ kDispatcher: Symbol("dispatcher")
62904
63090
  };
62905
63091
  }
62906
63092
  });
@@ -63738,9 +63924,9 @@ var require_client_h1 = __commonJS({
63738
63924
  var FastBuffer = Buffer[Symbol.species];
63739
63925
  var addListener = util.addListener;
63740
63926
  var removeAllListeners = util.removeAllListeners;
63741
- var kIdleSocketValidation = /* @__PURE__ */ Symbol("kIdleSocketValidation");
63742
- var kIdleSocketValidationTimeout = /* @__PURE__ */ Symbol("kIdleSocketValidationTimeout");
63743
- var kSocketUsed = /* @__PURE__ */ Symbol("kSocketUsed");
63927
+ var kIdleSocketValidation = Symbol("kIdleSocketValidation");
63928
+ var kIdleSocketValidationTimeout = Symbol("kIdleSocketValidationTimeout");
63929
+ var kSocketUsed = Symbol("kSocketUsed");
63744
63930
  var extractBody;
63745
63931
  async function lazyllhttp() {
63746
63932
  const llhttpWasmData = process.env.JEST_WORKER_ID ? require_llhttp_wasm() : void 0;
@@ -64828,7 +65014,7 @@ var require_client_h2 = __commonJS({
64828
65014
  kSize,
64829
65015
  kHTTPContext
64830
65016
  } = require_symbols();
64831
- var kOpenStreams = /* @__PURE__ */ Symbol("open streams");
65017
+ var kOpenStreams = Symbol("open streams");
64832
65018
  var extractBody;
64833
65019
  var h2ExperimentalWarned = false;
64834
65020
  var http2;
@@ -65347,7 +65533,7 @@ var require_redirect_handler = __commonJS({
65347
65533
  var { InvalidArgumentError } = require_errors5();
65348
65534
  var EE = require("node:events");
65349
65535
  var redirectableStatusCodes = [300, 301, 302, 303, 307, 308];
65350
- var kBody = /* @__PURE__ */ Symbol("body");
65536
+ var kBody = Symbol("body");
65351
65537
  var BodyAsyncIterable = class {
65352
65538
  constructor(body) {
65353
65539
  this[kBody] = body;
@@ -65580,7 +65766,7 @@ var require_client = __commonJS({
65580
65766
  var connectH1 = require_client_h1();
65581
65767
  var connectH2 = require_client_h2();
65582
65768
  var deprecatedInterceptorWarned = false;
65583
- var kClosedResolve = /* @__PURE__ */ Symbol("kClosedResolve");
65769
+ var kClosedResolve = Symbol("kClosedResolve");
65584
65770
  var noop = () => {
65585
65771
  };
65586
65772
  function getPipelining(client) {
@@ -66080,7 +66266,7 @@ var require_fixed_queue = __commonJS({
66080
66266
  var require_pool_stats = __commonJS({
66081
66267
  "../../node_modules/undici/lib/dispatcher/pool-stats.js"(exports2, module2) {
66082
66268
  var { kFree, kConnected, kPending, kQueued, kRunning, kSize } = require_symbols();
66083
- var kPool = /* @__PURE__ */ Symbol("pool");
66269
+ var kPool = Symbol("pool");
66084
66270
  var PoolStats = class {
66085
66271
  constructor(pool) {
66086
66272
  this[kPool] = pool;
@@ -66116,18 +66302,18 @@ var require_pool_base = __commonJS({
66116
66302
  var FixedQueue = require_fixed_queue();
66117
66303
  var { kConnected, kSize, kRunning, kPending, kQueued, kBusy, kFree, kUrl, kClose, kDestroy, kDispatch } = require_symbols();
66118
66304
  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");
66305
+ var kClients = Symbol("clients");
66306
+ var kNeedDrain = Symbol("needDrain");
66307
+ var kQueue = Symbol("queue");
66308
+ var kClosedResolve = Symbol("closed resolve");
66309
+ var kOnDrain = Symbol("onDrain");
66310
+ var kOnConnect = Symbol("onConnect");
66311
+ var kOnDisconnect = Symbol("onDisconnect");
66312
+ var kOnConnectionError = Symbol("onConnectionError");
66313
+ var kGetDispatcher = Symbol("get dispatcher");
66314
+ var kAddClient = Symbol("add client");
66315
+ var kRemoveClient = Symbol("remove client");
66316
+ var kStats = Symbol("stats");
66131
66317
  var PoolBase = class extends DispatcherBase {
66132
66318
  constructor(opts) {
66133
66319
  super(opts);
@@ -66281,9 +66467,9 @@ var require_pool = __commonJS({
66281
66467
  var util = require_util2();
66282
66468
  var { kUrl, kInterceptors } = require_symbols();
66283
66469
  var buildConnector = require_connect();
66284
- var kOptions = /* @__PURE__ */ Symbol("options");
66285
- var kConnections = /* @__PURE__ */ Symbol("connections");
66286
- var kFactory = /* @__PURE__ */ Symbol("factory");
66470
+ var kOptions = Symbol("options");
66471
+ var kConnections = Symbol("connections");
66472
+ var kFactory = Symbol("factory");
66287
66473
  function defaultFactory(origin, opts) {
66288
66474
  return new Client(origin, opts);
66289
66475
  }
@@ -66373,14 +66559,14 @@ var require_balanced_pool = __commonJS({
66373
66559
  var Pool = require_pool();
66374
66560
  var { kUrl, kInterceptors } = require_symbols();
66375
66561
  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");
66562
+ var kFactory = Symbol("factory");
66563
+ var kOptions = Symbol("options");
66564
+ var kGreatestCommonDivisor = Symbol("kGreatestCommonDivisor");
66565
+ var kCurrentWeight = Symbol("kCurrentWeight");
66566
+ var kIndex = Symbol("kIndex");
66567
+ var kWeight = Symbol("kWeight");
66568
+ var kMaxWeightPerServer = Symbol("kMaxWeightPerServer");
66569
+ var kErrorPenalty = Symbol("kErrorPenalty");
66384
66570
  function getGreatestCommonDivisor(a, b) {
66385
66571
  if (a === 0) return b;
66386
66572
  while (b !== 0) {
@@ -66509,13 +66695,13 @@ var require_agent3 = __commonJS({
66509
66695
  var Client = require_client();
66510
66696
  var util = require_util2();
66511
66697
  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");
66698
+ var kOnConnect = Symbol("onConnect");
66699
+ var kOnDisconnect = Symbol("onDisconnect");
66700
+ var kOnConnectionError = Symbol("onConnectionError");
66701
+ var kMaxRedirections = Symbol("maxRedirections");
66702
+ var kOnDrain = Symbol("onDrain");
66703
+ var kFactory = Symbol("factory");
66704
+ var kOptions = Symbol("options");
66519
66705
  function defaultFactory(origin, opts) {
66520
66706
  return opts && opts.connections === 1 ? new Client(origin, opts) : new Pool(origin, opts);
66521
66707
  }
@@ -66607,13 +66793,13 @@ var require_proxy_agent = __commonJS({
66607
66793
  var { InvalidArgumentError, RequestAbortedError, SecureProxyConnectionError } = require_errors5();
66608
66794
  var buildConnector = require_connect();
66609
66795
  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");
66796
+ var kAgent = Symbol("proxy agent");
66797
+ var kClient = Symbol("proxy client");
66798
+ var kProxyHeaders = Symbol("proxy headers");
66799
+ var kRequestTls = Symbol("request tls settings");
66800
+ var kProxyTls = Symbol("proxy tls settings");
66801
+ var kConnectEndpoint = Symbol("connect endpoint function");
66802
+ var kTunnelProxy = Symbol("tunnel proxy");
66617
66803
  function defaultProtocolPort(protocol) {
66618
66804
  return protocol === "https:" ? 443 : 80;
66619
66805
  }
@@ -67296,12 +67482,12 @@ var require_readable = __commonJS({
67296
67482
  var { RequestAbortedError, NotSupportedError, InvalidArgumentError, AbortError } = require_errors5();
67297
67483
  var util = require_util2();
67298
67484
  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");
67485
+ var kConsume = Symbol("kConsume");
67486
+ var kReading = Symbol("kReading");
67487
+ var kBody = Symbol("kBody");
67488
+ var kAbort = Symbol("kAbort");
67489
+ var kContentType = Symbol("kContentType");
67490
+ var kContentLength = Symbol("kContentLength");
67305
67491
  var noop = () => {
67306
67492
  };
67307
67493
  var BodyReadable = class extends Readable {
@@ -67832,8 +68018,8 @@ var require_abort_signal = __commonJS({
67832
68018
  "../../node_modules/undici/lib/api/abort-signal.js"(exports2, module2) {
67833
68019
  var { addAbortListener } = require_util2();
67834
68020
  var { RequestAbortedError } = require_errors5();
67835
- var kListener = /* @__PURE__ */ Symbol("kListener");
67836
- var kSignal = /* @__PURE__ */ Symbol("kSignal");
68021
+ var kListener = Symbol("kListener");
68022
+ var kSignal = Symbol("kSignal");
67837
68023
  function abort(self2) {
67838
68024
  if (self2.abort) {
67839
68025
  self2.abort(self2[kSignal]?.reason);
@@ -68069,7 +68255,7 @@ var require_api_pipeline = __commonJS({
68069
68255
  var { AsyncResource } = require("node:async_hooks");
68070
68256
  var { addSignal, removeSignal } = require_abort_signal();
68071
68257
  var assert = require("node:assert");
68072
- var kResume = /* @__PURE__ */ Symbol("resume");
68258
+ var kResume = Symbol("resume");
68073
68259
  var PipelineRequest = class extends Readable {
68074
68260
  constructor() {
68075
68261
  super({ autoDestroy: true });
@@ -68450,7 +68636,7 @@ var require_mock_errors = __commonJS({
68450
68636
  "../../node_modules/undici/lib/mock/mock-errors.js"(exports2, module2) {
68451
68637
  "use strict";
68452
68638
  var { UndiciError } = require_errors5();
68453
- var kMockNotMatchedError = /* @__PURE__ */ Symbol.for("undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED");
68639
+ var kMockNotMatchedError = Symbol.for("undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED");
68454
68640
  var MockNotMatchedError = class _MockNotMatchedError extends UndiciError {
68455
68641
  constructor(message) {
68456
68642
  super(message);
@@ -68475,25 +68661,25 @@ var require_mock_symbols = __commonJS({
68475
68661
  "../../node_modules/undici/lib/mock/mock-symbols.js"(exports2, module2) {
68476
68662
  "use strict";
68477
68663
  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")
68664
+ kAgent: Symbol("agent"),
68665
+ kOptions: Symbol("options"),
68666
+ kFactory: Symbol("factory"),
68667
+ kDispatches: Symbol("dispatches"),
68668
+ kDispatchKey: Symbol("dispatch key"),
68669
+ kDefaultHeaders: Symbol("default headers"),
68670
+ kDefaultTrailers: Symbol("default trailers"),
68671
+ kContentLength: Symbol("content length"),
68672
+ kMockAgent: Symbol("mock agent"),
68673
+ kMockAgentSet: Symbol("mock agent set"),
68674
+ kMockAgentGet: Symbol("mock agent get"),
68675
+ kMockDispatch: Symbol("mock dispatch"),
68676
+ kClose: Symbol("close"),
68677
+ kOriginalClose: Symbol("original agent close"),
68678
+ kOrigin: Symbol("origin"),
68679
+ kIsMockActive: Symbol("is mock active"),
68680
+ kNetConnect: Symbol("net connect"),
68681
+ kGetNetConnect: Symbol("get net connect"),
68682
+ kConnected: Symbol("connected")
68497
68683
  };
68498
68684
  }
68499
68685
  });
@@ -69268,7 +69454,7 @@ ${pendingInterceptorsFormatter.format(pending)}
69268
69454
  var require_global2 = __commonJS({
69269
69455
  "../../node_modules/undici/lib/global.js"(exports2, module2) {
69270
69456
  "use strict";
69271
- var globalDispatcher = /* @__PURE__ */ Symbol.for("undici.globalDispatcher.1");
69457
+ var globalDispatcher = Symbol.for("undici.globalDispatcher.1");
69272
69458
  var { InvalidArgumentError } = require_errors5();
69273
69459
  var Agent = require_agent3();
69274
69460
  if (getGlobalDispatcher() === void 0) {
@@ -69786,8 +69972,8 @@ var require_headers = __commonJS({
69786
69972
  var { webidl } = require_webidl();
69787
69973
  var assert = require("node:assert");
69788
69974
  var util = require("node:util");
69789
- var kHeadersMap = /* @__PURE__ */ Symbol("headers map");
69790
- var kHeadersSortedMap = /* @__PURE__ */ Symbol("headers map sorted");
69975
+ var kHeadersMap = Symbol("headers map");
69976
+ var kHeadersSortedMap = Symbol("headers map sorted");
69791
69977
  function isHTTPWhiteSpaceCharCode(code) {
69792
69978
  return code === 10 || code === 13 || code === 9 || code === 32;
69793
69979
  }
@@ -70688,7 +70874,7 @@ var require_request2 = __commonJS({
70688
70874
  var { kConstruct } = require_symbols();
70689
70875
  var assert = require("node:assert");
70690
70876
  var { getMaxListeners, setMaxListeners, getEventListeners, defaultMaxListeners } = require("node:events");
70691
- var kAbortController = /* @__PURE__ */ Symbol("abortController");
70877
+ var kAbortController = Symbol("abortController");
70692
70878
  var requestFinalizer = new FinalizationRegistry2(({ signal, abort }) => {
70693
70879
  signal.removeEventListener("abort", abort);
70694
70880
  });
@@ -72424,12 +72610,12 @@ var require_symbols3 = __commonJS({
72424
72610
  "../../node_modules/undici/lib/web/fileapi/symbols.js"(exports2, module2) {
72425
72611
  "use strict";
72426
72612
  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")
72613
+ kState: Symbol("FileReader state"),
72614
+ kResult: Symbol("FileReader result"),
72615
+ kError: Symbol("FileReader error"),
72616
+ kLastProgressEventFired: Symbol("FileReader last progress event fired timestamp"),
72617
+ kEvents: Symbol("FileReader events"),
72618
+ kAborted: Symbol("FileReader aborted")
72433
72619
  };
72434
72620
  }
72435
72621
  });
@@ -72439,7 +72625,7 @@ var require_progressevent = __commonJS({
72439
72625
  "../../node_modules/undici/lib/web/fileapi/progressevent.js"(exports2, module2) {
72440
72626
  "use strict";
72441
72627
  var { webidl } = require_webidl();
72442
- var kState = /* @__PURE__ */ Symbol("ProgressEvent state");
72628
+ var kState = Symbol("ProgressEvent state");
72443
72629
  var ProgressEvent = class _ProgressEvent extends Event {
72444
72630
  constructor(type, eventInitDict = {}) {
72445
72631
  type = webidl.converters.DOMString(type, "ProgressEvent constructor", "type");
@@ -74703,14 +74889,14 @@ var require_symbols5 = __commonJS({
74703
74889
  "../../node_modules/undici/lib/web/websocket/symbols.js"(exports2, module2) {
74704
74890
  "use strict";
74705
74891
  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")
74892
+ kWebSocketURL: Symbol("url"),
74893
+ kReadyState: Symbol("ready state"),
74894
+ kController: Symbol("controller"),
74895
+ kResponse: Symbol("response"),
74896
+ kBinaryType: Symbol("binary type"),
74897
+ kSentClose: Symbol("sent close"),
74898
+ kReceivedClose: Symbol("received close"),
74899
+ kByteParser: Symbol("byte parser")
74714
74900
  };
74715
74901
  }
74716
74902
  });
@@ -75158,8 +75344,8 @@ var require_permessage_deflate = __commonJS({
75158
75344
  var { isValidClientWindowBits } = require_util8();
75159
75345
  var { MessageSizeExceededError } = require_errors5();
75160
75346
  var tail = Buffer.from([0, 0, 255, 255]);
75161
- var kBuffer = /* @__PURE__ */ Symbol("kBuffer");
75162
- var kLength = /* @__PURE__ */ Symbol("kLength");
75347
+ var kBuffer = Symbol("kBuffer");
75348
+ var kLength = Symbol("kLength");
75163
75349
  var PerMessageDeflate = class {
75164
75350
  /** @type {import('node:zlib').InflateRaw} */
75165
75351
  #inflate;
@@ -79278,6 +79464,7 @@ var require_builder = __commonJS({
79278
79464
  var sdk_1 = __importDefault(require_sdk());
79279
79465
  var axios_1 = __importDefault(require_axios());
79280
79466
  var runtime_1 = require_runtime();
79467
+ var llm_1 = require_llm();
79281
79468
  var fs2 = __importStar(require("fs"));
79282
79469
  var path2 = __importStar(require("path"));
79283
79470
  var models_1 = require_models();
@@ -79425,6 +79612,10 @@ var require_builder = __commonJS({
79425
79612
  const present = buffers.map((b, i) => ({ b, i })).filter((x) => !!x.b);
79426
79613
  if (present.length <= 2)
79427
79614
  return present.map((x) => x.i);
79615
+ if ((0, llm_1.visionUnavailable)(true)) {
79616
+ onProgress("Photo relevance check needs an API key \u2014 keeping all photos.");
79617
+ return present.map((x) => x.i);
79618
+ }
79428
79619
  try {
79429
79620
  onProgress("Reviewing photos for relevance\u2026");
79430
79621
  const anthropic = new sdk_1.default({ apiKey: anthropicKey });
@@ -79566,7 +79757,6 @@ var require_builder = __commonJS({
79566
79757
  }
79567
79758
  }
79568
79759
  onProgress("Generating site with Claude...");
79569
- const anthropic = new sdk_1.default({ apiKey: anthropicKey });
79570
79760
  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
79761
  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
79762
  const customBlock = customInstructions?.trim() ? `
@@ -79740,25 +79930,25 @@ Return ONLY the complete App.jsx code. No markdown fences, no explanation, no pr
79740
79930
  const finalPrompt = extraSystemNote ? `${extraSystemNote}
79741
79931
 
79742
79932
  ${prompt}` : prompt;
79743
- const res2 = await anthropic.messages.create({
79933
+ const res2 = await (0, llm_1.generateText)({
79934
+ apiKey: anthropicKey,
79935
+ prompt: finalPrompt,
79744
79936
  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 }]
79937
+ // The API requires a max_tokens; set it to the model's ceiling rather
79938
+ // than an arbitrary low cap — truncation was the main build failure.
79939
+ // (Ignored by the claude_code backend, which uses its own limit.)
79940
+ maxTokens: 64e3,
79941
+ // Site generation can be slow; give the subprocess generous headroom.
79942
+ timeoutMs: 3e5
79751
79943
  });
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})`);
79944
+ lastStop = res2.stopReason;
79945
+ if (!res2.text) {
79946
+ throw new Error(`Claude returned no text (stop_reason=${res2.stopReason ?? "unknown"}, backend=${res2.backend})`);
79757
79947
  }
79758
- if (res2.stop_reason === "max_tokens") {
79948
+ if (res2.stopReason === "max_tokens") {
79759
79949
  onProgress(`\u26A0\uFE0E Claude hit the length limit \u2014 output was truncated.`);
79760
79950
  }
79761
- return textBlock.text.replace(/^```[a-z]*\s*/i, "").replace(/\s*```$/, "").trim();
79951
+ return res2.text.replace(/^```[a-z]*\s*/i, "").replace(/\s*```$/, "").trim();
79762
79952
  }
79763
79953
  let appCode = await generateOnce();
79764
79954
  if (!appCode.includes("export default App")) {
@@ -80168,7 +80358,6 @@ export default defineConfig({ plugins: [react()] });`;
80168
80358
  const { anthropicKey, appJsx, onProgress } = args;
80169
80359
  if (hasBookLink(appJsx))
80170
80360
  return appJsx;
80171
- const anthropic = new sdk_1.default({ apiKey: anthropicKey });
80172
80361
  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
80362
 
80174
80363
  REQUIREMENTS:
@@ -80184,17 +80373,17 @@ Source (App.jsx):
80184
80373
  \`\`\`jsx
80185
80374
  ${appJsx.slice(0, 4e4)}
80186
80375
  \`\`\``;
80187
- const res = await anthropic.messages.create({
80376
+ const res = await (0, llm_1.generateText)({
80377
+ apiKey: anthropicKey,
80378
+ prompt,
80188
80379
  model: (0, models_1.getPreferredModel)(),
80189
- max_tokens: 8192,
80190
- messages: [{ role: "user", content: prompt }]
80380
+ maxTokens: 8192
80191
80381
  });
80192
- const block = res.content[0];
80193
- if (block.type !== "text") {
80382
+ if (!res.text) {
80194
80383
  onProgress?.("Book link injection: Claude returned no text \u2014 using original.");
80195
80384
  return appJsx;
80196
80385
  }
80197
- const cleaned = block.text.replace(/^```[a-z]*\s*/i, "").replace(/\s*```$/, "").trim();
80386
+ const cleaned = res.text.replace(/^```[a-z]*\s*/i, "").replace(/\s*```$/, "").trim();
80198
80387
  if (!cleaned.includes("export default App")) {
80199
80388
  onProgress?.("Book link injection: output missing export default \u2014 using original.");
80200
80389
  return appJsx;
@@ -80254,7 +80443,6 @@ ${appJsx.slice(0, 4e4)}
80254
80443
  }
80255
80444
  if (!appJsx || appJsx.length < 200)
80256
80445
  return null;
80257
- const anthropic = new sdk_1.default({ apiKey: anthropicKey });
80258
80446
  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
80447
 
80260
80448
  Business context:
@@ -80287,15 +80475,15 @@ Return this exact shape:
80287
80475
  "contact": { "email": string, "hours": [string] }
80288
80476
  }`;
80289
80477
  try {
80290
- const res = await anthropic.messages.create({
80478
+ const res = await (0, llm_1.generateText)({
80479
+ apiKey: anthropicKey,
80480
+ prompt,
80291
80481
  model: (0, models_1.getPreferredModel)(),
80292
- max_tokens: 2048,
80293
- messages: [{ role: "user", content: prompt }]
80482
+ maxTokens: 2048
80294
80483
  });
80295
- const block = res.content[0];
80296
- if (block.type !== "text")
80484
+ if (!res.text)
80297
80485
  return null;
80298
- const cleaned = block.text.replace(/^```(?:json)?\s*/i, "").replace(/\s*```\s*$/, "").trim();
80486
+ const cleaned = res.text.replace(/^```(?:json)?\s*/i, "").replace(/\s*```\s*$/, "").trim();
80299
80487
  const parsed = JSON.parse(cleaned);
80300
80488
  if (!parsed || typeof parsed !== "object")
80301
80489
  return null;
@@ -82063,7 +82251,7 @@ var require_package = __commonJS({
82063
82251
  "package.json"(exports2, module2) {
82064
82252
  module2.exports = {
82065
82253
  name: "sproutkit-code",
82066
- version: "0.2.1",
82254
+ version: "0.3.0",
82067
82255
  description: "Sproutkit in your terminal \u2014 find leads, build sites, run outreach, all via chat.",
82068
82256
  bin: {
82069
82257
  sproutkit: "./dist/index.js"
@@ -82110,6 +82298,7 @@ var cms = require_cms_provision();
82110
82298
  var bookingPreset = require_booking_preset();
82111
82299
  var builder = require_builder();
82112
82300
  var models = require_models();
82301
+ var llm = require_llm();
82113
82302
  var initDatabase = db.initDatabase;
82114
82303
  var getDb = db.getDb;
82115
82304
  var chatWithTools = chat.chatWithTools;
@@ -82121,10 +82310,13 @@ var refreshModels = models.refreshModels;
82121
82310
  var refreshIfStale = models.refreshIfStale;
82122
82311
  var listCachedModels = models.listCachedModels;
82123
82312
  var getPreferredModel = models.getPreferredModel;
82313
+ var checkClaudeCodeAuth = llm.checkClaudeCodeAuth;
82314
+ var llmBackend = llm.getBackend;
82315
+ var claudeBin = llm.claudeBin;
82124
82316
 
82125
82317
  // src/config.ts
82126
82318
  var REQUIRED_KEYS = [
82127
- { key: "anthropic_key", label: "Anthropic API key", hint: "sk-ant-\u2026 \u2014 powers the chat + site generation", required: true },
82319
+ { key: "anthropic_key", label: "Anthropic API key", hint: "sk-ant-\u2026 \u2014 powers the chat + site generation", required: true, apiBackendOnly: true },
82128
82320
  { key: "places_key", label: "Google Places API key", hint: "finds businesses, photos, reviews", required: true },
82129
82321
  { key: "vercel_token", label: "Vercel token", hint: "deploys the generated sites", required: true },
82130
82322
  { key: "blob_token", label: "Vercel Blob token", hint: "optional \u2014 only needed for CMS/booking hand-off", required: false }
@@ -82139,12 +82331,19 @@ function setSetting(key, value) {
82139
82331
  [key, value]
82140
82332
  );
82141
82333
  }
82334
+ function getBackend() {
82335
+ return getSetting("ai_backend") === "claude_code" ? "claude_code" : "api";
82336
+ }
82337
+ function setBackend(b) {
82338
+ setSetting("ai_backend", b);
82339
+ }
82142
82340
  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
- }));
82341
+ const backend = getBackend();
82342
+ return REQUIRED_KEYS.filter((k) => {
82343
+ if (!k.required) return false;
82344
+ if ("apiBackendOnly" in k && k.apiBackendOnly && backend !== "api") return false;
82345
+ return !getSetting(k.key);
82346
+ }).map((k) => ({ key: k.key, label: k.label, hint: k.hint }));
82148
82347
  }
82149
82348
 
82150
82349
  // src/license.ts
@@ -82306,6 +82505,59 @@ var Status = class {
82306
82505
  };
82307
82506
 
82308
82507
  // src/onboarding.ts
82508
+ var import_child_process = require("child_process");
82509
+ function claudeCliPresent() {
82510
+ try {
82511
+ const bin = process.env.SPROUTKIT_CLAUDE_BIN || "claude";
82512
+ const r = (0, import_child_process.spawnSync)(bin, ["--version"], { stdio: "ignore", timeout: 1e4 });
82513
+ return r.status === 0;
82514
+ } catch {
82515
+ return false;
82516
+ }
82517
+ }
82518
+ async function chooseBackend(force) {
82519
+ if (!force && getSetting("ai_backend")) return getBackend();
82520
+ const hasClaude = claudeCliPresent();
82521
+ say(` ${c.bold("How should Sproutkit talk to Claude?")}`);
82522
+ say(
82523
+ ` ${c.greenBold("1")} Use my Claude subscription ${c.dim(
82524
+ hasClaude ? "(via Claude Code \u2014 no API key, uses your Pro/Max plan)" : "(requires the Claude Code CLI \u2014 not detected)"
82525
+ )}`
82526
+ );
82527
+ say(` ${c.greenBold("2")} Use an Anthropic API key ${c.dim("(pay-as-you-go, sk-ant-\u2026)")}`);
82528
+ say();
82529
+ const pick = await ask(c.green(" Pick 1 or 2 (default 2): "));
82530
+ const wantsSub = pick.trim() === "1";
82531
+ if (!wantsSub) {
82532
+ setBackend("api");
82533
+ return "api";
82534
+ }
82535
+ if (!claudeCliPresent()) {
82536
+ say(c.amber(" The Claude Code CLI isn't installed or isn't on your PATH."));
82537
+ say(c.dim(" Install it from https://claude.com/claude-code, run 'claude /login', then re-run 'sproutkit setup'."));
82538
+ say(c.dim(" Falling back to the API-key path for now."));
82539
+ say();
82540
+ setBackend("api");
82541
+ return "api";
82542
+ }
82543
+ say(c.dim(" \u2026 checking that Claude Code is logged in"));
82544
+ let auth = await checkClaudeCodeAuth();
82545
+ while (!auth.ok) {
82546
+ say(c.amber(` Claude Code isn't authenticated: ${auth.reason}`));
82547
+ say(` Log in in another terminal with: ${c.bold("claude /login")}`);
82548
+ const again = await ask(c.green(" Press Enter once you've logged in (or type 'skip' to use an API key): "));
82549
+ if (again.trim().toLowerCase() === "skip") {
82550
+ setBackend("api");
82551
+ return "api";
82552
+ }
82553
+ say(c.dim(" \u2026 re-checking"));
82554
+ auth = await checkClaudeCodeAuth();
82555
+ }
82556
+ setBackend("claude_code");
82557
+ say(c.green(" \u2713 Using your Claude subscription \u2014 no API key needed for generation."));
82558
+ say();
82559
+ return "claude_code";
82560
+ }
82309
82561
  async function onboardLicense(force) {
82310
82562
  if (!force) {
82311
82563
  const state = await check();
@@ -82342,7 +82594,9 @@ async function runOnboarding(force = false) {
82342
82594
  say();
82343
82595
  const ok = await onboardLicense(force);
82344
82596
  if (!ok) return false;
82597
+ const backend = await chooseBackend(force);
82345
82598
  for (const k of REQUIRED_KEYS) {
82599
+ if ("apiBackendOnly" in k && k.apiBackendOnly && backend !== "api") continue;
82346
82600
  const existing = getSetting(k.key);
82347
82601
  if (existing && !force) continue;
82348
82602
  const req = k.required ? "" : c.dim(" (optional \u2014 press Enter to skip)");
@@ -82597,7 +82851,14 @@ function labelFor(t) {
82597
82851
  async function runTurn(userMessage) {
82598
82852
  const apiKey = getSetting("anthropic_key");
82599
82853
  if (!apiKey) {
82600
- say(c.red(" No Anthropic key set. Run 'sproutkit setup'."));
82854
+ if (getBackend() === "claude_code") {
82855
+ say(c.amber(" You're on the Claude subscription backend, which powers site building."));
82856
+ say(c.dim(" The chat assistant (lead-finding & outreach dispatch) additionally needs an"));
82857
+ say(c.dim(" Anthropic API key. Add one with 'sproutkit setup', or build sites directly:"));
82858
+ say(c.dim(' sproutkit "build a site for <business>"'));
82859
+ } else {
82860
+ say(c.red(" No Anthropic key set. Run 'sproutkit setup'."));
82861
+ }
82601
82862
  return;
82602
82863
  }
82603
82864
  persist("user", userMessage);
@@ -82672,9 +82933,9 @@ async function runTurn(userMessage) {
82672
82933
  }
82673
82934
 
82674
82935
  // src/update.ts
82675
- var import_child_process = require("child_process");
82936
+ var import_child_process2 = require("child_process");
82676
82937
  var import_util = require("util");
82677
- var execFileP = (0, import_util.promisify)(import_child_process.execFile);
82938
+ var execFileP = (0, import_util.promisify)(import_child_process2.execFile);
82678
82939
  var PKG = "sproutkit-code";
82679
82940
  var CURRENT_VERSION = require_package().version;
82680
82941
  async function latestOnRegistry() {