11 Commits
Author SHA1 Message Date
5cd7c7e690 fix(backend): decode grep and shell output off the host code page (#2178)
* fix(backend): decode grep and shell output off the host code page

Chinese Windows decodes ripgrep and execute pipes as cp936, which crashes grep and silently drops UTF-8 command output. Patch both at startup so an Octop release fixes #1959 without a new harness build.

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

* test(backend): expect the locale code page to win over GBK text

GitHub Windows is cp1252, which accepts the GBK bytes of 中文测试, so those tests were asserting a Chinese round-trip the decoder must not produce. Keep a GBK-only byte that cp1252 rejects.

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

---------

Co-authored-by: jubaoliang <jubaoliang@tencent.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-18 21:49:15 +08:00
jubaoliang 9f99ac29a1 fix: cap python grep fallback so unscoped search cannot OOM the host (#2116)
Agent grep with path=None walks from backend root `/`. Without ripgrep,
deepagents' readline() on /proc/pagemap can grow RSS until the kernel
OOM-kills Octop. Install rg in the images and replace the fallback at
process start with a walk that skips virtual filesystems and bounds each
read (#2101).
2026-10-16 22:18:19 +08:00
10760445d3 fix: keep hung remote backends from blocking boot (#1586)
* fix: keep hung remote backends from blocking boot

S3/Postgres still use the old harness protocol and a per-call event loop, so one stuck List/Get can prevent HTTP from coming up. Run that I/O on a dedicated worker with timeouts, fail the one expert, and remap leftover unwritable workspace paths.

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

* fix: avoid MagicMock workspace_dir in boot timeout test

Windows rejects the mock's stringified path when the fake harness mkdirs workspace_dir. Register the agent with an empty config instead.

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

---------

Co-authored-by: jubaoliang <jubaoliang@tencent.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-04 19:31:59 +08:00
b5a27ffc9f fix: adapt S3/Postgres backends and restore admin storage browse (#1565)
* fix: adapt S3/Postgres backends and restore admin storage browse

Published octop-harness 1.0.1 plus Octop-side spec mapping and protocol
wrap stop expert start and Admin tree listing from failing on the older
deepagents_backends surface. Browse now caches the backend session and
can preview or download files.

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

* fix: keep Windows paths valid in storage browse fixtures

f-string JSON turns backslashes into illegal escapes, so row_to_backend_spec
sees an incomplete filesystem config on Windows CI.

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

* fix: write browse fixture bytes without Windows newline translation

Path.write_text() converts LF to CRLF on Windows, so download assertions
saw b'# hello\r\n'.

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

---------

Co-authored-by: jubaoliang <jubaoliang@tencent.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-04 10:55:57 +08:00
2209cdc90f chore(deps): switch runtime packages to octop-* 1.0.0 (#1136)
Replace orcakit-harness-agent / harness-* with octop-harness, octop-gateway, octop-memory, and octop-browser, and align docs, UI copy, and generated paths.

Co-authored-by: jubaoliang <jubaoliang@tencent.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-25 06:44:24 +08:00
jubaoliang 1a12948c21 feat(storage): add OpenSandbox remote sandbox storage backend 2026-09-06 10:30:40 +08:00
jubaoliang 3f2aec191a fix: serve 404 for stale hashed assets and harden desktop shell
- api: answer a missing /assets/<hash>.js with 404 instead of the SPA
  shell, so the browser no longer rejects index.html as a module script
  ("not a valid JavaScript MIME type") and hides a stale shell left
  behind by an upgrade.
- dashboard: extend the stale-chunk reload regex to also match MIME
  rejection errors surfaced by WebKit / Chrome / Firefox.
- desktop: split the macOS icon onto an 824/1024 canvas (icons.icns) and
  add applyAppIcon / applyTrayIcon so the Dock glyph is not oversized.
- agents: hand harness an absolute workspace_dir on Windows, where the
  agent-facing /.octop/workspaces/<id> form has no drive letter.
2026-08-31 04:47:45 +00:00
jubaoliangandjubaoliang 44a93e728a fix: harden agent delete cleanup and warn about workspace loss (#214)
* fix: harden agent delete cleanup and warn about workspace loss

Preserve backend type when neutralizing Windows host-root specs, run
workspace rmtree off the event loop, and warn in dashboard/CLI that
delete permanently removes the agent workspace.

* style: reformat offline agent delete exception log line

---------

Co-authored-by: jubaoliang <jubaoliang@tencent.com>
2026-08-09 12:15:20 +08:00
Georgyhongbo b13587bcff fix: scope local backend root '/' to workspace on Windows 2026-08-07 14:27:03 +08:00
6762f94c94 Release/0.9.13 (#61)
* docs: adopt develop integration and main-first release flow (#48)

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.

* Fix/codex oauth device flow (#54)

* 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>

* feat(skills): use SkillHub HTTP APIs with source-neutral installs (#55)

* 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>

* Fix/remote browser drag (#50)

* 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>

* fix(yuanbao): persist endpoints and require gateway 0.8.7 (#56)

* 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>

* fix: route context history via harness and real /compact (#57)

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.

* chore: release 0.9.13

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

---------

Co-authored-by: jubaoliang <jubaoliang@tencent.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: 薄生 <67680641+Bosheng0422@users.noreply.github.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Co-authored-by: Panda <163635413+Pandakingxbc@users.noreply.github.com>
Co-authored-by: leoxyang <leoxyang@tencent.com>
2026-07-23 21:58:53 +08:00
jubaoliangandCursor 8d9c169353 Scope default agent backend to workspace on Windows.
root_dir='/' resolves to the process current-drive root on Windows, which
breaks workspace seeding when the agent home lives on another drive.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-11 04:20:09 +00:00