Skip to content

Feat/dashboard chat multimodel#34

Open
Fanglinqiang wants to merge 22 commits intoRunchuan-BU:mainfrom
Fanglinqiang:feat/dashboard-chat-multimodel
Open

Feat/dashboard chat multimodel#34
Fanglinqiang wants to merge 22 commits intoRunchuan-BU:mainfrom
Fanglinqiang:feat/dashboard-chat-multimodel

Conversation

@Fanglinqiang
Copy link
Copy Markdown

@Fanglinqiang Fanglinqiang commented Mar 30, 2026

Type of Change

  • Skill (dev) - adds a meta skill in .claude/skills/ (instructions for Claude Code)
  • Skill (runtime) - adds/updates container/skills/ for the chat agent
  • Fix - bug fix or security fix to source code
  • Simplification - reduces or simplifies source code

Description

For Skills

  • I have not made any changes to source code
  • My skill contains instructions for Claude to follow (not pre-built code)
  • I tested this skill on a fresh clone

Fanglinqiang and others added 22 commits March 15, 2026 15:26
- Add built-in HTTP dashboard (port 3847) with 8 tabs: Overview, Groups,
  Tasks, Stats, Alerts, Settings, Models, Skills
- Dashboard features: dark/light theme toggle, zh/en i18n, auto-refresh
  interval selector, per-group message stats, activity charts (messages
  and task runs per day), alert rules management
- Add Telegram channel support (src/channels/telegram.ts)
- Add MiniMax and Qwen model config entries to config.ts
- Add getTaskRunLogs, getActivityStats, getGroupMessageStats to db.ts
- Add parseConfigBlob helper + agentType/notifyUser support in
  registered_groups accessors
- Add agentType and notifyUser fields to RegisteredGroup type
- Fix container-runner.ts path resolution to use import.meta.url
- Update README.md and README.zh-CN.md with dashboard documentation

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Multi-agent biological research pipeline:
- Stage 1: Parallel literature search (PubMed + bioRxiv/medRxiv + KEGG/Reactome)
- Stage 2: Pathway synthesis + ≥5 mechanistic hypothesis generation
- Stage 3: 3-role debate per hypothesis (Supporter / Skeptic / Methodologist)
- Stage 4: Top-3 refinement with full molecular detail
- Stage 5: Wet-lab experimental plan per hypothesis (controls, timeline, risks)

Helper scripts: pubmed-fetch, preprint-fetch, pathway-search
Dockerfile: add litellm + AutoResearchClaw (future use)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Stage 1 now dispatches to 3 different models simultaneously:
- Task A (Claude): real PubMed API + bioRxiv API fetch via Python scripts
- Task B (MiniMax): biomedical knowledge analysis via call_minimax MCP tool
- Task C (Qwen): pathway landscape + regulatory network via call_qwen + pathway-search script

Progress update sent to user after all 3 tasks complete.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add Chinese description and keywords to frontmatter for better matching
- Add explicit auto-trigger instructions at top of skill body
- Agent now recognizes Chinese research requests like "帮我研究" and "提假说"

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Route all agent types (Claude, MiniMax, Qwen) through container runner
  instead of direct API calls, enabling tool use and skills for all models
- Add text event emission from agent-runner for streaming assistant responses
- Filter "No response requested." from chat responses
- Render send_message tool calls as text instead of tool blocks
- Fix model test/display: read env vars from .env fallback chain
- Fix IPC "Unauthorized" warnings for dashboard chat (whitelist 'dashboard')
- Fix chat streaming state stuck when switching chats mid-stream (AbortController)
- Add localStorage persistence for chat sessions
- Fix xattr ENOTSUP error on skill directory copy (docker grpcfuse)
- Improve light mode input contrast and send button styling

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Text was appearing twice because both send_message tool_call events and
assistant text events contained the same content. Track send_message texts
on the frontend and skip duplicate text events. On the backend, skip
output.result when text/send_message events were already streamed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add WeCom (企业微信) as a messaging channel with support for up to 3
bot instances (wc:/wc2:/wc3: JID prefixes). Includes WebSocket
connection, markdown message chunking, proactive Corp API messaging,
and file/image sending.

Also fix duplicate text in dashboard chat when MiniMax returns both
a text event and a send_message tool call with identical content.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ti-bot support

- FeishuChannel: WebSocket long-connection via @larksuiteoapi/node-sdk
- Image/file download via message resources API (native https)
- Multi-bot support (fs:/fs2:/fs3: prefixes)
- Auto-registration: new chats mapped to defaultFolder without manual setup
- Fix log level back to warn, fix jidPrefix for all resource operations
- Add FEISHU2/3_DEFAULT_FOLDER config vars

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…, pyGenomeTracks

Key upstream changes merged:
- OpenRouter/OpenAI-compatible provider support in container-runner
- Tool iteration limit increased to 64
- Memory improvements (_latest.md snapshots)
- cnsplots + pyGenomeTracks plotting tools in container
- Local web channel (optional, disabled by default)
- Discord channel (optional)
- platform.ts cross-platform utilities

Our additions preserved:
- WeCom (3 bots, full implementation)
- Feishu (3 bots, auto-registration, image/file download)
- Dashboard multi-model chat

Fix: sendImage ?? Promise.resolve() for type safety

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add Feishu (Lark) channel: WebSocket long-connection, image/file
  download via message resource API, auto-registration, multi-bot
  support (up to 3 bots with fs:/fs2:/fs3: prefixes)
- Fix dashboard chat send button stuck disabled after agent response:
  write _close sentinel to container IPC after first result so the
  container exits and SSE stream closes properly
- Fix dashboard chat session saving with images: strip large base64
  data URIs before saving to localStorage to avoid exceeding 5MB limit
- Default to most recent chat on dashboard load instead of restoring
  last active session
- Fix scheduled task double-execution: advance next_run before
  enqueuing (not inside runTask) to prevent duplicate triggers when
  task is queued behind an active container
- WeCom: retry via proactive Corp API on 846604 WebSocket expiry error
- Feishu: use GROUPS_DIR instead of fragile STORE_DIR/../groups path
- Update README and README.zh-CN with Feishu setup docs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add comprehensive Claude skills for:
- Single-cell analysis (preprocessing, clustering, trajectory, annotation, integration)
- Genomics (variant calling, structural variants, copy number variation)
- Epigenomics (ChIP-seq, ATAC-seq, bisulfite-seq, methylation)
- Transcriptomics (differential expression, RNA quantification, isoform detection)
- Spatial transcriptomics (preprocessing, multiomics, Visium analysis)
- Immunogenomics (TCR-seq, BCR-seq, HLA typing)
- Proteomics/Metabolomics (quantification, annotation, pathway mapping)
- Database queries (AlphaFold, DrugBank, Ensembl, gnomAD, KEGG)
- Literature search, PubMed search, and bio-research pipeline
- Sequence alignment, phylogenetics, motif discovery
- Agent browser for web-based database access

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The IPC watcher's sendImage was hardcoded to whatsapp?.sendImage(),
so Feishu (and other non-WhatsApp channels) never received images
from container agents. Use sendImageToChannel() which routes via
channelForJid() to the correct channel.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… events

Key additions from upstream:
- WeChat personal account channel
- omics runtime pack (8 container skills: scRNA, ChIP-seq, ATAC-seq, DE, proteomics, metagenomics, structural bio)
- recordAgentTraceEvent for observability
- channelCallbacks.autoRegister pattern
- WhatsApp/WeCom/Discord/Slack channel cleanup
- Windows setup script, Dockerfile improvements

Kept from feature branch:
- Dashboard (startDashboard)
- Feishu streaming card support
- Token usage logging
- sendFileToChannel in IPC

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Fix db/groups.ts to properly parse agentType and notifyUser from
  container_config JSON blob (lost during upstream refactor)
- Add Qwen and MiniMax credentials to ALLOWED_VARS in credential-proxy
  so containers can actually use these providers
- Use group.agentType instead of hardcoded 'claude' in logTokenUsage
  (index.ts and task-scheduler.ts)
- Fix db.ts to proxy through db/connection.ts shared instance via Proxy
  so analytics functions work with the new DB module structure
- Add missing analytics exports to db/index.ts barrel
- Switch dashboard.ts imports from db.js to db/index.js
- Add group selector header to dashboard chat panel
- Add proxiedJids to local-web channel so foreign group responses route
  back to local-web SSE
- Fix models refresh button to also reload token usage

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant