claude-code-infinite 1.0.20 → 1.0.22
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/README.md +165 -30
- package/dist/auto-update-runner.d.ts +52 -0
- package/dist/auto-update-runner.d.ts.map +1 -0
- package/dist/auto-update-runner.js +307 -0
- package/dist/auto-update-runner.js.map +1 -0
- package/dist/auto-update-setup.d.ts +38 -0
- package/dist/auto-update-setup.d.ts.map +1 -0
- package/dist/auto-update-setup.js +72 -0
- package/dist/auto-update-setup.js.map +1 -0
- package/dist/auto-update.d.ts +170 -0
- package/dist/auto-update.d.ts.map +1 -0
- package/dist/auto-update.js +401 -0
- package/dist/auto-update.js.map +1 -0
- package/dist/claude-env.d.ts +14 -1
- package/dist/claude-env.d.ts.map +1 -1
- package/dist/claude-env.js +17 -1
- package/dist/claude-env.js.map +1 -1
- package/dist/cli-lifecycle.d.ts +4 -0
- package/dist/cli-lifecycle.d.ts.map +1 -1
- package/dist/cli-lifecycle.js +18 -0
- package/dist/cli-lifecycle.js.map +1 -1
- package/dist/cli-main.js +139 -19
- package/dist/cli-main.js.map +1 -1
- package/dist/config.d.ts +4 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/count-tokens.d.ts +38 -3
- package/dist/count-tokens.d.ts.map +1 -1
- package/dist/count-tokens.js +94 -19
- package/dist/count-tokens.js.map +1 -1
- package/dist/diagnostics-schema.d.ts +44 -0
- package/dist/diagnostics-schema.d.ts.map +1 -0
- package/dist/diagnostics-schema.js +162 -0
- package/dist/diagnostics-schema.js.map +1 -0
- package/dist/diagnostics.d.ts +116 -0
- package/dist/diagnostics.d.ts.map +1 -0
- package/dist/diagnostics.js +316 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/first-tree.d.ts +11 -0
- package/dist/first-tree.d.ts.map +1 -0
- package/dist/first-tree.js +45 -0
- package/dist/first-tree.js.map +1 -0
- package/dist/hooks.d.ts +37 -0
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +69 -9
- package/dist/hooks.js.map +1 -1
- package/dist/memtree-finder.d.ts +11 -0
- package/dist/memtree-finder.d.ts.map +1 -1
- package/dist/memtree-finder.js +18 -0
- package/dist/memtree-finder.js.map +1 -1
- package/dist/memtree-links.d.ts +2 -0
- package/dist/memtree-links.d.ts.map +1 -1
- package/dist/memtree-links.js +4 -0
- package/dist/memtree-links.js.map +1 -1
- package/dist/memtree-mcp-config.d.ts.map +1 -1
- package/dist/memtree-mcp-config.js +4 -2
- package/dist/memtree-mcp-config.js.map +1 -1
- package/dist/memtree-mcp.d.ts +24 -4
- package/dist/memtree-mcp.d.ts.map +1 -1
- package/dist/memtree-mcp.js +47 -14
- package/dist/memtree-mcp.js.map +1 -1
- package/dist/memtree-tools.d.ts +17 -1
- package/dist/memtree-tools.d.ts.map +1 -1
- package/dist/memtree-tools.js +50 -2
- package/dist/memtree-tools.js.map +1 -1
- package/dist/memtree.d.ts +17 -1
- package/dist/memtree.d.ts.map +1 -1
- package/dist/memtree.js +62 -19
- package/dist/memtree.js.map +1 -1
- package/dist/notices.d.ts +6 -1
- package/dist/notices.d.ts.map +1 -1
- package/dist/notices.js +13 -1
- package/dist/notices.js.map +1 -1
- package/dist/prefix-store.js +3 -0
- package/dist/prefix-store.js.map +1 -1
- package/dist/proxy.d.ts +45 -3
- package/dist/proxy.d.ts.map +1 -1
- package/dist/proxy.js +193 -54
- package/dist/proxy.js.map +1 -1
- package/dist/reqlog.d.ts +27 -1
- package/dist/reqlog.d.ts.map +1 -1
- package/dist/reqlog.js.map +1 -1
- package/dist/request-sizing.d.ts +21 -2
- package/dist/request-sizing.d.ts.map +1 -1
- package/dist/request-sizing.js +60 -7
- package/dist/request-sizing.js.map +1 -1
- package/dist/resume-hint.d.ts +25 -0
- package/dist/resume-hint.d.ts.map +1 -0
- package/dist/resume-hint.js +36 -0
- package/dist/resume-hint.js.map +1 -0
- package/dist/token-estimate.d.ts +35 -0
- package/dist/token-estimate.d.ts.map +1 -0
- package/dist/token-estimate.js +97 -0
- package/dist/token-estimate.js.map +1 -0
- package/dist/update-check.d.ts +4 -3
- package/dist/update-check.d.ts.map +1 -1
- package/dist/update-check.js +4 -3
- package/dist/update-check.js.map +1 -1
- package/dist/update-lock.d.ts +68 -0
- package/dist/update-lock.d.ts.map +1 -0
- package/dist/update-lock.js +176 -0
- package/dist/update-lock.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Automatic updates: when the startup check (update-check.ts) finds a newer
|
|
3
|
+
* release, install exactly that version in the background, the way Claude
|
|
4
|
+
* Code does ("✔ Update installed · Restart to update").
|
|
5
|
+
*
|
|
6
|
+
* Only when self-updating is safe: a plain global npm install whose package
|
|
7
|
+
* directory is physically inside `<prefix>/lib/node_modules` and writable by
|
|
8
|
+
* this user (no sudo, ever). npm-linked and git checkouts, npx and local
|
|
9
|
+
* installs, pnpm/yarn/bun/volta globals, root/sudo runs and Windows get the
|
|
10
|
+
* hint line only. The install runs in a detached runner (auto-update-runner.ts)
|
|
11
|
+
* that loads no file from the package, so it survives this ccc exiting and
|
|
12
|
+
* npm replacing the package under it.
|
|
13
|
+
*
|
|
14
|
+
* One install at a time across sessions (a lock file with a stale timeout).
|
|
15
|
+
* Every attempt is recorded in update-state.json: a failure backs off for a
|
|
16
|
+
* day, and no version is tried more than twice. The result reaches running
|
|
17
|
+
* sessions through the SessionStart hook (AutoUpdateNotices): "✔ ccc X
|
|
18
|
+
* installed · restart ccc to use it", or on failure today's hint.
|
|
19
|
+
*
|
|
20
|
+
* Running sessions keep the code they started with: the proxy loads all its
|
|
21
|
+
* modules at startup, and the hooks it registers are HTTP calls into it or
|
|
22
|
+
* files in its own temp plugin dir. See README "Automatic updates".
|
|
23
|
+
*/
|
|
24
|
+
import { randomUUID } from "node:crypto";
|
|
25
|
+
import * as fs from "node:fs";
|
|
26
|
+
import * as path from "node:path";
|
|
27
|
+
import { fileURLToPath } from "node:url";
|
|
28
|
+
import { RUNNER_SOURCE } from "./auto-update-runner.js";
|
|
29
|
+
import { UPDATE_LOCK_STALE_MS, acquireUpdateLock, liveLockSince, releaseUpdateLock, setLockRunner, } from "./update-lock.js";
|
|
30
|
+
export { UPDATE_LOCK_STALE_MS, acquireUpdateLock, liveLockSince, releaseUpdateLock, } from "./update-lock.js";
|
|
31
|
+
import { PACKAGE_NAME, compareVersions, parseVersion, updateCheckEnabled, } from "./update-check.js";
|
|
32
|
+
export const DISABLE_AUTOUPDATE_ENV = "CCC_DISABLE_AUTOUPDATE";
|
|
33
|
+
/** Claude Code's own opt-out, honored too. */
|
|
34
|
+
export const CLAUDE_DISABLE_AUTOUPDATER_ENV = "DISABLE_AUTOUPDATER";
|
|
35
|
+
export const UPDATE_STATE_FILE = "update-state.json";
|
|
36
|
+
/** One entry per acquirer (update-lock.ts). */
|
|
37
|
+
export const UPDATE_LOCK_DIR = "update.lock.d";
|
|
38
|
+
export const UPDATE_LOG_FILE = "auto-update.log";
|
|
39
|
+
export const AUTO_UPDATE_BACKOFF_MS = 24 * 60 * 60 * 1000;
|
|
40
|
+
export const MAX_ATTEMPTS_PER_VERSION = 2;
|
|
41
|
+
export const INSTALL_TIMEOUT_MS = 10 * 60 * 1000;
|
|
42
|
+
/** Wait after launch so the install never competes with Claude Code starting. */
|
|
43
|
+
export const AUTO_UPDATE_DELAY_MS = 5_000;
|
|
44
|
+
const VERSIONS_KEPT = 8;
|
|
45
|
+
/** This package's own directory (dist/..), as Node resolved it. */
|
|
46
|
+
export const PACKAGE_DIR = fileURLToPath(new URL("..", import.meta.url));
|
|
47
|
+
// A plain release, nothing else: it becomes an npm argument, so no tag, range,
|
|
48
|
+
// prefix, prerelease, whitespace or shell metacharacter can pass.
|
|
49
|
+
const STRICT_VERSION_RE = /^(0|[1-9]\d{0,8})\.(0|[1-9]\d{0,8})\.(0|[1-9]\d{0,8})$/;
|
|
50
|
+
/** False when any opt-out is set: ccc's, Claude Code's, or the update check's. */
|
|
51
|
+
export function autoUpdateEnabled(env, config) {
|
|
52
|
+
if (!updateCheckEnabled(env, config))
|
|
53
|
+
return false;
|
|
54
|
+
if (envFlagSet(env[DISABLE_AUTOUPDATE_ENV]))
|
|
55
|
+
return false;
|
|
56
|
+
if (envFlagSet(env[CLAUDE_DISABLE_AUTOUPDATER_ENV]))
|
|
57
|
+
return false;
|
|
58
|
+
return config.autoUpdate !== false;
|
|
59
|
+
}
|
|
60
|
+
/** A release version safe to hand to npm, or null. */
|
|
61
|
+
export function strictReleaseVersion(version) {
|
|
62
|
+
return typeof version === "string" && STRICT_VERSION_RE.test(version) ? version : null;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* How this copy of ccc was installed. Only "npm-global" self-updates; the
|
|
66
|
+
* runner re-checks the root against `npm root -g` before installing.
|
|
67
|
+
*/
|
|
68
|
+
export function detectInstallMethod(opts) {
|
|
69
|
+
const env = opts.env ?? {};
|
|
70
|
+
const raw = opts.packageDir;
|
|
71
|
+
if ((opts.platform ?? process.platform) === "win32") {
|
|
72
|
+
return method("unsupported-platform", raw, "Windows: npm cannot safely replace a running ccc");
|
|
73
|
+
}
|
|
74
|
+
if (opts.uid === 0 || env.SUDO_UID !== undefined) {
|
|
75
|
+
return method("root", raw, "running as root or under sudo");
|
|
76
|
+
}
|
|
77
|
+
const real = realpathOrNull(raw);
|
|
78
|
+
if (real === null)
|
|
79
|
+
return method("unknown", raw, "package directory not found");
|
|
80
|
+
return classifyPackageDir(real, env);
|
|
81
|
+
}
|
|
82
|
+
/** Decide what this launch does about an available update. */
|
|
83
|
+
export function planAutoUpdate(opts) {
|
|
84
|
+
if (!opts.update)
|
|
85
|
+
return { action: "skip", reason: "no update available" };
|
|
86
|
+
if (!autoUpdateEnabled(opts.env, opts.config))
|
|
87
|
+
return { action: "skip", reason: "disabled" };
|
|
88
|
+
const version = strictReleaseVersion(opts.update.latest);
|
|
89
|
+
if (version === null)
|
|
90
|
+
return { action: "skip", reason: "version is not a plain release" };
|
|
91
|
+
if (opts.method.kind !== "npm-global") {
|
|
92
|
+
return { action: "skip", reason: `install method ${opts.method.kind}` };
|
|
93
|
+
}
|
|
94
|
+
if (opts.installedVersion === version && newerThan(version, opts.update.current)) {
|
|
95
|
+
return { action: "installed", version };
|
|
96
|
+
}
|
|
97
|
+
const blocked = attemptBlocked(opts.state, version, opts.now);
|
|
98
|
+
if (blocked)
|
|
99
|
+
return { action: "skip", reason: blocked };
|
|
100
|
+
const heldSince = opts.lockHeldSince ?? null;
|
|
101
|
+
if (heldSince !== null && opts.now - heldSince > UPDATE_LOCK_STALE_MS) {
|
|
102
|
+
// A live entry this old is a stuck installer or a reused pid: say so with the hint.
|
|
103
|
+
return { action: "skip", reason: "the install lock has been held for over an hour" };
|
|
104
|
+
}
|
|
105
|
+
return { action: "install", version, method: opts.method };
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Take the lock, count the attempt, and start the detached runner. Never
|
|
109
|
+
* throws; a failure to start is recorded like a failed install.
|
|
110
|
+
*/
|
|
111
|
+
export function startAutoUpdateInstall(opts) {
|
|
112
|
+
const decision = opts.decision;
|
|
113
|
+
if (decision.action !== "install" || decision.method.kind !== "npm-global")
|
|
114
|
+
return "not-planned";
|
|
115
|
+
const version = strictReleaseVersion(decision.version);
|
|
116
|
+
if (version === null)
|
|
117
|
+
return "not-planned";
|
|
118
|
+
const now = (opts.now ?? Date.now)();
|
|
119
|
+
const token = acquireUpdateLock(opts.files.lockDir, now);
|
|
120
|
+
if (token === null)
|
|
121
|
+
return "locked";
|
|
122
|
+
const packageDir = decision.method.packageDir;
|
|
123
|
+
// The plan was made before the launch delay; other sessions may have tried,
|
|
124
|
+
// failed or installed since. Only the lock holder's view is authoritative.
|
|
125
|
+
if (installBlockedNow(opts.files.stateFile, packageDir, version, now) !== null) {
|
|
126
|
+
releaseUpdateLock(opts.files.lockDir, token);
|
|
127
|
+
return "skipped";
|
|
128
|
+
}
|
|
129
|
+
recordAttemptStart(opts.files.stateFile, version, packageDir, now);
|
|
130
|
+
const config = runnerConfig(opts, decision.method, version, token);
|
|
131
|
+
try {
|
|
132
|
+
const child = opts.spawnImpl(opts.execPath ?? process.execPath, ["-e", RUNNER_SOURCE, JSON.stringify(config)], { detached: true, stdio: "ignore", env: runnerEnv(opts.env ?? process.env, opts.execPath) });
|
|
133
|
+
child.on("error", (err) => spawnFailed(opts.files, token, version, packageDir, err));
|
|
134
|
+
child.unref();
|
|
135
|
+
// The handoff the runner waits for: without it the runner never installs.
|
|
136
|
+
if (child.pid !== undefined)
|
|
137
|
+
setLockRunner(opts.files.lockDir, token, child.pid);
|
|
138
|
+
return "started";
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
spawnFailed(opts.files, token, version, packageDir, err);
|
|
142
|
+
return "spawn-failed";
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* The SessionStart line about a background install, at most once per ccc
|
|
147
|
+
* process: "✔ ccc X installed · restart ccc to use it", or after a failure
|
|
148
|
+
* during this process the manual hint.
|
|
149
|
+
*/
|
|
150
|
+
export class AutoUpdateNotices {
|
|
151
|
+
opts;
|
|
152
|
+
shown = false;
|
|
153
|
+
constructor(opts) {
|
|
154
|
+
this.opts = opts;
|
|
155
|
+
}
|
|
156
|
+
/** The banner already carried a line: nothing more this process. */
|
|
157
|
+
markShown() {
|
|
158
|
+
this.shown = true;
|
|
159
|
+
}
|
|
160
|
+
sessionStartLine() {
|
|
161
|
+
if (this.shown)
|
|
162
|
+
return undefined;
|
|
163
|
+
const line = this.pendingLine();
|
|
164
|
+
if (line !== undefined)
|
|
165
|
+
this.shown = true;
|
|
166
|
+
return line;
|
|
167
|
+
}
|
|
168
|
+
pendingLine() {
|
|
169
|
+
const last = readUpdateState(this.opts.stateFile).last;
|
|
170
|
+
if (!last || !samePackageDir(last.packageDir, this.opts.packageDir))
|
|
171
|
+
return undefined;
|
|
172
|
+
if (!newerThan(last.version, this.opts.currentVersion))
|
|
173
|
+
return undefined;
|
|
174
|
+
if (last.status === "ok") {
|
|
175
|
+
const read = this.opts.readInstalledVersion ?? readInstalledVersion;
|
|
176
|
+
const installed = read(this.opts.packageDir);
|
|
177
|
+
return installed === last.version ? this.opts.installedText(last.version) : undefined;
|
|
178
|
+
}
|
|
179
|
+
if (last.status === "failed" && last.at >= this.opts.startedAt) {
|
|
180
|
+
return this.opts.hintText({ latest: last.version, current: this.opts.currentVersion });
|
|
181
|
+
}
|
|
182
|
+
return undefined;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/** The version in `<packageDir>/package.json`, or null. */
|
|
186
|
+
export function readInstalledVersion(packageDir) {
|
|
187
|
+
try {
|
|
188
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(packageDir, "package.json"), "utf8"));
|
|
189
|
+
return pkg?.name === PACKAGE_NAME ? strictReleaseVersion(pkg.version) : null;
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
export function updateFiles(configDir) {
|
|
196
|
+
return {
|
|
197
|
+
stateFile: path.join(configDir, UPDATE_STATE_FILE),
|
|
198
|
+
lockDir: path.join(configDir, UPDATE_LOCK_DIR),
|
|
199
|
+
logFile: path.join(configDir, UPDATE_LOG_FILE),
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
export function readUpdateState(file) {
|
|
203
|
+
try {
|
|
204
|
+
const data = JSON.parse(fs.readFileSync(file, "utf8"));
|
|
205
|
+
return { attempts: cleanAttempts(data?.attempts), last: cleanAttempt(data?.last) };
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
return { attempts: {} };
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/** Best effort and atomic: a failed write only loses bookkeeping. */
|
|
212
|
+
export function writeUpdateState(file, state) {
|
|
213
|
+
const tmp = `${file}.${process.pid}.${randomUUID()}.tmp`;
|
|
214
|
+
try {
|
|
215
|
+
fs.mkdirSync(path.dirname(file), { recursive: true, mode: 0o700 });
|
|
216
|
+
fs.writeFileSync(tmp, JSON.stringify(state), { mode: 0o600 });
|
|
217
|
+
fs.renameSync(tmp, file);
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
fs.rmSync(tmp, { force: true });
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
// ---------------------------------------------------------------------------
|
|
224
|
+
// Install-method detection
|
|
225
|
+
// ---------------------------------------------------------------------------
|
|
226
|
+
function classifyPackageDir(real, env) {
|
|
227
|
+
if (fs.existsSync(path.join(real, ".git"))) {
|
|
228
|
+
return method("git-checkout", real, "package directory is a git checkout");
|
|
229
|
+
}
|
|
230
|
+
const manager = otherPackageManager(real, env);
|
|
231
|
+
if (manager)
|
|
232
|
+
return method(manager, real, `installed by ${manager}`);
|
|
233
|
+
const parent = path.dirname(real);
|
|
234
|
+
if (path.basename(parent) !== "node_modules" || path.basename(real) !== PACKAGE_NAME) {
|
|
235
|
+
return method("npm-link", real, "package directory is outside node_modules (linked checkout)");
|
|
236
|
+
}
|
|
237
|
+
if (path.basename(path.dirname(parent)) !== "lib") {
|
|
238
|
+
return method("local", real, "not a global npm prefix (<prefix>/lib/node_modules)");
|
|
239
|
+
}
|
|
240
|
+
const prefix = path.dirname(path.dirname(parent));
|
|
241
|
+
const unwritable = firstUnwritable([parent, real, path.join(real, "dist"), path.join(prefix, "bin")]);
|
|
242
|
+
if (unwritable)
|
|
243
|
+
return method("not-writable", real, `${unwritable} is not writable without sudo`);
|
|
244
|
+
return { kind: "npm-global", packageDir: real, detail: `npm prefix ${prefix}`, npmRoot: parent, prefix };
|
|
245
|
+
}
|
|
246
|
+
function otherPackageManager(real, env) {
|
|
247
|
+
const p = real.split(path.sep).join("/");
|
|
248
|
+
if (p.includes("/_npx/"))
|
|
249
|
+
return "npx";
|
|
250
|
+
if (/\/\.?pnpm\//.test(p) || p.includes("/.pnpm-global/"))
|
|
251
|
+
return "pnpm";
|
|
252
|
+
if (/\/\.yarn\//.test(p) || /\/yarn\/global\//.test(p) || p.includes("/.config/yarn/"))
|
|
253
|
+
return "yarn";
|
|
254
|
+
if (p.includes("/.bun/"))
|
|
255
|
+
return "bun";
|
|
256
|
+
const volta = env.VOLTA_HOME && realpathOrNull(env.VOLTA_HOME);
|
|
257
|
+
if (p.includes("/.volta/") || (volta && isInside(real, volta)))
|
|
258
|
+
return "volta";
|
|
259
|
+
return null;
|
|
260
|
+
}
|
|
261
|
+
function firstUnwritable(dirs) {
|
|
262
|
+
for (const dir of dirs) {
|
|
263
|
+
try {
|
|
264
|
+
fs.accessSync(dir, fs.constants.W_OK);
|
|
265
|
+
}
|
|
266
|
+
catch {
|
|
267
|
+
return dir;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
return null;
|
|
271
|
+
}
|
|
272
|
+
function method(kind, packageDir, detail) {
|
|
273
|
+
return { kind, packageDir, detail };
|
|
274
|
+
}
|
|
275
|
+
// ---------------------------------------------------------------------------
|
|
276
|
+
// Attempts, backoff and state
|
|
277
|
+
// ---------------------------------------------------------------------------
|
|
278
|
+
/** Why this version must not be tried now, or null. */
|
|
279
|
+
function attemptBlocked(state, version, now) {
|
|
280
|
+
if ((state.attempts[version] ?? 0) >= MAX_ATTEMPTS_PER_VERSION) {
|
|
281
|
+
return `already tried ${version} ${MAX_ATTEMPTS_PER_VERSION} times`;
|
|
282
|
+
}
|
|
283
|
+
const last = state.last;
|
|
284
|
+
if (!last)
|
|
285
|
+
return null;
|
|
286
|
+
// A run that never reported (killed, machine asleep) counts as a failure
|
|
287
|
+
// once its lock would be stale.
|
|
288
|
+
const failedAt = last.status === "failed" ? last.at
|
|
289
|
+
: last.status === "running" && now - last.at > UPDATE_LOCK_STALE_MS ? last.at
|
|
290
|
+
: null;
|
|
291
|
+
if (failedAt !== null && now - failedAt < AUTO_UPDATE_BACKOFF_MS) {
|
|
292
|
+
return "backing off for a day after a failed install";
|
|
293
|
+
}
|
|
294
|
+
return null;
|
|
295
|
+
}
|
|
296
|
+
/** attemptBlocked plus "the package is already at or past this version". */
|
|
297
|
+
function installBlockedNow(stateFile, packageDir, version, now) {
|
|
298
|
+
const installed = readInstalledVersion(packageDir);
|
|
299
|
+
if (installed !== null && !newerThan(version, installed))
|
|
300
|
+
return `${installed} is installed`;
|
|
301
|
+
return attemptBlocked(readUpdateState(stateFile), version, now);
|
|
302
|
+
}
|
|
303
|
+
function recordAttemptStart(file, version, packageDir, now) {
|
|
304
|
+
const state = readUpdateState(file);
|
|
305
|
+
state.attempts[version] = (state.attempts[version] ?? 0) + 1;
|
|
306
|
+
state.attempts = newestAttempts(state.attempts);
|
|
307
|
+
state.last = { version, status: "running", at: now, packageDir };
|
|
308
|
+
writeUpdateState(file, state);
|
|
309
|
+
}
|
|
310
|
+
function spawnFailed(files, token, version, packageDir, err) {
|
|
311
|
+
const state = readUpdateState(files.stateFile);
|
|
312
|
+
const error = `could not start the installer: ${String(err).slice(0, 200)}`;
|
|
313
|
+
state.last = { version, status: "failed", at: Date.now(), packageDir, error };
|
|
314
|
+
writeUpdateState(files.stateFile, state);
|
|
315
|
+
releaseUpdateLock(files.lockDir, token);
|
|
316
|
+
}
|
|
317
|
+
function newestAttempts(attempts) {
|
|
318
|
+
const versions = Object.keys(attempts).sort((a, b) => compareVersions(parseVersion(b), parseVersion(a)));
|
|
319
|
+
return Object.fromEntries(versions.slice(0, VERSIONS_KEPT).map((v) => [v, attempts[v]]));
|
|
320
|
+
}
|
|
321
|
+
function cleanAttempts(value) {
|
|
322
|
+
if (!value || typeof value !== "object")
|
|
323
|
+
return {};
|
|
324
|
+
const out = {};
|
|
325
|
+
for (const [version, count] of Object.entries(value)) {
|
|
326
|
+
if (strictReleaseVersion(version) && Number.isInteger(count) && count > 0) {
|
|
327
|
+
out[version] = count;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
return out;
|
|
331
|
+
}
|
|
332
|
+
function cleanAttempt(value) {
|
|
333
|
+
if (!value || typeof value !== "object")
|
|
334
|
+
return undefined;
|
|
335
|
+
const version = strictReleaseVersion(value.version);
|
|
336
|
+
const status = ["running", "ok", "failed"].includes(value.status) ? value.status : null;
|
|
337
|
+
if (!version || !status || typeof value.at !== "number" || typeof value.packageDir !== "string") {
|
|
338
|
+
return undefined;
|
|
339
|
+
}
|
|
340
|
+
const error = typeof value.error === "string" ? value.error.slice(0, 300) : undefined;
|
|
341
|
+
return { version, status, at: value.at, packageDir: value.packageDir, ...(error ? { error } : {}) };
|
|
342
|
+
}
|
|
343
|
+
// ---------------------------------------------------------------------------
|
|
344
|
+
// Runner
|
|
345
|
+
// ---------------------------------------------------------------------------
|
|
346
|
+
function runnerConfig(opts, m, version, token) {
|
|
347
|
+
return {
|
|
348
|
+
npm: opts.npmPath ?? defaultNpmPath(opts.execPath ?? process.execPath),
|
|
349
|
+
packageName: PACKAGE_NAME,
|
|
350
|
+
version,
|
|
351
|
+
packageDir: m.packageDir,
|
|
352
|
+
npmRoot: m.npmRoot,
|
|
353
|
+
prefix: m.prefix,
|
|
354
|
+
stateFile: opts.files.stateFile,
|
|
355
|
+
lockDir: opts.files.lockDir,
|
|
356
|
+
logFile: opts.files.logFile,
|
|
357
|
+
token,
|
|
358
|
+
timeoutMs: INSTALL_TIMEOUT_MS,
|
|
359
|
+
};
|
|
360
|
+
}
|
|
361
|
+
/** The npm installed with this Node, so it targets the same prefix; else PATH's. */
|
|
362
|
+
function defaultNpmPath(execPath) {
|
|
363
|
+
const beside = path.join(path.dirname(execPath), "npm");
|
|
364
|
+
return fs.existsSync(beside) ? beside : "npm";
|
|
365
|
+
}
|
|
366
|
+
/** npm's `#!/usr/bin/env node` must find this same Node first. */
|
|
367
|
+
function runnerEnv(env, execPath = process.execPath) {
|
|
368
|
+
const bin = path.dirname(execPath);
|
|
369
|
+
return {
|
|
370
|
+
...env,
|
|
371
|
+
PATH: env.PATH ? `${bin}${path.delimiter}${env.PATH}` : bin,
|
|
372
|
+
npm_config_update_notifier: "false",
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
// ---------------------------------------------------------------------------
|
|
376
|
+
// Small helpers
|
|
377
|
+
// ---------------------------------------------------------------------------
|
|
378
|
+
function newerThan(version, current) {
|
|
379
|
+
const a = parseVersion(version);
|
|
380
|
+
const b = parseVersion(current);
|
|
381
|
+
return a !== null && b !== null && compareVersions(a, b) > 0;
|
|
382
|
+
}
|
|
383
|
+
function envFlagSet(value) {
|
|
384
|
+
return value !== undefined && /^(1|true|yes|on)$/i.test(value.trim());
|
|
385
|
+
}
|
|
386
|
+
function realpathOrNull(p) {
|
|
387
|
+
try {
|
|
388
|
+
return fs.realpathSync(p);
|
|
389
|
+
}
|
|
390
|
+
catch {
|
|
391
|
+
return null;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
function isInside(child, parent) {
|
|
395
|
+
const rel = path.relative(parent, child);
|
|
396
|
+
return rel !== "" && !rel.startsWith("..") && !path.isAbsolute(rel);
|
|
397
|
+
}
|
|
398
|
+
function samePackageDir(a, b) {
|
|
399
|
+
return (realpathOrNull(a) ?? a) === (realpathOrNull(b) ?? b);
|
|
400
|
+
}
|
|
401
|
+
//# sourceMappingURL=auto-update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-update.js","sourceRoot":"","sources":["../src/auto-update.ts"],"names":[],"mappings":"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"}
|
package/dist/claude-env.d.ts
CHANGED
|
@@ -17,9 +17,22 @@
|
|
|
17
17
|
* DISABLE_AUTO_COMPACT. Suppress that ccc-inappropriate recommendation with an
|
|
18
18
|
* effectively unreachable finite threshold; manual `/compact` remains available.
|
|
19
19
|
*
|
|
20
|
+
* With auto-compaction off, Claude Code still refuses a request itself once
|
|
21
|
+
* its own estimate (last reported usage plus the new messages) reaches the
|
|
22
|
+
* window minus 23k (977k on a 1M window; 2.1.302, measured) and never sends
|
|
23
|
+
* it: "Prompt is too long", and every later message is refused the same way.
|
|
24
|
+
* MemTree compresses at a budget near the window (900k), so one large tool
|
|
25
|
+
* round could otherwise strand a session there before ccc sees the request.
|
|
26
|
+
* CLAUDE_CODE_BLOCKING_LIMIT_OVERRIDE lifts that refusal: the request reaches
|
|
27
|
+
* the proxy, which compresses it mid-turn or, failing that, refuses it with
|
|
28
|
+
* its own bounded retry/400. A value the user already exported is kept.
|
|
29
|
+
*
|
|
20
30
|
* `CCC_AUTO_COMPACT=1` is an escape hatch: remove ccc's override and let the
|
|
21
|
-
* user's native Claude Code setting decide whether auto-compaction is enabled
|
|
31
|
+
* user's native Claude Code setting decide whether auto-compaction is enabled
|
|
32
|
+
* (Claude Code's own limits then apply unchanged).
|
|
22
33
|
*/
|
|
34
|
+
/** Claude Code's local refusal limit under ccc: effectively never reached. */
|
|
35
|
+
export declare const UNREACHABLE_BLOCKING_LIMIT = "1000000000";
|
|
23
36
|
export declare function claudeChildEnv(parentEnv: NodeJS.ProcessEnv, anthropicBaseUrl: string): NodeJS.ProcessEnv;
|
|
24
37
|
/**
|
|
25
38
|
* Keep the proxy's MemTree budget in lockstep with Claude Code's own context
|
package/dist/claude-env.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-env.d.ts","sourceRoot":"","sources":["../src/claude-env.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"claude-env.d.ts","sourceRoot":"","sources":["../src/claude-env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,8EAA8E;AAC9E,eAAO,MAAM,0BAA0B,eAAe,CAAC;AAEvD,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,CAAC,UAAU,EAC5B,gBAAgB,EAAE,MAAM,GACvB,MAAM,CAAC,UAAU,CAuBnB;AAOD;;;;GAIG;AACH,wBAAgB,oCAAoC,CAClD,SAAS,EAAE,MAAM,CAAC,UAAU,GAC3B,OAAO,CAET"}
|
package/dist/claude-env.js
CHANGED
|
@@ -17,9 +17,22 @@
|
|
|
17
17
|
* DISABLE_AUTO_COMPACT. Suppress that ccc-inappropriate recommendation with an
|
|
18
18
|
* effectively unreachable finite threshold; manual `/compact` remains available.
|
|
19
19
|
*
|
|
20
|
+
* With auto-compaction off, Claude Code still refuses a request itself once
|
|
21
|
+
* its own estimate (last reported usage plus the new messages) reaches the
|
|
22
|
+
* window minus 23k (977k on a 1M window; 2.1.302, measured) and never sends
|
|
23
|
+
* it: "Prompt is too long", and every later message is refused the same way.
|
|
24
|
+
* MemTree compresses at a budget near the window (900k), so one large tool
|
|
25
|
+
* round could otherwise strand a session there before ccc sees the request.
|
|
26
|
+
* CLAUDE_CODE_BLOCKING_LIMIT_OVERRIDE lifts that refusal: the request reaches
|
|
27
|
+
* the proxy, which compresses it mid-turn or, failing that, refuses it with
|
|
28
|
+
* its own bounded retry/400. A value the user already exported is kept.
|
|
29
|
+
*
|
|
20
30
|
* `CCC_AUTO_COMPACT=1` is an escape hatch: remove ccc's override and let the
|
|
21
|
-
* user's native Claude Code setting decide whether auto-compaction is enabled
|
|
31
|
+
* user's native Claude Code setting decide whether auto-compaction is enabled
|
|
32
|
+
* (Claude Code's own limits then apply unchanged).
|
|
22
33
|
*/
|
|
34
|
+
/** Claude Code's local refusal limit under ccc: effectively never reached. */
|
|
35
|
+
export const UNREACHABLE_BLOCKING_LIMIT = "1000000000";
|
|
23
36
|
export function claudeChildEnv(parentEnv, anthropicBaseUrl) {
|
|
24
37
|
const childEnv = {
|
|
25
38
|
...parentEnv,
|
|
@@ -36,6 +49,9 @@ export function claudeChildEnv(parentEnv, anthropicBaseUrl) {
|
|
|
36
49
|
}
|
|
37
50
|
else {
|
|
38
51
|
childEnv.DISABLE_AUTO_COMPACT = "1";
|
|
52
|
+
if (!childEnv.CLAUDE_CODE_BLOCKING_LIMIT_OVERRIDE) {
|
|
53
|
+
childEnv.CLAUDE_CODE_BLOCKING_LIMIT_OVERRIDE = UNREACHABLE_BLOCKING_LIMIT;
|
|
54
|
+
}
|
|
39
55
|
}
|
|
40
56
|
return childEnv;
|
|
41
57
|
}
|
package/dist/claude-env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-env.js","sourceRoot":"","sources":["../src/claude-env.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"claude-env.js","sourceRoot":"","sources":["../src/claude-env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,8EAA8E;AAC9E,MAAM,CAAC,MAAM,0BAA0B,GAAG,YAAY,CAAC;AAEvD,MAAM,UAAU,cAAc,CAC5B,SAA4B,EAC5B,gBAAwB;IAExB,MAAM,QAAQ,GAAsB;QAClC,GAAG,SAAS;QACZ,kBAAkB,EAAE,gBAAgB;QACpC,wCAAwC,EAAE,GAAG;QAC7C,kCAAkC,EAAE,YAAY;KACjD,CAAC;IAEF,gEAAgE;IAChE,OAAO,QAAQ,CAAC,gBAAgB,CAAC;IAEjC,IAAI,SAAS,CAAC,gBAAgB,KAAK,GAAG,EAAE,CAAC;QACvC,oEAAoE;QACpE,iCAAiC;QACjC,OAAO,QAAQ,CAAC,oBAAoB,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,oBAAoB,GAAG,GAAG,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,mCAAmC,EAAE,CAAC;YAClD,QAAQ,CAAC,mCAAmC,GAAG,0BAA0B,CAAC;QAC5E,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,cAAc,CAAC,KAAyB;IAC/C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACtC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AACzE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oCAAoC,CAClD,SAA4B;IAE5B,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;AACnE,CAAC"}
|
package/dist/cli-lifecycle.d.ts
CHANGED
|
@@ -14,4 +14,8 @@ export interface SignalShutdownActions {
|
|
|
14
14
|
* Dependencies are injected so this policy can be tested without process.exit.
|
|
15
15
|
*/
|
|
16
16
|
export declare function createSignalShutdownHandler(actions: SignalShutdownActions): (signal: ShutdownSignal) => void;
|
|
17
|
+
/** Resolves once `text` is handed to the OS (or the write fails); never rejects. */
|
|
18
|
+
export declare function writeStdout(text: string, stream?: Pick<NodeJS.WriteStream, "write">): Promise<void>;
|
|
19
|
+
/** Waits for `pending` at most `ms`; a bound for cleanup that must not hang exit. */
|
|
20
|
+
export declare function settleWithin(pending: Promise<unknown>, ms: number): Promise<void>;
|
|
17
21
|
//# sourceMappingURL=cli-lifecycle.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-lifecycle.d.ts","sourceRoot":"","sources":["../src/cli-lifecycle.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,SAAS,CAAC;AAElD,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,CAGhE;AAED,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,GAC5B,MAAM,CAGR;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,qBAAqB,GAC7B,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CASlC"}
|
|
1
|
+
{"version":3,"file":"cli-lifecycle.d.ts","sourceRoot":"","sources":["../src/cli-lifecycle.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,SAAS,CAAC;AAElD,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,CAGhE;AAED,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,GAC5B,MAAM,CAGR;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,qBAAqB,GAC7B,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CASlC;AAED,oFAAoF;AACpF,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAkB,GACzD,OAAO,CAAC,IAAI,CAAC,CAQf;AAED,qFAAqF;AACrF,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQjF"}
|
package/dist/cli-lifecycle.js
CHANGED
|
@@ -27,4 +27,22 @@ export function createSignalShutdownHandler(actions) {
|
|
|
27
27
|
actions.forceExit(code);
|
|
28
28
|
};
|
|
29
29
|
}
|
|
30
|
+
/** Resolves once `text` is handed to the OS (or the write fails); never rejects. */
|
|
31
|
+
export function writeStdout(text, stream = process.stdout) {
|
|
32
|
+
return new Promise((resolve) => {
|
|
33
|
+
try {
|
|
34
|
+
stream.write(text, () => resolve());
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
resolve();
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
/** Waits for `pending` at most `ms`; a bound for cleanup that must not hang exit. */
|
|
42
|
+
export function settleWithin(pending, ms) {
|
|
43
|
+
return new Promise((resolve) => {
|
|
44
|
+
const timer = setTimeout(resolve, ms);
|
|
45
|
+
pending.then(() => { clearTimeout(timer); resolve(); }, () => { clearTimeout(timer); resolve(); });
|
|
46
|
+
});
|
|
47
|
+
}
|
|
30
48
|
//# sourceMappingURL=cli-lifecycle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-lifecycle.js","sourceRoot":"","sources":["../src/cli-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,WAAW,EAAE,MAAM,SAAS,CAAC;AAInD,4EAA4E;AAC5E,MAAM,UAAU,iBAAiB,CAAC,MAAsB;IACtD,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,OAAO,OAAO,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,gBAAgB,CAC9B,IAAmB,EACnB,MAA6B;IAE7B,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACzD,CAAC;AAQD;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CACzC,OAA8B;IAE9B,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,OAAO,CAAC,MAAM,EAAE,EAAE;QAChB,QAAQ,EAAE,CAAC;QACX,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,QAAQ,KAAK,CAAC;YAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;;YACtC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli-lifecycle.js","sourceRoot":"","sources":["../src/cli-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,WAAW,EAAE,MAAM,SAAS,CAAC;AAInD,4EAA4E;AAC5E,MAAM,UAAU,iBAAiB,CAAC,MAAsB;IACtD,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,OAAO,OAAO,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,gBAAgB,CAC9B,IAAmB,EACnB,MAA6B;IAE7B,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACzD,CAAC;AAQD;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CACzC,OAA8B;IAE9B,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,OAAO,CAAC,MAAM,EAAE,EAAE;QAChB,QAAQ,EAAE,CAAC;QACX,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,QAAQ,KAAK,CAAC;YAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;;YACtC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC;AACJ,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,WAAW,CACzB,IAAY,EACZ,SAA4C,OAAO,CAAC,MAAM;IAE1D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,YAAY,CAAC,OAAyB,EAAE,EAAU;IAChE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CACV,GAAG,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EACzC,GAAG,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAC1C,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|