Claude Code engine, image viewer, colour tags, checks per turn and more
- Claude Code as an engine: chats on a "claude-code/<alias>" model run through the claude CLI (stream-json); tool approvals go through our permission system. Sign in from the web UI (URL + pasted code), CLI version and update from Settings; the Docker image contains the CLI. - Small models (8k context) for side tasks: input is cut to the model's context window; one-line chat status, "What does this do?" on approvals, "Plan as automation" (job draft from a chat). - Mobile: top bar no longer widens the page, image viewer (zoom, swipe, mark up, use in message), jump to previous own message, message menu, time under every message. - Approvals: push actions (allow/reject), "always allow in this project" (never for dangerous commands) with revoke. - Per turn: changed files with diffs and rollback; project check command with a green/red badge and "let the agent fix it". - Colour tags for chats in the colours of the active theme. - Project defaults for new chats, project page (timeline), offline queue. Tested in a throwaway container with a mock model (8k small model): 26 API checks passed (permissions, diffs, checks, defaults, job draft, side-task budget, Claude Code status/login URL, unsigned-in chat). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
084452abf6
commit
62fe5bf467
42 files changed
+3734
-55
No files matched your search
+13
-1
@@ -187,8 +187,17 @@ pub struct Session {
|
||||
/// unless it is the chat currently open in Telegram.
|
||||
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
|
||||
pub telegram_quiet: bool,
|
||||
/// One-line "where things stand", written by the small model after a turn (session list).
|
||||
#[serde(default, skip_serializing_if = "String::is_empty")]
|
||||
pub summary: String,
|
||||
/// Colour tag of the chat (a palette name, see `SESSION_COLORS`); the client maps it to the theme.
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub color: Option<String>,
|
||||
}
|
||||
|
||||
/// Names of the colour tags: the client draws them with the colours of the active theme.
|
||||
pub const SESSION_COLORS: &[&str] = &["red", "orange", "yellow", "green", "aqua", "blue", "purple"];
|
||||
|
||||
impl Session {
|
||||
pub fn clean_room(&self, default: bool) -> bool {
|
||||
self.clean_room.unwrap_or(default)
|
||||
@@ -243,6 +252,8 @@ pub enum Event {
|
||||
/// Compaction of the history: state "started", "done" or "failed"; auto = triggered by
|
||||
/// a nearly full context (tokens of limit).
|
||||
Compaction { session_id: String, state: String, auto: bool, tokens: Option<u64>, limit: Option<u64> },
|
||||
/// The project's check command ran after a turn: status "running" | "passed" | "failed" | "timeout".
|
||||
CheckResult { session_id: String, message_id: String, status: String, exit_code: Option<i32>, duration_ms: u64, output: String },
|
||||
}
|
||||
|
||||
impl Event {
|
||||
@@ -265,7 +276,8 @@ impl Event {
|
||||
| Waiting { session_id, .. }
|
||||
| QueueUpdated { session_id, .. }
|
||||
| StepStarted { session_id, .. }
|
||||
| Compaction { session_id, .. } => Some(session_id),
|
||||
| Compaction { session_id, .. }
|
||||
| CheckResult { session_id, .. } => Some(session_id),
|
||||
McpStatus { .. } => None,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user