Repository navigation
chore: release 1.0.2b8 - #2050
Merged
Merged
Conversation
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.
…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>
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.
[1.0.2b8] - 2026-10-14
新增
修复
变更
Release checklist
Made with Cursor