- scripts.update_script: repoint script.current_object_id to the newly uploaded StorageObject and best-effort delete the old working copy. Previously the old row was mutated with the new content_hash while the script still pointed at it, silently losing user edits on the next publish_version. - scripts.publish_version: read object bytes via the new RustFSObjectStore.get_bytes() instead of the non-existent .get_object(); publish 500'd on every call. - scripts.upload_script / storage_api.complete_upload_record: Path(file_name) raised NameError (only PurePosixPath imported), crashing every upload and every upload finalization. Use PurePosixPath. - RustFSObjectStore: add get_bytes() helper (sync, body.close in finally) for in-process callers that need raw bytes. Co-Authored-By: Claude <noreply@anthropic.com>
Backend
统一 FastAPI 管理服务。包含用户、Workspace、脚本、稳定版本、调度定义、
立即运行以及 RustFS 对象接口。原 platform_api 与 storage_api 已在此
模块合并,外部 REST 契约保持不变。