refactor: separate worker workspace identity

This commit is contained in:
2026-07-11 09:58:20 +09:00
parent 74b07bd787
commit 142b60e1b3
16 changed files with 486 additions and 138 deletions
+28 -6
View File
@@ -2,7 +2,10 @@ use std::ffi::OsString;
use std::path::{Path, PathBuf};
use std::process::ExitCode;
use crate::{PromptLoader, Worker, WorkerController, WorkerFilesystemAuthority};
use crate::{
PromptLoader, Worker, WorkerController, WorkerFilesystemAuthority, WorkerWorkspaceContext,
WorkspaceId,
};
use clap::{CommandFactory, FromArgMatches, Parser};
use manifest::{
Permission, ProfileResolveOptions, ProfileResolver, ProfileSelector, ScopeConfig, ScopeRule,
@@ -103,6 +106,24 @@ fn runtime_workspace_root(cli: &Cli) -> Result<PathBuf, String> {
}
}
fn runtime_workspace_context(workspace_root: &Path) -> WorkerWorkspaceContext {
WorkerWorkspaceContext::local_filesystem(read_workspace_id_hint(workspace_root))
}
fn read_workspace_id_hint(workspace_root: &Path) -> Option<WorkspaceId> {
let path = workspace_root.join(".yoi/workspace.toml");
let contents = std::fs::read_to_string(path).ok()?;
let value = toml::from_str::<toml::Value>(&contents).ok()?;
let id = value.get("id")?.as_str()?.to_string();
match WorkspaceId::new(id) {
Ok(id) => Some(id),
Err(err) => {
tracing::warn!("ignoring invalid workspace id in .yoi/workspace.toml: {err}");
None
}
}
}
fn runtime_worker_name(cli: &Cli, workspace_root: &Path) -> String {
cli.worker
.as_deref()
@@ -513,6 +534,7 @@ async fn run_cli_inner(cli: Cli) -> ExitCode {
let store = CombinedStore::new(session_store, worker_metadata_store);
let filesystem_authority =
WorkerFilesystemAuthority::local(workspace_root.clone(), cwd.clone());
let workspace_context = runtime_workspace_context(&workspace_root);
let mut worker = if cli.adopt {
let callback = match cli.callback.clone() {
@@ -527,7 +549,7 @@ async fn run_cli_inner(cli: Cli) -> ExitCode {
store,
loader,
callback,
workspace_root.clone(),
workspace_context.clone(),
filesystem_authority.clone(),
)
.await
@@ -558,7 +580,7 @@ async fn run_cli_inner(cli: Cli) -> ExitCode {
manifest,
store,
loader,
workspace_root.clone(),
workspace_context.clone(),
filesystem_authority.clone(),
)
.await
@@ -578,7 +600,7 @@ async fn run_cli_inner(cli: Cli) -> ExitCode {
manifest,
store,
loader,
workspace_root.clone(),
workspace_context.clone(),
filesystem_authority.clone(),
)
.await
@@ -599,7 +621,7 @@ async fn run_cli_inner(cli: Cli) -> ExitCode {
manifest,
store,
loader,
workspace_root.clone(),
workspace_context.clone(),
filesystem_authority.clone(),
)
.await
@@ -621,7 +643,7 @@ async fn run_cli_inner(cli: Cli) -> ExitCode {
manifest,
store,
loader,
workspace_root.clone(),
workspace_context.clone(),
filesystem_authority.clone(),
)
.await