@pentoshi/clai 4.14.4 → 4.14.5
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/CONTRIBUTING.md +4 -0
- package/PROVIDERS.md +2 -0
- package/README.md +22 -0
- package/dist/agent/subagents/read-only-tools.js +2 -2
- package/dist/agent/subagents/read-only-tools.js.map +1 -1
- package/dist/app/adapters/current-updates-adapter.d.ts +1 -1
- package/dist/app/adapters/current-updates-adapter.js +4 -13
- package/dist/app/adapters/current-updates-adapter.js.map +1 -1
- package/dist/app/controllers/session-controller.d.ts +5 -0
- package/dist/app/controllers/session-controller.js +54 -7
- package/dist/app/controllers/session-controller.js.map +1 -1
- package/dist/app/ports/updates-port.d.ts +1 -1
- package/dist/classic/app/action-handlers.js +7 -0
- package/dist/classic/app/action-handlers.js.map +1 -1
- package/dist/commands/update/detection.d.ts +20 -0
- package/dist/commands/update/detection.js +207 -0
- package/dist/commands/update/detection.js.map +1 -0
- package/dist/commands/update/download.d.ts +3 -0
- package/dist/commands/update/download.js +63 -0
- package/dist/commands/update/download.js.map +1 -0
- package/dist/commands/update/installers.d.ts +16 -5
- package/dist/commands/update/installers.js +12 -513
- package/dist/commands/update/installers.js.map +1 -1
- package/dist/commands/update/lock.d.ts +6 -0
- package/dist/commands/update/lock.js +86 -0
- package/dist/commands/update/lock.js.map +1 -0
- package/dist/commands/update/metadata.d.ts +6 -0
- package/dist/commands/update/metadata.js +36 -0
- package/dist/commands/update/metadata.js.map +1 -0
- package/dist/commands/update/native.d.ts +3 -0
- package/dist/commands/update/native.js +179 -0
- package/dist/commands/update/native.js.map +1 -0
- package/dist/commands/update/package-managers.d.ts +4 -0
- package/dist/commands/update/package-managers.js +158 -0
- package/dist/commands/update/package-managers.js.map +1 -0
- package/dist/commands/update/process.d.ts +17 -0
- package/dist/commands/update/process.js +114 -0
- package/dist/commands/update/process.js.map +1 -0
- package/dist/commands/update/source-worker.d.ts +2 -0
- package/dist/commands/update/source-worker.js +71 -0
- package/dist/commands/update/source-worker.js.map +1 -0
- package/dist/commands/update/source.d.ts +2 -0
- package/dist/commands/update/source.js +79 -0
- package/dist/commands/update/source.js.map +1 -0
- package/dist/commands/update/verification.d.ts +7 -0
- package/dist/commands/update/verification.js +73 -0
- package/dist/commands/update/verification.js.map +1 -0
- package/dist/commands/update/windows-stage.d.ts +21 -0
- package/dist/commands/update/windows-stage.js +186 -0
- package/dist/commands/update/windows-stage.js.map +1 -0
- package/dist/commands/update-install.d.ts +4 -13
- package/dist/commands/update-install.js +20 -152
- package/dist/commands/update-install.js.map +1 -1
- package/dist/commands/update.d.ts +4 -9
- package/dist/commands/update.js +51 -103
- package/dist/commands/update.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/llm/responses-error.d.ts +3 -0
- package/dist/llm/responses-error.js +37 -0
- package/dist/llm/responses-error.js.map +1 -0
- package/dist/llm/responses-http.js +5 -2
- package/dist/llm/responses-http.js.map +1 -1
- package/dist/llm/responses-replay.d.ts +2 -0
- package/dist/llm/responses-replay.js +37 -1
- package/dist/llm/responses-replay.js.map +1 -1
- package/dist/llm/responses-stream-events.js +3 -20
- package/dist/llm/responses-stream-events.js.map +1 -1
- package/dist/llm/responses-stream.js +2 -0
- package/dist/llm/responses-stream.js.map +1 -1
- package/dist/os/bun-runtime.js +2 -1
- package/dist/os/bun-runtime.js.map +1 -1
- package/dist/os/update-origin.d.ts +7 -0
- package/dist/os/update-origin.js +30 -0
- package/dist/os/update-origin.js.map +1 -0
- package/dist/prompts/embedded.js +2 -2
- package/dist/prompts/embedded.js.map +1 -1
- package/dist/prompts/index.js +2 -2
- package/dist/prompts/system.agent.md +1 -1
- package/dist/prompts/system.ask.md +1 -1
- package/dist/session-runtime/client.js +2 -1
- package/dist/session-runtime/client.js.map +1 -1
- package/dist/store/history/jsonl-lock.js +10 -7
- package/dist/store/history/jsonl-lock.js.map +1 -1
- package/dist/store/history/recovery.js +2 -1
- package/dist/store/history/recovery.js.map +1 -1
- package/dist/store/history.js +4 -2
- package/dist/store/history.js.map +1 -1
- package/dist/tools/definitions/fs-read.js +1 -1
- package/dist/tools/definitions/fs-read.js.map +1 -1
- package/dist/tools/fs/read-input.d.ts +1 -1
- package/dist/tools/fs/read-input.js +2 -2
- package/dist/tools/fs/read-input.js.map +1 -1
- package/dist/tui-v2/app/App.js +13 -5
- package/dist/tui-v2/app/App.js.map +1 -1
- package/dist/tui-v2/components/plan/plan-interaction.d.ts +11 -0
- package/dist/tui-v2/components/plan/plan-interaction.js +56 -0
- package/dist/tui-v2/components/plan/plan-interaction.js.map +1 -0
- package/dist/tui-v2/components/plan/plan-view.d.ts +7 -1
- package/dist/tui-v2/components/plan/plan-view.js +78 -175
- package/dist/tui-v2/components/plan/plan-view.js.map +1 -1
- package/dist/tui-v2/components/plan/task-title.d.ts +9 -0
- package/dist/tui-v2/components/plan/task-title.js +17 -0
- package/dist/tui-v2/components/plan/task-title.js.map +1 -0
- package/dist/tui-v2/components/plan/use-task-disclosure.d.ts +25 -0
- package/dist/tui-v2/components/plan/use-task-disclosure.js +125 -0
- package/dist/tui-v2/components/plan/use-task-disclosure.js.map +1 -0
- package/dist/tui-v2/composer/composer-editor.js +3 -0
- package/dist/tui-v2/composer/composer-editor.js.map +1 -1
- package/dist/ui-core/actions/action-id.d.ts +1 -1
- package/dist/ui-core/actions/action-id.js +7 -0
- package/dist/ui-core/actions/action-id.js.map +1 -1
- package/dist/ui-core/actions/format-shortcuts.js +7 -0
- package/dist/ui-core/actions/format-shortcuts.js.map +1 -1
- package/dist/ui-core/commands/config-commands.js +12 -6
- package/dist/ui-core/commands/config-commands.js.map +1 -1
- package/dist/ui-core/commands/prompt-commands.d.ts +1 -1
- package/dist/ui-core/commands/prompt-commands.js +12 -2
- package/dist/ui-core/commands/prompt-commands.js.map +1 -1
- package/dist/ui-core/controllers/toast-controller.js +4 -4
- package/dist/ui-core/controllers/toast-controller.js.map +1 -1
- package/dist/ui-core/rendering/plan-view.js +24 -12
- package/dist/ui-core/rendering/plan-view.js.map +1 -1
- package/dist/ui-core/rendering/task-disclosure.d.ts +19 -0
- package/dist/ui-core/rendering/task-disclosure.js +70 -0
- package/dist/ui-core/rendering/task-disclosure.js.map +1 -0
- package/dist/version.generated.d.ts +2 -2
- package/dist/version.generated.js +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { existsSync, readFileSync, realpathSync } from "node:fs";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { dirname, join, posix, win32 } from "node:path";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
import { readUpdateOrigin } from "../../os/update-origin.js";
|
|
7
|
+
import { PACKAGE_NAME } from "./installers.js";
|
|
8
|
+
export function canonicalPath(path) {
|
|
9
|
+
try {
|
|
10
|
+
return realpathSync(path);
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return path;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function normalized(path, platform) {
|
|
17
|
+
const result = path.replace(/\\/g, "/").replace(/\/+$/, "");
|
|
18
|
+
return platform === "win32" ? result.toLowerCase() : result;
|
|
19
|
+
}
|
|
20
|
+
function within(path, root, platform) {
|
|
21
|
+
if (!root)
|
|
22
|
+
return false;
|
|
23
|
+
const p = normalized(path, platform);
|
|
24
|
+
const r = normalized(root, platform);
|
|
25
|
+
return p === r || p.startsWith(`${r}/`);
|
|
26
|
+
}
|
|
27
|
+
function embedded(path) {
|
|
28
|
+
return /\$bunfs|~BUN[\\/]root|^bun:/i.test(path);
|
|
29
|
+
}
|
|
30
|
+
function packagePath(path) {
|
|
31
|
+
if (embedded(path))
|
|
32
|
+
return undefined;
|
|
33
|
+
return /^(.*[\\/]node_modules[\\/]@pentoshi[\\/]clai)(?:[\\/]|$)/i.exec(path)?.[1];
|
|
34
|
+
}
|
|
35
|
+
function packageMethod(env, paths) {
|
|
36
|
+
const root = paths.map(packagePath).find((path) => path !== undefined) ?? env.packageRoot;
|
|
37
|
+
if (!root || !packagePath(root))
|
|
38
|
+
return undefined;
|
|
39
|
+
const api = env.platform === "win32" ? win32 : posix;
|
|
40
|
+
const nodeModules = api.dirname(api.dirname(root));
|
|
41
|
+
const prefix = api.dirname(nodeModules);
|
|
42
|
+
const p = normalized(root, env.platform);
|
|
43
|
+
let type = env.packageManager ?? "npm";
|
|
44
|
+
if (within(root, env.bunRoot, env.platform) || p.includes("/.bun/install/global/"))
|
|
45
|
+
type = "bun";
|
|
46
|
+
else if (p.includes("/.pnpm/") || /\/pnpm\/global\/\d+\//.test(p) || /\/global\/v\d+\/[^/]+\//.test(p))
|
|
47
|
+
type = "pnpm";
|
|
48
|
+
else if (/\/yarn\/(?:data\/)?global\//.test(p))
|
|
49
|
+
type = "yarn";
|
|
50
|
+
const knownGlobal = within(root, env.npmRoot, env.platform) || within(root, env.bunRoot, env.platform) ||
|
|
51
|
+
/\/(?:lib\/node_modules|\.bun\/install\/global|yarn\/(?:data\/)?global|pnpm\/global\/\d+)(?:\/|$)/.test(p) || /\/global\/v\d+\/[^/]+\//.test(p);
|
|
52
|
+
const scope = env.scope ?? (knownGlobal ? "global" : "local");
|
|
53
|
+
const stablePrefix = type === "pnpm" && p.includes("/node_modules/.pnpm/")
|
|
54
|
+
? root.slice(0, p.indexOf("/node_modules/.pnpm/")) : prefix;
|
|
55
|
+
const stableRoot = type === "pnpm" ? api.join(stablePrefix, "node_modules", "@pentoshi", "clai") : root;
|
|
56
|
+
const installPrefix = type === "npm" && scope === "global" && /\/lib\/node_modules\//.test(p)
|
|
57
|
+
? api.dirname(stablePrefix) : stablePrefix;
|
|
58
|
+
return {
|
|
59
|
+
type, scope, prefix: installPrefix, packageRoot: stableRoot,
|
|
60
|
+
executablePath: type === "pnpm" && scope === "global" && /\/global\/v\d+\//.test(normalized(stablePrefix, env.platform))
|
|
61
|
+
? api.join(stablePrefix.slice(0, normalized(stablePrefix, env.platform).indexOf("/global/v")), "bin", env.platform === "win32" ? "clai.cmd" : "clai")
|
|
62
|
+
: api.join(stableRoot, "bin", "clai.mjs"),
|
|
63
|
+
runtimePath: env.runtimePath ?? env.execPath,
|
|
64
|
+
...(env.managerPath ? { managerPath: env.managerPath } : {}),
|
|
65
|
+
detail: `${type} ${scope} package at ${stableRoot}`,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function brewOwns(env, paths) {
|
|
69
|
+
if (env.platform !== "darwin" && env.platform !== "linux")
|
|
70
|
+
return false;
|
|
71
|
+
if (!env.brewPrefix)
|
|
72
|
+
return false;
|
|
73
|
+
const roots = [env.brewPrefix, canonicalPath(env.brewPrefix)];
|
|
74
|
+
const base = normalized(env.brewPrefix, env.platform).replace(/\/(?:opt|Cellar)\/clai(?:\/.*)?$/, "");
|
|
75
|
+
return paths.some((path) => roots.some((root) => within(path, root, env.platform)) ||
|
|
76
|
+
within(path, `${base}/Cellar/clai`, env.platform));
|
|
77
|
+
}
|
|
78
|
+
export function detectInstallMethod(env) {
|
|
79
|
+
const exec = canonicalPath(env.execPath);
|
|
80
|
+
const paths = [...new Set([env.argv1, canonicalPath(env.argv1), env.execPath, exec])];
|
|
81
|
+
const packaged = packageMethod(env, paths);
|
|
82
|
+
if (packaged)
|
|
83
|
+
return packaged;
|
|
84
|
+
if (brewOwns(env, paths)) {
|
|
85
|
+
const api = env.platform === "win32" ? win32 : posix;
|
|
86
|
+
const prefix = env.brewPrefix.replace(/\/(?:opt|Cellar)\/clai(?:\/.*)?$/, "");
|
|
87
|
+
return { type: "brew", detail: `Homebrew formula at ${env.brewPrefix}`, prefix,
|
|
88
|
+
executablePath: api.join(prefix, "opt", "clai", "bin", "clai"), managerPath: env.managerPath ?? api.join(prefix, "bin", "brew") };
|
|
89
|
+
}
|
|
90
|
+
if (env.platform === "win32" && paths.some((path) => within(path, env.scoopRoot ? win32.join(env.scoopRoot, "apps", "clai") : undefined, env.platform) ||
|
|
91
|
+
(within(path, env.scoopShimsDir, env.platform) && /^clai(?:\.exe)?$/i.test(win32.basename(path))))) {
|
|
92
|
+
return { type: "scoop", detail: `Scoop installation at ${exec}`,
|
|
93
|
+
executablePath: env.scoopRoot ? win32.join(env.scoopRoot, "apps", "clai", "current", win32.basename(exec)) : exec,
|
|
94
|
+
...(env.scope ? { scope: env.scope } : {}), ...(env.managerPath ? { managerPath: env.managerPath } : {}),
|
|
95
|
+
...(env.scoopRoot ? { prefix: env.scoopRoot } : {}) };
|
|
96
|
+
}
|
|
97
|
+
const api = env.platform === "win32" ? win32 : posix;
|
|
98
|
+
const isRuntime = /^(?:node|nodejs|bun|bun-debug)(?:\.exe)?$/i.test(api.basename(exec));
|
|
99
|
+
const bundled = paths.some(embedded);
|
|
100
|
+
if (!isRuntime && (bundled || /^clai(?:-bun-.*|\.exe|\.bin)?$/i.test(api.basename(exec)))) {
|
|
101
|
+
return { type: "binary", detail: `standalone binary at ${exec}`, executablePath: exec };
|
|
102
|
+
}
|
|
103
|
+
const source = env.packageRoot ?? paths.filter((path) => !embedded(path))
|
|
104
|
+
.map((path) => /^(.*)[\\/](?:src[\\/]index\.ts|dist[\\/]index\.js|bin[\\/]clai\.mjs)$/.exec(path)?.[1])
|
|
105
|
+
.find((path) => path !== undefined);
|
|
106
|
+
if (isRuntime && source)
|
|
107
|
+
return { type: "dev", detail: `source checkout at ${source}`, packageRoot: source, runtimePath: env.runtimePath ?? env.execPath };
|
|
108
|
+
return { type: "unknown", detail: `unrecognized installation (entry=${env.argv1}, executable=${exec})` };
|
|
109
|
+
}
|
|
110
|
+
function ownPackageRoot() {
|
|
111
|
+
let dir = dirname(fileURLToPath(import.meta.url));
|
|
112
|
+
if (embedded(dir))
|
|
113
|
+
return undefined;
|
|
114
|
+
for (let i = 0; i < 8; i += 1) {
|
|
115
|
+
try {
|
|
116
|
+
const data = JSON.parse(readFileSync(join(dir, "package.json"), "utf8"));
|
|
117
|
+
if (data && typeof data === "object" && "name" in data && data.name === PACKAGE_NAME)
|
|
118
|
+
return dir;
|
|
119
|
+
}
|
|
120
|
+
catch { }
|
|
121
|
+
const parent = dirname(dir);
|
|
122
|
+
if (parent === dir)
|
|
123
|
+
break;
|
|
124
|
+
dir = parent;
|
|
125
|
+
}
|
|
126
|
+
return undefined;
|
|
127
|
+
}
|
|
128
|
+
function probe(cmd, args, signal) {
|
|
129
|
+
if (signal?.aborted)
|
|
130
|
+
return Promise.resolve(undefined);
|
|
131
|
+
return new Promise((resolve) => {
|
|
132
|
+
const child = spawn(cmd, [...args], { stdio: ["ignore", "pipe", "ignore"], windowsHide: true });
|
|
133
|
+
let out = "";
|
|
134
|
+
let settled = false;
|
|
135
|
+
const finish = (value) => {
|
|
136
|
+
if (settled)
|
|
137
|
+
return;
|
|
138
|
+
settled = true;
|
|
139
|
+
clearTimeout(timer);
|
|
140
|
+
signal?.removeEventListener("abort", abort);
|
|
141
|
+
resolve(value);
|
|
142
|
+
};
|
|
143
|
+
const abort = () => { child.kill("SIGKILL"); finish(); };
|
|
144
|
+
const timer = setTimeout(abort, 5000);
|
|
145
|
+
signal?.addEventListener("abort", abort, { once: true });
|
|
146
|
+
child.stdout?.on("data", (data) => { out = (out + data.toString()).slice(-8192); });
|
|
147
|
+
child.on("error", () => finish());
|
|
148
|
+
child.on("close", (code) => finish(code === 0 ? out.trim() || undefined : undefined));
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
function projectManager(prefix) {
|
|
152
|
+
if (existsSync(join(prefix, "bun.lock")) || existsSync(join(prefix, "bun.lockb")))
|
|
153
|
+
return "bun";
|
|
154
|
+
if (existsSync(join(prefix, "pnpm-lock.yaml")))
|
|
155
|
+
return "pnpm";
|
|
156
|
+
if (existsSync(join(prefix, "yarn.lock")))
|
|
157
|
+
return "yarn";
|
|
158
|
+
return "npm";
|
|
159
|
+
}
|
|
160
|
+
export async function resolveInstallEnv(signal) {
|
|
161
|
+
const inherited = readUpdateOrigin();
|
|
162
|
+
const packageRoot = ownPackageRoot();
|
|
163
|
+
const sameInstallation = inherited && (packageRoot
|
|
164
|
+
? within(canonicalPath(inherited.argv1), canonicalPath(packageRoot), process.platform)
|
|
165
|
+
: canonicalPath(inherited.execPath) === canonicalPath(process.execPath));
|
|
166
|
+
const origin = sameInstallation ? inherited : undefined;
|
|
167
|
+
const runtimePath = origin?.execPath ?? process.execPath;
|
|
168
|
+
const argv1 = origin?.argv1 ?? process.argv[1] ?? "";
|
|
169
|
+
const home = homedir();
|
|
170
|
+
const env = { argv1, execPath: process.execPath, runtimePath, platform: process.platform, home,
|
|
171
|
+
...(packageRoot ? { packageRoot } : {}) };
|
|
172
|
+
const root = packagePath(canonicalPath(argv1)) ?? packageRoot;
|
|
173
|
+
if (root && packagePath(root)) {
|
|
174
|
+
const marker = normalized(root, process.platform).indexOf("/node_modules/.pnpm/");
|
|
175
|
+
const prefix = marker >= 0 ? root.slice(0, marker) : dirname(dirname(dirname(root)));
|
|
176
|
+
const globalLayout = /[\\/]lib[\\/]node_modules[\\/]|[\\/](?:\.bun[\\/]install[\\/]global|yarn[\\/](?:data[\\/])?global|pnpm[\\/]global[\\/]\d+|global[\\/]v\d+[\\/][^\\/]+)[\\/]/i.test(root);
|
|
177
|
+
const scope = globalLayout || !existsSync(join(prefix, "package.json")) ? "global" : "local";
|
|
178
|
+
const packageManager = scope === "local" ? projectManager(prefix) : undefined;
|
|
179
|
+
const candidate = { ...env, scope, ...(packageManager ? { packageManager } : {}),
|
|
180
|
+
bunRoot: join(process.env.BUN_INSTALL?.trim() || join(home, ".bun"), "install", "global", "node_modules") };
|
|
181
|
+
const type = detectInstallMethod(candidate).type;
|
|
182
|
+
const manager = join(dirname(runtimePath), `${type}${process.platform === "win32" ? ".cmd" : ""}`);
|
|
183
|
+
const bunManager = join(dirname(dirname(prefix)), "bin", process.platform === "win32" ? "bun.exe" : "bun");
|
|
184
|
+
const managerPath = type === "bun" ? bunManager : manager;
|
|
185
|
+
return { ...candidate, ...(existsSync(managerPath) ? { managerPath } : {}) };
|
|
186
|
+
}
|
|
187
|
+
const exec = canonicalPath(process.execPath);
|
|
188
|
+
if (process.platform !== "win32" && /[\\/](?:Cellar|opt)[\\/]clai[\\/]/.test(exec)) {
|
|
189
|
+
const inferred = exec.includes("/Cellar/clai/")
|
|
190
|
+
? `${exec.split("/Cellar/clai/")[0]}/opt/clai` : dirname(dirname(exec));
|
|
191
|
+
const managerPath = join(inferred.slice(0, inferred.lastIndexOf("/opt/clai")), "bin", "brew");
|
|
192
|
+
const brewPrefix = await probe(managerPath, ["--prefix", "clai"], signal) ?? inferred;
|
|
193
|
+
return { ...env, brewPrefix, managerPath };
|
|
194
|
+
}
|
|
195
|
+
if (process.platform === "win32") {
|
|
196
|
+
const roots = [process.env.SCOOP, process.env.SCOOP_GLOBAL, join(home, "scoop"), join(process.env.ProgramData || "C:\\ProgramData", "scoop")].filter((path) => Boolean(path));
|
|
197
|
+
const scoopRoot = roots.find((root) => within(exec, join(root, "apps", "clai"), "win32") || within(argv1, join(root, "shims"), "win32"));
|
|
198
|
+
if (scoopRoot) {
|
|
199
|
+
const globalRoot = process.env.SCOOP_GLOBAL || join(process.env.ProgramData || "C:\\ProgramData", "scoop");
|
|
200
|
+
const scope = normalized(scoopRoot, "win32") === normalized(globalRoot, "win32") ? "global" : "local";
|
|
201
|
+
const userRoot = process.env.SCOOP || join(home, "scoop");
|
|
202
|
+
return { ...env, scoopRoot, scope, scoopShimsDir: join(scoopRoot, "shims"), managerPath: join(userRoot, "apps", "scoop", "current", "bin", "scoop.ps1") };
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return env;
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=detection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detection.js","sourceRoot":"","sources":["../../../src/commands/update/detection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { DownloadProgress } from "./installers.js";
|
|
2
|
+
export declare const MAX_BINARY_BYTES: number;
|
|
3
|
+
export declare function downloadBinary(url: string, timeoutMs?: number, onProgress?: (progress: DownloadProgress) => void, signal?: AbortSignal, maxBytes?: number): Promise<Buffer>;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { throwIfCancelled } from "./process.js";
|
|
2
|
+
export const MAX_BINARY_BYTES = 256 * 1024 * 1024;
|
|
3
|
+
export async function downloadBinary(url, timeoutMs = 120_000, onProgress, signal, maxBytes = MAX_BINARY_BYTES) {
|
|
4
|
+
throwIfCancelled(signal);
|
|
5
|
+
const controller = new AbortController();
|
|
6
|
+
const timeout = setTimeout(() => controller.abort(), timeoutMs);
|
|
7
|
+
const abort = () => controller.abort(signal?.reason);
|
|
8
|
+
signal?.addEventListener("abort", abort, { once: true });
|
|
9
|
+
try {
|
|
10
|
+
const res = await fetch(url, { redirect: "follow", signal: controller.signal, headers: { "User-Agent": "clai-updater" } });
|
|
11
|
+
if (!res.ok)
|
|
12
|
+
throw new Error(`download failed (HTTP ${res.status}) for ${url}`);
|
|
13
|
+
const length = Number(res.headers?.get("content-length"));
|
|
14
|
+
const totalBytes = Number.isSafeInteger(length) && length > 0 ? length : undefined;
|
|
15
|
+
if (totalBytes !== undefined && totalBytes > maxBytes)
|
|
16
|
+
throw new Error("update download exceeds the size limit");
|
|
17
|
+
onProgress?.({ receivedBytes: 0, totalBytes });
|
|
18
|
+
const chunks = [];
|
|
19
|
+
let receivedBytes = 0;
|
|
20
|
+
const append = (value) => {
|
|
21
|
+
receivedBytes += value.byteLength;
|
|
22
|
+
if (receivedBytes > maxBytes)
|
|
23
|
+
throw new Error("update download exceeds the size limit");
|
|
24
|
+
chunks.push(Buffer.from(value));
|
|
25
|
+
onProgress?.({ receivedBytes, totalBytes });
|
|
26
|
+
};
|
|
27
|
+
if (res.body) {
|
|
28
|
+
const reader = res.body.getReader();
|
|
29
|
+
try {
|
|
30
|
+
for (;;) {
|
|
31
|
+
throwIfCancelled(signal);
|
|
32
|
+
const { done, value } = await reader.read();
|
|
33
|
+
if (done)
|
|
34
|
+
break;
|
|
35
|
+
if (value)
|
|
36
|
+
append(value);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
await reader.cancel().catch(() => { });
|
|
41
|
+
throw error;
|
|
42
|
+
}
|
|
43
|
+
finally {
|
|
44
|
+
reader.releaseLock();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
append(new Uint8Array(await res.arrayBuffer()));
|
|
49
|
+
}
|
|
50
|
+
throwIfCancelled(signal);
|
|
51
|
+
if (receivedBytes === 0)
|
|
52
|
+
throw new Error("empty update download");
|
|
53
|
+
if (totalBytes !== undefined && totalBytes !== receivedBytes && !res.headers?.get("content-encoding"))
|
|
54
|
+
throw new Error("incomplete update download");
|
|
55
|
+
return Buffer.concat(chunks, receivedBytes);
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
clearTimeout(timeout);
|
|
59
|
+
signal?.removeEventListener("abort", abort);
|
|
60
|
+
controller.abort();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=download.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../../src/commands/update/download.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,22 @@
|
|
|
1
1
|
import type { SudoAuthOutcome } from "../../tools/sudo-session.js";
|
|
2
|
+
export { downloadBinary } from "./download.js";
|
|
3
|
+
export { installDirectBinary } from "./native.js";
|
|
4
|
+
export { installViaPackageManager } from "./package-managers.js";
|
|
2
5
|
export declare const REPO = "pentoshi007/clai";
|
|
3
6
|
export declare const PACKAGE_NAME = "@pentoshi/clai";
|
|
4
7
|
export declare const DEFAULT_MIRROR_BASE = "https://downloads.clai.aniketpandey.website";
|
|
8
|
+
export declare const ELEVATION_TIMEOUT_MS = 20000;
|
|
5
9
|
export declare function mirrorBaseUrl(): string;
|
|
6
|
-
export type InstallMethodType = "npm" | "bun" | "brew" | "scoop" | "binary" | "dev" | "unknown";
|
|
10
|
+
export type InstallMethodType = "npm" | "bun" | "pnpm" | "yarn" | "brew" | "scoop" | "binary" | "dev" | "unknown";
|
|
7
11
|
export interface InstallMethod {
|
|
8
12
|
readonly type: InstallMethodType;
|
|
9
13
|
readonly detail: string;
|
|
14
|
+
readonly executablePath?: string;
|
|
15
|
+
readonly packageRoot?: string;
|
|
16
|
+
readonly prefix?: string;
|
|
17
|
+
readonly scope?: "global" | "local";
|
|
18
|
+
readonly managerPath?: string;
|
|
19
|
+
readonly runtimePath?: string;
|
|
10
20
|
}
|
|
11
21
|
export interface PlatformTarget {
|
|
12
22
|
readonly platform: "darwin" | "linux" | "windows";
|
|
@@ -19,12 +29,14 @@ export interface DownloadProgress {
|
|
|
19
29
|
readonly receivedBytes: number;
|
|
20
30
|
readonly totalBytes?: number | undefined;
|
|
21
31
|
}
|
|
22
|
-
export declare function downloadBinary(url: string, timeoutMs?: number, onProgress?: (progress: DownloadProgress) => void, signal?: AbortSignal): Promise<Buffer>;
|
|
23
32
|
export interface UpdateInstallResult {
|
|
24
33
|
readonly ok: boolean;
|
|
25
34
|
readonly method: InstallMethodType;
|
|
26
35
|
readonly message: string;
|
|
27
36
|
readonly needsRestart: boolean;
|
|
37
|
+
readonly outcome?: "applied" | "staged";
|
|
38
|
+
readonly installedVersion?: string;
|
|
39
|
+
readonly statusFile?: string;
|
|
28
40
|
}
|
|
29
41
|
export interface PerformUpdateOptions {
|
|
30
42
|
readonly version: string;
|
|
@@ -38,6 +50,8 @@ export interface PerformUpdateOptions {
|
|
|
38
50
|
readonly signal?: AbortSignal | undefined;
|
|
39
51
|
readonly requestSecret?: SecretRequester | undefined;
|
|
40
52
|
readonly elevation?: UpdateElevation | undefined;
|
|
53
|
+
readonly lockFile?: string;
|
|
54
|
+
readonly lockToken?: string;
|
|
41
55
|
}
|
|
42
56
|
export type UpdateProgress = {
|
|
43
57
|
readonly phase: "downloading";
|
|
@@ -49,7 +63,6 @@ export type UpdateProgress = {
|
|
|
49
63
|
readonly phase: "installing";
|
|
50
64
|
readonly detail?: string | undefined;
|
|
51
65
|
};
|
|
52
|
-
export declare const ELEVATION_TIMEOUT_MS = 20000;
|
|
53
66
|
export interface UpdateElevation {
|
|
54
67
|
readonly auth: SudoAuthOutcome;
|
|
55
68
|
}
|
|
@@ -57,5 +70,3 @@ export type SecretRequester = (request: {
|
|
|
57
70
|
title: string;
|
|
58
71
|
prompt: string;
|
|
59
72
|
}) => Promise<string | undefined>;
|
|
60
|
-
export declare function installDirectBinary(options: Required<Pick<PerformUpdateOptions, "version" | "method">> & PerformUpdateOptions): Promise<UpdateInstallResult>;
|
|
61
|
-
export declare function installViaPackageManager(options: Required<Pick<PerformUpdateOptions, "version" | "method">> & PerformUpdateOptions): Promise<UpdateInstallResult>;
|