refactor: remove multi-runtime support and storage abstraction#461
Merged
refactor: remove multi-runtime support and storage abstraction#461
Conversation
Remove documentation and e2e tests for features being deprecated: - Multi-runtime support (Docker, Cursor, Claude Code, Gemini) - Storage backend abstraction Deleted files: - docs/using-experts/multi-runtime.md - docs/operating-experts/storage-backends.md - e2e/perstack-cli/runtime-selection.test.ts - e2e/perstack-cli/docker-security.test.ts - e2e/perstack-cli/docker-attack-scenarios.test.ts - e2e/perstack-runtime/storage-behavior.test.ts - e2e/experts/docker-security.toml - e2e/experts/docker-attack-scenarios.toml Modified docs to remove Docker runtime references while keeping generic container terminology for deployment guidance. Removed --runtime flags from e2e tests and runtime availability checks from prerequisites. This is phase 1 of the cleanup - implementation changes will follow. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit removes support for multiple runtimes and the storage abstraction layer, simplifying Perstack to only use local runtime. Deleted packages (11): - @perstack/docker - @perstack/cursor - @perstack/claude-code - @perstack/gemini - @perstack/adapter-base - @perstack/runner - @perstack/s3-storage - @perstack/r2-storage - @perstack/s3-compatible-storage - @perstack/mock Key changes: - core: Remove adapter registry, types, and Storage interface - core: Simplify RuntimeName to only "local" - core: Remove runtime/workspace/volume/env CLI options - runtime: Remove PerstackAdapter, call run() directly - CLI: Remove runtime-dispatcher, call perstackRun() directly - filesystem-storage: Remove FileSystemStorage class, keep helpers - TUI: Remove Docker/multi-runtime UI rendering Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Delete apps/e2e-mcp-server - Delete apps/create-expert - Delete .agent directory - Delete .cursorrules - Move packages/storages/filesystem/ to packages/filesystem/ Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Delete codecov.yml - Rewrite SECURITY.md to reflect current architecture (no Docker runtime) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The lazy-init tests referenced the removed apps/e2e-mcp-server package. Replace with a lightweight NDJSON-based MCP server script in e2e/fixtures. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…e removal Remove dead constants, event types, unreachable code paths, and unused files left over from the multi-runtime/storage refactor. Fix stale references in READMEs, docs, benchmarks, and test files. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Delete dead TUI components: progress UI, useErrorHandler, useInputState, barrel files - Remove dead functions from run-manager.ts (getMostRecentRunId, getRunsByJobId, etc.) - Remove useEventStream hook and its tests from @perstack/react - Remove SelectableList and TextInput from @perstack/tui-components - Remove dead exports from @perstack/runtime (getModel, buildDelegateToState, etc.) - Remove dead exports from @perstack/filesystem-storage (storeRunSetting, getEventsByRun, etc.) - Remove hasCustomProviderSkills duplicate from @perstack/core - Deduplicate isPrivateOrLocalIP and filter/formatter constants - Fix all provider READMEs: wrong interface names, missing providerName, reasoning example - Fix docs: event types (finishRun→completeRun), staging URLs, roadmap status - Fix runtime README: state machine diagram, events list, checkpoint statuses - Fix timeout help text (60000→300000) and stale test mocks - Move react from dependencies to peerDependencies in @perstack/react Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…Event The `runtime` field was a leftover from multi-runtime support. After the refactor to local-only, `RuntimeName` is always "local" and no code reads the field. Remove it from: - Checkpoint.metadata.runtime - RuntimeEventPayloads.initializeRuntime.runtime - createNormalizedCheckpoint params - createRuntimeInitEvent params - RuntimeName type export (now unused) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Delete unused runtime-name.ts (no consumers after runtime field removal) - Unexport getEventsByRun (only used internally in filesystem package) - Remove stale ts-dedent and perstack from knip ignore lists Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…-runtime-docs-e2e
This was referenced Feb 6, 2026
Closed
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Storageinterface, S3/R2/S3-compatible backends) — CLI uses filesystem helpers directlyruntimefield from Checkpoint schema and RuntimeEvent payloads286 files changed, 711 insertions, 23,589 deletions
Changes
Core (
@perstack/core)RuntimeNametype and schema (was always"local")runtimefield from Checkpoint metadata and initializeRuntime eventRuntime (
@perstack/runtime)PerstackAdapterclass and adapter registrationCLI (
apps/perstack)dispatchToRuntimewith directrun()calls--runtime,--workspace,--volume,--envCLI optionsFilesystem Storage (
@perstack/filesystem-storage)FileSystemStorageclass wrappergetEventsByRunfunctionDeleted Packages
@perstack/docker,@perstack/cursor,@perstack/claude-code,@perstack/gemini@perstack/adapter-base,@perstack/runner@perstack/s3-storage,@perstack/r2-storage,@perstack/s3-compatible-storageOther
useEventStreamdocs)ollama.ai→ollama.com)codecov.yml, simplifySECURITY.mdTest plan
pnpm build— all 16 packages passpnpm typecheck— all 16 packages passpnpm test— 101 test files, 1101 tests passpnpm test:e2e— 21 test files, 91 tests passpnpm check-deps— no unused files/exportspnpm check-format— no formatting issues🤖 Generated with Claude Code