burnless 0.1.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.
@@ -0,0 +1,119 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'node:module';
3
+ import { fileURLToPath as __fileURLToPath } from 'node:url';
4
+ import { dirname as __pathDirname } from 'node:path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __pathDirname(__filename);
8
+ import {
9
+ configDir
10
+ } from "./chunk-BN3QFA6Z.js";
11
+
12
+ // src/bootstrap/release.ts
13
+ import { execFileSync } from "child_process";
14
+ import { createHash } from "crypto";
15
+ import {
16
+ existsSync,
17
+ mkdirSync,
18
+ mkdtempSync,
19
+ readdirSync,
20
+ readFileSync,
21
+ renameSync,
22
+ rmSync,
23
+ symlinkSync,
24
+ writeFileSync
25
+ } from "fs";
26
+ import { tmpdir } from "os";
27
+ import { dirname, join } from "path";
28
+ import { fileURLToPath } from "url";
29
+ var PUBLIC_RELEASE_REPO = "hoaxnerd/burnless";
30
+ function publicReleaseBaseFor(version) {
31
+ return `https://github.com/${PUBLIC_RELEASE_REPO}/releases/download/v${version}/`;
32
+ }
33
+ function resolveReleaseSource(version, env = process.env) {
34
+ const base = env.BURNLESS_RELEASE_BASE_URL?.trim();
35
+ return base && base.length > 0 ? base : publicReleaseBaseFor(version);
36
+ }
37
+ function versionsDir(home) {
38
+ return join(configDir(home), "versions");
39
+ }
40
+ function tarballName(version) {
41
+ return `burnless-${version}.tar.gz`;
42
+ }
43
+ async function fetchBytes(url) {
44
+ if (url.startsWith("file:")) {
45
+ return readFileSync(fileURLToPath(url));
46
+ }
47
+ const res = await fetch(url);
48
+ if (!res.ok) throw new Error(`download failed (${res.status}) for ${url}`);
49
+ return Buffer.from(await res.arrayBuffer());
50
+ }
51
+ async function downloadAndVerify(opts) {
52
+ const name = tarballName(opts.version);
53
+ const baseSlash = opts.base.endsWith("/") ? opts.base : opts.base + "/";
54
+ const tarBytes = await fetchBytes(baseSlash + name);
55
+ const shaText = (await fetchBytes(baseSlash + name + ".sha256")).toString("utf8");
56
+ const expected = shaText.trim().split(/\s+/)[0]?.toLowerCase();
57
+ const actual = createHash("sha256").update(tarBytes).digest("hex");
58
+ if (!expected || expected !== actual) {
59
+ throw new Error(`checksum mismatch for ${name} (expected ${expected ?? "<none>"}, got ${actual})`);
60
+ }
61
+ mkdirSync(dirname(opts.dest), { recursive: true });
62
+ writeFileSync(opts.dest, tarBytes);
63
+ }
64
+ function extractArtifact(opts) {
65
+ const vdir = versionsDir(opts.home);
66
+ mkdirSync(vdir, { recursive: true });
67
+ const staging = mkdtempSync(join(vdir, `.staging-${opts.version}-`));
68
+ try {
69
+ execFileSync("tar", ["-xzf", opts.tarball, "-C", staging], { stdio: "inherit" });
70
+ const final = join(vdir, opts.version);
71
+ rmSync(final, { recursive: true, force: true });
72
+ renameSync(staging, final);
73
+ return final;
74
+ } catch (e) {
75
+ rmSync(staging, { recursive: true, force: true });
76
+ throw e;
77
+ }
78
+ }
79
+ function flipCurrent(version, home) {
80
+ const vdir = versionsDir(home);
81
+ const cur = join(vdir, "current");
82
+ const tmp = join(vdir, `.current-${version}`);
83
+ rmSync(tmp, { force: true });
84
+ symlinkSync(version, tmp);
85
+ renameSync(tmp, cur);
86
+ }
87
+ function installedVersions(home) {
88
+ const vdir = versionsDir(home);
89
+ if (!existsSync(vdir)) return [];
90
+ return readdirSync(vdir, { withFileTypes: true }).filter((e) => e.isDirectory() && !e.name.startsWith(".")).map((e) => e.name);
91
+ }
92
+ async function ensureArtifact(opts) {
93
+ const base = opts.base ?? resolveReleaseSource(opts.version);
94
+ const vdir = versionsDir(opts.home);
95
+ const target = join(vdir, opts.version);
96
+ if (!existsSync(join(target, ".burnless-artifact"))) {
97
+ const dl = join(tmpdir(), `burnless-${opts.version}-${process.pid}.tar.gz`);
98
+ try {
99
+ await downloadAndVerify({ base, version: opts.version, dest: dl });
100
+ extractArtifact({ tarball: dl, version: opts.version, home: opts.home });
101
+ } finally {
102
+ rmSync(dl, { force: true });
103
+ }
104
+ }
105
+ if (opts.flip !== false) flipCurrent(opts.version, opts.home);
106
+ return target;
107
+ }
108
+
109
+ export {
110
+ PUBLIC_RELEASE_REPO,
111
+ publicReleaseBaseFor,
112
+ resolveReleaseSource,
113
+ versionsDir,
114
+ downloadAndVerify,
115
+ extractArtifact,
116
+ flipCurrent,
117
+ installedVersions,
118
+ ensureArtifact
119
+ };
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'node:module';
3
+ import { fileURLToPath as __fileURLToPath } from 'node:url';
4
+ import { dirname as __pathDirname } from 'node:path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __pathDirname(__filename);
8
+
9
+ // src/local/ai-catalog.ts
10
+ var PROVIDER_KINDS = [
11
+ "anthropic",
12
+ "openai",
13
+ "openrouter",
14
+ "ollama",
15
+ "google",
16
+ "mistral",
17
+ "groq",
18
+ "openai-compatible"
19
+ ];
20
+ var DEFAULT_BASE_URLS = {
21
+ openrouter: "https://openrouter.ai/api/v1",
22
+ ollama: "http://localhost:11434/v1"
23
+ };
24
+ function isKnownKind(kind) {
25
+ return PROVIDER_KINDS.includes(kind);
26
+ }
27
+ function defaultBaseUrl(kind) {
28
+ return DEFAULT_BASE_URLS[kind];
29
+ }
30
+
31
+ export {
32
+ PROVIDER_KINDS,
33
+ isKnownKind,
34
+ defaultBaseUrl
35
+ };