Add file badges, menu icons, LSP diagnostics, robust compaction

- Files in chat: preview with type/size badges and file name; attachment chips
- Menu and settings tabs with icons
- Heatmap: distinct colour for empty hours, hourly labels
- Context chip shows used/total tokens (e.g. 221k/240k) plus percent
- LSP client: diagnostics appended to edit/write results and a diagnostics tool
  (typescript-language-server, pyright, rust-analyzer, gopls, clangd; sandboxed)
- Compaction summarizes a plain transcript and retries once on empty output
- files/stat endpoint

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Richard ZinkandClaude Opus 5.5 committed 2026-11-08 19:50:12 +01:00
1 parent 5b569b6835
commit ec1b9b4925
22 files changed
+1036 -48

No files matched your search

+35
View File
@@ -23,8 +23,43 @@ pub struct Config {
pub images: ImagesConfig,
pub sandbox: SandboxConfig,
pub search: SearchConfig,
pub lsp: LspConfig,
}
/// Language servers for diagnostics after edits.
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(default)]
pub struct LspConfig {
pub enabled: bool,
/// Extra or overridden servers (built-in: rust, typescript, python, go, c).
pub servers: std::collections::BTreeMap<String, LspServer>,
}
impl Default for LspConfig {
fn default() -> Self {
Self { enabled: true, servers: Default::default() }
}
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct LspServer {
pub command: String,
#[serde(default)]
pub args: Vec<String>,
/// File extensions without dot.
#[serde(default)]
pub extensions: Vec<String>,
/// Files that mark the project root (e.g. Cargo.toml).
#[serde(default)]
pub root_markers: Vec<String>,
/// initializationOptions sent to the server.
#[serde(default, skip_serializing_if = "serde_json::Value::is_null")]
pub init_options: serde_json::Value,
#[serde(default = "yes")]
pub enabled: bool,
}
/// Web search for the web_search tool.
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(default)]