Files
vps-commander/docs/DC_PHASE1_IMPLEMENTATION.md
2026-10-02 13:53:00 +08:00

5.3 KiB

DC Refactoring Phase 1 Implementation Record

文档属性:历史实施记录。后续阶段和当前状态以当前架构规范与 v2.1 规范为准。

Date: 2026-10-02

Completed

  • Added immutable Hub PolicySnapshot protected by RWMutex.
  • Added monotonic security policy version persisted in SQLite.
  • Hub startup now rebuilds the snapshot from SQLite; snapshot load failure aborts startup rather than defaulting to High.
  • Security setting writes use SQLite transactions and only publish the new snapshot after the durable write succeeds.
  • Added a compile-time Tool Registry with fixed RequiredRisk for Low/Medium/High capabilities.
  • Existing API security checks now resolve required risk through the registry instead of duplicating risk numbers in handlers.
  • Security-setting audit records include old/new effective mode and snapshot version.

Compatibility / Safety

  • Existing API routes and Agent WebSocket protocol were not changed in this phase.
  • No production Hub/Agent restart was performed.
  • When Server.Policy is initialized, security checks use the in-memory snapshot and do not query SQLite on the request hot path.
  • Existing tests that construct Server without a snapshot retain the legacy storage fallback for test/backward compatibility; production startup always initializes the snapshot.

Verification

  • go test ./... passed.
  • go test -race ./... passed.
  • Hub and Agent clean builds passed.
  • No production service restart was performed; live rollout remains a separate controlled step to preserve the no-interruption requirement.

Phase 2 Completed

  • Added edit_block to the Agent execution engine.
  • old_text must match exactly once; zero/multiple matches are rejected without mutation.
  • Replacement uses a same-directory temporary file, preserves file permission bits, fsyncs the file, renames atomically, and syncs the directory.
  • Added Agent RPC action edit_block, Hub /api/v1/devices/file/edit_block, MCP edit_block, and stdio proxy support.
  • edit_block is registered as Medium risk and therefore follows the existing Hub policy snapshot gate.
  • Added optional sub_action protocol field without changing existing message semantics.
  • Added tests for unique replacement, duplicate/missing rejection, permissions, Low-mode denial, and MCP registration.

Phase 2 rollout remains deliberately separate from production process replacement. Existing production Agent connections have not been restarted.

Phase 3 Completed

  • Added a per-Agent SessionManager with a bounded session count (default 16).
  • Added fixed-size 2 MiB stdout/stderr RingBuffers; old output is discarded when capacity is exceeded.
  • Added long-running process actions: start_process, read_process_output, interact_with_process, force_terminate, list_sessions.
  • Processes run in their own process group so termination/force termination covers the command tree.
  • Added periodic completed-session cleanup.
  • Added Hub RPC and HTTP /api/v1/process/session dispatch with action-based lifecycle operations.
  • Added session tests for ring retention, output capture, termination, duplicate IDs, and session limits.
  • Existing WebSocket request/response protocol remains compatible; new process actions are additive.

Production Hub/Agents were not restarted during Phase 3 implementation.

Phase 3 Security Hardening / Concurrency Gate

  • Added per-node operation arbitration in cluster.Node.OpMu.
  • Low-risk read actions use RLock and may run concurrently.
  • Medium/High mutations use exclusive Lock, preventing overlapping writes/control operations against the same node.
  • Unknown actions fail closed as High risk for the concurrency gate.
  • Session IDs are generated with 128-bit crypto/rand entropy when omitted by the API caller; PID is never used as identity.
  • Session ownership is bound to a non-reversible SHA-256 fingerprint of the authenticated API credential and checked by Agent for read/input/terminate operations.
  • Session TTL is enforced; stdin is capped at 64 KiB per call.
  • Agent restart still leaves all sessions in process memory only, so old session state is not restored.

All validation passed with go test ./..., go test -race ./..., Hub/Agent builds, and git diff --check. No production process was restarted.

Phase 4 Completed

  • Added optional protocol/agent capability metadata: ProtocolVersion, AgentVersion, Capabilities.
  • Hub records the capability set per connected Agent; when a modern Agent explicitly advertises capabilities, unsupported actions fail with capability missing rather than silently degrading.
  • Old Agents remain compatible because capability metadata is optional and capability enforcement is only applied when a capability set is advertised.
  • Added structured read-only filesystem operations: list_directory, get_file_info, start_search.
  • Directory listing supports bounded recursive traversal and a maximum entry count.
  • File metadata exposes type, size, mode and modification time.
  • Search is context-cancellable and bounded by a result cap; symlinks are skipped to avoid traversal surprises.
  • Added Hub endpoints /api/v1/file/list, /api/v1/file/info, /api/v1/file/search.
  • Added executor tests for directory listing, file metadata and bounded search.

Phase 4 validation: full tests, race tests, Hub/Agent builds and git diff --check passed. Production Hub/Agents were not restarted.