- Web console Channels page: display active channels as config cards, support
save/connect/disconnect with real-time start/stop of channel processes
- Custom dropdown for channel selection (consistent with model selector style),
custom confirmation dialog for disconnect
- Fix channel stop: use sys.modules['__main__'] to access live ChannelManager
- Fix web request pending: move stop logic outside lock, set daemon_threads=True
- Fix reconnect: new asyncio event loop per startup, ctypes thread interrupt,
5s grace period before re-establishing remote connection
- Filter stale offline messages (>60s) pushed after reconnect
- Fix dark mode FOUC: apply theme in <head> before first paint, defer
transition-colors to post-init to avoid animated flash on load
- Fix Safari IME Enter bug: defer compositionend reset via setTimeout(0)
- Fix history scroll: use requestAnimationFrame before scrollChatToBottom
- Limit restore turns to min(6, max_turns//3) on restart
- Fix load_messages cutoff to start at turn boundary, preventing orphaned
tool_use/tool_result pairs from being sent to the LLM
- Merge all assistant messages within one user turn into a single bubble;
render tool_calls in history using same CSS as live SSE view
- Handle empty choices list in stream chunks
- parse [图片: path] markers in text and convert to Gemini inlineData parts
- unify reply path via call_with_tools to reuse multimodal conversion
- keep legacy safety behavior (BLOCK_NONE) and restore safety ratings logging on empty response
- add multimodal request image-part count log for debugging
When numeric model names (e.g., '1') are used with vLLM and configured
in YAML without quotes, they are parsed as integers. This causes
AttributeError when calling startswith() method.
Changes:
- Add type checking for model_type
- Convert non-string model_type to string with warning log
- Prevents crash when using custom numeric model names
Fixes#2664
- Simplify skill-creator installation flow
- Refine skill selection prompt for better matching
- Add parameter alias and env variable hints for tools
- Skip linkai-agent when unconfigured
- Create skills/ dir in workspace on init