refactor: rename pod crate to worker
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
|
||||
Owns:
|
||||
|
||||
- built-in filesystem, web, memory, and Pod-management tool implementations where applicable
|
||||
- built-in filesystem, web, memory, and Worker-management tool implementations where applicable
|
||||
- bounded tool output formatting
|
||||
- scope-aware file operation helpers
|
||||
- tool-facing diagnostics suitable for history/model consumption
|
||||
@@ -17,7 +17,7 @@ Does not own:
|
||||
|
||||
- manifest permission policy definition (`manifest`)
|
||||
- Engine tool-loop semantics (`llm-engine`)
|
||||
- Pod lifecycle decisions (`pod`)
|
||||
- Worker lifecycle decisions (`worker`)
|
||||
- UI presentation (`tui`)
|
||||
|
||||
## Design notes
|
||||
|
||||
@@ -17,7 +17,7 @@ pub enum ToolsError {
|
||||
OutOfScope(PathBuf),
|
||||
|
||||
#[error(
|
||||
"path resolves through a symlink outside allowed {required_permission} scope: {} -> {}; add the symlink target to the Pod {required_permission} scope, copy it into the workspace, or recreate the symlink with the correct target",
|
||||
"path resolves through a symlink outside allowed {required_permission} scope: {} -> {}; add the symlink target to the Worker {required_permission} scope, copy it into the workspace, or recreate the symlink with the correct target",
|
||||
.path.display(),
|
||||
.target.display()
|
||||
)]
|
||||
|
||||
@@ -4,14 +4,14 @@
|
||||
//! `llm-engine` `Tool` infrastructure. Filesystem access is mediated by
|
||||
//! two orthogonal concerns:
|
||||
//!
|
||||
//! - [`ScopedFs`] — Pod-process lifetime, expresses the write-block
|
||||
//! - [`ScopedFs`] — Worker-process lifetime, expresses the write-block
|
||||
//! boundary for the current scope. Derived from the manifest; not
|
||||
//! persisted across Pod restart.
|
||||
//! - [`Tracker`] — Pod-process lifetime, enforces the "read before edit"
|
||||
//! persisted across Worker restart.
|
||||
//! - [`Tracker`] — Worker-process lifetime, enforces the "read before edit"
|
||||
//! policy via content hashes and tracks the recency of touched files.
|
||||
//! Recreated fresh on each Pod start (including resume).
|
||||
//! Recreated fresh on each Worker start (including resume).
|
||||
//!
|
||||
//! The Pod layer owns both instances and passes them to
|
||||
//! The Worker layer owns both instances and passes them to
|
||||
//! [`core_builtin_tools`] when registering tools on a `Engine`.
|
||||
//!
|
||||
//! `Bash` is the lone exception — its child processes bypass `ScopedFs`
|
||||
@@ -41,13 +41,13 @@ pub use tracker::Tracker;
|
||||
pub use web::{web_fetch_tool, web_search_tool};
|
||||
pub use write::write_tool;
|
||||
|
||||
/// Register core builtin tools that do not require Pod-local task state,
|
||||
/// wiring them to a shared `ScopedFs` (Pod-process lifetime) and `Tracker`
|
||||
/// (Pod-process lifetime).
|
||||
/// Register core builtin tools that do not require Worker-local task state,
|
||||
/// wiring them to a shared `ScopedFs` (Worker-process lifetime) and `Tracker`
|
||||
/// (Worker-process lifetime).
|
||||
///
|
||||
/// All returned factories share the same tracker instance so that
|
||||
/// `Read` / `Write` / `Edit` see a consistent history across tool
|
||||
/// invocations within a single Pod run.
|
||||
/// invocations within a single Worker run.
|
||||
///
|
||||
/// `bash_output_dir` is where the Bash tool spills long outputs. The
|
||||
/// caller is responsible for adding that path to the readable scope
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//! Scope-aware filesystem primitive.
|
||||
//!
|
||||
//! `ScopedFs` is the write/read gate layered on top of a [`manifest::Scope`]
|
||||
//! and a Pod's working directory. The scope decides which paths are
|
||||
//! and a Worker's working directory. The scope decides which paths are
|
||||
//! readable and writable; the cwd is carried alongside for convenience
|
||||
//! (Glob/Grep default their search base to it).
|
||||
//!
|
||||
@@ -27,7 +27,7 @@ struct ScopedFsInner {
|
||||
///
|
||||
/// The wrapped [`SharedScope`] is shared with every clone of this
|
||||
/// `ScopedFs` and with whoever else holds the same `SharedScope`
|
||||
/// handle (typically the owning Pod). Mutations to that `SharedScope`
|
||||
/// handle (typically the owning Worker). Mutations to that `SharedScope`
|
||||
/// propagate atomically; the next permission check inside any
|
||||
/// `ScopedFs` reads the new view.
|
||||
#[derive(Debug, Clone)]
|
||||
@@ -63,7 +63,7 @@ impl ScopedFs {
|
||||
/// Create a new [`ScopedFs`] wrapping `scope` and `cwd` in a fresh
|
||||
/// [`SharedScope`]. Use [`ScopedFs::with_shared_scope`] when you
|
||||
/// need the resulting `ScopedFs` to share scope state with another
|
||||
/// holder of the `SharedScope` (typically the Pod).
|
||||
/// holder of the `SharedScope` (typically the Worker).
|
||||
pub fn new(scope: Scope, cwd: PathBuf) -> Self {
|
||||
Self::with_shared_scope(SharedScope::new(scope), cwd)
|
||||
}
|
||||
@@ -85,13 +85,13 @@ impl ScopedFs {
|
||||
}
|
||||
|
||||
/// Shared scope handle backing this `ScopedFs`. Cloning it lets a
|
||||
/// caller (usually the Pod) hold the same view and push updates
|
||||
/// caller (usually the Worker) hold the same view and push updates
|
||||
/// that are immediately reflected in subsequent permission checks.
|
||||
pub fn shared_scope(&self) -> &SharedScope {
|
||||
&self.inner.scope
|
||||
}
|
||||
|
||||
/// The Pod's working directory. Glob/Grep default their search base
|
||||
/// The Worker's working directory. Glob/Grep default their search base
|
||||
/// to this path when callers omit an explicit `path` parameter.
|
||||
pub fn cwd(&self) -> &Path {
|
||||
&self.inner.cwd
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//! Pod-lifetime tracker for file operations performed by the builtin
|
||||
//! Worker-lifetime tracker for file operations performed by the builtin
|
||||
//! file-manipulation tools.
|
||||
//!
|
||||
//! A `Tracker` serves two orthogonal purposes:
|
||||
@@ -9,7 +9,7 @@
|
||||
//! verify that the file has not been externally modified since then.
|
||||
//!
|
||||
//! 2. **Recency of touched files.** It keeps an LRU-ordered list of
|
||||
//! files that have been touched by any of the tools, so the Pod
|
||||
//! files that have been touched by any of the tools, so the Worker
|
||||
//! layer can ask "which files did the agent recently look at?" —
|
||||
//! used e.g. as a default reference set passed to context compaction.
|
||||
//!
|
||||
@@ -18,12 +18,12 @@
|
||||
//!
|
||||
//! # Lifetime
|
||||
//!
|
||||
//! A `Tracker` is **Pod-process scoped**: the Pod layer creates a fresh
|
||||
//! instance at the start of each Pod run (including resume) and discards
|
||||
//! A `Tracker` is **Worker-process scoped**: the Worker layer creates a fresh
|
||||
//! instance at the start of each Worker run (including resume) and discards
|
||||
//! it when the process exits — it is not persisted, so a resumed
|
||||
//! conversation starts with an empty read/edit history. The `ScopedFs`
|
||||
//! write boundary is likewise Pod-process scoped (derived from the
|
||||
//! manifest). The two are orthogonal and the Pod wires them together
|
||||
//! write boundary is likewise Worker-process scoped (derived from the
|
||||
//! manifest). The two are orthogonal and the Worker wires them together
|
||||
//! when registering builtin tools.
|
||||
//!
|
||||
//! ```no_run
|
||||
@@ -31,7 +31,7 @@
|
||||
//! # use manifest::Scope;
|
||||
//! # use tools::{ScopedFs, Tracker, core_builtin_tools};
|
||||
//! let scope = Scope::writable("/workspace").unwrap();
|
||||
//! let fs = ScopedFs::new(scope, PathBuf::from("/workspace")); // pod lifetime
|
||||
//! let fs = ScopedFs::new(scope, PathBuf::from("/workspace")); // worker lifetime
|
||||
//! let tracker = Tracker::new(); // session lifetime
|
||||
//! let bash_outputs = PathBuf::from("/run/yoi/bash-output");
|
||||
//! let defs = core_builtin_tools(fs, tracker, bash_outputs, None);
|
||||
@@ -204,7 +204,7 @@ impl Tracker {
|
||||
|
||||
/// Return up to `n` most recently touched file paths, most-recent first.
|
||||
///
|
||||
/// Intended for callers like the Pod's context-compaction path, which
|
||||
/// Intended for callers like the Worker's context-compaction path, which
|
||||
/// wants to know which files the agent has been working with so it
|
||||
/// can pass them as default references to the compaction worker.
|
||||
pub fn recent_files(&self, n: usize) -> Vec<PathBuf> {
|
||||
|
||||
Reference in New Issue
Block a user