Add web terminal, git credentials, OpenSCAD, review loops, automations

- Web terminal (PTY over WebSocket, xterm.js, sandboxed, reattach with replay)
- Per-user git credentials and commit identity (credential store in the user's home)
- OpenSCAD tool (STL/3MF + preview renders, bounding box) and cad skill; 3D model card
- Craft phase inferred from tool activity when the agent does not report it
- Configurable review loop per mode (rounds, reviewer model, criteria)
- Delete config and Markdown agents from the agent editor
- Automations: cron-scheduled agents from Markdown job files, schedule tool, page
- change_directory tool (only on the user's request)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Richard ZinkandClaude Opus 5.5 committed 2026-11-08 22:00:38 +01:00
1 parent a0d0e707f2
commit df1924b0a1
41 files changed
+2809 -34

No files matched your search

+18
View File
@@ -436,6 +436,24 @@ pub struct AgentConfig {
/// Max. instances of this subagent running at the same time.
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_parallel: Option<usize>,
/// Review loop after each turn of this mode.
#[serde(default, skip_serializing_if = "Option::is_none")]
pub refine: Option<RefineConfig>,
}
/// Refinement loop: after the agent finishes, a reviewer checks the result
/// against the request; with findings the agent continues (max. `rounds`).
#[derive(Debug, Clone, Deserialize, Serialize, Default)]
pub struct RefineConfig {
/// Review rounds per turn (0 = off).
#[serde(default)]
pub rounds: u32,
/// Reviewer model ("provider/model"); empty = the session's model.
#[serde(default, skip_serializing_if = "Option::is_none")]
pub model: Option<String>,
/// Review criteria; empty = the mode's defaults.
#[serde(default, skip_serializing_if = "Option::is_none")]
pub criteria: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]