@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.
Files changed (129) hide show
  1. package/CONTRIBUTING.md +4 -0
  2. package/PROVIDERS.md +2 -0
  3. package/README.md +22 -0
  4. package/dist/agent/subagents/read-only-tools.js +2 -2
  5. package/dist/agent/subagents/read-only-tools.js.map +1 -1
  6. package/dist/app/adapters/current-updates-adapter.d.ts +1 -1
  7. package/dist/app/adapters/current-updates-adapter.js +4 -13
  8. package/dist/app/adapters/current-updates-adapter.js.map +1 -1
  9. package/dist/app/controllers/session-controller.d.ts +5 -0
  10. package/dist/app/controllers/session-controller.js +54 -7
  11. package/dist/app/controllers/session-controller.js.map +1 -1
  12. package/dist/app/ports/updates-port.d.ts +1 -1
  13. package/dist/classic/app/action-handlers.js +7 -0
  14. package/dist/classic/app/action-handlers.js.map +1 -1
  15. package/dist/commands/update/detection.d.ts +20 -0
  16. package/dist/commands/update/detection.js +207 -0
  17. package/dist/commands/update/detection.js.map +1 -0
  18. package/dist/commands/update/download.d.ts +3 -0
  19. package/dist/commands/update/download.js +63 -0
  20. package/dist/commands/update/download.js.map +1 -0
  21. package/dist/commands/update/installers.d.ts +16 -5
  22. package/dist/commands/update/installers.js +12 -513
  23. package/dist/commands/update/installers.js.map +1 -1
  24. package/dist/commands/update/lock.d.ts +6 -0
  25. package/dist/commands/update/lock.js +86 -0
  26. package/dist/commands/update/lock.js.map +1 -0
  27. package/dist/commands/update/metadata.d.ts +6 -0
  28. package/dist/commands/update/metadata.js +36 -0
  29. package/dist/commands/update/metadata.js.map +1 -0
  30. package/dist/commands/update/native.d.ts +3 -0
  31. package/dist/commands/update/native.js +179 -0
  32. package/dist/commands/update/native.js.map +1 -0
  33. package/dist/commands/update/package-managers.d.ts +4 -0
  34. package/dist/commands/update/package-managers.js +158 -0
  35. package/dist/commands/update/package-managers.js.map +1 -0
  36. package/dist/commands/update/process.d.ts +17 -0
  37. package/dist/commands/update/process.js +114 -0
  38. package/dist/commands/update/process.js.map +1 -0
  39. package/dist/commands/update/source-worker.d.ts +2 -0
  40. package/dist/commands/update/source-worker.js +71 -0
  41. package/dist/commands/update/source-worker.js.map +1 -0
  42. package/dist/commands/update/source.d.ts +2 -0
  43. package/dist/commands/update/source.js +79 -0
  44. package/dist/commands/update/source.js.map +1 -0
  45. package/dist/commands/update/verification.d.ts +7 -0
  46. package/dist/commands/update/verification.js +73 -0
  47. package/dist/commands/update/verification.js.map +1 -0
  48. package/dist/commands/update/windows-stage.d.ts +21 -0
  49. package/dist/commands/update/windows-stage.js +186 -0
  50. package/dist/commands/update/windows-stage.js.map +1 -0
  51. package/dist/commands/update-install.d.ts +4 -13
  52. package/dist/commands/update-install.js +20 -152
  53. package/dist/commands/update-install.js.map +1 -1
  54. package/dist/commands/update.d.ts +4 -9
  55. package/dist/commands/update.js +51 -103
  56. package/dist/commands/update.js.map +1 -1
  57. package/dist/index.js +1 -1
  58. package/dist/index.js.map +1 -1
  59. package/dist/llm/responses-error.d.ts +3 -0
  60. package/dist/llm/responses-error.js +37 -0
  61. package/dist/llm/responses-error.js.map +1 -0
  62. package/dist/llm/responses-http.js +5 -2
  63. package/dist/llm/responses-http.js.map +1 -1
  64. package/dist/llm/responses-replay.d.ts +2 -0
  65. package/dist/llm/responses-replay.js +37 -1
  66. package/dist/llm/responses-replay.js.map +1 -1
  67. package/dist/llm/responses-stream-events.js +3 -20
  68. package/dist/llm/responses-stream-events.js.map +1 -1
  69. package/dist/llm/responses-stream.js +2 -0
  70. package/dist/llm/responses-stream.js.map +1 -1
  71. package/dist/os/bun-runtime.js +2 -1
  72. package/dist/os/bun-runtime.js.map +1 -1
  73. package/dist/os/update-origin.d.ts +7 -0
  74. package/dist/os/update-origin.js +30 -0
  75. package/dist/os/update-origin.js.map +1 -0
  76. package/dist/prompts/embedded.js +2 -2
  77. package/dist/prompts/embedded.js.map +1 -1
  78. package/dist/prompts/index.js +2 -2
  79. package/dist/prompts/system.agent.md +1 -1
  80. package/dist/prompts/system.ask.md +1 -1
  81. package/dist/session-runtime/client.js +2 -1
  82. package/dist/session-runtime/client.js.map +1 -1
  83. package/dist/store/history/jsonl-lock.js +10 -7
  84. package/dist/store/history/jsonl-lock.js.map +1 -1
  85. package/dist/store/history/recovery.js +2 -1
  86. package/dist/store/history/recovery.js.map +1 -1
  87. package/dist/store/history.js +4 -2
  88. package/dist/store/history.js.map +1 -1
  89. package/dist/tools/definitions/fs-read.js +1 -1
  90. package/dist/tools/definitions/fs-read.js.map +1 -1
  91. package/dist/tools/fs/read-input.d.ts +1 -1
  92. package/dist/tools/fs/read-input.js +2 -2
  93. package/dist/tools/fs/read-input.js.map +1 -1
  94. package/dist/tui-v2/app/App.js +13 -5
  95. package/dist/tui-v2/app/App.js.map +1 -1
  96. package/dist/tui-v2/components/plan/plan-interaction.d.ts +11 -0
  97. package/dist/tui-v2/components/plan/plan-interaction.js +56 -0
  98. package/dist/tui-v2/components/plan/plan-interaction.js.map +1 -0
  99. package/dist/tui-v2/components/plan/plan-view.d.ts +7 -1
  100. package/dist/tui-v2/components/plan/plan-view.js +78 -175
  101. package/dist/tui-v2/components/plan/plan-view.js.map +1 -1
  102. package/dist/tui-v2/components/plan/task-title.d.ts +9 -0
  103. package/dist/tui-v2/components/plan/task-title.js +17 -0
  104. package/dist/tui-v2/components/plan/task-title.js.map +1 -0
  105. package/dist/tui-v2/components/plan/use-task-disclosure.d.ts +25 -0
  106. package/dist/tui-v2/components/plan/use-task-disclosure.js +125 -0
  107. package/dist/tui-v2/components/plan/use-task-disclosure.js.map +1 -0
  108. package/dist/tui-v2/composer/composer-editor.js +3 -0
  109. package/dist/tui-v2/composer/composer-editor.js.map +1 -1
  110. package/dist/ui-core/actions/action-id.d.ts +1 -1
  111. package/dist/ui-core/actions/action-id.js +7 -0
  112. package/dist/ui-core/actions/action-id.js.map +1 -1
  113. package/dist/ui-core/actions/format-shortcuts.js +7 -0
  114. package/dist/ui-core/actions/format-shortcuts.js.map +1 -1
  115. package/dist/ui-core/commands/config-commands.js +12 -6
  116. package/dist/ui-core/commands/config-commands.js.map +1 -1
  117. package/dist/ui-core/commands/prompt-commands.d.ts +1 -1
  118. package/dist/ui-core/commands/prompt-commands.js +12 -2
  119. package/dist/ui-core/commands/prompt-commands.js.map +1 -1
  120. package/dist/ui-core/controllers/toast-controller.js +4 -4
  121. package/dist/ui-core/controllers/toast-controller.js.map +1 -1
  122. package/dist/ui-core/rendering/plan-view.js +24 -12
  123. package/dist/ui-core/rendering/plan-view.js.map +1 -1
  124. package/dist/ui-core/rendering/task-disclosure.d.ts +19 -0
  125. package/dist/ui-core/rendering/task-disclosure.js +70 -0
  126. package/dist/ui-core/rendering/task-disclosure.js.map +1 -0
  127. package/dist/version.generated.d.ts +2 -2
  128. package/dist/version.generated.js +2 -2
  129. 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>;