Commit Graph
134 Commits
Author SHA1 Message Date
rkw6086 170a87e981 Improve AI provider model configuration 2026-08-09 15:48:15 -05:00
rkw6086 603437a24e Keep long-running monitors polling after prose turns 2026-08-06 23:50:51 -05:00
rkw6086 af520193a9 Remove account billing UI from AI settings 2026-08-06 16:40:48 -05:00
rkw6086 7ab381289e Allow local AI without account signup 2026-08-06 16:24:59 -05:00
rkw6086 a3c38c0f0b Cover command monitor timer states 2026-08-06 16:22:07 -05:00
rkw6086 fbbf90e2fb Prevent duplicate command monitor timers 2026-08-06 16:17:38 -05:00
rkw6086 57c7c54d5d Make Galaxy project presentation explicit 2026-08-06 16:13:48 -05:00
rkw6086 5353d0588e Fix built-in provider list state 2026-08-06 16:05:40 -05:00
rkw6086 3fda5d414b Add Rig native model providers 2026-08-06 15:03:00 -05:00
rkw6086 634ce7ba00 Complete local-first Rig provider migration 2026-08-06 11:37:28 -05:00
rkw6086 f850bae77c Complete local-first content migration slice 2026-08-05 16:24:04 -05:00
rkw6086 993abb96df ACP Wrap up 2026-08-05 08:10:41 -05:00
rkw6086 2015498831 ACP work 2026-08-05 01:08:26 -05:00
rkw6086 c321e17708 ACP work 2026-08-05 00:56:55 -05:00
rkw6086 b0ad07f6f2 Add unified models UI and Rig Bedrock runtime 2026-08-04 17:25:19 -05:00
rkw6086 a3c68e9c30 Complete Rig tool lifecycle migration 2026-08-04 16:00:20 -05:00
rkw6086 91d8bd0381 Migrate Rig tool flow to domain runtime 2026-08-04 14:14:51 -05:00
rkw6086 4c7270db8d feat: introduce Rig agent runtime migration 2026-08-04 02:15:18 -05:00
Ryan Ward d9cf0d8ae3 Fix agent run completion and follow-up handling
Ensure parallel tool results finish before follow-ups, preserve warping
status across exchanges, clean up streams before crosscheck reviews, and
restore terminal focus when conversations complete. Remove temporary
debug
logging.
2026-07-31 16:33:08 -05:00
Ryan Ward 7f4891ec7c First attempt to add ACP support 2026-07-31 11:09:32 -05:00
Ryan Ward 1a0aac51b6 Document process monitoring handoff
Add ACP discovery and configuration support
2026-07-30 11:53:33 -05:00
rkw6086 ad24374f6d Add ACP agent backend and terminal controls 2026-07-30 07:25:11 -05:00
rkw6086 dbfa8bcd48 Complete agent monitoring and Galaxy Control integration
- expose command-monitor conversations and preserve visible agent transcripts
- add bounded polling and a dedicated shell interrupt tool
- improve direct-provider images, skills, tool history, and usage handling
- package and brand Galaxy Control across releases, installers, persistence, and docs
2026-07-29 15:04:58 -05:00
Ryan Ward 100f1eff1c Actively monitor long-running shell processes 2026-07-28 21:54:33 -05:00
Ryan Ward 5c14241b91 Auto-monitor long-running commands with agent 2026-07-28 17:11:34 -05:00
Ryan Ward f70c828483 Bump version to 2.1.0 and update about page 2026-07-28 11:59:08 -05:00
Ryan Ward 5a8a35926e Classify provider budget errors as quota limits 2026-07-28 11:01:07 -05:00
rkw6086 a078287f4b Fix Local Agent Execution And Auth Checks
- Gate server requests on available credentials
- Run local child agents directly without a parent run ID
- Include command IDs in Bedrock context and recognize transfer tools
2026-07-28 10:43:59 -05:00
Ryan Ward 87e0c83e9e Remove Grok OAuth and legacy BYOK support 2026-07-28 02:30:22 -05:00
Ryan Ward 2faeed7ac5 Merge branch 'experiment/cross-check' of gitlab.com:samnasbo/shared/galaxy 2026-07-27 11:41:45 -05:00
Ryan Ward 309000a303 Checking in progress, though not fully working as expected 2026-07-27 11:41:20 -05:00
Ryan Ward 1650c8713c Merge branch 'master' of gitlab.com:samnasbo/shared/galaxy into experiment/cross-check
# Conflicts:
#	app/src/settings_view/mod.rs
2026-07-23 13:17:04 -05:00
Ryan Ward 856a6cd6f3 Remove Warp cloud features and OpenTelemetry
Settings cleanup:
- Remove billing_and_usage, main_page, referrals_page, show_blocks_view,
  environments_page, handoff_environment_creation_modal,
  custom_inference_modal, remove_custom_endpoint_confirmation_dialog,
  transfer_ownership_confirmation_modal, delete_environment_confirmation_dialog
- Remove SettingsSection variants: Account, BillingAndUsage, Referrals,
  SharedBlocks, CloudEnvironments, OzCloudAPIKeys
- Remove SettingsPageViewHandle variants: Main, BillingAndUsage, Referrals,
  CloudEnvironments, OzCloudAPIKeys, SharedBlocks
- Add Platform variant for PlatformPageView
- Gut custom inference endpoint UI from ai_page.rs
- Gut transfer ownership modal from teams_page.rs
- Stub environment_management_pane as dead code
- Remove create_discount_badge usage
- Remove handle_experiment_change call

OpenTelemetry removal:
- Remove opentelemetry, opentelemetry-http, opentelemetry-otlp,
  opentelemetry_sdk, tracing-opentelemetry dependencies
- Replace tracing module with no-op stub
- Delete native.rs and cloud_agent_auth.rs

Bug fixes (prior work):
- Fix apply_diffs() to use markdown_unescaped(ctx)
- Fix notebook executor AIDocumentId handling
- Fix margin/corner-radius consistency in requested_command.rs
- Add document tool handlers to extract_tool_result_content()
- Fix deprecated from_byte_stream in MCP SSE transport
- Fix Cargo.toml profile package spec
- Upgrade rust-toolchain to 1.94.1
2026-07-23 11:14:49 -05:00
Ryan Ward e5062ae432 feat: implement Crosscheck Work experiment
Add the 'Crosscheck Work' experiment to the Agents settings. When enabled,
a reviewer sub-agent is spawned after the main agent finishes a turn (with
no pending tool calls). The reviewer critiques the output using a dedicated
system prompt focused on correctness, simplicity, and code quality. If the
reviewer does not respond with 'LGTM!', its feedback is injected as a
synthetic user query back to the main agent, which must address it. This
loop continues until the reviewer approves or max iterations is reached.

Components:
- Feature flag: CrosscheckWork (enabled in DOGFOOD_FLAGS)
- Settings: agents.experiments.crosscheck_enabled,
  agents.experiments.crosscheck_model_id,
  agents.experiments.crosscheck_max_iterations
- Settings UI: new 'Experiments' subpage under Agents
- Crosscheck module: app/src/ai/crosscheck/ with prompt, reviewer model
- Controller integration: hooks into AfterStreamFinished when no actions
  are queued, triggers reviewer, handles feedback injection
- Provider support: OpenAI-compatible and Bedrock direct invocation
- Safety: max iteration guard, error handling, reset on new user query
2026-07-22 15:58:55 -05:00
Ryan Ward ca2cf6f8d6 Fix OpenAI/LiteLLM provider: sanitize tool IDs, parse cache stats, hide empty cache UI
- Sanitize tool_use_id values in OpenAI request conversion to match
  Bedrock's required pattern ^[a-zA-Z0-9_-]+$. Fixes 400 errors when
  LiteLLM proxies to Bedrock and tool IDs contain invalid characters.

- Parse cache usage stats from LiteLLM/OpenAI responses
  (prompt_tokens_details.cached_tokens, cache_read_input_tokens,
  cache_creation_input_tokens) and propagate to token usage tracking.

- Hide cache-o-meter in session status bar when provider doesn't report
  cache data (LiteLLM/OpenAI), instead of showing misleading 0% stats.

- Update cost estimation to account for cache read/write pricing tiers.
2026-07-20 13:36:11 -05:00
Ryan Ward 0db915712f fix: handle InvokeSkill in request_translator to prevent empty message error
When a skill was invoked on a clean slate (no conversation history),
the request sent to the AI provider contained only a system prompt
with zero user messages, causing Bedrock/LiteLLM to reject it with:
'Invalid Message bedrock requires at least one non-system message'

Root cause: extract_new_input_messages() had no handler for
Type::InvokeSkill, so it fell through to the _ => {} wildcard and
produced zero ConversationMessage results.

Fix adds InvokeSkill handling to three functions:
- extract_new_input_messages(): generates a User message with the
  skill name and content wrapped in <skill-instructions> tags
- extract_input_messages(): persists the InvokeSkill as a proper
  api::Message in task history for conversation continuity
- extract_user_query_text(): returns '/<skill-name>' for the
  UserQuery proto event used in conversation title generation
2026-07-16 12:59:51 -05:00
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