feat: AI commit messages, change tree, router behavesAs, sidebar times (v2.2.0)
- Changes panel: Files and Changes merged into one panel; the overview's groups drawn as a folder tree (compacted chains, file counts, fold, stage/unstage a whole folder) - AI-suggested commit message for what is staged (POST /api/lanes/:id/git/commit-message, claude -p --safe-mode, haiku) - AI Router: optional "Behaves as" Claude model id, written as modelPicker options into the router's --settings file (issue #56) - Sidebar: session rows show last activity, live rows their start time; a closed Terminal row can be removed (DELETE /api/run/history/:id) - Every pane's CLI starts only once a client is attached; claude panes no longer forced inline; tmux scrollbar one column wide - Update notifier: "Check for updates" reopens a closed notice
This commit is contained in:
@@ -158,6 +158,23 @@ router.get("/history", (req, res) => {
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* Forget one closed Terminal tab (`tool = 'shell'`) from the history — the
|
||||
* sidebar's remove. A live pane is refused; another tool's row is a 404.
|
||||
*/
|
||||
router.delete("/history/:id", (req, res) => {
|
||||
if (runs.listRuns().some((h) => h.id === req.params.id)) {
|
||||
return res.status(409).json({ error: { code: "ERUNLIVE", message: "terminal is still open" } });
|
||||
}
|
||||
const dr = require("../lib/dashboard-runs");
|
||||
if (!dr.forgetShellRun(req.params.id)) {
|
||||
return res
|
||||
.status(404)
|
||||
.json({ error: { code: "ENOTFOUND", message: "no closed terminal with that id" } });
|
||||
}
|
||||
res.json({ removed: req.params.id });
|
||||
});
|
||||
|
||||
/**
|
||||
* Suggest plausible working directories. Pulls from:
|
||||
* - "dashboard": the dashboard server's cwd
|
||||
|
||||
Reference in New Issue
Block a user