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