pub struct RagFs {
source: PathBuf,
inodes: Arc<RwLock<InodeTable>>,
store: Option<Arc<dyn VectorStore>>,
query_executor: Option<Arc<QueryExecutor>>,
runtime: Handle,
content_cache: Arc<RwLock<HashMap<u64, Vec<u8>>>>,
reindex_sender: Option<Sender<PathBuf>>,
ops_manager: Arc<OpsManager>,
safety_manager: Arc<SafetyManager>,
semantic_manager: Arc<SemanticManager>,
}Expand description
RAGFS FUSE filesystem.
Fields§
§source: PathBufSource directory being indexed
inodes: Arc<RwLock<InodeTable>>Inode table
store: Option<Arc<dyn VectorStore>>Vector store for queries and stats
query_executor: Option<Arc<QueryExecutor>>Query executor
runtime: HandleTokio runtime handle for async operations
content_cache: Arc<RwLock<HashMap<u64, Vec<u8>>>>Cache for virtual file contents (query results, index status)
reindex_sender: Option<Sender<PathBuf>>Channel sender for reindex requests
ops_manager: Arc<OpsManager>Operations manager for agent file management
safety_manager: Arc<SafetyManager>Safety manager for trash/history/undo
semantic_manager: Arc<SemanticManager>Semantic manager for intelligent operations
Implementations§
Source§impl RagFs
impl RagFs
pub(crate) fn lookup_ops_dir(&mut self, name_str: &str, reply: ReplyEntry)
pub(crate) fn getattr_ops(&mut self, ino: u64, reply: ReplyAttr)
pub(crate) fn read_ops( &mut self, ino: u64, offset: i64, size: u32, reply: ReplyData, )
pub(crate) fn readdir_ops(&mut self, offset: i64, reply: ReplyDirectory)
pub(crate) fn write_ops(&mut self, ino: u64, data: &[u8], reply: ReplyWrite)
Source§impl RagFs
impl RagFs
pub(crate) fn lookup_root(&mut self, name_str: &str, reply: ReplyEntry)
pub(crate) fn lookup_passthrough( &mut self, parent: u64, name_str: &str, reply: ReplyEntry, )
pub(crate) fn getattr_cached_or_passthrough( &mut self, ino: u64, reply: ReplyAttr, )
pub(crate) fn read_passthrough( &mut self, ino: u64, offset: i64, size: u32, reply: ReplyData, )
pub(crate) fn readdir_root(&mut self, offset: i64, reply: ReplyDirectory)
pub(crate) fn readdir_passthrough( &mut self, ino: u64, offset: i64, reply: ReplyDirectory, )
pub(crate) fn write_passthrough( &mut self, ino: u64, data: &[u8], reply: ReplyWrite, )
pub(crate) fn create_passthrough( &mut self, parent: u64, name: &OsStr, mode: u32, _umask: u32, flags: i32, reply: ReplyCreate, )
pub(crate) fn unlink_passthrough( &mut self, parent: u64, name: &OsStr, reply: ReplyEmpty, )
pub(crate) fn mkdir_passthrough( &mut self, parent: u64, name: &OsStr, mode: u32, _umask: u32, reply: ReplyEntry, )
pub(crate) fn rmdir_passthrough( &mut self, parent: u64, name: &OsStr, reply: ReplyEmpty, )
pub(crate) fn rename_passthrough( &mut self, parent: u64, name: &OsStr, newparent: u64, newname: &OsStr, _flags: u32, reply: ReplyEmpty, )
pub(crate) fn setattr_passthrough( &mut self, ino: u64, _mode: Option<u32>, _uid: Option<u32>, _gid: Option<u32>, size: Option<u64>, _atime: Option<TimeOrNow>, _mtime: Option<TimeOrNow>, _ctime: Option<SystemTime>, _fh: Option<u64>, _crtime: Option<SystemTime>, _chgtime: Option<SystemTime>, _bkuptime: Option<SystemTime>, _flags: Option<u32>, reply: ReplyAttr, )
Source§impl RagFs
impl RagFs
pub(crate) fn lookup_ragfs_dir(&mut self, name_str: &str, reply: ReplyEntry)
pub(crate) fn lookup_query_dir(&mut self, name_str: &str, reply: ReplyEntry)
pub(crate) fn getattr_query(&mut self, ino: u64, reply: ReplyAttr)
pub(crate) fn read_query( &mut self, ino: u64, offset: i64, size: u32, reply: ReplyData, )
pub(crate) fn readdir_ragfs(&mut self, offset: i64, reply: ReplyDirectory)
pub(crate) fn readdir_query( &mut self, ino: u64, offset: i64, reply: ReplyDirectory, )
pub(crate) fn write_reindex(&mut self, data: &[u8], reply: ReplyWrite)
Source§impl RagFs
impl RagFs
pub(crate) fn lookup_safety_dir(&mut self, name_str: &str, reply: ReplyEntry)
pub(crate) fn getattr_safety(&mut self, ino: u64, reply: ReplyAttr)
pub(crate) fn read_safety( &mut self, ino: u64, offset: i64, size: u32, reply: ReplyData, )
pub(crate) fn readdir_safety( &mut self, ino: u64, offset: i64, reply: ReplyDirectory, )
pub(crate) fn write_safety(&mut self, _ino: u64, data: &[u8], reply: ReplyWrite)
Source§impl RagFs
impl RagFs
pub(crate) fn lookup_semantic_dir(&mut self, name_str: &str, reply: ReplyEntry)
pub(crate) fn lookup_pending_dir(&mut self, name_str: &str, reply: ReplyEntry)
pub(crate) fn getattr_semantic(&mut self, ino: u64, reply: ReplyAttr)
pub(crate) fn read_semantic( &mut self, ino: u64, offset: i64, size: u32, reply: ReplyData, )
pub(crate) fn readdir_semantic( &mut self, ino: u64, offset: i64, reply: ReplyDirectory, )
pub(crate) fn write_semantic( &mut self, ino: u64, data: &[u8], reply: ReplyWrite, )
Source§impl RagFs
impl RagFs
Sourcepub fn new(source: PathBuf) -> Self
pub fn new(source: PathBuf) -> Self
Create a new RAGFS filesystem (basic, for passthrough only).
Sourcepub fn with_rag(
source: PathBuf,
store: Arc<dyn VectorStore>,
embedder: Arc<dyn Embedder>,
runtime: Handle,
reindex_sender: Option<Sender<PathBuf>>,
) -> Self
pub fn with_rag( source: PathBuf, store: Arc<dyn VectorStore>, embedder: Arc<dyn Embedder>, runtime: Handle, reindex_sender: Option<Sender<PathBuf>>, ) -> Self
Create a new RAGFS filesystem with full RAG capabilities.
Hybrid search defaults to on (same as [query].hybrid in config.toml).
Sourcepub fn with_rag_query(
source: PathBuf,
store: Arc<dyn VectorStore>,
embedder: Arc<dyn Embedder>,
runtime: Handle,
reindex_sender: Option<Sender<PathBuf>>,
default_limit: usize,
hybrid: bool,
max_limit: usize,
) -> Self
pub fn with_rag_query( source: PathBuf, store: Arc<dyn VectorStore>, embedder: Arc<dyn Embedder>, runtime: Handle, reindex_sender: Option<Sender<PathBuf>>, default_limit: usize, hybrid: bool, max_limit: usize, ) -> Self
Create a RAG-enabled filesystem with query settings from config / CLI.
Sourcefn jail_reindex_path(&self, path: &Path) -> Result<PathBuf, String>
fn jail_reindex_path(&self, path: &Path) -> Result<PathBuf, String>
Resolve a .reindex path and reject anything that escapes the source root.
Sourcefn real_path_to_attr(&self, path: &PathBuf, ino: u64) -> Option<FileAttr>
fn real_path_to_attr(&self, path: &PathBuf, ino: u64) -> Option<FileAttr>
Convert a real path to a FUSE inode.
fn make_attr(&self, ino: u64, kind: FileType, size: u64) -> FileAttr
Sourcefn get_index_status(&self) -> Vec<u8> ⓘ
fn get_index_status(&self) -> Vec<u8> ⓘ
Get index status as JSON.
Sourcefn get_config(&self) -> Vec<u8> ⓘ
fn get_config(&self) -> Vec<u8> ⓘ
Get configuration as JSON.
This is mount wiring, not ~/.config/ragfs/config.toml.
Sourcefn resolve_parent_path(&self, parent: u64) -> Option<PathBuf>
fn resolve_parent_path(&self, parent: u64) -> Option<PathBuf>
Resolve a parent inode to a real path. Returns None if the parent doesn’t exist or is not a directory.
Sourcefn get_help_content(&self) -> Vec<u8> ⓘ
fn get_help_content(&self) -> Vec<u8> ⓘ
Get help content for the virtual control directory.
Trait Implementations§
Source§impl Filesystem for RagFs
impl Filesystem for RagFs
Source§fn init(
&mut self,
_req: &Request<'_>,
_config: &mut KernelConfig,
) -> Result<(), c_int>
fn init( &mut self, _req: &Request<'_>, _config: &mut KernelConfig, ) -> Result<(), c_int>
Source§fn lookup(
&mut self,
_req: &Request<'_>,
parent: u64,
name: &OsStr,
reply: ReplyEntry,
)
fn lookup( &mut self, _req: &Request<'_>, parent: u64, name: &OsStr, reply: ReplyEntry, )
Source§fn getattr(
&mut self,
_req: &Request<'_>,
ino: u64,
_fh: Option<u64>,
reply: ReplyAttr,
)
fn getattr( &mut self, _req: &Request<'_>, ino: u64, _fh: Option<u64>, reply: ReplyAttr, )
Source§fn read(
&mut self,
_req: &Request<'_>,
ino: u64,
_fh: u64,
offset: i64,
size: u32,
_flags: i32,
_lock_owner: Option<u64>,
reply: ReplyData,
)
fn read( &mut self, _req: &Request<'_>, ino: u64, _fh: u64, offset: i64, size: u32, _flags: i32, _lock_owner: Option<u64>, reply: ReplyData, )
Source§fn readdir(
&mut self,
_req: &Request<'_>,
ino: u64,
_fh: u64,
offset: i64,
reply: ReplyDirectory,
)
fn readdir( &mut self, _req: &Request<'_>, ino: u64, _fh: u64, offset: i64, reply: ReplyDirectory, )
Source§fn open(&mut self, _req: &Request<'_>, ino: u64, flags: i32, reply: ReplyOpen)
fn open(&mut self, _req: &Request<'_>, ino: u64, flags: i32, reply: ReplyOpen)
Source§fn opendir(
&mut self,
_req: &Request<'_>,
ino: u64,
flags: i32,
reply: ReplyOpen,
)
fn opendir( &mut self, _req: &Request<'_>, ino: u64, flags: i32, reply: ReplyOpen, )
Source§fn write(
&mut self,
_req: &Request<'_>,
ino: u64,
_fh: u64,
_offset: i64,
data: &[u8],
_write_flags: u32,
_flags: i32,
_lock_owner: Option<u64>,
reply: ReplyWrite,
)
fn write( &mut self, _req: &Request<'_>, ino: u64, _fh: u64, _offset: i64, data: &[u8], _write_flags: u32, _flags: i32, _lock_owner: Option<u64>, reply: ReplyWrite, )
Source§fn forget(&mut self, _req: &Request<'_>, ino: u64, nlookup: u64)
fn forget(&mut self, _req: &Request<'_>, ino: u64, nlookup: u64)
Source§fn create(
&mut self,
_req: &Request<'_>,
parent: u64,
name: &OsStr,
mode: u32,
umask: u32,
flags: i32,
reply: ReplyCreate,
)
fn create( &mut self, _req: &Request<'_>, parent: u64, name: &OsStr, mode: u32, umask: u32, flags: i32, reply: ReplyCreate, )
Source§fn unlink(
&mut self,
_req: &Request<'_>,
parent: u64,
name: &OsStr,
reply: ReplyEmpty,
)
fn unlink( &mut self, _req: &Request<'_>, parent: u64, name: &OsStr, reply: ReplyEmpty, )
Source§fn mkdir(
&mut self,
_req: &Request<'_>,
parent: u64,
name: &OsStr,
mode: u32,
umask: u32,
reply: ReplyEntry,
)
fn mkdir( &mut self, _req: &Request<'_>, parent: u64, name: &OsStr, mode: u32, umask: u32, reply: ReplyEntry, )
Source§fn rmdir(
&mut self,
_req: &Request<'_>,
parent: u64,
name: &OsStr,
reply: ReplyEmpty,
)
fn rmdir( &mut self, _req: &Request<'_>, parent: u64, name: &OsStr, reply: ReplyEmpty, )
Source§fn rename(
&mut self,
_req: &Request<'_>,
parent: u64,
name: &OsStr,
newparent: u64,
newname: &OsStr,
flags: u32,
reply: ReplyEmpty,
)
fn rename( &mut self, _req: &Request<'_>, parent: u64, name: &OsStr, newparent: u64, newname: &OsStr, flags: u32, reply: ReplyEmpty, )
Source§fn setattr(
&mut self,
_req: &Request<'_>,
ino: u64,
mode: Option<u32>,
uid: Option<u32>,
gid: Option<u32>,
size: Option<u64>,
atime: Option<TimeOrNow>,
mtime: Option<TimeOrNow>,
ctime: Option<SystemTime>,
fh: Option<u64>,
crtime: Option<SystemTime>,
chgtime: Option<SystemTime>,
bkuptime: Option<SystemTime>,
flags: Option<u32>,
reply: ReplyAttr,
)
fn setattr( &mut self, _req: &Request<'_>, ino: u64, mode: Option<u32>, uid: Option<u32>, gid: Option<u32>, size: Option<u64>, atime: Option<TimeOrNow>, mtime: Option<TimeOrNow>, ctime: Option<SystemTime>, fh: Option<u64>, crtime: Option<SystemTime>, chgtime: Option<SystemTime>, bkuptime: Option<SystemTime>, flags: Option<u32>, reply: ReplyAttr, )
§fn batch_forget(&mut self, req: &Request<'_>, nodes: &[fuse_forget_one])
fn batch_forget(&mut self, req: &Request<'_>, nodes: &[fuse_forget_one])
§fn mknod(
&mut self,
_req: &Request<'_>,
parent: u64,
name: &OsStr,
mode: u32,
umask: u32,
rdev: u32,
reply: ReplyEntry,
)
fn mknod( &mut self, _req: &Request<'_>, parent: u64, name: &OsStr, mode: u32, umask: u32, rdev: u32, reply: ReplyEntry, )
§fn symlink(
&mut self,
_req: &Request<'_>,
parent: u64,
link_name: &OsStr,
target: &Path,
reply: ReplyEntry,
)
fn symlink( &mut self, _req: &Request<'_>, parent: u64, link_name: &OsStr, target: &Path, reply: ReplyEntry, )
§fn link(
&mut self,
_req: &Request<'_>,
ino: u64,
newparent: u64,
newname: &OsStr,
reply: ReplyEntry,
)
fn link( &mut self, _req: &Request<'_>, ino: u64, newparent: u64, newname: &OsStr, reply: ReplyEntry, )
§fn flush(
&mut self,
_req: &Request<'_>,
ino: u64,
fh: u64,
lock_owner: u64,
reply: ReplyEmpty,
)
fn flush( &mut self, _req: &Request<'_>, ino: u64, fh: u64, lock_owner: u64, reply: ReplyEmpty, )
§fn release(
&mut self,
_req: &Request<'_>,
_ino: u64,
_fh: u64,
_flags: i32,
_lock_owner: Option<u64>,
_flush: bool,
reply: ReplyEmpty,
)
fn release( &mut self, _req: &Request<'_>, _ino: u64, _fh: u64, _flags: i32, _lock_owner: Option<u64>, _flush: bool, reply: ReplyEmpty, )
§fn fsync(
&mut self,
_req: &Request<'_>,
ino: u64,
fh: u64,
datasync: bool,
reply: ReplyEmpty,
)
fn fsync( &mut self, _req: &Request<'_>, ino: u64, fh: u64, datasync: bool, reply: ReplyEmpty, )
§fn readdirplus(
&mut self,
_req: &Request<'_>,
ino: u64,
fh: u64,
offset: i64,
reply: ReplyDirectoryPlus,
)
fn readdirplus( &mut self, _req: &Request<'_>, ino: u64, fh: u64, offset: i64, reply: ReplyDirectoryPlus, )
§fn releasedir(
&mut self,
_req: &Request<'_>,
_ino: u64,
_fh: u64,
_flags: i32,
reply: ReplyEmpty,
)
fn releasedir( &mut self, _req: &Request<'_>, _ino: u64, _fh: u64, _flags: i32, reply: ReplyEmpty, )
§fn fsyncdir(
&mut self,
_req: &Request<'_>,
ino: u64,
fh: u64,
datasync: bool,
reply: ReplyEmpty,
)
fn fsyncdir( &mut self, _req: &Request<'_>, ino: u64, fh: u64, datasync: bool, reply: ReplyEmpty, )
§fn setxattr(
&mut self,
_req: &Request<'_>,
ino: u64,
name: &OsStr,
_value: &[u8],
flags: i32,
position: u32,
reply: ReplyEmpty,
)
fn setxattr( &mut self, _req: &Request<'_>, ino: u64, name: &OsStr, _value: &[u8], flags: i32, position: u32, reply: ReplyEmpty, )
§fn getxattr(
&mut self,
_req: &Request<'_>,
ino: u64,
name: &OsStr,
size: u32,
reply: ReplyXattr,
)
fn getxattr( &mut self, _req: &Request<'_>, ino: u64, name: &OsStr, size: u32, reply: ReplyXattr, )
size is 0, the size of the value should be sent with reply.size().
If size is not 0, and the value fits, send it with reply.data(), or
reply.error(ERANGE) if it doesn’t.§fn listxattr(
&mut self,
_req: &Request<'_>,
ino: u64,
size: u32,
reply: ReplyXattr,
)
fn listxattr( &mut self, _req: &Request<'_>, ino: u64, size: u32, reply: ReplyXattr, )
size is 0, the size of the value should be sent with reply.size().
If size is not 0, and the value fits, send it with reply.data(), or
reply.error(ERANGE) if it doesn’t.