Skip to content

Commit 0c187f3

Browse files
July-XZ-starts
andauthored
fix(minimax-bot): fold the earlier bubbles of a long reply, bottom-left reply actions (#48)
* fix(minimax-bot): move reply actions to the bottom-left of the message The reaction, copy, quote and open-session buttons used to sit inside the last bubble, pinned to its top-right corner. A long reply therefore pushed them out of reach while the reader was still at the end of the text, which made quoting a long answer awkward. - Render the action row as a sibling below the bubble, aligned to its left edge, so it always stays under the last line of the reply. - Keep the reaction indicator inside the bubble at its bottom-left, which puts it directly above the action row, and paint it with the app's own tag colours instead of a fixed brand-colour pill so it follows the light and dark themes. - Give the transcript enough bottom padding that scrolling to the end never clips the action row of the last reply. Bumps the package to 0.7.5 and aligns the MCP serverInfo version with the manifest. Assisted-by: mavis reason:minimax-bot-reply-actions * refactor(minimax-bot): make the background task strip readable at a glance The strip put the owner and the state in the same sentence as the task, then truncated the task to one line, so a busy queue read as a wall of near identical rows. - Lead each row with the task (up to two lines) and put the owner, the state and the elapsed time on a second line. - Tell the states apart by their dot: quiet while queued, amber while it waits, accent while it runs. - Keep the stop action reachable, but out of the way until the row is looked at. - Fold a queue of more than three tasks into one line that can be expanded. Assisted-by: mavis reason:minimax-bot-task-strip * fix(minimax-bot): render a reply as one bubble instead of one per recorded part The Host opens a text part for every assistant turn between two tool calls, so a reply that ran a dozen tools painted a bubble per part. A real group message in the CodeMap chat has 118 text parts, and the bubbles filled the screen so the conversation above was out of reach. Join the text parts of a message into one bubble, the way the server joins them when it stores the message text. The reaction badge follows that single bubble. * fix(minimax-bot): keep the task strip empty instead of printing null replaceChildren renders a null argument as the text "null", so every chat without a background job showed that word above the composer. The fold button is appended on its own now, and only when there is something to fold. * fix(minimax-bot): fold the earlier bubbles of a long reply behind a scrollable summary The Host records a text part for every assistant turn between two tool calls, so a reply that worked for a while arrives with dozens of parts, and one bubble per part filled the screen: a real message in our own Bot history carried 479 parts and 118 text segments. The earlier bubbles keep their own shape, but they move into a folded area under the reply: one line says how many of them there are, and opening it shows them in a fixed height area with its own scrollbar, so the conversation above stays in reach. The answer itself is never folded, and a reply with a few parts is unchanged. This replaces the earlier attempt to join the parts into a single bubble: that changed how a reply reads compared to the rest of the app, and the fold keeps the original bubbles. * fix(minimax-bot): keep the newest three bubbles of a long reply in the open The fold took every bubble but the answer out of sight, so a collapsed reply showed nothing of the work that produced it. The newest three bubbles now stay where the flat layout put them, and only the earlier ones fold behind the summary. A bubble of such a reply also tells on hover what it said, the way the task rows and the attachments do. A short reply keeps the official markup untouched. * fix(minimax-bot): put the background task strip back to the official rows The strip was the one part of this branch that changed the official look instead of adding a layer on top of it: two lines per job, different wording, a borderless stop button and a folded queue. The rows render the way the official build does again, one line each, with the stop button at the end of the row. Measured against the official build on the same data: a row is 42px high in both, the strip is 88px high in both, and the stop button sits 9px from the right edge in both. The fold of the long reply and the reply actions stay as they are. * docs(minimax-bot): describe the themed reaction indicator The README already says where the reply actions sit; the indicator above that row now wears the app's own tag colours, so the text says so too. --------- Co-authored-by: 4Dim <m4java@163.com>
1 parent 9804030 commit 0c187f3

9 files changed

Lines changed: 310 additions & 47 deletions

File tree

‎plugins/minimax-ai/minimax-bot/.minimax-plugin/plugin.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"schemaVersion": 1,
33
"name": "minimax-bot",
44
"displayName": "MiniMax Bot",
5-
"version": "0.7.4",
5+
"version": "0.7.5",
66
"description": "Turn MiniMax Code into an always-on team of Bots. A Chief Bot helps you build the team; in group chats the admin answers and @mentions hand work to other members. Every Bot has its own octopus avatar and memory, with scheduled tasks and usage stats.",
77
"author": "MiniMax Code",
88
"icon": "icon.png",

‎plugins/minimax-ai/minimax-bot/README.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ Copy this directory, including the hidden `.minimax-plugin/` directory, into the
2727
- **Chat filters**: the icon bar switches between all chats, unread, groups and direct chats, with unread counts; your choice is remembered.
2828
- **Language**: English and Chinese. By default it follows the operating system's preferred language (the first English or Chinese entry in `navigator.languages`; other languages fall back to English), or you can fix it under Settings → General → Language. The interface, errors, system notices, Chief's default setup, the context Bots receive and the MCP tool descriptions all switch; replies the Bots wrote and text you entered stay as they are.
2929
- **Reactions**: react to finished Bot replies in private and group chats. The quick bar offers 👍 ❤️ 🙌 😂 😭 😮, and more emoji can be browsed by category or searched in English or Chinese. Each message holds one reaction: picking a new one replaces it, and picking the same one again removes it. Reactions are saved locally, survive refreshes and restarts, and sync to other open windows. They do not trigger a Bot reply and are not sent to the model.
30+
- **Reply actions**: the reaction, copy, quote-reply and open-session buttons sit at the bottom-left of a reply, under its last line. A long reply therefore keeps its actions within reach at the end of the text instead of pushing them off the top of the message. The reaction indicator sits directly above that row and is painted with the app's own tag colours, so it follows the light and dark themes.
31+
- **Folded working messages**: the Host records a text part for every turn a Bot takes between two tool calls, so a reply that worked for a while arrives with many parts. The newest three bubbles stay in the open, exactly where the flat layout put them, the answer among them. The earlier ones keep their own shape but move into a folded area above them: one line says how many of them there are, and opening it shows them in a fixed height area with its own scrollbar, so the conversation above stays in reach. Hovering a bubble of such a reply tells what that bubble said, the way the task rows and the attachments do.
3032

3133
## 0.7.0 Reliable delegation and result delivery
3234

‎plugins/minimax-ai/minimax-bot/miniapp/client/app.css‎

Lines changed: 72 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
--shadow-pill: 0 2px 8px -1px rgba(0, 0, 0, 0.06), 0 1px 2px rgba(0, 0, 0, 0.04);
2424
--scrim: rgba(10, 10, 10, 0.28);
2525
--ring: var(--sidebar);
26-
--reaction-ink: #fff;
2726
color-scheme: light;
2827
}
2928

@@ -757,10 +756,12 @@ button {
757756

758757
.feed {
759758
flex: 1;
760-
/* Padding alone is 84px. Without a real floor, task rows (min-height: auto) shrink the transcript to that sliver. */
759+
/* Padding alone is 112px. Without a real floor, task rows (min-height: auto) shrink the transcript to that sliver. */
761760
min-height: min(220px, 48%);
762761
overflow-y: auto;
763-
padding: 72px 24px 12px;
762+
/* The bottom room holds the action row of the last reply: 12px of padding plus the
763+
28px the row needs, so scrolling to the end never clips the buttons. */
764+
padding: 72px 24px 40px;
764765
scroll-behavior: auto;
765766
}
766767

@@ -818,6 +819,55 @@ button {
818819
max-width: 100%;
819820
}
820821

822+
/* The earlier bubbles of a long reply. The Host records a text part per assistant turn, so a
823+
reply that ran a dozen tools arrives with dozens of bubbles; they live here instead, behind a
824+
one line summary. The area that opens has a fixed height and its own scrollbar, so opening
825+
it never makes the feed grow. */
826+
.bubble-fold {
827+
max-width: min(88%, 680px);
828+
margin: 2px 0;
829+
border: 1px solid var(--line);
830+
border-radius: 14px;
831+
background: var(--tag);
832+
overflow: hidden;
833+
}
834+
835+
.bubble-fold > summary {
836+
display: flex;
837+
align-items: center;
838+
gap: 6px;
839+
padding: 6px 10px;
840+
font-size: 12.5px;
841+
color: var(--muted);
842+
cursor: pointer;
843+
list-style: none;
844+
user-select: none;
845+
}
846+
847+
.bubble-fold > summary::-webkit-details-marker { display: none; }
848+
.bubble-fold > summary:hover { color: var(--ink); background: var(--hover); }
849+
.bubble-fold > summary svg { flex: none; transition: transform 120ms ease; }
850+
.bubble-fold[open] > summary svg { transform: rotate(180deg); }
851+
852+
.bubble-fold-closed { display: inline; }
853+
.bubble-fold-open { display: none; }
854+
.bubble-fold[open] > summary .bubble-fold-closed { display: none; }
855+
.bubble-fold[open] > summary .bubble-fold-open { display: inline; }
856+
857+
/* The fixed height with a scrollbar is the point of the fold: the bubbles inside it scroll,
858+
the feed around it does not. */
859+
.bubble-fold-body {
860+
max-height: min(320px, 40vh);
861+
overflow-y: auto;
862+
overscroll-behavior: contain;
863+
padding: 2px 10px 10px;
864+
display: flex;
865+
flex-direction: column;
866+
gap: 6px;
867+
}
868+
869+
.bubble-fold-body .bubble { max-width: 100%; }
870+
821871
.msg.user .bubble-wrap {
822872
align-items: flex-end;
823873
/* The width bound belongs here, not on .bubble: this wrapper is shrink-to-fit, so a
@@ -827,13 +877,17 @@ button {
827877
max-width: min(88%, 680px);
828878
}
829879

880+
/* The action row of a reply: reaction, copy, quote and open-session. It hangs below the
881+
bubble at the left, the way a comment toolbar does, so a long reply cannot push the
882+
buttons out of reach while the reader is at the end of it. */
830883
.msg-tools {
831884
display: flex;
832885
gap: 2px;
833886
height: 26px;
834887
margin-top: 2px;
835888
opacity: 0;
836889
transition: opacity 120ms ease;
890+
white-space: nowrap;
837891
}
838892

839893
.msg:hover .msg-tools,
@@ -2951,34 +3005,30 @@ fieldset.field {
29513005
.avatar-errors { max-height: 100px; overflow-y: auto; padding-left: 20px; }
29523006
.oc-img { object-fit: cover; border-radius: 22%; }
29533007

2954-
/* Reactions sit on the last bubble; the picker uses the same compact chat scale. */
3008+
/* Reactions sit on the last bubble; the picker uses the same compact chat scale. The
3009+
indicator wears the app's own tag language — a soft surface and a hairline border — so
3010+
it reads as part of the bubble in either theme. */
29553011
.reaction-bar {
29563012
display: inline-flex;
29573013
align-items: center;
29583014
max-width: 100%;
2959-
padding: 2px;
2960-
border: 3px solid var(--bg);
3015+
padding: 1px;
3016+
border: 1px solid var(--line-strong);
29613017
border-radius: 999px;
2962-
background: var(--accent);
2963-
color: var(--reaction-ink);
3018+
background: var(--tag);
3019+
color: var(--muted);
29643020
}
29653021
.reaction-bar:empty { display: none; }
2966-
.bubble:has(> .msg-tools) {
2967-
max-width: min(calc(100% - var(--message-tools-width, 92px)), 680px);
2968-
}
2969-
.bubble > .msg-tools {
2970-
position: absolute;
2971-
left: calc(100% + 8px);
2972-
top: 7px;
2973-
margin: 0;
2974-
white-space: nowrap;
2975-
}
3022+
/* The indicator keeps the place a comment's reaction row takes: inside the message box, at
3023+
its bottom-left, and therefore above the reply's action row. The bubble reserves the
3024+
room for it so the last line of the reply stays readable. */
29763025
.bubble > .reaction-bar {
29773026
position: absolute;
2978-
right: -6px;
2979-
top: -22px;
3027+
left: 14px;
3028+
bottom: 6px;
29803029
}
2981-
.bubble:has(> .reaction-bar:not(:empty)) { margin-top: 14px; }
3030+
/* 6px below the bubble edge + a 32px indicator (28px chip + 2px padding + 2px border). */
3031+
.bubble:has(> .reaction-bar:not(:empty)) { padding-bottom: 40px; }
29823032
.reaction-chip {
29833033
display: inline-flex;
29843034
align-items: center;
@@ -2994,7 +3044,7 @@ fieldset.field {
29943044
line-height: 1;
29953045
}
29963046
.reaction-chip { font-size: 21px; }
2997-
.reaction-chip:hover { background: color-mix(in srgb, var(--reaction-ink) 20%, transparent); }
3047+
.reaction-chip:hover { background: var(--hover); color: var(--ink); }
29983048
.reaction-bar button:focus-visible { outline-color: var(--ink); }
29993049
.reaction-picker {
30003050
position: fixed;
@@ -3119,10 +3169,6 @@ fieldset.field {
31193169
.gmsg:hover .msg-tools,
31203170
.gmsg:focus-within .msg-tools,
31213171
.msg-tools:has([aria-expanded='true']) { opacity: 1; }
3122-
@media (max-width: 720px) {
3123-
.bubble:has(> .msg-tools) { max-width: min(88%, 680px); margin-bottom: 28px; }
3124-
.bubble > .msg-tools { top: calc(100% + 2px); left: 0; }
3125-
}
31263172
@media (hover: none) {
31273173
.msg-tools { opacity: 1; }
31283174
.emoji-quick .emoji-option { width: 40px; height: 40px; }

‎plugins/minimax-ai/minimax-bot/miniapp/client/app.js‎

Lines changed: 74 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -938,21 +938,90 @@ function legacyParts(m) {
938938
return parts;
939939
}
940940

941+
/**
942+
* The Host opens a text part for every assistant turn between two tool calls, so a reply that
943+
* worked for a while arrives with dozens of them, and one bubble per part filled the screen.
944+
* The newest bubbles stay in the open, exactly where the flat layout put them; the earlier ones
945+
* fold away behind a one line summary.
946+
*/
947+
const FOLD_AFTER_PARTS = 3;
948+
949+
/** The bubble's own text, short enough to be a hover hint. */
950+
function hintOf(text) {
951+
const flat = String(text ?? '').replace(/\s+/g, ' ').trim();
952+
return flat.length > 160 ? `${flat.slice(0, 160)}…` : flat;
953+
}
954+
955+
/**
956+
* The earlier bubbles of a long reply: folded behind a one line summary, and the area that
957+
* opens has a fixed height with its own scrollbar, so the feed keeps its length.
958+
*/
959+
function foldView(m, parts, presentation) {
960+
const inner = () =>
961+
parts.map((part, index) => ({
962+
key: `text:${index}`,
963+
signature: JSON.stringify([part.text, presentation]),
964+
create: () => h('div', { class: 'bubble', title: hintOf(part.text) }, markdownNode(part.text, m.chatId)),
965+
update: (bubble) => {
966+
markdownNode(part.text, m.chatId, bubble.firstElementChild);
967+
bubble.title = hintOf(part.text);
968+
return bubble;
969+
},
970+
}));
971+
const body = h('div', { class: 'bubble-fold-body' });
972+
reconcileChildren(body, inner());
973+
return {
974+
key: 'fold',
975+
signature: JSON.stringify([parts.map((part) => part.text), presentation, locale()]),
976+
create: () =>
977+
h(
978+
'details',
979+
{ class: 'bubble-fold' },
980+
h(
981+
'summary',
982+
{ class: 'bubble-fold-summary', title: t('fold.hint', { n: parts.length }) },
983+
icon('down', 12),
984+
h('span', { class: 'bubble-fold-closed' }, t('fold.show', { n: parts.length })),
985+
h('span', { class: 'bubble-fold-open' }, t('fold.hide')),
986+
),
987+
body,
988+
),
989+
update: (node) => {
990+
reconcileChildren(node.querySelector('.bubble-fold-body'), inner());
991+
const summary = node.querySelector('.bubble-fold-summary');
992+
if (summary) summary.title = t('fold.hint', { n: parts.length });
993+
const closed = node.querySelector('.bubble-fold-closed');
994+
if (closed) closed.textContent = t('fold.show', { n: parts.length });
995+
return node;
996+
},
997+
};
998+
}
999+
9411000
/** Keep part order exactly as recorded; matching prefixes are not evidence of duplication. */
9421001
function partViews(m, inGroup) {
9431002
const parts = m.key ? [{ type: 'text', text: displayText(m) }] : m.parts ?? legacyParts(m);
9441003
const lastText = parts.findLastIndex((part) => part.type === 'text' && part.text?.trim());
9451004
const views = [];
9461005
const presentation = presentationKey();
1006+
const textParts = [];
1007+
parts.forEach((part, index) => {
1008+
if (part.type === 'text' && part.text?.trim()) textParts.push(index);
1009+
});
1010+
// The newest bubbles stay in the open, where the flat layout had them; the earlier ones fold.
1011+
const folded = textParts.length > FOLD_AFTER_PARTS ? textParts.slice(0, -FOLD_AFTER_PARTS) : [];
1012+
const foldedSet = new Set(folded);
1013+
if (folded.length) views.push(foldView(m, folded.map((index) => parts[index]), presentation));
9471014
parts.forEach((part, index) => {
9481015
const key = `part:${index}`;
9491016
if (part.type === 'text' && part.text?.trim()) {
1017+
if (foldedSet.has(index)) return;
9501018
views.push({
9511019
key,
9521020
signature: JSON.stringify([part.text, presentation, index === lastText ? [m.status, m.userReactions, m.reactionsRevision, displayText(m), m.sessionId, botById(m.botId)?.name] : null]),
953-
create: () => updateBubbleControls(h('div', { class: 'bubble' }, markdownNode(part.text, m.chatId)), m, index === lastText),
1021+
create: () => updateBubbleControls(h('div', { class: 'bubble', title: folded.length ? hintOf(part.text) : undefined }, markdownNode(part.text, m.chatId)), m, index === lastText),
9541022
update: (bubble) => {
9551023
markdownNode(part.text, m.chatId, bubble.firstElementChild);
1024+
if (folded.length) bubble.title = hintOf(part.text);
9561025
return updateBubbleControls(bubble, m, index === lastText);
9571026
},
9581027
});
@@ -971,22 +1040,9 @@ function partViews(m, inGroup) {
9711040
return views;
9721041
}
9731042

1043+
/** The bubble carries the reply text and the reaction badge; the action row lives below it. */
9741044
function updateBubbleControls(bubble, m, isLast) {
9751045
updateBubbleReactions(bubble, m, isLast);
976-
const old = bubble.querySelector(':scope > .msg-tools');
977-
if (!isLast || m.status === 'streaming') {
978-
old?.remove();
979-
bubble.style.removeProperty('--message-tools-width');
980-
} else {
981-
const signature = JSON.stringify([displayText(m), m.sessionId, botById(m.botId)?.name, locale()]);
982-
if (old?.dataset.signature !== signature) {
983-
const tools = msgTools(displayText(m), m);
984-
tools.dataset.signature = signature;
985-
if (old) old.replaceWith(tools);
986-
else bubble.append(tools);
987-
bubble.style.setProperty('--message-tools-width', `${tools.children.length * 28 + 8}px`);
988-
}
989-
}
9901046
return bubble;
9911047
}
9921048

@@ -1103,7 +1159,9 @@ function botMessage(m, existing) {
11031159
notes.forEach((node, index) => views.push({ key: `note:${index}`, signature: node.outerHTML, create: () => node }));
11041160
if (m.question) views.push({ key: 'question', signature: JSON.stringify([m.question, m.answering, locale()]), create: () => questionCard(m) });
11051161
if (m.answerSummary?.length) views.push({ key: 'answers', signature: JSON.stringify(m.answerSummary), create: () => h('dl', { class: 'answered' }, m.answerSummary.map((a) => [h('dt', null, a.question), h('dd', null, a.answer)])) });
1106-
if (m.status !== 'streaming' && views.some((view) => view.key === 'reactions')) views.push({ key: 'tools', signature: JSON.stringify([displayText(m), m.sessionId, name, locale()]), create: () => msgTools(displayText(m), m) });
1162+
// The action row hangs below the reply, at its bottom-left. Anchoring it to the bubble's
1163+
// top pushed the buttons off-screen as soon as the reply grew past the viewport.
1164+
if (m.status !== 'streaming') views.push({ key: 'tools', signature: JSON.stringify([displayText(m), m.sessionId, name, locale()]), create: () => msgTools(displayText(m), m) });
11071165
const compatible = existing?.matches(inGroup ? 'article.gmsg' : 'article.msg');
11081166
const article = compatible ? existing : h('article', { class: inGroup ? 'gmsg' : 'msg' });
11091167
article.setAttribute('aria-label', t('a11y.reply', { name }));

‎plugins/minimax-ai/minimax-bot/miniapp/client/reactions.js‎

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,14 @@ function replaceBar(bar, m) {
5353
/** Keep the badge on the final text bubble without replacing its text or media. */
5454
export function updateBubbleReactions(bubble, m, isLast) {
5555
const bar = bubble.querySelector(':scope > .reaction-bar');
56-
if (!isLast) bar?.remove();
57-
else if (bar) replaceBar(bar, m);
56+
if (!isLast) {
57+
// The reply gained a new final part, so the badge moves to it. The picker opened from
58+
// this bubble's action row would otherwise stay open over a reply that was replaced.
59+
if (bar) {
60+
bar.remove();
61+
closeReactionPicker();
62+
}
63+
} else if (bar) replaceBar(bar, m);
5864
else bubble.append(reactionBar(m));
5965
}
6066

‎plugins/minimax-ai/minimax-bot/miniapp/client/strings-app.js‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,13 +189,17 @@ export default {
189189
'live.startHelper': '正在放到后台:{name}',
190190
'live.listHelpers': '正在查看后台任务',
191191
'live.stopHelper': '正在停止后台任务',
192+
'helper.strip': '后台任务',
192193
'helper.waitingForTasks': '{name} · 等待子任务:{title}',
193194
'helper.strip': '后台任务',
194195
'helper.running': '{name} 正在做「{title}」,你可以继续聊',
195196
'helper.queued': '{name} 的任务在排队「{title}」',
196197
'helper.justStarted': '刚开始',
197198
'helper.minutes': '{n} 分钟',
198199
'helper.stop': '停止',
200+
'fold.show': '展开 {n} 条过程消息',
201+
'fold.hide': '收起过程消息',
202+
'fold.hint': '共 {n} 条过程消息,展开后在固定高度内滚动查看',
199203
'event.helperStarted': '开始了:{title}',
200204
'event.helper.done': '做完了:{title}',
201205
'event.helper.blocked': '卡住了,需要你定一下:{title}',
@@ -458,13 +462,17 @@ export default {
458462
'live.startHelper': 'Moving to the background: {name}',
459463
'live.listHelpers': 'Checking background tasks',
460464
'live.stopHelper': 'Stopping a background task',
465+
'helper.strip': 'Background tasks',
461466
'helper.waitingForTasks': '{name} · Awaiting dependencies: {title}',
462467
'helper.strip': 'Background tasks',
463468
'helper.running': '{name} is working on "{title}" — you can keep chatting',
464469
'helper.queued': '{name} has this queued: "{title}"',
465470
'helper.justStarted': 'just started',
466471
'helper.minutes': '{n} min',
467472
'helper.stop': 'Stop',
473+
'fold.show': 'Show {n} earlier messages',
474+
'fold.hide': 'Hide earlier messages',
475+
'fold.hint': '{n} earlier messages, they scroll inside the opened area',
468476
'event.helperStarted': 'Started: {title}',
469477
'event.helper.done': 'Finished: {title}',
470478
'event.helper.blocked': 'Stuck and needs your decision: {title}',

‎plugins/minimax-ai/minimax-bot/miniapp/node/mcp.mjs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -586,7 +586,7 @@ export function createMcpHandler({ team, engine }) {
586586
result = {
587587
protocolVersion: PROTOCOL_VERSIONS.includes(requested) ? requested : PROTOCOL_VERSIONS[0],
588588
capabilities: { tools: { listChanged: false } },
589-
serverInfo: { name: 'minimax-bot', version: '0.7.0' },
589+
serverInfo: { name: 'minimax-bot', version: '0.7.5' },
590590
instructions: t('mcp.instructions'),
591591
};
592592
break;

‎plugins/minimax-ai/minimax-bot/package.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "minimax-bot",
3-
"version": "0.7.4",
3+
"version": "0.7.5",
44
"private": true,
55
"type": "module",
66
"mcode": {

0 commit comments

Comments
 (0)