Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
360 commits
Select commit Hold shift + click to select a range
09d72e6
feat(dashboard): add remember-me checkbox on the login page
jubaoliang-tencent Sep 26, 2026
0322d09
fix(chat): default-collapse thinking in team rooms only (#1179)
jubaoliang Sep 26, 2026
0c57dbc
test(chat): cover member live bit across tool gaps after host unlock …
jubaoliang Sep 26, 2026
ac8c233
feat(users): add role templates, invite snapshots, and profile avatar…
jubaoliang Sep 26, 2026
8082add
fix(chat): show generic “calling tools” status instead of tool names …
jubaoliang Sep 26, 2026
95a669b
fix(dashboard): add lock icons to account change-password fields (#1184)
jubaoliang Sep 26, 2026
04ed764
docs(fnos): name the fpk packages the release actually ships (#1145)
lihongyuan99 Sep 26, 2026
6cf61fa
fix(db): apply schema v18 via idempotent helper for old restores (#1183)
jubaoliang Sep 26, 2026
9be32b0
feat(connectors): 企查查同时支持一键 OAuth 与 API Key (#1186)
jubaoliang Sep 26, 2026
9a13f53
fix(chat): dedupe duplicate team live-across-tool-gap test (#1187)
jubaoliang Sep 26, 2026
b03978d
chore: release 1.0.2b3
jubaoliang-tencent Sep 26, 2026
6e10ba1
fix: identify pypi.org by hostname and keep PKCE S256 out of tests
jubaoliang-tencent Sep 27, 2026
349aec6
fix: add trailing newline to PKCE test
jubaoliang-tencent Sep 27, 2026
a3851ea
fix: check workspace root isdir only after a host-prefix guard
jubaoliang-tencent Sep 27, 2026
739c03f
Merge pull request #1188 from TencentCloud/release/1.0.2b3
jubaoliang Sep 27, 2026
f441045
Merge pull request #1209 from TencentCloud/chore/sync-develop-after-1…
github-actions[bot] Sep 27, 2026
efa1cd1
docs: refresh README roadmap, anchors, and product sync (#1211)
jubaoliang Sep 27, 2026
c8217c1
docs: refresh README roadmap, anchors, and product sync (#1212)
jubaoliang Sep 27, 2026
ec70e5f
fix(dashboard): define missing --fn-bg-container theme variable (#1216)
dangzitou Sep 27, 2026
b920ed9
feat(dashboard): let each account customize the sidebar (#1218)
jubaoliang Sep 27, 2026
51c937f
style(dashboard): apply Prettier to files that drifted from the forma…
jubaoliang Sep 27, 2026
5b59b03
feat: store role-template id on users.role and harden mobile composer…
jubaoliang Sep 27, 2026
4667bd7
docs: use product names for sibling project links in the README (#1225)
jubaoliang Sep 27, 2026
9d9a36e
Merge branch 'develop' into feature/tencent-realtime-asr
jubaoliang Sep 27, 2026
232030f
chore: release 1.0.2b4 (#1226)
jubaoliang Sep 27, 2026
3608c78
docs(publish): bump version badges in all localized READMEs (#1229)
jubaoliang Sep 29, 2026
6f2bc50
fix: load plugins that still import harness_agent (#1260)
jubaoliang Sep 29, 2026
686dac7
fix(backup): skip the Octop-owned _builtin_skills prefix on zip impor…
dangzitou Sep 29, 2026
a0e876e
fix(dashboard): define the missing --fn-* design tokens (#1240)
dangzitou Sep 29, 2026
a8d42fd
feat(ollama): allow configuring local model download directory (#1279)
Master-Frank Sep 29, 2026
768e907
feat(skills): let octop-assistant answer product and help questions (…
jubaoliang Sep 29, 2026
6c38449
fix(ollama): list local models even when Octop service is off (#1316)
Master-Frank Sep 29, 2026
e6e6328
fix(mobile): stop the JPEG stream after a run of failed captures (#1309)
c020627 Sep 29, 2026
4400702
fix(cli): read and write cli_state.json through the shared JSON helpe…
c020627 Sep 29, 2026
4722ee2
fix(gateway): preserve IM attachment metadata in history (#1276)
locip123 Sep 29, 2026
15dca98
fix(docker): ship the langfuse env var the client actually reads (#1258)
lihongyuan99 Sep 29, 2026
c477263
fix(api): sandbox media preview responses (#1243)
dangzitou Sep 29, 2026
f5e46c9
feat: add Octop↔Octop cloud collab for remote experts (#1281)
jubaoliang Sep 29, 2026
e473dd3
chore: release 1.0.2b5 (#1321)
jubaoliang Sep 29, 2026
2635dd3
chore: sync main into develop after 1.0.2b5
jubaoliang-tencent Sep 29, 2026
91fae28
Merge pull request #1323 from TencentCloud/chore/sync-develop-after-1…
jubaoliang Sep 29, 2026
ded7add
fix: beta upgrade notes and fnpack download resilience (#1327)
jubaoliang Sep 29, 2026
0215b48
feat(experts): add default conversation mode (Ask/Plan/Craft) to expe…
dangzitou Sep 30, 2026
aef2191
feat(skills): per-package copy policy for skill packages (#770) (#1336)
vicfei Sep 30, 2026
0c8a6c3
fix(httpx): honor CIDR entries in NO_PROXY (#1354)
Master-Frank Sep 30, 2026
f5b6eb2
fix(qq-mail): 修复裸非 ASCII 邮件头导致 search_emails/read_email JSON 崩溃 (#1343)
miaowmint Sep 30, 2026
e8be657
fix(desktop): expand the optional wheel overrides under bash 3.2 (#1363)
lihongyuan99 Sep 30, 2026
1ba1155
fix(dashboard): gate SkillPackagesTab detail and copy requests (#1333)
c020627 Sep 30, 2026
98793fb
fix(wechat-ops): scope the publisher token cache to its AppID (#1332)
c020627 Sep 30, 2026
d43bad4
fix(history): bound trajectory events written to the v2 archive (#1331)
c020627 Sep 30, 2026
b693ddf
fix(connectors): retry a transient streamable-HTTP MCP probe once (#1…
c020627 Sep 30, 2026
4bb0414
fix(dashboard): do not cache the timezone fallback when the fetch fai…
c020627 Sep 30, 2026
9114ea7
fix(mobile): settle the install stream exactly once (#1325)
c020627 Sep 30, 2026
a02e3e1
fix(skills): fetch SkillHub rankings through the shared capped HTTP c…
c020627 Sep 30, 2026
b84c12d
feat(memory): configurable distillation call limits (budget, timeouts)
haiyu614 Sep 30, 2026
4aab10a
fix(dashboard): add the missing locale entries for t() keys (#1241)
dangzitou Oct 2, 2026
02241f0
fix(agents): propagate exhausted model retries as failures (#1012)
dangzitou Oct 2, 2026
fb35284
fix(dashboard): browse every drive in the storage-root picker on Wind…
zhilangtaosha Oct 2, 2026
83b2ae2
feat(auth): add LDAP directory login (#1123)
zsuroy Oct 2, 2026
34e6cb9
feat(dashboard): tuck composer extras into a plus-menu flyout (#1513)
jubaoliang Oct 3, 2026
28b64af
feat(fnos): harden App Center install and native startup (#1539)
jubaoliang Oct 3, 2026
f1c94b9
fix(dashboard): center the empty-chat model prompt (#1542)
jubaoliang Oct 3, 2026
82784d2
fix: give the model a concrete retry failure instead of a generic toa…
jubaoliang Oct 3, 2026
709f998
chore: keep infra off api and tidy post-b3 leftovers (#1550)
jubaoliang Oct 3, 2026
c928ddc
fix(fnos): stop native leftover on 8089 so App Center can start again…
jubaoliang Oct 4, 2026
b5a27ff
fix: adapt S3/Postgres backends and restore admin storage browse (#1565)
jubaoliang Oct 4, 2026
f2bc6be
fix(desktop): compare portable versions with parse_version rules (#1561)
MakerFlyFly Oct 4, 2026
2ad1579
feat(connectors): support Agent Mail auth, tools and new-mail tasks (…
dangzitou Oct 4, 2026
95860cc
feat(dashboard): show teams in the memory and channels agent picker (…
jubaoliang Oct 4, 2026
1076044
fix: keep hung remote backends from blocking boot (#1586)
jubaoliang Oct 4, 2026
e2de0de
feat(hitl): hide approval surfaces unless tools can actually pause (#…
jubaoliang Oct 4, 2026
e08730c
fix: restore ask_user_question cards after LangGraph v2 interrupt mov…
jubaoliang Oct 4, 2026
fb28894
fix: stop false stream errors, TLS internal MCP, and overlong tool na…
jubaoliang Oct 4, 2026
d1966d9
feat(connectors): add official Agent Mail logo (#1608)
jubaoliang Oct 4, 2026
7364e7a
fix(dashboard): let the PWA debug page scroll on mobile (#1603)
jubaoliang Oct 4, 2026
0568fdd
fix(hitl): honor allow-all session bypass for later tool approvals (#…
jubaoliang Oct 4, 2026
eb28011
chore: release 1.0.2b6 (#1612)
jubaoliang Oct 4, 2026
f873abc
chore: sync main into develop after 1.0.2b6 (#1637)
github-actions[bot] Oct 5, 2026
c869081
fix(ci): stop stripping Docker Hub name from publish outputs (#1642)
jubaoliang Oct 5, 2026
956e789
fix(update): install portable upgrades without re-resolving dependencies
lymerin Oct 3, 2026
75c274a
fix(dashboard): tunnel peer expert edits and refresh dashboard visual…
jubaoliang Oct 5, 2026
b768944
add bridge cli (#1658)
jubaoliang Oct 5, 2026
7dfbcb7
fix(dashboard): update Yuanbao channel logo (#1670) (#1678)
locip123 Oct 6, 2026
4b17f1c
update discord join link (#1680)
Bosheng0422 Oct 6, 2026
862f43d
feat(dashboard): show thread work status in the chat history rail (#1…
jubaoliang Oct 6, 2026
2571a04
feat(dashboard): show model name on assistant trajectory summaries (#…
jubaoliang Oct 6, 2026
8ac64be
fix(ci): produce advertised FnOS native ARM64 fpk (#1723)
jubaoliang Oct 6, 2026
6ad4bb0
feat(plugins): add arXiv paper search (#1718)
locip123 Oct 6, 2026
11f6d3f
fix(dashboard): raise composer picker panel height and inline knowled…
ChinaSiro Oct 6, 2026
b3b89c0
Merge branch 'develop' into codex/fix-portable-in-app-upgrade
lymerin Oct 7, 2026
ee60e28
feat(dashboard): Telegram allowed user IDs field
nattiini45 Oct 7, 2026
0cf0745
update bottom discord join link
Bosheng0422 Oct 8, 2026
482ef8a
chore: skip pre-commit checks for README-only changes
Bosheng0422 Oct 8, 2026
0c5a46a
Merge pull request #1804 from TencentCloud/fix/updata-readme-discord
Bosheng0422 Oct 8, 2026
6dbe278
Merge remote-tracking branch 'upstream/develop' into feature/tencent-…
Yourdaylight Oct 8, 2026
d8d2621
Merge pull request #1576 from lymerin/codex/fix-portable-in-app-upgrade
liukewia Oct 8, 2026
6dfb076
fix(dashboard): localize remaining hardcoded Chinese UI strings (#1799)
fengyue-xve Oct 8, 2026
25233a4
fix(dashboard): follow app light/dark mode in Monaco editors (#1356)
dangzitou Oct 8, 2026
e9deb58
fix: harden Docker bootstrap, Bridge sessions, and desktop/provider U…
jubaoliang Oct 8, 2026
32bf23a
docs: add Octop Pet to Related projects in README (#1168)
jubaoliang Oct 9, 2026
cc52ef2
docs: update readme banner image (#1838)
lulinzhi37-alt Oct 9, 2026
dfa6c26
chore: require octop-gateway 1.0.1
Bosheng0422 Oct 9, 2026
f043a38
Merge pull request #1773 from nattiini45/feature/telegram-allowed-users
Bosheng0422 Oct 9, 2026
020f2ef
fix(chat): delete checkpoint data when a conversation or user is removed
Bosheng0422 Oct 9, 2026
2bc28ca
test(agents): exercise plan-path rewrite without Windows drive paths
Bosheng0422 Oct 9, 2026
9ba836e
delete conversation and expert data
Bosheng0422 Oct 9, 2026
d135549
Merge pull request #1844 from TencentCloud/chore/octop-gateway-1.0.1
Bosheng0422 Oct 10, 2026
38c79c8
update octop-harness 和 octop-memory
Bosheng0422 Oct 10, 2026
d3ef021
Merge branch 'develop' into fix/delete-persisted-conversation-data
Bosheng0422 Oct 10, 2026
5708981
Merge branch 'develop' into fix/1360-memory-extract-options
Bosheng0422 Oct 10, 2026
7f19f92
fix: preserve desktop listen config and accept folder drops in chat (…
jubaoliang Oct 10, 2026
d13614d
Merge pull request #1003 from Yourdaylight/feature/tencent-realtime-asr
seed30 Oct 10, 2026
69f2419
fix(chat): shrink the database after a conversation is deleted
Bosheng0422 Oct 10, 2026
d1eeaaa
test(agents): exercise plan-path rewrite without Windows drive paths
Bosheng0422 Oct 10, 2026
b5b3d49
merge develop into fix/delete-persisted-conversation-data
Bosheng0422 Oct 10, 2026
af688ec
test(docker): skip image boot checks when docker info hangs
Bosheng0422 Oct 10, 2026
e8c7ae2
fix(docker): skip octop init on restart for external database backend…
fengyue-xve Oct 10, 2026
148dddc
Merge pull request #1855 from TencentCloud/fix/delete-persisted-conve…
Bosheng0422 Oct 10, 2026
544ea75
Merge pull request #1382 from haiyu614/fix/1360-memory-extract-options
Bosheng0422 Oct 10, 2026
97d6e7f
feat(connectors): add Obsidian CLI as a built-in connector (#1856)
Master-Frank Oct 11, 2026
41a557e
feat(connectors): localize the built-in catalog from JSON (#1922)
jubaoliang Oct 12, 2026
815ded9
fix(teams): keep member answers on the room through approval (#1928)
jubaoliang Oct 12, 2026
97f459e
fix(experts): start SQLite when libpq is unavailable (#1934)
jubaoliang Oct 12, 2026
40adfdc
fix(chat): keep assistant message actions visible (#1943)
jubaoliang Oct 12, 2026
aaa0dbd
feat(dashboard): align the permission picker with custom navigation (…
jubaoliang Oct 12, 2026
56bc465
chore: release 1.0.2b7
jubaoliang-tencent Oct 12, 2026
aef4c8a
chore: merge main into release/1.0.2b7
jubaoliang-tencent Oct 12, 2026
664c1fb
Merge pull request #1951 from TencentCloud/release/1.0.2b7
jubaoliang Oct 12, 2026
95e1fc1
fix(skills): skip a skillset skill whose package is not published
seed30 Oct 12, 2026
6f19e9a
fix(providers): clear the API key when authorization is revoked
seed30 Oct 12, 2026
0839f7f
fix(chat): keep a turn sent while history is still loading
seed30 Oct 12, 2026
2aebbe5
test(live): skip Tencent News probe when upstream credits are exhausted
seed30 Oct 12, 2026
37b4947
Merge pull request #1963 from TencentCloud/chore/sync-develop-after-1…
jubaoliang Oct 13, 2026
99b3c17
Merge pull request #1938 from huangcheng/feature/1345-wps-kb-chat-anydoc
huangcheng Oct 13, 2026
0df3dcc
Merge origin/develop into fix/skillhub-skip-missing-package
seed30 Oct 13, 2026
a6db56a
Merge origin/develop into fix/provider-revoke-api-key
seed30 Oct 13, 2026
2b56e1d
Merge pull request #1953 from TencentCloud/fix/provider-revoke-api-key
seed30 Oct 13, 2026
f25e5cb
Merge origin/develop into fix/chat-keep-inflight-turn
seed30 Oct 13, 2026
994c735
Merge pull request #1952 from TencentCloud/fix/chat-keep-inflight-turn
seed30 Oct 13, 2026
417cf96
Merge origin/develop into fix/skillhub-skip-missing-package
seed30 Oct 13, 2026
dc8625c
Merge pull request #1954 from TencentCloud/fix/skillhub-skip-missing-…
seed30 Oct 13, 2026
9200146
docs: add Zenith Hosting deploy option
odpay Oct 13, 2026
e9d0140
fix: bound local knowledge indexing memory and service restarts
Bosheng0422 Oct 13, 2026
227d9e5
Merge pull request #1985 from TencentCloud/feature/knowledge-memory-g…
Bosheng0422 Oct 13, 2026
5aa7847
fix(bridge): keep simultaneous peer logins and tunnel chat attachment…
jubaoliang Oct 13, 2026
23b3cd0
fix(dashboard): treat a zero document cap as unlimited and follow exp…
jubaoliang Oct 13, 2026
657fc2d
feat(channels): let Telegram channels restrict allowed user IDs
Bosheng0422 Oct 12, 2026
f80fa19
chore: require octop-gateway 1.0.1
Bosheng0422 Oct 12, 2026
8ba1cc8
docs: note the restored Telegram allowed-user field
Bosheng0422 Oct 13, 2026
6a5ddae
feat(connectors): add Yuque (语雀) gateway connector (#1936)
Yesno1314 Oct 13, 2026
a087a77
fix(bridge): accept peers that advertise the default loopback URL (#1…
jubaoliang Oct 13, 2026
8f1bfbe
Merge branch 'develop' into feature/telegram-allowed-user-ids
Bosheng0422 Oct 13, 2026
87a8d52
Merge pull request #1993 from TencentCloud/feature/telegram-allowed-u…
Bosheng0422 Oct 13, 2026
179c731
fix(bridge): do not treat a WebSocket 403 as a missing route (#1997)
jubaoliang Oct 14, 2026
053c741
Revise hosting section in README
odpay Oct 14, 2026
2c9c2d4
Revise README_CN
odpay Oct 14, 2026
ebcdbf9
feat(chat): mid-turn steering for dashboard conversations (#1300) (#1…
huangcheng Oct 14, 2026
d6bdb3b
docs: add Lighthouse and CVM deploy badges beside Zenith
Bosheng0422 Oct 14, 2026
73556e3
fix: let in-app browsers download files through a short-lived link (#…
alison-xx Oct 14, 2026
d9cf6f7
fix(dashboard): don't submit edits and renames on the IME confirm Ent…
alison-xx Oct 14, 2026
812d1b8
docs: polish cloud deploy badges
Bosheng0422 Oct 14, 2026
0407ef6
docs: localize cloud deploy heading
Bosheng0422 Oct 14, 2026
a8c0b58
fix(cli): explain an unset default model and show what agents fall ba…
alison-xx Oct 14, 2026
c20dc38
fix(dashboard): keep bridge cards compact and update one row at a tim…
jubaoliang Oct 14, 2026
26eab95
docs: add support for China mirror in Docker setup (#2034)
liukewia Oct 14, 2026
5e71aea
Merge pull request #1969 from odpay/codex/zenith-badge
Bosheng0422 Oct 14, 2026
e65cd6f
fix(chat): keep steer, approvals, and stream errors consistent (#2037)
jubaoliang Oct 14, 2026
8bb79fa
ci: upload desktop and FnOS release installers to COS (#2036)
liukewia Oct 14, 2026
067d4b4
fix(weixin): keep a durable send token and repair old cron columns (#…
seed30 Oct 14, 2026
ca363e8
feat(memory): add expert-scoped storage maintenance and backup recovery
Bosheng0422 Oct 14, 2026
922ba83
chore: require octop-harness 1.0.3 for memory controls
Bosheng0422 Oct 14, 2026
6422f4d
Merge branch 'develop' into fix/memory-extraction-controls
Bosheng0422 Oct 14, 2026
94fb10a
fix(memory): flush restore backups with a writable handle on Windows
Bosheng0422 Oct 14, 2026
eb5acab
Merge pull request #2041 from TencentCloud/fix/memory-extraction-cont…
Bosheng0422 Oct 14, 2026
ad213d7
chore: release 1.0.2b8
jubaoliang-tencent Oct 14, 2026
9b0e386
fix(providers): recognise embedding models by naming convention (#1929)
mediasambb Oct 14, 2026
abf8cf8
fix: keep original CRLF line endings to minimize the diff
mediasambb Oct 14, 2026
67c2eae
fix: normalize to LF to match the repo line endings
mediasambb Oct 14, 2026
b110392
test(providers): cover embedding name-convention detection (#1929)
mediasambb Oct 14, 2026
f685a85
[1.0.2b8] - 2026-10-14
jubaoliang Oct 14, 2026
a8b3bff
Merge pull request #2055 from TencentCloud/chore/sync-develop-after-1…
github-actions[bot] Oct 14, 2026
f79015b
feat(experts): add knowledge-work expert templates converted from Cla…
Jeffrey8864 Oct 15, 2026
ed5fc0a
fix: peer composer defaults, usage names, and cron titles (#2066)
jubaoliang Oct 15, 2026
58ecaa6
Merge branch 'develop' into fix/docker-init-guard-backend-agnostic
Bosheng0422 Oct 15, 2026
dab0d63
fix(providers): split rerank detection from embedding (#1929 review)
mediasambb Oct 15, 2026
66eb8c4
test(providers): rerank classification + provider-mix regressions (#1…
mediasambb Oct 15, 2026
959e02b
style: reformat with the repo ruff config (line-length 100, ruff 0.15…
mediasambb Oct 15, 2026
c71023d
style: reformat test file with the repo ruff config
mediasambb Oct 15, 2026
6f6de40
rename: avoid basename clash with tests/unit/agents/test_model_flags.py
mediasambb Oct 15, 2026
39a642f
test(providers): rename to test_model_flag_conventions (#1933 pytest …
mediasambb Oct 15, 2026
b2de753
Merge pull request #1868 from fengyue-xve/fix/docker-init-guard-backe…
Bosheng0422 Oct 15, 2026
898056f
Merge pull request #2049 from mediasambb/fix/1929-embedding-name-conv…
Bosheng0422 Oct 15, 2026
cc687bd
fix(setup): stop issuing wizard tokens after the first user exists (#…
jubaoliang Oct 15, 2026
99e479a
Merge pull request #2080 from zsuroy/fix/pwa-update-prompt-permission
zsuroy Oct 15, 2026
9984cc6
fix(docker): include local knowledge runtimes in image (#2082)
ideshun Oct 16, 2026
e084e9c
fix(knowledge): tell the user a restart is what the install needs (#1…
sclfcz Oct 16, 2026
e8d7589
docs: add Pull Request submission guidelines to CONTRIBUTING.md (#2109)
jubaoliang Oct 16, 2026
94f8c49
feat: add agent MCP gateway (#2106)
Pandakingxbc Oct 16, 2026
4140ce0
feat(agents): add health-aware model failover (#2107)
Pandakingxbc Oct 16, 2026
7c02a8b
fix: raise fd limits and coalesce accept resource errors (#2076)
Bosheng0422 Oct 16, 2026
53fab69
feat: add a decision model for skills, tools, and teams (#2098)
jubaoliang Oct 16, 2026
ffd6c30
feat(channels): 打通通道插件安装与运行生命周期 (#1823)
ideshun Oct 16, 2026
8b0793c
feat(memory): add manual profile context and conflict review (#2103)
Bosheng0422 Oct 16, 2026
043f845
feat(skills): export selected skills and skill packages as ZIP (#1990)
jenbonzhang Oct 16, 2026
7ea4e47
feat(experts): add Chinese-first business process expert (#2084)
bobbanga Oct 16, 2026
5cfc758
feat(dashboard): pin chat experts and note missing remote plugins (#2…
jubaoliang Oct 16, 2026
9f99ac2
fix: cap python grep fallback so unscoped search cannot OOM the host …
jubaoliang Oct 16, 2026
b4dbd6b
refactor: improve onOk handling for ONNX model download confirmation …
liukewia Oct 16, 2026
abcd46d
feat(onnx): enable offline loading of ONNX models without Hugging Fac…
liukewia Oct 16, 2026
6aeec3c
fix(dashboard): shorten admin models nav label to "Model" in English …
jubaoliang Oct 16, 2026
e5deed8
fix(knowledge): warn when container recreate drops local runtimes (#2…
jubaoliang Oct 16, 2026
66d0615
fix(fnos): keep Playwright driver in the native package (#2129)
jubaoliang Oct 16, 2026
e244ec1
fix(fnos): encode beta versions so the app store can upgrade (#2131)
jubaoliang Oct 16, 2026
03c0756
chore: release 1.0.2b9
jubaoliang-tencent Oct 16, 2026
4f443ba
Release/1.0.2b9
jubaoliang Oct 17, 2026
e687574
Merge pull request #2137 from TencentCloud/chore/sync-develop-after-1…
github-actions[bot] Oct 17, 2026
0d65f2a
feat(connectors): add DingTalk CLI (dws) connector with device login …
dangzitou Oct 17, 2026
42e41ed
feat: add one-shot tasks and split personalization permissions (#2157)
jubaoliang Oct 17, 2026
4b0c8c5
fix(dashboard): preview legacy .doc safely and scope knowledge upload…
jubaoliang Oct 18, 2026
a6bb6fb
fix(voice): round the Edge TTS rate instead of truncating it (#2165)
lihongyuan99 Oct 18, 2026
0394e28
fix(bridge): keep team member streams alive through refresh (#2159)
jubaoliang Oct 18, 2026
bdc85fd
fix(channels): move QQ group policy after credentials (#2181)
Pandakingxbc Oct 18, 2026
5cd7c7e
fix(backend): decode grep and shell output off the host code page (#2…
jubaoliang Oct 18, 2026
a2890ae
chore: release 1.0.2
jubaoliang-tencent Oct 18, 2026
dd9dce4
Merge pull request #2184 from TencentCloud/release/1.0.2
jubaoliang Oct 18, 2026
64a1222
Merge pull request #2186 from TencentCloud/chore/sync-develop-after-1…
github-actions[bot] Oct 18, 2026
66e4cfc
fix(infra): relocate wizard password file under OCTOP_HOME with legac…
legend91019 Oct 19, 2026
c4d92f7
fix(dashboard): keep the media provider modal usable when a tool swit…
Jay0130-a Oct 19, 2026
31510ec
fix(portable): propagate bundled packages to Python subprocesses (#2044)
chqcjq Oct 19, 2026
b84dbf3
fix(desktop): add frameless edge and corner resize handles for Linux …
jayfeng7 Oct 19, 2026
a864c2b
fix(plugins): bound uploads, downloads and ZIP extraction (#1758)
AbelTomato Oct 19, 2026
58327d2
feat(skills): shared packages, file tree editor, and BOM-safe frontma…
jubaoliang Oct 19, 2026
03500d4
feat(models): support OpenAI Responses API selection (#1984)
Pandakingxbc Oct 20, 2026
b515e75
feat(search): add DeepSeek Search configuration (#2180)
Pandakingxbc Oct 20, 2026
0982cf5
fix(api): localize JWT middleware auth errors via Accept-Language (#2…
jubaoliang Oct 20, 2026
16a2602
fix(chat): refuse to delete a conversation while a reply is in progre…
huangcheng Oct 20, 2026
9738b7d
fix(proactive): send care only after the chat has gone quiet (#2229)
Bosheng0422 Oct 20, 2026
4632d0f
feat(users): limit resource visibility by user group (#2224)
Bosheng0422 Oct 20, 2026
6055fdd
feat(search): add Yuanbao Search to the built-in provider catalog (#2…
Master-Frank Oct 21, 2026
dfe5d61
fix(browser): restore IME input and editing keys
fabianxagent Sep 22, 2026
30f9ba9
feat(dashboard): shared resource avatar picker across create/edit dra…
jubaoliang Oct 21, 2026
18fcda4
Merge pull request #970 from fabianxagent/feature/browser-ime-keyboard
liukewia Oct 21, 2026
a2aa41e
fix: encrypt secrets at rest, subpath deploy, decision defaults (#2295)
jubaoliang Oct 21, 2026
3c54eef
feat: unify AI text assist for forms and chat polish (#2300)
jubaoliang Oct 21, 2026
9bd587f
feat: unify resource visibility UI and extend sharing polish (#2307)
jubaoliang Oct 22, 2026
6797d0e
fix: update platform specification in manifest and README
liukewia Oct 22, 2026
7a78527
feat: share experts by group and separate incoming shares from local …
jubaoliang Oct 22, 2026
6ae53c2
Merge pull request #2323 from liukewia/feature/fnos-differentiate-arch
liukewia Oct 22, 2026
742ae2b
fix(providers): honour the default model the dashboard sends on PATCH
sclfcz Oct 1, 2026
888583a
fix(providers): clear the saved default when PATCH model is empty
sclfcz Oct 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
71 changes: 61 additions & 10 deletions .cursor/skills/publish/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ disable-model-invocation: true
| `CHANGELOG_FILE` | `CHANGELOG.md` | 相对于仓库根目录的路径,文件不存在则跳过 |
| `VERSION_FILE` | `pyproject.toml` | 包含版本号的文件 |
| `VERSION_PATTERN` | `^\s*version\s*=\s*"[^"]+"` | 匹配版本行的正则表达式 |
| `README_FILE` | `README.md` | 含 shields.io 版本徽标的文件(badge 版本号同步升级) |
| `README_GLOB` | `README*.md` | 含 shields.io 版本徽标的 README(含多语言变体,如 `README.md`、`README_CN.md`);全部同步升级 |
| `INIT_VERSION_FILE` | `src/octop/__init__.py` | 含运行时常量 `__version__` 的文件(缺失则跳过并提示) |
| `TAG_PREFIX` | `v` | Git tag 前缀;工作流监听 `v*`,生成 `v0.1.14` 风格标签 |
| `REMOTE` | `origin` | Git 远程仓库名 |
Expand Down Expand Up @@ -175,27 +175,76 @@ git checkout -B {RELEASE_BRANCH_PREFIX}{version} {REMOTE}/{INTEGRATION_BRANCH}

如果 `## [Unreleased]` 标题不存在,在 `# Changelog` 标题行之后插入新条目(若无标题则插入到文件顶部)。

**4b. 升级版本号(同步所有版本来源):**
**4b. 升级版本号(把旧号 X.Y.Z 全部换成当前号 A.B.C):**

发布版本号必须保持多文件一致。依次升级以下位置:
表示「当前发布版本」的钉死号必须一致,**不得只改 `pyproject.toml`**。
把旧版本 `X.Y.Z` 换成目标版本 `A.B.C`。缺文件则提示并继续(不中止)。

必改清单(按顺序,用 Edit 工具精确替换,勿用会误伤 CHANGELOG 历史条目的全局 replace):

1. `VERSION_FILE`(`pyproject.toml`)— wheel / PyPI 的唯一版本源:
```bash
grep -n '^\s*version\s*=\s*"[^"]+"' pyproject.toml
# 用 Edit 工具将该行的 "X.Y.Z" 替换为 "A.B.C"
# "X.Y.Z" → "A.B.C"
```
2. `README_FILE`(`README.md`)— shields.io 版本徽标:
2. 所有匹配 `README_GLOB` 且含 shields.io 版本徽标的 README(含多语言):
```bash
grep -n 'shields.io/badge/version-' README.md
# 用 Edit 工具将 `version-X.Y.Z-orange` 替换为 `version-A.B.C-orange`
grep -l 'shields.io/badge/version-' README.md README_*.md 2>/dev/null
grep -n 'shields.io/badge/version-' {file}
# `version-X.Y.Z-orange` → `version-A.B.C-orange`
```
文件不存在则跳过并提示(不中止)。
当前仓库至少包括 `README.md` 与 `README_CN.md`。全部未命中则提示并继续。
3. `INIT_VERSION_FILE`(`src/octop/__init__.py`)— 运行时常量 `__version__`:
```bash
grep -n '__version__' src/octop/__init__.py
# 用 Edit 工具将 `__version__ = "X.Y.Z"` 替换为 `"A.B.C"`
# `__version__ = "X.Y.Z"` → `"A.B.C"`
```
4. 飞牛 FnOS 两个 manifest 的 `version=`(仓库源文件与 pyproject 保持同一 PEP 440 字符串。`scripts/build-fpk.sh` 打包时会改写成商店可比版本,例如 `1.0.2b8` → `1.0.208`,不要把源文件改成这个编码):
```bash
grep -n '^version=' fnos/docker/manifest fnos/native/manifest
# `version=X.Y.Z` → `version=A.B.C`(两个文件都要改,仍是 PEP 440)
```
5. 飞牛 Docker compose 镜像标签(与本包版本相同,供 FPK 拉取 GHCR):
```bash
grep -n 'ghcr.io/tencentcloud/octop:' fnos/docker/app/docker/docker-compose.yaml
# `ghcr.io/tencentcloud/octop:X.Y.Z` → `:A.B.C`
# 不得改成 `:latest`(测试禁止 latest)
```
文件不存在则跳过并提示(不中止)。
6. `uv.lock` 里可编辑包 `octop` 的版本(漏改会导致 lock 与 pyproject 不一致):
```bash
grep -n -A2 'name = "octop"' uv.lock | head -5
# 将该包的 `version = "X.Y.Z"` 改为 `"A.B.C"`
# 或在改完 pyproject.toml 后执行 `uv lock`,只接受 octop 版本行变化
```

**扫尾(必做):** 全库搜索旧号,把漏网的「当前版本钉死」一并改掉:

```bash
git grep -n --fixed-strings "X.Y.Z"
```

对每一处命中:

| 类型 | 处理 |
|------|------|
| 当前版本钉死(compose / badge / manifest / lock / `__version__` / 文档里「当前版本」) | 换成 `A.B.C` |
| 测试里断言「等于当前发布号」的硬编码 | 改成读 `_pyproject_version()`(或同步为 `A.B.C`) |
| `CHANGELOG.md` 已发布章节(`## [X.Y.Z]` 及正文) | **保留**,不要改历史 |
| 测试夹具里拿旧号做比较(如 `1.0.2b4` vs `1.0.2b5`、解析示例) | **保留** |
| workflow / 注释里的示例旧号(如 `0.9.28`) | **保留**(不是当前钉死) |

提交前再扫必改清单,必须已经没有旧号:

```bash
git grep -n --fixed-strings "X.Y.Z" -- \
pyproject.toml src/octop/__init__.py \
README.md README_CN.md \
fnos/docker/manifest fnos/native/manifest \
fnos/docker/app/docker/docker-compose.yaml \
uv.lock
```

任一文件仍命中旧号:**补改后再提交**,不得带着半套版本号推 release。

**4c. 提交:**

Expand Down Expand Up @@ -317,4 +366,6 @@ git checkout {original_branch}
- 发版后删除 `release/*`;`main → develop` 由 `sync-main-to-develop.yml` 自动同步(失败时再手动补)
- 中止前展示完整错误输出
- 插入新版本条目后保持 `[Unreleased]` 为空
- 把旧版本号 `X.Y.Z` 换成 `A.B.C`:`pyproject.toml`、`__version__`、多语言 README 徽标、`fnos/*/manifest`、`fnos/docker/app/docker/docker-compose.yaml` 镜像标签、`uv.lock` 的 octop 包版本;提交前 `git grep` 必改清单确认无旧号
- 勿改 CHANGELOG 历史章节、测试夹具里的旧版本比较、workflow 示例号
- 推送 tag 后提示用户关注 GitHub Actions 的发布结果
16 changes: 13 additions & 3 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,16 @@ OCTOP_PORT=8088
OCTOP_LOG_LEVEL=info
OCTOP_BIND_HOST=0.0.0.0

# Docker Compose only: host directory bind-mounted to /data/.octop
# OCTOP_DATA=~/.octop

# Docker first-run bootstrap (only used when ~/.octop/octop.db is absent)
# Password must be ≥8 chars with letters and digits (same policy as change-password).
# Future: first boot may randomize this and write it to credential.txt instead.
# Set a valid password to create the admin via `octop init`. Leave empty (or set a
# password the policy rejects) to start the web setup wizard instead; the wizard
# unlock password is written to ~/.octop/octop-login.txt.
OCTOP_ADMIN_USERNAME=admin
# First-run admin password; leave empty to auto-generate a random one (written to ~/.octop/credential.txt)
# First-run admin password; empty / rejected → setup wizard (not a silent random admin)
OCTOP_DEFAULT_PASSWORD=
OCTOP_ADMIN_DISPLAY_NAME=Admin

Expand All @@ -34,7 +39,12 @@ OPENAI_API_KEY=
DASHSCOPE_API_KEY=

# Langfuse observability (optional)
OCTOP_LANGFUSE_ENABLED=false
# Octop's on/off switch is the admin setting in Dashboard → Settings →
# Observability (stored as the settings key `observability_langfuse_enabled`);
# there is no OCTOP_LANGFUSE_ENABLED variable. LANGFUSE_TRACING_ENABLED=false
# is the SDK-level kill switch, honoured by the langfuse client along with the
# public / secret key and base URL below.
LANGFUSE_TRACING_ENABLED=true

# Optional login captcha (boot snapshot; restart after changing).
# Default slider is dashboard-only. Strong providers need both keys.
Expand Down
16 changes: 16 additions & 0 deletions .githooks/pre-commit
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,22 @@ fi
ROOT="$(git rev-parse --show-toplevel)"
cd "$ROOT"

# Documentation-only commits do not need code checks or a dashboard build.
# Include deletions and both sides of renames when deciding what changed.
DOCS_ONLY=1
HAS_CHANGES=0
while IFS= read -r -d '' path; do
HAS_CHANGES=1
case "$path" in
README.md|README.*.md) ;;
*) DOCS_ONLY=0 ;;
esac
done < <(git diff --cached --name-only --no-renames -z)
if [[ "$HAS_CHANGES" == "1" && "$DOCS_ONLY" == "1" ]]; then
echo "[pre-commit] Documentation-only changes — skipping code checks and dashboard build"
exit 0
fi

# Remember staged paths so we can re-add them after auto-format rewrites the worktree.
# Portable (bash 3.2+): avoid `mapfile` (bash 4+ only).
STAGED_FILES=()
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/auto-tag-on-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,8 @@ jobs:
# is exempt). FnOS FPK is cascaded from Release after the GitHub Release
# exists (reuses Release wheel + waits for GHCR image from Docker Publish).
# Desktop and FnOS upsert their packages onto the same v* GitHub Release
# after it exists (FnOS is dispatched from Release.yml).
# after it exists (FnOS is dispatched from Release.yml). Each of those
# workflows then uploads its own assets to COS octop/release/<version>/.
- name: Trigger Release, Docker Publish, and Desktop Package
if: steps.check_tag.outputs.should_publish == 'true'
env:
Expand Down
155 changes: 129 additions & 26 deletions .github/workflows/docker-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,19 @@ name: Docker Publish
# 文档与对外引用统一使用:ghcr.io/tencentcloud/octop
# (Hub 仍用 DOCKERHUB_* secrets 同步推送。)
#
# 架构:ubuntu-latest 打 linux/amd64,ubuntu-24.04-arm 打 linux/arm64,
# 再合并为 :{version} / :latest 多架构清单。飞牛 Docker 版 FPK 共用一份,
# NAS 按本机架构拉取对应镜像层。
#
# 触发路径:
# 1. 人工推送 v* tag → on.push.tags
# 2. Auto Tag 用 GITHUB_TOKEN 推 tag 后显式 workflow_dispatch(token push 不会触发 push 工作流)
# 3. 在任意分支 Run workflow,填 tag=vX.Y.Z(用该分支的 workflow 文件,checkout 指定 tag)
#
# 注意:workflow_dispatch 下 metadata-action 的 type=semver 不可靠,
# 必须从 GITHUB_REF_NAME 显式解析版本号。
# 必须从 tag / 输入显式解析版本号。
# 不要把 DOCKERHUB_USERNAME 放进 job outputs:跨 job 传递会被抹成空,
# 导致只推 GHCR,合并清单时再对空 Hub 名失败。
#
# FnOS FPK 由 Release 成功后自动 dispatch,并等待本工作流推送的 :{version} 就绪。
#
Expand All @@ -21,43 +28,84 @@ on:
tags:
- "v*"
workflow_dispatch:
inputs:
tag:
description: "v* tag to publish (e.g. v1.0.2b6). Required when not running on a tag."
required: false
type: string

permissions:
contents: read
packages: write

jobs:
docker:
name: Build and push image
prepare:
name: Resolve version
runs-on: ubuntu-latest
# 拒绝在非 v* ref 上误跑(例如 UI 里对 main 点 Run workflow)
if: startsWith(github.ref, 'refs/tags/v')
# 拒绝在非 v* ref 上误跑(例如 UI 里对 main 点 Run workflow 且未填 tag)
if: >-
startsWith(github.ref, 'refs/tags/v')
|| (github.event_name == 'workflow_dispatch' && startsWith(inputs.tag, 'v'))
outputs:
version: ${{ steps.ver.outputs.version }}
tag: ${{ steps.ver.outputs.tag }}
ghcr: ${{ steps.image.outputs.ghcr }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Resolve version from tag ref
id: ver
env:
DISPATCH_TAG: ${{ inputs.tag }}
run: |
set -euo pipefail
ref="${GITHUB_REF_NAME}"
if [ -n "${DISPATCH_TAG:-}" ]; then
ref="$DISPATCH_TAG"
else
ref="${GITHUB_REF_NAME}"
fi
case "$ref" in
v*)
echo "version=${ref#v}" >> "$GITHUB_OUTPUT"
echo "tag=$ref" >> "$GITHUB_OUTPUT"
;;
*)
echo "::error::Expected refs/tags/v*, got ref_name=$ref"
echo "::error::Expected v* tag, got ref=$ref"
exit 1
;;
esac

- name: Image names
id: image
run: |
echo "ghcr=ghcr.io/$(echo '${{ github.repository }}' | tr '[:upper:]' '[:lower:]')" >> "$GITHUB_OUTPUT"

build:
name: Build ${{ matrix.arch }}
needs: prepare
runs-on: ${{ matrix.runner }}
env:
DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USERNAME }}
strategy:
fail-fast: false
matrix:
include:
- runner: ubuntu-latest
platform: linux/amd64
arch: amd64
- runner: ubuntu-24.04-arm
platform: linux/arm64
arch: arm64
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: ${{ needs.prepare.outputs.tag }}
fetch-depth: 0

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Log in to Docker Hub
if: env.DOCKERHUB_USER != ''
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
Expand All @@ -70,32 +118,87 @@ jobs:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Image names
id: image
run: |
echo "ghcr=ghcr.io/$(echo '${{ github.repository }}' | tr '[:upper:]' '[:lower:]')" >> "$GITHUB_OUTPUT"
echo "hub=${{ secrets.DOCKERHUB_USERNAME }}/octop" >> "$GITHUB_OUTPUT"

- name: Docker metadata
id: meta
uses: docker/metadata-action@v5
with:
images: |
${{ steps.image.outputs.hub }}
${{ steps.image.outputs.ghcr }}
# 显式 raw tag:兼容 push.tags 与 Auto Tag 的 workflow_dispatch
${{ env.DOCKERHUB_USER != '' && format('{0}/octop', env.DOCKERHUB_USER) || '' }}
${{ needs.prepare.outputs.ghcr }}
# 单架构中间 tag;:{version} / :latest 由 merge 合成多架构清单
tags: |
type=raw,value=${{ steps.ver.outputs.version }}
type=raw,value=latest
type=raw,value=${{ needs.prepare.outputs.version }}-${{ matrix.arch }}

- name: Build and push
uses: docker/build-push-action@v6
with:
context: .
file: ./docker/Dockerfile
push: true
platforms: linux/amd64
platforms: ${{ matrix.platform }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
cache-from: type=gha,scope=docker-${{ matrix.arch }}
cache-to: type=gha,mode=max,scope=docker-${{ matrix.arch }}

merge:
name: Multi-arch manifest
needs: [prepare, build]
# ARM runner 偶发失败时仍发布已有架构,避免卡住 :{version} 与 Docker FPK。
if: always() && needs.prepare.result == 'success' && !cancelled()
runs-on: ubuntu-latest
env:
DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USERNAME }}
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Log in to Docker Hub
if: env.DOCKERHUB_USER != ''
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Log in to GHCR
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Create and push multi-arch manifests
env:
VER: ${{ needs.prepare.outputs.version }}
GHCR: ${{ needs.prepare.outputs.ghcr }}
HUB: ${{ env.DOCKERHUB_USER != '' && format('{0}/octop', env.DOCKERHUB_USER) || '' }}
run: |
set -euo pipefail
any_multi=0
for REG in "$GHCR" "$HUB"; do
[ -n "$REG" ] || continue
sources=()
for arch in amd64 arm64; do
if docker buildx imagetools inspect "${REG}:${VER}-${arch}" >/dev/null 2>&1; then
sources+=("${REG}:${VER}-${arch}")
else
echo "::warning::missing ${REG}:${VER}-${arch}"
fi
done
if [ "${#sources[@]}" -eq 0 ]; then
echo "::error::No platform images published for ${REG}:${VER}"
exit 1
fi
if [ "${#sources[@]}" -ge 2 ]; then
any_multi=1
fi
docker buildx imagetools create \
-t "${REG}:${VER}" \
-t "${REG}:latest" \
"${sources[@]}"
echo "=== ${REG}:${VER} ==="
docker buildx imagetools inspect "${REG}:${VER}"
done
if [ "$any_multi" -eq 0 ]; then
echo "::warning:::${VER} is not multi-arch (ARM image missing). Docker FPK on ARM NAS will not run."
fi
Loading
Loading