mirror of
https://github.com/github/awesome-copilot.git
synced 2026-08-26 10:45:03 +00:00
ca87445cb2
* Add Git Worktree Explorer canvas Add an interactive repository, worktree, branch, and commit graph with GitHub PR enrichment, safe inspection actions, and shared lane visualization. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 69dd5824-7094-4b82-8cfa-83c2fbe53307 * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * Address review feedback for Git Worktree Explorer Security - Quote copied shell commands (git -C / git log) with shell-safe single quoting and --end-of-options via new public/shell-quote.mjs - Move repository path into the untrusted data block of the commit Ask Copilot prompt Performance - Compute branch divergence with a single `git for-each-ref %(ahead-behind:...)` query (Git 2.41+), falling back to rev-list with bounded concurrency (8) instead of one process per branch - Drop the unused `git show --stat` summary from commit details Correctness - Only attach same-repository pull requests to local branches (filter isCrossRepository / headRepositoryOwner) - Resolve the default branch by full name or upstream instead of a suffix match (server + client) - Preserve already-loaded commit pages when a load-more request fails; only reset requests show the error state - Size the lane graph from the widest row (lanes + branch badges + text) and collapse >3 branch tips into a "+N more" badge Accessibility / UX - Add aria-pressed to view toggles and graph nodes; replace the unimplemented ARIA tree with group/button semantics - preventDefault on Space/Enter for branch badges so keyboard activation does not scroll - Use a lane palette that meets 3:1 contrast in both light and dark themes (tested) - Mobile inspector no longer auto-opens on snapshot load and gains a close button Tests: 19 -> 29 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 18350039-5e2b-40f0-b537-bc22cabcbb1b * Migrate git-worktree-explorer to plugins/ manifest layout Move the manifest from extensions/git-worktree-explorer/.github/plugin/plugin.json to plugins/git-worktree-explorer/plugin.json with README and copilot-extension.json, matching the extensions-container migration (#2334). Regenerated marketplace.json and docs. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 18350039-5e2b-40f0-b537-bc22cabcbb1b * Address follow-up review: shell-specific quoting and sibling row controls - quoteShellArg/formatShellCommand take a target shell; PowerShell doubles apostrophes while POSIX uses '\\''. app.js detects the platform and reports which syntax was copied. - Commit rows no longer nest branch badge buttons inside the row button; the row button and badges are sibling controls. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 18350039-5e2b-40f0-b537-bc22cabcbb1b * Make the closed mobile inspector inert and restore focus to the graph When the inspector overlay is dismissed on narrow viewports it is now marked inert/aria-hidden so its controls leave the tab order and accessibility tree, focus returns to the selected graph control, Escape closes it, and viewport changes re-sync the state. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 18350039-5e2b-40f0-b537-bc22cabcbb1b --------- Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Co-authored-by: Aaron Powell <me@aaron-powell.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Copilot-Session: 69dd5824-7094-4b82-8cfa-83c2fbe53307 Copilot-Session: 18350039-5e2b-40f0-b537-bc22cabcbb1b
58 lines
1.9 KiB
JavaScript
58 lines
1.9 KiB
JavaScript
import assert from "node:assert/strict";
|
|
import test from "node:test";
|
|
import { LANE_COLORS, layoutCommitGraph } from "./graph-layout.mjs";
|
|
|
|
function luminance(hex) {
|
|
const channels = [1, 3, 5].map((start) => Number.parseInt(hex.slice(start, start + 2), 16) / 255)
|
|
.map((value) => (value <= 0.03928 ? value / 12.92 : ((value + 0.055) / 1.055) ** 2.4));
|
|
return 0.2126 * channels[0] + 0.7152 * channels[1] + 0.0722 * channels[2];
|
|
}
|
|
|
|
function contrast(a, b) {
|
|
const [light, dark] = [luminance(a), luminance(b)].sort((x, y) => y - x);
|
|
return (light + 0.05) / (dark + 0.05);
|
|
}
|
|
|
|
test("lane colors meet 3:1 non-text contrast on light and dark backgrounds", () => {
|
|
for (const color of LANE_COLORS) {
|
|
assert.ok(contrast(color, "#ffffff") >= 3, `${color} on light: ${contrast(color, "#ffffff").toFixed(2)}`);
|
|
assert.ok(contrast(color, "#0d1117") >= 3, `${color} on dark: ${contrast(color, "#0d1117").toFixed(2)}`);
|
|
}
|
|
});
|
|
|
|
function commit(sha, parents = []) {
|
|
return { sha, parents };
|
|
}
|
|
|
|
test("lays out a linear history in one lane", () => {
|
|
const graph = layoutCommitGraph([
|
|
commit("c", ["b"]),
|
|
commit("b", ["a"]),
|
|
commit("a"),
|
|
]);
|
|
assert.equal(graph.maxLanes, 1);
|
|
assert.deepEqual(graph.rows.map((row) => row.laneIndex), [0, 0, 0]);
|
|
});
|
|
|
|
test("creates and rejoins a lane for merge parents", () => {
|
|
const graph = layoutCommitGraph([
|
|
commit("merge", ["main", "topic"]),
|
|
commit("topic", ["base"]),
|
|
commit("main", ["base"]),
|
|
commit("base"),
|
|
]);
|
|
assert.ok(graph.maxLanes >= 2);
|
|
assert.equal(graph.rows[0].transitions.filter((line) => line.kind === "merge-parent").length, 1);
|
|
assert.equal(graph.rows.at(-1).commit.sha, "base");
|
|
});
|
|
|
|
test("keeps independent branch tips in separate lanes", () => {
|
|
const graph = layoutCommitGraph([
|
|
commit("tip-a", ["base"]),
|
|
commit("tip-b", ["base"]),
|
|
commit("base"),
|
|
]);
|
|
assert.ok(graph.maxLanes >= 2);
|
|
assert.notEqual(graph.rows[0].color, graph.rows[1].color);
|
|
});
|