Commit Graph
98 Commits
Author SHA1 Message Date
Ryan Ward 3d2d90fd4e feat: inject global rules into AI system prompt and fix Rules UI seeding
- Load global rules (AIFact/AIMemory) from local CloudModel and inject
  them into the Bedrock/OpenAI system prompt as a '## Global Rules' section
  when memory is enabled.
- Fix rule seeding: always re-seed predefined rules when the CloudModel has
  none, regardless of the has_seeded_predefined_rules flag (handles case
  where flag was set but rules never persisted due to prior missing owner).
- Rename /context slash command to /copy-context: dumps the full context
  window (global rules, progressive summary, message history) to the
  clipboard for debugging.
2026-07-16 12:25:56 -05:00
Ryan Ward 66ef451115 Seed predefined rules at startup without requiring Warp auth
Previously, predefined rules (11 system-defined behavioral rules) were
only seeded when the user navigated to the Rules settings page, and
required a cloud-authenticated owner to create cloud objects.

Since Galaxy operates without Warp cloud auth:
1. personal_drive() now returns a synthetic local owner
   ('local-galaxy-user') when not authenticated, allowing cloud objects
   (rules, etc.) to be created and stored locally in SQLite.
2. seed_predefined_rules_if_needed() runs at app startup (after
   CloudModel and UpdateManager are initialized) to seed rules on
   first launch without requiring the user to visit settings.

Rules are now visible in Galaxy Drive > Rules on first launch.
2026-07-16 10:56:22 -05:00
Ryan Ward 5a5977d35d Use LiteLLM /model/info for accurate model metadata discovery
The previous implementation only used the standard OpenAI /models
endpoint which often lacks context window and capability metadata,
causing a blind 200K fallback for all models.

Now fetch_openai_models_from_endpoint tries LiteLLM's /model/info
endpoint first, which returns rich metadata:
- max_input_tokens (e.g. 1,000,000 for Sonnet 4.6)
- max_output_tokens (e.g. 128,000 for max models)
- supports_vision
- supports_function_calling
- underlying model path (for provider detection)

Falls back to /models if /model/info is unavailable (e.g. non-LiteLLM
OpenAI-compatible endpoints).

This ensures the model picker and context window configuration reflect
the actual capabilities of the configured models.
2026-07-16 10:42:19 -05:00
Ryan Ward f1c289fe85 Remove all Warp server AI model fetching — use only local providers
Galaxy should never call Warp's cloud API for AI. This is a policy
requirement. All model availability is now determined exclusively by
locally configured providers (Bedrock and/or OpenAI/LiteLLM).

Changes:
- Disable refresh_authed_models, refresh_public_models, refresh_available_models
  (now no-ops with debug log)
- Disable on_server_update and update_feature_model_choices
- Disable get_cached_models (no stale server models restored from cache)
- Replace ModelsByFeature::default() with minimal placeholder that gets
  stripped by inject_bedrock_models/inject_openai_models
- Make inject_bedrock_models strip Unknown placeholders unconditionally
- Make default_llm_info() return a static fallback instead of panicking
  when no models are configured (prevents null reference crashes)
- Add has_any_provider_models() for UI to check provider availability
- Make ProviderConfig::None return a user-friendly error instead of
  calling Warp's cloud API (the previous fallback behavior)

Safety: if no providers are enabled, the system gracefully returns an
error message rather than crashing or silently calling Warp's servers.
2026-07-16 10:26:24 -05:00
Ryan Ward 345057a147 Fix: Ensure OpenAI requests end with user message for Bedrock/LiteLLM compatibility
When LiteLLM routes OpenAI-format requests to AWS Bedrock, the provider
rejects conversations ending with an assistant message with:
'This model does not support assistant message prefill.'

Add ensure_ends_with_user_message() as the final sanitization step in
sanitize_messages_for_openai(). If the conversation ends with an assistant
message, a minimal 'Continue.' user message is appended.

Updated tests to reflect the new behavior and added dedicated tests for
the new function.
2026-07-16 09:55:38 -05:00
Ryan Ward e9a9a4c30f Bump version to 2.0.0 and upload install-galaxy.sh in deploy script
- Update version from 1.6.3 to 2.0.0 in app/Cargo.toml and Cargo.lock
- Add install-galaxy.sh upload step to build-and-deploy-hermes script
- Include pending AI provider and agent changes
2026-07-15 16:17:13 -05:00
Ryan Ward 40bd86f662 Adding logging when we crash in bedrock, adding open AI request translator changes and AI page settings cleanup 2026-07-08 15:19:51 -05:00
rkw6086 3769646ca6 Fix cursor focus and selection in input box, add AWS env var warning box, and remove AWS Bedrock login banner 2026-07-02 14:54:15 -05:00
Ryan Ward 4770ac06b5 first pass of merging in warp (doesn't build) 2026-07-01 16:08:58 -05:00
Ryan Ward 2f64909469 Update AI agent, settings, and terminal modules
- Update AI agent conversation, task, and prompt builder
- Add notebooks execution module for blocklist actions
- Update Bedrock and OpenAI response translators
- Refactor settings modules across multiple subsystems
- Update terminal settings and window settings
- Update drive settings and search command settings
2026-07-01 14:30:04 -05:00
Ryan WardandClaude Opus 4.6 57c843d1de Fix CLI subagent task routing, Ctrl+C cancellation, and session restore reliability
- Construct ServerTask directly for Bedrock CLI subagents so messages route
  correctly without needing a server CreateTask upgrade
- Handle CliAgentUserQuery input type in both request translators, including
  running command context and terminal output
- Add force_cancel_all_streaming_exchanges fallback for when Ctrl+C finds no
  in-flight streams (stuck subagent / unexpected stream end)
- Cancel active conversation on Ctrl+C in agent view compose state
- Skip agent view entry when agent is tagged-in for a running command
- Set root_task_id on Bedrock requests for proper optimistic task upgrade
- Persist app state on will_terminate to avoid losing sessions
- Trust persisted CWD without is_dir() recheck (fixes network mount restore)
- Log warning instead of silently dropping tabs with unreadable root nodes

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-25 08:43:10 -05:00
Ryan Ward 148c97eab1 Fix View Options popup not responding to clicks
Remove duplicate popup rendering from render_vertical_tabs_panel.
The popup was rendered both inside the panel's stack AND at the
workspace level in a Dismiss overlay, causing event dispatch conflicts
due to shared MouseStateHandle instances between the two identical
popup trees.
2026-06-23 15:28:59 -05:00
Ryan Ward 5ea378a38d Add OpenAI/LiteLLM provider support with settings UI
- Add openai/ provider module with translator, client, convert, request/response translators
- Add shared provider/ types (ConversationMessage, MessageRole, ProviderConfig enum)
- Wire OpenAI-compatible provider dispatch alongside Bedrock in response_stream.rs
- Add ai.openai.* settings (enabled, base_url, api_key, model, models)
- Add OpenAI/LiteLLM settings page with model fetch, picker, and config UI
- Extend model menu items and llms.rs to surface LiteLLM models
- Update WARP.md with OpenAI provider architecture docs
2026-06-17 14:14:40 -05:00
Ryan WardandClaude Opus 4.6 59cfd0e2f5 Bump version to 1.6.3
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-12 14:17:06 -05:00
Ryan Ward 4ba9706e35 Bump version to 1.6.2 2026-06-04 16:07:24 -05:00
Ryan WardandClaude Opus 4.6 840bc4d244 Bump version to 1.6.1
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-04 09:57:18 -05:00
Ryan WardandClaude Opus 4.6 a309006458 Implement local sub-agent execution for OSS/Bedrock mode
- Fix start_agent tool mapping: route to Tool::StartAgent instead of
  dead-end Tool::Subagent so tool calls become executable actions
- Block start_agent until child finishes: parent waits for child
  conversation to complete and receives full output as tool result
- Fix tool result delivery: add StartAgent/StartAgentV2 cases to
  extract_tool_result_content so the model actually sees agent output
- Support parallel agent spawning: change StartAgent action phase from
  Serial to Parallel, and track multiple pending agents via Vec
- Mark child conversations as Success on EndTurn: emit
  ConversationStatus::Success when a child stream ends with no actions
- Skip orchestration SSE in local mode: prevent app freeze from trying
  to connect to non-existent server
- Remove send_message_to_agent and suggest_next_prompt from tool list:
  these require server infrastructure that doesn't exist in OSS mode
- Add "Waiting for sub-agents..." status message while agents process
- Fix child agent pane close: actually dismiss instead of re-hiding,
  track dismissed IDs to prevent re-creation on restart
- Fix cache_miss_tokens calculation and show per-block cache stats
- Add [tool-debug] logging throughout tool invocation pipeline

Bump version to 1.6.0.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-03 13:29:09 -05:00
Ryan WardandClaude Opus 4.6 17ecf67970 Enable DOGFOOD_FLAGS for OSS and add fix-it suggestion for failed commands
Two changes addressing agent context visibility and error recovery:

1. Enable DOGFOOD_FLAGS in oss.rs — this activates AgentViewBlockContext,
   which auto-attaches user-executed command output (stdout/stderr/exit code)
   to the AI conversation context. Previously the LLM was blind to any
   commands the user ran via `!` prefix in agent view.

2. Add instant "Fix this error" prompt suggestion when a user-run command
   fails (non-zero exit) in agent view. This lets users hand off errors to
   the agent with one click instead of manually copy-pasting output.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-03 01:47:36 -05:00
Ryan WardandClaude Opus 4.6 9e11c91a6e Replace per-block usage footer with persistent input status bar
Move token/cache/cost metrics from the expandable per-block usage button
into a persistent status bar rendered in the agent input area. This gives
always-visible feedback without requiring user interaction.

- Add render_session_status_bar to agent input showing context %, cache
  hit rate, and cost
- Persist cache/cost totals in ConversationUsageMetadata for session restore
- Remove render_usage_button, ToggleIsUsageFooterExpanded action, and
  UsageFooterToggled event
- Remove "Request tokens: --" debug block footer overlay
- Fix has_footer() to return false so blocks no longer reserve phantom
  footer space (root cause of padding/margin issue)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-03 00:17:34 -05:00
Ryan WardandClaude Opus 4.6 259244863b Suppress dead_code and unused_imports warnings in prompt_builder module
Module is scaffolded but not yet wired into callers — allow dead code
at the module level until integration is complete.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-01 15:56:23 -05:00
Ryan WardandClaude Opus 4.6 a3eb0fca0c Merge resolve: add prompt_builder, compact_summary support, and caching config
Resolves merge conflicts integrating compact_summary parameter into
build_converse_request alongside the existing CachingConfig approach.
Adds the new prompt_builder module for structured prompt construction.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-01 15:34:37 -05:00
Ryan Ward 54e4e8abf5 Additional cleanup of caching 2026-06-01 15:21:03 -05:00
Josh Woodcock 3762e86185 add missing ttl setting and filter dropdown models when 1hr ttl is set in settings.json 2026-06-01 15:13:14 -05:00
Ryan Ward 7f039d2c08 Applying additional cache fixes 2026-06-01 13:02:22 -05:00
Josh Woodcock d862bbb048 load and show claude settings including 1hr cache settings 2026-06-01 13:01:57 -05:00
Ryan WardandClaude Opus 4.6 8c0a2d67cb Bump version to 1.5.6
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-28 16:03:44 -05:00
Ryan Ward 5a79ed0aa7 Add IntelliSense with documentation panel to code editor 2026-05-28 16:00:45 -05:00
Ryan WardandClaude Opus 4.6 6792039df4 Bump version to 1.5.5
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-28 12:38:56 -05:00
Josh Woodcock 8bdd79c089 Merge branch 'master' into show-thinking-timer 2026-05-28 12:23:35 -05:00
Josh Woodcock 4e678de9a8 show thinking timer 2026-05-28 12:08:38 -05:00
Ryan WardandClaude Opus 4.6 34ac95bbd0 Bump version to 1.5.4
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-28 11:03:56 -05:00
Ryan WardandClaude Opus 4.6 d9bdafed0a v1.5.4: Remove unused feature flags and oz-platform skill
Remove cloud/sharing feature flags (viewing_shared_sessions, shared_with_me,
session_sharing_acls, shared_block_title_generation, agent_shared_sessions,
cloud_environments, cloud_conversations, etc.) and classic_completions flags.
Remove oz-platform skill. Update blocklist views and drive index.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-28 11:02:41 -05:00
Josh Woodcock 5ce4134ba0 Merge branch 'master' into autorefresh-bedrock-tokens 2026-05-27 13:31:36 -05:00
Josh Woodcock 0e72791483 auto refresh expired bedrock tokens 2026-05-27 13:29:11 -05:00
Ryan WardandClaude Opus 4.6 a15b817a4f v1.5.3: Add diff summary titles and is_error propagation
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-27 11:44:17 -05:00
Ryan WardandClaude Opus 4.6 8e2fce08aa Add summary/title to apply_file_diffs tool and propagate is_error on tool results
The apply_file_diffs tool now includes a required "summary" field so the
model provides a brief description of edits. This surfaces as the title
on the diff panel instead of showing only +/- line counts.

Also propagates is_error from tool result content back to the model so it
can distinguish failed tool calls from successful ones.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-27 11:29:50 -05:00
Josh Woodcock 0f969f4389 fix no use of apply_file_diffs tool 2026-05-26 16:31:54 -05:00
Ryan WardandClaude Opus 4.6 a0568508ea v1.5.1: Remove dead code and fix all build warnings
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-21 15:04:59 -05:00
Ryan WardandClaude Opus 4.6 f278e53b7e v1.5.0: Inline subagent panels, Bedrock compaction fixes, context window debug view
New features:
- Inline subagent panels with expand/collapse and click-to-toggle
- /context slash command to inspect bedrock_message_history
- Child-to-parent question routing with auto-answer for subagents
- Subagent token usage and cost merging into parent conversation
- Randomized session-colored user avatar silhouettes

Bug fixes:
- Bedrock: remove orphaned tool_results after compaction
- Bedrock: self-healing exchange lookup for out-of-order streaming
- Bedrock: append continuation prompt when conversation ends with assistant
- Duration sanity check rejects epoch-time artifacts from session restore
- Cache hit rate calculation uses actual total_input_tokens
- Hide "Time to first token" when value is zero

Improvements:
- Demote verbose bedrock-debug logs to debug/trace levels
- Bedrock tool usage counting falls back to action counting
- Remove logout menu item from workspace menu

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-21 14:30:04 -05:00
Ryan WardandClaude Opus 4.6 6f54e2cb30 v1.4.0: Auto-compact streaming, Bedrock summarization support, subagent orchestration, and Galaxy rebrand continuation
Major features:
- Auto-compact: triggers conversation summarization when context window >= 85%,
  compacts Bedrock message history to a summary pair, and tracks live context tokens
- Bedrock summarization: plumbs `is_summarization` flag through translator/client/response
  pipeline, handles SummarizeConversation input type, and marks `summarized` in metadata
- Session restore: rebuilds bedrock_message_history from persisted task messages via
  newly-public `convert_proto_message`, preventing empty history on reconnect
- Subagent orchestration: adds SubagentQuestion/Answer/CompletionSummary event types,
  parent-child question routing with depth limits, retry counting, and drain methods
- Summarization UI: inline SummarizationView in AI blocks with progress/finished states

Refactors:
- Rename WarpTheme → GalaxyTheme across ~100 files (rebrand continuation)
- Rename warp_home_config_dir → galaxy_home_config_dir and related path functions
- Predefined rules: replace "System Defined Rule #N" with descriptive names
  (e.g. "Correctness Over Speed", "Never Guess") and add lookup helpers
- Usage view: replace cumulative input/output token display with live context tokens,
  cache hit rate calculation, and separate cache read/write stats
- Telemetry: remove verbose doc comments, simplify trait definitions
- Facts view: simplify delete permission check (always allow local deletion)
- Remove warp_managed_paths_watcher.rs (dead code)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-21 11:59:37 -05:00
Ryan WardandClaude Opus 4.6 eaa2ddc75e v1.3.0: Bedrock translator refactor, usage metrics, session restore fixes, and predefined rules
Major changes:

- **Bedrock translator architecture**: Extract orchestration logic from `impl.rs` into
  a dedicated `translator.rs` module. Rename `convert_request.rs` → `request_translator.rs`
  and `stream.rs` → `response_translator.rs` for clarity. Remove `tool_docs.rs` (inlined).
  Remove `fallback_to_warp` setting and server fallback path — Bedrock is now the sole backend.

- **Unknown tool handling**: The response translator now detects hallucinated/unknown tool
  calls from the model and synthesizes error tool_results so the conversation doesn't
  deadlock waiting for a result that will never come.

- **Usage display overhaul**: Replace credit-based usage display with detailed token metrics
  showing context window %, cache hit rate (read/write/miss), and estimated cost in dollars.
  Add `total_input_tokens`, `total_cache_read_tokens`, `total_cache_write_tokens`, and
  `cache_miss_tokens` accessors to `AIConversation`.

- **Predefined rules system**: Add `predefined_rules.rs` with 11 system-defined behavioral
  rules that are auto-seeded on first launch. Add "Add Predefined Rules" button to the
  Rules UI for re-adding them later. Track seeding state via `has_seeded_predefined_rules`
  setting.

- **Session restore improvements**: Rename database file from `warp.sqlite` to
  `galaxy.sqlite` with automatic migration from both same-directory and state_dir legacy
  paths. Improve CWD persistence by falling back to `session_startup_path` for agent-mode
  and fresh tabs. Add extensive session-save/restore logging.

- **Shell bootstrap rebrand**: Rename `WARP_INITIAL_WORKING_DIR` environment variable to
  `GALAXY_INITIAL_WORKING_DIR` across bash, zsh, and fish bootstrap scripts.

- **Model defaults**: Change default Bedrock model from Opus 4.7 to Opus 4.6.
  Add `context_window_for_model()` helper with model-aware context sizes.
  Remove `is_bedrock_model()` (no longer needed without server fallback).

- **User query persistence**: The response translator now emits a `UserQuery` proto message
  at stream start so the user's prompt persists across sessions for conversation titles.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-20 15:15:28 -05:00
Ryan WardandClaude Opus 4.6 ec99146ccc v1.2.1: UX fixes for tool display, shell access, and session restore
- Show "File changes" label on collapsed code diff views when no title
- Reinforce shell command availability in agent system prompt
- Persist working directory for agent/viewer panes on session save
- Remove unused make_nsstring import

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-19 13:29:38 -05:00
Ryan Ward 1526a7df7e fix: gate Error_*.txt snapshots behind GALAXY_BEDROCK_DIAGNOSTICS env var
Previously, Bedrock error snapshots were unconditionally written to disk
on any API or stream failure. Now they are only written when
GALAXY_BEDROCK_DIAGNOSTICS=1 is set, consistent with the rest of the
diagnostic logging.

Bumps version to 1.2.1.
2026-05-19 13:06:01 -05:00
Ryan WardandClaude Opus 4.6 53914688c0 v1.2.0: Fix app icons and DockTilePlugin rename
- Rename WarpDockTilePlugin to GalaxyDockTilePlugin
- Fix runtime icon switching to load from compiled-in assets
- Add NSDockTilePlugIn key to embedded Info.plist
- Replace all channel icons with padded Galaxy variants
- Update build.rs references for renamed plugin
- No longer requires post-bundle steps for icon switching
- Bump version to 1.2.0

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-19 12:39:43 -05:00
Ryan WardandClaude Opus 4.6 ccc67e6a33 Rebrand Warp to Galaxy v1.1.0
- Rename all UI-facing "Warp" references to "Galaxy"
- Rename "Warpify" to "Wormhole" throughout the UI
- Replace app icons with 5 new Galaxy-branded variants
- Update About page to show selected app icon dynamically
- Rephrase Privacy page for Bedrock context
- Remove "Fallback to Warp server" toggle from Bedrock settings
- Widen model selector dropdowns in profile editor (480px)
- Update TERM_PROGRAM to "GalaxyTerminal"
- Bump version to 1.1.0

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-19 11:21:44 -05:00
Ryan WardandClaude Opus 4.6 99159184cb Add LSP rename (Phase 3) and update AGENTS.md with future work
- F2 keybinding triggers prepareRename at cursor
- Shows inline text input pre-filled with current symbol name
- Enter confirms and applies workspace edits across all occurrences
- Escape cancels the rename
- Full flow: prepareRename → input → rename → apply edits
- AGENTS.md: document inline token/cache/cost stats feature idea
- AGENTS.md: document rename implementation for reference

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-18 16:44:30 -05:00
Ryan WardandClaude Opus 4.6 940c3b5dff Clean build: remove all dead code and fix warnings
- Remove unused fields (trigger_offset on Requesting, is_incomplete)
- Remove unused methods (selected_item, has_actions, is_menu_open,
  close_menu, move_selection, confirm_code_action, apply_workspace_edit)
- Remove unused import (Shrinkable in signature_help)
- Remove all #[allow(dead_code)] annotations
- Add build standards to AGENTS.md: zero warnings, zero errors required

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-18 16:26:17 -05:00
Ryan WardandClaude Opus 4.6 6f7d4757a2 Add signature help (Phase 4): parameter hints on function calls
- SignatureHelpState: None → Loading → Showing
- Triggers on '(' and ',' characters, dismisses on ')'
- Renders tooltip above cursor with active parameter highlighted
- Active parameter shown in warning color (bold yellow/orange)
- Includes documentation display when available from LSP
- Dismissed on Escape along with other LSP overlays

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-18 16:18:50 -05:00
Ryan WardandClaude Opus 4.6 331fbeeb18 Add code actions (Phase 2): quick fixes and refactorings via LSP
- CodeActionsState machine: Idle → Requesting → Available (with menu)
- 200ms debounced fetch on cursor/selection change
- Cmd+. opens the code actions menu
- Menu renders as positioned overlay with action titles and kind labels
- apply_workspace_edit helper applies LSP WorkspaceEdits to the editor
- Wired into SelectionEnd event for automatic background fetching

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-18 16:16:34 -05:00
Ryan WardandClaude Opus 4.6 d421b9583f Wire up completion keyboard navigation and add AGENTS.md
- Tab/Enter confirms the selected completion item
- Up/Down arrows navigate the completion menu
- Escape dismisses the menu (via existing dismiss_lsp_overlays)
- Editor intercepts keys via completion_intercept_keys flag when menu is showing
- Add AGENTS.md with LLM-powered predictive autocomplete idea

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-18 16:08:48 -05:00