Commit Graph

160769 Commits

Author SHA1 Message Date
Lee Murray 2dc13a38e8 Style overrides: Adjust badge positioning in activity bar for better alignment (#324937)
* style: adjust badge positioning in activity bar for better alignment

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-07-08 14:54:21 +00:00
Ulugbek Abdullaev 39578f6a47 NES telemetry: add isForAnotherDocument to inlineCompletion.endOfLife for UI-accurate cursor-jump metrics (#324927)
* NES telemetry: add isForAnotherDocument to inlineCompletion.endOfLife event

The core inlineCompletion.endOfLife telemetry event already reports
UI-accurate, cursor-jump-model-agnostic fields (shown, reason,
viewKind, longDistanceHintVisible). However it could not distinguish a
long-distance same-document NES suggestion from one targeting another
document: the long distance hint is rendered for both cases.

Add an isForAnotherDocument flag, computed at render time via the
existing TextModelValueReference.targets() helper (edit target vs the
active editor's model) - the same notion that drives cross-document
long-distance hint visibility. This lets scorecards derive valid
Shown/Accepted/Rejected cursor-jump metrics for diff-patch models
without relying on the separate cursor-jump model telemetry.

Reuse targets() at the two remaining raw URI-comparison sites
(_getLongDistanceHintState and the long distance hint view) so the
cross-document determination lives in one place and cannot drift.

Also convert the shared mutable emptyViewData singleton into a factory
so per-suggestion view data (including the new isForAnotherDocument
flag) can no longer leak across suggestions.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* Trim isForAnotherDocument JSDoc to essentials

Move the scorecard consumption/derivation guidance to the PR description
and keep the in-code JSDoc to a short description of the field, per VS
Code JSDoc conventions and reviewer feedback.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-07-08 14:46:07 +00:00
Benjamin Christopher Simmonds 1ed41b05dd Render chat turn changes as a checkpoint-style summary (#324929)
* Render chat turn changes as a checkpoint-style summary

Restyle the chat turn pills part to match the checkpoint file changes summary: a 'N files changed +ins -del' header with a View All File Changes action, an optional inline 'preview <file>' action for the first previewable file, and an expandable list of changed files. Each markdown/HTML row in the list gets a labelless 'Preview' action that opens the file in the Markdown preview or the integrated browser.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix turn changes summary fixtures and address review feedback

- Stub IAgentHostService.getSubscription in chat fixtures so agent-host chat widgets (turn changes summary) render without crashing (the generic config chips lane opens a session subscription). - Use the canonical agent-host session scheme for the in-chat fixtures. - Reference CHANGES_SUMMARY_ELEMENT_HEIGHT from the list delegate. - Hide the preview separator in preview-only mode.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-08 14:42:41 +00:00
Lee Murray 18a1584c81 Style overrides: Add notifications and dialogs style overrides (#324933)
* Style overrides: Add notifications and dialogs module

* Style overrides: Adjust padding for dialog message container

* Style overrides: Remove redundant import of notificationsDialogs.css

---------

Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
2026-07-08 14:38:45 +00:00
Lee Murray 97ae143b76 Merge pull request #324918 from microsoft/mrleemurray/respective-amber-dove
Style override: Adjust sash positioning for collapsed horizontal panels
2026-07-08 15:31:40 +01:00
Lee Murray 4d6d755f08 Style overrides: Update padding and overflow styles in activity bar (#324942)
style: update padding and overflow properties in activity bar and padding styles

Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
Co-authored-by: Copilot <copilot@github.com>
2026-07-08 14:31:15 +00:00
Benjamin Christopher Simmonds 29a9bd2b67 sessions: make blocked-sessions dropdown responsive and centered (#324938)
Clamp the blocked-sessions context view width between the titlebar widget width (min 550px) and 90% of the window width, and center it on the command center box.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-08 14:29:26 +00:00
Ulugbek Abdullaev dee4b70111 NES: add suggestionLineDistanceToCursor to provideInlineEdit telemetry (#324931)
Record the signed line distance from the request cursor line to the
suggested edit's range start line (rangeStartLine - cursorLine, 0-based)
on the provideInlineEdit (NES) event. Only set when the suggestion targets
the active document, so both lines share the same coordinate space;
undefined otherwise. Emitted as a measurement so 0 (same line) is preserved.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-07-08 19:23:39 +05:00
Ulugbek Abdullaev 2971e962b5 nes: fix: too-narrow NES long-distance hint preview widget (#324930)
editor: floor NES long-distance hint width at minWidgetWidth

The placement logic (tryFindWidgetOutline) only accepts a location offering at least minWidgetWidth of horizontal space, but maxWidgetWidth was computed purely from the preview content width. For a cursor jump landing on a short or empty line, maxEditorWidth shrinks to just the gutter, collapsing the widget far below the space already reserved for it (observed: 725px reserved, rendered at the 150px flex floor). Floor maxWidgetWidth at layoutConstants.minWidgetWidth.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-07-08 14:22:06 +00:00
Lee Murray dec600584c Merge pull request #324240 from microsoft/mrleemurray/obliged-plum-stork
Style override: Refactor scrollbar size management and add slider options
2026-07-08 15:17:53 +01:00
Benjamin Christopher Simmonds 7bf3906a76 workbench: don't animate counter widget on first render (#324934)
The AnimatedCounterWidget animated its initial value because the first render (empty element -> first value) was treated like a value update. Add a _hasRendered flag so the first value is set directly without animation, and reset it when the count returns to undefined so a later value renders fresh.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-08 14:02:56 +00:00
Alex Ross c292a0aa80 API feedback for chat context proposal (#324913)
* API feedback for chat context proposal

* Fix issue (stale typescript?)

* CCR feedback
2026-07-08 13:47:07 +00:00
ulugbekna b5f8361526 NES: add suggestionLineDistanceToCursor to provideInlineEdit telemetry
Record the signed line distance from the request cursor line to the
suggested edit's range start line (rangeStartLine - cursorLine, 0-based)
on the provideInlineEdit (NES) event. Only set when the suggestion targets
the active document, so both lines share the same coordinate space;
undefined otherwise. Emitted as a measurement so 0 (same line) is preserved.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-07-08 15:37:43 +02:00
Ulugbek Abdullaev b8f0253990 Include editor headers in proxy models request (#324928)
Include editor headers in proxy models request; thread real editor info through chat-lib NES path

The proxy models service fetched `/models` with only an Authorization
header, bypassing the CAPIClient path that normally injects
Editor-Version / Editor-Plugin-Version. Chat-lib's NES provider also
resolved IEnvService to NullEnvService, so it would have emitted
placeholder (test) editor headers even after the fix.

- Refactor getEditorVersionHeaders() from an AbstractEnvService method
  into an exported free function taking any IEnvService, so it works for
  every environment (VS Code, chat-lib/CLI, tests), including impls that
  don't extend AbstractEnvService.
- Inject IEnvService into ProxyModelsService and add the editor headers
  to the /models fetch.
- Add required editorInfo / editorPluginInfo to INESProviderOptions and
  register a real IEnvService in the NES service builder, mirroring the
  completions path. Making them mandatory turns a missing value into a
  compile error instead of silently shipping test headers.
- Add unit tests covering the proxy models fetch headers and the
  end-to-end NES /models request headers.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-07-08 13:36:41 +00:00
Henning Dieterichs 8c7ce711c9 Fixes ci 2026-07-08 15:13:49 +02:00
Henning Dieterichs 82d7e530a1 Fixes #323297 2026-07-08 15:13:49 +02:00
Robo 913d5cccc1 feat: restore asar for node_modules (#324897) 2026-07-08 13:10:17 +00:00
Lee Murray f2291312cd Style overrides: Unify border color for editor and surrounding chrome elements (#324912)
style: unify border color for editor and surrounding chrome elements

Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
2026-07-08 13:03:07 +00:00
Lee Murray 76e833e72e Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-07-08 13:42:15 +01:00
Ladislau Szomoru f16275c785 Agents - new session should respect git.branchPrefix when creating a new branch for the worktree (#324909) 2026-07-08 12:15:07 +00:00
mrleemurray f7ecca9683 Style: Adjust sash positioning for collapsed horizontal panels
Co-authored-by: Copilot <copilot@github.com>
2026-07-08 12:24:29 +01:00
Ulugbek Abdullaev 953f1f48b8 NES: yield additive cursor-line edit first for multi-line patches (#324904)
* NES: add exp config to yield additive cursor-line edit first for multi-line patches

For diff-patch responses, the progressive ghost-text reveal emits the
cursor-line edit ASAP when it additively changes the cursor line, but
previously only for patches removing a single line. Extend it to fire for
multi-removed-line first patches behind a new experiment config
`chat.advanced.inlineEdits.xtabProvider.patchFastYieldLineWithCursorMultiLine`
(default off): the additive cursor-line change (removed[0] -> added[0]) is
yielded immediately and the remaining removed/added lines stream as a
continuation.

The early edit is a 1-for-1 additive replacement, so it causes no line shift
and the continuation (anchored at cursorLine+1 over the original document)
stays correctly anchored — the union is byte-identical to the original patch.

Multi-line reveal is restricted to duplicate-additions modes that preserve a
patch's removed range (Off / TrimDuplicate); DropPatch/DropAllRemaining could
skip the continuation after the early edit was already emitted. The early
reveal edit is additionally excluded from the duplicate-additions policy: it
carries no re-emitted context to trim, and running the policy on it could
spuriously trim its added line to empty and emit a cursor-line deletion when
that line coincides with the line below the cursor (cascade edits).

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* Refactor NES multi-line reveal handler for readability

Behavior-preserving cleanup of the diff-patch progressive-reveal logic in
xtabPatchResponseHandler.ts. No functional change (75/75 spec tests pass
unchanged).

- Extract named policy helpers: duplicateModePreservesRemovedRange,
  allowsMultiLineProgressiveReveal, and shouldApplyDuplicatePolicy (a type
  guard that preserves the Exclude<..., Off> narrowing for applyDuplicatePolicy).
- Add Patch.progressiveRevealParts() factory that owns the early/continuation
  split invariants; remove the misleading Patch.insertion helper (it built
  non-insertions for the multi-line case).
- Split isGhostTextPatch into early returns plus a named isEmptyCursorLineShiftUp
  predicate for the empty-cursor-line shift-up guard.
- Relocate long rationale comments into helper JSDoc so the streaming loop reads
  top-to-bottom.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-07-08 15:57:26 +05:00
Benjamin Christopher Simmonds 8aea5eabff sessions: open changes pill in a live multi-diff editor (#324908)
The chat input changes pill now opens a multi-diff editor identified by a special-scheme URI derived from the chat's resource, instead of running the whole-session Changes command.

A new LastTurnChangesMultiDiffSourceResolver resolves that URI to a live list of diffs for the files changed in the chat's last turn: each file's original side is the first origin resource found for it, and the modified side is the on-disk (live) resource, so the diffs update as further edits stream in.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-08 10:44:14 +00:00
Lee Murray a2b5f48611 Style overrides: Enhance layout of title actions and labels in Run and Debug view (#324905)
style: enhance title actions and labels for better layout in Run and Debug view

Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
Co-authored-by: Copilot <copilot@github.com>
2026-07-08 10:30:36 +00:00
Alex Ross 76819ce3c8 Add terminal test to chat scenario tests (#322940)
* Add terminal test to chat scenario tests

* More terminal test

* Try fix mac and linux

* Remove flakiness probe
2026-07-08 10:24:43 +00:00
Lee Murray e41eb0d2ea Style overrides: Add border-radius to floating panels content (#324898)
* style: add border-radius to floating panels content

* style: update border-radius for editor content in floating panels

---------

Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
2026-07-08 10:21:05 +00:00
Lee Murray 92c3301441 Fix active item indicator offsets in compact activity bar (#324896)
fix: remove top and left offsets from active item indicator in compact activity bar

Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
2026-07-08 09:44:10 +00:00
Sandeep Somavarapu b9c7cb0f15 sessions: scope changes Open File action to single-pane editor (#324891)
The Open File action in the session Changes per-file toolbar was gated
only on the 'changes-multi-diff-source' resource scheme, which is shared
by both the single-pane SessionChangesEditor and the generic
MultiDiffEditor fallback. The generic editor already contributes the
workbench GoToFileAction, so the session action was duplicated there.

Scope the action to the SessionChangesEditor via ActiveEditorContext so
it only appears in the single-pane editor and no longer leaks into the
multi-file diff editor.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-08 09:43:36 +00:00
Benjamin Christopher Simmonds be9eada6bb Merge pull request #324878 from microsoft/agents/fix-collapsed-view-spacing-issue
Fix collapsed view spacing issue in changes view
2026-07-08 11:24:31 +02:00
Sandeep Somavarapu 9021c1bc32 editor: fix Agents window multi-diff header overlap (#324889)
editor: fix multi-diff header path overlapping actions

The collapsed multi-diff entry header laid out [collapse] [.file-path]
[.actions] in a flex row, but .file-path did not clip and .actions could
shrink, so a long file path rendered underneath the trailing action
icons (screen cheese) in the Agents window Changes editor.

Clip .file-path (overflow: hidden), keep the titles shrinking with
ellipsis, and pin .actions with flex: 0 0 auto so the icons keep their
fixed width and are never overlapped.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-08 09:18:55 +00:00
Sandeep Somavarapu 4c675b3d1f add watch client transpile task to agents window (#324885) 2026-07-08 08:46:56 +00:00
Henning Dieterichs ba36eedd50 Add editor type dropdown to the breadcrumbs bar
Add a dropdown on the right-hand side of the breadcrumbs bar that shows
the current editor type and lets the user switch editors, set the
default, and (for diffs) open either side.

- Shown only when more than one editor can open the resource, so plain
  text files and exclusive editors (e.g. Hex) do not show it.
- Menu switches the active editor (via `reopenActiveEditorWith`), with a
  `Set Default` submenu that writes to `workbench.editorAssociations` or,
  for diffs, `workbench.diffEditorAssociations`. Diffs also offer
  `Open Original` / `Open Modified`.
- Extension editors show their source as `Label - Extension Name`;
  built-in editors show just their label. In a diff the default editor
  is labeled `Text Diff Editor`.
- Only on the dedicated breadcrumbs bar (tabbed mode), gated behind the
  experimental `breadcrumbs.showEditorType` setting (default `true`).
- Adds `IEditorResolverService.getConfiguredDefaultEditor` and a
  `forDiffEditor` flag on `updateUserAssociations`.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-08 10:41:11 +02:00
Benjamin Christopher Simmonds 9053cb21fb sessions: scope last-turn changes pill to the viewed chat (#324788)
Move `lastTurnChanges` from the session concept to the chat concept so a session with multiple chats tracks last-turn changes per chat. The changes pill above the chat input now reflects the viewed chat's last-turn changes and gates on that chat's status.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-08 10:39:12 +02:00
Alex Ross 6d740a98ae Add committing instructions (#324881) 2026-07-08 08:27:51 +00:00
Ladislau Szomoru 8c7f8a1409 Agents - remove the '--no-gpg-sign' flag when committing (#324880) 2026-07-08 08:19:48 +00:00
BeniBenj d0a79a8b74 Agent Host changes for agents/fix-collapsed-view-spacing-issue 2026-07-08 09:48:28 +02:00
Robo 926982696e Revert "feat: restore asar for node_modules" (#324875)
* Revert "fix: builtin resolution of electron modules via asar hook (#324861)"

This reverts commit 5928613aa1.

* Revert "fix: restrict asar esm hook resolution to app resources (#324851)"

This reverts commit 89bc3825bd.

* Revert "feat: restore asar for node_modules (#324084)"

This reverts commit c9dda3b36a.
2026-07-08 07:16:29 +00:00
Bhavya U 1a91b4555b Add Claude Sonnet 5 and Opus 4.8 prompt configurations (#324866)
- Add ClaudeSonnet5Prompt (Sonnet 4.6 base + scope/interface/effort append) via new renderAppendedInstructions hook, gated behind chat.claudeSonnet5Prompt.enabled
- Rename Claude 4.7 Opus prompt/config to 4.8, add completionDiscipline, plan/explain restraint, tool triggering and terminal run-once guidance; gated behind chat.claude48OpusPrompt.enabled
- Opus 4.7 now falls through to the generic optimized Opus prompt
2026-07-08 07:00:44 +00:00
Sandeep Somavarapu 9e31be7430 sessions: restore last active editor when switching sessions in single pane (#324871)
In the single side-pane layout, switching sessions restored the editor
working set but always left the Changes editor active instead of the
session's last active editor.

Two coupled causes:

1. The managed Changes tab opened as active (no `inactive`/`activation`),
   stealing active state from the working-set-restored editor. It now
   opens with `inactive: true` + `EditorActivation.PRESERVE` (matching the
   Files placeholder); the workbench still activates it when the group is
   empty, so the first-visit created-session default (Changes active) is
   preserved.

2. The outgoing session's working set was saved on the workspace-gated
   `activeSessionForWorkingSet` derive, which lags the raw active session.
   During that lag the single-pane managed-tabs sync async-closes the
   outgoing session's Changes tab, so the save captured the wrong active
   editor. The save now runs eagerly on the raw `activeSession` change,
   before those closes, capturing the real active editor; the gated derive
   only applies (which needs workspace readiness).

Adds a focused test asserting the save is decoupled from the gated apply.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-08 06:38:28 +00:00
Paul 7f476f25a8 Copilot SDK integration pipeline (#324625) 2026-07-07 23:09:56 -07:00
Rob Lourens 3c21cc61e4 Fix client tools hanging after Copilot SDK bump (1.0.6-preview) (#324869)
The SDK bump (#324667, @github/copilot-sdk 1.0.5 -> 1.0.6-preview.1)
reordered client-tool events so `permission.requested` now fires before
`tool.execution_start`. The agent host derives `ChatToolCallReady` from
the permission request, but the tool-call part is only created by
`ChatToolCallStart` (from `tool.execution_start`). With the new order the
ready arrived before the part existed, was dropped by the reducer, and
left the client tool stuck in `Streaming` -- the workbench never invoked
it and the parked SDK handler never resolved, hanging the turn. This hit
every client tool (browser tools, tasks, tool search, etc.).

Synthesize the `ChatToolCallStart` at permission time
(`_ensureClientToolCallStarted`) so the permission-derived ready lands on
an existing part, and skip the now-duplicate start when the real
`tool.execution_start` arrives. Restores the start-before-ready ordering
the downstream pipeline assumes.

For client tools inside subagents, the SDK's permission handler callback
drops the event's `agentId`, so recover it from the raw
`permission.requested` event (newly exposed as `onPermissionRequested` on
the session wrapper) and resolve the parent tool call. This routes the
synthesized start and the permission confirmation to the subagent
session, keeping the tool rendering in the right chat. Degrades
gracefully to the parent session if the mapping is missing -- never a
hang.

Adds unit regression tests for both the top-level and subagent orderings.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-08 06:03:39 +00:00
Ladislau Szomoru af32fc9c27 Editor - resource label should use test-overflow (#324819) 2026-07-08 05:48:31 +00:00
Zhichao Li 77017049f6 Merge pull request #324807 from microsoft/zhichli/restr2nd
agentHost: emit restricted conversation.messageText trajectory telemetry
2026-07-07 22:38:39 -07:00
Robo 5928613aa1 fix: builtin resolution of electron modules via asar hook (#324861) 2026-07-08 14:04:30 +09:00
Justin Chen 0cd1884c6a rehaul chat input padding and spacing and icons (#323977)
* rehaul chat input padding and spacing and icons

* some more fixes on collapsing

* address comments, fix claude

* fix auto not having copilot icon

* fix component fixtures

* fix: implement getModelConfiguration in chat fixture model service mock

Co-authored-by: justschen <54879025+justschen@users.noreply.github.com>

* fix tests

* Expand panel chat model picker before driving inline config in smoke test

The chat model-picker rehaul added a width-driven compact layout that hides
the inline model-config button (and model-name text) when the panel is narrow.
The panel chat's auxiliary bar defaults below the collapse threshold, so the
Chat Model Configuration smoke test could not find the config button.

Widen the auxiliary bar via its leading sash until the picker leaves compact
mode before interacting with the inline config UI.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-08 02:17:31 +00:00
Ben Villalobos 297ec446c0 [Cherry-Pick] customization UI: polish source folder pickers (#323527) (#324847) 2026-07-08 02:17:04 +00:00
Megan Rogge 9cc16766bf Show friendly voice names in voice selection setting (#324852)
Show friendly voice names in the voice selection setting

Use enumItemLabels so the `agents.voice.voice` dropdown displays
capitalized names (Victoria, Kevin, Maya, Daniel) instead of the raw
`*_neutral` keys, and drop "(neutral)" from the enum descriptions. The
underlying enum values sent to the backend are unchanged.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-08 02:17:01 +00:00
Tyler James Leonhardt dd668b452b Restrict sovereign-cloud config in untrusted workspaces (#324853)
Mark microsoft-sovereign-cloud.environment and .customEnvironment as
restrictedConfigurations so their workspace-level values are ignored in
untrusted workspaces. These settings feed the MSAL authority/endpoint
URLs, so an attacker-supplied folder must not be able to override them
in Restricted Mode.

This requires switching untrustedWorkspaces.supported from `true` to
`limited`, since restrictedConfigurations is only honored for `limited`
support (see configurationExtensionPoint.ts).

Fixes microsoft/vscode-internalbacklog#8355

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 01:30:20 +00:00
Robo 89bc3825bd fix: restrict asar esm hook resolution to app resources (#324851) 2026-07-08 00:36:24 +00:00
Logan Ramos 62784d67a3 Implement detailed context widget for AHP (#324840)
* Implement detailed context widget for AHP

* Address comments
2026-07-08 00:31:42 +00:00