claude-code-infinite 1.0.20 → 1.0.21

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 (69) hide show
  1. package/README.md +91 -6
  2. package/dist/auto-update-runner.d.ts +52 -0
  3. package/dist/auto-update-runner.d.ts.map +1 -0
  4. package/dist/auto-update-runner.js +307 -0
  5. package/dist/auto-update-runner.js.map +1 -0
  6. package/dist/auto-update-setup.d.ts +38 -0
  7. package/dist/auto-update-setup.d.ts.map +1 -0
  8. package/dist/auto-update-setup.js +72 -0
  9. package/dist/auto-update-setup.js.map +1 -0
  10. package/dist/auto-update.d.ts +170 -0
  11. package/dist/auto-update.d.ts.map +1 -0
  12. package/dist/auto-update.js +401 -0
  13. package/dist/auto-update.js.map +1 -0
  14. package/dist/cli-main.js +22 -2
  15. package/dist/cli-main.js.map +1 -1
  16. package/dist/config.d.ts +2 -0
  17. package/dist/config.d.ts.map +1 -1
  18. package/dist/config.js.map +1 -1
  19. package/dist/count-tokens.d.ts +38 -3
  20. package/dist/count-tokens.d.ts.map +1 -1
  21. package/dist/count-tokens.js +88 -19
  22. package/dist/count-tokens.js.map +1 -1
  23. package/dist/memtree-finder.d.ts +11 -0
  24. package/dist/memtree-finder.d.ts.map +1 -1
  25. package/dist/memtree-finder.js +18 -0
  26. package/dist/memtree-finder.js.map +1 -1
  27. package/dist/memtree-mcp-config.d.ts.map +1 -1
  28. package/dist/memtree-mcp-config.js +4 -2
  29. package/dist/memtree-mcp-config.js.map +1 -1
  30. package/dist/memtree-mcp.d.ts +24 -4
  31. package/dist/memtree-mcp.d.ts.map +1 -1
  32. package/dist/memtree-mcp.js +47 -14
  33. package/dist/memtree-mcp.js.map +1 -1
  34. package/dist/memtree-tools.d.ts +17 -1
  35. package/dist/memtree-tools.d.ts.map +1 -1
  36. package/dist/memtree-tools.js +50 -2
  37. package/dist/memtree-tools.js.map +1 -1
  38. package/dist/memtree.d.ts +10 -1
  39. package/dist/memtree.d.ts.map +1 -1
  40. package/dist/memtree.js +54 -19
  41. package/dist/memtree.js.map +1 -1
  42. package/dist/notices.d.ts +6 -1
  43. package/dist/notices.d.ts.map +1 -1
  44. package/dist/notices.js +13 -1
  45. package/dist/notices.js.map +1 -1
  46. package/dist/proxy.d.ts +17 -1
  47. package/dist/proxy.d.ts.map +1 -1
  48. package/dist/proxy.js +130 -47
  49. package/dist/proxy.js.map +1 -1
  50. package/dist/reqlog.d.ts +10 -0
  51. package/dist/reqlog.d.ts.map +1 -1
  52. package/dist/reqlog.js.map +1 -1
  53. package/dist/request-sizing.d.ts +21 -2
  54. package/dist/request-sizing.d.ts.map +1 -1
  55. package/dist/request-sizing.js +60 -7
  56. package/dist/request-sizing.js.map +1 -1
  57. package/dist/token-estimate.d.ts +35 -0
  58. package/dist/token-estimate.d.ts.map +1 -0
  59. package/dist/token-estimate.js +97 -0
  60. package/dist/token-estimate.js.map +1 -0
  61. package/dist/update-check.d.ts +4 -3
  62. package/dist/update-check.d.ts.map +1 -1
  63. package/dist/update-check.js +4 -3
  64. package/dist/update-check.js.map +1 -1
  65. package/dist/update-lock.d.ts +68 -0
  66. package/dist/update-lock.d.ts.map +1 -0
  67. package/dist/update-lock.js +176 -0
  68. package/dist/update-lock.js.map +1 -0
  69. package/package.json +1 -1
@@ -0,0 +1,176 @@
1
+ /**
2
+ * The auto-update install lock: at most one ccc installs at a time.
3
+ *
4
+ * A directory of entries, one per acquirer, each under its own random name and
5
+ * written whole (temp file, then rename). To acquire, write your entry, then
6
+ * look at everyone else's: if any other entry is live, remove yours and back
7
+ * off. Of two acquirers, whichever looks second sees the first, so at most one
8
+ * proceeds (when both look after both wrote, both back off; the next launch
9
+ * tries again). No process ever deletes or moves a file that a live process
10
+ * owns or may be creating: an entry is removed only by its owner, or by anyone
11
+ * once it is stale, and a stale entry's owner is gone and never writes again.
12
+ *
13
+ * Each entry has one writer at a time. The launching ccc creates it and,
14
+ * right after spawning the runner, records the runner's pid; the runner waits
15
+ * for that handoff before it writes or runs anything (auto-update-runner.ts),
16
+ * and from then on owns the entry, adding npm's process group while one runs.
17
+ * An entry is live while any process it names is alive (the launcher, the
18
+ * runner, or npm's group), however old: a lock is never taken from a live
19
+ * installer by age. A pid reused by an unrelated process can keep it held;
20
+ * callers treat a lock held for over UPDATE_LOCK_STALE_MS as stuck and fall
21
+ * back to the update hint (auto-update.ts). The runner marks its entry
22
+ * `spawning` before starting npm and clears it once npm's group is recorded:
23
+ * an entry left `spawning` by a dead runner may have an unrecorded npm
24
+ * running, so it stays live (fail closed) and, after an hour, the hint shows.
25
+ * Removing update.lock.d by hand clears it.
26
+ */
27
+ import { randomUUID } from "node:crypto";
28
+ import * as fs from "node:fs";
29
+ import * as path from "node:path";
30
+ /** Longer than a healthy runner lives (install timeout + kill graces + deadline). */
31
+ export const UPDATE_LOCK_STALE_MS = 60 * 60 * 1000;
32
+ /** An unreadable entry (never written whole) is garbage only after this. */
33
+ export const DEAD_HOLDER_GRACE_MS = 30 * 1000;
34
+ const ENTRY_SUFFIX = ".json";
35
+ /**
36
+ * Acquire the lock: the owner token, or null when another entry is live (or
37
+ * changed while being judged).
38
+ *
39
+ * Each other entry is read, its named processes checked, then read again: it
40
+ * counts as stale only if every named process was gone and the entry is
41
+ * unchanged. Only named processes ever write an entry (the launcher hands
42
+ * over to the runner, which adds npm's group), and a process found gone
43
+ * before the second read cannot write after it, so an entry unchanged across
44
+ * the check stays dead and is safe to remove. A change (say, a handoff landing
45
+ * mid-check) means it may have a live owner: back off.
46
+ */
47
+ export function acquireUpdateLock(lockDir, now,
48
+ /** Test-only: runs between the liveness checks and the second read. */
49
+ afterLivenessCheck) {
50
+ const token = randomUUID();
51
+ if (!writeLockEntry(lockDir, { token, startedAt: now, pid: process.pid }))
52
+ return null;
53
+ const others = otherEntries(lockDir, token);
54
+ const allStale = others.every((entry) => entryIsStale(entry, now));
55
+ afterLivenessCheck?.();
56
+ if (!allStale || others.some((entry) => changedSince(entry))) {
57
+ releaseUpdateLock(lockDir, token);
58
+ return null;
59
+ }
60
+ for (const entry of others)
61
+ fs.rmSync(entry.file, { force: true });
62
+ return token;
63
+ }
64
+ /** Remove this token's entry (only its owner ever does, or anyone once stale). */
65
+ export function releaseUpdateLock(lockDir, token) {
66
+ if (!/^[0-9a-f-]{36}$/.test(token))
67
+ return;
68
+ fs.rmSync(entryPath(lockDir, token), { force: true });
69
+ }
70
+ /**
71
+ * The launcher's one write after creating the entry: the runner's pid, so the
72
+ * entry stays live while the runner exists, even before it has run a line.
73
+ */
74
+ export function setLockRunner(lockDir, token, runnerPid) {
75
+ const entry = readEntry(entryPath(lockDir, token))?.data;
76
+ if (entry?.token !== token)
77
+ return false;
78
+ return writeLockEntry(lockDir, { ...entry, runner: runnerPid });
79
+ }
80
+ /** When the oldest live entry was taken, or null when the lock is free. */
81
+ export function liveLockSince(lockDir, now) {
82
+ const live = otherEntries(lockDir, "").filter((e) => e.data && !entryIsStale(e, now));
83
+ return live.length ? Math.min(...live.map((e) => e.data.startedAt)) : null;
84
+ }
85
+ export function entryPath(lockDir, token) {
86
+ return path.join(lockDir, `${token}${ENTRY_SUFFIX}`);
87
+ }
88
+ /** Atomic: readers see a whole entry or none. */
89
+ function writeLockEntry(lockDir, entry) {
90
+ const tmp = path.join(lockDir, `.${entry.token}.${process.pid}.tmp`);
91
+ try {
92
+ fs.mkdirSync(lockDir, { recursive: true, mode: 0o700 });
93
+ fs.writeFileSync(tmp, JSON.stringify(entry), { mode: 0o600 });
94
+ fs.renameSync(tmp, entryPath(lockDir, entry.token));
95
+ return true;
96
+ }
97
+ catch {
98
+ fs.rmSync(tmp, { force: true });
99
+ return false;
100
+ }
101
+ }
102
+ /** True when the entry is no longer exactly what was read (gone counts as unchanged). */
103
+ function changedSince(entry) {
104
+ const again = readEntry(entry.file);
105
+ return again !== null && (again.raw !== entry.raw || again.mtimeMs !== entry.mtimeMs);
106
+ }
107
+ function otherEntries(lockDir, token) {
108
+ let names;
109
+ try {
110
+ names = fs.readdirSync(lockDir);
111
+ }
112
+ catch {
113
+ return [];
114
+ }
115
+ return names
116
+ .filter((name) => name.endsWith(ENTRY_SUFFIX) && !name.startsWith(".") && name !== `${token}${ENTRY_SUFFIX}`)
117
+ .map((name) => readEntry(path.join(lockDir, name)))
118
+ .filter((entry) => entry !== null);
119
+ }
120
+ /** null when the file is gone (released meanwhile). */
121
+ function readEntry(file) {
122
+ let mtimeMs;
123
+ let raw;
124
+ try {
125
+ mtimeMs = fs.statSync(file).mtimeMs;
126
+ raw = fs.readFileSync(file, "utf8");
127
+ }
128
+ catch {
129
+ return null;
130
+ }
131
+ return { file, data: parseEntry(raw), mtimeMs, raw };
132
+ }
133
+ function parseEntry(raw) {
134
+ try {
135
+ const data = JSON.parse(raw);
136
+ if (typeof data?.token !== "string" || typeof data.startedAt !== "number")
137
+ return null;
138
+ const int = (v) => (Number.isInteger(v) && v > 0 ? v : undefined);
139
+ return {
140
+ token: data.token,
141
+ startedAt: data.startedAt,
142
+ pid: int(data.pid),
143
+ runner: int(data.runner),
144
+ group: int(data.group),
145
+ ...(data.spawning === true ? { spawning: true } : {}),
146
+ };
147
+ }
148
+ catch {
149
+ return null;
150
+ }
151
+ }
152
+ /** Stale only when no process it names is alive (or it was never written whole). */
153
+ function entryIsStale(entry, now) {
154
+ if (entry.data === null)
155
+ return now - entry.mtimeMs > DEAD_HOLDER_GRACE_MS;
156
+ const { pid, runner, group } = entry.data;
157
+ if (pid !== undefined && processAlive(pid))
158
+ return false;
159
+ if (runner !== undefined && processAlive(runner))
160
+ return false;
161
+ if (group !== undefined && processAlive(-group))
162
+ return false;
163
+ // Its runner died while starting npm: npm may be running unrecorded.
164
+ return entry.data.spawning !== true;
165
+ }
166
+ /** Signal 0 to a pid (or, negative, a process group). */
167
+ function processAlive(pid) {
168
+ try {
169
+ process.kill(pid, 0);
170
+ return true;
171
+ }
172
+ catch (err) {
173
+ return err.code === "EPERM";
174
+ }
175
+ }
176
+ //# sourceMappingURL=update-lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-lock.js","sourceRoot":"","sources":["../src/update-lock.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-code-infinite",
3
- "version": "1.0.20",
3
+ "version": "1.0.21",
4
4
  "description": "Wrapper for Claude Code CLI",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",