botmux 2.112.0 → 2.114.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/bot-registry.d.ts +31 -0
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +8 -0
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +12 -6
- package/dist/cli.js.map +1 -1
- package/dist/core/ask-broker.d.ts +1 -1
- package/dist/core/ask-broker.d.ts.map +1 -1
- package/dist/core/ask-broker.js +2 -1
- package/dist/core/ask-broker.js.map +1 -1
- package/dist/core/ask-types.d.ts +5 -0
- package/dist/core/ask-types.d.ts.map +1 -1
- package/dist/core/ask-types.js.map +1 -1
- package/dist/core/dashboard-ipc-server.d.ts +10 -0
- package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
- package/dist/core/dashboard-ipc-server.js +73 -2
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/reply-target.d.ts +30 -1
- package/dist/core/reply-target.d.ts.map +1 -1
- package/dist/core/reply-target.js +70 -7
- package/dist/core/reply-target.js.map +1 -1
- package/dist/core/types.d.ts +8 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/worker-pool.d.ts +18 -1
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +67 -11
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +85 -16
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.d.ts +8 -1
- package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.js +238 -21
- package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
- package/dist/dashboard/web/bot-defaults.d.ts +23 -0
- package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults.js +17 -0
- package/dist/dashboard/web/bot-defaults.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +54 -2
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/ui.d.ts +4 -0
- package/dist/dashboard/web/ui.d.ts.map +1 -1
- package/dist/dashboard/web/ui.js +11 -0
- package/dist/dashboard/web/ui.js.map +1 -1
- package/dist/dashboard-web/app.js +1 -1
- package/dist/dashboard-web/chunks/bot-defaults-page-SRCBF7Z3.js +5 -0
- package/dist/dashboard-web/chunks/{chunk-NYZHARIU.js → chunk-3H6MVXXU.js} +8 -6
- package/dist/dashboard-web/chunks/{chunk-YBOHL7T7.js → chunk-77KD4TK2.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-CMDPZOPK.js → chunk-D2I5F4MY.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-YWCPDL4S.js → chunk-NGRUZCXP.js} +1 -1
- package/dist/dashboard-web/chunks/{connectors-page-DAMP7TTV.js → connectors-page-RM3BJVMV.js} +1 -1
- package/dist/dashboard-web/chunks/{groups-page-BPFA356N.js → groups-page-3D4YSYLA.js} +1 -1
- package/dist/dashboard-web/chunks/{insights-page-SHOPHTWY.js → insights-page-CRFJKA54.js} +1 -1
- package/dist/dashboard-web/chunks/{monitor-room-PXPJGZCN.js → monitor-room-HLK3XDT2.js} +1 -1
- package/dist/dashboard-web/chunks/{monitoring-page-4DF54M5Y.js → monitoring-page-E3SNZFFN.js} +1 -1
- package/dist/dashboard-web/chunks/{office-page-6OHU6KMZ.js → office-page-MKQ2TENK.js} +1 -1
- package/dist/dashboard-web/chunks/overview-page-ICFKKRLV.js +1 -0
- package/dist/dashboard-web/chunks/{roles-page-JYTBYKEF.js → roles-page-2DFJ7YRU.js} +1 -1
- package/dist/dashboard-web/chunks/{schedules-page-WJ72T7KV.js → schedules-page-S4WDIXH5.js} +1 -1
- package/dist/dashboard-web/chunks/{sessions-page-QC56OIAI.js → sessions-page-4XWGUGB5.js} +1 -1
- package/dist/dashboard-web/chunks/{settings-page-TCKWEXTN.js → settings-page-OBTE4LYP.js} +1 -1
- package/dist/dashboard-web/chunks/{skills-page-RJJNIECW.js → skills-page-CTRQJR47.js} +1 -1
- package/dist/dashboard-web/chunks/{team-federation-page-ZMDX3E7K.js → team-federation-page-GICLDKJP.js} +1 -1
- package/dist/dashboard-web/chunks/{v3-page-VLLAUQ33.js → v3-page-DI55IRL5.js} +1 -1
- package/dist/dashboard-web/chunks/{whiteboards-page-NAO53CKM.js → whiteboards-page-7KFWMILV.js} +1 -1
- package/dist/dashboard-web/style.css +113 -1
- package/dist/dashboard.js +48 -0
- package/dist/dashboard.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +3 -2
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +3 -2
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/card-handler.d.ts.map +1 -1
- package/dist/im/lark/card-handler.js +9 -2
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/client.d.ts +30 -0
- package/dist/im/lark/client.d.ts.map +1 -1
- package/dist/im/lark/client.js +63 -13
- package/dist/im/lark/client.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts +7 -3
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +66 -15
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/im/lark/substitute-command.d.ts.map +1 -1
- package/dist/im/lark/substitute-command.js +10 -1
- package/dist/im/lark/substitute-command.js.map +1 -1
- package/dist/services/oncall-store.d.ts +8 -0
- package/dist/services/oncall-store.d.ts.map +1 -1
- package/dist/services/oncall-store.js +48 -2
- package/dist/services/oncall-store.js.map +1 -1
- package/dist/services/open-platform-rename.d.ts +31 -3
- package/dist/services/open-platform-rename.d.ts.map +1 -1
- package/dist/services/open-platform-rename.js +262 -48
- package/dist/services/open-platform-rename.js.map +1 -1
- package/dist/services/substitute-mode-normalize.d.ts.map +1 -1
- package/dist/services/substitute-mode-normalize.js +17 -1
- package/dist/services/substitute-mode-normalize.js.map +1 -1
- package/dist/services/substitute-mode-store.d.ts +24 -5
- package/dist/services/substitute-mode-store.d.ts.map +1 -1
- package/dist/services/substitute-mode-store.js +36 -16
- package/dist/services/substitute-mode-store.js.map +1 -1
- package/dist/skills/definitions.d.ts +1 -1
- package/dist/skills/definitions.d.ts.map +1 -1
- package/dist/skills/definitions.js +15 -3
- package/dist/skills/definitions.js.map +1 -1
- package/dist/types.d.ts +22 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/bot-routing.d.ts +1 -0
- package/dist/utils/bot-routing.d.ts.map +1 -1
- package/dist/utils/bot-routing.js +1 -1
- package/dist/utils/bot-routing.js.map +1 -1
- package/dist/workflows/migration/v2-run-archive-schema.d.ts +2 -2
- package/dist/workflows/v3/run-envelope.d.ts +16 -16
- package/package.json +1 -1
- package/dist/dashboard-web/chunks/bot-defaults-page-RYBL4ZYE.js +0 -4
- package/dist/dashboard-web/chunks/overview-page-IHIZ6F5M.js +0 -1
|
@@ -8676,6 +8676,57 @@ button.contrast:hover { background: var(--danger-soft); border-color: var(--dang
|
|
|
8676
8676
|
width: 48px;
|
|
8677
8677
|
height: 48px;
|
|
8678
8678
|
}
|
|
8679
|
+
/* 档案头头像可点击上传(BotAvatarControl)。 */
|
|
8680
|
+
.bd-avatar-editable { position: relative; }
|
|
8681
|
+
.bd-avatar-btn {
|
|
8682
|
+
display: grid;
|
|
8683
|
+
place-items: center;
|
|
8684
|
+
width: 100%;
|
|
8685
|
+
height: 100%;
|
|
8686
|
+
padding: 0;
|
|
8687
|
+
border: 0;
|
|
8688
|
+
background: none;
|
|
8689
|
+
border-radius: var(--radius-full);
|
|
8690
|
+
cursor: pointer;
|
|
8691
|
+
}
|
|
8692
|
+
.bd-avatar-btn:disabled { cursor: progress; }
|
|
8693
|
+
.bd-avatar-edit-badge {
|
|
8694
|
+
position: absolute;
|
|
8695
|
+
right: -3px;
|
|
8696
|
+
bottom: -3px;
|
|
8697
|
+
display: grid;
|
|
8698
|
+
place-items: center;
|
|
8699
|
+
width: 20px;
|
|
8700
|
+
height: 20px;
|
|
8701
|
+
font-size: 11px;
|
|
8702
|
+
border-radius: var(--radius-full);
|
|
8703
|
+
color: var(--text);
|
|
8704
|
+
background: var(--surface);
|
|
8705
|
+
border: 1px solid var(--border-soft);
|
|
8706
|
+
box-shadow: var(--shadow);
|
|
8707
|
+
opacity: 0;
|
|
8708
|
+
transition: opacity 0.15s ease;
|
|
8709
|
+
pointer-events: none;
|
|
8710
|
+
}
|
|
8711
|
+
.bd-avatar-editable:hover .bd-avatar-edit-badge,
|
|
8712
|
+
.bd-avatar-btn:focus-visible .bd-avatar-edit-badge,
|
|
8713
|
+
.bd-avatar-btn:disabled .bd-avatar-edit-badge { opacity: 1; }
|
|
8714
|
+
/* 状态气泡挂在头像下方,避免撑坏 58px 头像栏的网格布局。 */
|
|
8715
|
+
.bd-avatar-status {
|
|
8716
|
+
position: absolute;
|
|
8717
|
+
top: calc(100% + 6px);
|
|
8718
|
+
left: 0;
|
|
8719
|
+
z-index: 6;
|
|
8720
|
+
min-width: 240px;
|
|
8721
|
+
max-width: 340px;
|
|
8722
|
+
padding: 6px 9px;
|
|
8723
|
+
border-radius: var(--radius-sm);
|
|
8724
|
+
border: 1px solid var(--border-soft);
|
|
8725
|
+
background: var(--surface);
|
|
8726
|
+
box-shadow: var(--shadow);
|
|
8727
|
+
line-height: 1.5;
|
|
8728
|
+
}
|
|
8729
|
+
.bd-avatar-status .bd-feishu-login { margin-left: 6px; }
|
|
8679
8730
|
.bd-profile-main {
|
|
8680
8731
|
min-width: 0;
|
|
8681
8732
|
display: grid;
|
|
@@ -20821,7 +20872,7 @@ dialog select[multiple]:hover:not(:disabled) {
|
|
|
20821
20872
|
min-width: 0;
|
|
20822
20873
|
}
|
|
20823
20874
|
|
|
20824
|
-
.bot-defaults-page .bd-substitute-target-row > :where(.bd-field-menu, input) {
|
|
20875
|
+
.bot-defaults-page .bd-substitute-target-row > :where(.bd-field-menu, input, .bd-substitute-target-name) {
|
|
20825
20876
|
min-width: 0;
|
|
20826
20877
|
}
|
|
20827
20878
|
|
|
@@ -20922,6 +20973,67 @@ dialog select[multiple]:hover:not(:disabled) {
|
|
|
20922
20973
|
.bot-defaults-page .bd-substitute-target-remove { grid-area: remove; }
|
|
20923
20974
|
}
|
|
20924
20975
|
|
|
20976
|
+
.bot-defaults-page .bd-substitute-target-name {
|
|
20977
|
+
display: flex;
|
|
20978
|
+
align-items: center;
|
|
20979
|
+
gap: 6px;
|
|
20980
|
+
min-width: 0;
|
|
20981
|
+
}
|
|
20982
|
+
|
|
20983
|
+
.bot-defaults-page .bd-substitute-target-name > input {
|
|
20984
|
+
flex: 1 1 auto;
|
|
20985
|
+
min-width: 0;
|
|
20986
|
+
}
|
|
20987
|
+
|
|
20988
|
+
.bot-defaults-page .bd-substitute-target-name > input:disabled {
|
|
20989
|
+
background: transparent;
|
|
20990
|
+
color: var(--text);
|
|
20991
|
+
opacity: 1;
|
|
20992
|
+
cursor: default;
|
|
20993
|
+
}
|
|
20994
|
+
|
|
20995
|
+
.bot-defaults-page .bd-substitute-target-name-chip {
|
|
20996
|
+
display: inline-flex;
|
|
20997
|
+
align-items: center;
|
|
20998
|
+
gap: 6px;
|
|
20999
|
+
max-width: 100%;
|
|
21000
|
+
min-height: 26px;
|
|
21001
|
+
padding: 4px 16px;
|
|
21002
|
+
border-radius: 999px;
|
|
21003
|
+
background: var(--accent);
|
|
21004
|
+
color: var(--on-accent);
|
|
21005
|
+
font-size: 13px;
|
|
21006
|
+
font-weight: 600;
|
|
21007
|
+
line-height: 1;
|
|
21008
|
+
white-space: nowrap;
|
|
21009
|
+
overflow: hidden;
|
|
21010
|
+
text-overflow: ellipsis;
|
|
21011
|
+
user-select: none;
|
|
21012
|
+
}
|
|
21013
|
+
|
|
21014
|
+
:root[data-theme="dark"] .bot-defaults-page .bd-substitute-target-name-chip {
|
|
21015
|
+
color: var(--bg);
|
|
21016
|
+
}
|
|
21017
|
+
|
|
21018
|
+
.bot-defaults-page .bd-substitute-target-resolving {
|
|
21019
|
+
font-size: 12px;
|
|
21020
|
+
color: var(--muted);
|
|
21021
|
+
}
|
|
21022
|
+
|
|
21023
|
+
.bot-defaults-page .bd-substitute-target-resolution-badge {
|
|
21024
|
+
display: inline-flex;
|
|
21025
|
+
align-items: center;
|
|
21026
|
+
min-height: 22px;
|
|
21027
|
+
padding: 0 8px;
|
|
21028
|
+
border-radius: var(--radius-sm);
|
|
21029
|
+
border: 1px solid color-mix(in srgb, var(--danger) 40%, var(--border-soft));
|
|
21030
|
+
background: color-mix(in srgb, var(--danger) 10%, var(--surface-muted));
|
|
21031
|
+
color: var(--danger);
|
|
21032
|
+
font-size: 11px;
|
|
21033
|
+
font-weight: 700;
|
|
21034
|
+
line-height: 1;
|
|
21035
|
+
}
|
|
21036
|
+
|
|
20925
21037
|
.bot-defaults-page .bd-field-menu {
|
|
20926
21038
|
width: 100%;
|
|
20927
21039
|
min-width: 0;
|
package/dist/dashboard.js
CHANGED
|
@@ -3452,6 +3452,24 @@ const server = createServer(async (req, res) => {
|
|
|
3452
3452
|
res.end(await upstream.text());
|
|
3453
3453
|
return;
|
|
3454
3454
|
}
|
|
3455
|
+
// POST /api/bots/:appId/substitute-targets/resolve — preview resolution for a
|
|
3456
|
+
// single target without persisting; used for dashboard auto-fill.
|
|
3457
|
+
let mBotSubstituteResolve;
|
|
3458
|
+
if (req.method === 'POST' && (mBotSubstituteResolve = url.pathname.match(/^\/api\/bots\/([^/]+)\/substitute-targets\/resolve$/))) {
|
|
3459
|
+
const appId = decodeURIComponent(mBotSubstituteResolve[1]);
|
|
3460
|
+
const chunks = [];
|
|
3461
|
+
for await (const c of req)
|
|
3462
|
+
chunks.push(c);
|
|
3463
|
+
const raw = Buffer.concat(chunks).toString('utf8') || '{}';
|
|
3464
|
+
const upstream = await proxyToDaemon(appId, `/api/bot-substitute-targets/resolve`, {
|
|
3465
|
+
method: 'POST',
|
|
3466
|
+
headers: { 'content-type': 'application/json' },
|
|
3467
|
+
body: raw,
|
|
3468
|
+
});
|
|
3469
|
+
res.writeHead(upstream.status, { 'content-type': 'application/json' });
|
|
3470
|
+
res.end(await upstream.text());
|
|
3471
|
+
return;
|
|
3472
|
+
}
|
|
3455
3473
|
// PUT /api/bots/:appId/summary-range — proxy to that bot's daemon. Body
|
|
3456
3474
|
// `{ limit, sinceHours }`; daemon updates the explicit /summary range.
|
|
3457
3475
|
let mBotSummaryRange;
|
|
@@ -3565,6 +3583,36 @@ const server = createServer(async (req, res) => {
|
|
|
3565
3583
|
res.end(await upstream.text());
|
|
3566
3584
|
return;
|
|
3567
3585
|
}
|
|
3586
|
+
// PUT /api/bots/:appId/avatar — proxy to that bot's daemon. Body
|
|
3587
|
+
// `{ imageBase64: string }` (512×512 PNG, canvas-normalized by the web UI).
|
|
3588
|
+
// The daemon runs the Open Platform automation (upload icon + base_info +
|
|
3589
|
+
// publish a version); there is no local fallback — failures return the
|
|
3590
|
+
// structured reason so the UI can prompt for a Feishu web login.
|
|
3591
|
+
let mBotAvatar;
|
|
3592
|
+
if (req.method === 'PUT' && (mBotAvatar = url.pathname.match(/^\/api\/bots\/([^/]+)\/avatar$/))) {
|
|
3593
|
+
const appId = decodeURIComponent(mBotAvatar[1]);
|
|
3594
|
+
const chunks = [];
|
|
3595
|
+
let received = 0;
|
|
3596
|
+
for await (const c of req) {
|
|
3597
|
+
received += c.length;
|
|
3598
|
+
// base64 of a 512×512 PNG stays well under this; cap before buffering more.
|
|
3599
|
+
if (received > 4_000_000) {
|
|
3600
|
+
res.writeHead(413, { 'content-type': 'application/json' });
|
|
3601
|
+
res.end(JSON.stringify({ ok: false, error: 'image_too_large' }));
|
|
3602
|
+
return;
|
|
3603
|
+
}
|
|
3604
|
+
chunks.push(c);
|
|
3605
|
+
}
|
|
3606
|
+
const raw = Buffer.concat(chunks).toString('utf8') || '{}';
|
|
3607
|
+
const upstream = await proxyToDaemon(appId, `/api/bot-avatar`, {
|
|
3608
|
+
method: 'PUT',
|
|
3609
|
+
headers: { 'content-type': 'application/json' },
|
|
3610
|
+
body: raw,
|
|
3611
|
+
});
|
|
3612
|
+
res.writeHead(upstream.status, { 'content-type': 'application/json' });
|
|
3613
|
+
res.end(await upstream.text());
|
|
3614
|
+
return;
|
|
3615
|
+
}
|
|
3568
3616
|
// PUT /api/bots/:appId/max-live-workers — proxy to that bot's daemon. Body
|
|
3569
3617
|
// `{ maxLiveWorkers: number | null }` (null = clear → fall back to the
|
|
3570
3618
|
// built-in default of 30; a positive integer overrides it).
|