@proletariat/cli 0.3.95 → 0.3.96

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 (193) hide show
  1. package/dist/commands/config/index.js +1 -1
  2. package/dist/commands/config/index.js.map +1 -1
  3. package/dist/commands/db/repair.js +160 -35
  4. package/dist/commands/db/repair.js.map +1 -1
  5. package/dist/commands/gc.d.ts +13 -0
  6. package/dist/commands/gc.js +178 -0
  7. package/dist/commands/gc.js.map +1 -0
  8. package/dist/commands/pr/merge.js +1 -1
  9. package/dist/commands/pr/merge.js.map +1 -1
  10. package/dist/commands/session/attach.d.ts +3 -3
  11. package/dist/commands/session/attach.js +37 -79
  12. package/dist/commands/session/attach.js.map +1 -1
  13. package/dist/commands/session/exec.js +1 -1
  14. package/dist/commands/session/exec.js.map +1 -1
  15. package/dist/commands/session/health.js +1 -1
  16. package/dist/commands/session/health.js.map +1 -1
  17. package/dist/commands/session/inspect.js +1 -1
  18. package/dist/commands/session/inspect.js.map +1 -1
  19. package/dist/commands/session/list.d.ts +1 -0
  20. package/dist/commands/session/list.js +111 -78
  21. package/dist/commands/session/list.js.map +1 -1
  22. package/dist/commands/session/peek.js +1 -1
  23. package/dist/commands/session/peek.js.map +1 -1
  24. package/dist/commands/session/poke.js +1 -1
  25. package/dist/commands/session/poke.js.map +1 -1
  26. package/dist/commands/session/prune.js +50 -11
  27. package/dist/commands/session/prune.js.map +1 -1
  28. package/dist/commands/session/restart.js +1 -1
  29. package/dist/commands/session/restart.js.map +1 -1
  30. package/dist/commands/{action → sync}/index.d.ts +2 -6
  31. package/dist/commands/sync/index.js +68 -0
  32. package/dist/commands/sync/index.js.map +1 -0
  33. package/dist/commands/sync/pause.d.ts +10 -0
  34. package/dist/commands/sync/pause.js +35 -0
  35. package/dist/commands/sync/pause.js.map +1 -0
  36. package/dist/commands/sync/queue.d.ts +10 -0
  37. package/dist/commands/sync/queue.js +106 -0
  38. package/dist/commands/sync/queue.js.map +1 -0
  39. package/dist/commands/sync/resume.d.ts +10 -0
  40. package/dist/commands/sync/resume.js +34 -0
  41. package/dist/commands/sync/resume.js.map +1 -0
  42. package/dist/commands/sync/start.d.ts +11 -0
  43. package/dist/commands/sync/start.js +73 -0
  44. package/dist/commands/sync/start.js.map +1 -0
  45. package/dist/commands/sync/status.d.ts +10 -0
  46. package/dist/commands/sync/status.js +40 -0
  47. package/dist/commands/sync/status.js.map +1 -0
  48. package/dist/commands/sync/stop.d.ts +10 -0
  49. package/dist/commands/sync/stop.js +39 -0
  50. package/dist/commands/sync/stop.js.map +1 -0
  51. package/dist/commands/ticket/create.js +1 -1
  52. package/dist/commands/ticket/create.js.map +1 -1
  53. package/dist/commands/ticket/edit.js +1 -1
  54. package/dist/commands/ticket/edit.js.map +1 -1
  55. package/dist/commands/ticket/list.js +1 -1
  56. package/dist/commands/ticket/list.js.map +1 -1
  57. package/dist/commands/ticket/update.js +1 -1
  58. package/dist/commands/ticket/update.js.map +1 -1
  59. package/dist/commands/work/complete.js +1 -1
  60. package/dist/commands/work/complete.js.map +1 -1
  61. package/dist/commands/work/ready.js +1 -1
  62. package/dist/commands/work/ready.js.map +1 -1
  63. package/dist/commands/work/resolve.js +1 -1
  64. package/dist/commands/work/resolve.js.map +1 -1
  65. package/dist/commands/work/ship.js +1 -1
  66. package/dist/commands/work/ship.js.map +1 -1
  67. package/dist/commands/work/start.js +13 -84
  68. package/dist/commands/work/start.js.map +1 -1
  69. package/dist/lib/dashboard/data.js +1 -1
  70. package/dist/lib/dashboard/data.js.map +1 -1
  71. package/dist/lib/database/db-safety.d.ts +22 -0
  72. package/dist/lib/database/db-safety.js +91 -4
  73. package/dist/lib/database/db-safety.js.map +1 -1
  74. package/dist/lib/database/index.d.ts +1 -1
  75. package/dist/lib/database/index.js +1 -1
  76. package/dist/lib/database/index.js.map +1 -1
  77. package/dist/lib/database/migrations/0017_drop_agent_work_fk.d.ts +13 -0
  78. package/dist/lib/database/migrations/0017_drop_agent_work_fk.js +85 -0
  79. package/dist/lib/database/migrations/0017_drop_agent_work_fk.js.map +1 -0
  80. package/dist/lib/database/migrations/0018_create_ticket_refs.d.ts +11 -0
  81. package/dist/lib/database/migrations/0018_create_ticket_refs.js +40 -0
  82. package/dist/lib/database/migrations/0018_create_ticket_refs.js.map +1 -0
  83. package/dist/lib/database/migrations/index.js +4 -0
  84. package/dist/lib/database/migrations/index.js.map +1 -1
  85. package/dist/lib/execution/devcontainer.js +1 -1
  86. package/dist/lib/execution/devcontainer.js.map +1 -1
  87. package/dist/lib/execution/runners/docker-management.d.ts +9 -0
  88. package/dist/lib/execution/runners/docker-management.js +14 -3
  89. package/dist/lib/execution/runners/docker-management.js.map +1 -1
  90. package/dist/lib/execution/runners/prompt-builder.js +15 -3
  91. package/dist/lib/execution/runners/prompt-builder.js.map +1 -1
  92. package/dist/lib/execution/runners/shared.d.ts +1 -1
  93. package/dist/lib/execution/runners/shared.js +1 -1
  94. package/dist/lib/execution/runners/shared.js.map +1 -1
  95. package/dist/lib/execution/session-utils.d.ts +16 -0
  96. package/dist/lib/execution/session-utils.js +42 -0
  97. package/dist/lib/execution/session-utils.js.map +1 -1
  98. package/dist/lib/execution/spawner.js +2 -1
  99. package/dist/lib/execution/spawner.js.map +1 -1
  100. package/dist/lib/execution/storage.js +2 -1
  101. package/dist/lib/execution/storage.js.map +1 -1
  102. package/dist/lib/external-issues/utils.d.ts +25 -0
  103. package/dist/lib/external-issues/utils.js +32 -0
  104. package/dist/lib/external-issues/utils.js.map +1 -0
  105. package/dist/lib/gc/index.d.ts +126 -0
  106. package/dist/lib/gc/index.js +410 -0
  107. package/dist/lib/gc/index.js.map +1 -0
  108. package/dist/lib/mcp/tools/action.js +1 -1
  109. package/dist/lib/mcp/tools/action.js.map +1 -1
  110. package/dist/lib/mcp/tools/ticket.js +1 -1
  111. package/dist/lib/mcp/tools/ticket.js.map +1 -1
  112. package/dist/lib/orchestrate/actions.js +30 -0
  113. package/dist/lib/orchestrate/actions.js.map +1 -1
  114. package/dist/lib/orchestrate/poller.js +3 -3
  115. package/dist/lib/orchestrate/poller.js.map +1 -1
  116. package/dist/lib/orchestrate/presets.js +2 -1
  117. package/dist/lib/orchestrate/presets.js.map +1 -1
  118. package/dist/lib/orchestrate/types.d.ts +1 -1
  119. package/dist/lib/orchestrate/types.js +1 -0
  120. package/dist/lib/orchestrate/types.js.map +1 -1
  121. package/dist/lib/pmo/index.js +1 -1
  122. package/dist/lib/pmo/index.js.map +1 -1
  123. package/dist/lib/pmo/markdown.js +1 -1
  124. package/dist/lib/pmo/markdown.js.map +1 -1
  125. package/dist/lib/pmo/schema.d.ts +3 -1
  126. package/dist/lib/pmo/schema.js +26 -2
  127. package/dist/lib/pmo/schema.js.map +1 -1
  128. package/dist/lib/pmo/storage/actions.js +1 -1
  129. package/dist/lib/pmo/storage/actions.js.map +1 -1
  130. package/dist/lib/pmo/storage/base.js +37 -15
  131. package/dist/lib/pmo/storage/base.js.map +1 -1
  132. package/dist/lib/pmo/storage/projects.js +2 -1
  133. package/dist/lib/pmo/storage/projects.js.map +1 -1
  134. package/dist/lib/pmo/storage/statuses.js +1 -1
  135. package/dist/lib/pmo/storage/statuses.js.map +1 -1
  136. package/dist/lib/pmo/storage/subtasks.js +1 -1
  137. package/dist/lib/pmo/storage/subtasks.js.map +1 -1
  138. package/dist/lib/pmo/storage/templates.js +1 -1
  139. package/dist/lib/pmo/storage/templates.js.map +1 -1
  140. package/dist/lib/pmo/storage/tickets.js +2 -1
  141. package/dist/lib/pmo/storage/tickets.js.map +1 -1
  142. package/dist/lib/pmo/storage/workflow-rules.js +1 -1
  143. package/dist/lib/pmo/storage/workflow-rules.js.map +1 -1
  144. package/dist/lib/pmo/utils.d.ts +6 -189
  145. package/dist/lib/pmo/utils.js +6 -306
  146. package/dist/lib/pmo/utils.js.map +1 -1
  147. package/dist/lib/session/heartbeat.js +1 -1
  148. package/dist/lib/session/heartbeat.js.map +1 -1
  149. package/dist/lib/sync/daemon-process.d.ts +9 -0
  150. package/dist/lib/sync/daemon-process.js +184 -0
  151. package/dist/lib/sync/daemon-process.js.map +1 -0
  152. package/dist/lib/sync/daemon.d.ts +39 -0
  153. package/dist/lib/sync/daemon.js +91 -0
  154. package/dist/lib/sync/daemon.js.map +1 -0
  155. package/dist/lib/sync/engine.d.ts +38 -0
  156. package/dist/lib/sync/engine.js +145 -0
  157. package/dist/lib/sync/engine.js.map +1 -0
  158. package/dist/lib/sync/merge-queue.d.ts +116 -0
  159. package/dist/lib/sync/merge-queue.js +321 -0
  160. package/dist/lib/sync/merge-queue.js.map +1 -0
  161. package/dist/lib/sync/reconciler.d.ts +44 -0
  162. package/dist/lib/sync/reconciler.js +88 -0
  163. package/dist/lib/sync/reconciler.js.map +1 -0
  164. package/dist/lib/utils/text.d.ts +44 -0
  165. package/dist/lib/utils/text.js +72 -0
  166. package/dist/lib/utils/text.js.map +1 -0
  167. package/dist/lib/work-lifecycle/post-execution.js +1 -1
  168. package/dist/lib/work-lifecycle/post-execution.js.map +1 -1
  169. package/dist/lib/work-lifecycle/settings.d.ts +138 -0
  170. package/dist/lib/work-lifecycle/settings.js +213 -0
  171. package/dist/lib/work-lifecycle/settings.js.map +1 -0
  172. package/oclif.manifest.json +1456 -1707
  173. package/package.json +1 -1
  174. package/dist/commands/action/create.d.ts +0 -26
  175. package/dist/commands/action/create.js +0 -245
  176. package/dist/commands/action/create.js.map +0 -1
  177. package/dist/commands/action/delete.d.ts +0 -18
  178. package/dist/commands/action/delete.js +0 -78
  179. package/dist/commands/action/delete.js.map +0 -1
  180. package/dist/commands/action/index.js +0 -103
  181. package/dist/commands/action/index.js.map +0 -1
  182. package/dist/commands/action/list.d.ts +0 -15
  183. package/dist/commands/action/list.js +0 -90
  184. package/dist/commands/action/list.js.map +0 -1
  185. package/dist/commands/action/run.d.ts +0 -20
  186. package/dist/commands/action/run.js +0 -188
  187. package/dist/commands/action/run.js.map +0 -1
  188. package/dist/commands/action/show.d.ts +0 -17
  189. package/dist/commands/action/show.js +0 -78
  190. package/dist/commands/action/show.js.map +0 -1
  191. package/dist/commands/action/update.d.ts +0 -27
  192. package/dist/commands/action/update.js +0 -288
  193. package/dist/commands/action/update.js.map +0 -1
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Garbage Collection Module
3
+ *
4
+ * Core logic for cleaning up agent artifacts after PR merge/close.
5
+ * Handles: worktree removal, container removal, branch pruning, stale PR closure.
6
+ *
7
+ * Used by both the `prlt gc` command and the daemon's post-merge phase.
8
+ */
9
+ import { type ContainerInfo } from '../execution/container-cleanup.js';
10
+ import { type PRInfo } from '../pr/index.js';
11
+ export type GCArtifactStatus = 'merged' | 'closed' | 'stale' | 'active';
12
+ export interface GCCandidate {
13
+ /** Worktree path on disk */
14
+ worktreePath: string;
15
+ /** Branch name checked out in this worktree */
16
+ branch: string;
17
+ /** Agent name extracted from worktree path */
18
+ agentName: string | null;
19
+ /** Repository name this worktree belongs to */
20
+ repoName: string;
21
+ /** Source repo path (bare/main repo) */
22
+ sourceRepoPath: string;
23
+ /** PR info if found */
24
+ pr: PRInfo | null;
25
+ /** Computed artifact status */
26
+ status: GCArtifactStatus;
27
+ /** Associated container, if any */
28
+ container: ContainerInfo | null;
29
+ }
30
+ export interface GCResult {
31
+ /** Worktrees removed */
32
+ worktreesRemoved: string[];
33
+ /** Containers removed */
34
+ containersRemoved: string[];
35
+ /** Branches pruned */
36
+ branchesPruned: string[];
37
+ /** Stale PRs closed */
38
+ stalePRsClosed: number[];
39
+ /** Errors encountered */
40
+ errors: string[];
41
+ /** Candidates that were skipped (active) */
42
+ skipped: string[];
43
+ }
44
+ export interface GCOptions {
45
+ /** Working directory (HQ path) */
46
+ hqPath: string;
47
+ /** Days of inactivity before a PR is considered stale */
48
+ staleDays?: number;
49
+ /** Only process candidates matching this status */
50
+ filterStatus?: GCArtifactStatus[];
51
+ /** Actually execute cleanup (default: false = dry run) */
52
+ execute?: boolean;
53
+ /** Log callback */
54
+ log?: (msg: string) => void;
55
+ }
56
+ interface WorktreeEntry {
57
+ worktreePath: string;
58
+ branch: string;
59
+ isPrunable: boolean;
60
+ }
61
+ /**
62
+ * Parse `git worktree list --porcelain` output into structured entries.
63
+ */
64
+ export declare function parseWorktreeList(output: string): WorktreeEntry[];
65
+ /**
66
+ * Extract agent name from a worktree path.
67
+ * Worktrees are at: {hqPath}/agents/{subdir}/{agentName}/{repoName}
68
+ */
69
+ export declare function extractAgentName(worktreePath: string, hqPath: string): string | null;
70
+ /**
71
+ * Determine the GC status for a worktree based on its PR state.
72
+ */
73
+ export declare function classifyArtifact(pr: PRInfo | null, staleDays: number): GCArtifactStatus;
74
+ /**
75
+ * Collect all GC candidates by scanning worktrees and checking PR status.
76
+ *
77
+ * Scans all repos in the HQ, finds worktrees inside the agents/ directory,
78
+ * checks PR status for each branch, and classifies them.
79
+ */
80
+ export declare function collectGCCandidates(options: GCOptions): GCCandidate[];
81
+ /**
82
+ * Execute garbage collection on the provided candidates.
83
+ *
84
+ * Processes candidates in order:
85
+ * 1. Close stale PRs
86
+ * 2. Remove worktrees
87
+ * 3. Remove containers
88
+ * 4. Prune local branches
89
+ * 5. Clean up empty agent directories
90
+ */
91
+ export declare function executeGC(candidates: GCCandidate[], options: GCOptions): GCResult;
92
+ interface ScheduledCleanup {
93
+ branch: string;
94
+ scheduledAt: number;
95
+ graceUntil: number;
96
+ }
97
+ /**
98
+ * In-memory scheduler for daemon GC with grace periods.
99
+ * Tracks branches that need cleanup after their grace period expires.
100
+ */
101
+ export declare class GCScheduler {
102
+ private pending;
103
+ private gracePeriodMs;
104
+ constructor(gracePeriodMs?: number);
105
+ /**
106
+ * Schedule a branch for GC after the grace period.
107
+ */
108
+ schedule(branch: string): void;
109
+ /**
110
+ * Get branches whose grace period has expired.
111
+ */
112
+ getReady(): string[];
113
+ /**
114
+ * Remove a branch from the schedule (after cleanup).
115
+ */
116
+ complete(branch: string): void;
117
+ /**
118
+ * Get all pending cleanups (for status/debugging).
119
+ */
120
+ getPending(): ScheduledCleanup[];
121
+ /**
122
+ * Number of pending cleanups.
123
+ */
124
+ get size(): number;
125
+ }
126
+ export {};
@@ -0,0 +1,410 @@
1
+ /**
2
+ * Garbage Collection Module
3
+ *
4
+ * Core logic for cleaning up agent artifacts after PR merge/close.
5
+ * Handles: worktree removal, container removal, branch pruning, stale PR closure.
6
+ *
7
+ * Used by both the `prlt gc` command and the daemon's post-merge phase.
8
+ */
9
+ import * as fs from 'node:fs';
10
+ import * as path from 'node:path';
11
+ import { execSync } from 'node:child_process';
12
+ import { listAgentContainers, removeContainer, } from '../execution/container-cleanup.js';
13
+ import { getPRForBranch, closePR, } from '../pr/index.js';
14
+ /**
15
+ * Parse `git worktree list --porcelain` output into structured entries.
16
+ */
17
+ export function parseWorktreeList(output) {
18
+ const blocks = output.split('\n\n').filter(Boolean);
19
+ const entries = [];
20
+ for (const block of blocks) {
21
+ const lines = block.split('\n');
22
+ const worktreeLine = lines.find(l => l.startsWith('worktree '));
23
+ const branchLine = lines.find(l => l.startsWith('branch '));
24
+ const isPrunable = lines.some(l => l.startsWith('prunable'));
25
+ if (!worktreeLine)
26
+ continue;
27
+ entries.push({
28
+ worktreePath: worktreeLine.replace('worktree ', ''),
29
+ branch: branchLine ? branchLine.replace('branch refs/heads/', '') : '',
30
+ isPrunable,
31
+ });
32
+ }
33
+ return entries;
34
+ }
35
+ /**
36
+ * List all git worktrees for a given repo path.
37
+ */
38
+ function listWorktrees(repoPath) {
39
+ try {
40
+ const output = execSync('git worktree list --porcelain', {
41
+ cwd: repoPath,
42
+ encoding: 'utf-8',
43
+ stdio: ['pipe', 'pipe', 'pipe'],
44
+ });
45
+ return parseWorktreeList(output);
46
+ }
47
+ catch {
48
+ return [];
49
+ }
50
+ }
51
+ /**
52
+ * Extract agent name from a worktree path.
53
+ * Worktrees are at: {hqPath}/agents/{subdir}/{agentName}/{repoName}
54
+ */
55
+ export function extractAgentName(worktreePath, hqPath) {
56
+ const relative = path.relative(hqPath, worktreePath);
57
+ if (!relative.startsWith('agents/'))
58
+ return null;
59
+ const parts = relative.split(path.sep);
60
+ // agents / {subdir} / {agentName} / {repoName}
61
+ if (parts.length >= 4) {
62
+ return parts[2];
63
+ }
64
+ return null;
65
+ }
66
+ // =============================================================================
67
+ // Candidate Collection
68
+ // =============================================================================
69
+ /**
70
+ * Determine the GC status for a worktree based on its PR state.
71
+ */
72
+ export function classifyArtifact(pr, staleDays) {
73
+ if (!pr) {
74
+ // No PR found — branch exists but no PR was ever created or it's been deleted.
75
+ // Treat as closed (safe to clean up).
76
+ return 'closed';
77
+ }
78
+ if (pr.state === 'MERGED')
79
+ return 'merged';
80
+ if (pr.state === 'CLOSED')
81
+ return 'closed';
82
+ // PR is open — check if stale
83
+ const updatedAt = new Date(pr.updatedAt);
84
+ const daysSinceUpdate = (Date.now() - updatedAt.getTime()) / (1000 * 60 * 60 * 24);
85
+ if (daysSinceUpdate >= staleDays)
86
+ return 'stale';
87
+ return 'active';
88
+ }
89
+ /**
90
+ * Collect all GC candidates by scanning worktrees and checking PR status.
91
+ *
92
+ * Scans all repos in the HQ, finds worktrees inside the agents/ directory,
93
+ * checks PR status for each branch, and classifies them.
94
+ */
95
+ export function collectGCCandidates(options) {
96
+ const { hqPath, staleDays = 7, log } = options;
97
+ const reposPath = path.join(hqPath, 'repos');
98
+ const candidates = [];
99
+ if (!fs.existsSync(reposPath))
100
+ return candidates;
101
+ // Get all repositories
102
+ let repoDirs;
103
+ try {
104
+ repoDirs = fs.readdirSync(reposPath).filter(d => fs.statSync(path.join(reposPath, d)).isDirectory());
105
+ }
106
+ catch {
107
+ return candidates;
108
+ }
109
+ // Build container lookup: agentName → ContainerInfo
110
+ const containers = listAgentContainers();
111
+ const containerByAgent = new Map();
112
+ for (const c of containers) {
113
+ containerByAgent.set(c.agentName, c);
114
+ }
115
+ // Track branches we've already seen to avoid duplicate PR lookups
116
+ const seenBranches = new Map();
117
+ for (const repoName of repoDirs) {
118
+ const repoPath = path.join(reposPath, repoName);
119
+ const worktrees = listWorktrees(repoPath);
120
+ for (const wt of worktrees) {
121
+ // Skip the main worktree (the repo itself) and prunable entries
122
+ if (wt.worktreePath === repoPath || wt.isPrunable)
123
+ continue;
124
+ // Only consider worktrees inside agents/ directory
125
+ const agentName = extractAgentName(wt.worktreePath, hqPath);
126
+ if (!agentName && !wt.worktreePath.includes('/agents/'))
127
+ continue;
128
+ // Skip worktrees without a branch (detached HEAD)
129
+ if (!wt.branch)
130
+ continue;
131
+ // Look up PR status for this branch
132
+ let pr;
133
+ if (seenBranches.has(wt.branch)) {
134
+ pr = seenBranches.get(wt.branch);
135
+ }
136
+ else {
137
+ log?.(`Checking PR status for branch: ${wt.branch}`);
138
+ pr = getPRForBranch(wt.branch, repoPath);
139
+ seenBranches.set(wt.branch, pr);
140
+ }
141
+ const status = classifyArtifact(pr, staleDays);
142
+ candidates.push({
143
+ worktreePath: wt.worktreePath,
144
+ branch: wt.branch,
145
+ agentName,
146
+ repoName,
147
+ sourceRepoPath: repoPath,
148
+ pr,
149
+ status,
150
+ container: agentName ? containerByAgent.get(agentName) ?? null : null,
151
+ });
152
+ }
153
+ }
154
+ return candidates;
155
+ }
156
+ // =============================================================================
157
+ // Cleanup Execution
158
+ // =============================================================================
159
+ /**
160
+ * Delete a local git branch.
161
+ */
162
+ function deleteLocalBranch(branch, cwd) {
163
+ try {
164
+ execSync(`git branch -D ${branch}`, {
165
+ cwd,
166
+ stdio: ['pipe', 'pipe', 'pipe'],
167
+ });
168
+ return true;
169
+ }
170
+ catch {
171
+ return false;
172
+ }
173
+ }
174
+ /**
175
+ * Remove a git worktree.
176
+ */
177
+ function removeWorktree(worktreePath, sourceRepoPath) {
178
+ try {
179
+ execSync(`git worktree remove "${worktreePath}" --force`, {
180
+ cwd: sourceRepoPath,
181
+ stdio: ['pipe', 'pipe', 'pipe'],
182
+ });
183
+ return true;
184
+ }
185
+ catch {
186
+ // If git worktree remove fails, try removing the directory directly
187
+ try {
188
+ if (fs.existsSync(worktreePath)) {
189
+ fs.rmSync(worktreePath, { recursive: true, force: true });
190
+ }
191
+ return true;
192
+ }
193
+ catch {
194
+ return false;
195
+ }
196
+ }
197
+ }
198
+ /**
199
+ * Prune stale worktree references for a repo.
200
+ */
201
+ function pruneWorktreeRefs(repoPath) {
202
+ try {
203
+ execSync('git worktree prune', {
204
+ cwd: repoPath,
205
+ stdio: ['pipe', 'pipe', 'pipe'],
206
+ });
207
+ }
208
+ catch {
209
+ // Ignore prune errors
210
+ }
211
+ }
212
+ /**
213
+ * Remove an agent's directory if it exists and is empty (or force).
214
+ */
215
+ function removeAgentDir(agentDir) {
216
+ try {
217
+ if (fs.existsSync(agentDir)) {
218
+ fs.rmSync(agentDir, { recursive: true, force: true });
219
+ return true;
220
+ }
221
+ return false;
222
+ }
223
+ catch {
224
+ return false;
225
+ }
226
+ }
227
+ /**
228
+ * Execute garbage collection on the provided candidates.
229
+ *
230
+ * Processes candidates in order:
231
+ * 1. Close stale PRs
232
+ * 2. Remove worktrees
233
+ * 3. Remove containers
234
+ * 4. Prune local branches
235
+ * 5. Clean up empty agent directories
236
+ */
237
+ export function executeGC(candidates, options) {
238
+ const { execute = false, log } = options;
239
+ const result = {
240
+ worktreesRemoved: [],
241
+ containersRemoved: [],
242
+ branchesPruned: [],
243
+ stalePRsClosed: [],
244
+ errors: [],
245
+ skipped: [],
246
+ };
247
+ // Filter to only actionable candidates
248
+ const filterStatus = options.filterStatus ?? ['merged', 'closed', 'stale'];
249
+ const actionable = candidates.filter(c => filterStatus.includes(c.status));
250
+ const skipped = candidates.filter(c => !filterStatus.includes(c.status));
251
+ for (const c of skipped) {
252
+ result.skipped.push(`${c.branch} (${c.status})`);
253
+ }
254
+ // Track repos that need pruning and agent dirs that need cleanup
255
+ const reposToProcess = new Set();
256
+ const agentDirs = new Set();
257
+ const processedContainers = new Set();
258
+ for (const candidate of actionable) {
259
+ // 1. Close stale PRs
260
+ if (candidate.status === 'stale' && candidate.pr) {
261
+ if (execute) {
262
+ log?.(`Closing stale PR #${candidate.pr.number}: ${candidate.pr.title}`);
263
+ const closeResult = closePR(candidate.pr.number, {
264
+ comment: 'Closing stale PR — no activity for 7+ days. Worktree archived by GC.',
265
+ cwd: candidate.sourceRepoPath,
266
+ });
267
+ if (closeResult.success) {
268
+ result.stalePRsClosed.push(candidate.pr.number);
269
+ }
270
+ else {
271
+ result.errors.push(`Failed to close PR #${candidate.pr.number}: ${closeResult.error}`);
272
+ }
273
+ }
274
+ else {
275
+ log?.(`[dry-run] Would close stale PR #${candidate.pr.number}: ${candidate.pr.title}`);
276
+ result.stalePRsClosed.push(candidate.pr.number);
277
+ }
278
+ }
279
+ // 2. Remove worktree
280
+ if (execute) {
281
+ log?.(`Removing worktree: ${candidate.worktreePath}`);
282
+ if (removeWorktree(candidate.worktreePath, candidate.sourceRepoPath)) {
283
+ result.worktreesRemoved.push(candidate.worktreePath);
284
+ }
285
+ else {
286
+ result.errors.push(`Failed to remove worktree: ${candidate.worktreePath}`);
287
+ }
288
+ }
289
+ else {
290
+ log?.(`[dry-run] Would remove worktree: ${candidate.worktreePath}`);
291
+ result.worktreesRemoved.push(candidate.worktreePath);
292
+ }
293
+ // 3. Remove container (deduplicate by agent)
294
+ if (candidate.container && !processedContainers.has(candidate.container.containerId)) {
295
+ processedContainers.add(candidate.container.containerId);
296
+ if (execute) {
297
+ log?.(`Removing container: ${candidate.container.containerName}`);
298
+ const rmResult = removeContainer(candidate.container.containerId);
299
+ if (rmResult.success) {
300
+ result.containersRemoved.push(candidate.container.containerName);
301
+ }
302
+ else {
303
+ result.errors.push(`Failed to remove container ${candidate.container.containerName}: ${rmResult.error}`);
304
+ }
305
+ }
306
+ else {
307
+ log?.(`[dry-run] Would remove container: ${candidate.container.containerName}`);
308
+ result.containersRemoved.push(candidate.container.containerName);
309
+ }
310
+ }
311
+ // 4. Prune local branch
312
+ if (candidate.branch) {
313
+ if (execute) {
314
+ if (deleteLocalBranch(candidate.branch, candidate.sourceRepoPath)) {
315
+ result.branchesPruned.push(candidate.branch);
316
+ log?.(`Pruned branch: ${candidate.branch}`);
317
+ }
318
+ // Branch deletion failure is non-fatal (may already be deleted)
319
+ }
320
+ else {
321
+ log?.(`[dry-run] Would prune branch: ${candidate.branch}`);
322
+ result.branchesPruned.push(candidate.branch);
323
+ }
324
+ }
325
+ reposToProcess.add(candidate.sourceRepoPath);
326
+ // Track agent directory for cleanup
327
+ if (candidate.agentName) {
328
+ const agentDir = path.dirname(candidate.worktreePath);
329
+ agentDirs.add(agentDir);
330
+ }
331
+ }
332
+ // 5. Prune worktree refs and clean up empty agent directories
333
+ if (execute) {
334
+ for (const repoPath of reposToProcess) {
335
+ pruneWorktreeRefs(repoPath);
336
+ }
337
+ for (const agentDir of agentDirs) {
338
+ // Only remove if directory is now empty or doesn't exist
339
+ if (fs.existsSync(agentDir)) {
340
+ try {
341
+ const contents = fs.readdirSync(agentDir);
342
+ if (contents.length === 0) {
343
+ removeAgentDir(agentDir);
344
+ log?.(`Removed empty agent directory: ${agentDir}`);
345
+ }
346
+ }
347
+ catch {
348
+ // Ignore
349
+ }
350
+ }
351
+ }
352
+ }
353
+ return result;
354
+ }
355
+ /**
356
+ * In-memory scheduler for daemon GC with grace periods.
357
+ * Tracks branches that need cleanup after their grace period expires.
358
+ */
359
+ export class GCScheduler {
360
+ pending = new Map();
361
+ gracePeriodMs;
362
+ constructor(gracePeriodMs = 60 * 60 * 1000 /* 1 hour */) {
363
+ this.gracePeriodMs = gracePeriodMs;
364
+ }
365
+ /**
366
+ * Schedule a branch for GC after the grace period.
367
+ */
368
+ schedule(branch) {
369
+ if (this.pending.has(branch))
370
+ return;
371
+ const now = Date.now();
372
+ this.pending.set(branch, {
373
+ branch,
374
+ scheduledAt: now,
375
+ graceUntil: now + this.gracePeriodMs,
376
+ });
377
+ }
378
+ /**
379
+ * Get branches whose grace period has expired.
380
+ */
381
+ getReady() {
382
+ const now = Date.now();
383
+ const ready = [];
384
+ for (const [branch, entry] of this.pending) {
385
+ if (now >= entry.graceUntil) {
386
+ ready.push(branch);
387
+ }
388
+ }
389
+ return ready;
390
+ }
391
+ /**
392
+ * Remove a branch from the schedule (after cleanup).
393
+ */
394
+ complete(branch) {
395
+ this.pending.delete(branch);
396
+ }
397
+ /**
398
+ * Get all pending cleanups (for status/debugging).
399
+ */
400
+ getPending() {
401
+ return [...this.pending.values()];
402
+ }
403
+ /**
404
+ * Number of pending cleanups.
405
+ */
406
+ get size() {
407
+ return this.pending.size;
408
+ }
409
+ }
410
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/gc/index.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { z } from 'zod';
5
5
  import { errorResponse, strictTool } from '../helpers.js';
6
- import { getReviewGateSetting, setReviewGateSetting } from '../../pmo/utils.js';
6
+ import { getReviewGateSetting, setReviewGateSetting } from '../../work-lifecycle/settings.js';
7
7
  export function registerActionTools(server, ctx) {
8
8
  strictTool(server, 'action_list', 'List work actions', { include_builtin: z.boolean().optional() }, async (params) => {
9
9
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"action.js","sourceRoot":"","sources":["../../../../src/lib/mcp/tools/action.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"action.js","sourceRoot":"","sources":["../../../../src/lib/mcp/tools/action.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { z } from 'zod';
5
5
  import { formatTicket, formatTicketFull, errorResponse, strictTool } from '../helpers.js';
6
- import { getWorkspacePriorities, setWorkspacePriorities } from '../../pmo/utils.js';
6
+ import { getWorkspacePriorities, setWorkspacePriorities } from '../../work-lifecycle/settings.js';
7
7
  export function registerTicketTools(server, ctx) {
8
8
  strictTool(server, 'ticket_list', 'List tickets with optional filters. Returns summary fields only (no descriptions). Use ticket_show for full details.', {
9
9
  project: z.string().optional().describe('Project ID'),