bijux_cli/interface/repl/
types.rs1use std::collections::BTreeMap;
2use std::path::PathBuf;
3
4use crate::contracts::ExecutionPolicy;
5
6pub const REPL_STARTUP_LATENCY_BUDGET_MS: u128 = 50;
8pub const REPL_MEMORY_BUDGET_BYTES: usize = 2 * 1024 * 1024;
10
11pub(crate) const META_PREFIX: char = ':';
13pub const REPL_HISTORY_ENTRY_MAX_CHARS: usize = 8 * 1024;
15pub const REPL_HISTORY_FILE_MAX_BYTES: u64 = 8 * 1024 * 1024;
17pub const REPL_HISTORY_MAX_ENTRIES: usize = 50_000;
19pub const REPL_COMPLETION_MAX_CANDIDATES: usize = 512;
21pub const REPL_COMPLETION_REGISTRY_MAX_ENTRIES: usize = 1024;
23pub const REPL_COMPLETION_ENTRY_MAX_CHARS: usize = 256;
25pub const REPL_COMPLETION_REGISTRY_MAX_OWNERS: usize = 256;
27pub const REPL_PLUGIN_COMPLETION_MAX_NAMESPACES: usize = 256;
29pub const REPL_PROFILE_MAX_CHARS: usize = 64;
31pub const REPL_PROMPT_MAX_CHARS: usize = 128;
33pub const REPL_STARTUP_DIAGNOSTIC_MAX_ENTRIES: usize = 128;
35pub const REPL_LAST_ERROR_MAX_CHARS: usize = 2_048;
37pub const REPL_MULTILINE_BUFFER_MAX_CHARS: usize = 64 * 1024;
39pub const REPL_COMMAND_MAX_CHARS: usize = 64 * 1024;
41
42#[derive(Debug, Clone, PartialEq, Eq)]
44pub struct ReplStartupContract {
45 pub prompt: String,
47 pub include_profile_context: bool,
49 pub policy: ExecutionPolicy,
51}
52
53#[derive(Debug, Clone, PartialEq, Eq)]
55pub struct ReplShutdownContract {
56 pub session_id: String,
58 pub commands_executed: usize,
60}
61
62#[derive(Debug, Clone, PartialEq, Eq)]
64pub struct ReplSession {
65 pub session_id: String,
67 pub prompt: String,
69 pub profile: String,
71 pub policy: ExecutionPolicy,
73 pub commands_executed: usize,
75 pub last_exit_code: i32,
77 pub trace_mode: bool,
79 pub history: Vec<String>,
81 pub history_limit: usize,
83 pub history_enabled: bool,
85 pub history_file: Option<PathBuf>,
87 pub config_path: Option<String>,
89 pub pending_multiline: Option<String>,
91 pub last_error: Option<String>,
93 pub plugin_completion_hooks: BTreeMap<String, Vec<String>>,
95 pub completion_registries: BTreeMap<String, Vec<String>>,
97}
98
99#[derive(Debug, Clone, Copy, PartialEq, Eq)]
101pub enum ReplStream {
102 Stdout,
104 Stderr,
106}
107
108#[derive(Debug, Clone, PartialEq, Eq)]
110pub struct ReplFrame {
111 pub stream: ReplStream,
113 pub content: String,
115}
116
117#[derive(Debug, Clone, PartialEq, Eq)]
119pub enum ReplInput {
120 Line(String),
122 Interrupt,
124 Eof,
126}
127
128#[derive(Debug, Clone, PartialEq, Eq)]
130pub enum ReplEvent {
131 Continue(Option<ReplFrame>),
133 Exit(Option<ReplFrame>),
135 Interrupted(ReplFrame),
137}
138
139#[derive(Debug, thiserror::Error)]
141pub enum ReplError {
142 #[error(transparent)]
144 Parser(#[from] crate::routing::parser::ParseError),
145 #[error(transparent)]
147 Route(#[from] crate::routing::registry::RouteError),
148 #[error("kernel execution failed")]
150 Kernel(crate::kernel::KernelError),
151 #[error("core execution failed: {0}")]
153 Core(String),
154 #[error(transparent)]
156 Emit(#[from] crate::shared::output::EmitError),
157 #[error(transparent)]
159 Json(#[from] serde_json::Error),
160 #[error(transparent)]
162 Io(#[from] std::io::Error),
163 #[error("invalid repl command: {0}")]
165 InvalidMetaCommand(String),
166 #[error("invalid command input: {0}")]
168 InvalidCommandInput(String),
169 #[error("history index out of bounds: {0}")]
171 HistoryIndexOutOfBounds(usize),
172}