Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
6201 commits
Select commit Hold shift + click to select a range
5c55c2d
✨ feat(hetero-agent): let OpenClaw/Hermes run on local desktop (#17961)
AmAzing129 Aug 6, 2026
69a0c7c
💄 style(chat): simplify connect agent copy (#17966)
AmAzing129 Aug 6, 2026
5bcc9fd
✨ feat(desktop): boot the main window straight into the last active w…
Innei Aug 6, 2026
1462660
🐛 fix(layout): render DevDockLayout inside CacheHydrationGate (#17967)
Innei Aug 6, 2026
f18d70e
🐛 fix(conversation): skip empty content block placeholder and fold tu…
tjx666 Aug 6, 2026
5f6b11a
✨ feat(hetero-agent): add Qoder CLI support (#17965)
AmAzing129 Aug 6, 2026
5bac2bb
✨ feat(home): add Minimal / Balanced / Full presets to Home customiza…
Innei Aug 6, 2026
7aaabfc
🐛 fix(server): apply builtin avatar fallback to agent config snapshot…
tjx666 Aug 6, 2026
712bedd
🐛 fix: hide open-in-IDE button when no working directory is set (#17974)
tjx666 Aug 6, 2026
df629b1
👷 ci: add bundle size gate for web dist and desktop asar (#17970)
Innei Aug 6, 2026
5b348e8
🐛 fix(context-engine): carry dynamic activation docs to the LLM paylo…
tjx666 Aug 6, 2026
cc064ee
🐛 fix(context-engine): use absolute dates in agent documents index (#…
tjx666 Aug 6, 2026
fad0cc9
⚡ perf(desktop): eager-load home route for first-screen paint (#17989)
Innei Aug 6, 2026
8de42d5
♻️ refactor(routes): move six route domains into src/features (#17964)
Innei Aug 6, 2026
7345079
🐛 fix(memory): align extraction prompts with schemas (#17988)
nekomeowww Aug 6, 2026
54891b5
✨ feat(db): add agent history job tables for async transfer backfill …
rdmclin2 Aug 7, 2026
3693c85
🐛 fix(agent): enable message channels for Codex agents (#17962)
arvinxx Aug 7, 2026
e869088
✨ feat(sdk): add @lobehub/sdk generated from the OpenAPI spec (#17980)
rdmclin2 Aug 7, 2026
17384f4
♻️ refactor(hetero-agent): centralize local CLI descriptors as single…
AmAzing129 Aug 7, 2026
f842a94
✨ feat(database): add project schema (#17996)
arvinxx Aug 7, 2026
401bc02
🐛 fix(agent): show runtime labels for heterogeneous agents (#17973)
AmAzing129 Aug 7, 2026
cb39321
✨ feat(agent): add style presets to profile artwork generation (#17986)
arvinxx Aug 7, 2026
48dbe5d
✨ feat(chat): make opening questions editable (#18003)
arvinxx Aug 7, 2026
af2e77b
🐛 fix: workspace common issues & account deletion blocker locales (#1…
rdmclin2 Aug 7, 2026
b993126
✨ feat(claude-code): synthesize WebSearch results and render structur…
AmAzing129 Aug 7, 2026
5c6d906
🐛 fix(chat): preload heterogeneous agent model catalog on mount (#17983)
AmAzing129 Aug 7, 2026
eaa66c1
🐛 fix(home): exclude topics from sidebar recents (#18007)
arvinxx Aug 7, 2026
8c62e22
🐛 fix: sync task status across detail and list (#17994)
arvinxx Aug 7, 2026
17bd466
✨ feat(home): restore agent switcher in minimal home layout (#17990)
Innei Aug 7, 2026
d365a2e
✨ feat: support async agent transfer (#17997)
rdmclin2 Aug 7, 2026
922f3e3
🐛 fix(agent): pin root layout direction (#18013)
Innei Aug 7, 2026
30daf9e
🐛 fix(chat): isolate context selections by conversation key (#18011)
AmAzing129 Aug 7, 2026
6fa3ec2
💄 style(task): refine topic conversation drawer (#18009)
arvinxx Aug 7, 2026
e8349e8
✨ feat(goal): add the /goal loop end to end (#18005)
arvinxx Aug 7, 2026
4afc5d4
🐛 fix(topic): stop the scheduled-run watch from reverting its own opt…
arvinxx Aug 7, 2026
4c0ff66
✨ feat: implement Project backend and CLI (#18006)
arvinxx Aug 7, 2026
5d5e066
⏪️ revert(agent): remove root layout direction workaround (#18017)
Innei Aug 7, 2026
08aaa1d
💄 style(agent): collapse Codex reset credits and hide model-specific …
AmAzing129 Aug 7, 2026
846d751
🐛 fix(desktop): allow update downgrades (#18012)
Innei Aug 7, 2026
97635eb
🌐 i18n: add onboarding flow labels (#18021)
Innei Aug 7, 2026
71cc5ac
✨ feat(hetero-agent): render OpenCode and Pi file/shell tool surfaces…
AmAzing129 Aug 7, 2026
49a8407
📝 docs(deep-review): add parser input-space and fix-round re-review r…
AmAzing129 Aug 7, 2026
32925b8
✨ feat: lower default cost estimate warning threshold (#18010)
tjx666 Aug 7, 2026
ee7b69d
✨ feat(db): add capability scopes column to api_keys (#18016)
rdmclin2 Aug 7, 2026
10dbe1a
✨ feat(agent): add goal views and acceptance progress (#17995)
arvinxx Aug 7, 2026
280ec0d
✨ feat(desktop): support split tab views (#18004)
arvinxx Aug 7, 2026
1404dd9
🐛 fix(agent-documents): contain resource tree render errors (#18002)
arvinxx Aug 7, 2026
417cc9b
🔨 chore(onboarding): restrict to 2 task per provider (#18031)
nekomeowww Aug 7, 2026
7f558f2
⚡ perf(ui): cut agent page render cost across sidebars, composer and …
Innei Aug 7, 2026
6ed937b
🐛 fix(hetero-agent): read Hermes session id from stderr (#18027)
AmAzing129 Aug 7, 2026
73b7edc
📝 docs(acceptance): clarify comparison layouts (#18033)
arvinxx Aug 7, 2026
ec9ba6f
🐛 fix(hetero-agent): surface cloud auth failures (#18035)
arvinxx Aug 7, 2026
0334243
♻️ refactor(topic): remove legacy paused status and hash icon (#18036)
arvinxx Aug 7, 2026
3e489f1
🗃️ db: add project identifier column (#18034)
arvinxx Aug 7, 2026
9633335
🐛 fix(hetero-agent): surface cloud auth failures (#18040)
arvinxx Aug 8, 2026
89ff60f
🗃️ chore(db): add payload column to agent history job tables (#18043)
rdmclin2 Aug 8, 2026
e08bf97
✨ feat: support agent copy (#18030)
rdmclin2 Aug 8, 2026
b3c9545
✨ feat(goal): show a live goal card and lighten acceptance interactio…
arvinxx Aug 8, 2026
c1037e7
💄 polish task scheduling and home running card (#18037)
arvinxx Aug 8, 2026
7b4333d
💄 style(agent): show agent role beside the name in agent pickers (#18…
arvinxx Aug 8, 2026
0c7e2c7
✨ feat(auth): support API key scopes (#18029)
rdmclin2 Aug 8, 2026
46f991e
🐛 fix(model-bank): align GPT-5.6 Terra and Luna pricing (#18026)
ImSingee Aug 8, 2026
1cb2fbf
✨ feat(agent): move channels & statistics into a profile Segmented sw…
arvinxx Aug 8, 2026
a96e35f
🐛 fix: read market accessToken from DB in server-side runtimes to pre…
hardy-one Aug 8, 2026
6b55ea4
🐛 fix(shared-tool-ui): keep select-to-submit keyboard-only in AskUser…
tjx666 Aug 8, 2026
03929d2
♻️ refactor: migrate reasoning effort params to user-level model-inst…
tjx666 Aug 8, 2026
20afc09
♻️ refactor(local-system): consolidate tool dispatch into a shared ru…
tjx666 Aug 8, 2026
afa1cfe
🐛 fix(hetero-agent): prefer platformAgentId for OpenClaw agent select…
AmAzing129 Aug 8, 2026
86f6b26
✨ feat(goal): split goal creation from task creation and teach the co…
arvinxx Aug 8, 2026
b0fbd5f
🐛 fix(openapi): keep /users/me reachable by restricted API keys (#18063)
rdmclin2 Aug 8, 2026
098beec
✨ feat(work): redesign the product gallery (#18055)
arvinxx Aug 8, 2026
0a82e13
✨ feat(acceptance): streamline media rejection feedback (#18053)
arvinxx Aug 8, 2026
9bb79eb
🐛 fix(chat): render direct @Agent execution and replies in the parent…
arvinxx Aug 8, 2026
10f5875
✨ feat(agent): polish work summary and acceptance handoff (#18067)
arvinxx Aug 8, 2026
32086f3
📝 docs(agent-testing): guard Electron screenshot framing (#18072)
arvinxx Aug 8, 2026
78f1327
✨ feat(task): let users remove a task's delivery acceptance (#17895)
arvinxx Aug 8, 2026
435f5eb
🐛 fix(agent): keep the topic running mark owned by the main run (#18039)
arvinxx Aug 8, 2026
7e7965b
💄 style(notification): strip markdown in inbox list preview (#18078)
arvinxx Aug 8, 2026
51e24a0
🐛 fix(task): serialize task callback delivery (#17668)
arvinxx Aug 8, 2026
1183af3
🔧 chore(acceptance): local OpenAI-compatible LLM stub for keyless acc…
arvinxx Aug 8, 2026
dc97669
✨ feat(goal): unify goal creation flow (#18091)
arvinxx Aug 9, 2026
d633b07
🐛 fix(agent-builder): persist suggestion chips via tiered SWR cache (…
tjx666 Aug 9, 2026
1d8e1ef
🗃️ chore(db): add agent history job groups junction table (#18081)
rdmclin2 Aug 9, 2026
a2dbb59
🐛 fix(chat): make error-card retry reachable, effective, and visible …
arvinxx Aug 9, 2026
62adb7d
💄 Polish goal creation experience (#18079)
arvinxx Aug 9, 2026
30389b5
💄 style: compact edited files summary card (#18099)
arvinxx Aug 9, 2026
975e21c
🐛 fix(agent): make creator task callbacks durable (#18089)
arvinxx Aug 9, 2026
3a0d5f2
🐛 fix(local-file-shell): report real match count for file-scoped cont…
arvinxx Aug 9, 2026
57b581c
💄 style(chat): AskUserQuestion polish — lighter selected option & neu…
tjx666 Aug 9, 2026
2ac9116
✨ feat(onboarding): stream understanding generation progress (#18105)
nekomeowww Aug 9, 2026
c0a4f1b
🐛 fix(chat-input): stop deleting unsent composer drafts (#18097)
Innei Aug 9, 2026
c224004
✨ chore(skill): add safe git cleanup workflow (#18087)
arvinxx Aug 9, 2026
8effa2c
✨ feat(acceptance): screen programmatic-test checks, add audio eviden…
arvinxx Aug 9, 2026
e32e2ef
♻️ refactor: consolidate Hono routers (#18098)
arvinxx Aug 9, 2026
86991be
♻️ refactor: inject graph runtime context continuously (#17761)
cy948 Aug 9, 2026
682dcdf
🐛 fix(hetero): persist terminal errors after gateway cleanup (#18090)
arvinxx Aug 9, 2026
b530ec7
🐛 fix(hetero-agent): harden Windows CLI spawning (#18095)
AmAzing129 Aug 9, 2026
8aa1e9b
✨ feat(onboarding): add Notion understanding source (#18110)
nekomeowww Aug 9, 2026
a789dd9
🐛 fix(goal): require confirmation for goal launch even in auto-run mo…
arvinxx Aug 9, 2026
2b38ac8
✨ feat(resource): path-based category routes, library-style home and …
arvinxx Aug 9, 2026
632ad3d
✨ feat(portal): open topic & thread side-by-side via drag or menu (#1…
arvinxx Aug 9, 2026
8e73aee
🐛 fix(desktop): make split view collapse cleanly on tab switch and cl…
arvinxx Aug 9, 2026
d7db40d
✨ feat(agent-group): async history backfill for group transfer & copy…
rdmclin2 Aug 9, 2026
9baa806
💄 style(locale): add beta feedback channel copy (#18115)
rdmclin2 Aug 9, 2026
dcf241c
chore: remove LOBE marker references from source code comments (#18092)
arvinxx Aug 9, 2026
ae0f27a
🐛 fix(portal): pass a MigrationTarget to useTopicMigrationPending (#1…
rdmclin2 Aug 9, 2026
067e81f
✨ feat(home): preview acceptance links in portal (#18103)
arvinxx Aug 9, 2026
74dcf0f
✨ feat(agent): add an avatar studio with brand-style one-click genera…
arvinxx Aug 9, 2026
7c91fe2
✨ feat(agent-tracing): visualize context composition (#18114)
arvinxx Aug 9, 2026
b168cd4
🐛 fix(agent): handle missing working directories (#18071)
arvinxx Aug 9, 2026
cd474df
✨ feat(model-runtime): estimate audio input costs (#17949)
sudongyuer Aug 9, 2026
c0c56d6
💄 style: merge goal tracker into task callback card (#18112)
arvinxx Aug 9, 2026
2345aa1
✨ feat(agent-quota): add usage calendar and burnout projection (#18117)
arvinxx Aug 9, 2026
4bf7040
✨ feat: inject recent same-channel history & trim unsupported IM mess…
arvinxx Aug 9, 2026
5fd00cc
🐛 fix: refine topic open interactions (#18120)
arvinxx Aug 9, 2026
68a3189
✨ feat(group): member permissions, and personal model choice on share…
rdmclin2 Aug 10, 2026
a58d181
✨ feat(chat): support web voice messages (#17744)
sudongyuer Aug 10, 2026
6aec6d1
🐛 fix(hetero-agent): wait for Pi settlement after compaction (#18133)
AmAzing129 Aug 10, 2026
26dc379
🐛 fix(agent-group): keep group membership lifecycle intact on transfe…
rdmclin2 Aug 10, 2026
f267232
✨ feat: add dedicated project coordinator agent (#18054)
arvinxx Aug 10, 2026
f4aeeca
⚡️ perf(i18n): preload locale bundles on language picker hover (#18135)
Innei Aug 10, 2026
b1a562e
✨ feat(topic): default all CLI heterogeneous agents to folder groupin…
AmAzing129 Aug 10, 2026
b1e8840
💄 style(i18n): clarify external agent labels (#18142)
AmAzing129 Aug 10, 2026
393fd75
✨ feat(onboarding): add X understanding source (#18118)
nekomeowww Aug 10, 2026
0642572
🐛 fix(resource): one library section, recent pages that stay visible,…
arvinxx Aug 10, 2026
d65a60e
💬 i18n: clarify onboarding background completion (#18147)
Innei Aug 10, 2026
2c7ac5f
✨ feat(billboard): add in-app CTA actions and unify promo card into B…
Innei Aug 10, 2026
e9b6d00
✨ feat(device): add a Local Sandbox execution environment (#18143)
ONLY-yours Aug 10, 2026
9208806
✨ feat: add versioned onboarding metrics (#18155)
Innei Aug 10, 2026
77bfc1e
✨ feat(home): show open goals in the home rail (#18121)
arvinxx Aug 10, 2026
0a2551e
✨ feat(hetero-agent): support Qoder reasoning effort (#18160)
AmAzing129 Aug 10, 2026
59d479a
♻️ refactor(electron): simplify Device Gateway popover (#18161)
AmAzing129 Aug 10, 2026
f0036bf
🐛 fix(chat-input): keep the library picker reachable when nothing is …
arvinxx Aug 10, 2026
f38de42
♻️ refactor(database): rebuild KnowledgeRepo queries with drizzle (#1…
arvinxx Aug 10, 2026
a9bf96d
✨ feat(apikey): scope workspace API keys to member permissions (#18136)
rdmclin2 Aug 10, 2026
1b4974c
✨ feat(database): hide acceptance evidence from the resource library …
arvinxx Aug 10, 2026
de78912
💄 style(agent-chat): move the terminal button into the header right a…
arvinxx Aug 10, 2026
7abba96
✨ feat(openapi): add api-keys, evals, mcp-servers and usage to the v1…
rdmclin2 Aug 10, 2026
eadf98d
🐛 fix(verify): stop stranding runs in `verifying` (#18164)
arvinxx Aug 10, 2026
b046d60
💄 style(agent-goals): move the goal mechanism explainer into a how-it…
arvinxx Aug 11, 2026
42a7e1d
🐛 fix(topic-auto-summary): stop dispatch crashing on the second page …
arvinxx Aug 11, 2026
f777343
✨ feat(chat-input): store the goal marker as a structured composer ch…
arvinxx Aug 11, 2026
8abf30d
✨ feat: polish acceptance rejection flow (#18168)
arvinxx Aug 11, 2026
7de6a8c
✨ feat(resource): filter library resources by origin (#18170)
arvinxx Aug 11, 2026
3121534
🐛 fix(discord): complete deferred forwarded interactions and handle s…
rdmclin2 Aug 11, 2026
4e10b13
🐛 fix(qoder): restore task progress and unify selectors (#18177)
AmAzing129 Aug 11, 2026
95dfa1d
🐛 fix(device): probe the sandbox helper this app ships, not the one t…
ONLY-yours Aug 11, 2026
72d79fa
🔧 fix(topic-auto-summary): make the workflow opt-in and route it thro…
arvinxx Aug 11, 2026
1463b97
🐛 fix(opencode): surface todo progress (#18179)
AmAzing129 Aug 11, 2026
9191955
✨ feat(home): task-shaped task mode, with a scheduled-tasks block (#1…
arvinxx Aug 11, 2026
9b4f944
✨ feat(device): give the Local Sandbox a working directory instead of…
ONLY-yours Aug 11, 2026
6461bb9
✨ feat(onboarding): defer onboarding redirect on subscription routes …
Innei Aug 11, 2026
00fb3ca
⬆️ chore: bump dependencies (#18186)
Innei Aug 11, 2026
a3b430e
🐛 fix(desktop): keep lone tab title stable on hover (#18188)
Innei Aug 11, 2026
083e231
✨ feat: trace onboarding understanding workflows (#18191)
nekomeowww Aug 11, 2026
3aee848
💄 style(skeleton): replace branded loading states with contextual ske…
Innei Aug 11, 2026
ccacf11
🐛 fix(chat): align terminal panel controls (#18193)
Innei Aug 11, 2026
7018c92
♻️ refactor(react): remove ineffective memo boundaries (#18194)
Innei Aug 11, 2026
3b57a07
🐛 fix(onboarding): stabilize understanding workflow replay (#18204)
nekomeowww Aug 11, 2026
0070127
✨ feat(auth): support sharing auth cookies across subdomains (#18200)
Innei Aug 12, 2026
371140d
♻️ refactor(hetero-agent): drive the model selector from a capability…
Innei Aug 12, 2026
10f24d7
🐛 fix(chat): prevent tool titles from clipping (#18215)
AmAzing129 Aug 12, 2026
0cb2d80
⚡️ perf(desktop): prewarm local database after navigation (#18218)
Innei Aug 12, 2026
61e44df
🐛 fix(hetero): detect Windows CLI agents behind unknown shims and sta…
ONLY-yours Aug 12, 2026
dbb76be
✨ feat(hetero): add CodeBuddy agent support (#18219)
AmAzing129 Aug 12, 2026
50548e7
✨ feat(next): unify asset base URL and namespace app static dirs (#18…
Innei Aug 12, 2026
92189bd
🐛 fix: validate custom provider base URLs (#18223)
tjx666 Aug 12, 2026
c7f2712
✨ feat: add Grok 4.6 reasoning effort support (#18225)
tjx666 Aug 12, 2026
9dfb8e1
✨ feat(onboarding): add wait-estimate and findings copy to Learn your…
Innei Aug 12, 2026
c975c07
✨ feat(onboarding): run confirmed starter tasks immediately (#18224)
nekomeowww Aug 12, 2026
dcc08da
🐛 fix(agents): normalize detected CLI versions (#18227)
AmAzing129 Aug 12, 2026
849c191
✨ feat: add /mode command to switch bot conversation mode (#18197)
rdmclin2 Aug 12, 2026
bce6f88
💄 style: show visible ellipsis actions trigger on agent view-all list…
rdmclin2 Aug 12, 2026
3f17155
✨ feat(acceptance): propose review verdicts and record the reviewer's…
arvinxx Aug 12, 2026
7c87f3e
✨ feat(heterogeneous-agent): add Cursor CLI support (#18229)
AmAzing129 Aug 13, 2026
6f22999
🔧 chore(orb): preinstall LobeHub CLI (#18235)
AmAzing129 Aug 13, 2026
f20a924
✨ feat(agents): add Kimi Code runtime (#18228)
AmAzing129 Aug 13, 2026
e816a83
🐛 fix(agents): handle missing CodeBuddy model catalogs (#18241)
AmAzing129 Aug 13, 2026
a625e35
✨ feat(heterogeneous-agent): support Cursor model selection (#18244)
AmAzing129 Aug 13, 2026
0845f70
🐛 fix(stats): restore page switching in the usage table (#18247)
ONLY-yours Aug 13, 2026
a469efd
🐛 fix(desktop): clean up heterogeneous agent run sessions (#18250)
AmAzing129 Aug 13, 2026
199b971
🐛 fix(heterogeneous-agent): reject missing Amp terminal result (#18251)
AmAzing129 Aug 13, 2026
1c6628e
🐛 fix(task): let links in run output be clicked again (#18253)
ONLY-yours Aug 13, 2026
f6812ce
🐛 fix(hetero): resolve Cursor CLI alias collisions (#18255)
AmAzing129 Aug 13, 2026
8225494
♻️ refactor(agent-signal): drop user-level lab switch for self-iterat…
arvinxx Aug 13, 2026
ae1a506
🐛 fix(model-runtime): parse xAI reasoning text deltas (#18259)
AmAzing129 Aug 13, 2026
705df95
🐛 fix(vite): dedupe editor context runtime (#18261)
AmAzing129 Aug 13, 2026
901f2b7
🐛 fix(onboarding): route finished onboarding to task mode (#18264)
Innei Aug 13, 2026
8c3e59c
🐛 fix(agent): preserve archived tool results losslessly (#18258)
tjx666 Aug 13, 2026
c39ccb3
✨ feat(agent): let the last working sidebar tab close the panel (#18267)
Innei Aug 13, 2026
90abee6
🐛 fix: polish task and Home navigation affordances (#18262)
arvinxx Aug 13, 2026
2eb2c08
✨ feat(daily brief): add action link component (#18249)
arvinxx Aug 13, 2026
453d86a
✨ feat(devdock): add GPU process readout and GPU status panel (#18268)
Innei Aug 13, 2026
0dddd8b
🐛 fix(goal): generate acceptance criteria with AI (#18265)
arvinxx Aug 13, 2026
249aa03
🐛 fix(connector): unlink remote accounts on delete (#18270)
nekomeowww Aug 13, 2026
1e9e435
🐛 fix(onboarding): reconcile providers through revise (#18269)
nekomeowww Aug 13, 2026
6db6c57
🐛 fix(python-interpreter): stop a failed worker from blanking the app…
Innei Aug 13, 2026
a608bd3
🐛 fix(python-interpreter): run the worker as classic, and publish wor…
Innei Aug 13, 2026
c4cbc34
✨ feat: add project workspaces and conversation PoC (#18020)
arvinxx Aug 14, 2026
485f890
🐛 fix(chat): let a message send once the run's visible output ends (#…
arvinxx Aug 14, 2026
2b58238
💄 style(goal): improve running progress card (#18284)
arvinxx Aug 14, 2026
d989c47
🐛 fix(task): clarify topic follow-up action (#18283)
arvinxx Aug 14, 2026
97a9c29
🐛 fix(model-runtime): classify media request errors (#18279)
tjx666 Aug 14, 2026
fb833fb
🐛 fix: improve delete-refusal toasts and large-input query dispatch (…
rdmclin2 Aug 14, 2026
11a4444
✨ feat(heterogeneous-agent): add Grok Build ACP support (#18254)
AmAzing129 Aug 14, 2026
8091fcb
🐛 fix: correct BriefCardActions test assertion for fallback label (#1…
AmAzing129 Aug 14, 2026
5852e09
✨ feat: add Gemini 3.7 Flash descriptions and runtime coverage (#18290)
tjx666 Aug 14, 2026
bdcb348
✨ feat(heterogeneous-agent): support TRAE CLI (#18292)
AmAzing129 Aug 14, 2026
702bf15
🔧 chore: disable Amp-Thread and Co-authored-by trailers in orb commit…
AmAzing129 Aug 14, 2026
8ecd009
🐛 fix(heterogeneous-agent): preserve Grok post-tool stream order (#18…
AmAzing129 Aug 14, 2026
ef8b155
♻️ refactor: migrate form controls to Base UI (#18296)
Innei Aug 14, 2026
0da862f
✨ feat(knowledge-base): soft-hide restricted knowledge bases from mem…
rdmclin2 Aug 14, 2026
9130ed2
✨ feat: add GLM-5.3 always-on thinking and reasoning effort (#18301)
tjx666 Aug 14, 2026
340c865
🐛 fix(agent-signal): bound nightly review pagination (#18307)
nekomeowww Aug 14, 2026
3c09a10
✨ feat(onboarding): expose provider collection outcomes (#18308)
nekomeowww Aug 14, 2026
4965efe
🔥 refactor: remove the in-app /downloads page (#18318)
Innei Aug 14, 2026
14ec086
💄 style: add Gemini 3.7 Flash & GLM-5.3 model support (#18289)
sxjeru Aug 14, 2026
f9ffd7e
🐛 fix(settings): restore form control bindings (#18317)
AmAzing129 Aug 14, 2026
f23574b
♻️ refactor(ui): migrate Alert to Base UI (#18316)
Innei Aug 14, 2026
e71e3fd
✨ feat(task): restore agent chat panel on detail page (#18315)
arvinxx Aug 15, 2026
cd67000
🐛 fix: restore quota window history and align Home tab (#18326)
arvinxx Aug 15, 2026
1056cdf
✨ feat: refine agent sidebar navigation (#18325)
arvinxx Aug 15, 2026
3ab22a9
💄 style(notification): refine inbox item metadata (#18328)
arvinxx Aug 15, 2026
3a03b38
✨ feat(task): expand run conversation viewing (#18285)
arvinxx Aug 15, 2026
12ac3f7
✨ feat(hetero): expose Amp mode selector (#18248)
AmAzing129 Aug 15, 2026
c74230d
🐛 fix: polish task follow-ups and acceptance evidence (#18330)
arvinxx Aug 15, 2026
3fc02f5
✨ feat(desktop): complete Codex app-server session lifecycle (#18275)
AmAzing129 Aug 15, 2026
f21ba83
🐛 fix(home): make acceptance notices dismissible (#18329)
arvinxx Aug 15, 2026
941403a
chore: remove internal LOBE-XXX issue references from code comments (…
arvinxx Aug 15, 2026
daa3fbc
💄 style: hide idle goal input border (#18332)
arvinxx Aug 15, 2026
18d0d03
✨ feat: add document modal actions (#18331)
arvinxx Aug 15, 2026
d8e288d
feat: show selected language label in language switcher (#16231)
BittuBarnwal7479 Aug 15, 2026
e917542
🐛 fix(hetero): pin the CLI runtime type on hetero topics instead of t…
arvinxx Aug 15, 2026
1080c89
♻️ refactor(subscription): remove deprecated Zarinpal locale keys (#1…
tjx666 Aug 15, 2026
67cddfb
🐛 fix(chat): anchor the tool execution timer to the tool message crea…
arvinxx Aug 15, 2026
4e7de38
🐛 fix: adapt page actions for document modal (#18337)
arvinxx Aug 15, 2026
2e740ca
🐛 fix: clarify acceptance plan API key errors (#18049)
arvinxx Aug 15, 2026
6f80b67
✨ feat: add full project list page (#18336)
arvinxx Aug 15, 2026
465a8c8
✨ feat(database): add goals table as independent goal entity (#18335)
arvinxx Aug 15, 2026
e0a07b9
🐛 fix(billboard): await CTA action so the button shows loading (#18342)
Innei Aug 15, 2026
70637b9
✨ feat(expertise): add self-evolving data schema (#18334)
arvinxx Aug 15, 2026
4ee9970
✨ feat(auth): support custom cookie prefixes (#18358)
tjx666 Aug 15, 2026
ef31142
🐛 fix: preserve session on provider key errors (#18343)
arvinxx Aug 15, 2026
edfe5e3
🐛 fix: restore resource document scrolling (#18345)
arvinxx Aug 15, 2026
6402c0e
🐛 fix(docker): include SWC helpers in runtime image (#18297)
orangeboyChen Aug 15, 2026
446027e
♻️ refactor(nav): turn sidebar header select into an identity switche…
Innei Aug 15, 2026
9bd4e0d
💄 fix(home): remove double hover highlight on compact recommendation …
Innei Aug 15, 2026
848cd03
✨ feat(expertise): add model and ingestion backend (#18362)
arvinxx Aug 16, 2026
8ee4969
🚀 release: 20260816 (#18373)
rdmclin2 Aug 16, 2026
363797b
🔖 chore(release): release version v2.2.14 [skip ci]
lobehubbot Aug 16, 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
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
364 changes: 364 additions & 0 deletions .agents/acceptance/PROJECT.md

Large diffs are not rendered by default.

558 changes: 558 additions & 0 deletions .agents/acceptance/common-mistakes.md

Large diffs are not rendered by default.

1,298 changes: 1,298 additions & 0 deletions .agents/acceptance/probe-mock-patterns.md

Large diffs are not rendered by default.

154 changes: 154 additions & 0 deletions .agents/acceptance/references/agent-gateway.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
# LobeHub gateway streaming + tab-switch test harness

Captures store + DOM state at 200ms intervals so we can prove or disprove
claims like "切回 tab 后消息回到了很早以前". Built for gateway-mode chat but
works for any LobeHub streaming session.

## Running a LOCAL gateway for a real closed loop

> Use this when you need to verify the **browser↔gateway** path end-to-end
> (gateway mode / Cloud Sandbox / group broadcast over WebSocket). The probe
> harness below assumes a gateway is already streaming to your browser — this
> section is how you get one locally.

**Why the online gateway can't close the loop locally.** The online gateway
(`agent-gateway.lobehub.com`) verifies the browser's user JWT against the
**production** app's JWKS. A local dev instance signs that JWT with its **own**
`JWKS_KEY`, so the online gateway rejects the WS handshake with
`{"type":"auth_failed","reason":"signature verification failed"}` → close
`1008`. The server→gateway **push** still returns `200` (it uses the static
`AGENT_GATEWAY_SERVICE_TOKEN`, not JWKS) — so events flow server-side but the
browser never receives them. That's why client / SSE / online-gateway are all
**not** a real local closed loop. Confirm the failure shape by hooking
`WebSocket` in the page and reading the first frame after the `auth` send.

**Fix — run the gateway yourself.** The gateway worker lives in a **sibling
repo: look for `agent-gateway/` next to `lobehub/`** (same parent dir). It's a
Cloudflare Worker (`wrangler dev`, Durable Objects in local mode) whose
`verifyToken` checks JWTs against a configurable `JWKS_PUBLIC_KEY` secret. Point
that secret at **your local app's** public key and the local gateway trusts your
local JWT → `auth_success` → full local loop.

```bash
# 1. Generate agent-gateway/.dev.vars (public JWK extracted from JWKS_KEY +
# reuse of AGENT_GATEWAY_SERVICE_TOKEN). Source resolves to
# .records/env/gateway.env by default, else .env.local; override with
# JWKS_SOURCE=<env file>. (Managed agent-testing runs have NO .env.local.)
.agents/acceptance/scripts/agent-gateway/local-gateway-setup.sh

# 2. Start the worker (separate terminal) → http://localhost:8787
cd ../agent-gateway && bun run dev
curl -s -o /dev/null -w '%{http_code}\n' http://localhost:8787/health # → 200

# 3. Decisive check — does the local gateway accept the app's JWT?
node .agents/acceptance/scripts/agent-gateway/local-gateway-probe.mjs
# → RECV: {"type":"auth_success"} ✅ feasible

# 4. Point the APP at the local gateway and RESTART its dev server:
# AGENT_GATEWAY_URL=http://localhost:8787 (client → ws://localhost:8787/ws)
# AGENT_GATEWAY_SERVICE_TOKEN=<unchanged> (matches gateway .dev.vars SERVICE_TOKEN)
# ENABLE_AGENT_GATEWAY=1 (→ serverConfig.enableGatewayMode)
```

Key facts the setup relies on: `JWKS_PUBLIC_KEY` is just `JWKS_KEY` with the
private fields (`d,p,q,dp,dq,qi`) stripped — same `kid`, so signatures verify.
The app's gateway URL flows `AGENT_GATEWAY_URL` →
`getServerGlobalConfig` → `serverConfig.agentGatewayUrl`, and the client builds
the WS URL by swapping `http(s)→ws(s)` and appending `/ws?operationId=…`, so an
`http://localhost:8787` value Just Works. Server-side, the
`GatewayStreamNotifier` is wrapped whenever `AGENT_GATEWAY_URL &&
AGENT_GATEWAY_SERVICE_TOKEN` are set (`AgentRuntime/factory.ts`), and it
registers each op with the gateway via `POST /api/operations/init` carrying only
`{operationId, userId}` — it does **not** upload a per-op public key, which is
exactly why the gateway must already trust the signing key via
`JWKS_PUBLIC_KEY`.

## Files

`scripts/agent-gateway/`

| File | Role |
| ------------------------- | ----------------------------------------------------------------- |
| `local-gateway-setup.sh` | Writes `agent-gateway/.dev.vars` from the app's `.env.local` |
| `local-gateway-probe.mjs` | Signs an app JWT, asserts the local gateway returns auth\_success |
| `probe.js` | Injects a 200ms sampler + `__PROBE_EVENT` marker + `__switchTab` |
| `probe-dump.js` | Stops the sampler and returns `{events, samples}` as JSON string |
| `tab-switch.js` | Runs N round-trip switches between two tabs, marks each step |
| `analyze.mjs` | Node post-processor: timeline + regression detection |

## Standard workflow

```bash
# 1. Start Electron with CDP
.agents/acceptance/scripts/electron-dev.sh start

# 2. Navigate to a chat, switch runtime to Cloud Sandbox (gateway mode)

# 3. Install the probe + helpers
agent-browser --cdp 9222 eval --stdin \
< .agents/acceptance/scripts/agent-gateway/probe.js

# 4. Send a tool-call message — manually or via type+press
agent-browser --cdp 9222 eval "window.__PROBE_EVENT('SENT')"

# 5. Run the multi-switch driver (auto-picks active tab as BACK and the
# rightmost inactive tab as AWAY — edit ROUND_TRIPS / DWELL_MS in the
# file if you want different timing)
agent-browser --cdp 9222 eval --stdin \
< .agents/acceptance/scripts/agent-gateway/tab-switch.js

# 6. Wait for streaming to finish, then dump
agent-browser --cdp 9222 eval --stdin \
< .agents/acceptance/scripts/agent-gateway/probe-dump.js \
> /tmp/probe.json

# 7. Analyze
node .agents/acceptance/scripts/agent-gateway/analyze.mjs /tmp/probe.json
```

The analyzer prints three sections: EVENTS, TIMELINE, REGRESSIONS. If
REGRESSIONS is non-empty it means content/reasoning/childN dropped on the
same topic — the symptom users describe.

## What the probe tracks (and why)

`chat.messagesMap` only stores the top-level `assistantGroup` shell. The
actual streamed content, reasoning, and tool calls live in
`assistantGroup.children: AssistantContentBlock[]`. Any probe that only
reads `m.content` / `m.reasoning` will see zeros throughout streaming and
miss everything that matters. probe.js walks both levels and sums:

- `cT` total content length
- `rT` total reasoning length
- `toolT` total tool-call count
- `childN` number of content blocks

Plus DOM-side signals (`domLen`, search/crawl indicator counts) so you can
tell store-side regressions apart from render-side regressions.

## Gotchas

- **Optimistic new-topic state.** Before the first chunk lands, messages
live under the `<scope>_new` key with `tmp_*` ids and no `topicId` field.
probe.js falls back to those when `activeTopicId` is null.
- **Reasoning resets to 0 are not bugs.** When the assistant finishes
thinking and starts tool-use or text, the streaming reasoning buffer
empties and the finalised reasoning gets sealed into a completed block.
Filter these out manually if needed.
- **DOM length jitters by a handful of chars** because counters like "(10)"
in tool-call labels change as results arrive. analyze.mjs only flags
`domLen` drops greater than 100 chars to ignore that noise.
- **Never identify tabs by innerText.** The active tab's text embeds a
` · <agent name>` suffix, so a search like `'LobeHub Growth'` matches the
active tab when the active agent happens to be LobeHub Growth — and you
end up clicking the tab you're already on. probe.js uses the stable
`data-contextmenu-trigger` attribute (a React `useId()` value that's set
per-tab and survives focus changes) plus `data-active="true"` to mark
the active one. Helpers exposed:
`__listTabs()` / `__clickTabByKey(key)` / `__clickTabByIndex(i)` /
`__activeTabKey()`.
- **`tab-switch.js` fires-and-forgets.** The IIFE kicks off an async loop
and returns immediately so the agent-browser CLI eval doesn't blow past
its default 25 s timeout. Wait on the `SWITCH_LOOP_DONE` event marker
before dumping. Re-running while a loop is in flight is refused — the
chaotic data from overlapping runs is not worth debugging.
Loading