Repository navigation
Releases: WilliamSkyWalker/saygo
Release list
Saygo v0.4.18
Saygo 0.4.18:统一输入保护与完整网络正文
用户在 0.4.17 发布启动后授权再升级一版。本版保留已完成的网络完整正文修复与十类代码缺口修复,让普通 CLI/MCP 和 QA 输入共享观察检查、物理资源互斥与持久请求记录;保留输入是否生效的实际证据。
主要修改
- 普通输入必须携带来源观察 ID;相同会话、请求 ID 和有效参数只派发一次。新增
device operations查询及device resolve人工核对入口,崩溃或回执丢失不会自动重放。 - QA 动作接入共享保护,用例期间锁定物理资源。未知结果保留当前动作、截图和请求记录,停止该设备后续用例;不自动重复输入,也不丢弃此前结果。
- macOS 前台连接保存并恢复 PID/窗口 ID,拒绝失效或被其他进程复用的窗口;多窗口须显式选择。
- MJPEG 超过 0.5 秒的帧失效,断流/停止清缓存并回落 Appium 截图;回落失败明确报错。
- Android/iOS 输入异常后不再切换方法重新输入。滚动统一为 up 朝内容顶部、down 朝底部,移动手指方向与之相反。
- 按端声明导航和应用启动能力;浏览器不公布 open_app,手机不公布 open_url。
- 非空账号池不足时在启动前拒绝;QA 日志过滤已配置账号值,包括嵌套、自定义字段和异常内容。报告与截图仍可能含私有数据。
- Selenium Grid 启动不再清理其他会话,显式清理只接受明确拥有的 session ID。
- 修复 MCP 1.2.0 缺少 remove_tool 导致 device 模式无法启动,增加最低/最新 SDK 的真实 stdio 发布检查。
- 网络采集取消正文/事件/字节/请求数量限额,浏览器缓存失效时尝试完整流恢复;native host 允许超过 32 MiB 的网络响应,Unicode 跨帧不损坏。
- 公共与六端中文需求、迁移说明、共享操作 Skill 和回归测试同步更新。
升级与迁移
Python 包、托管安装器、native host、客户端插件和桌面产物使用 0.4.18;已包含完整正文修复的扩展继续使用 0.4.17,协议和 ID 不变。网络完整正文修复需要扩展与 native host 同时更新;仅升级其中一方不能解除全部旧限额。商店提交与审核通过分别记录。
pipx upgrade saygo-agent-control升级后重启 Agent 客户端以加载新的 MCP 参数。桌面用户下载匹配系统的 SaygoDesktop-0.4.18-*。已有在线 host 保持运行,用户后续重连才加载新 host。发布不会自动重载本机扩展;采集记录仅在内存中,用户更新前须先导出所需数据。
- 旧输入脚本必须先截图并读取画面,再携带
--observation-id;推荐同时保存--request-id。同 ID 的重查必须保留原参数,新动作使用新观察和新 ID。 - 未知结果先查
device operations并观察,再用device resolve --session NAME --request-id ID --resolution applied --note '已核对结果';确认未生效用not_applied。核对不会重放输入。 - macOS 旧前台绑定缺少窗口 ID 时须重新连接;窗口失效时显式指定新的
--window-id。不能用其他窗口悄悄接替旧目标。 - 移动 QA 须配置明确的
APPIUM_DEVICE。按旧手指方向理解 scroll_up/down 的调用方需调整;QA 的人工核对不等同恢复原模型循环。
验证与限制
网络修复已经通过超过 33 MiB 的真实 Chrome 扩展 → native host → CLI 校验,正文长度、SHA-256、中文/emoji 尾部一致,大 POST 正文也完整。0.4.18 标签回归为 961 项离线通过、7 项环境跳过、49 项 Node 通过,真实扩展 4 项与 Playwright 1 项通过。Linux、Windows、macOS 干净安装与重复 setup 均通过,三平台桌面各 45 项及实际冻结启动/握手/模拟 IPC 通过。PyPI、GitHub 及三平台桌面包已发布;扩展 0.4.17 经商店 API 确认为已审核通过、全量发布。
四端真机、完整真实模型业务任务、桌面签名和公证不在通过范围内。发布、安装、构建和商店状态以本版验证记录的实际结果为准;不将源码修复描述为六端全部可用。
Saygo v0.4.17
Saygo 0.4.17:统一输入保护与完整网络正文
本版修复需求核对中发现的十类代码缺口,让普通 CLI/MCP 和 QA 输入共享观察检查、物理资源互斥与持久请求记录;保留输入是否生效的实际证据。
主要修改
- 普通输入必须携带来源观察 ID;相同会话、请求 ID 和有效参数只派发一次。新增
device operations查询及device resolve人工核对入口,崩溃或回执丢失不会自动重放。 - QA 动作接入共享保护,用例期间锁定物理资源。未知结果保留当前动作、截图和请求记录,停止该设备后续用例;不自动重复输入,也不丢弃此前结果。
- macOS 前台连接保存并恢复 PID/窗口 ID,拒绝失效或被其他进程复用的窗口;多窗口须显式选择。
- MJPEG 超过 0.5 秒的帧失效,断流/停止清缓存并回落 Appium 截图;回落失败明确报错。
- Android/iOS 输入异常后不再切换方法重新输入。滚动统一为 up 朝内容顶部、down 朝底部,移动手指方向与之相反。
- 按端声明导航和应用启动能力;浏览器不公布 open_app,手机不公布 open_url。
- 非空账号池不足时在启动前拒绝;QA 日志过滤已配置账号值,包括嵌套、自定义字段和异常内容。报告与截图仍可能含私有数据。
- Selenium Grid 启动不再清理其他会话,显式清理只接受明确拥有的 session ID。
- 修复 MCP 1.2.0 缺少 remove_tool 导致 device 模式无法启动,增加最低/最新 SDK 的真实 stdio 发布检查。
- 网络采集取消正文/事件/字节/请求数量限额,浏览器缓存失效时尝试完整流恢复;native host 允许超过 32 MiB 的网络响应,Unicode 跨帧不损坏。
- 公共与六端中文需求、迁移说明、共享操作 Skill 和回归测试同步更新。
升级与迁移
Python 包、托管安装器、native host、客户端插件、桌面产物和浏览器扩展均使用 0.4.17,协议和 ID 不变。网络完整正文修复需要扩展与 native host 同时更新;仅升级其中一方不能解除全部旧限额。商店提交与审核通过分别记录。
pipx upgrade saygo-agent-control升级后重启 Agent 客户端以加载新的 MCP 参数。桌面用户下载匹配系统的 SaygoDesktop-0.4.17-*。已有在线 host 保持运行,用户后续重连才加载新 host。发布不会自动重载本机扩展;采集记录仅在内存中,用户更新前须先导出所需数据。
- 旧输入脚本必须先截图并读取画面,再携带
--observation-id;推荐同时保存--request-id。同 ID 的重查必须保留原参数,新动作使用新观察和新 ID。 - 未知结果先查
device operations并观察,再用device resolve --session NAME --request-id ID --resolution applied --note '已核对结果';确认未生效用not_applied。核对不会重放输入。 - macOS 旧前台绑定缺少窗口 ID 时须重新连接;窗口失效时显式指定新的
--window-id。不能用其他窗口悄悄接替旧目标。 - 移动 QA 须配置明确的
APPIUM_DEVICE。按旧手指方向理解 scroll_up/down 的调用方需调整;QA 的人工核对不等同恢复原模型循环。
验证与限制
修复阶段已完成 948 项离线通过、15 项环境跳过,以及 Linux 无头真实扩展 3 项、CLI Playwright 1 项通过。发布另检查完整依赖下的回归、真实有界浏览器、Linux/Windows/macOS 干净 wheel 安装与重复 setup,以及三平台原生桌面冻结程序与归档。
四端真机、完整真实模型业务任务、桌面签名和公证不在通过范围内。发布、安装、构建和商店状态以本版验证记录的实际结果为准;不将源码修复描述为六端全部可用。
Saygo v0.4.16
Saygo 0.4.16 — Shared browser bridge and native desktop connections
Windows desktop and WSL previously selected different native-host directories.
An extension connected to one could appear offline to the other, even after a
PyPI upgrade. Both clients now discover the browser OS's registered and live host.
Browser connection and upgrade repair
- Share one Windows bridge between desktop, Windows Python and WSL. New installs
use%LOCALAPPDATA%/Saygo/browser-bridge; a working legacy directory is retained. - Probe the host before reporting it connected. Report multiple live hosts,
incompatible extension identities and unresponsive hosts without choosing a
different browser silently. - Check actual registration and the live directory on package startup, including
when the Python version has not changed. Repair registration drift without
disconnecting the running extension. - Preserve saved page bindings. Create an explicitly named session and select
its intended page when recovering an obsolete binding. - Bound retries for Windows status-file sharing violations so a concurrent reader
does not immediately terminate the host. Browser actions are never replayed. - Display the actual connection failure instead of always asking users to connect
the extension again. Native-host diagnostics now identify version0.4.16.
Desktop application
- Add a first-use welcome flow, automatic native computer connection, launchable
application inventory and whole-computer control on Windows/macOS. - Observe browser resources when the task needs them; preserve resource choices
across task recovery. Pause automatic rebinding while a task owns the resource. - Improve model configuration, masked token management and actionable connection
errors. Minimize the controller during whole-computer tasks and restore it when
the task finishes or needs human input. - Include Windows runner resources in the packaged application. Desktop archives
are built on their target operating systems and are unsigned beta builds.
Upgrade and component versions
pipx upgrade saygo-agent-controlRestart the Agent client to load the new Python code. Package installations keep
their pipx interpreter. Existing connections stay alive; an already running host
keeps its current code until the user reconnects. No automatic disconnect occurs.
Desktop users download the matching SaygoDesktop-0.4.16-* release asset for
Windows x64, macOS arm64 or Linux x86_64; desktop updates are not automatic.
The Python package, managed installer and newly built native host use 0.4.16.
The browser extension remains 0.4.13, with the same protocol and extension ID.
Its files have not changed, so this release needs no new extension upload.
Version 0.4.15 was previously withdrawn and is not reused.
Validation boundary
Regression coverage includes real native-host subprocesses with a synthetic
extension peer, shared-directory discovery, same-version upgrade repair and
Windows file-sharing failures. The isolated real Chrome suite starts two separate
MCP servers, verifies page discovery and returned PNGs, and checks actual input
after a restart. The release gate also runs the CLI Playwright browser suite.
PyPI publishing is gated on clean wheel installation and repeat setup on Linux,
Windows and macOS. Desktop builds run Qt tests and startup checks; these do not
establish complete GUI task acceptance on all operating systems. Android/iOS
hardware acceptance is not part of this release. See the tagged workflows and
docs/testing/release-0.4.16.md for actual results and outstanding checks.
Verified publication (2026-10-12)
- PyPI publishing and three-platform installation
passed. Both distributions are visible and not yanked; a standard pip download
succeeded, and the wheel's shared-bridge, native-host and update code matches
the release tag byte for byte. - GitHub release
is public with all 12 assets: source/installer/extension metadata plus three
native desktop archives and their checksums. - Desktop builds
passed on the exact tagged commit. Publication
verified that provenance and all three archive hashes before upload. - The extension store check confirmed
0.4.13is already published and skipped
duplicate upload/submission. No extension reload was performed.
Detailed results and archive hashes are recorded in the
0.4.16 validation record.
Saygo v0.4.14
Saygo 0.4.14 — Restore package update notifications
Package installations previously bypassed update checking and returned only a
pipx management message, so clients could not see a newer available version.
Version checking and notification now work independently of automatic upgrades.
- Check public PyPI in the background on package MCP startup. Report stable,
non-yanked newer releases with their version, URL and pipx upgrade command. - Refresh absent, expired or invalid caches from
device_sessions, including
when an older copied launcher still bypasses startup checks. The initial
result may saychecking: true; the completed result appears on a later call. - Make package
saygo update --checkperform a real lookup. Keep automatic
installation disabled; ignore stale managed-runtime upgrade flags. - Remove reminders for versions already installed. Contain offline, metadata,
cache-write and worker failures without blocking device operations. - Consolidate ordinary documentation in
docs, retaining runtime Markdown
resources in their required locations. Add a 186-item project requirement
baseline, 633 automated BDD contracts and 66 environment acceptance scenarios.
Upgrade
pipx upgrade saygo-agent-controlRestart the Agent client. Package installations already bound to their pipx
interpreter do not need repeated setup. Pre-package copied-runtime installations
still need a one-time saygo setup --client codex migration (or their selected
client). Editing a checkout alone does not update installed 0.4.12 runtimes.
The browser extension stays at 0.4.13: this release does not change extension
files or require a browser reconnect. Existing managed GitHub installations
retain their checksum verification and opt-in update controls.
Validation boundary
The added 633 tests run offline, including real worker threads, on-disk cache
handling and the MCP device_sessions result path. The 66 BDD environment
acceptance scenarios are specifications, not a claim of completed hardware runs.
See docs/testing/results.md and the release workflows for scoped results.
Python publishing is gated on Linux, Windows and macOS wheel installation and
repeat setup. Store review status remains separate from package publication.
In-progress desktop application changes in the shared development workspace are
not part of this release.
Saygo v0.4.13
Saygo 0.4.13 — Reliable inactive-tab capture
Inactive tabs could return one screenshot and then stall in Chrome's screenshot
interface, preventing the next scroll from being dispatched. Screenshot requests
now briefly start a page screencast to keep rendering active, then stop it on
completion or timeout. Returned observations still use the original viewport PNG;
stream frames are acknowledged and discarded. Tabs and windows stay in place.
- Preserve pending-request guards, stale-image rejection and no automatic input replay or reconnect.
- Verify 49 screenshots, 12 alternating scrolls and 35 seconds of inactive idle through a real Windows Chrome extension and native host in an isolated profile.
- Add stream lifecycle regression tests and consecutive inactive screenshots to the browser integration gate.
- Update the shared device skill to use 85–90% of the visible list height for continuous scanning, retaining overlap and adjusting to actual movement.
- Preserve the configured browser extension ID during setup upgrades unless explicitly overridden.
- Include package-based client setup improvements already on main, so package upgrades update the managed integration without copying another runtime.
Upgrade
pipx upgrade saygo-agent-control --index-url https://pypi.org/simple --pip-args="--no-cache-dir"Restart the agent client after upgrading. Installations using an older copied
runtime need a one-time saygo setup --client codex migration (or their selected
client). For unpacked extensions, replace the loaded folder with the development
extension ZIP, manually reload it, and click Connect local bridge. Keep that folder.
Store installations receive the extension update after Google approves it;
upgrading the Python package alone does not update a running browser extension.
Validation limits
The Windows check used an isolated profile; it does not establish multi-hour
endurance or minimized-window support. A timeout still retains ownership of
Chrome's outstanding command and discards late images. Desktop binaries are not
part of this release workflow. Chrome Web Store submission is distinct from
approval; consult the release workflow for the current review state.
Saygo v0.4.12
Saygo 0.4.12 — Background tab scrolling and automated store submission
- Scroll inactive tabs with mouse-wheel input and temporary logical focus emulation, without activating the tab or browser window.
- Reset focus emulation after completion, failure or timeout. Retain the pending-input lock and reject stale page/control requests without replaying input or disconnecting the extension.
- Add 12 rounds of tab-switch, screenshot, click and targeted-scroll integration coverage, plus short idle capture in an inactive tab.
- Keep foreground, background, covered-window and inactive-tab release checks. Minimized windows and multi-hour endurance runs are outside the requested acceptance scope.
- Retain screenshot timeout guidance and bounded diagnostics from 0.4.11, and fix report rendering compatibility with Python 3.11.
- Submit Chrome Web Store packages automatically from release tags after regression checks. Google publishes the extension after review approval.
Upgrade
pipx upgrade saygo-agent-control --index-url https://pypi.org/simple --pip-args="--no-cache-dir"
saygo setup --client codexRestart the agent client after setup. For unpacked extensions, replace the contents of the currently loaded extension folder with the development extension ZIP. Manually reload Saygo Browser in chrome://extensions or edge://extensions, then click Connect local bridge. Keep that folder. Store installations receive the update after Google approves and publishes it.
Known limits
The original Chrome screenshot API is retained. These changes do not establish a fix for every intermittent Chrome screenshot stall, including the reported multi-hour Windows incident. A timeout does not cancel Chrome's outstanding command; its late image is discarded. No automatic disconnect, reconnect or input replay is used. Minimized windows are excluded from acceptance, and multi-hour endurance testing remains excluded. Full Windows background-tab acceptance is not yet established.
Chrome Web Store submission is distinct from approval; check the release workflow for the submitted review state. Desktop binaries are not part of this release workflow.
Saygo v0.4.10
Saygo 0.4.10 — Background screenshots and capture diagnostics
- Capture browser screenshots and viewport sizes without activating tabs, focusing windows, or restoring minimized windows. Explicit page selection retains its foreground behavior.
- Keep the existing
Page.captureScreenshotinterface, PNG surface capture and viewport clip parameters. - Prevent overlapping viewport requests for the same page while an underlying Chrome command is pending. Other pages and diagnostic reads remain available.
- Discard expired capture results and stop subsequent capture steps after timeout. Release pending ownership when the underlying call completes, without disconnecting the extension or replaying input.
- Report tab activity, window state, focus, debugger attachment, and screenshot stage/timing through browser diagnostics. Preserve screenshot evidence across subsequent size reads.
Upgrade
pipx upgrade saygo-agent-control --index-url https://pypi.org/simple --pip-args="--no-cache-dir"
saygo setup --client codexRestart the agent client after setup. Replace the contents of the currently loaded extension folder with the development extension ZIP. Manually reload Saygo Browser in chrome://extensions or edge://extensions, then click Connect local bridge. Keep that folder. Update both runtime and extension for complete diagnostics.
Validation and limits
Local checks passed: 13 Python bridge tests and all four JavaScript extension test files, including capture timeout, late-result, pending ownership and diagnostic regression cases.
Windows Chrome 154.0.8037.93 with the extension and WSL MCP client returned fresh screenshots for background, covered, minimized and inactive-tab states. After approximately 84 seconds without requests, the minimized test window still produced a fresh screenshot and the connection remained available. Background observations took approximately 1.4–1.6 seconds in this local sample. No alternate capture source, browser throttling flags, heartbeat or automatic reconnect was needed.
The previously reported intermittent screenshot timeout was not reproduced; this release does not claim to have established or eliminated its underlying cause. A Chrome command that never completes remains pending rather than being canceled by detaching the debugger. Lock-screen, suspend, long-term idle and other operating systems were not validated by these live checks.
Desktop binaries and Chrome Web Store publication are not included.
Saygo v0.4.9
Saygo 0.4.9 — Reliable browser scrolling and persistent connections
- Keep the browser bridge open after request timeouts, malformed or oversized responses, and handshake errors. Return errors without automatically replaying input; ignore late responses by request ID.
- Allow queries and screenshots while an earlier input is pending. Reject overlapping input until the underlying call finishes, and include the stalled operation in timeout diagnostics.
- Use complete mouse scroll gestures for viewport and targeted pane scrolling. This avoids the raw wheel acknowledgement stall observed during live browser testing.
- Protect the last browser tab from automated closing, and prevent stopping an extension session from terminating Chrome through stale process metadata.
- Preserve the installed extension ID during upgrades unless explicitly overridden.
- Account for long-press duration in extension, bridge and client timeouts.
- Teach external agents and built-in models to start around half a pane, retain overlap, reduce to 10–20% near a target, and adjust after observing the result. Expose browser scroll units in capabilities and observations; provide before/after scroll images to the desktop model.
- Enable configurable targeted scrolling through the built-in QA and desktop action paths.
Upgrade
pipx upgrade saygo-agent-control --index-url https://pypi.org/simple --pip-args="--no-cache-dir"
saygo setup --client codexRestart the agent client after setup. The attached versioned installer can also update managed installations.
Replace the contents of the currently loaded browser extension folder with the development extension ZIP. Manually reload Saygo Browser in chrome://extensions or edge://extensions, then click Connect local bridge. Keep the loaded folder. Update both runtime and extension to obtain all fixes.
The extension's release button remains the explicit disconnect control. Browser exit, extension reload or an external transport failure can still end a connection.
Validation
Control, runtime, desktop and bridge tests cover request recovery, late responses, long-press budgets, extension ID preservation, scroll capabilities and model context. Extension tests cover handshake errors, pending input, last-tab protection, scroll direction and fractional amounts. Optional GUI and hardware tests are not claimed as executed.
Live Windows Chrome/WSL verification confirmed targeted list scrolling down and back up, successful command responses and an intact connection. This does not establish equivalent behavior on every browser or operating system.
Desktop binaries and Chrome Web Store publication are not included.
Saygo v0.4.8
Saygo 0.4.8 — Browser pointer actions
- Add hover, double-click, right-click and configurable long-press actions to the browser extension backend.
- Validate mouse coordinates against the active viewport before dispatch.
Upgrade
pipx upgrade saygo-agent-control
saygo setup --client codexRestart the agent client after setup. Replace the contents of the currently loaded browser extension folder with the development extension ZIP, then reload Saygo Browser in chrome://extensions or edge://extensions and reconnect the local bridge. Update both the runtime and extension to use the new actions.
The attached versioned installer can also update managed installations. Desktop installers and Chrome Web Store publication are not included.
Saygo v0.4.7
Saygo 0.4.7 — Scroll the intended browser pane
- Add
scroll_atto the browser extension backend and the shared CLI/MCP action interface. - Target a viewport coordinate or an observation-mapped percentage/image/crop coordinate. Positive amounts scroll up; negative amounts scroll down; one unit requests 100 CSS pixels.
- Validate wheel amounts and viewport bounds before sending input. Existing centered scrolling and mouse dragging keep their behavior.
Upgrade
pipx upgrade saygo-agent-control
saygo setup --client codexThe attached versioned installer can also update a managed installation. Restart the agent client after setup.
This feature changes browser extension code: replace the loaded extension files with the attached development extension ZIP, preserving the folder, then Reload Saygo Browser from chrome://extensions or edge://extensions and click Connect local bridge. Keep the loaded directory. Both the runtime and extension must be updated to use scroll_at.
Choose a point inside the intended pane, then call device_act with a fresh observation ID and an action such as {"type":"scroll_at","x":35,"y":60,"coordinate_space":"percent","amount":-3}. Observe afterwards to verify movement. At a pane boundary, the browser may scroll an ancestor.
Validation covers coordinate conversion, capability exposure, both scroll directions, fractional amounts, and rejection of invalid input. Live verification of the BOSS page is pending extension reload.
Desktop installers and Chrome Web Store publication are not included.