botmux 3.12.1 → 3.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.runtime-build-id +1 -1
- package/dist/bot-registry.d.ts +7 -0
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +46 -13
- package/dist/bot-registry.js.map +1 -1
- package/dist/core/config-dir.d.ts +167 -0
- package/dist/core/config-dir.d.ts.map +1 -0
- package/dist/core/config-dir.js +152 -0
- package/dist/core/config-dir.js.map +1 -0
- package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
- package/dist/core/dashboard-ipc-server.js +48 -0
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/per-bot-env.d.ts.map +1 -1
- package/dist/core/per-bot-env.js +9 -0
- package/dist/core/per-bot-env.js.map +1 -1
- package/dist/core/session-discovery.d.ts.map +1 -1
- package/dist/core/session-discovery.js +19 -2
- package/dist/core/session-discovery.js.map +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +44 -3
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/trigger-session.d.ts.map +1 -1
- package/dist/core/trigger-session.js +499 -63
- package/dist/core/trigger-session.js.map +1 -1
- package/dist/core/types.d.ts +26 -4
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/worker-pool.d.ts +64 -0
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +301 -10
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +13 -6
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/auth.d.ts +8 -0
- package/dist/dashboard/auth.d.ts.map +1 -1
- package/dist/dashboard/auth.js +16 -11
- package/dist/dashboard/auth.js.map +1 -1
- package/dist/dashboard/web/bot-multi-select.d.ts +33 -0
- package/dist/dashboard/web/bot-multi-select.d.ts.map +1 -0
- package/dist/dashboard/web/bot-multi-select.js +34 -0
- package/dist/dashboard/web/bot-multi-select.js.map +1 -0
- package/dist/dashboard/web/groups-page.d.ts +13 -0
- package/dist/dashboard/web/groups-page.d.ts.map +1 -1
- package/dist/dashboard/web/groups-page.js +25 -7
- package/dist/dashboard/web/groups-page.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +8 -4
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
- package/dist/dashboard/web/sessions-page.js +15 -23
- package/dist/dashboard/web/sessions-page.js.map +1 -1
- package/dist/dashboard/web/sessions.d.ts +13 -0
- package/dist/dashboard/web/sessions.d.ts.map +1 -1
- package/dist/dashboard/web/sessions.js +25 -0
- package/dist/dashboard/web/sessions.js.map +1 -1
- package/dist/dashboard-web/app.js +1 -1
- package/dist/dashboard-web/chunks/{bot-defaults-page-HL655CNR.js → bot-defaults-page-NQJFJ45Z.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-BFUTTYVK.js → chunk-5QJB24I2.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-ELL53D62.js → chunk-6JTZJRQJ.js} +2 -2
- package/dist/dashboard-web/chunks/{chunk-5ZL7NLR5.js → chunk-CU4SUKK3.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-5PAYQ3KT.js → chunk-KEEYQ3WF.js} +1 -1
- package/dist/dashboard-web/chunks/chunk-WLIVBPJC.js +1 -0
- package/dist/dashboard-web/chunks/{connectors-page-3QQACF23.js → connectors-page-HADHZXXZ.js} +1 -1
- package/dist/dashboard-web/chunks/groups-page-5TYF46RS.js +8 -0
- package/dist/dashboard-web/chunks/{insights-page-ZZ3JEJ6L.js → insights-page-EVGGJI5L.js} +1 -1
- package/dist/dashboard-web/chunks/{monitor-room-ROJ5GZ4N.js → monitor-room-HRGR2ENP.js} +1 -1
- package/dist/dashboard-web/chunks/{monitoring-page-IATV7KJF.js → monitoring-page-LBU7TTTW.js} +1 -1
- package/dist/dashboard-web/chunks/{office-page-TYO5OIIT.js → office-page-DF6RRBMN.js} +1 -1
- package/dist/dashboard-web/chunks/{overview-page-VJUULZF2.js → overview-page-ZB6QH2EX.js} +1 -1
- package/dist/dashboard-web/chunks/{roles-page-7RJJKZGK.js → roles-page-ZBZGHIIF.js} +1 -1
- package/dist/dashboard-web/chunks/{schedules-page-JTEJ5IXW.js → schedules-page-NQVQC3QY.js} +1 -1
- package/dist/dashboard-web/chunks/sessions-page-DXBCDWCS.js +8 -0
- package/dist/dashboard-web/chunks/{settings-page-7CTTFBRS.js → settings-page-E7NN4NVQ.js} +1 -1
- package/dist/dashboard-web/chunks/{skills-page-57NZECJ3.js → skills-page-2QAVB2SA.js} +1 -1
- package/dist/dashboard-web/chunks/{team-federation-page-6YYIMJG3.js → team-federation-page-VGWL53AE.js} +1 -1
- package/dist/dashboard-web/chunks/{v3-page-ZGKBSBK3.js → v3-page-AY35LKCX.js} +1 -1
- package/dist/dashboard-web/chunks/{whiteboards-page-AACJF6DB.js → whiteboards-page-BNWUU4KG.js} +1 -1
- package/dist/dashboard-web/style.css +61 -53
- package/dist/features/codex-notifier/internal-turn.d.ts +1 -2
- package/dist/features/codex-notifier/internal-turn.d.ts.map +1 -1
- package/dist/features/codex-notifier/internal-turn.js +1 -13
- package/dist/features/codex-notifier/internal-turn.js.map +1 -1
- package/dist/i18n/en.js +2 -2
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.js +2 -2
- package/dist/i18n/zh.js.map +1 -1
- package/dist/platform/secure-host-file.d.ts +63 -0
- package/dist/platform/secure-host-file.d.ts.map +1 -1
- package/dist/platform/secure-host-file.js +90 -25
- package/dist/platform/secure-host-file.js.map +1 -1
- package/dist/services/async-trigger-store.d.ts +24 -4
- package/dist/services/async-trigger-store.d.ts.map +1 -1
- package/dist/services/async-trigger-store.js +81 -19
- package/dist/services/async-trigger-store.js.map +1 -1
- package/dist/services/codex-session-meta.d.ts +4 -0
- package/dist/services/codex-session-meta.d.ts.map +1 -0
- package/dist/services/codex-session-meta.js +15 -0
- package/dist/services/codex-session-meta.js.map +1 -0
- package/dist/services/idempotency-store.d.ts +18 -3
- package/dist/services/idempotency-store.d.ts.map +1 -1
- package/dist/services/idempotency-store.js +30 -12
- package/dist/services/idempotency-store.js.map +1 -1
- package/dist/services/traex-transcript.d.ts +7 -5
- package/dist/services/traex-transcript.d.ts.map +1 -1
- package/dist/services/traex-transcript.js +139 -33
- package/dist/services/traex-transcript.js.map +1 -1
- package/dist/services/trigger-types.d.ts +14 -1
- package/dist/services/trigger-types.d.ts.map +1 -1
- package/dist/services/trigger-types.js +35 -0
- package/dist/services/trigger-types.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/child-env.d.ts +1 -1
- package/dist/utils/child-env.d.ts.map +1 -1
- package/dist/utils/child-env.js +18 -0
- package/dist/utils/child-env.js.map +1 -1
- package/dist/worker.js +35 -2
- package/dist/worker.js.map +1 -1
- package/package.json +1 -1
- package/dist/dashboard-web/chunks/chunk-6ALR252E.js +0 -1
- package/dist/dashboard-web/chunks/groups-page-SDZMJ7UV.js +0 -8
- package/dist/dashboard-web/chunks/sessions-page-KD7HDT3U.js +0 -8
|
@@ -6,9 +6,10 @@ import { mountReactPage } from './react-mount.js';
|
|
|
6
6
|
import { useStoreSelector, useT } from './react-hooks.js';
|
|
7
7
|
import { copyText } from './clipboard.js';
|
|
8
8
|
import { FeedGroupPicker } from './feed-group-picker.js';
|
|
9
|
+
import { BotMultiSelect } from './bot-multi-select.js';
|
|
9
10
|
import { KANBAN_TEAM_STORAGE_KEY, normalizeSessionsViewMode, readStoredBoardOrder, readStoredCreateKeepOpen, readStoredHiddenTableColumns, readStoredKanbanGroupBy, readStoredSessionsShowUnknownChats, readStoredSessionsViewMode, writeStoredBoardOrder, writeStoredCreateKeepOpen, writeStoredHiddenTableColumns, writeStoredKanbanGroupBy, writeStoredSessionsShowUnknownChats, writeStoredSessionsViewMode, } from './preferences.js';
|
|
10
11
|
import { OPEN_CREATE_SESSION_EVENT, consumePendingCreateSession } from './create-session-entry.js';
|
|
11
|
-
import { BOARD_COLUMNS, CLI_FILTER_OPTIONS, ICON, SESSION_STATUS_OPTIONS, canRestartSession, cssToken, deriveSessionBoardColumn, fetchPickerBots, formatTokenCount, groupSessionsByTopic, historySenderKey, isUnknownChatSession, lockActionLabel, openWriteLink, copySpawnCommand, repoBasename, restartConfirmMessage, sessionLocationText, sessionLocationTitle, sessionExchangePreview, sessionRuntimeCounts, sessionSearchText, sessionTopicKey, sessionStatusText, shouldOpenWritableTerminal, previewOverlayReducer, previewOverlayInitialState, terminalHref, tokenCount, } from './sessions.js';
|
|
12
|
+
import { BOARD_COLUMNS, CLI_FILTER_OPTIONS, ICON, SESSION_STATUS_OPTIONS, canRestartSession, cssToken, deriveSessionBoardColumn, fetchPickerBots, formatTokenCount, groupSessionsByTopic, historySenderKey, isUnknownChatSession, lockActionLabel, openWriteLink, copySpawnCommand, repoBasename, restartConfirmMessage, sessionLocationText, preferChatFilterLabel, sessionLocationTitle, sessionExchangePreview, sessionRuntimeCounts, sessionSearchText, sessionTopicKey, sessionStatusText, shouldOpenWritableTerminal, previewOverlayReducer, previewOverlayInitialState, terminalHref, tokenCount, } from './sessions.js';
|
|
12
13
|
import { previewMarkdownHtml } from './preview-markdown.js';
|
|
13
14
|
import { addMonitorRoomSessionIds, monitorRoomUrl } from './monitor-room-store.js';
|
|
14
15
|
import { dashboardShellAllowsWebTerminal } from './client-shell.js';
|
|
@@ -972,7 +973,6 @@ function CreateSessionDialog(props) {
|
|
|
972
973
|
const [bindWorkingDir, setBindWorkingDir] = useState('');
|
|
973
974
|
const [advancedOpen, setAdvancedOpen] = useState(false);
|
|
974
975
|
const [submitting, setSubmitting] = useState(false);
|
|
975
|
-
const [botQuery, setBotQuery] = useState('');
|
|
976
976
|
const [keepOpen, setKeepOpen] = useState(() => readStoredCreateKeepOpen(windowStorage()));
|
|
977
977
|
const [keptSuccess, setKeptSuccess] = useState(null);
|
|
978
978
|
const [feedGroups, setFeedGroups] = useState([]);
|
|
@@ -1001,7 +1001,6 @@ function CreateSessionDialog(props) {
|
|
|
1001
1001
|
setBindWorkingDir('');
|
|
1002
1002
|
setAdvancedOpen(false);
|
|
1003
1003
|
setSubmitting(false);
|
|
1004
|
-
setBotQuery('');
|
|
1005
1004
|
setKeptSuccess(null);
|
|
1006
1005
|
setFeedGroupId('');
|
|
1007
1006
|
setNewFeedGroupName('');
|
|
@@ -1110,10 +1109,6 @@ function CreateSessionDialog(props) {
|
|
|
1110
1109
|
const checkedIds = [...selectedBots];
|
|
1111
1110
|
const leadOptions = checkedIds;
|
|
1112
1111
|
const nameOf = (id) => bots.find(bot => bot.larkAppId === id)?.botName ?? id;
|
|
1113
|
-
const botQueryNorm = botQuery.trim().toLowerCase();
|
|
1114
|
-
const visibleBots = botQueryNorm
|
|
1115
|
-
? bots.filter(bot => bot.botName.toLowerCase().includes(botQueryNorm) || bot.larkAppId.toLowerCase().includes(botQueryNorm))
|
|
1116
|
-
: bots;
|
|
1117
1112
|
const mentionBots = mentionTrigger
|
|
1118
1113
|
? filterMentionBots(bots, mentionTrigger.query).slice(0, 8)
|
|
1119
1114
|
: [];
|
|
@@ -1295,19 +1290,18 @@ function CreateSessionDialog(props) {
|
|
|
1295
1290
|
marker: reconciled.markers[index],
|
|
1296
1291
|
})));
|
|
1297
1292
|
nextImageOrdinalRef.current = remaining.length + 1;
|
|
1298
|
-
}, children: _jsx("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", children: _jsx("path", { d: "M7 7l10 10M17 7 7 17" }) }) })] }, image.id))) })) : null] }), _jsxs("fieldset", { className: "cs-bots", children: [_jsx("legend", { children: t('sessions.create.bots') }),
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
} }), " ", _jsx("span", { children: bot.botName })] }, bot.larkAppId))) })) : _jsx("p", { className: "cs-empty", children: t('sessions.create.noBotMatch') }), checkedIds.length ? _jsx("small", { children: t('sessions.create.selectedCount', { n: String(checkedIds.length) }) }) : null] })) : _jsx("p", { className: "cs-empty", children: t('sessions.create.noBots') })] }), _jsxs("fieldset", { className: "cs-mode", children: [_jsx("legend", { children: t('sessions.create.mode') }), _jsxs("label", { children: [_jsx("input", { type: "radio", name: "mode", value: "lead", checked: mode === 'lead', onChange: () => setMode('lead') }), " ", t('sessions.create.modeLead')] }), _jsxs("label", { children: [_jsx("input", { type: "radio", name: "mode", value: "all", checked: mode === 'all', onChange: () => setMode('all') }), " ", t('sessions.create.modeAll')] }), _jsx("small", { children: t('sessions.create.modeHelp') })] }), feedGroupAuthUrl ? (_jsx("div", { className: "feed-group-auth-overlay", children: _jsxs("section", { className: "feed-group-auth-card", role: "dialog", "aria-modal": "true", "aria-labelledby": "session-feed-group-auth-title", children: [_jsx("h3", { id: "session-feed-group-auth-title", children: "\u6388\u6743\u98DE\u4E66\u6807\u7B7E" }), _jsxs("p", { children: ["\u70B9\u51FB\u4E0B\u9762\u7684\u6309\u94AE\uFF0C\u5728\u98DE\u4E66\u9875\u9762\u786E\u8BA4\u6388\u6743\u3002\u5982\u679C BotMux \u4E0E\u6D4F\u89C8\u5668\u5728\u540C\u4E00\u53F0\u7535\u8111\uFF0C\u786E\u8BA4\u540E\u4F1A\u81EA\u52A8\u5B8C\u6210\u6388\u6743\u3002\u5982\u679C BotMux \u8FD0\u884C\u5728\u8FDC\u7A0B\u865A\u62DF\u673A\u4E0A\uFF0C\u6D4F\u89C8\u5668\u4F1A\u56E0\u65E0\u6CD5\u8BBF\u95EE\u672C\u673A\u5730\u5740 ", _jsx("code", { children: "127.0.0.1:9768" }), " \u800C\u663E\u793A\u201C\u65E0\u6CD5\u8BBF\u95EE\u201D\uFF1B\u6B64\u65F6\u8BF7\u590D\u5236\u5730\u5740\u680F\u4E2D\u7684\u5B8C\u6574\u94FE\u63A5\u5E76\u7C98\u8D34\u5230\u4E0B\u65B9\u3002"] }), _jsx("button", { type: "button", className: "primary feed-group-auth-open", onClick: () => window.open(feedGroupAuthUrl, '_blank', 'noopener'), children: "\u8DF3\u8F6C\u98DE\u4E66\u6388\u6743" }), _jsxs("label", { children: [_jsx("span", { children: "\u8BF7\u628A\u70B9\u51FB\u6388\u6743\u540E\u7684\u5B8C\u6574\u94FE\u63A5\u7C98\u8D34\u5728\u8FD9\u91CC" }), _jsx("input", { type: "url", value: feedGroupCallbackUrl, placeholder: "http://127.0.0.1:9768/callback?code=\u2026&state=\u2026", onChange: event => setFeedGroupCallbackUrl(event.currentTarget.value) })] }), _jsxs("div", { className: "actions", children: [_jsx("button", { type: "button", onClick: () => { setFeedGroupAuthUrl(''); setFeedGroupCallbackUrl(''); }, children: "\u53D6\u6D88" }), _jsx("button", { type: "button", className: "primary", disabled: !feedGroupCallbackUrl.trim() || feedGroupAuthSubmitting, onClick: () => void completeFeedGroupLogin(feedGroupCallbackUrl), children: feedGroupAuthSubmitting ? '正在完成授权…' : '完成授权' })] })] }) })) : null, _jsxs("fieldset", { className: "cs-lead-row", hidden: mode !== 'lead', children: [_jsx("legend", { children: t('sessions.create.lead') }), _jsx("select", { name: "lead", disabled: leadOptions.length === 0, value: leadOptions.includes(lead) ? lead : '', onChange: event => setLead(event.currentTarget.value), children: leadOptions.length ? leadOptions.map(id => _jsx("option", { value: id, children: nameOf(id) }, id)) : (_jsx("option", { value: "", disabled: true, children: t('sessions.create.leadPickFirst') })) }), _jsx("small", { children: t('sessions.create.leadHelp') })] }), _jsxs("fieldset", { className: "cs-column", children: [_jsx("legend", { children: t('sessions.create.column') }), _jsxs("label", { children: [_jsx("input", { type: "radio", name: "column", value: "in_progress", checked: column === 'in_progress', onChange: () => setColumn('in_progress') }), " ", t('sessions.create.columnInProgress')] }), _jsxs("label", { children: [_jsx("input", { type: "radio", name: "column", value: "backlog", checked: column === 'backlog', onChange: () => setColumn('backlog') }), " ", t('sessions.create.columnBacklog')] }), _jsx("small", { children: t('sessions.create.columnHelp') })] }), _jsxs("fieldset", { className: `cs-advanced${advancedOpen ? ' open' : ''}`, children: [_jsx("legend", { children: _jsx("button", { type: "button", id: "cs-advanced-title", className: "cs-advanced-title", "aria-expanded": advancedOpen, "aria-controls": "cs-advanced-fields", onClick: () => setAdvancedOpen(open => !open), children: t('sessions.create.optionalConfig') }) }), advancedOpen ? (_jsxs("div", { id: "cs-advanced-fields", className: "cs-advanced-fields", children: [_jsxs("label", { className: "cs-advanced-field", children: [_jsx("span", { children: t('sessions.create.groupName') }), _jsx("input", { className: "cs-pill-input", type: "text", name: "name", maxLength: 60, placeholder: t('sessions.create.groupNamePlaceholder'), value: name, onChange: event => setName(event.currentTarget.value) })] }), _jsxs("fieldset", { className: "cs-feed-group", children: [_jsx("legend", { children: "\u98DE\u4E66\u6807\u7B7E\uFF08\u53EF\u9009\uFF09" }), _jsx(FeedGroupPicker, { groups: feedGroups, selectedId: feedGroupId, newName: newFeedGroupName, disabled: feedGroupLoading || !!feedGroupError, onChange: (selectedId, newName) => { setFeedGroupId(selectedId); setNewFeedGroupName(newName); } }), _jsx("small", { children: "\u5C55\u5F00\u540E\u53EF\u5728\u7B2C\u4E00\u884C\u8F93\u5165\u65B0\u6807\u7B7E\u540D\u79F0\uFF0C\u6216\u9009\u62E9\u4E0B\u65B9\u5DF2\u6709\u6807\u7B7E\u3002" }), feedGroupLoading ? _jsx("small", { children: "\u6B63\u5728\u8BFB\u53D6\u98DE\u4E66\u6807\u7B7E\u2026" }) : null, feedGroupError ? (_jsxs("div", { className: "cs-warn", children: [_jsx("small", { children: feedGroupError }), ' ', _jsx("button", { type: "button", disabled: feedGroupAuthSubmitting, onClick: () => void openFeedGroupLogin(), children: feedGroupAuthSubmitting ? '正在完成授权…' : '立即授权' }), _jsx("small", { children: " \u6388\u6743\u540E\u4F1A\u5F39\u7A97\u63D0\u793A\u4F60\u7C98\u8D34\u56DE\u8C03\u5730\u5740\u3002" })] })) : null] }), _jsxs("label", { className: "cs-advanced-field", children: [_jsx("span", { children: t('sessions.create.workingDir') }), _jsx("input", { className: "cs-pill-input", type: "text", name: "bindWorkingDir", placeholder: "e.g. ~/projects/foo", value: bindWorkingDir, onChange: event => setBindWorkingDir(event.currentTarget.value) }), _jsx("small", { children: t('sessions.create.workingDirHelp') })] })] })) : null] }), keptSuccess ? (_jsxs("p", { className: "cs-keep-success", role: "status", children: [_jsxs("span", { children: [keptSuccess.column === 'backlog' ? t('sessions.create.doneBacklog') : t('sessions.create.doneInProgress'), Array.isArray(keptSuccess.failed) && keptSuccess.failed.length > 0
|
|
1293
|
+
}, children: _jsx("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", children: _jsx("path", { d: "M7 7l10 10M17 7 7 17" }) }) })] }, image.id))) })) : null] }), _jsxs("fieldset", { className: "cs-bots", children: [_jsx("legend", { children: t('sessions.create.bots') }), _jsx(BotMultiSelect, { bots: bots, selected: selectedBots, onToggle: (id, checked) => {
|
|
1294
|
+
setSelectedBots(prev => {
|
|
1295
|
+
const next = new Set(prev);
|
|
1296
|
+
if (checked)
|
|
1297
|
+
next.add(id);
|
|
1298
|
+
else
|
|
1299
|
+
next.delete(id);
|
|
1300
|
+
if (!next.has(lead))
|
|
1301
|
+
setLead(next.values().next().value ?? '');
|
|
1302
|
+
return next;
|
|
1303
|
+
});
|
|
1304
|
+
}, searchPlaceholder: t('botPicker.searchPlaceholder'), noMatchLabel: t('botPicker.noMatch'), emptyLabel: t('sessions.create.noBots'), selectedCountLabel: n => t('botPicker.selectedCount', { n: String(n) }) })] }), _jsxs("fieldset", { className: "cs-mode", children: [_jsx("legend", { children: t('sessions.create.mode') }), _jsxs("label", { children: [_jsx("input", { type: "radio", name: "mode", value: "lead", checked: mode === 'lead', onChange: () => setMode('lead') }), " ", t('sessions.create.modeLead')] }), _jsxs("label", { children: [_jsx("input", { type: "radio", name: "mode", value: "all", checked: mode === 'all', onChange: () => setMode('all') }), " ", t('sessions.create.modeAll')] }), _jsx("small", { children: t('sessions.create.modeHelp') })] }), feedGroupAuthUrl ? (_jsx("div", { className: "feed-group-auth-overlay", children: _jsxs("section", { className: "feed-group-auth-card", role: "dialog", "aria-modal": "true", "aria-labelledby": "session-feed-group-auth-title", children: [_jsx("h3", { id: "session-feed-group-auth-title", children: "\u6388\u6743\u98DE\u4E66\u6807\u7B7E" }), _jsxs("p", { children: ["\u70B9\u51FB\u4E0B\u9762\u7684\u6309\u94AE\uFF0C\u5728\u98DE\u4E66\u9875\u9762\u786E\u8BA4\u6388\u6743\u3002\u5982\u679C BotMux \u4E0E\u6D4F\u89C8\u5668\u5728\u540C\u4E00\u53F0\u7535\u8111\uFF0C\u786E\u8BA4\u540E\u4F1A\u81EA\u52A8\u5B8C\u6210\u6388\u6743\u3002\u5982\u679C BotMux \u8FD0\u884C\u5728\u8FDC\u7A0B\u865A\u62DF\u673A\u4E0A\uFF0C\u6D4F\u89C8\u5668\u4F1A\u56E0\u65E0\u6CD5\u8BBF\u95EE\u672C\u673A\u5730\u5740 ", _jsx("code", { children: "127.0.0.1:9768" }), " \u800C\u663E\u793A\u201C\u65E0\u6CD5\u8BBF\u95EE\u201D\uFF1B\u6B64\u65F6\u8BF7\u590D\u5236\u5730\u5740\u680F\u4E2D\u7684\u5B8C\u6574\u94FE\u63A5\u5E76\u7C98\u8D34\u5230\u4E0B\u65B9\u3002"] }), _jsx("button", { type: "button", className: "primary feed-group-auth-open", onClick: () => window.open(feedGroupAuthUrl, '_blank', 'noopener'), children: "\u8DF3\u8F6C\u98DE\u4E66\u6388\u6743" }), _jsxs("label", { children: [_jsx("span", { children: "\u8BF7\u628A\u70B9\u51FB\u6388\u6743\u540E\u7684\u5B8C\u6574\u94FE\u63A5\u7C98\u8D34\u5728\u8FD9\u91CC" }), _jsx("input", { type: "url", value: feedGroupCallbackUrl, placeholder: "http://127.0.0.1:9768/callback?code=\u2026&state=\u2026", onChange: event => setFeedGroupCallbackUrl(event.currentTarget.value) })] }), _jsxs("div", { className: "actions", children: [_jsx("button", { type: "button", onClick: () => { setFeedGroupAuthUrl(''); setFeedGroupCallbackUrl(''); }, children: "\u53D6\u6D88" }), _jsx("button", { type: "button", className: "primary", disabled: !feedGroupCallbackUrl.trim() || feedGroupAuthSubmitting, onClick: () => void completeFeedGroupLogin(feedGroupCallbackUrl), children: feedGroupAuthSubmitting ? '正在完成授权…' : '完成授权' })] })] }) })) : null, _jsxs("fieldset", { className: "cs-lead-row", hidden: mode !== 'lead', children: [_jsx("legend", { children: t('sessions.create.lead') }), _jsx("select", { name: "lead", disabled: leadOptions.length === 0, value: leadOptions.includes(lead) ? lead : '', onChange: event => setLead(event.currentTarget.value), children: leadOptions.length ? leadOptions.map(id => _jsx("option", { value: id, children: nameOf(id) }, id)) : (_jsx("option", { value: "", disabled: true, children: t('sessions.create.leadPickFirst') })) }), _jsx("small", { children: t('sessions.create.leadHelp') })] }), _jsxs("fieldset", { className: "cs-column", children: [_jsx("legend", { children: t('sessions.create.column') }), _jsxs("label", { children: [_jsx("input", { type: "radio", name: "column", value: "in_progress", checked: column === 'in_progress', onChange: () => setColumn('in_progress') }), " ", t('sessions.create.columnInProgress')] }), _jsxs("label", { children: [_jsx("input", { type: "radio", name: "column", value: "backlog", checked: column === 'backlog', onChange: () => setColumn('backlog') }), " ", t('sessions.create.columnBacklog')] }), _jsx("small", { children: t('sessions.create.columnHelp') })] }), _jsxs("fieldset", { className: `cs-advanced${advancedOpen ? ' open' : ''}`, children: [_jsx("legend", { children: _jsx("button", { type: "button", id: "cs-advanced-title", className: "cs-advanced-title", "aria-expanded": advancedOpen, "aria-controls": "cs-advanced-fields", onClick: () => setAdvancedOpen(open => !open), children: t('sessions.create.optionalConfig') }) }), advancedOpen ? (_jsxs("div", { id: "cs-advanced-fields", className: "cs-advanced-fields", children: [_jsxs("label", { className: "cs-advanced-field", children: [_jsx("span", { children: t('sessions.create.groupName') }), _jsx("input", { className: "cs-pill-input", type: "text", name: "name", maxLength: 60, placeholder: t('sessions.create.groupNamePlaceholder'), value: name, onChange: event => setName(event.currentTarget.value) })] }), _jsxs("fieldset", { className: "cs-feed-group", children: [_jsx("legend", { children: "\u98DE\u4E66\u6807\u7B7E\uFF08\u53EF\u9009\uFF09" }), _jsx(FeedGroupPicker, { groups: feedGroups, selectedId: feedGroupId, newName: newFeedGroupName, disabled: feedGroupLoading || !!feedGroupError, onChange: (selectedId, newName) => { setFeedGroupId(selectedId); setNewFeedGroupName(newName); } }), _jsx("small", { children: "\u5C55\u5F00\u540E\u53EF\u5728\u7B2C\u4E00\u884C\u8F93\u5165\u65B0\u6807\u7B7E\u540D\u79F0\uFF0C\u6216\u9009\u62E9\u4E0B\u65B9\u5DF2\u6709\u6807\u7B7E\u3002" }), feedGroupLoading ? _jsx("small", { children: "\u6B63\u5728\u8BFB\u53D6\u98DE\u4E66\u6807\u7B7E\u2026" }) : null, feedGroupError ? (_jsxs("div", { className: "cs-warn", children: [_jsx("small", { children: feedGroupError }), ' ', _jsx("button", { type: "button", disabled: feedGroupAuthSubmitting, onClick: () => void openFeedGroupLogin(), children: feedGroupAuthSubmitting ? '正在完成授权…' : '立即授权' }), _jsx("small", { children: " \u6388\u6743\u540E\u4F1A\u5F39\u7A97\u63D0\u793A\u4F60\u7C98\u8D34\u56DE\u8C03\u5730\u5740\u3002" })] })) : null] }), _jsxs("label", { className: "cs-advanced-field", children: [_jsx("span", { children: t('sessions.create.workingDir') }), _jsx("input", { className: "cs-pill-input", type: "text", name: "bindWorkingDir", placeholder: "e.g. ~/projects/foo", value: bindWorkingDir, onChange: event => setBindWorkingDir(event.currentTarget.value) }), _jsx("small", { children: t('sessions.create.workingDirHelp') })] })] })) : null] }), keptSuccess ? (_jsxs("p", { className: "cs-keep-success", role: "status", children: [_jsxs("span", { children: [keptSuccess.column === 'backlog' ? t('sessions.create.doneBacklog') : t('sessions.create.doneInProgress'), Array.isArray(keptSuccess.failed) && keptSuccess.failed.length > 0
|
|
1311
1305
|
? ` · ${t('sessions.create.partialFail', { n: String(keptSuccess.failed.length) })}`
|
|
1312
1306
|
: ''] }), typeof keptSuccess.shareLink === 'string' && keptSuccess.shareLink
|
|
1313
1307
|
? _jsx("a", { href: keptSuccess.shareLink, target: "_blank", rel: "noopener", children: t('sessions.create.openChat') })
|
|
@@ -1398,9 +1392,7 @@ function SessionsPage() {
|
|
|
1398
1392
|
if (!filters.showUnknownChats && isUnknownChatSession(row))
|
|
1399
1393
|
continue;
|
|
1400
1394
|
const label = sessionLocationText(row);
|
|
1401
|
-
|
|
1402
|
-
if (!existing || label < existing)
|
|
1403
|
-
options.set(chatId, label);
|
|
1395
|
+
options.set(chatId, preferChatFilterLabel(options.get(chatId), label, chatId));
|
|
1404
1396
|
}
|
|
1405
1397
|
return [...options.entries()]
|
|
1406
1398
|
.sort((a, b) => a[1].localeCompare(b[1]))
|