chore: sync develop onto main after 0.9.21 - #237
Merged
Conversation
Use a bottom Drawer for account settings on small screens, restore the historic Elegant Rose default brand, and persist light/dark preference with palette under the shared theme localStorage key. Co-authored-by: Cursor <cursoragent@cursor.com>
* fix: Update schema when restoring octop/lightclaw backups * feat: enhance error logging for OctopError in exception handlers * feat: enhance backup restore process to include IM channel reloading * feat: extend backup restore functionality to include cron job reloading * feat: add JWT secret capture and restore functionality during backup processes * fix: update Chinese translation for presetProviders term in zh.json * feat: implement Unix crontab semantics for weekday handling in cron triggers Added functionality to translate numeric Unix weekdays to names and updated the cron trigger builder to support Unix-style expressions. Enhanced unit tests to validate the new behavior for various weekday formats and ranges. * feat: enhance backup restore functionality with ownership remapping - Updated `restore_backup_file` to accept a `user` parameter for identifying the restoring admin. - Added `owner_user_id` option in CLI for specifying ownership during LightClaw migration archives. - Implemented user ownership remapping in the database during system backup restoration. - Enhanced user handling in backup processes to ensure proper ownership assignment and data integrity. - Updated tests to validate new ownership remapping behavior during migration restores. * refactor: streamline SQL query formatting in backup test case - Simplified the SQL query execution in the `_make_migration_backup` function by removing unnecessary line breaks for improved readability.
* feat: support installing plugins from a local ZIP archive Add a POST /plugins/upload endpoint (admin-only) that installs a plugin from an uploaded ZIP, plus a local-file picker in the installed-plugins panel with an optional overwrite checkbox. Extract install_archive() from install_url() so both paths share zip validation and path-traversal protection. * style: fix ruff formatting of install_url error message
* feat: Docker sandbox, workspace_dir, default_open, HITL and runtime knobs
WIP against local editable orcakit-harness-agent 0.9.20 (PyPI not published yet).
Includes Admin Docker storage, agent workspace_dir, connector default_open,
chat HITL resume/todos UI, and runtime limit fields.
* feat: browser HITL stream listen, gateway preempt stop/cancel
Wire the browser streaming endpoint to listen for human-in-the-loop
events, add gateway-side preemption (stop/cancel) for running agents,
and integrate chat send with the browser session state.
- Add browser stream "listen" endpoint and harness HITL wiring
- Add gateway preemption: stop/cancel handling for running agents
- Wire chat send to browser session state in the dashboard
- Bump harness-gateway to >=0.9.2 and regenerate uv.lock
- Add unit tests for browser stream listen and gateway preemption
* test: fix workspace_dir assertion on Windows
Compare path components (name == agent_id, parent == "agents") instead
of a hard-coded POSIX "/agents/{id}" string suffix, so the check passes
on Windows where Path uses backslash separators.
---------
Co-authored-by: jubaoliang <jubaoliang@tencent.com>
Require stronger passwords end-to-end (setup, Docker bootstrap, change-password), split password settings into a dedicated panel, and replace subagent file editing with a create/edit drawer. Co-authored-by: Cursor <cursoragent@cursor.com>
技能 ZIP 里仅含空目录(如 ai/、data/、scripts/)时,导入后目录会全部丢失: 此前解析 ZIP 直接跳过目录条目,写入时也只调用了文件上传。 - 前端 parseSkillZip:不再跳过目录条目,空目录转为带尾部 "/" 的路径标记 (content 为空)保留;根级技能下的子文件夹(无自己的 SKILL.md)作为 支撑文件一并保留,避免嵌套目录在导入时被丢弃。 - skill_packages:_normalize_relative_path 保留尾随 "/" 目录标记, 不再被 PurePosixPath 悄悄当成文件名。 - skill_package_store:write_skill 对目录标记执行 mkdir,重建空目录。 - skills 路由:新增 _write_skill_files,先 amkdir 空目录再批量上传文件, create / update / URL 导入统一走该函数。 - 补充单元与集成测试:空目录在包存储与工作区中均被重建;孤立的空目录 不会产生伪技能;根级技能与兄弟技能能正确共存。 验证:unit(agents) 技能相关用例通过、ruff clean、前端 parseSkillZip 测试通过。
Keep main an ancestor of develop after the 0.9.21 release. Resolve changelog/version lock conflicts while retaining develop-only docx editing. Co-authored-by: Cursor <cursoragent@cursor.com>
GitHub-hosted runners have no committer name/email, so merge commits failed before conflicts could be handled. Abort only when MERGE_HEAD exists. Co-authored-by: Cursor <cursoragent@cursor.com>
This was referenced Aug 11, 2026
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.
Summary
main(0.9.21)以 merge commit 合入develop,恢复「main 是 develop 祖先」不变量。.docx在线编辑与python-docx。sync-main-to-develop.yml:在 merge/commit 前设置github-actions[bot]身份;仅在存在MERGE_HEAD时merge --abort(避免空 ident 失败后再 abort 二次失败)。Test plan
git merge-base --is-ancestor origin/main HEAD通过make all+ dashboard build)通过origin/main仍是origin/develop的祖先Made with Cursor