46 Commits
Author SHA1 Message Date
liukewiaandCursor 8bb79fac0c ci: upload desktop and FnOS release installers to COS (#2036)
* 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>
2026-10-14 18:52:57 +08:00
jubaoliang 8ac64be454 fix(ci): produce advertised FnOS native ARM64 fpk (#1723)
* fix(ci): build FnOS native ARM64 fpk when deps have no wheel

esdk-obs-python is sdist-only, so --only-binary :all: skipped the advertised
Octop-fnos-native-arm64 asset and left a 404 on the release notes.


* fix(ci): do not require mcp.__version__ in FnOS native smoke check

Pinned mcp 1.28.1 has no module __version__; pipefail now surfaces that
and was blocking both native FPK jobs after install already succeeded.


* fix(fnos): use fnpack platform=arm for native ARM64 packages

fnpack only accepts x86/arm/loongarch/risc-v/all; platform=arm64
failed packing and blocked Octop-fnos-native-arm64-*.fpk.
2026-10-06 22:48:55 +08:00
c86908143f fix(ci): stop stripping Docker Hub name from publish outputs (#1642)
* fix(ci): stop stripping Docker Hub name from publish outputs

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

* fix: restore 1.0.2b6 after main-to-develop sync dropped version pins

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

* docs(publish): bump every current version pin, not just pyproject

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

---------

Co-authored-by: jubaoliang <jubaoliang@tencent.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-05 13:58:10 +08:00
28b64af9db feat(fnos): harden App Center install and native startup (#1539)
Keep the Docker/native wizards on an account-only flow, fail native start
when 8089 never comes up, and vendor harness storage_errors so current
Octop can boot against PyPI harness 1.0.0.

Co-authored-by: jubaoliang <jubaoliang@tencent.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-03 17:43:54 +08:00
ded7adddfc fix: beta upgrade notes and fnpack download resilience (#1327)
* fix(update): load prerelease changelog from versioned PyPI JSON

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

* ci(fnos): retry and cache fnpack downloads

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

---------

Co-authored-by: jubaoliang <jubaoliang@tencent.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-29 21:13:12 +08:00
jubaoliangandCursor 494a921cfc fix(fnos): parse prerelease versions for FPK builds
Digits-only sed left VER as the whole pyproject line for 1.0.2b1, so
native upload and GHCR wait both failed and no .fpk was attached.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-23 22:48:41 +08:00
jubaoliangandCursor 58d960e37a fix(ci,security): retry NSIS install and harden CodeQL hotspots
Retry Chocolatey NSIS with SourceForge fallback; rebuild safe_request URL after validation; use hostname checks in Codex OAuth tests; stop exposing polish exception text.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-23 02:17:41 +00:00
jubaoliang 2fd3a5de7a feat: add Didi connector, improve upgrade progress reliability
- Add Didi (滴滴) MCP connector: catalog entry, remote spec builder,
  credential validation, and dashboard logo asset.
- Report upgrade progress while the upgrade task runs (backend polls
  the task with a timeout loop instead of blocking silently) and
  retry the frontend progress poll a few times before surfacing an
  error, instead of failing on the first transient fetch error.
- Desktop launcher: detect when the bundled portable runtime is newer
  than the installed one and replace it in place (extract to a
  side-by-side dir, swap, keep a previous copy for rollback on
  failure) instead of only extracting on first launch.
- Fix wording in sync-main-to-develop.yml (sync direction was
  described backwards: "develop onto main" -> "main into develop").
2026-09-07 09:04:29 +08:00
liukewia d10df912a6 feat(desktop): ship macOS DMG with drag-to-Applications install (#554)
* fix(deskop): update DMG packaging instructions for macOS to clarify drag-and-drop installation

* feat(darwin): enhance DMG installer with custom background and layout adjustments

Added a custom background image for the DMG installer and adjusted the layout settings for better visual presentation. The background image is copied to the staging area if it exists, and the window dimensions and icon positions have been updated for improved aesthetics.

* chore(workflows): update upload and download artifact actions to latest versions

Updated the GitHub Actions in the octop-desktop workflow to use the latest versions of the upload-artifact and download-artifact actions, improving compatibility and security.

* refactor(darwin): remove old DMG creation script and update Taskfile for new background image

Deleted the outdated create-installer-dmg.sh script and replaced it with an inline script in Taskfile.yml that utilizes dmg-background.png for the DMG installer. This change streamlines the DMG creation process and enhances the visual presentation with the new background image.

* chore(.gitignore): clean up ignored files and directories

Updated the .gitignore file to remove unnecessary entries and ensure that build artifacts are properly ignored, while preserving the build directory for the desktop application. This change enhances the clarity and organization of ignored files.

* feat(darwin): replace DMG background image and enhance detachment logic

Introduced a new JPEG background image for the DMG installer, replacing the previous PNG file. Updated the Taskfile to improve the device detachment process with a dedicated function, ensuring smoother handling during DMG creation. Adjusted layout settings for better visual presentation in the installer window.
2026-09-03 20:42:08 +08:00
liukewia 6a8914d2ba feat(release): append templated download links to GitHub Release notes (#548)
* feat(release): add download links generation for GitHub releases

- Introduced a new script `release_download_links.py` to generate markdown for download links based on version tags.
- Updated the release workflow to append download links to the release notes if not already present.

* refactor(release): update download section headings and links for consistency

- Changed section titles in the release notes from Chinese to English for clarity.
- Updated download link labels in the `release_download_links.py` script to use English terms.
- Adjusted unit tests to reflect the updated headings in the download section.
2026-09-03 19:38:17 +08:00
liukewia 0629253d4e feat(desktop): add NSIS installer support for Windows packaging
- Integrated NSIS installation into the CI workflow for Windows, ensuring `makensis.exe` is available.
- Updated `package-release.sh` to check for `makensis` and provide installation instructions if missing.
- Enhanced documentation to clarify the need for NSIS in Windows packaging.
- Added NSIS project files to facilitate the creation of a Windows installer that includes shortcuts and the WebView2 runtime.

This change improves the Windows packaging process by providing a proper installer experience.
2026-09-02 19:12:36 +08:00
9950f44e5f fix(ci): fail release cascade, attach desktop from any ref, drop duplicate sync triggers (#532)
Dispatching FnOS or develop-sync must fail the Release workflow when gh workflow
run fails, instead of continue-on-error hiding a missed cascade. Desktop package
attaches whenever release_tag is set, so a develop rebuild does not need a
second attach_from_run hop, and attach-only runs use a separate concurrency
group. Sync listens only to workflow_dispatch so it cannot double-fire.

Co-authored-by: jubaoliang <jubaoliang@tencent.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-02 12:11:46 +08:00
18cf7ae058 fix(ci): attach FnOS fpk to the v* GitHub Release (#531)
Stop publishing a separate fnos-<ver> release. After the main Release exists,
upsert Octop-fnos-{docker,native}-<ver>.fpk onto the same v* tag as wheels and
desktop packages, and leave the release notes untouched.

Co-authored-by: jubaoliang <jubaoliang@tencent.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-02 12:11:41 +08:00
jubaoliangandCursor cea720fcbb fix(ci): unify desktop and portable release artifact names
GitHub Release assets mixed unversioned Octop-<plat>.zip with Octop-Desktop-*
and PEP wheels. Name public files Octop-<kind>-<os>-<arch>-<version>.<ext>,
gzip the Linux desktop tarball, and keep the zip payload directory plus the
macOS .app Resources name stable so the Wails shell still unpacks them.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-02 11:19:20 +08:00
jubaoliangandCursor 51d5e49247 fix(ci): repair FnOS workflow parse error and stop re-running CI per release
The FnOS FPK workflow kept a stray env block when the rolling-release step was
removed, so GitHub rejected the whole file and Release's dispatch failed with
"'env' is already defined" — silently, because that job is continue-on-error.

CI also ran the full suite three times per release (release PR, main push, sync
PR) on identical trees. Drop the main push build, since PR checks already run on
the merge result, and skip the post-release sync PR, which is auto-merged before
its checks even start.

Release now passes the tag to the sync workflow so the branch is named after the
version instead of the constant "manual", which every release force-pushed over.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-02 10:29:31 +08:00
jubaoliang e91521a029 fix(ci): rename FnOS fpk to Octop-fnos-{docker,native}-<ver> and drop rolling latest
- scripts/build-fpk.sh: emit Octop-fnos-docker-<ver>.fpk / Octop-fnos-native-<ver>.fpk (variant in the name, not a bare -native suffix).
- fnos-build-fpk.yml: FPK_NAME_PREFIX is now Octop-fnos; stop passing FPK_ITER; the release tag is fnos-<ver> (no -NN iteration, no -vanilla) and the rolling fnos-vanilla-latest release is no longer produced.
- fnos/README.md: document the new versioned artifact names.
2026-08-31 18:33:25 +08:00
jubaoliang fbe33e49c4 feat(tests): add live WeChat/Feishu channel credential probes (#479)
Wire ChannelManager.probe_channel live cases into CI so real iLink and
Feishu app credentials are verified when LIVE_* secrets are configured.
2026-08-30 12:24:36 +08:00
liukewiaandCursor a6d9caafc3 ci: run desktop packaging on PRs (macOS + Windows) (#469)
* chore: update octop-desktop workflow to limit PR builds and refine platform selection

- Adjusted the GitHub Actions workflow to trigger builds for pull requests affecting the `desktop/` directory, limiting them to `darwin-arm64` and `darwin-amd64` platforms only.
- Enhanced platform selection logic to differentiate between pull request and tag dispatch events, ensuring appropriate builds are executed based on the event type.
- Updated README to reflect changes in CI behavior and clarify build processes for different scenarios.

* chore: enhance octop-desktop workflow with dynamic platform selection

- Introduced a new job to dynamically select platforms based on the event type, allowing for more flexible builds.
- Updated the matrix configuration to utilize the output from the platform selection step, streamlining the build process.
- Removed redundant build decision steps, simplifying the workflow and improving clarity.

* ci: build darwin and windows on desktop PRs

PR packaging should cover all macOS and Windows arches; keep Linux for tags/dispatch only.

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

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-29 09:50:35 +08:00
803c859bd9 ci: GHCR+Hub Docker, auto FnOS, cascade desktop after release (#459)
* ci: publish Docker to GHCR+Hub and auto-build FnOS after Release

Cascade FnOS FPK from Release (reuse GHCR image and release wheel), keep
Docker Hub sync, and fix workflow_dispatch version tags for Auto Tag.

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

* ci: cascade desktop package with release and tighten triggers

Stop running the six-platform desktop matrix on every branch push.
Auto Tag dispatches Octop Desktop alongside Release and Docker so
artifacts attach to the same v* GitHub Release.

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

---------

Co-authored-by: jubaoliang <jubaoliang@tencent.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-27 18:22:27 +08:00
veenyi 63a48510c8 fix(fnos): 镜像发布目标改为 Docker Hub jubaoliang/octop(非 ghcr.io)
根据反馈,镜像仓库位于 hub.docker.com:
- 镜像名从 ghcr.io/jubaoliang/octop 改为 jubaoliang/octop(docker pull jubaoliang/octop 无前缀即 Docker Hub)
- workflow 登录从 GHCR/GITHUB_TOKEN 改为 Docker Hub 的 DOCKERHUB_USERNAME/DOCKERHUB_TOKEN(与 docker-publish.yml 同一套凭据)
2026-08-26 19:51:11 +08:00
veenyi a9217bc72e fix(fnos): 镜像命名空间改为 ghcr.io/jubaoliang/octop
- fnos-build-fpk.yml / fnos/README.md / fnos/docker/Dockerfile / docker-compose.yaml / manifest 的镜像引用从 ghcr.io/TencentCloud/octop 改为 ghcr.io/jubaoliang/octop(Docker 仓库名必须小写,原大写 T 的 tag 无法通过 buildx)
- workflow 镜像 tags 增加 ghcr.io/jubaoliang/octop:latest(Docker 版 FPK 的 docker-compose 按 :latest 拉取,此前只推 :vanilla 会导致飞牛拉不到镜像)
2026-08-26 19:51:11 +08:00
jubaoliangandjubaoliang bd1fbdd930 refactor(fnos): split fnos packaging into docker/ and native/ variants (#421)
* fix(tests): align subagent catalog division count with bundled library

The bundled subagent catalog now loads 19 divisions (272 agents), but two
tests still hard-coded an expected count of 16. Update the assertions so the
pre-commit suite is green.

* refactor(fnos): split fnos packaging into docker/ and native/ variants

Restructure the FnOS package layout so the Docker build and the native
installer live under separate directories (fnos/docker and fnos/native)
instead of a single fnos/ tree plus a parallel fnos-native/. Update the
FPK build workflow, build-fpk.sh and fnos/common.sh to source from the
new paths, and refresh fnos/README.md accordingly.

Follow-up to PR #407.

---------

Co-authored-by: jubaoliang <jubaoliang@tencent.com>
2026-08-25 17:24:37 +08:00
veenyiandveenyi d9cb47631d feat(fnos): add FnOS NAS app packaging (Docker + native .fpk) (#407)
* feat(fnos): add FnOS (飞牛 NAS) app packaging for Docker and native installs

Adds the packaging tree to build Octop as a FnOS app center package (.fpk):

- fnos/: Docker-deployable FPK (thin wrapper that runs the Octop image
  via docker-compose on the NAS)
- fnos-native/: native FPK that runs Octop directly on the FnOS host with
  the system Python 3.12 runtime (no Docker required)
- scripts/build-fpk.sh: generic FPK build helper using the official fnpack
  CLI (injects the version from pyproject.toml into the manifest)

Both packages share the same app version as pyproject.toml. Container image
name is referenced as ghcr.io/TencentCloud/octop:latest — maintainers can
republish under their own namespace; the per-repo CI (image build + release
workflow) is intentionally left out of this PR.

* feat(fnos): first-use guide — fixed initial credentials admin/Octop123 with docs

- The previous default password 'octop' does not satisfy the password
  policy (>=8 chars incl. letters and digits) enforced by 'octop init',
  so the bootstrap admin could not be created
- Switch the default to Octop123, identical to the official Docker image
- Manifest install text now prints the initial account/password and tells
  users to change it after first login
- fnos/README.md gains a 'First use' section (credentials table + change
  password guidance) so users never need to dig into data directories

* ci(fnos): add FnOS packaging pipeline as a fork-maintainer template

Provides a complete CI template that builds the Octop Docker image,
the Docker .fpk and the native .fpk, then publishes GitHub releases
(fixed version + rolling latest):

- Trigger: workflow_dispatch only, so it never auto-runs on upstream
- Image namespace referenced as ghcr.io/TencentCloud/octop (placeholder;
  fork maintainers replace with their own)
- Iteration numbering, changelog generation (install-first, no-merges,
  capped at 30 entries) and rolling release management included

* refactor(fnos): dedupe lifecycle scripts into scripts/fnos/common.sh; tighten process kill

Addresses review feedback:

- Extract find_python312 / fix_ownership_and_perms / free_octop_ports into a
  single shared library scripts/fnos/common.sh (injected into both packages'
  cmd/common.sh by build-fpk.sh at package time) instead of duplicating them
  across 7 docker/native lifecycle scripts
- Tighten the leftover-process cleanup: only kill processes under this
  install dir (TRIM_APPDEST), no more broad 'pgrep -f octop' that could kill
  other users' / other installs' processes
- Root README: add an 'FnOS Installation' section pointing to fnos/README.md
  and noting the initial credentials + the #406 dependency for non-root CLI
  installs

* feat(fnos): transparent app icons (512/256/64) — remove white background for dark/light themes

---------

Co-authored-by: veenyi <veenyi@users.noreply.github.com>
2026-08-25 14:29:40 +08:00
liukewiaandGeorgyhongbo 1990428a1b chore: add anti-spam guard for star-farming issues (#300)
* feat: add drag and drop upload for skills zip import

- Add drag & drop upload zone in SkillImportModal
- Style matches reference image with dashed border
- Add i18n strings for drag hint and selected file display
- Update test to handle two remove buttons gracefully
- Keep original file selector button intact

* chore: anti spam bot

---------

Co-authored-by: Georgyhongbo <2280628443@qq.com>
2026-08-14 22:05:33 +08:00
jubaoliangandCursor b5843f1719 ci: set git identity for Sync Main Into Develop
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>
2026-08-11 14:29:35 +00:00
jubaoliangandCursor 77858efc78 docs(ci): harden main→develop sync rules and workflow
Document no develop→main bulk merges and no squash on release PRs.
Update sync workflow to rebuild on conflict and open chore/sync PRs
when develop branch protection blocks direct push.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-06 10:18:42 +08:00
jubaoliangandCursor 72e8730497 chore: sync develop onto main after 0.9.19
Resolve merge conflicts by taking main's release metadata (CHANGELOG,
uv.lock). Replaces the conflicting main→develop sync PR #173.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-06 10:14:12 +08:00
jubaoliang f438438e6f Develop (#150) 2026-08-03 18:27:31 +08:00
jubaoliangandCursor bc96b9f80f chore: merge main into develop after 0.9.18
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>
2026-08-02 09:07:04 +00:00
jubaoliang 0dab5235fb chore: release 0.9.18 (#141) 2026-08-02 16:50:13 +08:00
jubaoliang 5819d504f4 Merge branch 'develop' into feature/dependency-python312-alignment 2026-08-02 09:53:18 +08:00
jubaoliang 42cf519696 chore: sync main into develop after 0.9.17 (#124)
* fix(ci): trigger Sync Main Into Develop via workflow_run

GITHUB_TOKEN-created GitHub Releases do not fire sibling release workflows.
Listen for Release workflow completion instead, and allow manual dispatch.


* chore: release 0.9.17 (#120)

* fix: align sync paths with main and keep Release→Sync dispatch


---------
2026-08-01 11:20:08 +08:00
jubaoliang 2b972b7e9b fix(ci): dispatch Sync Main Into Develop from Release (#125)
Auto Tag starts Release with GITHUB_TOKEN workflow_dispatch; in that
chain, workflow_run and release:published never started Sync. Cascade
explicitly after GitHub Release is created.
2026-08-01 11:18:42 +08:00
luojiyin 3eaa2f89de chore: align Python target and refresh dependencies 2026-07-31 22:46:14 +08:00
jubaoliangandCursor b228ed3b5a fix(ci): trigger Sync Main Into Develop via workflow_run
GITHUB_TOKEN-created GitHub Releases do not fire sibling release workflows.
Listen for Release workflow completion instead, and allow manual dispatch.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-29 04:48:59 +00:00
jubaoliangandCursor 924014d6d2 merge: sync main into develop after 0.9.16
Resolve provider-modal conflicts in favor of the shipped main tip, and fix
Sync Main Into Develop to trigger via workflow_run (GITHUB_TOKEN releases do
not fire sibling release workflows).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-29 04:38:15 +00:00
jubaoliangandCursor 4ed775a2a1 fix(ci): dispatch Release/Docker after auto-tag
GITHUB_TOKEN tag pushes do not cascade to other workflows. After
pushing v*, explicitly workflow_dispatch Release and Docker Publish.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-29 03:59:08 +00:00
jubaoliang f803d9ff61 Chore/sync main into develop (#85) 2026-07-27 19:14:53 +08:00
jubaoliang 2af176b54b Ci/sync main to develop after release (#82) 2026-07-27 19:05:28 +08:00
jubaoliang 4155dcae7f Release/0.9.15 (#80) 2026-07-27 18:43:12 +08:00
jubaoliang 5e94d7029d ci: auto-tag when release PRs merge into main (#79)
Remove the manual post-merge tagging step from /publish by letting
GitHub Actions push v* on main after release/* or hotfix/* merges.
2026-07-27 18:32:17 +08:00
eb686c13e2 Release/0.9.10 (#21)
* feat: workspace file preview, browser workspace, and tooling updates

Consolidate the in-progress workspace changes:
- In-browser preview for PDF/Word/Excel documents (DocumentPreview)
- Harness /workspace/ path normalization for chat file downloads
- Browser workspace UI and remote browser panels
- Docker packaging and CI publish workflow updates
- Dependency bumps (pyproject/uv.lock, dashboard package deps)

* feat(chat): docked file preview, HTML preview, and history pull-refresh

Polish workspace/chat file viewing with dock modes and shared resize,
sandboxed HTML preview, overscroll history refresh for incomplete WS
replies, and a compact input when the chat panel is narrow.

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

* refactor: delegate context usage to harness-agent 0.9.10

Bump orcakit-harness-agent and replace local token estimation with
HarnessAgent.aget_context_usage snapshots, keeping a stream-token
fallback for older wheels. Refresh the dashboard ring for the new
segment shape.

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

* refactor: pass BackendWorkspace paths through without rewriting

Replace extract/normalize helpers with backend_workspace_path so absolute
and relative sources stay as-is. Unify workspace download/read/write on
_workspace_io_path and update dashboard media URL helpers to match.

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

* refactor(chat): unify browser and file panels into ChatDock

Replace separate FilePanel/ChatBrowserPanels/modal paths with a shared
ChatDock shell and useChatDockPanel state. Extract pointer-drag resize,
polish workspace file/media preview, and slim BrowserViewer for the
docked layout.

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

* chore: release 0.9.10

* fix: CI warnings/failures for skillhub subprocess and Windows media preview

Kill and drain timed-out skillhub CLI children so asyncio transports close
on a live loop, and restore workspace-relative plus host-file fallbacks so
Windows drive-letter paths still resolve for media preview/import.

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

* fix(test): use platform default backend for virtual_mode media import

Hard-coding root_dir='/' breaks Windows CI: virtual-mode uploads resolve
outside the process drive root. Match default_agent_backend_spec instead.

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

---------

Co-authored-by: jubaoliang <jubaoliang@tencent.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-19 10:01:05 +08:00
jubaoliangandjubaoliang 60eafec6af chore: release 0.9.8 (#15)
* fix: tolerate connector kind drift when resolving chat popup logos

getConnectorLogo now falls back to a normalized kind (lower-case,\nunderscore/hyphen unified) so connector instances created before the\ncatalog kind was finalized still resolve their logo in the chat picker\ninstead of showing a placeholder.

Co-authored-by: jubaoliang <jubaoliang@tencent.com>

* chore: release 0.9.8

* fix: align dashboard tool labels with backend; bump harness-agent to 0.9.8

---------

Co-authored-by: jubaoliang <jubaoliang@tencent.com>
2026-07-15 16:44:10 +08:00
085506e3f3 Feat/connectors gateway install (#14)
* feat(connectors): add gateway connectors and drop baidu-netdisk/figma

Expand the catalog with QQ Music, Fliggy, Baidu Map, Ctrip Wendao, Meituan Travel, and Yuandian; migrate Tencent News to API key; unify gateway credential probes; remove Baidu Netdisk/Figma OAuth paths.

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

* chore(install): ship Playwright by default and harden install scripts

Make browser tooling a core dependency, drop obsolete optional extras, and improve glibc/Playwright system-deps handling across install.sh/ps1/bat.

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

* feat(desktop): install build deps before Python packages on Linux

Add a build-deps-only path so remote desktop setup can compile extension wheels when system headers are missing.

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

* fix(dashboard): cache update-status checks in localStorage

Deduplicate concurrent PyPI probes across mounts and persist the last known update status with a short TTL.

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

* test(live): add OSS probes, secret helpers, and CI live job

Centralize require_env skipping, document live credentials in .env.example, and wire a secrets-gated live-tests workflow.

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

* chore(tests): rename chat WS integration test and drop dead cases

Align the chat transport test name with WebSocket usage and remove a skipped bootstrap harness test.

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

* fix(ci): unblock typecheck, CodeQL, and drifted live tests

Align mypy with requires-python 3.12 so numpy stubs parse; clarify Fliggy
SHA-256 use for request signing; update live expert/backend assertions
to the lazy Expert catalog and DEFAULT_BACKEND_SPEC with root_dir.

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

* fix(ci): news Skill-Request-Id, workspace live reads, CodeQL FP

Add Tencent News CLI headers required by error 4010; assert expert
seeds via agent.workspace instead of host-rooted backend paths; ignore
Fliggy signing digests in CodeQL (protocol SHA-256, not password KDF).

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

* fix(tests): allow newline-only __init__.py in expert live checks

Office-automation skill packages ship empty package markers; strip()-based
emptiness assertions should not treat those as copy failures.

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

* fix(tests): compare expert seeds via adownload_bytes

Harness aread_text replaces empty/whitespace file bodies with a system
reminder, which broke live office-automation __init__.py checks.

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

---------

Co-authored-by: jubaoliang <jubaoliang@tencent.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-14 19:25:51 +08:00
jubaoliang 30b17554e3 Fix CI pipeline and make the test suite pass; rename project to Octop
CI:
- Drop Python 3.11 from the test matrix (package requires >=3.12); the
  3.11 jobs failed at `uv sync`. Linux and Windows now test Python 3.12.
- Rename tests/unit/infra/setup/tls/test_store.py -> test_tls_store.py to
  fix the pytest import collision (duplicate basename) that aborted
  collection on the 3.12 job.

Source bugs uncovered by the suite:
- Move ACTOR_SYSTEM to a runtime import in infra/cron/job.py (was wrongly
  placed under TYPE_CHECKING, causing NameError at runtime).
- Add missing users-table columns (login_failed_count, login_locked_until,
  preferences_json) in infra/db/migrate.py for legacy schema repair.
- Make auth.update_me honor explicit nulls via model_dump(exclude_unset=True).
- Relax skills hub endpoints to existence/ownership checks (require_agent_row)
  instead of requiring the agent to be running.
- Marshal WebSocket frames onto the owning event loop in chat/ws.py so the
  starlette TestClient portal does not deadlock.
- Include error details in the browser session 503 response.

Tests:
- Update tests to match current source APIs (harness async create/remove/
  rebuild, FakeHarnessAgent skill methods, workspace nested layout, JWT
  middleware, CLI surface, proactive config defaults, general-assistant
  template manifest).
- Migrate WebSocket tests to starlette TestClient(...).websocket_connect
  (httpx 0.28 removed AsyncClient.websocket_connect).
- Skip memory API tests when the optional harness_memory dependency is absent
  via pytest.importorskip.
- Remove the invalid diagnostic test tests/integration/test_diag_e2e.py
  (no assertions; inspected private internals only).

Also includes the pre-existing uncommitted orca -> Octop rename across docs,
README, LICENSE, Dockerfile and docker assets, as requested.
2026-07-10 00:40:24 +00:00
jubaoliang 748d998cf2 first commit 2026-07-09 14:32:36 +00:00