Skip to content

dev#6325

Draft
LIghtJUNction wants to merge 314 commits intomasterfrom
dev
Draft

dev#6325
LIghtJUNction wants to merge 314 commits intomasterfrom
dev

Conversation

@LIghtJUNction
Copy link
Member

@LIghtJUNction LIghtJUNction commented Mar 15, 2026

This pull request introduces a new workflow for deploying the dashboard to GitHub Pages and makes significant improvements to the README.md for clarity, completeness, and consistency. It also includes minor formatting updates to the smoke test workflow and adds some convenience commands to .envrc.

Summary of changes:

  • Adds a GitHub Actions workflow for automated dashboard deployment.
  • Revamps the README.md with clearer descriptions, updated instructions, improved platform/model tables, and better contribution guidelines.
  • Minor workflow formatting and comment changes for consistency.

Dashboard Deployment Automation

  • Added .github/workflows/deploy-dashboard.yml to automate daily and manual dashboard builds and deployments to GitHub Pages, including build, artifact upload, and deployment steps.

Documentation Improvements

  • Major rewrite and expansion of README.md: clearer project description, improved feature list, updated deployment instructions, revised supported platforms/models tables, and enhanced contribution guidelines. [1] [2] [3] [4] [5]

Workflow Consistency

  • Updated .github/workflows/smoke_test.yml to use consistent YAML quoting, improved comments, and clarified Python version formatting. [1] [2] [3]

Developer Convenience

  • Added git pull and git status commands to .envrc for easier environment setup and status checking.

Copy link
Contributor

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @LIghtJUNction, your pull request is larger than the review limit of 150000 diff characters

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly refactors AstrBot's core architecture by modularizing tool management and improving the robustness of tool execution. It streamlines the integration of various tools, enhances the dashboard's configurability, and ensures more predictable behavior for LLM interactions. These changes contribute to a more maintainable, extensible, and user-friendly system.

Highlights

  • Modular Tool Management: Introduced a decoupled tool provider mechanism (ToolProvider, ToolProviderContext) for enhanced extensibility and centralized tool definitions, moving away from hardcoded tool imports.
  • Improved Dashboard Integration & CLI: Enhanced CLI dashboard setup with user prompts for WebUI installation, consistent dashboard paths under the data directory, and new CLI flags/environment variables for backend-only mode.
  • Enhanced Tool Execution Safety & Determinism: Added sandbox capability checks for browser tools to prevent accidental invocation, implemented a normalize method in ToolSet for consistent LLM cache hits, and introduced a source attribute to FunctionTool for better WebUI display.
  • Refined Agent Streaming & Messaging: Improved streaming output handling in run_agent to filter and yield only relevant message components, and updated prompts/system messages for clarity in background task results.
Changelog
  • .gitignore
    • Added .serena to the ignore list and bun.lock, pmpm-lock.yaml for frontend development.
  • .python-version
    • Ensured the file ends with a newline character.
  • astrbot/cli/commands/cmd_init.py
    • Modified the initialization process to prompt users for WebUI installation and updated the dashboard check to use the root path.
  • astrbot/cli/commands/cmd_run.py
    • Added --host and --backend-only CLI options for dashboard control and integrated DASHBOARD_ENABLE environment variable.
  • astrbot/cli/utils/basic.py
    • Updated dashboard download and extraction paths to be consistently under the data directory.
  • astrbot/core/agent/mcp_client.py
    • Added a source attribute with value 'mcp' to MCPTool for tool origin tracking.
  • astrbot/core/agent/tool.py
    • Introduced a source attribute to FunctionTool to indicate its origin (plugin, internal, mcp) and added a normalize method to ToolSet for deterministic tool serialization.
  • astrbot/core/astr_agent_run_util.py
    • Implemented _extract_final_streaming_chain to filter streaming message components and integrated it into run_agent for llm_result processing.
  • astrbot/core/astr_agent_tool_exec.py
    • Refactored tool acquisition to use the new ComputerToolProvider, added a sandbox capability check for browser-related tools, and corrected a typo in a background task message.
  • astrbot/core/astr_main_agent.py
    • Removed direct imports of numerous tools and platform module, integrated ToolProvider for dynamic tool injection, updated prompt templates, and added logic to disable streaming for webchat image output.
  • astrbot/core/astr_main_agent_resources.py
    • Removed the file, relocating its contents to dedicated modules for better modularity.
  • astrbot/core/computer/booters/base.py
    • Defined abstract methods get_default_tools, get_tools, get_system_prompt_parts for tool and prompt provision in computer booters.
  • astrbot/core/computer/booters/boxlite.py
    • Added logging for file operations and health checks, and implemented get_default_tools for Boxlite booter.
  • astrbot/core/computer/booters/constants.py
    • Added constants for different booter types (BOOTER_SHIPYARD, BOOTER_SHIPYARD_NEO, BOOTER_BOXLITE).
  • astrbot/core/computer/booters/shipyard.py
    • Added logging for sandbox operations and implemented get_default_tools for Shipyard booter.
  • astrbot/core/computer/booters/shipyard_neo.py
    • Added logging for sandbox operations, implemented _base_tools, _browser_tools, get_default_tools, get_tools, and get_system_prompt_parts for Shipyard Neo booter.
  • astrbot/core/computer/computer_client.py
    • Introduced unified API functions (get_sandbox_tools, get_sandbox_capabilities, get_default_sandbox_tools, get_sandbox_prompt_parts) for querying computer tools and prompts, and improved logging for Bay credentials discovery.
  • astrbot/core/computer/computer_tool_provider.py
    • Added a new module to provide computer-use tools (local/sandbox) based on session context, encapsulating tool injection logic.
  • astrbot/core/computer/prompts.py
    • Added a new module to store booter-specific system prompt fragments like Neo file path rules and skill lifecycle prompts.
  • astrbot/core/computer/tools/neo_skills.py
    • Updated the payload parameter schema for CreateSkillPayloadTool to allow array items.
  • astrbot/core/cron/cron_tool_provider.py
    • Added a new module to provide cron job management tools following the ToolProvider protocol.
  • astrbot/core/cron/manager.py
    • Updated imports for prompt constants and integrated ComputerToolProvider into MainAgentBuildConfig for cron-woke agents.
  • astrbot/core/pipeline/process_stage/method/agent_sub_stages/internal.py
    • Integrated decoupled ToolProvider instances (ComputerToolProvider, CronToolProvider) into the internal agent sub-stage initialization.
  • astrbot/core/provider/func_tool_manager.py
    • Added _INTERNAL_TOOL_PROVIDERS list and register_internal_tools method to register built-in tools from various providers.
  • astrbot/core/provider/sources/gemini_source.py
    • Modified _prepare_query_config to explicitly pass streaming flag, ensuring image modalities are downgraded for streaming requests.
  • astrbot/core/star/context.py
    • Added a call to register_internal_tools in the Context initialization to ensure built-in tools are registered.
  • astrbot/core/tool_provider.py
    • Added a new module defining the ToolProvider protocol and ToolProviderContext for decoupled tool injection.
  • astrbot/core/tools/cron_tools.py
    • Added a get_all_tools function to return all cron-related tools for registration.
  • astrbot/core/tools/kb_query.py
    • Added a new module for knowledge base query tool and retrieval logic, extracted from astr_main_agent_resources.py.
  • astrbot/core/tools/prompts.py
    • Added a new module to consolidate system prompt constants previously scattered across astr_main_agent_resources.py.
  • astrbot/core/tools/send_message.py
    • Added a new module for the SendMessageToUserTool, extracted from astr_main_agent_resources.py.
  • astrbot/core/utils/io.py
    • Added asyncio and ipaddress imports, implemented get_public_ip_address, and updated get_local_ip_addresses to handle IPv6 addresses.
  • astrbot/dashboard/routes/init.py
    • Imported LiveChatRoute, T2iRoute, Response, and RouteContext to expand dashboard routing capabilities.
  • astrbot/dashboard/routes/chat.py
    • Removed the _poll_webchat_stream_result function, indicating a change in how webchat streaming results are handled.
  • astrbot/dashboard/routes/route.py
    • Added asdict import and a to_json method to the Response dataclass for consistent JSON serialization.
  • astrbot/dashboard/routes/static_file.py
    • Added a check to prevent re-registering the index route if it already exists.
  • astrbot/dashboard/routes/tools.py
    • Enhanced tool listing to display the source attribute and prevented manual toggling of internal tools.
  • astrbot/dashboard/server.py
    • Refactored server initialization, added quart_cors for CORS handling, introduced ALLOWED_ENDPOINT_PREFIXES for authentication bypass, and improved logging for server startup/shutdown.
  • dashboard/.gitignore
    • Added bun.lock and pmpm-lock.yaml to the ignore list.
  • dashboard/env.d.ts
    • Added a declare module '*.vue' entry for better Vue component type inference.
  • dashboard/package.json
    • Moved overrides configuration from pnpm to the root level.
  • dashboard/public/config.json
    • Added a new configuration file for API base URL and presets.
  • dashboard/src/components/chat/LiveMode.vue
    • Updated WebSocket URL construction to dynamically use axios.defaults.baseURL.
  • dashboard/src/components/chat/StandaloneChat.vue
    • Disabled chat input when streaming and updated file handling for handleFileSelect.
  • dashboard/src/components/extension/componentPanel/components/ToolTable.vue
    • Added visual indicators and logic to differentiate and manage internal tools in the tool table.
  • dashboard/src/components/extension/componentPanel/types.ts
    • Added a source property to the ToolItem interface.
  • dashboard/src/i18n/locales/en-US/core/header.json
    • Added 'Log Out' translation.
  • dashboard/src/i18n/locales/en-US/features/auth.json
    • Added 'Server Configuration' translations.
  • dashboard/src/i18n/locales/en-US/features/settings.json
    • Added new translation keys for network proxy, server address, theme styles, reset options, and logout, and updated API key expiry options.
  • dashboard/src/i18n/locales/en-US/features/welcome.json
    • Added 'Configure Backend URL' step to the onboarding process.
  • dashboard/src/i18n/locales/zh-CN/core/header.json
    • Added '退出登录' translation.
  • dashboard/src/i18n/locales/zh-CN/features/auth.json
    • Added '服务器配置' translations.
  • dashboard/src/i18n/locales/zh-CN/features/settings.json
    • Added new translation keys for网络代理, 服务器地址, 主题样式, 恢复默认, and 退出登录, and updated API key expiry options.
  • dashboard/src/i18n/locales/zh-CN/features/welcome.json
    • Added '配置后端地址' step to the onboarding process.
  • dashboard/src/layouts/full/vertical-header/VerticalHeader.vue
    • Refactored header layout for desktop and mobile, added a logout button, and updated view mode toggle logic.
  • dashboard/src/main.ts
    • Implemented dynamic loading of config.json for API base URL and presets, and integrated useApiStore for global API configuration.
  • dashboard/src/stores/api.ts
    • Added a new Pinia store to manage API base URL, configuration presets, and custom presets.
  • dashboard/src/views/Settings.vue
    • Refactored API key management to use new API endpoints, integrated API store for server configuration, and updated theme color management.
  • dashboard/src/views/WelcomePage.vue
    • Added a new onboarding step for configuring the backend API address, including validation and saving functionality.
  • dashboard/src/views/authentication/auth/LoginPage.vue
    • Integrated API store for server configuration and presets, allowing users to configure the backend URL from the login page.
  • dashboard/tsconfig.json
    • Updated TypeScript compiler options for better compatibility and strictness.
  • dashboard/tsconfig.vite-config.json
    • Updated TypeScript compiler options for Vite configuration.
  • dashboard/vite.config.ts
    • Updated the development server host to :: for IPv6 support and adjusted chunkSizeWarningLimit.
  • docs/refactor-neo-decouple.md
    • Added a new documentation file detailing the refactoring plan for Neo tool decoupling.
  • pyproject.toml
    • Added quart-cors to project dependencies.
  • tests/test_booter_decoupling.py
    • Added new TDD tests to verify the booter decoupling refactoring, covering constants, base interfaces, and booter-specific tool declarations.
  • tests/test_computer_config.py
    • Renamed _discover_bay_credentials to discover_bay_credentials and updated related test cases.
  • tests/test_profile_aware_tools.py
    • Updated test patches to align with the new tool provisioning logic in astr_main_agent.
  • tests/test_tool_loop_agent_runner.py
    • Added MockFinalMediaStreamProvider and a test case to ensure run_agent correctly emits final media chains in streaming mode.
  • tests/unit/test_astr_main_agent.py
    • Added tests for disabling streaming for webchat image output based on provider configuration and model metadata, and removed os.environ checks for shipyard configuration.
  • tests/unit/test_gemini_source.py
    • Added new unit tests for ProviderGoogleGenAI to verify correct handling of image modalities in streaming and non-streaming requests.
  • tests/unit/test_internal_agent_sub_stage.py
    • Added new unit tests for InternalAgentSubStage to verify its use of the effective streaming flag and agent runner initialization.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a significant and well-executed refactoring of the tool management system, centered around a new ToolProvider protocol. This change decouples tool registration from the main agent logic, greatly enhancing modularity and making the system more extensible. Key improvements include the introduction of ComputerToolProvider and CronToolProvider, a new sandbox capability check to prevent the use of browser tools in unsupported environments, and deterministic tool serialization to improve caching. The command-line interface and dashboard have also been substantially improved, offering better configuration options like a backend-only mode and flexible API URL settings. Overall, these changes represent a major architectural improvement, increasing the robustness, safety, and maintainability of the codebase. The implementation is solid, and I have no specific issues to raise.

@LIghtJUNction LIghtJUNction added enhancement New feature or request area:core The bug / feature is about astrbot's core, backend labels Mar 15, 2026
feat: add OneBot V11 file API support for sending files
- Implement 'astrbot uninstall' to remove systemd service and data files
- Add '--log-level' option to 'astrbot run' (default: INFO)
- Pass log level config to core logger via env var
- Introduce 'astrbot bk' command with GPG signing, encryption, and digest support
- Add import/export functionality using core backup modules
- Refactor path management to use 'AstrbotPaths' singleton across CLI commands
- Replace blocking subprocess calls with asyncio.create_subprocess_exec in backup command
- Add comprehensive tests for uninstall and backup commands
- Improve module resource handling for bundled dashboard assets
- shell.py: Replace undefined TContext with AstrAgentContext
- context.py: Add missing Coroutine import from typing
- lsp/client.py: cleanup (already applied)
- Add test_lsp_client_send_request_not_connected
- Add test_lsp_client_send_notification_not_connected
- Mark 6.2 and 7.2 tasks complete in tasks.md
- Add _message_count and _last_activity_timestamp to orchestrator
- Add record_activity() method to orchestrator
- Add name field to get_protocol_status returns
- Add total_messages and last_activity to get_stats
- Update tests to verify new fields
The internal ToolSet (base.py) was missing add_tool() and merge()
methods that the agent code expects. When tmgr.get_full_tool_set()
returned a base.py ToolSet, calls to add_tool() and merge() failed.

Added:
- add_tool() as alias to add()
- merge() method to merge another ToolSet

This fixes runtime crash: AttributeError: 'ToolSet' object has no attribute 'add_tool'
- Core orchestrator with star registration
- Runtime stats tracking
- Message types
- Python bindings via pyo3
- No unsafe, strict clippy
Previously initialize_runtime_bootstrap() was called at module level,
causing it to run for ALL astrbot CLI commands (conf admin, etc).
Now it only runs when the 'run' command is executed.
Also show password hash values instead of masking in conf set output.
When clients disconnect abruptly, hypercorn raises
ssl.SSLError APPLICATION_DATA_AFTER_CLOSE_NOTIFY during SSL shutdown.
This is benign and expected behavior. Wrap serve() with
try/except to suppress these spurious errors.
When ASTRBOT_BUILD_DASHBOARD is not set, the hatch build hook now
creates an empty target dir with a .placeholder file so the
artifacts glob matches and hatchling does not fail.
These were called on ToolSet instances returned by get_full_tool_set()
but were missing from the base ToolSet implementation.
shutdown() now clears pending requests directly instead of calling
cancel() on asyncio.Future instances.
Added anthropic_schema, google_schema, get_func_desc_openai_style,
get_func_desc_anthropic_style, get_func_desc_google_genai_style,
__bool__, __repr__, __str__, names, empty to match tool.py ToolSet.
The run command should use the original InitialLoader-based startup,
not the new _internal/runtime bootstrap. Only the dev subcommand
uses the new architecture.
The import of tests.fixtures.helpers happened before sys.path was
modified, causing ModuleNotFoundError when running pytest.
_BUNDLED_DIST may be a symlink pointing to the actual build output.
Using resolve() ensures the path is correctly resolved to the real
directory, allowing the dashboard frontend to load properly when
bundled as a symlink in the dev branch.
- Add Rust orchestrator with async bootstrap pattern
- Implement CLI with clap (start, stats, health subcommands)
- Add protocol stubs (LSP, MCP, ACP, ABP)
- Python bindings via pyo3 (_core module)
- Use maturin as build backend
- Add tombi.toml for schema config
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:core The bug / feature is about astrbot's core, backend area:webui The bug / feature is about webui(dashboard) of astrbot. enhancement New feature or request size:XXL This PR changes 1000+ lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants