Commit Graph

51 Commits

Author SHA1 Message Date
Benjamin Christopher Simmonds 4090e86ce8 sessions: show file icons in Session Files changes list (#324053)
The Session Files list in the Changes view did not render per-file-type icons because its list was placed outside the file-icon themeable scope. Add a file-icon themeable scope to the SessionFilesWidget root node and align its resource label rendering with ChangesTreeRenderer (strikethrough for deleted files). Also document the show-file-icons requirement in best-practices.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-02 13:45:59 +00:00
Benjamin Christopher Simmonds 6162ed61f7 sessions: tweak session files widget in changes view (#324034)
* sessions: tweak session files widget in changes view

- Use default ResourceLabels (no supportIcons) so file icons render
- Drop the resource path from the file description
- Only open a diff for modified files when the original has content
- Show A/M/D change decoration badges like the changes view
- Remove strikethrough for deleted files
- Add an Open File action to the row toolbar matching the changes view

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

* sessions: remove file count from session files header

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-02 11:41:32 +00:00
Benjamin Christopher Simmonds ebe1112161 best-practices: discourage getComputedStyle (#323091)
* best-practices: discourage getComputedStyle

Add guidance to avoid getComputedStyle and prefer hardcoding style values in TypeScript or setting a CSS variable via setProperty when shared across CSS rules.

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

* best-practices: clarify setProperty guidance

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-06-26 10:25:39 +00:00
Ben Villalobos fa88bce44d Document OSS NOTICE cutover (#322827) 2026-06-24 21:56:44 +00:00
BeniBenj 479a4986c9 CONTEXT KEYS CLEANUP 2026-06-24 19:51:11 +02:00
Sandeep Somavarapu 27725b9a63 sessions: resolve ${workspaceFolder} in agent-host tasks (#322629)
* sessions: resolve ${workspaceFolder} in agent-host tasks via IConfigurationResolverService

Agent-host worktree sessions build their task command line through
AgentHostSessionTaskRunner/resolveTaskCommand, which bypassed variable
resolution and sent ${workspaceFolder} to the terminal verbatim (causing
EROFS errors writing to a literal "${workspaceFolder}" path).

Expand variables using the workbench IConfigurationResolverService (already
registered in the Agents window), passing the session's worktree folder so
${workspaceFolder} resolves to the worktree rather than the Agents window's
own workspace. The resolver API is async, so the resolveTaskCommand pipeline
is now async; the hook is attached only when a cwd is known so variables are
left untouched otherwise.

Also adds the Agents-window worktree dev tasks (Install & Watch Client,
Run Client, Install & Watch) to .vscode/tasks.json, and tightens the
over-commenting guidance in the coding guidelines and sessions skill.

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

* sessions: address CCR feedback on agent-host variable resolution

- Resolve ${workspaceFolder} for remote hosts using the POSIX URI path
  instead of IConfigurationResolverService.resolveAsync (whose fsPath uses
  renderer-OS separators, wrong for a differently-OS'd remote host).
- Wrap the local resolveAsync call in try/catch so an unresolvable variable
  (e.g. ${command:}/${input:}) leaves the string unchanged rather than
  failing task dispatch.
- Fix the _getCwd comment to reference the real scheme (vscode-agent-host).
- Add a remote-host test asserting POSIX-path expansion and that the
  renderer resolver is not consulted.

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

* sessions: make agent-host task runner test platform-independent

The expansion test asserted against the resolver substituting URI.fsPath,
which on Windows yields backslash separators. Backslash is in
POSIX_NEEDS_QUOTING, so the expanded arg was strong-quoted on Windows and
the unquoted assertion failed. Substitute the POSIX URI path instead so the
test is deterministic across platforms.

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-06-23 16:11:39 -07:00
Ben Villalobos fd396ed9a2 OSS: Generate ThirdPartyNotices via Component Governance + Helper Scripts (#322410) 2026-06-22 21:30:20 +00:00
Alex Ross 28af4cff05 Remove API version concept (#321391)
* Remove API version concept

* CCR feedback
2026-06-16 10:18:47 +00:00
Alexandru Dima 678aeb1c87 Add agent instructions for opaque editor background and decorations (#321271)
Document two antipatterns fixed in #320913 so AI agents avoid them and
Copilot Code Reviews flag them:

- `.monaco-editor-background` must be opaque (never transparent), otherwise
  the reverse-rounded selection corners break and performance suffers.
- Editor highlights should use regular decorations with inlineClassName/className;
  registerDecorationType/setDecorationsByType is reserved for the ext host API.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-06-13 13:41:48 -04:00
Benjamin Christopher Simmonds ab7eee2311 Add best practices instructions file (#321160)
* Add best practices instructions file

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

* Potential fix for pull request finding

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-06-12 15:34:17 +00:00
mrleemurray 511a5b88d5 Add spacing and stroke token validation to stylelint for design-system area
Co-authored-by: Copilot <copilot@github.com>
2026-06-09 15:21:11 +01:00
mrleemurray 554dfed38d Add font-weight token validation to stylelint for design-system area
Co-authored-by: Copilot <copilot@github.com>
2026-06-09 15:08:32 +01:00
mrleemurray d62d0fe8b4 Add design tokens documentation for sizing, spacing, corner radius, font size, and stroke
Co-authored-by: Copilot <copilot@github.com>
2026-06-09 14:02:01 +01:00
Sandeep Somavarapu 01cb792966 sessions: unify model picker into core via provider getModels API (#319980)
Replace the per-provider model picker actions with a single sessions-core
ModelPicker that wraps the shared workbench ModelPickerActionItem. The core
picker reads the available models from the active session's provider via the
new ISessionsProvider.getModels API, remembers the last used model per provider
per session type, and applies the selection through ISessionsProvider.setModel.

Providers stay authoritative for their own behavior:
- getModels resolves model metadata per provider (local/CLI/agent-host filter
  registered language models; cloud synthesizes metadata from its option group).
- getModelPickerOptions lets each provider decide grouping, featured models and
  whether the Manage Models action is shown, instead of core branching on
  session type.
- onDidChangeModels lets the core picker refresh when models change.

Decouple the core picker from agent-host provider identity: the agent-host
mobile combined config picker now publishes the neutral
ActiveSessionUsesCombinedConfigPickerContext key, which the core picker uses to
gate itself out on phone layouts.

Add architecture guidelines: do not mirror runtime state into context keys,
delegate provider-specific decisions to the provider, and avoid large
mid-method comments.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-06-04 21:25:48 +02:00
Sandeep Somavarapu 558503ae2c sessions: restore visible sessions grid on reload (#319792)
After adopting the sessions grid we lost the previous "restore on reload" behaviour. Restore the full visible grid (order, sticky/pinned state and the active session, including the empty new-session slot) from persisted workspace state instead of only the last active session.

- Snapshot the live visibility model on save and rebuild it atomically via VisibleSessions.restoreGrid so multiple restored sessions appear in one shot without flicker; late-arriving sessions are inserted into their persisted position incrementally.
- Suppress the empty new-session view while restore runs (view-owned restoring flag + grid hide) so the composer does not flash before sessions are laid out.
- Show per-leaf load progress on each chat view's own ProgressBar (mirroring editor-group ScopedProgressIndicator) while its chat model loads.
- Move keyboard focus into the active session by observing ISessionsManagementService.activeSession from the part, guarded so it never steals focus from another surface (e.g. the sessions list).
- Use a dedicated restore cancellation token that is actually cancelled when the user opens a session, and bound provider waits with a timeout so a deleted session cannot keep restore (and its listeners) pending forever.
- Add a coding guideline forbidding lazy invokeFunction/accessor.get service resolution.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-06-03 19:55:19 +00:00
Sandeep Somavarapu 669ca441d2 Agents: session header command center and toolbar refactor (#319789)
* Agents: session header command center and toolbar refactor

Restructure the Agents window titlebar and session view header:

- Add a VS Code editor style command center to the titlebar showing the
  session kind icon, session title and workspace name. The session title
  truncates while the workspace name stays fully visible.
- Split the monolithic ChatCompositeBar into a dedicated SessionHeader
  (session identity, title, meta row and toolbars) and a tabs-only
  ChatCompositeBar (chat tab strip).
- Move the Open in VS Code and Run actions next to the session header,
  introducing menu ids as needed; keep terminal/run actions in place.
- Align the session header with the sessions list (status icon column +
  stacked title/meta) and show a folder/worktree/cloud icon before the
  workspace name.
- Add an architecture rule discouraging direct DOM traversal helpers
  (closest, etc.).

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

* Agents: update RunScriptContribution test for new menu location

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

* Agents: address PR review feedback

- sessionsTitleBarWidget: drop status/changes from the re-render autorun
  (the widget only displays title + workspace, so tracking the extra
  observables caused unnecessary DOM rebuilds).
- sessionHeader: guard the drag-start handler so drags don't initiate
  from inside the title-row toolbar or the meta-row inline toolbar,
  preventing button clicks from being swallowed by a session drag.
- chatCompositeBar: mark the tabs container as role="tablist" with an
  aria-label so screen readers announce it as a set of tabs.

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-06-03 19:35:20 +00:00
Sandeep Somavarapu 1f66fd7bd5 sessions: improve AI readiness of skill and instruction files (#316239)
sessions: improve AI readiness of skill and instructions

- Restructure SKILL.md: remove duplicated content, add mandatory
  pre-change reads (coding guidelines, source-code-organization),
  add 'When to read' column to spec table, make valid-layers-check
  mandatory, add common pitfalls section
- Enhance sessions.instructions.md: add architecture overview,
  internal layer diagram, core services table, key development
  patterns (menus, context keys, observables), and learnings section
- Remove window isolation references (not applicable)
- Remove Development Recipes from skill (already in SESSIONS.md)
- Add explicit 'Before Making Any Changes' mandatory reads block
  to ensure coverage in all harnesses (not just VS Code Copilot)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-13 10:07:38 -04:00
Sandeep Somavarapu a3d955d72a sessions: move providers to contrib/providers with ESLint layer rules and docs (#316227)
- Move copilotChatSessions, remoteAgentHost, and agentHost providers from
  contrib/ into a new contrib/providers/ subfolder for clearer separation
- Add ESLint layer rule 'contrib/providers/*/~' (before 'contrib/*/~') so
  sibling contrib folders cannot import directly from providers
- Update all entry points (sessions.common.main.ts, sessions.desktop.main.ts,
  sessions.web.main.ts) to reference new provider paths
- Port all upstream changes from origin/main to the new provider locations
- Add contrib/providers entry to build/lib/i18n.resources.json
- Rewrite docs: README.md, LAYOUT.md, LAYERS.md, SESSIONS.md, SKILL.md,
  sessions.instructions.md; add source-code-organization, coding-guidelines,
  and writing-tests instruction files; remove stale SESSIONS_PROVIDER.md and
  AGENTS_CHAT_WIDGET.md

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-13 12:14:40 +00:00
Johannes Rieken a492920c66 Add architecture documentation and working notes for esbuild-based build system (#314390)
- Introduced `buildNext.instructions.md` to provide comprehensive notes on the new build pipeline.
- Documented key learnings, including issues with comment stripping, authorization errors, and build-time placeholders.
- Explained integration with the old build system and outlined important fixes related to source maps and resource copying.
- Included testing instructions and future work items to address outstanding issues.
2026-05-05 17:37:22 +02:00
Osvaldo Ortega b48d6739c4 Agents web: Mobile host picker dropdown improvements (#312934)
* feat: replace host picker context menu with mobile-native bottom sheet on phone layout

Agent-Logs-Url: https://github.com/microsoft/vscode/sessions/c0ced124-328e-43c3-a95c-34c56f55a84d

Co-authored-by: osortega <48293249+osortega@users.noreply.github.com>

* fix: guard bottom sheet dismiss against double-invocation and stop event propagation from sheet

Agent-Logs-Url: https://github.com/microsoft/vscode/sessions/c0ced124-328e-43c3-a95c-34c56f55a84d

Co-authored-by: osortega <48293249+osortega@users.noreply.github.com>

* refactor: extract mobile host picker into MobileHostFilterActionViewItem

Move the bottom sheet UI from an inline phone-layout branch in the
desktop HostFilterActionViewItem into a proper mobile subclass in
browser/parts/mobile/, following the established mobile architecture:

- Create MobileHostFilterActionViewItem extending the desktop class,
  overriding _showMenu() to show a bottom sheet instead of a context menu
- Remove IsPhoneLayoutContext branching from the desktop component
- Move bottom sheet CSS from hostFilter.css to mobileChatShell.css
- Update hostFilter.contribution.ts to instantiate the mobile variant
  for the MobileTitleBarCenter menu registration
- Add Mobile Component Architecture rules to sessions.instructions.md

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

* fix: replace bottom sheet with dropdown anchored below trigger

The bottom sheet slid up from the bottom of the screen, far from the
picker trigger at the top, and had a transparent background. Replace
with a dropdown panel that:

- Anchors directly below the trigger element
- Has a solid background with border and shadow
- Animates in/out with a subtle fade + slide from above
- Uses 44px min-height items for touch targets
- Transparent backdrop for dismiss-on-tap without visual overlay

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

* fix: improve mobile host picker dropdown design

- Use agentsChatInput background color to match the chat input
- Add font-weight: normal to prevent bold text in items
- Add Gesture.addTarget + TouchEventType.Tap on each item button
  so taps register on iOS/touch devices (CLICK alone is unreliable)

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

* refactor: move host picker dropdown CSS to own component file

- Create media/hostPickerDropdown.css in mobile parts folder
- Move all host picker styles from mobileChatShell.css to dedicated component file
- Add CSS import in mobileHostFilterActionViewItem.ts
- Document CSS organization pattern in sessions.instructions.md

This follows the same pattern as regular VS Code parts where each component
owns its CSS in a media/ subfolder. Keeps mobileChatShell.css focused on
shell-level phone layout styles only.

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

* fix: use defined CSS theme variables for host picker dropdown

Replace undefined fallback variables with proper agentsChatInput theme tokens:
- background: var(--vscode-agentsChatInput-background)
- foreground: var(--vscode-agentsChatInput-foreground)
- border: var(--vscode-agentsChatInput-border)

These variables are registered in src/vs/sessions/common/theme.ts and
properly available in all themes.

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

* fix: use globally available CSS theme variables for host picker

Replace agentsChatInput variables (only available in .agent-sessions-workbench scope)
with globally available input and foreground variables since the backdrop is
rendered directly on body, outside the workbench scope.

- background: var(--vscode-input-background)
- foreground: var(--vscode-foreground)
- border: var(--vscode-input-border)

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

* fix: use inline styles from theme service for host picker

CSS variables aren't available in the body scope where the dropdown is rendered.
Instead, fetch theme colors via IThemeService and apply them as inline styles:

- Get theme colors at dropdown creation time
- Set backgroundColor, borderColor, foregroundColor via style attribute
- Apply hoverBackgroundColor and linkColor via event listeners
- Remove all CSS variable references

This ensures colors work in vscode.dev and all environments where CSS variables
may not be injected.

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

* fix: remove unused focusBorderColor variable

The focus border styling is handled by the CSS :focus-visible rule,
so the TypeScript variable is not needed.

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

* fix: render dropdown inside workbench container for CSS variables

The dropdown was appended to document.body, which is outside the
.monaco-workbench element where --vscode-* CSS custom properties
are defined. This caused all theme variables to be undefined.

Fix: query for the .monaco-workbench container and append the
backdrop there instead. This restores CSS variable inheritance
and moves all color declarations back to the CSS file where
they belong.

Also reverts the IThemeService inline-styles approach — colors
are now purely in hostPickerDropdown.css using standard CSS
variables.

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

* fix: center host picker dropdown and remove status text

1. Center the dropdown horizontally on screen using left: 50% +
   translateX(-50%) instead of anchoring to the trigger's left edge.
2. Remove the 'connecting…' / 'disconnected' status text from dropdown
   items — the titlebar connection icon already conveys this info, and
   the status text was causing the dropdown to extend beyond screen.
3. Clean up unused AgentHostFilterConnectionStatus import and status CSS.

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

* fix: include translateX(-50%) in dropdown animation keyframes

The entrance/exit animations were overriding the centering transform
during playback, causing the dropdown to appear right-aligned then
jump to center when the animation ended.

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

* fix: remove stray closing brace in mobileChatShell.css

Leftover from extracting host picker CSS into its own file.

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

* fix: address PR review comments

1. Fix dismiss race condition: guard the timeout callback so it only
   clears the dropdown if it still owns the current store, and register
   the timeout for disposal when the dropdown is reopened early.

2. Use correct ARIA pattern: switch from listbox/option to menu/menuitemradio
   which better matches the single-select interaction pattern.

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-04-28 00:24:51 +00:00
Peng Lyu 9932ad018d add touch tap+click guidance for custom trigger elements in Agents (#312001) 2026-04-22 21:26:35 -07:00
Peng Lyu c8249a6ec0 instructions: enhance touch & iOS compatibility guidelines for Agents window (#311281) 2026-04-20 00:58:12 +00:00
Alex Ross 8b5518b088 Show combination tool approval args (#308747) 2026-04-10 12:05:03 +02:00
Benjamin Pasero 17faef0d3c Sessions: Update naming (fix #306461) (#306922)
* Sessions: Update naming (fix #306461)

* .
2026-03-31 20:02:26 +00:00
Rob Lourens efb9c8bab8 Remove outdated docs/instructions for remote agent host (#304341) 2026-03-24 03:15:12 +00:00
Rob Lourens 146a2ea7e7 Human-readable remote agent host address (#303758) 2026-03-21 11:14:33 -07:00
Connor Peet b1781a18ba add instructions for agent host development 2026-03-13 10:10:17 -07:00
Ben Villalobos 4f6fa90167 Add Copilot review instructions for OSS license files (#300954) 2026-03-12 09:56:37 -07:00
Alexandru Dima 479f1b02bc Update Kusto instructions (#298447) 2026-02-28 16:11:45 +01:00
Harald Kirschner c760ee7f43 Update proposed API versioning instructions (#293291) 2026-02-22 05:03:57 +00:00
Benjamin Pasero b1009c98bb Sessions exploration (#294912) 2026-02-17 14:14:39 +00:00
Harald Kirschner 5dcb935e32 Add accessibility instructions for AI coding agents (#293290) 2026-02-06 10:05:47 -06:00
Henning Dieterichs ecb1e461bb Adds kusto exploration instructions & improves telemetry types (#293355) 2026-02-06 10:20:31 +00:00
Megan Rogge 665de62fd7 add accessibility instructions (#293227) 2026-02-05 16:58:41 -06:00
Benjamin Pasero 4c3d9c1edc modal editor - copilot feedback addressed (#293208) 2026-02-05 12:45:01 -08:00
Benjamin Pasero bf79fb66ac editors - introduce MODAL_GROUP for a modal editor part (#293020) 2026-02-05 11:33:36 +00:00
Rob Lourens e54a51e3f6 Add instructions for api version (#290005) 2026-01-23 20:03:13 +00:00
copilot-swe-agent[bot] d3e6f4a526 Update chat instructions with detailed AI feature gating rules
Co-authored-by: hediet <2931520+hediet@users.noreply.github.com>
2026-01-23 19:56:55 +01:00
Martin Aeschlimann 0f750bc552 clarify interactive and notebook instructions (#288849)
* clarify interactive and notebook instructions

* Apply suggestions from code review

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

---------

Co-authored-by: João Moreno <joaomoreno@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-19 17:17:15 +00:00
Martin Aeschlimann c13eb90a29 Load instructions on demand and don't add images (#288503)
* Load instructions on demand

* Don't collect image references
2026-01-16 23:09:12 +00:00
Henning Dieterichs 92e1dfc80f updates learnings (#287749) 2026-01-14 11:38:21 +00:00
Peng Lyu 87912ef73b Merge pull request #287166 from microsoft/rebornix/disgusted-jaguar
Update instructions/documentation for notebook and interactive window components
2026-01-12 13:45:33 -08:00
Rob Lourens 9d9e881649 Add instructions to ensure that new ai features are gated by the right context key (#286603)
* Add instructions to ensure that new ai features are gated by the right context key

* Move instructions to chat-specific
2026-01-10 19:12:35 +01:00
Connor Peet ada50f7949 Add some learning prompts and "send to edit session" for inline chat (#267519)
* wip

* update learnings

* clean 1

* clean 2

* commit update-instructions.prompt.md

* swap back to normal model after being in delegate

* adding generation

* wip

* wip

* update

---------

Co-authored-by: Henning Dieterichs <hdieterichs@microsoft.com>
Co-authored-by: Anthony Kim <anthonykim@microsoft.com>
Co-authored-by: SteVen Batten <sbatten@microsoft.com>
2025-09-19 23:26:52 +02:00
Henning Dieterichs bc494600f6 Adds instructions for disposable and observables 2025-09-17 10:08:31 -07:00
Harald Kirschner 8fa58499f2 Reduce inclusion of telemetry instructions (#263685) 2025-08-27 21:32:05 +00:00
Harald Kirschner 74a2c8640f Update instructions for builds (#262638)
* Add more validation instructions

* Fix validation instructions numbering

* Refined validation instructions
2025-08-25 08:50:22 +02:00
Megan Rogge 1c315969f4 allow agent to run compound tasks (#261347) 2025-08-13 18:02:05 +00:00
Benjamin Pasero d92e9ced85 Chat: Sort recent files above tools (#255950) (#256026)
* Chat: Sort recent files above tools (#255950)

* explain
2025-07-15 13:16:27 +00:00
Benjamin Pasero b50ac5ac92 Explore to support desktop notifications when in agent mode (#251621) (#255643) 2025-07-14 11:45:53 +00:00