sparkecoder 0.1.105 → 0.1.107
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/agent/index.d.ts +3 -3
- package/dist/agent/index.js.map +1 -1
- package/dist/cli.js +28 -10
- package/dist/cli.js.map +1 -1
- package/dist/db/index.d.ts +2 -2
- package/dist/{index-Ba7GUFvL.d.ts → index-D5l-DMGC.d.ts} +83 -83
- package/dist/index.d.ts +5 -5
- package/dist/index.js +12 -5
- package/dist/index.js.map +1 -1
- package/dist/{schema-CYSKJZ3m.d.ts → schema-ecQSnCMz.d.ts} +3 -3
- package/dist/{search-CVVfuBPZ.d.ts → search-DOzC4ojH.d.ts} +4 -4
- package/dist/server/index.js +12 -5
- package/dist/server/index.js.map +1 -1
- package/dist/tools/index.d.ts +3 -3
- package/dist/tools/index.js.map +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/web/.next/build-manifest.json +2 -2
- package/web/.next/standalone/web/.next/prerender-manifest.json +3 -3
- package/web/.next/standalone/web/.next/server/app/(main)/agents/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/(main)/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/(main)/session/[id]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/(main)/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/standalone/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.html +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/agents.html +1 -1
- package/web/.next/standalone/web/.next/server/app/agents.rsc +4 -4
- package/web/.next/standalone/web/.next/server/app/agents.segments/!KG1haW4p/agents/__PAGE__.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/agents.segments/!KG1haW4p/agents.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/agents.segments/!KG1haW4p.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/agents.segments/_full.segment.rsc +4 -4
- package/web/.next/standalone/web/.next/server/app/agents.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/agents.segments/_index.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/agents.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.html +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/installation.rsc +3 -3
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_full.segment.rsc +3 -3
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_index.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation/__PAGE__.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.html +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/skills.rsc +3 -3
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_full.segment.rsc +3 -3
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_index.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.html +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/tools.rsc +3 -3
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_full.segment.rsc +3 -3
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_index.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools/__PAGE__.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs.html +2 -2
- package/web/.next/standalone/web/.next/server/app/docs.rsc +3 -3
- package/web/.next/standalone/web/.next/server/app/docs.segments/_full.segment.rsc +3 -3
- package/web/.next/standalone/web/.next/server/app/docs.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.segments/_index.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/docs.segments/docs.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/index.html +1 -1
- package/web/.next/standalone/web/.next/server/app/index.rsc +4 -4
- package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p/__PAGE__.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/index.segments/_full.segment.rsc +4 -4
- package/web/.next/standalone/web/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.html +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.rsc +4 -4
- package/web/.next/standalone/web/.next/server/app/settings.segments/!KG1haW4p/settings/__PAGE__.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/settings.segments/!KG1haW4p/settings.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.segments/!KG1haW4p.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/settings.segments/_full.segment.rsc +4 -4
- package/web/.next/standalone/web/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.segments/_index.segment.rsc +2 -2
- package/web/.next/standalone/web/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/pages/404.html +1 -1
- package/web/.next/standalone/web/.next/server/pages/500.html +2 -2
- package/web/.next/standalone/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/server-reference-manifest.json +1 -1
- package/web/.next/standalone/web/.next/static/chunks/b203b9aa975135d3.js +1 -0
- package/web/.next/standalone/web/.next/static/static/chunks/b203b9aa975135d3.js +1 -0
- package/web/.next/standalone/web/src/lib/config.ts +55 -6
- package/web/.next/static/chunks/b203b9aa975135d3.js +1 -0
- package/web/.next/standalone/web/.next/static/chunks/4239395558fab3ef.js +0 -1
- package/web/.next/standalone/web/.next/static/static/chunks/4239395558fab3ef.js +0 -1
- package/web/.next/static/chunks/4239395558fab3ef.js +0 -1
- /package/web/.next/standalone/web/.next/static/{DBWUfpm5AXF1O5Rh2hlWx → 9B80CeRYeYvnsEougmuLs}/_buildManifest.js +0 -0
- /package/web/.next/standalone/web/.next/static/{DBWUfpm5AXF1O5Rh2hlWx → 9B80CeRYeYvnsEougmuLs}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/standalone/web/.next/static/{DBWUfpm5AXF1O5Rh2hlWx → 9B80CeRYeYvnsEougmuLs}/_ssgManifest.js +0 -0
- /package/web/.next/standalone/web/.next/static/static/{DBWUfpm5AXF1O5Rh2hlWx → 9B80CeRYeYvnsEougmuLs}/_buildManifest.js +0 -0
- /package/web/.next/standalone/web/.next/static/static/{DBWUfpm5AXF1O5Rh2hlWx → 9B80CeRYeYvnsEougmuLs}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/standalone/web/.next/static/static/{DBWUfpm5AXF1O5Rh2hlWx → 9B80CeRYeYvnsEougmuLs}/_ssgManifest.js +0 -0
- /package/web/.next/static/{DBWUfpm5AXF1O5Rh2hlWx → 9B80CeRYeYvnsEougmuLs}/_buildManifest.js +0 -0
- /package/web/.next/static/{DBWUfpm5AXF1O5Rh2hlWx → 9B80CeRYeYvnsEougmuLs}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{DBWUfpm5AXF1O5Rh2hlWx → 9B80CeRYeYvnsEougmuLs}/_ssgManifest.js +0 -0
package/dist/cli.js
CHANGED
|
@@ -1329,11 +1329,18 @@ function getStoredAuthKeyInfo() {
|
|
|
1329
1329
|
}
|
|
1330
1330
|
return null;
|
|
1331
1331
|
}
|
|
1332
|
-
async function registerWithRemoteServer(serverUrl, name) {
|
|
1332
|
+
async function registerWithRemoteServer(serverUrl, name, token) {
|
|
1333
|
+
const registerToken = token || process.env.SPARKECODER_REGISTER_TOKEN || process.env.SPARKECODER_SETUP_SECRET;
|
|
1333
1334
|
const response = await fetch(`${serverUrl}/auth/register`, {
|
|
1334
1335
|
method: "POST",
|
|
1335
|
-
headers: {
|
|
1336
|
-
|
|
1336
|
+
headers: {
|
|
1337
|
+
"Content-Type": "application/json",
|
|
1338
|
+
...registerToken ? { "X-Register-Token": registerToken } : {}
|
|
1339
|
+
},
|
|
1340
|
+
body: JSON.stringify({
|
|
1341
|
+
name: name || `CLI ${(/* @__PURE__ */ new Date()).toISOString()}`,
|
|
1342
|
+
...registerToken ? { token: registerToken } : {}
|
|
1343
|
+
})
|
|
1337
1344
|
});
|
|
1338
1345
|
if (!response.ok) {
|
|
1339
1346
|
const error = await response.json().catch(() => ({}));
|
|
@@ -1343,7 +1350,7 @@ async function registerWithRemoteServer(serverUrl, name) {
|
|
|
1343
1350
|
saveAuthKey(data.authKey, data.userId);
|
|
1344
1351
|
return data;
|
|
1345
1352
|
}
|
|
1346
|
-
async function ensureRemoteAuthKey(serverUrl) {
|
|
1353
|
+
async function ensureRemoteAuthKey(serverUrl, token) {
|
|
1347
1354
|
if (process.env.SPARKECODER_AUTH_KEY) {
|
|
1348
1355
|
return process.env.SPARKECODER_AUTH_KEY;
|
|
1349
1356
|
}
|
|
@@ -1351,7 +1358,7 @@ async function ensureRemoteAuthKey(serverUrl) {
|
|
|
1351
1358
|
if (storedKey) {
|
|
1352
1359
|
return storedKey;
|
|
1353
1360
|
}
|
|
1354
|
-
const { authKey: authKey3 } = await registerWithRemoteServer(serverUrl);
|
|
1361
|
+
const { authKey: authKey3 } = await registerWithRemoteServer(serverUrl, void 0, token);
|
|
1355
1362
|
return authKey3;
|
|
1356
1363
|
}
|
|
1357
1364
|
function getApiKeysPath() {
|
|
@@ -16909,7 +16916,7 @@ program.command("slack-setup").description("Interactively configure Slack integr
|
|
|
16909
16916
|
process.exit(1);
|
|
16910
16917
|
}
|
|
16911
16918
|
});
|
|
16912
|
-
program.command("cloudflared-setup").description("Auto-detect cloudflared + set up a tunnel to this sparkecoder (interactive)").option("--port <port>", "Local sparkecoder web UI port", "6969").option("--api-port <port>", "Local sparkecoder API port", "3141").option("--hostname <host>", "Public hostname you want to assign (e.g. sf-mac-1.example.com)").option("--tunnel-name <name>", "Tunnel name to reuse or create", "sparkecoder").option("--team <team>", "Your Cloudflare Access team subdomain (e.g. studyfetch -> studyfetch.cloudflareaccess.com)").option("--allowed-emails <emails>", "Comma-separated allow-listed emails").option("-y, --yes", "Skip confirmations and do everything non-interactively", false).option("--print-only", "Skip auto-setup and just print the copy/paste recipe", false).option("--cf-api-token <token>", "Cloudflare API token (Account: Cloudflare Tunnel: Edit + Zone: DNS: Edit). Or set CF_API_TOKEN env").option("--cf-account-id <id>", "Cloudflare account ID. Or set CF_ACCOUNT_ID env").option("--cf-zone-id <id>", "Cloudflare zone ID for the hostname. Or set CF_ZONE_ID env").option("--remote", "Provision the tunnel via the remote sparkecoder server (server holds the Cloudflare credentials)", false).option("--setup-secret <secret>", "
|
|
16919
|
+
program.command("cloudflared-setup").description("Auto-detect cloudflared + set up a tunnel to this sparkecoder (interactive)").option("--port <port>", "Local sparkecoder web UI port", "6969").option("--api-port <port>", "Local sparkecoder API port", "3141").option("--hostname <host>", "Public hostname you want to assign (e.g. sf-mac-1.example.com)").option("--tunnel-name <name>", "Tunnel name to reuse or create", "sparkecoder").option("--team <team>", "Your Cloudflare Access team subdomain (e.g. studyfetch -> studyfetch.cloudflareaccess.com)").option("--allowed-emails <emails>", "Comma-separated allow-listed emails").option("-y, --yes", "Skip confirmations and do everything non-interactively", false).option("--print-only", "Skip auto-setup and just print the copy/paste recipe", false).option("--cf-api-token <token>", "Cloudflare API token (Account: Cloudflare Tunnel: Edit + Zone: DNS: Edit). Or set CF_API_TOKEN env").option("--cf-account-id <id>", "Cloudflare account ID. Or set CF_ACCOUNT_ID env").option("--cf-zone-id <id>", "Cloudflare zone ID for the hostname. Or set CF_ZONE_ID env").option("--remote", "Provision the tunnel via the remote sparkecoder server (server holds the Cloudflare credentials)", false).option("--setup-secret <secret>", "Setup secret (required when server has SETUP_SECRET / TUNNEL_SETUP_SECRET set). Falls back to env SPARKECODER_SETUP_SECRET, then SPARKECODER_TUNNEL_SECRET").option("--new-tunnel", "In --remote mode: force a new tunnel even if this user already has one (default: re-use existing)", false).action(async (options) => {
|
|
16913
16920
|
const { execSync: execSync2, spawnSync } = await import("child_process");
|
|
16914
16921
|
const { homedir: homedir2 } = await import("os");
|
|
16915
16922
|
const { copyFileSync } = await import("fs");
|
|
@@ -16942,7 +16949,14 @@ program.command("cloudflared-setup").description("Auto-detect cloudflared + set
|
|
|
16942
16949
|
}
|
|
16943
16950
|
return cfPath;
|
|
16944
16951
|
};
|
|
16952
|
+
const uninstallService = () => {
|
|
16953
|
+
spawnSync("cloudflared", ["service", "uninstall"], { stdio: "ignore" });
|
|
16954
|
+
if (process.platform !== "win32") {
|
|
16955
|
+
spawnSync("sudo", ["cloudflared", "service", "uninstall"], { stdio: "ignore" });
|
|
16956
|
+
}
|
|
16957
|
+
};
|
|
16945
16958
|
const installAsService = (token) => {
|
|
16959
|
+
uninstallService();
|
|
16946
16960
|
let r = spawnSync("cloudflared", ["service", "install", token], { stdio: "inherit" });
|
|
16947
16961
|
if (r.status !== 0 && process.platform !== "win32") {
|
|
16948
16962
|
console.log(chalk.dim("Retrying with sudo..."));
|
|
@@ -16963,10 +16977,11 @@ program.command("cloudflared-setup").description("Auto-detect cloudflared + set
|
|
|
16963
16977
|
if (!authKey3) {
|
|
16964
16978
|
authKey3 = await ensureRemoteAuthKey(remoteUrl);
|
|
16965
16979
|
}
|
|
16966
|
-
const setupSecret = options.setupSecret || process.env.SPARKECODER_TUNNEL_SECRET;
|
|
16980
|
+
const setupSecret = options.setupSecret || process.env.SPARKECODER_SETUP_SECRET || process.env.SPARKECODER_TUNNEL_SECRET;
|
|
16967
16981
|
const hostname = options.hostname;
|
|
16982
|
+
const path = options.newTunnel ? "/tunnels" : "/tunnels/ensure";
|
|
16968
16983
|
console.log(chalk.bold(
|
|
16969
|
-
hostname ? `Requesting tunnel for ${hostname} from remote server...` : "Requesting auto-generated tunnel from remote server..."
|
|
16984
|
+
options.newTunnel ? hostname ? `Requesting NEW tunnel for ${hostname} from remote server...` : "Requesting NEW auto-generated tunnel from remote server..." : "Ensuring tunnel exists on remote server (re-using if present)..."
|
|
16970
16985
|
));
|
|
16971
16986
|
const reqBody = {
|
|
16972
16987
|
port: Number(apiPort),
|
|
@@ -16974,7 +16989,7 @@ program.command("cloudflared-setup").description("Auto-detect cloudflared + set
|
|
|
16974
16989
|
name: tunnelName
|
|
16975
16990
|
};
|
|
16976
16991
|
if (hostname) reqBody.hostname = hostname;
|
|
16977
|
-
const res = await fetch(`${remoteUrl.replace(/\/$/, "")}
|
|
16992
|
+
const res = await fetch(`${remoteUrl.replace(/\/$/, "")}${path}`, {
|
|
16978
16993
|
method: "POST",
|
|
16979
16994
|
headers: {
|
|
16980
16995
|
"Content-Type": "application/json",
|
|
@@ -16989,7 +17004,10 @@ program.command("cloudflared-setup").description("Auto-detect cloudflared + set
|
|
|
16989
17004
|
process.exitCode = 1;
|
|
16990
17005
|
return;
|
|
16991
17006
|
}
|
|
16992
|
-
const { tunnelToken, hostname: provisionedHost, apiHostname } = await res.json();
|
|
17007
|
+
const { tunnelToken, hostname: provisionedHost, apiHostname, reused } = await res.json();
|
|
17008
|
+
if (reused) {
|
|
17009
|
+
console.log(chalk.dim("\u2713 Re-using existing tunnel \u2014 no new tunnel created on Cloudflare."));
|
|
17010
|
+
}
|
|
16993
17011
|
const cfPath = await installCloudflaredIfNeeded();
|
|
16994
17012
|
if (!cfPath) {
|
|
16995
17013
|
console.log(chalk.yellow("cloudflared not installed; run this once installed:"));
|