Collapse Slack framing on user turns in HuggingChat (#2715)
* Collapse Slack framing on user turns in HuggingChat
Slack turns store the harness framing (instructions and quoted thread
context) ahead of the request, so HuggingChat showed it as the message.
Slack-managed conversations now show only the request, with the framing
behind a collapsed "Slack context" toggle. The model input is unchanged.
A shared splitter folds every framing block, so queued follow-ups joined
into one turn render cleanly, and splits on each block's own marker so a
request quoting the marker phrase stays intact. The Slack viewer uses the
same splitter. Removing the bot mention no longer leaves a double space,
and the read-only Slack notice gets an opaque background.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Trim Slack framing tests to one splitter test
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Drop inline comments
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Keep Slack request whitespace when removing the bot mention
Collapsing every run of spaces also flattened indentation in pasted code
before it reached the model.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Let Slack ML Intern sessions be shared from HuggingChat (#2717)
The share button was hidden for Slack-managed conversations, and the
read-only guard rejected POST /conversation/[id]/share, so their owners
could not create a link or download the trace. A share link is a snapshot
and cannot steer the Slack run, so it is exempt from the guard; every
other Slack conversation mutation is still rejected.
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* Anchor Slack framing to block boundaries and collapse it on queued follow-ups
The framing regex could start inside a request that quoted the framing
text and swallow user text up to the next follow-up's marker. Only match
at the start of a message or after the blank-line join, and require a
Slack user id. Queued Slack follow-ups (live bubbles and pending chips)
now show just the request too.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Slack: show only chosen answers and skip replies that tag someone else (#2718)
* chore: upgrade mongodb driver to 6.x (#2716)
* chore: upgrade mongodb driver to 6.x
Bump the Node.js MongoDB driver from ^5.8.0 (5.9.2 installed) to ^6.21.0.
Driver 6.x changed the default of `includeResultMetadata` to `false`, so
`findOneAndUpdate` now returns the document itself instead of a
`ModifyResult`. Every call site that read `result.value` is updated to use
the returned document directly; otherwise lease/claim logic (queued inputs,
Slack leases, ML registry pollers, parked calls) would silently stop
matching rows.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
* fix: write a Buffer to the GridFS upload stream
Driver 6.x GridFSBucketWriteStream no longer accepts an ArrayBuffer chunk
(ERR_INVALID_ARG_TYPE). Reuse the already-read ArrayBuffer and wrap it in
Buffer.from instead of casting it.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
---------
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
* Let Slack ML Intern sessions be shared from HuggingChat
The share button was hidden for Slack-managed conversations, and the
read-only guard rejected POST /conversation/[id]/share, so their owners
could not create a link or download the trace. A share link is a snapshot
and cannot steer the Slack run, so it is exempt from the guard; every
other Slack conversation mutation is still rejected.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Slack: show only chosen answers and skip replies that tag someone else
Answered question cards drop the options nobody picked and show each
question with a ✅ line for its answer. A message that opens by tagging
another user, without tagging ML Intern, is not sent to the harness; the
sender gets a private note instead.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Switch Omni to DeepSeek-V4.1-Flash-1017 and sync models from router (#2719)
* feat: sync models from router (+4 added, 2 reasoning-capable, 4 artifacts, -4 removed)
Added:
- MiniMaxAI/MiniMax-M3.1-Flash (reasoning, artifacts): model card documents
reasoning_effort, served by novita which documents interleaved thinking.
- zai-org/GLM-4.7-FP8 (reasoning, artifacts): back on the router, restored
with the same entry it had before #2710.
- Qwen/Qwen3.8-Flash-Next-FP8 (artifacts): not flagged for reasoning. Its only
provider (nscale) does not document reasoning_effort, and a router probe
showed only a small low vs xhigh difference on a single sample with
intermittent 503s. Worth revisiting once another provider serves it.
- BSC-LT/ALIA-40b-instruct-2606 (artifacts): no thinking mode.
Removed (no longer served by the router):
- aisingapore/Nemotron-SEA-LION-v4.8-120B-A12B
- CohereLabs/c4ai-command-r7b-arabic-02-2025
- zai-org/GLM-4.5
- Qwen/Qwen2.5-VL-72B-Instruct
* chore(router): switch Omni to deepseek-ai/DeepSeek-V4.1-Flash-1017
DeepSeek-V4.1-Flash-1017 is a minor update to V4.1-Flash with better
reasoning, coding, agentic, and vision scores and shorter outputs. It
becomes the primary model on the default, multimodal, and agentic routes,
and the multimodal and tools bypass env vars point at it in prod and dev.
V4.1-Flash moves to first fallback on every route ahead of the existing
chain. The router docs sample is refreshed to match.
Checked through the router before switching: text with reasoning_effort,
image input, and tool calls on auto routing, novita, and baseten.
* Slack: keep DMs and blank answers clear; skip group-tagged replies
- DMs skip the "tagged someone else" rule: only the bot reads them.
- A reply that opens with a user group, @here, @channel or @everyone
is held back like one that opens with a user tag.
- Answered cards show "_No answer_" for blank optional questions;
skipped cards keep the bare question.
- Docs: a leading tag is how to keep a channel message out of the run.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
---------
Co-authored-by: Arek Borucki <68437078+arekborucki@users.noreply.github.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Co-authored-by: Victor Muštar <victor.mustar@gmail.com>
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Arek Borucki <68437078+arekborucki@users.noreply.github.com>
Co-authored-by: Victor Muštar <victor.mustar@gmail.com>