feat: Stop archives a session, Sleep keeps it; SSH keys per type (#82); update Auto fix
- Stop (a tab's or pane's X, Close tab) now archives the session it held (DELETE /api/run/:id?archive=1); the new Sleep (moon left of the X, and in the tab, pane and session right-click menus) stops the pane but keeps the session listed to resume later. Shared endRuns in client/src/lib/stopSession.ts. - Git identity (#82): an account keeps an ED25519 AND an RSA key (AWS CodeCommit takes only RSA), every ssh git offers both, and a member's ~/.gitconfig gets core.sshCommand so a git typed in a terminal uses them. - Update dialog: Auto fix starts a Claude Code session on the install folder with the failed update's error. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -173,6 +173,34 @@ describe("/api/run", () => {
|
||||
assert.deepEqual(body, { ok: true });
|
||||
});
|
||||
|
||||
it("DELETE /:id?archive=1 archives the run's session; a plain DELETE (Sleep) keeps it", async () => {
|
||||
const { db } = require("../db");
|
||||
db.prepare("INSERT INTO sessions (id, cwd) VALUES (?, ?)").run("sess-stop", TMP);
|
||||
db.prepare("INSERT INTO sessions (id, cwd) VALUES (?, ?)").run("sess-sleep", TMP);
|
||||
const run = db.prepare(
|
||||
"INSERT OR REPLACE INTO dashboard_runs (id, session_id, cwd, status) VALUES (?, ?, ?, 'running')"
|
||||
);
|
||||
const archivedAt = (id) =>
|
||||
db.prepare("SELECT archived_at FROM sessions WHERE id = ?").get(id).archived_at;
|
||||
tmux.__setExecImpl(() => "");
|
||||
|
||||
run.run("agenthub-lane-9-1", "sess-sleep", TMP);
|
||||
const slept = await fetchJson("/api/run/agenthub-lane-9-1", { method: "DELETE" });
|
||||
assert.deepEqual(slept.body, { ok: true });
|
||||
assert.equal(archivedAt("sess-sleep"), null);
|
||||
|
||||
run.run("agenthub-lane-9-2", "sess-stop", TMP);
|
||||
const stopped = await fetchJson("/api/run/agenthub-lane-9-2?archive=1", { method: "DELETE" });
|
||||
assert.equal(stopped.status, 200);
|
||||
assert.deepEqual(stopped.body, { ok: true, archived: "sess-stop" });
|
||||
assert.ok(archivedAt("sess-stop"));
|
||||
|
||||
// A pane with no known session (a shell) archives nothing.
|
||||
run.run("agenthub-lane-9-3", null, TMP);
|
||||
const shell = await fetchJson("/api/run/agenthub-lane-9-3?archive=1", { method: "DELETE" });
|
||||
assert.deepEqual(shell.body, { ok: true, archived: null });
|
||||
});
|
||||
|
||||
it("DELETE /:id returns 404 for a session that doesn't exist", async () => {
|
||||
tmux.__setExecImpl((args) => {
|
||||
if (args[0] === "has-session") {
|
||||
|
||||
Reference in New Issue
Block a user