8 Commits
Author SHA1 Message Date
e244ec15ac fix(fnos): encode beta versions so the app store can upgrade (#2131)
The store compares only major.minor.patch, so 1.0.2b6 and 1.0.2b7 both
look like 1.0.2. Pack the pre-release into the patch written to the FPK
manifest while leaving the Python version and image tag unchanged.

Co-authored-by: jubaoliang <jubaoliang@tencent.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-16 23:24:39 +08:00
66d0615368 fix(fnos): keep Playwright driver in the native package (#2129)
The slim step deleted playwright/driver, so the console browser install
failed before Chromium could download. The driver is the bundled Node
runtime, not the browser itself.

Co-authored-by: jubaoliang <jubaoliang@tencent.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-16 23:14:45 +08:00
75c274aefc fix(dashboard): tunnel peer expert edits and refresh dashboard visuals (#1647)
Editing a Bridge expert now loads and saves models, knowledge bases, and connectors on the peer. Also refresh portraits and skill tiles, and make FnOS native start exit on TERM instead of resuming the readiness poll.

Co-authored-by: jubaoliang <jubaoliang@tencent.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-05 18:57:19 +08:00
c928ddcb2a fix(fnos): stop native leftover on 8089 so App Center can start again (#1572)
Co-authored-by: jubaoliang <jubaoliang@tencent.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-04 09:22:18 +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
veenyi cf9d700d61 fix(fnos): 安装向导接管管理员密码,根治 Octop123 被弱密码黑名单拒绝导致 FPK 无法启动 (issue #502)
根因:应用密码策略(src/octop/infra/users/password.py)的常见弱密码黑名单包含 octop123,
而 FnOS FPK 把初始密码写死为 Octop123,首次启动 octop init 报 "password is too common"
直接退出("Octop process exited early"),全新安装的 native / docker FPK 均无法启动。

修复内容:
- 安装向导(wizard/install,native + docker)提供两种密码方式:
  ① 自己输入密码:install_init / install_callback 按应用侧策略预校验(≥8 位、
     含字母和数字、不在常见弱密码黑名单),无效密码在安装阶段直接拦截并中文提示;
  ② 自动生成随机密码(推荐):octop_generate_password 生成 16 位强密码。
- 随机/自定义密码双通道送达:
  ① 应用「设置」窗口(wizard/config)顶部直接显示当前账号与密码(安装/改密时
     由回调渲染占位符模板),用户免翻文件;
  ② 数据目录 octop-login.txt 回落备份,永久保留、随改密同步更新。
- 启动器与容器入口三重兜底:.env 无密码时自动生成;init 因密码策略被拒时
  自动改用随机密码重试一次,并回写 .env 保持一致 —— 存量坏 .env(Octop123)
  升级后首次启动即被救活,不再依赖用户手工清理。
- 应用「设置」窗口支持改密:保持不变 / 随机生成 / 自定义(config_init 前置校验),
  本地版走官方 CLI `octop user passwd` 离线改密(停服→改密→启服防写库冲突),
  Docker 版走 `docker exec octop octop user passwd`;凭据三处同步(.env /
  octop-login.txt / 设置窗口显示)。
- 官方 CLI 管理保障:安装回调注册 octop / octop-cli 到 PATH 并做 `octop version`
  冒烟验证(结果写入安装日志)。
- docker/docker-entrypoint.sh:未设置 OCTOP_DEFAULT_PASSWORD 时自动生成随机密码,
  指定密码被策略拒绝时自动回退随机;credential.txt 增加访问地址行。
- compose / .env.example / README / user-guide 移除 Octop123 默认值与宣传文案。

本地验证:19 个 shell 脚本 bash -n 全过;7 个向导 JSON 全部合法;密码生成 300/300
通过字符集/长度/首字母/末位数字断言;octop_validate_password 与官方
validate_password_policy 对拍 19/19 一致、黑名单 14 项逐字一致;渲染链端到端模拟
(生成→校验→回落保存→设置窗口渲染→JSON 复检)通过。
2026-09-12 08:15:24 +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