feat: v2.5.4 — Query Explorer folded into Sessions, Windows picker and paths
- Sessions page tabs: Sessions · Events · Agents. QueryExplorer.tsx became AgentsTable.tsx (agents only — sessions and events already had tabs); /query redirects to /sessions?view=agents and leaves the sidebar. GET /api/query is unchanged and still answers all three entities. - Windows picker opens in front: -EncodedCommand script spends the hidden first ShowWindow that windowsHide gives the process, then brings the TopMost owner forward via AttachThreadInput (v2.5.3's owner was itself hidden). - Session page Resume/Fork/Open pane: owningLane and sessionWorktreeName match Windows folders (either separator), with a test.
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
/**
|
||||
* @file Tests that a session finds its workspace and its `claude --worktree`
|
||||
* name by folder on Windows paths (`D:\…`) as well as POSIX ones — the
|
||||
* transcript page's Resume/Fork/Open pane hid on Windows when they matched
|
||||
* on "/" only.
|
||||
* @author Nguyễn Ngọc Trí Vĩ <vinnt@smartgift.vn>
|
||||
*/
|
||||
|
||||
import { describe, it, expect } from "vitest";
|
||||
import type { Lane, Session } from "../../../lib/types";
|
||||
import { owningLane } from "../SessionResumeButton";
|
||||
import { sessionWorktreeName } from "../WorkspaceSessionList";
|
||||
|
||||
const lane = (id: number, cwd: string) => ({ id, cwd, tool: "claude" }) as Lane;
|
||||
|
||||
describe("session paths", () => {
|
||||
it("finds the deepest owning workspace with either separator", () => {
|
||||
const lanes = [lane(1, "D:\\Project"), lane(2, "D:\\Project\\Hobby\\"), lane(3, "/home/u/app")];
|
||||
expect(owningLane("D:\\Project\\Hobby\\tri-vi-portfolio", "claude", lanes)?.id).toBe(2);
|
||||
expect(owningLane("D:\\Project\\Hobby", "claude", lanes)?.id).toBe(2);
|
||||
expect(owningLane("D:\\ProjectX", "claude", lanes)).toBeNull();
|
||||
expect(owningLane("/home/u/app/src", "claude", lanes)?.id).toBe(3);
|
||||
});
|
||||
|
||||
it("reads a worktree name from a Windows or POSIX session folder", () => {
|
||||
const at = (cwd: string) => ({ cwd }) as Session;
|
||||
expect(
|
||||
sessionWorktreeName(lane(1, "D:\\repo"), at("D:\\repo\\.claude\\worktrees\\fix-a"))
|
||||
).toBe("fix-a");
|
||||
expect(sessionWorktreeName(lane(1, "/r"), at("/r/.claude/worktrees/fix-b/"))).toBe("fix-b");
|
||||
expect(sessionWorktreeName(lane(1, "D:\\repo"), at("D:\\repo\\"))).toBeNull();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user