crewly 1.20.157 → 1.20.159
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 +1 -0
- package/config/skills/registry.json +55 -4
- package/config/templates/growth-marketing-team.json +5 -5
- package/config/templates/personal-assistant-team.json +5 -5
- package/dist/backend/backend/src/constants.d.ts +120 -5
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +145 -8
- package/dist/backend/backend/src/constants.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 +9 -0
- 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 +34 -29
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/codex-runtime.service.d.ts +4 -3
- package/dist/backend/backend/src/services/agent/codex-runtime.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/codex-runtime.service.js +48 -3
- package/dist/backend/backend/src/services/agent/codex-runtime.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts +9 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/in-process-log-buffer.js +18 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/in-process-log-buffer.js.map +1 -1
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js +5 -1
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js +14 -4
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
- package/dist/backend/backend/src/services/agent/tmux-command.service.d.ts +14 -2
- package/dist/backend/backend/src/services/agent/tmux-command.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/tmux-command.service.js +24 -5
- package/dist/backend/backend/src/services/agent/tmux-command.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/tmux.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/tmux.service.js +14 -9
- package/dist/backend/backend/src/services/agent/tmux.service.js.map +1 -1
- package/dist/backend/backend/src/services/backup/backup-archive.service.d.ts +8 -0
- package/dist/backend/backend/src/services/backup/backup-archive.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/backup/backup-archive.service.js +16 -8
- package/dist/backend/backend/src/services/backup/backup-archive.service.js.map +1 -1
- package/dist/backend/backend/src/services/backup/backup.types.d.ts +19 -0
- package/dist/backend/backend/src/services/backup/backup.types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/backup/backup.types.js +19 -0
- package/dist/backend/backend/src/services/backup/backup.types.js.map +1 -1
- package/dist/backend/backend/src/services/security/secret-scrub.service.d.ts +108 -0
- package/dist/backend/backend/src/services/security/secret-scrub.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/security/secret-scrub.service.js +200 -0
- package/dist/backend/backend/src/services/security/secret-scrub.service.js.map +1 -0
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.d.ts +13 -9
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.js +30 -14
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.js.map +1 -1
- package/dist/backend/backend/src/services/session/pty/pty-session.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/pty/pty-session.js +6 -1
- package/dist/backend/backend/src/services/session/pty/pty-session.js.map +1 -1
- package/dist/backend/backend/src/services/session/session-command-helper.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/session-command-helper.js +3 -2
- package/dist/backend/backend/src/services/session/session-command-helper.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/backend/src/types/team-template.types.d.ts +1 -1
- package/dist/backend/backend/src/types/team-template.types.d.ts.map +1 -1
- package/dist/backend/backend/src/utils/secret-redactor.d.ts +131 -0
- package/dist/backend/backend/src/utils/secret-redactor.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/secret-redactor.js +233 -0
- package/dist/backend/backend/src/utils/secret-redactor.js.map +1 -0
- package/dist/backend/backend/src/utils/shell-history.d.ts +48 -0
- package/dist/backend/backend/src/utils/shell-history.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/shell-history.js +65 -0
- package/dist/backend/backend/src/utils/shell-history.js.map +1 -0
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +120 -5
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +145 -8
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +9 -0
- 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 +34 -29
- package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts +4 -3
- package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/codex-runtime.service.js +48 -3
- package/dist/cli/backend/src/services/agent/codex-runtime.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts +9 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.js +18 -1
- package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.js.map +1 -1
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js +5 -1
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js +14 -4
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
- package/dist/cli/backend/src/services/backup/backup-archive.service.d.ts +8 -0
- package/dist/cli/backend/src/services/backup/backup-archive.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/backup/backup-archive.service.js +16 -8
- package/dist/cli/backend/src/services/backup/backup-archive.service.js.map +1 -1
- package/dist/cli/backend/src/services/backup/backup.types.d.ts +19 -0
- package/dist/cli/backend/src/services/backup/backup.types.d.ts.map +1 -1
- package/dist/cli/backend/src/services/backup/backup.types.js +19 -0
- package/dist/cli/backend/src/services/backup/backup.types.js.map +1 -1
- package/dist/cli/backend/src/services/security/secret-scrub.service.d.ts +108 -0
- package/dist/cli/backend/src/services/security/secret-scrub.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/security/secret-scrub.service.js +200 -0
- package/dist/cli/backend/src/services/security/secret-scrub.service.js.map +1 -0
- package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts +13 -9
- package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -1
- package/dist/cli/backend/src/services/session/pty/pty-session-backend.js +30 -14
- package/dist/cli/backend/src/services/session/pty/pty-session-backend.js.map +1 -1
- package/dist/cli/backend/src/services/session/pty/pty-session.d.ts.map +1 -1
- package/dist/cli/backend/src/services/session/pty/pty-session.js +6 -1
- package/dist/cli/backend/src/services/session/pty/pty-session.js.map +1 -1
- package/dist/cli/backend/src/services/session/session-command-helper.d.ts.map +1 -1
- package/dist/cli/backend/src/services/session/session-command-helper.js +3 -2
- package/dist/cli/backend/src/services/session/session-command-helper.js.map +1 -1
- package/dist/cli/backend/src/types/team-template.types.d.ts +1 -1
- package/dist/cli/backend/src/types/team-template.types.d.ts.map +1 -1
- package/dist/cli/backend/src/utils/secret-redactor.d.ts +131 -0
- package/dist/cli/backend/src/utils/secret-redactor.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/secret-redactor.js +233 -0
- package/dist/cli/backend/src/utils/secret-redactor.js.map +1 -0
- package/dist/cli/backend/src/utils/shell-history.d.ts +48 -0
- package/dist/cli/backend/src/utils/shell-history.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/shell-history.js +65 -0
- package/dist/cli/backend/src/utils/shell-history.js.map +1 -0
- package/dist/cli/cli/src/commands/security.d.ts +41 -0
- package/dist/cli/cli/src/commands/security.d.ts.map +1 -0
- package/dist/cli/cli/src/commands/security.js +81 -0
- package/dist/cli/cli/src/commands/security.js.map +1 -0
- package/dist/cli/cli/src/index.js +9 -0
- package/dist/cli/cli/src/index.js.map +1 -1
- package/frontend/dist/assets/index-edd6f262.css +42 -0
- package/frontend/dist/assets/{index-8d4b3ad2.js → index-f79676aa.js} +268 -268
- package/frontend/dist/index.html +2 -2
- package/package.json +1 -1
- package/frontend/dist/assets/index-b6aded4c.css +0 -42
|
@@ -1,43 +1,47 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Disk janitor — removes git worktrees whose work has landed, stale Claude
|
|
3
|
+
* Code session scratch dirs, and watches free disk space.
|
|
3
4
|
*
|
|
4
|
-
* Agents create a worktree per code task
|
|
5
|
-
* `/tmp/crewly-worktrees
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* Agents create a worktree per code task and never delete it — under
|
|
6
|
+
* `<repo>/.claude/worktrees/`, `/tmp/crewly-worktrees/`, but also at
|
|
7
|
+
* arbitrary paths (`/private/tmp/claude-501/visa-cm-wt`, `../crewly-wt-805`),
|
|
8
|
+
* each with its own node_modules. They also clone whole repos into Claude
|
|
9
|
+
* Code's per-session temp dirs. A Mac filled its disk (ENOSPC) with both.
|
|
10
|
+
* Owner decision: finished work goes away by itself.
|
|
8
11
|
*
|
|
9
12
|
* ## Which repos
|
|
10
13
|
* Every registered project path (projects store) that is inside a git repo,
|
|
11
|
-
*
|
|
12
|
-
*
|
|
14
|
+
* the Crewly package root when it is a dev checkout, and every repo that owns
|
|
15
|
+
* a linked worktree found under the temp roots (`/tmp`, os.tmpdir(), and the
|
|
16
|
+
* Claude scratch roots `<tmp>/claude-<uid>`, searched a few levels deep) — so
|
|
17
|
+
* a repo that is not a registered project still gets its temp worktrees
|
|
18
|
+
* cleaned. Repos are de-duplicated by their main worktree.
|
|
13
19
|
*
|
|
14
|
-
* ##
|
|
20
|
+
* ## Worktree removal rules — a worktree is removed only when ALL hold
|
|
15
21
|
* 1. It is not the main worktree, not bare, and not `prunable` (a missing
|
|
16
|
-
* directory is left to `git worktree prune`).
|
|
22
|
+
* directory is left to `git worktree prune`). Any other linked worktree of
|
|
23
|
+
* a known repo is a candidate, wherever it lives and whatever its branch.
|
|
17
24
|
* 2. It is not locked (`git worktree lock`; Claude Code locks the worktree of
|
|
18
25
|
* a running subagent).
|
|
19
26
|
* 3. It is not under `<repo>/.crewly/worktrees/` — that directory belongs to
|
|
20
27
|
* the per-WorkItem worktree feature (#814), which does its own
|
|
21
28
|
* WorkItem-aware cleanup.
|
|
22
|
-
* 4.
|
|
23
|
-
* or `<tmp>/crewly-worktrees/` (`/tmp` and `os.tmpdir()`), OR its branch
|
|
24
|
-
* starts with an agent-only prefix (`worktree-agent-`, Claude Code's
|
|
25
|
-
* automatic subagent branch). Human-made worktrees such as
|
|
26
|
-
* `../crewly-wt-805` on `fix/...` are never touched. Deliberately narrow:
|
|
27
|
-
* a false "keep" costs disk, a false "remove" costs work.
|
|
28
|
-
* 5. Nothing is working in it: no Crewly agent session was started in it and
|
|
29
|
+
* 4. Nothing is working in it: no Crewly agent session was started in it and
|
|
29
30
|
* no process of this user (PTY shells, runtimes, editors, test runners)
|
|
30
31
|
* has its cwd inside it. If the process probe fails, everything is kept.
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
32
|
+
* 5. It is idle: last touched (newest mtime of the directory and its git
|
|
33
|
+
* dir's index / HEAD / logs/HEAD) more than 2 hours ago in a known agent
|
|
34
|
+
* location (`<main>/.claude/worktrees/`, `<tmp>/crewly-worktrees/`, or a
|
|
35
|
+
* `worktree-agent-*` branch), more than 24 hours ago anywhere else.
|
|
36
|
+
* 6. `git status --porcelain --untracked-files=all` is empty: no tracked
|
|
34
37
|
* change and no untracked file. Ignored files (node_modules, dist) do not
|
|
35
38
|
* count. A failing status keeps it.
|
|
36
|
-
*
|
|
39
|
+
* 7. Its work has landed: HEAD is an ancestor of `origin/<default branch>`
|
|
37
40
|
* after a quiet `git fetch` (fetch errors ignored), OR — when `gh` is
|
|
38
41
|
* installed and authenticated — a MERGED PR has this branch as head AND
|
|
39
42
|
* its head commit equals the worktree HEAD (squash merges; commits made
|
|
40
|
-
* after the merge keep the worktree).
|
|
43
|
+
* after the merge keep the worktree). A repo without an origin (not on
|
|
44
|
+
* GitHub) only has the ancestor check, so its worktrees are kept.
|
|
41
45
|
*
|
|
42
46
|
* ## Removal
|
|
43
47
|
* `git worktree remove <path>` without `--force`. If git refuses although
|
|
@@ -45,13 +49,34 @@
|
|
|
45
49
|
* no submodules, it is retried once with `--force`. Then the local branch is
|
|
46
50
|
* deleted (never a protected name), and `git worktree prune` runs per repo.
|
|
47
51
|
*
|
|
52
|
+
* ## Scratch sweep
|
|
53
|
+
* After the worktrees, stale Claude Code session dirs
|
|
54
|
+
* (`<tmp>/claude-<uid>/<slug>/<uuid>/`) are deleted when idle for 3 days,
|
|
55
|
+
* unused, and every git repo inside is clean and fully pushed. See
|
|
56
|
+
* {@link module:services/worktree/scratch-janitor} for the rules.
|
|
57
|
+
*
|
|
58
|
+
* ## Low-disk guard
|
|
59
|
+
* Every 10 minutes the free space of the volume holding CREWLY_HOME is read.
|
|
60
|
+
* Below 15 GB a pass runs at once (at most one per 30 minutes) with every
|
|
61
|
+
* idle threshold halved (never below 2 h); every pass started while space is
|
|
62
|
+
* low uses the halved thresholds. If space is still below 15 GB the owner is
|
|
63
|
+
* told, at most once per 24 h, with the free space and the 5 biggest items
|
|
64
|
+
* the janitor left and why; below 5 GB the notice is urgent and repeats at
|
|
65
|
+
* most every 6 h.
|
|
66
|
+
*
|
|
48
67
|
* Runs every 30 minutes (first run 10 minutes after boot). Kill switch:
|
|
49
|
-
* `CREWLY_WORKTREE_JANITOR=0
|
|
68
|
+
* `CREWLY_WORKTREE_JANITOR=0` (also stops the low-disk guard). Never throws;
|
|
69
|
+
* logs one summary line per sweep.
|
|
50
70
|
*
|
|
51
71
|
* @module services/worktree/worktree-janitor.service
|
|
52
72
|
*/
|
|
53
|
-
|
|
54
|
-
|
|
73
|
+
import { type StatFsFn } from './low-disk-guard.js';
|
|
74
|
+
import { type ScratchSweepSummary } from './scratch-janitor.js';
|
|
75
|
+
/**
|
|
76
|
+
* Why a worktree is kept, or why it may go. (`not-agent-worktree` is retired:
|
|
77
|
+
* location no longer decides eligibility, only the idle threshold.)
|
|
78
|
+
*/
|
|
79
|
+
export type WorktreeReason = 'main-worktree' | 'bare' | 'prunable' | 'locked' | 'managed-by-workitem-worktrees' | 'agent-session-inside' | 'process-inside' | 'cwd-probe-failed' | 'recent' | 'dirty' | 'status-failed' | 'not-merged' | 'merged' | 'pr-merged';
|
|
55
80
|
/** Verdict for one worktree (the dry-run output). */
|
|
56
81
|
export interface WorktreeVerdict {
|
|
57
82
|
/** Main worktree of the repo this worktree belongs to */
|
|
@@ -104,7 +129,30 @@ export interface JanitorRunSummary {
|
|
|
104
129
|
keptReasons: Record<string, number>;
|
|
105
130
|
/** Per-worktree results */
|
|
106
131
|
worktrees: WorktreeOutcome[];
|
|
132
|
+
/** True when free space was below LOW_DISK_BYTES at the start (thresholds halved) */
|
|
133
|
+
lowDisk: boolean;
|
|
134
|
+
/** Free bytes on the CREWLY_HOME volume at the start, or null when unknown */
|
|
135
|
+
freeBytes: number | null;
|
|
136
|
+
/** Stale scratch sweep result */
|
|
137
|
+
scratch: ScratchSweepSummary | null;
|
|
107
138
|
}
|
|
139
|
+
/** What one low-disk check did. */
|
|
140
|
+
export interface LowDiskCheckResult {
|
|
141
|
+
/** Free bytes before (null when statfs failed) */
|
|
142
|
+
freeBytesBefore: number | null;
|
|
143
|
+
/** Free bytes after the cleanup pass (same as before when no pass ran) */
|
|
144
|
+
freeBytesAfter: number | null;
|
|
145
|
+
/** True when a cleanup pass ran */
|
|
146
|
+
ranPass: boolean;
|
|
147
|
+
/** Owner notice sent, if any */
|
|
148
|
+
notified: 'urgent' | 'normal' | null;
|
|
149
|
+
}
|
|
150
|
+
/** Owner notice about low disk. Returns true when it was delivered. */
|
|
151
|
+
export type LowDiskNotifier = (notice: {
|
|
152
|
+
title: string;
|
|
153
|
+
message: string;
|
|
154
|
+
urgent: boolean;
|
|
155
|
+
}) => Promise<boolean>;
|
|
108
156
|
/** A place a live process or agent is working in. */
|
|
109
157
|
export interface BusyCwd {
|
|
110
158
|
/** Absolute directory */
|
|
@@ -129,10 +177,26 @@ export interface WorktreeJanitorOptions {
|
|
|
129
177
|
ghBin?: string | null;
|
|
130
178
|
/** Clock (default Date.now) */
|
|
131
179
|
now?: () => number;
|
|
132
|
-
/** Minimum idle time before removal (default 2 h) */
|
|
180
|
+
/** Minimum idle time before removal in an agent location (default 2 h) */
|
|
133
181
|
minIdleMs?: number;
|
|
134
|
-
/**
|
|
182
|
+
/** Minimum idle time before removal anywhere else (default 24 h) */
|
|
183
|
+
minIdleOtherMs?: number;
|
|
184
|
+
/** Minimum idle time of a scratch session dir (default 3 days) */
|
|
185
|
+
scratchMinIdleMs?: number;
|
|
186
|
+
/** Temp roots whose `crewly-worktrees/` holds agent worktrees, also scanned for repo discovery (default `/tmp` + os.tmpdir()) */
|
|
135
187
|
tmpRoots?: string[];
|
|
188
|
+
/** Claude Code scratch roots (default `<tmp>/claude-<uid>` variants that exist) */
|
|
189
|
+
scratchRoots?: string[];
|
|
190
|
+
/** Free-space probe (default fs.promises.statfs) */
|
|
191
|
+
statfs?: StatFsFn;
|
|
192
|
+
/** Path whose volume is watched (default CREWLY_HOME) */
|
|
193
|
+
diskPath?: string;
|
|
194
|
+
/** Owner notifier for low disk (default: none — set by the server via setLowDiskNotifier) */
|
|
195
|
+
notifyOwner?: LowDiskNotifier | null;
|
|
196
|
+
/** Size probe for removed / kept items (default `du -sk`) */
|
|
197
|
+
sizeOf?: (p: string) => Promise<number | null>;
|
|
198
|
+
/** Low-disk notice state file (default `<CREWLY_HOME>/disk-janitor-state.json`); null = in memory */
|
|
199
|
+
statePath?: string | null;
|
|
136
200
|
/** Environment for the kill switch (default process.env) */
|
|
137
201
|
env?: NodeJS.ProcessEnv;
|
|
138
202
|
/** Logger (default: component logger `WorktreeJanitor`) */
|
|
@@ -159,10 +223,22 @@ export declare class WorktreeJanitorService {
|
|
|
159
223
|
private ghUsable;
|
|
160
224
|
private lastSummary;
|
|
161
225
|
private loggerInstance;
|
|
226
|
+
private diskTimer;
|
|
227
|
+
private diskCheckInFlight;
|
|
228
|
+
private lastPassAt;
|
|
229
|
+
private memoryNoticeState;
|
|
230
|
+
private notifier;
|
|
162
231
|
/**
|
|
163
232
|
* @param options - Injectable dependencies; defaults use the live backend
|
|
164
233
|
*/
|
|
165
234
|
constructor(options?: WorktreeJanitorOptions);
|
|
235
|
+
/**
|
|
236
|
+
* Set how the owner is told about low disk (the server wires the existing
|
|
237
|
+
* Slack owner-notification path here).
|
|
238
|
+
*
|
|
239
|
+
* @param notifier - Sender, or null to disable notices
|
|
240
|
+
*/
|
|
241
|
+
setLowDiskNotifier(notifier: LowDiskNotifier | null): void;
|
|
166
242
|
/**
|
|
167
243
|
* Process-wide instance used by the server and the HTTP routes.
|
|
168
244
|
*
|
|
@@ -179,13 +255,33 @@ export declare class WorktreeJanitorService {
|
|
|
179
255
|
isDisabled(): boolean;
|
|
180
256
|
/**
|
|
181
257
|
* Schedule the periodic pass: first after FIRST_RUN_DELAY_MS, then every
|
|
182
|
-
* INTERVAL_MS
|
|
258
|
+
* INTERVAL_MS; plus the low-disk check every LOW_DISK_CHECK_INTERVAL_MS.
|
|
259
|
+
* No-op when disabled or already started. Timers are unref'd.
|
|
183
260
|
*
|
|
184
261
|
* @returns True when scheduled
|
|
185
262
|
*/
|
|
186
263
|
start(): boolean;
|
|
187
264
|
/** Cancel scheduled passes. */
|
|
188
265
|
stop(): void;
|
|
266
|
+
/**
|
|
267
|
+
* Current free space of the watched volume.
|
|
268
|
+
*
|
|
269
|
+
* @returns Watched path, free bytes (null when unknown) and level
|
|
270
|
+
*/
|
|
271
|
+
diskStatus(): Promise<{
|
|
272
|
+
path: string;
|
|
273
|
+
freeBytes: number | null;
|
|
274
|
+
level: 'ok' | 'low' | 'critical' | 'unknown';
|
|
275
|
+
}>;
|
|
276
|
+
/**
|
|
277
|
+
* Low-disk check: read free space; below LOW_DISK_BYTES run a pass now
|
|
278
|
+
* (unless one ran within LOW_DISK_PASS_GAP_MS), then, if space is still
|
|
279
|
+
* short, tell the owner within the notice cadence. Never throws. Honours
|
|
280
|
+
* the kill switch. Concurrent calls share the check in flight.
|
|
281
|
+
*
|
|
282
|
+
* @returns What the check did
|
|
283
|
+
*/
|
|
284
|
+
checkDisk(): Promise<LowDiskCheckResult>;
|
|
189
285
|
/**
|
|
190
286
|
* Summary of the last completed real pass, if any.
|
|
191
287
|
*
|
|
@@ -207,11 +303,22 @@ export declare class WorktreeJanitorService {
|
|
|
207
303
|
*/
|
|
208
304
|
run(): Promise<JanitorRunSummary>;
|
|
209
305
|
private get logger();
|
|
306
|
+
private now;
|
|
307
|
+
private diskPath;
|
|
308
|
+
private scratchRoots;
|
|
309
|
+
private tmpRoots;
|
|
310
|
+
private statePath;
|
|
311
|
+
private readNoticeState;
|
|
312
|
+
private writeNoticeState;
|
|
313
|
+
private doCheckDisk;
|
|
314
|
+
/** Sizes of everything a pass left on disk that the owner could act on. */
|
|
315
|
+
private keptItems;
|
|
210
316
|
private git;
|
|
211
317
|
private pass;
|
|
212
318
|
private resolveRepos;
|
|
213
319
|
private safeBusyCwds;
|
|
214
|
-
|
|
320
|
+
/** Known agent location (short idle threshold) vs anywhere else (long one). */
|
|
321
|
+
private isAgentLocation;
|
|
215
322
|
/**
|
|
216
323
|
* Apply the removal rules to one worktree (read-only apart from fetch).
|
|
217
324
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree-janitor.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/worktree/worktree-janitor.service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"worktree-janitor.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/worktree/worktree-janitor.service.ts"],"names":[],"mappings":"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"}
|