crewly 1.20.158 → 1.20.160
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/config/constants.ts +13 -0
- package/config/roles/orchestrator/prompt.md +1 -0
- package/config/roles/team-leader/prompt.md +3 -0
- package/config/roles/team-leader/tl-addon.md +3 -0
- package/config/skills/agent/core/project-tickets/SKILL.md +17 -1
- package/config/skills/agent/core/project-tickets/execute.sh +16 -3
- package/config/skills/agent/core/project-tickets/execute.test.sh +11 -0
- package/config/skills/orchestrator/delegate-task/SKILL.md +18 -0
- package/config/skills/orchestrator/delegate-task/execute.sh +23 -5
- package/config/skills/orchestrator/delegate-task/execute.test.sh +44 -1
- package/config/skills/registry.json +55 -4
- package/config/skills/team-leader/delegate-task/SKILL.md +18 -0
- package/config/skills/team-leader/delegate-task/execute.sh +31 -4
- package/config/skills/team-leader/delegate-task/execute.test.sh +59 -0
- package/dist/backend/backend/src/constants.d.ts +59 -3
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +54 -3
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts +8 -0
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js +13 -0
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.d.ts +1 -0
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.js +3 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +73 -3
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/worktree-janitor/worktree-janitor.routes.d.ts +2 -1
- package/dist/backend/backend/src/controllers/worktree-janitor/worktree-janitor.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/worktree-janitor/worktree-janitor.routes.js +4 -2
- package/dist/backend/backend/src/controllers/worktree-janitor/worktree-janitor.routes.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +17 -2
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +9 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/delegation-ticket-route.d.ts +63 -0
- package/dist/backend/backend/src/services/project-tickets/delegation-ticket-route.d.ts.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/delegation-ticket-route.js +80 -0
- package/dist/backend/backend/src/services/project-tickets/delegation-ticket-route.js.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.d.ts +92 -1
- package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.js +255 -4
- package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.js.map +1 -1
- package/dist/backend/backend/src/services/worktree/low-disk-guard.d.ts +109 -0
- package/dist/backend/backend/src/services/worktree/low-disk-guard.d.ts.map +1 -0
- package/dist/backend/backend/src/services/worktree/low-disk-guard.js +148 -0
- package/dist/backend/backend/src/services/worktree/low-disk-guard.js.map +1 -0
- package/dist/backend/backend/src/services/worktree/scratch-janitor.d.ts +140 -0
- package/dist/backend/backend/src/services/worktree/scratch-janitor.d.ts.map +1 -0
- package/dist/backend/backend/src/services/worktree/scratch-janitor.js +249 -0
- package/dist/backend/backend/src/services/worktree/scratch-janitor.js.map +1 -0
- package/dist/backend/backend/src/services/worktree/worktree-janitor.git.d.ts +92 -1
- package/dist/backend/backend/src/services/worktree/worktree-janitor.git.d.ts.map +1 -1
- package/dist/backend/backend/src/services/worktree/worktree-janitor.git.js +207 -1
- package/dist/backend/backend/src/services/worktree/worktree-janitor.git.js.map +1 -1
- package/dist/backend/backend/src/services/worktree/worktree-janitor.service.d.ts +135 -28
- package/dist/backend/backend/src/services/worktree/worktree-janitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/worktree/worktree-janitor.service.js +248 -39
- package/dist/backend/backend/src/services/worktree/worktree-janitor.service.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/backend/config/constants.d.ts +13 -0
- package/dist/backend/config/constants.d.ts.map +1 -1
- package/dist/backend/config/constants.js +13 -0
- package/dist/backend/config/constants.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +59 -3
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +54 -3
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.js +9 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/cli/config/constants.d.ts +13 -0
- package/dist/cli/config/constants.d.ts.map +1 -1
- package/dist/cli/config/constants.js +13 -0
- package/dist/cli/config/constants.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scratch janitor — removes stale Claude Code session scratch dirs.
|
|
3
|
+
*
|
|
4
|
+
* Claude Code gives every session a temp dir
|
|
5
|
+
* `<tmp>/claude-<uid>/<project-slug>/<session-uuid>/` (with `scratchpad/`
|
|
6
|
+
* inside). Agents clone whole repos and build test homes there — 0.5–1.8 GB
|
|
7
|
+
* each — and nothing ever deletes them; one Mac filled its disk with dozens
|
|
8
|
+
* of GB of week-old sessions. These are not worktrees, so the worktree rules
|
|
9
|
+
* never see them.
|
|
10
|
+
*
|
|
11
|
+
* ## Roots
|
|
12
|
+
* `<os.tmpdir()>/claude-<uid>`, `/private/tmp/claude-<uid>` and
|
|
13
|
+
* `/tmp/claude-<uid>`, de-duplicated by real path. Only the
|
|
14
|
+
* `<root>/<slug>/<uuid>/` pattern is a unit; anything else in the root
|
|
15
|
+
* (loose files, worktrees such as `<root>/visa-cm-wt`) is left alone here.
|
|
16
|
+
* Symlinks are never followed out of the root.
|
|
17
|
+
*
|
|
18
|
+
* ## A session dir is deleted only when ALL hold
|
|
19
|
+
* 1. Idle: the newest mtime of the dir and everything in its top two levels,
|
|
20
|
+
* and of every git repo's HEAD / index / logs/HEAD inside it, is older
|
|
21
|
+
* than 3 days (halved in low-disk mode, never below 2 h).
|
|
22
|
+
* 2. No process of this user (nor a Crewly agent session) has its cwd
|
|
23
|
+
* inside. If the probe fails, everything is kept.
|
|
24
|
+
* 3. It holds no linked worktree of a repo outside it — those belong to the
|
|
25
|
+
* worktree rules (`git worktree remove`), never `rm -rf`.
|
|
26
|
+
* 4. Every git repo inside (depth ≤ 3, `node_modules` skipped) is safe:
|
|
27
|
+
* - `git status --porcelain --untracked-files=all` is empty (untracked
|
|
28
|
+
* files count, ignored ones do not);
|
|
29
|
+
* - it has a remote (no remote → kept: its commits may exist nowhere else);
|
|
30
|
+
* - `git rev-list HEAD --branches --not --remotes` is empty (no local
|
|
31
|
+
* commit missing from the remote-tracking refs) and there is no stash;
|
|
32
|
+
* - it has no linked worktree outside the session dir (deleting the
|
|
33
|
+
* clone would orphan it).
|
|
34
|
+
* Any git error keeps the dir.
|
|
35
|
+
*
|
|
36
|
+
* @module services/worktree/scratch-janitor
|
|
37
|
+
*/
|
|
38
|
+
import * as fs from 'fs';
|
|
39
|
+
import * as os from 'os';
|
|
40
|
+
import * as path from 'path';
|
|
41
|
+
import { WORKTREE_JANITOR_CONSTANTS } from '../../constants.js';
|
|
42
|
+
import { canonicalPath, diskUsageBytes, EventLoopYielder, findGitCheckouts, isPathInside, latestTreeMtimeMs, latestWorktreeMtimeMs, parsePorcelainWorktrees, readGitFilePointer, } from './worktree-janitor.git.js';
|
|
43
|
+
/**
|
|
44
|
+
* The per-user Claude Code temp roots that exist, de-duplicated by real path.
|
|
45
|
+
*
|
|
46
|
+
* @param uid - User id (default: process.getuid())
|
|
47
|
+
* @param tmpDir - System temp dir (default: os.tmpdir())
|
|
48
|
+
* @returns Existing root directories (real paths)
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```typescript
|
|
52
|
+
* defaultScratchRoots(501); // ['/private/tmp/claude-501']
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export function defaultScratchRoots(uid, tmpDir = os.tmpdir()) {
|
|
56
|
+
const id = uid ?? (typeof process.getuid === 'function' ? process.getuid() : os.userInfo().uid);
|
|
57
|
+
const name = `${WORKTREE_JANITOR_CONSTANTS.SCRATCH_ROOT_PREFIX}${id}`;
|
|
58
|
+
const candidates = [tmpDir, ...WORKTREE_JANITOR_CONSTANTS.SCRATCH_TMP_DIRS].map((d) => path.join(d, name));
|
|
59
|
+
const out = new Set();
|
|
60
|
+
for (const c of candidates) {
|
|
61
|
+
try {
|
|
62
|
+
if (fs.lstatSync(c).isDirectory())
|
|
63
|
+
out.add(fs.realpathSync(c));
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// missing
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return [...out];
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Session dirs (`<root>/<slug>/<uuid>`) under a root. Symlinked slugs or
|
|
73
|
+
* session dirs are skipped, as is anything not matching the pattern. Async;
|
|
74
|
+
* yields to the event loop every few entries.
|
|
75
|
+
*
|
|
76
|
+
* @param root - A scratch root (real path)
|
|
77
|
+
* @returns Absolute session dirs
|
|
78
|
+
*/
|
|
79
|
+
export async function listSessionDirs(root) {
|
|
80
|
+
const out = [];
|
|
81
|
+
const yielder = new EventLoopYielder();
|
|
82
|
+
let slugs;
|
|
83
|
+
try {
|
|
84
|
+
slugs = await fs.promises.readdir(root, { withFileTypes: true });
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return out;
|
|
88
|
+
}
|
|
89
|
+
for (const slug of slugs) {
|
|
90
|
+
await yielder.tick();
|
|
91
|
+
if (!slug.isDirectory())
|
|
92
|
+
continue;
|
|
93
|
+
const slugDir = path.join(root, slug.name);
|
|
94
|
+
let sessions;
|
|
95
|
+
try {
|
|
96
|
+
sessions = await fs.promises.readdir(slugDir, { withFileTypes: true });
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
for (const s of sessions) {
|
|
102
|
+
if (!s.isDirectory() || !WORKTREE_JANITOR_CONSTANTS.SCRATCH_SESSION_DIR_PATTERN.test(s.name))
|
|
103
|
+
continue;
|
|
104
|
+
out.push(path.join(slugDir, s.name));
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return out;
|
|
108
|
+
}
|
|
109
|
+
/** Git dir of a checkout (`.git` dir, or the one a `.git` file points to). */
|
|
110
|
+
async function gitDirOf(repo) {
|
|
111
|
+
return repo.kind === 'dir' ? path.join(repo.path, '.git') : readGitFilePointer(repo.path);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Evaluate one session dir. Read-only.
|
|
115
|
+
*
|
|
116
|
+
* @param dir - Session dir
|
|
117
|
+
* @param input - Sweep inputs
|
|
118
|
+
* @returns Verdict (not yet acted on)
|
|
119
|
+
*/
|
|
120
|
+
export async function evaluateSessionDir(dir, input) {
|
|
121
|
+
const repos = await findGitCheckouts(dir, WORKTREE_JANITOR_CONSTANTS.SCRATCH_REPO_SEARCH_DEPTH);
|
|
122
|
+
const base = { path: dir, repos: repos.map((r) => r.path), removed: false };
|
|
123
|
+
const keep = (reason, detail, idleMs) => ({
|
|
124
|
+
...base,
|
|
125
|
+
decision: 'keep',
|
|
126
|
+
reason,
|
|
127
|
+
...(detail ? { detail } : {}),
|
|
128
|
+
...(idleMs !== undefined ? { idleMs } : {}),
|
|
129
|
+
});
|
|
130
|
+
let newest = await latestTreeMtimeMs(dir, WORKTREE_JANITOR_CONSTANTS.SCRATCH_MTIME_DEPTH);
|
|
131
|
+
for (const r of repos) {
|
|
132
|
+
const gd = await gitDirOf(r);
|
|
133
|
+
const m = latestWorktreeMtimeMs(r.path, gd);
|
|
134
|
+
if (m !== null && (newest === null || m > newest))
|
|
135
|
+
newest = m;
|
|
136
|
+
if (gd) {
|
|
137
|
+
const logs = await latestTreeMtimeMs(path.join(gd, 'logs'), WORKTREE_JANITOR_CONSTANTS.SCRATCH_MTIME_DEPTH);
|
|
138
|
+
if (logs !== null && (newest === null || logs > newest))
|
|
139
|
+
newest = logs;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
const idleMs = newest === null ? undefined : Math.max(0, input.now - newest);
|
|
143
|
+
if (idleMs === undefined || idleMs < input.minIdleMs)
|
|
144
|
+
return keep('recent', undefined, idleMs);
|
|
145
|
+
if (input.busy === null)
|
|
146
|
+
return keep('cwd-probe-failed', undefined, idleMs);
|
|
147
|
+
const hit = input.busy.find((b) => isPathInside(b.cwd, dir));
|
|
148
|
+
if (hit)
|
|
149
|
+
return keep(hit.source === 'agent-session' ? 'agent-session-inside' : 'process-inside', hit.cwd, idleMs);
|
|
150
|
+
for (const r of repos) {
|
|
151
|
+
if (r.kind === 'file') {
|
|
152
|
+
const common = await input.git(['-C', r.path, 'rev-parse', '--path-format=absolute', '--git-common-dir']);
|
|
153
|
+
if (common.code !== 0)
|
|
154
|
+
return keep('git-failed', `${r.path}: ${common.stderr.trim().slice(0, 200)}`, idleMs);
|
|
155
|
+
if (!isPathInside(common.stdout.trim(), dir))
|
|
156
|
+
return keep('contains-worktree', r.path, idleMs);
|
|
157
|
+
}
|
|
158
|
+
const status = await input.git(['-C', r.path, 'status', '--porcelain', '--untracked-files=all']);
|
|
159
|
+
if (status.code !== 0)
|
|
160
|
+
return keep('git-failed', `${r.path}: ${status.stderr.trim().slice(0, 200)}`, idleMs);
|
|
161
|
+
const dirty = status.stdout.split('\n').filter((l) => l.trim() !== '').length;
|
|
162
|
+
if (dirty > 0)
|
|
163
|
+
return keep('dirty', `${r.path}: ${dirty} changed/untracked path(s)`, idleMs);
|
|
164
|
+
const remotes = await input.git(['-C', r.path, 'remote']);
|
|
165
|
+
if (remotes.code !== 0)
|
|
166
|
+
return keep('git-failed', `${r.path}: ${remotes.stderr.trim().slice(0, 200)}`, idleMs);
|
|
167
|
+
if (remotes.stdout.trim() === '')
|
|
168
|
+
return keep('no-remote', r.path, idleMs);
|
|
169
|
+
const unpushed = await input.git(['-C', r.path, 'rev-list', '--max-count=1', 'HEAD', '--branches', '--not', '--remotes']);
|
|
170
|
+
if (unpushed.code !== 0)
|
|
171
|
+
return keep('git-failed', `${r.path}: ${unpushed.stderr.trim().slice(0, 200)}`, idleMs);
|
|
172
|
+
if (unpushed.stdout.trim() !== '')
|
|
173
|
+
return keep('unpushed', `${r.path}: commit ${unpushed.stdout.trim().slice(0, 12)} is on no remote`, idleMs);
|
|
174
|
+
const stash = await input.git(['-C', r.path, 'rev-parse', '--verify', '--quiet', 'refs/stash']);
|
|
175
|
+
if (stash.code === 0)
|
|
176
|
+
return keep('stash', r.path, idleMs);
|
|
177
|
+
const wts = await input.git(['-C', r.path, 'worktree', 'list', '--porcelain']);
|
|
178
|
+
if (wts.code !== 0)
|
|
179
|
+
return keep('git-failed', `${r.path}: ${wts.stderr.trim().slice(0, 200)}`, idleMs);
|
|
180
|
+
const external = parsePorcelainWorktrees(wts.stdout).find((w) => !w.isMain && !w.prunable && fs.existsSync(w.path) && !isPathInside(w.path, dir));
|
|
181
|
+
if (external)
|
|
182
|
+
return keep('has-external-worktrees', `${r.path} → ${external.path}`, idleMs);
|
|
183
|
+
}
|
|
184
|
+
return { ...base, decision: 'remove', reason: 'stale', idleMs };
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* One sweep over every session dir of every root. Never throws.
|
|
188
|
+
*
|
|
189
|
+
* @param input - Roots, busy cwds, clock, threshold, dry-run flag, git runner
|
|
190
|
+
* @returns Per-dir verdicts and totals
|
|
191
|
+
*/
|
|
192
|
+
export async function sweepScratch(input) {
|
|
193
|
+
const summary = {
|
|
194
|
+
roots: input.roots.map(canonicalPath),
|
|
195
|
+
removed: 0,
|
|
196
|
+
wouldRemove: 0,
|
|
197
|
+
kept: 0,
|
|
198
|
+
freedBytes: 0,
|
|
199
|
+
keptReasons: {},
|
|
200
|
+
sessions: [],
|
|
201
|
+
};
|
|
202
|
+
const sizeOf = input.sizeOf ?? diskUsageBytes;
|
|
203
|
+
for (const root of summary.roots) {
|
|
204
|
+
for (const dir of await listSessionDirs(root)) {
|
|
205
|
+
let v;
|
|
206
|
+
try {
|
|
207
|
+
v = await evaluateSessionDir(dir, input);
|
|
208
|
+
}
|
|
209
|
+
catch (err) {
|
|
210
|
+
v = { path: dir, decision: 'keep', reason: 'git-failed', detail: err instanceof Error ? err.message : String(err), repos: [], removed: false };
|
|
211
|
+
}
|
|
212
|
+
if (v.decision === 'remove' && !input.dryRun)
|
|
213
|
+
await removeSessionDir(root, v, sizeOf);
|
|
214
|
+
summary.sessions.push(v);
|
|
215
|
+
if (v.removed) {
|
|
216
|
+
summary.removed++;
|
|
217
|
+
summary.freedBytes += v.freedBytes ?? 0;
|
|
218
|
+
}
|
|
219
|
+
else if (input.dryRun && v.decision === 'remove')
|
|
220
|
+
summary.wouldRemove++;
|
|
221
|
+
else {
|
|
222
|
+
summary.kept++;
|
|
223
|
+
const key = v.error ? 'remove-failed' : v.reason;
|
|
224
|
+
summary.keptReasons[key] = (summary.keptReasons[key] ?? 0) + 1;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return summary;
|
|
229
|
+
}
|
|
230
|
+
/** Delete one session dir after re-checking it is a real dir inside its root. */
|
|
231
|
+
async function removeSessionDir(root, v, sizeOf) {
|
|
232
|
+
try {
|
|
233
|
+
const st = await fs.promises.lstat(v.path);
|
|
234
|
+
if (!st.isDirectory() || st.isSymbolicLink() || !(await fs.promises.realpath(v.path)).startsWith(root + path.sep)) {
|
|
235
|
+
v.error = 'not a real directory inside the scratch root';
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
const size = await sizeOf(v.path);
|
|
239
|
+
// fs.rm removes symlinks themselves, never their targets.
|
|
240
|
+
await fs.promises.rm(v.path, { recursive: true, force: true });
|
|
241
|
+
v.removed = true;
|
|
242
|
+
if (size !== null)
|
|
243
|
+
v.freedBytes = size;
|
|
244
|
+
}
|
|
245
|
+
catch (err) {
|
|
246
|
+
v.error = (err instanceof Error ? err.message : String(err)).slice(0, 300);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=scratch-janitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scratch-janitor.js","sourceRoot":"","sources":["../../../../../../backend/src/services/worktree/scratch-janitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,7 +30,8 @@ export interface RunCommandOptions {
|
|
|
30
30
|
* Run a command without a shell and never throw.
|
|
31
31
|
*
|
|
32
32
|
* Git and gh are told never to prompt (no credential dialogs, no pager), so a
|
|
33
|
-
* periodic background job cannot hang on input
|
|
33
|
+
* periodic background job cannot hang on input, and git takes no optional
|
|
34
|
+
* locks (a status never rewrites the index).
|
|
34
35
|
*
|
|
35
36
|
* @param file - Executable (e.g. `git`, `gh`, or an absolute path)
|
|
36
37
|
* @param args - Arguments
|
|
@@ -128,4 +129,94 @@ export declare function listProcessCwds(): Promise<string[] | null>;
|
|
|
128
129
|
* @returns True when `CREWLY_WORKTREE_JANITOR` is `0`/`off`/`false`/`no`
|
|
129
130
|
*/
|
|
130
131
|
export declare function isJanitorDisabled(env?: NodeJS.ProcessEnv): boolean;
|
|
132
|
+
/**
|
|
133
|
+
* Yield to the event loop every YIELD_EVERY_ENTRIES calls, so a long
|
|
134
|
+
* filesystem walk never holds up Slack, relay polls or PTY I/O.
|
|
135
|
+
*/
|
|
136
|
+
export declare class EventLoopYielder {
|
|
137
|
+
private count;
|
|
138
|
+
/**
|
|
139
|
+
* Count one unit of work; every YIELD_EVERY_ENTRIES units, wait one
|
|
140
|
+
* `setImmediate` turn.
|
|
141
|
+
*
|
|
142
|
+
* @returns Resolves when the caller may continue
|
|
143
|
+
*/
|
|
144
|
+
tick(): Promise<void>;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Git dir a `.git` file points to (`gitdir: <path>`), resolved against `dir`.
|
|
148
|
+
*
|
|
149
|
+
* @param dir - Directory holding the `.git` file
|
|
150
|
+
* @returns Absolute git dir, or null when there is no readable `.git` file
|
|
151
|
+
*/
|
|
152
|
+
export declare function readGitFilePointer(dir: string): Promise<string | null>;
|
|
153
|
+
/**
|
|
154
|
+
* Main worktree of the repo a linked worktree belongs to, read from the
|
|
155
|
+
* worktree's `.git` file (`gitdir: <main>/.git/worktrees/<name>`). Returns
|
|
156
|
+
* null for anything else: a `.git` directory (a normal clone), a submodule
|
|
157
|
+
* (`gitdir: …/.git/modules/…`), or an unreadable file.
|
|
158
|
+
*
|
|
159
|
+
* @param dir - Directory that may be a linked worktree
|
|
160
|
+
* @returns Absolute path of the main worktree, or null
|
|
161
|
+
*
|
|
162
|
+
* @example
|
|
163
|
+
* ```typescript
|
|
164
|
+
* // /tmp/visa-cm-wt/.git contains "gitdir: /src/ce-core/.git/worktrees/visa-cm-wt"
|
|
165
|
+
* await mainRepoOfLinkedWorktree('/tmp/visa-cm-wt'); // '/src/ce-core'
|
|
166
|
+
* ```
|
|
167
|
+
*/
|
|
168
|
+
export declare function mainRepoOfLinkedWorktree(dir: string): Promise<string | null>;
|
|
169
|
+
/** A git checkout found on disk. */
|
|
170
|
+
export interface FoundRepo {
|
|
171
|
+
/** Directory holding `.git` */
|
|
172
|
+
path: string;
|
|
173
|
+
/** `dir` for a `.git` directory (clone / main worktree), `file` for a `.git` file (linked worktree or submodule) */
|
|
174
|
+
kind: 'dir' | 'file';
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Find git checkouts under `root` without following symlinks. A directory
|
|
178
|
+
* with a `.git` directory or file is a checkout and is not descended into;
|
|
179
|
+
* `node_modules` and `.git` are never descended into. Fully async; yields to
|
|
180
|
+
* the event loop every few directories.
|
|
181
|
+
*
|
|
182
|
+
* @param root - Directory to search (itself included, at depth 0)
|
|
183
|
+
* @param maxDepth - Deepest level searched (root = 0)
|
|
184
|
+
* @param maxDirs - Stop after visiting this many directories
|
|
185
|
+
* @returns Checkouts found, in walk order
|
|
186
|
+
*/
|
|
187
|
+
export declare function findGitCheckouts(root: string, maxDepth: number, maxDirs?: number): Promise<FoundRepo[]>;
|
|
188
|
+
/**
|
|
189
|
+
* Main worktrees of every repo that owns a linked worktree somewhere under
|
|
190
|
+
* the given roots (e.g. `/tmp/claude-501/visa-cm-wt` → `~/src/ce-core`), so
|
|
191
|
+
* repos that are not registered projects still get their temp worktrees
|
|
192
|
+
* cleaned. Visits at most DISCOVERY_MAX_DIRS directories per root.
|
|
193
|
+
*
|
|
194
|
+
* @param roots - Temp roots to scan (missing roots are skipped)
|
|
195
|
+
* @returns De-duplicated main-worktree paths
|
|
196
|
+
*/
|
|
197
|
+
export declare function discoverLinkedWorktreeRepos(roots: readonly string[]): Promise<string[]>;
|
|
198
|
+
/**
|
|
199
|
+
* Newest mtime (ms) of `dir` and everything within `depth` levels below it,
|
|
200
|
+
* using lstat (symlinks are not followed). Async; yields every few entries.
|
|
201
|
+
*
|
|
202
|
+
* @param dir - Directory
|
|
203
|
+
* @param depth - Levels below `dir` to include (0 = only `dir`)
|
|
204
|
+
* @returns Newest mtime in ms, or null when `dir` cannot be stat'ed
|
|
205
|
+
*/
|
|
206
|
+
export declare function latestTreeMtimeMs(dir: string, depth: number): Promise<number | null>;
|
|
207
|
+
/**
|
|
208
|
+
* Disk usage of a path in bytes (`du -sk` in a child process, so the event
|
|
209
|
+
* loop is never blocked; `du` does not follow symlinks).
|
|
210
|
+
*
|
|
211
|
+
* @param p - File or directory
|
|
212
|
+
* @returns Bytes, or null when `du` failed or timed out
|
|
213
|
+
*/
|
|
214
|
+
export declare function diskUsageBytes(p: string): Promise<number | null>;
|
|
215
|
+
/**
|
|
216
|
+
* Human-readable size (`1.8 GB`, `512 MB`).
|
|
217
|
+
*
|
|
218
|
+
* @param bytes - Size in bytes
|
|
219
|
+
* @returns Short string with one decimal for GB
|
|
220
|
+
*/
|
|
221
|
+
export declare function formatBytes(bytes: number): string;
|
|
131
222
|
//# sourceMappingURL=worktree-janitor.git.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree-janitor.git.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/worktree/worktree-janitor.git.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,2FAA2F;AAC3F,MAAM,WAAW,aAAa;IAC7B,gEAAgE;IAChE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;CACf;AAED,sCAAsC;AACtC,MAAM,WAAW,iBAAiB;IACjC,wBAAwB;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAED
|
|
1
|
+
{"version":3,"file":"worktree-janitor.git.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/worktree/worktree-janitor.git.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,8 @@ import { WORKTREE_JANITOR_CONSTANTS } from '../../constants.js';
|
|
|
17
17
|
* Run a command without a shell and never throw.
|
|
18
18
|
*
|
|
19
19
|
* Git and gh are told never to prompt (no credential dialogs, no pager), so a
|
|
20
|
-
* periodic background job cannot hang on input
|
|
20
|
+
* periodic background job cannot hang on input, and git takes no optional
|
|
21
|
+
* locks (a status never rewrites the index).
|
|
21
22
|
*
|
|
22
23
|
* @param file - Executable (e.g. `git`, `gh`, or an absolute path)
|
|
23
24
|
* @param args - Arguments
|
|
@@ -41,6 +42,9 @@ export function runCommand(file, args, options = {}) {
|
|
|
41
42
|
...process.env,
|
|
42
43
|
GIT_TERMINAL_PROMPT: '0',
|
|
43
44
|
GIT_PAGER: 'cat',
|
|
45
|
+
// `git status` must not rewrite the index: that would bump its
|
|
46
|
+
// mtime (resetting the idle clock) and contend with agents' git.
|
|
47
|
+
GIT_OPTIONAL_LOCKS: '0',
|
|
44
48
|
GH_PROMPT_DISABLED: '1',
|
|
45
49
|
GH_NO_UPDATE_NOTIFIER: '1',
|
|
46
50
|
...(options.env ?? {}),
|
|
@@ -235,4 +239,206 @@ export function isJanitorDisabled(env = process.env) {
|
|
|
235
239
|
return false;
|
|
236
240
|
return WORKTREE_JANITOR_CONSTANTS.DISABLED_VALUES.includes(raw.trim().toLowerCase());
|
|
237
241
|
}
|
|
242
|
+
/**
|
|
243
|
+
* Yield to the event loop every YIELD_EVERY_ENTRIES calls, so a long
|
|
244
|
+
* filesystem walk never holds up Slack, relay polls or PTY I/O.
|
|
245
|
+
*/
|
|
246
|
+
export class EventLoopYielder {
|
|
247
|
+
count = 0;
|
|
248
|
+
/**
|
|
249
|
+
* Count one unit of work; every YIELD_EVERY_ENTRIES units, wait one
|
|
250
|
+
* `setImmediate` turn.
|
|
251
|
+
*
|
|
252
|
+
* @returns Resolves when the caller may continue
|
|
253
|
+
*/
|
|
254
|
+
async tick() {
|
|
255
|
+
this.count++;
|
|
256
|
+
if (this.count % WORKTREE_JANITOR_CONSTANTS.YIELD_EVERY_ENTRIES === 0) {
|
|
257
|
+
await new Promise((resolve) => setImmediate(resolve));
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/** lstat that resolves null instead of throwing. */
|
|
262
|
+
async function lstatOrNull(p) {
|
|
263
|
+
try {
|
|
264
|
+
return await fs.promises.lstat(p);
|
|
265
|
+
}
|
|
266
|
+
catch {
|
|
267
|
+
return null;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Git dir a `.git` file points to (`gitdir: <path>`), resolved against `dir`.
|
|
272
|
+
*
|
|
273
|
+
* @param dir - Directory holding the `.git` file
|
|
274
|
+
* @returns Absolute git dir, or null when there is no readable `.git` file
|
|
275
|
+
*/
|
|
276
|
+
export async function readGitFilePointer(dir) {
|
|
277
|
+
try {
|
|
278
|
+
const m = /^gitdir:\s*(.+?)\s*$/m.exec(await fs.promises.readFile(path.join(dir, '.git'), 'utf-8'));
|
|
279
|
+
return m ? path.resolve(dir, m[1]) : null;
|
|
280
|
+
}
|
|
281
|
+
catch {
|
|
282
|
+
return null;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Main worktree of the repo a linked worktree belongs to, read from the
|
|
287
|
+
* worktree's `.git` file (`gitdir: <main>/.git/worktrees/<name>`). Returns
|
|
288
|
+
* null for anything else: a `.git` directory (a normal clone), a submodule
|
|
289
|
+
* (`gitdir: …/.git/modules/…`), or an unreadable file.
|
|
290
|
+
*
|
|
291
|
+
* @param dir - Directory that may be a linked worktree
|
|
292
|
+
* @returns Absolute path of the main worktree, or null
|
|
293
|
+
*
|
|
294
|
+
* @example
|
|
295
|
+
* ```typescript
|
|
296
|
+
* // /tmp/visa-cm-wt/.git contains "gitdir: /src/ce-core/.git/worktrees/visa-cm-wt"
|
|
297
|
+
* await mainRepoOfLinkedWorktree('/tmp/visa-cm-wt'); // '/src/ce-core'
|
|
298
|
+
* ```
|
|
299
|
+
*/
|
|
300
|
+
export async function mainRepoOfLinkedWorktree(dir) {
|
|
301
|
+
const st = await lstatOrNull(path.join(dir, '.git'));
|
|
302
|
+
if (!st?.isFile())
|
|
303
|
+
return null;
|
|
304
|
+
const gitDir = await readGitFilePointer(dir);
|
|
305
|
+
if (!gitDir)
|
|
306
|
+
return null;
|
|
307
|
+
const worktreesDir = path.dirname(gitDir);
|
|
308
|
+
if (path.basename(worktreesDir) !== 'worktrees')
|
|
309
|
+
return null;
|
|
310
|
+
const commonDir = path.dirname(worktreesDir);
|
|
311
|
+
if (path.basename(commonDir) !== '.git')
|
|
312
|
+
return null;
|
|
313
|
+
return path.dirname(commonDir);
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Find git checkouts under `root` without following symlinks. A directory
|
|
317
|
+
* with a `.git` directory or file is a checkout and is not descended into;
|
|
318
|
+
* `node_modules` and `.git` are never descended into. Fully async; yields to
|
|
319
|
+
* the event loop every few directories.
|
|
320
|
+
*
|
|
321
|
+
* @param root - Directory to search (itself included, at depth 0)
|
|
322
|
+
* @param maxDepth - Deepest level searched (root = 0)
|
|
323
|
+
* @param maxDirs - Stop after visiting this many directories
|
|
324
|
+
* @returns Checkouts found, in walk order
|
|
325
|
+
*/
|
|
326
|
+
export async function findGitCheckouts(root, maxDepth, maxDirs = Number.POSITIVE_INFINITY) {
|
|
327
|
+
const out = [];
|
|
328
|
+
const yielder = new EventLoopYielder();
|
|
329
|
+
let visited = 0;
|
|
330
|
+
const walk = async (dir, depth) => {
|
|
331
|
+
if (visited >= maxDirs)
|
|
332
|
+
return;
|
|
333
|
+
visited++;
|
|
334
|
+
await yielder.tick();
|
|
335
|
+
const dotGit = await lstatOrNull(path.join(dir, '.git'));
|
|
336
|
+
if (dotGit && (dotGit.isDirectory() || dotGit.isFile())) {
|
|
337
|
+
out.push({ path: dir, kind: dotGit.isDirectory() ? 'dir' : 'file' });
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
if (depth >= maxDepth)
|
|
341
|
+
return;
|
|
342
|
+
let entries;
|
|
343
|
+
try {
|
|
344
|
+
entries = await fs.promises.readdir(dir, { withFileTypes: true });
|
|
345
|
+
}
|
|
346
|
+
catch {
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
349
|
+
for (const e of entries) {
|
|
350
|
+
// Dirent.isDirectory() is false for symlinks, so links are never followed.
|
|
351
|
+
if (!e.isDirectory() || WORKTREE_JANITOR_CONSTANTS.SEARCH_SKIP_DIRS.includes(e.name))
|
|
352
|
+
continue;
|
|
353
|
+
await walk(path.join(dir, e.name), depth + 1);
|
|
354
|
+
}
|
|
355
|
+
};
|
|
356
|
+
await walk(root, 0);
|
|
357
|
+
return out;
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Main worktrees of every repo that owns a linked worktree somewhere under
|
|
361
|
+
* the given roots (e.g. `/tmp/claude-501/visa-cm-wt` → `~/src/ce-core`), so
|
|
362
|
+
* repos that are not registered projects still get their temp worktrees
|
|
363
|
+
* cleaned. Visits at most DISCOVERY_MAX_DIRS directories per root.
|
|
364
|
+
*
|
|
365
|
+
* @param roots - Temp roots to scan (missing roots are skipped)
|
|
366
|
+
* @returns De-duplicated main-worktree paths
|
|
367
|
+
*/
|
|
368
|
+
export async function discoverLinkedWorktreeRepos(roots) {
|
|
369
|
+
const out = new Set();
|
|
370
|
+
for (const root of roots) {
|
|
371
|
+
if (!(await lstatOrNull(root)))
|
|
372
|
+
continue;
|
|
373
|
+
const found = await findGitCheckouts(root, WORKTREE_JANITOR_CONSTANTS.DISCOVERY_DEPTH, WORKTREE_JANITOR_CONSTANTS.DISCOVERY_MAX_DIRS);
|
|
374
|
+
for (const f of found) {
|
|
375
|
+
if (f.kind !== 'file')
|
|
376
|
+
continue;
|
|
377
|
+
const main = await mainRepoOfLinkedWorktree(f.path);
|
|
378
|
+
if (main && (await lstatOrNull(main)))
|
|
379
|
+
out.add(main);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
return [...out];
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Newest mtime (ms) of `dir` and everything within `depth` levels below it,
|
|
386
|
+
* using lstat (symlinks are not followed). Async; yields every few entries.
|
|
387
|
+
*
|
|
388
|
+
* @param dir - Directory
|
|
389
|
+
* @param depth - Levels below `dir` to include (0 = only `dir`)
|
|
390
|
+
* @returns Newest mtime in ms, or null when `dir` cannot be stat'ed
|
|
391
|
+
*/
|
|
392
|
+
export async function latestTreeMtimeMs(dir, depth) {
|
|
393
|
+
let newest = null;
|
|
394
|
+
const yielder = new EventLoopYielder();
|
|
395
|
+
const visit = async (p, level) => {
|
|
396
|
+
await yielder.tick();
|
|
397
|
+
const st = await lstatOrNull(p);
|
|
398
|
+
if (!st)
|
|
399
|
+
return;
|
|
400
|
+
if (newest === null || st.mtimeMs > newest)
|
|
401
|
+
newest = st.mtimeMs;
|
|
402
|
+
if (level >= depth || !st.isDirectory())
|
|
403
|
+
return;
|
|
404
|
+
let names;
|
|
405
|
+
try {
|
|
406
|
+
names = await fs.promises.readdir(p);
|
|
407
|
+
}
|
|
408
|
+
catch {
|
|
409
|
+
return;
|
|
410
|
+
}
|
|
411
|
+
for (const n of names)
|
|
412
|
+
await visit(path.join(p, n), level + 1);
|
|
413
|
+
};
|
|
414
|
+
await visit(dir, 0);
|
|
415
|
+
return newest;
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Disk usage of a path in bytes (`du -sk` in a child process, so the event
|
|
419
|
+
* loop is never blocked; `du` does not follow symlinks).
|
|
420
|
+
*
|
|
421
|
+
* @param p - File or directory
|
|
422
|
+
* @returns Bytes, or null when `du` failed or timed out
|
|
423
|
+
*/
|
|
424
|
+
export async function diskUsageBytes(p) {
|
|
425
|
+
const r = await runCommand('du', ['-sk', p], { timeoutMs: WORKTREE_JANITOR_CONSTANTS.DU_TIMEOUT_MS });
|
|
426
|
+
const kb = Number.parseInt(r.stdout.trim().split(/\s+/)[0] ?? '', 10);
|
|
427
|
+
return Number.isFinite(kb) ? kb * 1024 : null;
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* Human-readable size (`1.8 GB`, `512 MB`).
|
|
431
|
+
*
|
|
432
|
+
* @param bytes - Size in bytes
|
|
433
|
+
* @returns Short string with one decimal for GB
|
|
434
|
+
*/
|
|
435
|
+
export function formatBytes(bytes) {
|
|
436
|
+
const gb = bytes / 1024 ** 3;
|
|
437
|
+
if (gb >= 1)
|
|
438
|
+
return `${gb.toFixed(1)} GB`;
|
|
439
|
+
const mb = bytes / 1024 ** 2;
|
|
440
|
+
if (mb >= 1)
|
|
441
|
+
return `${Math.round(mb)} MB`;
|
|
442
|
+
return `${Math.round(bytes / 1024)} KB`;
|
|
443
|
+
}
|
|
238
444
|
//# sourceMappingURL=worktree-janitor.git.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree-janitor.git.js","sourceRoot":"","sources":["../../../../../../backend/src/services/worktree/worktree-janitor.git.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"worktree-janitor.git.js","sourceRoot":"","sources":["../../../../../../backend/src/services/worktree/worktree-janitor.git.ts"],"names":[],"mappings":"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"}
|