runtime: avoid profile archive during restore

This commit is contained in:
2026-07-24 21:04:12 +09:00
parent 7caf6cd6e6
commit 4de801f8d0
2 changed files with 185 additions and 59 deletions
+62
View File
@@ -3769,6 +3769,65 @@ where
.await
}
/// Recreate a pending Worker whose metadata has a session id but no
/// materialized segment yet.
///
/// Pending Workers have already had their profile source resolved at creation
/// time, but they have not rendered the system prompt or written
/// `SegmentStart`. Restore therefore uses only the resolved manifest snapshot
/// stored in Worker metadata and never re-resolves the profile source.
pub async fn restore_pending_from_worker_metadata_with_context(
worker_name: &str,
fallback: WorkerManifest,
store: St,
loader: PromptLoader,
workspace_context: WorkerWorkspaceContext,
filesystem_authority: WorkerFilesystemAuthority,
) -> Result<Self, WorkerError> {
let metadata =
store
.read_by_name(worker_name)?
.ok_or_else(|| WorkerError::WorkerMetadataMissing {
worker_name: worker_name.to_string(),
})?;
let active = metadata
.active
.ok_or_else(|| WorkerError::WorkerMetadataInactive {
worker_name: worker_name.to_string(),
})?;
if let Some(segment_id) = active.segment_id {
return Self::restore_from_manifest_with_context(
active.session_id,
segment_id,
restore_manifest_from_worker_metadata_snapshot(
worker_name,
metadata.resolved_manifest_snapshot,
fallback,
)?,
store,
loader,
workspace_context,
filesystem_authority,
)
.await;
}
let snapshot = metadata.resolved_manifest_snapshot.ok_or_else(|| {
WorkerError::WorkerMetadataManifestSnapshotMissing {
worker_name: worker_name.to_string(),
}
})?;
let manifest =
restore_manifest_from_worker_metadata_snapshot(worker_name, Some(snapshot), fallback)?;
Self::from_manifest_with_context(
manifest,
store,
loader,
workspace_context,
filesystem_authority,
)
.await
}
/// Restore a Worker from an existing session log.
///
/// Uses the resolved manifest supplied by the caller, seeds a
@@ -4548,6 +4607,9 @@ pub enum WorkerError {
session_id: SessionId,
},
#[error("worker metadata for {worker_name} does not include a resolved manifest snapshot")]
WorkerMetadataManifestSnapshotMissing { worker_name: String },
#[error(
"worker metadata for {worker_name} contains an invalid resolved manifest snapshot: {source}"
)]