chore: release 0.9.19 - #171
Merged
Merged
Conversation
Document the branching model for agents and contributors, and align the publish skill so tags are cut on main only after the release PR merges. Co-authored-by: jubaoliang <jubaoliang@tencent.com> Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(skills): hot-persist skills_disabled without agent rebuild (#47) Avoid scheduling a full harness reload when enabling/disabling skills or finishing SkillHub install, which raced list fetches with AGENT_NOT_FOUND. Also move the experts template "installed" badge to the card footer. Co-authored-by: jubaoliang <jubaoliang@tencent.com> * fix: replace ChatGPT/Codex OAuth PKCE flow with device code flow The PKCE browser-redirect flow used a dynamically built redirect_uri (Octop's own callback URL), but OpenAI's shared Codex CLI OAuth client only whitelists the exact http://localhost:1455/auth/callback used by the local CLI, so every login attempt failed with authorize_hydra_invalid_request regardless of deployment domain. Switch to the device code flow instead: no redirect_uri is involved, so it works no matter how/where Octop is hosted. The backend now requests a user_code + verification URL and polls in the background; the frontend shows the code and lets the user open the verification page instead of doing a popup + postMessage dance. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * style: format codex OAuth device flow --------- Co-authored-by: jubaoliang <jubaoliang@gmail.com> Co-authored-by: jubaoliang <jubaoliang@tencent.com> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
* fix(skills): hot-persist skills_disabled without agent rebuild (#47) Avoid scheduling a full harness reload when enabling/disabling skills or finishing SkillHub install, which raced list fetches with AGENT_NOT_FOUND. Also move the experts template "installed" badge to the card footer. Co-authored-by: jubaoliang <jubaoliang@tencent.com> * fix(skills): fetch SkillHub rankings over HTTP * fix(skills): preserve SkillHub display metadata * feat(skills): use HTTP for SkillHub search and install * refactor(skills): support source-neutral packages --------- Co-authored-by: jubaoliang <jubaoliang@gmail.com> Co-authored-by: jubaoliang <jubaoliang@tencent.com> Co-authored-by: leoxyang <leoxyang@tencent.com>
* feat(browser): support real remote drag with shared canvas pointer Forward CDP mousedown/mousemove/mouseup (with clickCount) so remote browser and desktop can drag instead of pan-to-scroll, and share a connecting indicator while the stream starts. * fix(chat): restore loading earlier messages on scroll up Keep the load-older gate armed across virtual list updates, release the in-flight latch when history declines to start, and expose a clickable fallback when the list does not overflow. Co-authored-by: Cursor <cursoragent@cursor.com> * feat(workspace): clarify path semantics with from_workspace Add from_workspace so workspace UI keeps leading-slash relative paths while chat/tool downloads can pass host-absolute send_file paths through BackendWorkspace, with a host download allowlist. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(workspace): preserve chat document path semantics * fix(workspace): harden file URL and host path checks on Windows Preserve Unix-style file:// paths instead of url2pathname backslashes, decode percent-encoded segments, and deny POSIX system roots like /etc before Path.resolve() on Windows. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(workspace): decode Windows file URLs to native paths Unquote percent-encoded segments in file:///C:/… URLs and normalize via Path so send_file enrichment matches str(Path.resolve()) on Windows. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: jubaoliang <jubaoliang@tencent.com> Co-authored-by: Cursor <cursoragent@cursor.com>
* chore(yuanbao): persist default channel endpoints * chore(deps): require harness-gateway 0.8.7 * docs: note Yuanbao channel update --------- Co-authored-by: leoxyang <leoxyang@tencent.com>
Keep deepagents conversation offloads in the agent workspace via harness-agent≥0.9.12, map catalog context_window into model caps for UI/summarization, and make /compact force summarization on the current thread instead of resetting it.
Resolve CHANGELOG.md conflicts by keeping the released 0.9.13 notes and combining duplicate issue references. Co-authored-by: Cursor <cursoragent@cursor.com>
* feat: PostgreSQL dual-backend for control plane Add SqlitePool|PostgresPool behind DatabasePool, parallel PG migrations, setup wizard defer/bind, pg_dump backups with cross-engine refusal, and memory defaulting to the control-plane DSN when using PostgreSQL. * fix(chat): delete checkpoint data when a conversation thread is deleted Deleting a thread only removed Octop's own metadata row; the actual message history stayed in the agent's LangGraph checkpointer forever, making "delete conversation" cosmetic. Also confirm before deleting a session in the UI, since the action is now genuinely destructive. Checkpoint deletion runs before the metadata row is removed: if it fails outright (not just "nothing to delete"), the thread stays visible/retryable instead of orphaning data with no remaining handle. * fix(memory): stop suggesting pg_dump for portable export of postgres memory The 501 hint told users to "use pg_dump on the memory schema instead". That advice predates the shared-table layout: memory for ALL agents now lives in one harness_memory schema isolated by a namespace column, so a schema-level pg_dump would export every agent's memory, not just the requester's — a cross-agent data exposure if followed on a multi-user install. Document the two migration models where the refusal is implemented: sqlite memory is per-agent files moved via pack/adopt; postgres memory is shared, and the supported way to use it from another host (e.g. OpenClaw's harness-memory bridge with --backend postgres) is pointing that host at the same DSN and namespace — shared, not migrated. * fix(test): update test_slash_compact to renamed SqlitePool The /compact test module still imported the pre-rename DBPool, which broke collection (ImportError) on this branch after develop's compact feature was merged in — DBPool was renamed to SqlitePool (the concrete class) with DatabasePool now the Protocol. DBPool -> SqlitePool at all three sites: the import, the _agent_manager type hint, and the fixture's DBPool(path) instantiation. SqlitePool is the byte-for-byte successor of DBPool and matches how every other test constructs a pool; DatabasePool cannot be used at the instantiation site (a Protocol is not instantiable). pytest -m live now collects cleanly (31 selected, 0 errors); test_slash_compact 3 tests pass. * fix(test): make memory_backend db_path assertion separator-agnostic test_explicit_sqlite_overrides_postgresql_control_plane compared the resolved db_path against the literal "/tmp/ws/memory.sqlite", which the code never produces on Windows: it builds the path with pathlib, so the Windows CI job got "\tmp\ws\memory.sqlite" and the string equality failed. Compare as Path objects so the assertion holds on every OS separator, matching the .as_posix() discipline already used in test_config.py.
…UX (#78) Prevent stale thread URLs when switching experts, stabilize streaming Markdown, fill Memory/Token Usage layouts without nested scroll, and document the WeCom customer group QR. Co-authored-by: jubaoliang <jubaoliang@tencent.com> Co-authored-by: Cursor <cursoragent@cursor.com>
Remove the manual post-merge tagging step from /publish by letting GitHub Actions push v* on main after release/* or hotfix/* merges.
Trees already match after #85; this merge commit makes main an ancestor of develop so future syncs can fast-forward cleanly.
Chore/reconnect main history
Recover from post-deploy hashed-asset mismatches that leave a white screen until a manual soft refresh, with a sessionStorage guard against reload loops. Co-authored-by: Cursor <cursoragent@cursor.com>
feat: support migration from lightclaw
126/yeah were incorrectly pointed at imap.163.com, and NetEase requires an IMAP ID before mailbox access. Centralize mail host presets and harden login/probe for QQ, NetEase, and Gmail. Co-authored-by: Cursor <cursoragent@cursor.com>
fix(connectors): NetEase IMAP host resolution and IMAP ID
…load fix(dashboard): auto-reload once on stale chunk load failures
…stem-paths fix(browser): stop chmod on profiles; use shared ~/.octop/browser-profiles
Unify custom/preset/config provider dialogs around a shared draft-model editing flow so users can fetch remote OpenAI-compatible models, manage them consistently, and only persist changes on explicit save.
#124 squash-landed 0.9.17 content but left main outside develop's ancestor graph; this empty merge restores merge-base checks for Sync.
merge: reconnect main ancestry into develop
Unify file list / file viewer / browser into closable dock tabs with a PR-style path tree and path dedupe; polish account popover and rail UX; harden install mirrors and bump harness-agent. Co-authored-by: Cursor <cursoragent@cursor.com>
feat(dashboard): tabbed chat dock file tree and account UX polish
…ples docs(mirrors): optimize default China mirror examples to Tencent Cloud
Map disabled experts to AGENT_NOT_RUNNING instead of not-found, share session channel icons in chat chrome, improve create-user role picking, and let admins filter token usage by user. Co-authored-by: Cursor <cursoragent@cursor.com>
Map disabled experts to AGENT_NOT_RUNNING instead of not-found, share session channel icons in chat chrome, improve create-user role picking, and let admins filter token usage by user.
…urce-hint feat: expose the active search source in search settings (#109)
…2-alignment chore: align Python target and refresh dependencies
…am i18n Improve plugin manager/CLI diagnostics, custom MCP checks, and gateway stream error localization; ship demo plugins and drop local editable harness-memory. Co-authored-by: Cursor <cursoragent@cursor.com>
…mascot Fix popup dock geometry and fullscreen, surface chat stream errors, tighten Token Usage and Memory turns charts, and share Octop empty-state mascot. Co-authored-by: Cursor <cursoragent@cursor.com>
…s UI Align settings tabs, custom MCP and search providers, plugins admin, and admin users role legend into the shared dashboard layout language. Co-authored-by: Cursor <cursoragent@cursor.com>
Bring v0.9.18 version files/CHANGELOG from main; resolve uv.lock. Also fix Release sync-develop to pass --repo so gh works without checkout. Co-authored-by: Cursor <cursoragent@cursor.com>
…#143) Add install-method upgrade guide and dual-panel version upgrade UI; tidy HTTPS preflight/status layout. Run format-all (Ruff + Prettier) first in make all and pre-commit, re-staging formatted files before the build.
Update docs/assets/qrcode.png and sync the expiry note in README.md / README_CN.md from 2026-08-03 to 2026-08-08.
…8-08 docs: refresh WeCom QR code, extend validity to 2026-08-08
…ir (#157) Keep dashboard chat turns attachable after reconnect, reuse one terminal session store across Workbench and the chat dock, and migrate legacy hard-cut thread titles to clipped titles with ellipsis.
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
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.19] - 2026-08-05
新增
turn_active,重连客户端可 re-subscribe WebSocket 恢复流式输出 (feat(dashboard): chat stream resume via turn_active #168, feat: chat stream resume, shared terminal dock, and thread title repair #157)root_dir下 Linux bubblewrap execute jail(POST /api/filesystem/ensure-bwrap、仪表盘 root 目录树 mkdir/rename)(feat: scoped root_dir bubblewrap jail and workspace path I/O #167)file://与BackendWorkspacefailback 对齐 (feat: scoped root_dir bubblewrap jail and workspace path I/O #167)修复
变更
make all先执行前后端format-all(Ruff + Prettier);pre-commit 在 format 后回写已暂存文件并构建 dashboard (feat(dashboard): polish updates/HTTPS settings and format in make all #143)~/.octop/logs(与octop.log并排),不再落到各 agent workspace 的logs/;行内带[agent=…]orcakit-harness-agent>=0.9.19、harness-gateway>=0.9.1(scoped root execute jail)Release checklist
Made with Cursor