sproutkit-code 0.10.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +65 -5
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -82505,12 +82505,53 @@ Return this exact shape:
|
|
|
82505
82505
|
}
|
|
82506
82506
|
});
|
|
82507
82507
|
|
|
82508
|
+
// ../desktop/dist/main/lib/vercel-store.js
|
|
82509
|
+
var require_vercel_store = __commonJS({
|
|
82510
|
+
"../desktop/dist/main/lib/vercel-store.js"(exports2) {
|
|
82511
|
+
"use strict";
|
|
82512
|
+
var __importDefault = exports2 && exports2.__importDefault || function(mod) {
|
|
82513
|
+
return mod && mod.__esModule ? mod : { "default": mod };
|
|
82514
|
+
};
|
|
82515
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
82516
|
+
exports2.createBlobStore = createBlobStore2;
|
|
82517
|
+
var axios_1 = __importDefault(require_axios());
|
|
82518
|
+
async function createBlobStore2(args) {
|
|
82519
|
+
const name = (args.name || "sproutkit").slice(0, 70);
|
|
82520
|
+
const url = "https://api.vercel.com/storage/stores/blob" + (args.teamId ? `?teamId=${encodeURIComponent(args.teamId)}` : "");
|
|
82521
|
+
try {
|
|
82522
|
+
const res = await axios_1.default.post(url, { name }, {
|
|
82523
|
+
headers: {
|
|
82524
|
+
Authorization: `Bearer ${args.vercelToken}`,
|
|
82525
|
+
"Content-Type": "application/json"
|
|
82526
|
+
},
|
|
82527
|
+
timeout: 3e4
|
|
82528
|
+
});
|
|
82529
|
+
const store = res.data?.store ?? {};
|
|
82530
|
+
const storeId = store.id || store.storeId;
|
|
82531
|
+
return {
|
|
82532
|
+
ok: true,
|
|
82533
|
+
storeId,
|
|
82534
|
+
dashboardUrl: "https://vercel.com/dashboard/stores"
|
|
82535
|
+
};
|
|
82536
|
+
} catch (e) {
|
|
82537
|
+
const err = e;
|
|
82538
|
+
const status = err.response?.status;
|
|
82539
|
+
const msg = err.response?.data?.error?.message ?? err.message;
|
|
82540
|
+
if (status === 409 || /already|exists|conflict/i.test(msg)) {
|
|
82541
|
+
return { ok: false, alreadyExists: true, error: msg };
|
|
82542
|
+
}
|
|
82543
|
+
return { ok: false, error: msg };
|
|
82544
|
+
}
|
|
82545
|
+
}
|
|
82546
|
+
}
|
|
82547
|
+
});
|
|
82548
|
+
|
|
82508
82549
|
// package.json
|
|
82509
82550
|
var require_package = __commonJS({
|
|
82510
82551
|
"package.json"(exports2, module2) {
|
|
82511
82552
|
module2.exports = {
|
|
82512
82553
|
name: "sproutkit-code",
|
|
82513
|
-
version: "0.
|
|
82554
|
+
version: "0.11.0",
|
|
82514
82555
|
description: "Sproutkit in your terminal \u2014 find leads, build sites, run outreach, all via chat.",
|
|
82515
82556
|
bin: {
|
|
82516
82557
|
sproutkit: "./dist/index.js"
|
|
@@ -82557,6 +82598,7 @@ var autoMode = require_auto_mode();
|
|
|
82557
82598
|
var cms = require_cms_provision();
|
|
82558
82599
|
var bookingPreset = require_booking_preset();
|
|
82559
82600
|
var builder = require_builder();
|
|
82601
|
+
var vercelStore = require_vercel_store();
|
|
82560
82602
|
var models = require_models();
|
|
82561
82603
|
var llm = require_llm();
|
|
82562
82604
|
var initDatabase = db.initDatabase;
|
|
@@ -82568,6 +82610,7 @@ var provisionCmsForLead = cms.provisionCmsForLead;
|
|
|
82568
82610
|
var generatePreset = bookingPreset.generatePreset;
|
|
82569
82611
|
var deployBookingOnly = builder.deployBookingOnly;
|
|
82570
82612
|
var deployStandaloneBooking = builder.deployStandaloneBooking;
|
|
82613
|
+
var createBlobStore = vercelStore.createBlobStore;
|
|
82571
82614
|
var refreshModels = models.refreshModels;
|
|
82572
82615
|
var refreshIfStale = models.refreshIfStale;
|
|
82573
82616
|
var listCachedModels = models.listCachedModels;
|
|
@@ -83029,6 +83072,25 @@ async function runOnboarding(force = false) {
|
|
|
83029
83072
|
}
|
|
83030
83073
|
|
|
83031
83074
|
// src/invoke-ipc.ts
|
|
83075
|
+
async function requireBlobToken(vercelToken, emit, leadId) {
|
|
83076
|
+
const existing = getSetting("blob_token");
|
|
83077
|
+
if (existing) return existing;
|
|
83078
|
+
emit("bookings:progress", { leadId, msg: "No Blob token yet \u2014 creating a Blob store for you\u2026" });
|
|
83079
|
+
const created = await createBlobStore({ vercelToken, name: "sproutkit" });
|
|
83080
|
+
if (created.ok) {
|
|
83081
|
+
throw new Error(
|
|
83082
|
+
"Created a Vercel Blob store for you \u2713 \u2014 one last one-time step: open " + (created.dashboardUrl || "https://vercel.com/dashboard/stores") + " , open the 'sproutkit' store, copy its BLOB_READ_WRITE_TOKEN, then run 'sproutkit setup' and paste it. You only do this once \u2014 it's reused for every booking site."
|
|
83083
|
+
);
|
|
83084
|
+
}
|
|
83085
|
+
if (created.alreadyExists) {
|
|
83086
|
+
throw new Error(
|
|
83087
|
+
"You already have a Blob store. Open https://vercel.com/dashboard/stores , copy its BLOB_READ_WRITE_TOKEN, and run 'sproutkit setup' to paste it (one-time \u2014 reused for all sites)."
|
|
83088
|
+
);
|
|
83089
|
+
}
|
|
83090
|
+
throw new Error(
|
|
83091
|
+
`Booking needs a Vercel Blob token and I couldn't auto-create a store (${created.error ?? "unknown"}). Create one at https://vercel.com/dashboard/stores (Create \u2192 Blob), copy BLOB_READ_WRITE_TOKEN, then 'sproutkit setup'.`
|
|
83092
|
+
);
|
|
83093
|
+
}
|
|
83032
83094
|
function makeInvokeIpc(emit) {
|
|
83033
83095
|
return async (channel, payload) => {
|
|
83034
83096
|
if (channel === "auto:build:start") {
|
|
@@ -83080,11 +83142,10 @@ function makeInvokeIpc(emit) {
|
|
|
83080
83142
|
if (!lead) throw new Error("Lead not found");
|
|
83081
83143
|
const anthropicKey = getSetting("anthropic_key");
|
|
83082
83144
|
const vercelToken = getSetting("vercel_token");
|
|
83083
|
-
const blobToken = getSetting("blob_token");
|
|
83084
83145
|
const resendKey = getSetting("resend_key");
|
|
83085
83146
|
if (!anthropicKey) throw new Error("Anthropic API key not set");
|
|
83086
83147
|
if (!vercelToken) throw new Error("Vercel token not set");
|
|
83087
|
-
|
|
83148
|
+
const blobToken = await requireBlobToken(vercelToken, emit, p.leadId);
|
|
83088
83149
|
emit("bookings:progress", { leadId: p.leadId, msg: "Designing the booking form\u2026" });
|
|
83089
83150
|
const leadInfo = lead;
|
|
83090
83151
|
const config = await generatePreset({
|
|
@@ -83122,10 +83183,9 @@ function makeInvokeIpc(emit) {
|
|
|
83122
83183
|
const lead = db2.get("SELECT * FROM leads WHERE id = ?", [p.leadId]);
|
|
83123
83184
|
if (!lead) throw new Error("Lead not found");
|
|
83124
83185
|
const vercelToken = getSetting("vercel_token");
|
|
83125
|
-
const blobToken = getSetting("blob_token");
|
|
83126
83186
|
const resendKey = getSetting("resend_key");
|
|
83127
83187
|
if (!vercelToken) throw new Error("Vercel token not set");
|
|
83128
|
-
|
|
83188
|
+
const blobToken = await requireBlobToken(vercelToken, emit, p.leadId);
|
|
83129
83189
|
emit("bookings:progress", { leadId: p.leadId, msg: "Designing the booking form\u2026" });
|
|
83130
83190
|
const leadInfo = lead;
|
|
83131
83191
|
const config = await generatePreset({
|