chore: release 0.9.32 - #576
Merged
Merged
Conversation
- New docker_install.py: latency-race install sources (official download.docker.com + CN mirrors, no geo detection; official wins → no DOWNLOAD_URL override), run official get.docker.com script, probe Tencent Cloud registry mirror reachability and merge registry-mirrors into /etc/docker/daemon.json (backup kept) only after a fresh install. - install_mobile_stream: when Docker is missing on Linux with root/passwordless sudo, attempt the automatic install first and continue with the container install when the daemon is ready; otherwise fall back to the manual-install error. - i18n (backend en/zh + dashboard locales) and install-guide copy updated; CHANGELOG entry added. - Unit tests for source selection, daemon.json merge, probe, and the install stream branches (auto-install ok / fail / no-sudo).
os.geteuid() does not exist on Windows, breaking mypy in CI. Reuse the existing octop.infra.utils.posix_compat.geteuid() shim like the rest of the codebase.
…nual chore: sync develop onto main after manual
- Vendor install-docker.sh (official get.docker.com script with TencentOS / OpenCloudOS releasever mapping and mirror-domain rewrites) into scripts/linux/v1.0/ so unsupported-by-online-script distros still install and we never pipe the network straight into sh; wheel ships it via the existing **/*.sh package rule. - auto_install_docker_stream runs the bundled script with the raced DOWNLOAD_URL env var instead of curl|sh (curl pipe used to swallow download failures). - Error compatibility: classify script output tail against known failure modes (unsupported distro, no root, network/curl, package manager lock, GPG key, disk full, existing docker) and append a localized fix hint; dedicated messages for spawn failure, stalled output (read watchdog), and missing bundled script; restart-failure message now tells how to start Docker manually. - Tests: error classification, bundled-script presence, missing-script stream, friendly-hint emission; full mobile suite green (57).
…pr-511 # Conflicts: # CHANGELOG.md
…release The FnOS FPK workflow kept a stray env block when the rolling-release step was removed, so GitHub rejected the whole file and Release's dispatch failed with "'env' is already defined" — silently, because that job is continue-on-error. CI also ran the full suite three times per release (release PR, main push, sync PR) on identical trees. Drop the main push build, since PR checks already run on the merge result, and skip the post-release sync PR, which is auto-merged before its checks even start. Release now passes the tag to the sync workflow so the branch is named after the version instead of the constant "manual", which every release force-pushed over. Co-authored-by: Cursor <cursoragent@cursor.com>
GitHub Release assets mixed unversioned Octop-<plat>.zip with Octop-Desktop-* and PEP wheels. Name public files Octop-<kind>-<os>-<arch>-<version>.<ext>, gzip the Linux desktop tarball, and keep the zip payload directory plus the macOS .app Resources name stable so the Wails shell still unpacks them. Co-authored-by: Cursor <cursoragent@cursor.com>
Stop publishing a separate fnos-<ver> release. After the main Release exists,
upsert Octop-fnos-{docker,native}-<ver>.fpk onto the same v* tag as wheels and
desktop packages, and leave the release notes untouched.
Co-authored-by: jubaoliang <jubaoliang@tencent.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
…icate sync triggers (#532) Dispatching FnOS or develop-sync must fail the Release workflow when gh workflow run fails, instead of continue-on-error hiding a missed cascade. Desktop package attaches whenever release_tag is set, so a develop rebuild does not need a second attach_from_run hop, and attach-only runs use a separate concurrency group. Sync listens only to workflow_dispatch so it cannot double-fire. Co-authored-by: jubaoliang <jubaoliang@tencent.com> Co-authored-by: Cursor <cursoragent@cursor.com>
Prevent multi-GB daily octop.log growth with size-based rotation, suppress noisy memory maintenance INFO, and gzip prior rotated files on the next cycle (Python gzip works on Windows).
Drop the special WARNING override for harness_agent.middleware.memory so non-debug environments stay at the normal INFO root level.
Path.write_text expands \\n to \\r\\n on win32, which broke the decompress equality assert in CI.
- Added lark-oapi dependency for enhanced Feishu bot creation via scan-to-create flow. - Updated QR token handling to use QR URL instead, improving the user experience during bot setup. - Enhanced localization strings for better user guidance in both English and Chinese. - Refactored related functions and tests to accommodate the new flow and ensure reliability. This change streamlines the bot creation process and aligns with the latest API standards.
- Updated localization strings in English and Chinese for improved clarity in the Feishu bot registration process. - Refactored the bot creation logic to streamline the registration flow, removing unnecessary parameters and ensuring credentials are handled correctly. - Added error handling for cases where the registration result is empty, improving robustness. These changes enhance user experience and align with the latest API requirements.
…us platforms - Added `stopPolling()` calls in the QR generation functions for QQ, WeCom, Weixin, Dingtalk, Feishu, and Yuanbao to ensure polling is halted before initiating the QR code generation process. - Updated button click handlers to directly invoke the respective QR generation functions, improving user interaction and flow. These changes enhance the user experience by preventing potential conflicts during QR code generation.
- Modified localization strings in English and Chinese for improved clarity in QR code generation instructions across various platforms (WeChat, DingTalk, Feishu, YuanBao). - Enhanced the styling of QR code display elements in the UI for better user experience. - Refactored QR code generation logic in the ChannelDrawer component to ensure smoother transitions and prevent conflicts during the process. These changes aim to improve user guidance and streamline the QR code generation experience.
…QR code flows - Updated localization strings in English and Chinese for improved clarity in QR code generation and binding instructions across various platforms (WeCom, WeChat, YuanBao). - Integrated translation functions to dynamically handle error messages and prompts, enhancing user experience during the QR code generation process. - Refactored error handling in the ChannelDrawer component to provide more informative feedback to users in case of failures. These changes aim to streamline the user experience and ensure consistent messaging across the application.
Reserve a toolbar spacer so right-dock and popup actions no longer sit under frameless caption buttons, hide the PWA install entry inside the Wails shell, restyle the splash as a card with a progress bar, and add Windows settings-window height so DWM does not clip the bottom inset. Co-authored-by: Cursor <cursoragent@cursor.com>
feat(channels): create Feishu bots via lark-oapi scan-to-create
…ress fix(logging): size-cap rotation and logrotate delaycompress Co-authored-by: Cursor <cursoragent@cursor.com>
feat(mobile): auto-install Docker for Android container backend Co-authored-by: Cursor <cursoragent@cursor.com>
Passwordless sudo can install the engine, but /etc/docker/daemon.json and systemctl restart still need elevation; otherwise the Tencent mirror step silently skips. Co-authored-by: Cursor <cursoragent@cursor.com>
…nd password handling. The default password is no longer hardcoded; first-run credentials are now written to `~/octop-login.txt`. Updated password policy to clarify requirements and options for setting a custom initial password using `OCTOP_DEFAULT_PASSWORD`.
- Integrated NSIS installation into the CI workflow for Windows, ensuring `makensis.exe` is available. - Updated `package-release.sh` to check for `makensis` and provide installation instructions if missing. - Enhanced documentation to clarify the need for NSIS in Windows packaging. - Added NSIS project files to facilitate the creation of a Windows installer that includes shortcuts and the WebView2 runtime. This change improves the Windows packaging process by providing a proper installer experience.
Add a left-side user-turn rail with hover preview, scroll-spy, and jump-to-turn so long chats are easier to scan without changing the session sidebar.
* fix: schedule proactive care for agents that never saved config Proactive care defaults to on, but the scheduler only listed persisted enabled rows, so most experts never entered the push loop. * fix: attach gateway connector tools without rebuilding the agent prepare_chat_mcp rebuilt the agent whenever a builtin MCP server was missing from the live runtime. For gateway-mode connectors that rebuild is pure loss: they carry no HTTP transport, their tools are built in-process from stored credentials, and _post_start_agent runs the very same injection at the end anyway. Meanwhile the rebuild drops the harness instance and with it the checkpointer pool an in-flight turn is still writing to. Split the missing names on connector mode: gateway ones refresh their credentials and inject into the running agent, the rest keep the existing reload path. Co-authored-by: Cursor <cursoragent@cursor.com> * fix: await cancellation on scheduler shutdown, and keep its sleeps out of tests ProactiveCareScheduler.shutdown() cancelled each task and returned without awaiting it, so a loop parked in a multi-hour sleep could outlive the shutdown that was supposed to end it. It now gathers the cancelled tasks before returning. Proactive care defaults to on, so creating an agent starts one of those sleeps. pytest-asyncio waits for leftover tasks before fixture teardown, which hangs the suite. octop_client shuts the scheduler down and calls the new suspend() so nothing reschedules; an autouse fixture covers tests that boot OctopServer another way. The scheduler's own unit tests opt out. suspend() exists for the tests. The alternative — every test remembering to tear the scheduler down — is the arrangement that produced the hang. * refactor: drive websockets on one event loop and drop the cross-loop workaround starlette's sync TestClient runs the app on its own anyio portal loop. That left the process with two loops over one OctopServer, so primitives bound to a loop and shared by both — AgentManager._lock — deadlocked or raised "bound to a different event loop". The tests worked around it by running the ws session in a worker thread. tests.support.http now speaks ASGI directly, so the handler, the gateway workers and the test all share one loop, the way uvicorn runs it in production. That removes the reason the production handlers marshalled every outbound frame across loops with run_coroutine_threadsafe + wrap_future. The comment on that code named the cause outright — "this handler may run on a different loop (e.g. starlette's TestClient portal)" — so it was test-shaped machinery sitting on the path of every frame the dashboard receives. Both handlers now await the send directly. * update harness-agent & harness-memory ---------
#548) * feat(release): add download links generation for GitHub releases - Introduced a new script `release_download_links.py` to generate markdown for download links based on version tags. - Updated the release workflow to append download links to the release notes if not already present. * refactor(release): update download section headings and links for consistency - Changed section titles in the release notes from Chinese to English for clarity. - Updated download link labels in the `release_download_links.py` script to use English terms. - Adjusted unit tests to reflect the updated headings in the download section.
Hide overflowing metric cards behind a more menu on desktop so the summary row no longer wraps. Co-authored-by: Cursor <cursoragent@cursor.com>
…upload progress Parse more text and spreadsheet types, add optional local/remote OCR for images and scanned PDFs, and surface upload progress so indexing no longer appears stuck. Co-authored-by: Cursor <cursoragent@cursor.com>
Synthesize tool-call-only parents, stamp turn/duration metadata, and fall back to content-size estimates so Turns/Calls/Duration toggles work on legacy and burst-stamped events. Gather harness turn context and rename conflicting trajectory unit test modules.
* fix(deskop): update DMG packaging instructions for macOS to clarify drag-and-drop installation * feat(darwin): enhance DMG installer with custom background and layout adjustments Added a custom background image for the DMG installer and adjusted the layout settings for better visual presentation. The background image is copied to the staging area if it exists, and the window dimensions and icon positions have been updated for improved aesthetics. * chore(workflows): update upload and download artifact actions to latest versions Updated the GitHub Actions in the octop-desktop workflow to use the latest versions of the upload-artifact and download-artifact actions, improving compatibility and security. * refactor(darwin): remove old DMG creation script and update Taskfile for new background image Deleted the outdated create-installer-dmg.sh script and replaced it with an inline script in Taskfile.yml that utilizes dmg-background.png for the DMG installer. This change streamlines the DMG creation process and enhances the visual presentation with the new background image. * chore(.gitignore): clean up ignored files and directories Updated the .gitignore file to remove unnecessary entries and ensure that build artifacts are properly ignored, while preserving the build directory for the desktop application. This change enhances the clarity and organization of ignored files. * feat(darwin): replace DMG background image and enhance detachment logic Introduced a new JPEG background image for the DMG installer, replacing the previous PNG file. Updated the Taskfile to improve the device detachment process with a dedicated function, ensuring smoother handling during DMG creation. Adjusted layout settings for better visual presentation in the installer window.
Co-authored-by: Cursor <cursoragent@cursor.com>
perf(trajectory): bound live stream persistence overhead
Co-authored-by: Cursor <cursoragent@cursor.com>
Match the experts table sticky columns so operations stay visible on horizontal scroll, and drop container overflow that broke Ant Design fixed cells.
* feat(onnx_download): add COS support for model downloads
- Updated the download logic to include a new COS endpoint alongside existing Hugging Face and hf-mirror sources.
- Introduced functions for constructing COS URLs and handling COS-specific downloads.
- Enhanced the candidate building process to include COS as a source.
- Added tests to verify COS integration and ensure proper handling of manifest files and download paths.
This change expands the model download capabilities to include models hosted on COS, improving flexibility and access to resources.
* fix(onnx_download): update COS endpoint description for clarity
- Revised the comment for the COS endpoint to clarify that objects are organized under /models/embedding/{model_id}/.
- This change enhances the documentation within the code, improving understanding of the COS structure for future development.
* fix(dashboard): adjust modal properties for improved behavior
- Updated the zIndex of the feature modal in KnowledgeBasesPage to ensure it stacks above other modals.
- Changed the property from destroyOnClose to destroyOnHidden in both KnowledgeBasesPage and ProviderConfigModal for consistent modal behavior when closing.
List/detail expose icon_url from the baked snapshot avatar, and the card loads it with auth so publish no longer falls back to the Lucide icon when a custom avatar exists.
…cent.octop" in configuration files
Release packaging now writes the package version into Info.plist, Windows VERSIONINFO, and NSIS instead of leaving stale hardcoded copies in the shipped app. Co-authored-by: Cursor <cursoragent@cursor.com>
Replace the legacy shared/default Playwright session router with per-user harness-browser profiles (`user-<id>`) so concurrent users no longer share one Chrome session, cookie jar, or recording. The backend now always derives the profile from the authenticated user (or the IM thread's agent owner) instead of trusting client-supplied profile/session ids, and a BrowserProfileMiddleware pins tool-selected profiles to the same boundary. Also dedupes ThreadRegistry's session-refresh logic.
- Relocate voice and search engine settings from Advanced to Models page/permission category (nav, routes, permission gates). - Add /admin/voice/providers/test-configuration endpoint and VoiceManager.test_configuration() to probe unsaved provider values before saving. - Redirect legacy /admin/advanced?tab=voice|search links to the new Models page location.
Migrate immediately after overlay and repair folded v13 connectors schema so existing backups stay usable. Refuse newer schema versions with BACKUP_SCHEMA_INCOMPATIBLE. Also drop the knowledge-bases Beta nav badge. Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
|
|
||
| @router.get("/browser/env-status") | ||
| async def env_status(_: Any = Depends(current_user)) -> dict[str, Any]: | ||
| return _probe_env() |
| yield f"data: {json.dumps({'done': True, 'success': False, 'error': str(exc)})}\n\n" | ||
|
|
||
| return StreamingResponse( | ||
| _event_stream(), |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
[0.9.32] - 2026-09-06
新增
修复
变更
~/octop-login.txtRelease checklist
Made with Cursor