Skip to content

feat: manage workspace inventory, deletion, and stale cleanup - #11

Open
harshitethic wants to merge 3 commits into
mainfrom
feat/workspace-lifecycle-api
Open

harshitethic wants to merge 3 commits into
mainfrom
feat/workspace-lifecycle-api

Conversation

@harshitethic

Copy link
Copy Markdown
Owner

Problem

PatchPilot creates a new on-disk clone for every agent run, but there is currently no lifecycle API for those workspaces. Long-running local instances can therefore accumulate clones indefinitely, and clients cannot enumerate or explicitly dispose of completed runs.

What changed

Adds a contained workspace lifecycle layer:

  • GET /api/workspaces — list valid workspaces with current branch, dirty-file count, and UTC update time;
  • DELETE /api/workspaces/{workspace_id} — remove one workspace;
  • POST /api/workspaces/cleanup — remove workspaces older than a bounded age (1 hour to 30 days).

Safety

Workspace directory resolution is centralized in workspace_dir() and constrained beneath .workspaces before any read or delete operation.

Cleanup independently resolves every candidate beneath the workspace root before deletion, skips invalid/unreadable entries, and only removes entries older than the requested cutoff.

Tests

Regression coverage verifies:

  • cleanup removes expired workspaces while preserving fresh ones;
  • explicit deletion removes only the selected workspace;
  • traversal attempts such as ../outside are rejected and leave external directories untouched;
  • invalid cleanup windows are rejected by Pydantic.

The existing single-workspace inspection API remains unchanged. Documentation includes the new lifecycle endpoints and retention semantics.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant