Skip to main content

kaish_kernel/
lib.rs

1//! kaish-kernel (核): The core of 会sh.
2//!
3//! This crate provides:
4//!
5//! - **Lexer**: Tokenizes kaish source code using logos
6//! - **Parser**: Builds AST from tokens using chumsky
7//! - **AST**: Type definitions for the abstract syntax tree
8//! - **Interpreter**: Expression evaluation, scopes, and the `$?` result type
9//! - **VFS**: Virtual filesystem with mount points
10//! - **Tools**: Tool trait, registry, and builtin commands
11//! - **Scheduler**: Pipeline execution and background job management
12//! - **Paths**: XDG-compliant path helpers
13
14pub mod arithmetic;
15pub mod ast;
16pub mod backend;
17pub(crate) mod backend_walker_fs;
18pub mod dispatch;
19pub mod duration;
20pub mod help;
21pub mod ignore_config;
22pub mod interpreter;
23pub mod output_limit;
24pub mod kernel;
25pub mod lexer;
26pub mod nonce;
27pub mod parser;
28pub mod paths;
29#[cfg(all(unix, feature = "subprocess"))]
30pub mod pidfd;
31pub mod scheduler;
32pub(crate) mod telemetry;
33pub mod tools;
34pub mod trash;
35#[cfg(feature = "os-integration")]
36pub mod trash_system;
37pub mod validator;
38pub mod vfs;
39pub mod watchdog;
40#[cfg(all(unix, feature = "subprocess"))]
41pub mod terminal;
42
43// Re-export kaish_glob as our glob/walker modules for backwards compatibility
44pub use kaish_glob as glob_crate;
45
46/// Glob pattern matching (re-exported from kaish-glob).
47pub mod glob {
48    pub use kaish_glob::glob::{contains_glob, expand_braces, glob_match};
49}
50
51/// Recursive file walking infrastructure (re-exported from kaish-glob).
52pub mod walker {
53    pub use kaish_glob::{
54        EntryTypes, FileWalker, FilterResult, GlobPath, IgnoreFilter, IncludeExclude,
55        PathSegment, PatternError, WalkOptions, WalkerDirEntry, WalkerError, WalkerFs,
56    };
57    pub use crate::backend_walker_fs::BackendWalkerFs;
58}
59
60pub use backend::{
61    BackendError, BackendResult, KernelBackend, LocalBackend, PatchOp, ReadRange,
62    ToolInfo, ToolResult, VirtualOverlayBackend, WriteMode,
63};
64pub use dispatch::{CommandDispatcher, PipelinePosition};
65pub use ignore_config::{IgnoreConfig, IgnoreScope};
66pub use kernel::{ExecuteOptions, Kernel, KernelConfig, VfsMountMode};
67pub use output_limit::OutputLimitConfig;
68
69// ═══════════════════════════════════════════════════════════════════════════
70// Embedding Conveniences
71// ═══════════════════════════════════════════════════════════════════════════
72
73// Backend with /v/* support for embedders
74//
75// Use `Kernel::with_backend()` to provide a custom backend with automatic
76// `/v/*` path support (job observability, blob storage):
77//
78// ```ignore
79// let kernel = Kernel::with_backend(my_backend, config, |vfs| {
80//     vfs.mount_arc("/v/docs", docs_fs);
81// }, |_| {})?;
82// ```
83
84// Git types (for embedders that want direct GitVfs access)
85#[cfg(feature = "git")]
86pub use vfs::{FileStatus, GitVfs, LogEntry, StatusSummary, WorktreeInfo};
87
88// Job observability (for embedders capturing command output)
89pub use scheduler::{BoundedStream, StreamStats, DEFAULT_STREAM_MAX_SIZE, drain_to_stream};
90pub use vfs::JobFs;
91
92// XDG path primitives (embedders compose their own paths)
93pub use paths::{home_dir, xdg_cache_home, xdg_config_home, xdg_data_home, xdg_runtime_dir};
94
95// Tilde expansion utility
96pub use interpreter::expand_tilde;
97
98// Tool registration (for embedders registering custom tools)
99pub use tools::{Tool, ToolRegistry, ExecContext};