Skip to content

chore: release 1.0.2b8 - #2050

Merged
jubaoliang merged 46 commits into
mainfrom
release/1.0.2b8
Oct 14, 2026
Merged

jubaoliang merged 46 commits into
mainfrom
release/1.0.2b8

Conversation

@jubaoliang

Copy link
Copy Markdown
Collaborator

[1.0.2b8] - 2026-10-14

新增

  • 对话 mid-turn steering
  • 当前专家记忆备份、恢复与存储维护
  • Telegram 可限制允许的用户 ID

修复

  • Windows 记忆备份恢复;微信旧库定时任务与重启后推送
  • 审批放通、Steer 续跑,以及历史加载中消息消失
  • 知识库上限为 0、本地索引内存、技能集缺包、WPS / 旧版 Word
  • 云端协同多链接与附件;撤销授权未清 API Key
  • App 内下载、输入法回车误提交、命令行默认模型说明

变更

  • 升级 octop-harness 1.0.3 与 octop-gateway 1.0.2

Release checklist

  • CI green
  • Merge this PR into main
  • After merge, GitHub Action auto-pushes v1.0.2b8 tag on main tip

Made with Cursor

seed30 and others added 30 commits October 12, 2026 20:44
Importing a SkillHub skillset failed the whole package when one skill zip returned 404. Missing skills are skipped, and the import still fails when every skill is missing.
Revoke sends api_key null, and the patch treated null as leave unchanged, so the provider stayed authorized. Explicit null now clears only that field.
A history response that lands after send used to replace the list, so the new message disappeared while the task still ran. Long threads also treated that append as a prepend and opened a blank gap.
The live connector probe treated a Tencent News billing error (4007, insufficient credits) as a product failure. Skip that upstream usage limit the same way network failures are skipped, and still fail on bad credentials.
….0.2b7

chore: sync main into develop after 1.0.2b7
feat(knowledge): support .wps/.doc via firecrawl-anydoc (#1345)
Keep the skill-package import fix in Unreleased and take the 1.0.2b7 notes from develop.
Keep the provider revoke fix in Unreleased and take the 1.0.2b7 notes from develop.
fix(providers): clear the API key when authorization is revoked
Keep the in-flight chat turn fix in Unreleased and take the 1.0.2b7 notes from develop.
fix(chat): keep a turn sent while history is still loading
Keep the skill-package import fix in Unreleased alongside the chat and provider notes already on develop.
…package

fix(skills): skip a skillset skill whose package is not published
…uard

fix: bound local knowledge indexing memory and service restarts
#1986)

Distinct logins to the same account were collapsed onto one socket, and remote expert uploads never matched the tunnel allowlist. Inbound names stay local, and larger files split across frames once both sides negotiate it.
…ert defaults (#1989)

A knowledge base with max documents set to 0 was blocked as already full. The chat composer now shows the expert default model and refreshes when that model, knowledge bases, or connectors change.
Operators can limit which numeric user IDs may talk to a Telegram bot in private chats and groups. An empty list still allows anyone who finds the bot.
Telegram allowed user IDs only filter messages once this gateway release is installed.
v1.0.2b7 already advertised it, but the code was missing until this branch.

Co-authored-by: Cursor <cursoragent@cursor.com>
)

Default installs all advertise http://127.0.0.1:8088, so the inbound
self-connect check closed legitimate /api/bridge/ws handshakes with 4004.
…ser-ids

fix(channels): restore Telegram allowed user IDs
Uvicorn reports close-before-accept as an empty HTTP 403. Accept the
socket first, dial the peer directly, and refresh the token once.
)

Let users redirect an in-flight agent turn without stopping it.

Backend (`src/octop/infra/gateway/steer/` + WS channel + chat WS router):
- Per-thread steer queue with server-authoritative admission: idle input
  starts a normal turn; busy input queues against the active turn with
  optimistic binding (`expected_turn_id`), depth/byte caps, idempotent
  retries, and structured reject reasons; HITL-paused turns reject new
  steers.
- The queue drains only at provider-safe boundaries: after a completed
  tool batch, the first model output preempts the stream (clean
  checkpoint tail) and the queued steers continue the same logical turn
  as a real persisted user message; a pure-text answer is never
  interrupted and drains at the natural turn end.
- Lifecycle events on the thread socket: turn.started/resumed/ended,
  steer.queued/drained/discarded/removed/rejected and queue snapshots on
  subscribe; Stop and failures discard undrained items; steers parked
  across an HITL approval pause drain after the approval resumes
  (bounded by a 30-minute park TTL).
- Peer bridge relays the new user_turn fields so cross-instance turns
  keep steer semantics.

Dashboard:
- While a turn streams, Enter parks the draft as a numbered chip above
  the composer; the ↵ button on the chip commits it (immediate user row
  in the transcript, settled by server frames), ✎ reclaims the full text
  into the composer, ✕ removes it.
- The chip panel holds only uncommitted drafts; committed steers are
  represented by their transcript row and settle to the canonical
  server bubble at drain.
- Intermediate harness completion frames no longer close the live
  socket or clear the active turn while a steer turn is in flight.

Docs: `docs/api.md` gains a Mid-turn steering section (frames, delivery
fields, drain-boundary rules); CHANGELOG entry under Unreleased.

Tests: unit coverage for admission/drain/discard/park semantics and the
WS channel boundary behavior; integration coverage for rebind and
multi-subscriber streaming with the new protocol frames.

Co-authored-by: jubaoliang <jubaoliang@gmail.com>
Put the Tencent Cloud one-click deploy options ahead of the existing Zenith Hosting button.

Co-authored-by: Cursor <cursoragent@cursor.com>
…1991)

Every download in the dashboard fetches the file with the JWT, wraps it
in a `blob:` URL and clicks an `<a download>`. WeChat and similar chat-app
WebViews (WeCom, QQ, DingTalk, Feishu, Weibo, Alipay) refuse to save
`blob:` downloads and only say "可在浏览器打开此网页来下载文件", while the
system browser they point to has no Octop session for the API URL.

In those WebViews `saveBlobAsFile` now hands the bytes it already
fetched to `POST /api/downloads/link`, which keeps them in a temp file
behind a random token for 10 minutes, and shows the link with a copy
button. `GET /api/downloads/link/{token}` serves the file as an
attachment without login; the token is the only credential. Uploads are
capped at `max_upload_mb`, links of disabled users stop working, and
expired files are removed on the next create/get. Normal browsers and
the desktop shell are unchanged.
alison-xx and others added 16 commits October 14, 2026 14:22
…er (#1285)

Chinese / Japanese input methods confirm a candidate with Enter. On macOS
that keydown still arrives as `key === "Enter"` (Safari even clears
`isComposing` first but keeps keyCode 229), and Ant Design's
`onPressEnter` (rc-input 1.8) fires on it without a composition check.
The main composer already guards this, but other Enter-to-submit inputs
did not:

- "edit and resend" on a user message resent half-typed pinyin, which
  truncates the conversation at that message and re-runs it
- conversation rename (title bar, session list, minimal nav) saved
  pinyin as the title
- workspace new file/folder and rename, root directory rename,
  knowledge-base folder create/rename and Markdown find

Escape pressed to dismiss the candidate window also cancelled the edit.

Add `isImeComposing()` (same check the composer uses:
`nativeEvent.isComposing || keyCode === 229`) and skip Enter / Escape
handling while composing.

Co-authored-by: Alison <20137720+alison-xx@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
…ck to (#2025)

`octop models active` prints " / " when no global default model is set:
the provider/model separator with nothing on either side and no hint.
`octop agent list` leaves the model cell empty for every agent without
its own model, which reads as "this agent has no model" and hides that
an agent with its own model overrides the global default.

When no default is set, `models active` now says so and shows the
command that sets one. `agent list` fills empty model cells with
"(global: provider/model)", or "(not set)" when there is no global
default either; agents with their own model are unchanged. Both strings
come from the zh/en bundles. JSON output (`--json`) is unchanged.

Refs #1930, #1931
#2024)

Connection actions no longer replace the whole list, and inbound and outbound cards share the same peer-account label.
- Updated README files to include instructions for using a domestic mirror when the official GHCR is unreachable.
- Introduced a new `docker-compose.cn.yml` file for pulling images from the Nanjing University GHCR source without local builds.
- Enhanced documentation to clarify the usage of the new Docker configuration for users in China.
docs: add Zenith Hosting deploy option
Parked steers survive a follow-up approval, session bypass only auto-approves tools that allow it, and a withdrawn steer returns to the composer after the server confirms it is still queued. Stream errors stay in their own bubbles and follow the selected theme color.
* feat(workflows): add COS upload functionality for release assets

- Implemented a new workflow to upload GitHub Release assets to COS.
- Updated existing workflows to trigger the upload process after release creation.
- Enhanced documentation within workflows to clarify asset handling and upload procedures.

* fix(workflows): update COS upload paths in workflows and scripts

- Changed asset upload paths in multiple workflow files to use the new format: `octop/release/<version>/`.
- Updated documentation comments to reflect the new upload structure for clarity.
- Adjusted the upload script to align with the updated path conventions.

* fix(workflows): upload to COS after skipped package jobs

GitHub skips a later reusable workflow when an earlier job in the chain was skipped, even if the release job succeeded. Attach-only desktop runs and FnOS native skips hit that path.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(ci): pin the published coscli v1.0.9 checksum

The linux-amd64 asset hash no longer matches the value baked into the upload script, so COS uploads stop before any object is sent.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(ci): upload release files to COS concurrently

A sequential coscli loop left each multi-hundred-megabyte package waiting on the previous one. Start every file at once and fail the job if any upload fails.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(ci): stream coscli process logs during release upload

Process logs were disabled, so a running upload showed no throughput. Write one log per file and follow it on stdout.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(ci): keep per-file coscli configs named .yaml

coscli rejects a config path that does not end in .yaml. Parallel uploads appended the package name after that suffix, so every file failed before transfer.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(ci): keep Python wheel and sdist off COS

Those packages already go to PyPI and the GitHub Release. COS should only receive desktop installers and FnOS packages.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(ci): read COS release settings from secrets

Reusable workflows only see secrets that callers pass explicitly. Bucket, region, and endpoint now travel with the existing COS credentials.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
…1999)

* fix(weixin): keep a durable send token and repair old cron columns

Rename legacy cron_jobs.trigger to schedule_spec on startup. Store the WeChat context token on the session so cron can still deliver after a restart, and drop tool preambles on team WeChat streams.

* refactor(weixin): keep the send-token rules in one place

The session table no longer imports the gateway package. Token merge and team-stream preamble filtering behave the same.

* chore: require octop-gateway 1.0.2

The WeChat reply fixes and the QQ single-bubble replies ship in this gateway release.

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
…rols

feat(memory): 完善提炼设置与当前专家存储维护、备份恢复
Co-authored-by: Cursor <cursoragent@cursor.com>
@jubaoliang
jubaoliang merged commit f685a85 into main Oct 14, 2026
13 checks passed
@jubaoliang
jubaoliang deleted the release/1.0.2b8 branch October 14, 2026 23:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants