You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
My contribution adds a new instruction, prompt, agent, skill, workflow, or canvas extension file in the correct directory.
The file follows the required naming convention.
The content is clearly structured and follows the example format.
I have tested my instructions, prompt, agent, skill, workflow, or canvas extension with GitHub Copilot.
I have run npm start and verified that README.md is up to date. (npm run build passes.)
I am targeting the main branch for this pull request.
Description
Updates the Artifact Explorer canvas (extensions/pr-artifact-explorer, plugin and skill) with:
Resilience: retry and full restart; background download/index/extract jobs that survive request/view changes; ZIP64 and bounded central-directory handling; soft limit prompts (download, indexing, decompression, idle) that never stop work, with raised limits checked against live progress. Integrity and disk guards stay hard.
Sharing and skill: unified targets (repo, PR, issue, artifact, route) for sharing links and the AI skill.
Browser emulator: localhost/HTTP(S) preview with mobile/tablet/desktop presets, viewport vs. visual zoom, history/refresh, natural-language navigation, real Playwright/Chromium screenshots and device emulation (explicit setup, no silent install), keyboard hints.
Docs tab: built-in usage docs.
Artifact preview: universal Preview/Raw toggle, native video, JUnit viewer, HTML Browser action, per-render race guards, theme sync, open in default browser.
UX: copy title / copy link buttons, #number links to GitHub, compact Back/Forward route history, full PR-detail skeleton.
Workflow re-run: confirmation-gated re-run of the originating Actions run (all or failed jobs), permission- and eligibility-aware, original actor/SHA warning.
Type of Contribution
Update to existing instruction, prompt, agent, plugin, skill, workflow, or canvas extension.
Additional Notes
Verification: extension suite 92/92 (--test-concurrency=2), plugin:validate, skill:validate, npm run build, and line-ending normalization pass. Re-run behavior was tested only against mocked GitHub APIs; no real CI was triggered.
Screenshots
Workflow runs view (default filters: Hide PR runs, Has artifacts).
By submitting this pull request, I confirm that my contribution abides by the Code of Conduct and will be licensed under the MIT License.
Parse JUnit times strictly, showing unknown timings as Not recorded.
Scope video error listener to its live preview and distinguish
network/integrity from decode failures.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 72ee5a2d-bcbb-4e0f-b86f-6ad56d4fc033
Per-term substring matching made 'Browser A' match every row via the 'a' term. Match the whole normalized phrase and cover it in the Chromium regression.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 72ee5a2d-bcbb-4e0f-b86f-6ad56d4fc033
<details class="docs-details"><summary>Set up Chromium if capture is unavailable</summary><p>Setup is explicit; Explorer does not install anything silently. Run <code>npm install</
🟠
package-exec-command
extensions/pr-artifact-explorer/capture.mjs
36
"2. Install the browser once: npx playwright-core install chromium",
Wait for an in-progress launch before capturing #browser. Otherwise close() called while #ensure() is launching sees null, returns successfully, and the launch can subsequently install a live browser/page after the canvas was closed, leaking the Chromium process.
Retry Windows rename when persisting job state
extensions/pr-artifact-explorer/jobs.mjs:313
Use the same bounded Windows rename retry as preference persistence (state.mjs:174-195). A transient EPERM/EBUSY here is swallowed into persistError with no retry, so recent job state may never reach disk and a restart cannot report an active job as interrupted.
Retry Windows atomic replacement during persistence
extensions/pr-artifact-explorer/limits.mjs:160
Persisting with a single rename omits the bounded Windows retry already used for preferences (state.mjs:174-195). A transient EPERM/EBUSY leaves persistError set and the accepted limit only in memory, so it is lost after restart. Reuse a shared atomic-replace helper with the established retries.
Align parser and browser zoom limits
extensions/pr-artifact-explorer/targets.mjs:157
The parser accepts zoom commands through 500%, but the browser implementation and public action schema cap zoom at 300%. Inputs such as zoom 500% therefore parse successfully and are silently clamped to 300% in the UI. Use one maximum consistently and update both error messages.
This issue also appears in the following locations of the same file:
line 254
line 262
line 266
Reject out-of-range PR and artifact IDs
extensions/pr-artifact-explorer/targets.mjs:225
Reject an out-of-range number instead of returning a target containing null. open PR 9007199254740993 in owner/repo currently reaches this branch, positive() returns null, and the result later becomes a /null route rather than an input error; the artifact branch has the same problem.
Support or remove the undocumented section parameter
extensions/pr-artifact-explorer/README.md:84
This advertises a section parameter that the canvas action neither declares nor reads; it always opens #/docs. Either add section to the action schema and route to the requested docs section, or document the action as parameterless.
Document only supported open_target commands
skills/pr-artifact-explorer/SKILL.md:25
The documented open_target examples overstate what the canvas action supports. The action handler only executes back/forward/refresh when a controlled browser is active; zoom 150%, tablet, 1280x720, and screenshot parse as commands but are rejected instead of being dispatched. Either route these through the corresponding browser actions or document those action names rather than presenting them as valid open_target input.
… runs UX pass and job panel layout
- Hide PR runs and Has artifacts are on by default (nopr=0 / artifacts=0 turn them off)
- Branch picker autocompletes real branches via /api/branches (default branch first, prefix search, dot-segment safe)
- Runs filters use the shared picker/toggle controls at one height; page shell renders
immediately with a skeleton, retryable inline errors, accessible status, cached counts
- Job progress panel gets a bounded width, header, status pill, byte/speed/ETA detail,
app-button styling, and toasts stack above it
- Docs, skill, tests updated
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
The picker emits workflow filenames that normalizeRunFilters rejects. For example, .github/workflows/nightly build.yml produces ref: "nightly build.yml", but selecting it silently drops the workflow filter and queries all repository runs. Check the same filename pattern here and fall back to the workflow ID when it does not match.
This regex backtracks heavily on unmatched backtick runs. In a bounded check, text followed by 8,192 backticks exceeded one second, while 2 MiB of ordinary text completed in 2 ms. Artifact Markdown is rendered synchronously on the canvas UI thread, so a small untrusted file can freeze the explorer despite the size cap. Replace this expression with linear-time delimiter scanning and add a regression for long unmatched runs.
Pagination limit hides results beyond the 990th run
extensions/pr-artifact-explorer/github.mjs:688
At 30 runs per page, this limit exposes only 990 results. A search with 995 results disables Older on page 33 and clamps page 34 back to 33, leaving five runs inaccessible. Define a 1,000-result limit, derive the page ceiling with Math.ceil, and use the result limit for reachable and capped. Update the boundary tests to cover the partial 34th page.
The default Latest scope deduplicated artifacts by name before the status
filter ran, so a retry hid the failing run's artifacts. Filters now apply
before deduplication and status counts reflect the same scope.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 72ee5a2d-bcbb-4e0f-b86f-6ad56d4fc033
Pagination cannot reach final results beyond the 990th run
extensions/pr-artifact-explorer/github.mjs:688
At 30 runs per page, this cap exposes only 990 results. For a search with 991–1,000 results, page 33 reports hasMore: false, and requests for page 34 are clamped to 33, so the final runs cannot be reached. Define a separate 1,000-result limit, derive the page count with Math.ceil(limit / RUNS_PER_PAGE), and use the result limit for reachable and capped. Update the pagination tests to cover the partial 34th page.
// Input is HTML-escaped first, so only markup produced here reaches the DOM.
function inline(text) {
const codes = [];
let out = esc(text).replace(/(`+)([\s\S]*?[^`])\1(?!`)/g, (_m, _t, code) => {
This branch has not been deployed
No deployments
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pull Request Checklist
npm startand verified thatREADME.mdis up to date. (npm run buildpasses.)mainbranch for this pull request.Description
Updates the Artifact Explorer canvas (
extensions/pr-artifact-explorer, plugin and skill) with:#numberlinks to GitHub, compact Back/Forward route history, full PR-detail skeleton.Type of Contribution
Additional Notes
Verification: extension suite 92/92 (
--test-concurrency=2),plugin:validate,skill:validate,npm run build, and line-ending normalization pass. Re-run behavior was tested only against mocked GitHub APIs; no real CI was triggered.Screenshots
Workflow runs view (default filters: Hide PR runs, Has artifacts).
By submitting this pull request, I confirm that my contribution abides by the Code of Conduct and will be licensed under the MIT License.