botmux 3.18.6 → 3.18.7
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/adapters/backend/riff-backend.d.ts +158 -0
- package/dist/adapters/backend/riff-backend.d.ts.map +1 -1
- package/dist/adapters/backend/riff-backend.js +330 -7
- package/dist/adapters/backend/riff-backend.js.map +1 -1
- package/dist/adapters/backend/sandbox.d.ts +42 -0
- package/dist/adapters/backend/sandbox.d.ts.map +1 -1
- package/dist/adapters/backend/sandbox.js +95 -5
- package/dist/adapters/backend/sandbox.js.map +1 -1
- package/dist/adapters/cli/codex-app.d.ts.map +1 -1
- package/dist/adapters/cli/codex-app.js +2 -1
- package/dist/adapters/cli/codex-app.js.map +1 -1
- package/dist/adapters/cli/dsh.d.ts.map +1 -1
- package/dist/adapters/cli/dsh.js +2 -1
- package/dist/adapters/cli/dsh.js.map +1 -1
- package/dist/adapters/cli/mir.d.ts.map +1 -1
- package/dist/adapters/cli/mir.js +2 -1
- package/dist/adapters/cli/mir.js.map +1 -1
- package/dist/adapters/cli/mira.d.ts.map +1 -1
- package/dist/adapters/cli/mira.js +2 -1
- package/dist/adapters/cli/mira.js.map +1 -1
- package/dist/adapters/hook-command.d.ts +3 -5
- package/dist/adapters/hook-command.d.ts.map +1 -1
- package/dist/adapters/hook-command.js +59 -13
- package/dist/adapters/hook-command.js.map +1 -1
- package/dist/autostart.d.ts +76 -0
- package/dist/autostart.d.ts.map +1 -1
- package/dist/autostart.js +105 -28
- package/dist/autostart.js.map +1 -1
- package/dist/bot-registry.d.ts +12 -0
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +43 -3
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli/dashboard-command.d.ts +142 -0
- package/dist/cli/dashboard-command.d.ts.map +1 -1
- package/dist/cli/dashboard-command.js +160 -0
- package/dist/cli/dashboard-command.js.map +1 -1
- package/dist/cli/dashboard-endpoint.d.ts +66 -0
- package/dist/cli/dashboard-endpoint.d.ts.map +1 -1
- package/dist/cli/dashboard-endpoint.js +144 -30
- package/dist/cli/dashboard-endpoint.js.map +1 -1
- package/dist/cli/send-dispatch.d.ts +2 -0
- package/dist/cli/send-dispatch.d.ts.map +1 -1
- package/dist/cli/send-dispatch.js +8 -2
- package/dist/cli/send-dispatch.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +270 -38
- package/dist/cli.js.map +1 -1
- package/dist/core/binary-self-update.d.ts +7 -0
- package/dist/core/binary-self-update.d.ts.map +1 -1
- package/dist/core/binary-self-update.js +17 -0
- package/dist/core/binary-self-update.js.map +1 -1
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +52 -1
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/cost-calculator.d.ts +9 -1
- package/dist/core/cost-calculator.d.ts.map +1 -1
- package/dist/core/cost-calculator.js +5 -0
- package/dist/core/cost-calculator.js.map +1 -1
- package/dist/core/passthrough-commands.d.ts.map +1 -1
- package/dist/core/passthrough-commands.js +1 -1
- package/dist/core/passthrough-commands.js.map +1 -1
- package/dist/core/self-spawn.d.ts +46 -1
- package/dist/core/self-spawn.d.ts.map +1 -1
- package/dist/core/self-spawn.js +57 -0
- package/dist/core/self-spawn.js.map +1 -1
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +81 -5
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +93 -0
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/autostart-api.d.ts.map +1 -1
- package/dist/dashboard/autostart-api.js +16 -3
- package/dist/dashboard/autostart-api.js.map +1 -1
- package/dist/dashboard/bot-onboarding.d.ts +2 -1
- package/dist/dashboard/bot-onboarding.d.ts.map +1 -1
- package/dist/dashboard/bot-onboarding.js +22 -6
- package/dist/dashboard/bot-onboarding.js.map +1 -1
- package/dist/dashboard/bot-payload.d.ts +1 -0
- package/dist/dashboard/bot-payload.d.ts.map +1 -1
- package/dist/dashboard/bot-payload.js +3 -0
- package/dist/dashboard/bot-payload.js.map +1 -1
- package/dist/dashboard/connector-api.d.ts.map +1 -1
- package/dist/dashboard/connector-api.js +28 -0
- package/dist/dashboard/connector-api.js.map +1 -1
- package/dist/dashboard/trigger-api.d.ts.map +1 -1
- package/dist/dashboard/trigger-api.js +33 -21
- package/dist/dashboard/trigger-api.js.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.js +12 -2
- package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
- package/dist/dashboard/web/bot-defaults.d.ts +2 -0
- package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults.js.map +1 -1
- package/dist/dashboard/web/bot-onboarding.d.ts +40 -1
- package/dist/dashboard/web/bot-onboarding.d.ts.map +1 -1
- package/dist/dashboard/web/bot-onboarding.js +52 -2
- package/dist/dashboard/web/bot-onboarding.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +2 -0
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/webhook-routes.d.ts.map +1 -1
- package/dist/dashboard/webhook-routes.js +272 -30
- package/dist/dashboard/webhook-routes.js.map +1 -1
- package/dist/dashboard-web/app.js +1 -1
- package/dist/dashboard-web/chunks/{agent-workbench-dock-page-XHJUYFGN.js → agent-workbench-dock-page-6LC422N6.js} +1 -1
- package/dist/dashboard-web/chunks/{agent-workbench-page-FLKTLIRM.js → agent-workbench-page-RSAWY7O2.js} +1 -1
- package/dist/dashboard-web/chunks/{bot-defaults-page-XMGLZZ2E.js → bot-defaults-page-67RAWCSQ.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-TLG45URB.js → chunk-IA5KMD5O.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-BU3Q6XC6.js → chunk-K232GT3M.js} +2 -2
- package/dist/dashboard-web/chunks/chunk-MMLTCXHP.js +10 -0
- package/dist/dashboard-web/chunks/{chunk-ECFC7UG2.js → chunk-R3LJUCEO.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-Z67OSM5P.js → chunk-YJA3KY3J.js} +1 -1
- package/dist/dashboard-web/chunks/{connectors-page-WDM4CEAU.js → connectors-page-DJCTHSFB.js} +1 -1
- package/dist/dashboard-web/chunks/{feedback-page-GMJ4FLJ4.js → feedback-page-O7SZRKNM.js} +1 -1
- package/dist/dashboard-web/chunks/{groups-page-L4ZJNWVR.js → groups-page-7PONUYHE.js} +1 -1
- package/dist/dashboard-web/chunks/{insights-page-7LUJU2CX.js → insights-page-J6DAAJ6D.js} +1 -1
- package/dist/dashboard-web/chunks/{monitor-room-7LZUJQPF.js → monitor-room-F3QNEW7N.js} +1 -1
- package/dist/dashboard-web/chunks/{monitoring-page-AUSXMPYO.js → monitoring-page-JHDD2VS2.js} +1 -1
- package/dist/dashboard-web/chunks/{office-page-6ZU6MAZN.js → office-page-MMTN4IKD.js} +1 -1
- package/dist/dashboard-web/chunks/{overview-page-QBC5CIYH.js → overview-page-IQ2UJAJP.js} +1 -1
- package/dist/dashboard-web/chunks/{roles-page-QO3YCA7D.js → roles-page-FNI4MGX6.js} +1 -1
- package/dist/dashboard-web/chunks/{schedules-page-YNGSKDQW.js → schedules-page-6PUU63KS.js} +1 -1
- package/dist/dashboard-web/chunks/{sessions-page-BWR4UB6X.js → sessions-page-O4N72EXT.js} +4 -4
- package/dist/dashboard-web/chunks/{settings-page-2IRIS3FP.js → settings-page-G7B3STUF.js} +1 -1
- package/dist/dashboard-web/chunks/{skills-page-5RZPM6HJ.js → skills-page-CEWKQOIG.js} +1 -1
- package/dist/dashboard-web/chunks/{team-federation-page-KERG6LKC.js → team-federation-page-NUP4VK4H.js} +1 -1
- package/dist/dashboard-web/chunks/{v3-page-766CBD7H.js → v3-page-M4XF6D5Z.js} +1 -1
- package/dist/dashboard-web/chunks/{whiteboards-page-2M6XZD5C.js → whiteboards-page-L755NZX6.js} +1 -1
- package/dist/dashboard-web/style.css +13 -0
- package/dist/dashboard.js +3 -0
- package/dist/dashboard.js.map +1 -1
- package/dist/global-config.d.ts +3 -0
- package/dist/global-config.d.ts.map +1 -1
- package/dist/global-config.js +10 -3
- package/dist/global-config.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +19 -1
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +19 -1
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/api-gate.d.ts +53 -0
- package/dist/im/lark/api-gate.d.ts.map +1 -0
- package/dist/im/lark/api-gate.js +322 -0
- package/dist/im/lark/api-gate.js.map +1 -0
- package/dist/im/lark/audio-transcribe.d.ts +23 -0
- package/dist/im/lark/audio-transcribe.d.ts.map +1 -0
- package/dist/im/lark/audio-transcribe.js +126 -0
- package/dist/im/lark/audio-transcribe.js.map +1 -0
- package/dist/im/lark/card-builder.d.ts +6 -0
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +53 -1
- package/dist/im/lark/card-builder.js.map +1 -1
- package/dist/im/lark/card-handler.d.ts +10 -0
- package/dist/im/lark/card-handler.d.ts.map +1 -1
- package/dist/im/lark/card-handler.js +68 -1
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/client.d.ts.map +1 -1
- package/dist/im/lark/client.js +247 -224
- package/dist/im/lark/client.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +34 -3
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/im/lark/message-parser.d.ts +16 -0
- package/dist/im/lark/message-parser.d.ts.map +1 -1
- package/dist/im/lark/message-parser.js +31 -0
- package/dist/im/lark/message-parser.js.map +1 -1
- package/dist/services/budget-tracker.d.ts +61 -0
- package/dist/services/budget-tracker.d.ts.map +1 -0
- package/dist/services/budget-tracker.js +306 -0
- package/dist/services/budget-tracker.js.map +1 -0
- package/dist/services/connector-store.d.ts +16 -0
- package/dist/services/connector-store.d.ts.map +1 -1
- package/dist/services/connector-store.js.map +1 -1
- package/dist/services/failed-turn-retry.d.ts +43 -0
- package/dist/services/failed-turn-retry.d.ts.map +1 -0
- package/dist/services/failed-turn-retry.js +50 -0
- package/dist/services/failed-turn-retry.js.map +1 -0
- package/dist/services/model-pricing.d.ts +80 -0
- package/dist/services/model-pricing.d.ts.map +1 -0
- package/dist/services/model-pricing.js +182 -0
- package/dist/services/model-pricing.js.map +1 -0
- package/dist/services/session-store.d.ts.map +1 -1
- package/dist/services/session-store.js +13 -3
- package/dist/services/session-store.js.map +1 -1
- package/dist/services/trigger-types.d.ts +10 -0
- package/dist/services/trigger-types.d.ts.map +1 -1
- package/dist/services/trigger-types.js.map +1 -1
- package/dist/services/usage-ledger.d.ts +10 -0
- package/dist/services/usage-ledger.d.ts.map +1 -1
- package/dist/services/usage-ledger.js +36 -0
- package/dist/services/usage-ledger.js.map +1 -1
- package/dist/services/voice/asr.d.ts +17 -0
- package/dist/services/voice/asr.d.ts.map +1 -0
- package/dist/services/voice/asr.js +64 -0
- package/dist/services/voice/asr.js.map +1 -0
- package/dist/services/voice/index.d.ts +17 -2
- package/dist/services/voice/index.d.ts.map +1 -1
- package/dist/services/voice/index.js +43 -0
- package/dist/services/voice/index.js.map +1 -1
- package/dist/services/voice/types.d.ts +15 -0
- package/dist/services/voice/types.d.ts.map +1 -1
- package/dist/services/webhook-idempotency.d.ts +134 -0
- package/dist/services/webhook-idempotency.d.ts.map +1 -0
- package/dist/services/webhook-idempotency.js +265 -0
- package/dist/services/webhook-idempotency.js.map +1 -0
- package/dist/setup/app-name.d.ts +1 -0
- package/dist/setup/app-name.d.ts.map +1 -1
- package/dist/setup/app-name.js +7 -0
- package/dist/setup/app-name.js.map +1 -1
- package/dist/setup/bot-config-editor.d.ts +28 -0
- package/dist/setup/bot-config-editor.d.ts.map +1 -1
- package/dist/setup/bot-config-editor.js +73 -0
- package/dist/setup/bot-config-editor.js.map +1 -1
- package/dist/setup/open-platform-automation.d.ts +26 -0
- package/dist/setup/open-platform-automation.d.ts.map +1 -1
- package/dist/setup/open-platform-automation.js +90 -1
- package/dist/setup/open-platform-automation.js.map +1 -1
- package/dist/setup/open-platform-outcome.d.ts.map +1 -1
- package/dist/setup/open-platform-outcome.js +8 -2
- package/dist/setup/open-platform-outcome.js.map +1 -1
- package/dist/types.d.ts +20 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/usage-limit-tracker.d.ts +29 -9
- package/dist/utils/usage-limit-tracker.d.ts.map +1 -1
- package/dist/utils/usage-limit-tracker.js +122 -14
- package/dist/utils/usage-limit-tracker.js.map +1 -1
- package/dist/worker.js +27 -6
- package/dist/worker.js.map +1 -1
- package/dist/workflows/definition.d.ts +56 -56
- package/dist/workflows/events/payloads.d.ts +2 -2
- package/dist/workflows/events/schema.d.ts +430 -430
- package/dist/workflows/migration/v2-run-archive-schema.d.ts +2 -2
- package/dist/workflows/v3/run-envelope.d.ts +56 -56
- package/package.json +9 -8
- package/scripts/postinstall-bin.mjs +25 -0
- package/dist/dashboard-web/chunks/chunk-NJCJR3U2.js +0 -10
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inbound voice-message transcription pipeline (语音接线):
|
|
3
|
+
*
|
|
4
|
+
* msg_type=audio → 下载 opus → OpenAI 兼容 ASR 转写 → 带 🎤 前缀文本注入会话
|
|
5
|
+
*
|
|
6
|
+
* 设计要点:
|
|
7
|
+
* - 对非 audio 消息零开销(第一行 msgType 检查即返回),daemon 在两个入口
|
|
8
|
+
* (新话题 / 话题续聊)admission 之后、session 创建之前调用,转写失败不留
|
|
9
|
+
* 孤儿会话、不浪费额度。
|
|
10
|
+
* - 转写耗时可达数秒至数十秒,先发「正在转写…」占位消息提供即时反馈,成功
|
|
11
|
+
* 后删除占位;失败则删占位并回具体错误。
|
|
12
|
+
* - 幂等:prepared 重投路径若 parsed.content 已带前缀,直接跳过转写。
|
|
13
|
+
* - 所有 reply/delete 调用均 try/catch 容错——反馈通道故障不能炸主流程。
|
|
14
|
+
*
|
|
15
|
+
* ASR 配置(voice.asr,默认关闭)由 services/voice 的 resolveAsrConfig 按
|
|
16
|
+
* per-bot 覆盖 global 解析;本模块不直接读配置文件。
|
|
17
|
+
*/
|
|
18
|
+
import { mkdtempSync, rmSync } from 'node:fs';
|
|
19
|
+
import { tmpdir } from 'node:os';
|
|
20
|
+
import { join } from 'node:path';
|
|
21
|
+
import { logger } from '../../utils/logger.js';
|
|
22
|
+
import { deleteMessage, downloadMessageResource } from './client.js';
|
|
23
|
+
import { extractAudioMeta } from './message-parser.js';
|
|
24
|
+
import { resolveAsrConfig } from '../../services/voice/index.js';
|
|
25
|
+
import { transcribeAudioFile } from '../../services/voice/asr.js';
|
|
26
|
+
/** 注入会话的转写文本前缀——CLI 与群成员据此可知输入来自语音转写。 */
|
|
27
|
+
export const AUDIO_TRANSCRIPTION_PREFIX = '🎤 语音转写:';
|
|
28
|
+
function errMsg(err) {
|
|
29
|
+
return err instanceof Error ? err.message : String(err);
|
|
30
|
+
}
|
|
31
|
+
/** 反馈通道(reply/delete)故障只记 debug,不影响转写主流程。 */
|
|
32
|
+
async function safeReply(reply, text) {
|
|
33
|
+
try {
|
|
34
|
+
await reply(text);
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
logger.debug(`[audio-transcribe] reply failed: ${errMsg(err)}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Resolve an inbound audio message into transcript text for session injection.
|
|
42
|
+
*
|
|
43
|
+
* @param larkAppId bot 应用 ID(配置解析 + 资源下载)
|
|
44
|
+
* @param messageId 飞书 om_ 消息 ID(下载资源 + reply 锚点)
|
|
45
|
+
* @param msgType parsed.msgType
|
|
46
|
+
* @param rawEventContent data.message.content 原始 JSON(含 file_key)
|
|
47
|
+
* @param parsedContent parsed.content(幂等检查:已带前缀则跳过)
|
|
48
|
+
* @param reply 发文本消息的回调(daemon 注入 replyMessage)
|
|
49
|
+
*/
|
|
50
|
+
export async function resolveInboundAudio(larkAppId, messageId, msgType, rawEventContent, parsedContent, reply) {
|
|
51
|
+
if (msgType !== 'audio')
|
|
52
|
+
return { kind: 'not_audio' };
|
|
53
|
+
// 幂等:prepared 重投等路径下 content 已是转写文本,不重复转写。
|
|
54
|
+
if (parsedContent.startsWith(AUDIO_TRANSCRIPTION_PREFIX)) {
|
|
55
|
+
return { kind: 'transcribed', text: parsedContent };
|
|
56
|
+
}
|
|
57
|
+
const cfg = resolveAsrConfig(larkAppId);
|
|
58
|
+
if (!cfg) {
|
|
59
|
+
const userMessage = '未配置语音识别:请在 voice.asr 配置 enabled/baseUrl/model(可选 apiKey)后重试。';
|
|
60
|
+
await safeReply(reply, userMessage);
|
|
61
|
+
return { kind: 'failed', userMessage };
|
|
62
|
+
}
|
|
63
|
+
// 即时反馈:转写可能耗时数十秒,先回一条占位消息,结束后删除。
|
|
64
|
+
let placeholderId;
|
|
65
|
+
try {
|
|
66
|
+
placeholderId = await reply('🎤 正在转写语音…');
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
logger.debug(`[audio-transcribe] placeholder reply failed: ${errMsg(err)}`);
|
|
70
|
+
}
|
|
71
|
+
const clearPlaceholder = async () => {
|
|
72
|
+
if (!placeholderId)
|
|
73
|
+
return;
|
|
74
|
+
try {
|
|
75
|
+
await deleteMessage(larkAppId, placeholderId);
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
logger.debug(`[audio-transcribe] placeholder delete failed: ${errMsg(err)}`);
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
const meta = extractAudioMeta(rawEventContent);
|
|
82
|
+
if (!meta) {
|
|
83
|
+
const userMessage = '语音消息解析失败:内容缺少 file_key,无法下载语音。';
|
|
84
|
+
await clearPlaceholder();
|
|
85
|
+
await safeReply(reply, userMessage);
|
|
86
|
+
return { kind: 'failed', userMessage };
|
|
87
|
+
}
|
|
88
|
+
const dir = mkdtempSync(join(tmpdir(), 'botmux-asr-'));
|
|
89
|
+
const audioPath = join(dir, 'voice.ogg');
|
|
90
|
+
try {
|
|
91
|
+
try {
|
|
92
|
+
// 飞书语音是 ogg/opus;type='file' 走 im.v1.message.resource 下载。
|
|
93
|
+
await downloadMessageResource(larkAppId, messageId, meta.fileKey, 'file', audioPath);
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
// UserTokenMissingError 的 message 已含 /login 提示,直接透传。
|
|
97
|
+
const userMessage = `语音下载失败:${errMsg(err)}`;
|
|
98
|
+
await clearPlaceholder();
|
|
99
|
+
await safeReply(reply, userMessage);
|
|
100
|
+
return { kind: 'failed', userMessage };
|
|
101
|
+
}
|
|
102
|
+
let text;
|
|
103
|
+
try {
|
|
104
|
+
text = await transcribeAudioFile(cfg, audioPath);
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
const userMessage = `语音转写失败:${errMsg(err)}`;
|
|
108
|
+
await clearPlaceholder();
|
|
109
|
+
await safeReply(reply, userMessage);
|
|
110
|
+
return { kind: 'failed', userMessage };
|
|
111
|
+
}
|
|
112
|
+
text = text.trim();
|
|
113
|
+
if (!text) {
|
|
114
|
+
const userMessage = '语音转写失败:ASR 转写结果为空。';
|
|
115
|
+
await clearPlaceholder();
|
|
116
|
+
await safeReply(reply, userMessage);
|
|
117
|
+
return { kind: 'failed', userMessage };
|
|
118
|
+
}
|
|
119
|
+
await clearPlaceholder();
|
|
120
|
+
return { kind: 'transcribed', text: `${AUDIO_TRANSCRIPTION_PREFIX}\n${text}` };
|
|
121
|
+
}
|
|
122
|
+
finally {
|
|
123
|
+
rmSync(dir, { recursive: true, force: true });
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=audio-transcribe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio-transcribe.js","sourceRoot":"","sources":["../../../src/im/lark/audio-transcribe.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,12 @@ import { type CardUsageSnapshot } from './md-card.js';
|
|
|
10
10
|
import type { ConfigCardData } from '../../services/bot-config-store.js';
|
|
11
11
|
/** select_static 里代表「清回默认 / 未设置」的哨兵值(model / lang 下拉用)。 */
|
|
12
12
|
export declare const CONFIG_UNSET = "__unset__";
|
|
13
|
+
/** 流式卡片上下文占用百分比变色/高亮的缺省阈值(dashboard.contextCompactThreshold
|
|
14
|
+
* 缺省或非法时使用)。readGlobalConfig 自带 2s TTL 缓存,每次卡片构建调用成本极低。 */
|
|
15
|
+
export declare const DEFAULT_CONTEXT_COMPACT_THRESHOLD = 80;
|
|
16
|
+
/** 上下文占用百分比阈值:读 global-config 的 dashboard.contextCompactThreshold,
|
|
17
|
+
* 校验 finite 且 1..100,否则回退默认 80(与 readDashboard 的 lenient 读法一致)。 */
|
|
18
|
+
export declare function contextCompactThreshold(): number;
|
|
13
19
|
/**
|
|
14
20
|
* 交互配置卡片:`/botconfig`(裸)返回它。按配置页逻辑分区(运行 / 卡片行为 / 主动开工 /
|
|
15
21
|
* 安全·授权),cli·model·lang 用下拉,布尔字段用切换按钮(i18n 文案 + ✅/⬜️),消息额度
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"card-builder.d.ts","sourceRoot":"","sources":["../../../src/im/lark/card-builder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAoC,KAAK,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAC1G,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAK,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAmD,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEvG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAUzE,2DAA2D;AAC3D,eAAO,MAAM,YAAY,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"card-builder.d.ts","sourceRoot":"","sources":["../../../src/im/lark/card-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,17 @@ import { isLocalCliOpenEnabled } from '../../services/local-cli-opener.js';
|
|
|
7
7
|
import { clampGrantQuotaForCard, DEFAULT_GRANT_DURATION_MS, DEFAULT_GRANT_QUOTA, GRANT_DURATION_OPTIONS, MAX_GRANT_QUOTA, } from '../../services/grant-policy.js';
|
|
8
8
|
/** select_static 里代表「清回默认 / 未设置」的哨兵值(model / lang 下拉用)。 */
|
|
9
9
|
export const CONFIG_UNSET = '__unset__';
|
|
10
|
+
/** 流式卡片上下文占用百分比变色/高亮的缺省阈值(dashboard.contextCompactThreshold
|
|
11
|
+
* 缺省或非法时使用)。readGlobalConfig 自带 2s TTL 缓存,每次卡片构建调用成本极低。 */
|
|
12
|
+
export const DEFAULT_CONTEXT_COMPACT_THRESHOLD = 80;
|
|
13
|
+
/** 上下文占用百分比阈值:读 global-config 的 dashboard.contextCompactThreshold,
|
|
14
|
+
* 校验 finite 且 1..100,否则回退默认 80(与 readDashboard 的 lenient 读法一致)。 */
|
|
15
|
+
export function contextCompactThreshold() {
|
|
16
|
+
const v = readGlobalConfig().dashboard?.contextCompactThreshold;
|
|
17
|
+
if (typeof v === 'number' && Number.isFinite(v) && v >= 1 && v <= 100)
|
|
18
|
+
return Math.round(v);
|
|
19
|
+
return DEFAULT_CONTEXT_COMPACT_THRESHOLD;
|
|
20
|
+
}
|
|
10
21
|
/** 布尔字段按配置页的逻辑分组(与 dashboard 的 Bot Profiles 区块对应)。 */
|
|
11
22
|
const CONFIG_CARD_BOOLEAN_GROUPS = [
|
|
12
23
|
{ sec: 'card.config.sec.card', keys: ['disableStreamingCard', 'silentTurnReactions', 'writableTerminalLinkInCard', 'privateCard'] },
|
|
@@ -731,7 +742,7 @@ export function truncateContent(content, locale, maxBytes = MAX_CONTENT_BYTES) {
|
|
|
731
742
|
* card limit, leaving room for JSON escaping + the card's structural overhead. */
|
|
732
743
|
const PRIVATE_SNAPSHOT_TEXT_MAX = 50_000;
|
|
733
744
|
const STREAM_TEMPLATE_MAP = {
|
|
734
|
-
starting: 'yellow', working: 'blue', idle: 'green', analyzing: 'purple', stalled: 'red', limited: 'red', retry_ready: 'green',
|
|
745
|
+
starting: 'yellow', working: 'blue', idle: 'green', analyzing: 'purple', stalled: 'red', limited: 'red', retry_ready: 'green', interrupted: 'orange',
|
|
735
746
|
};
|
|
736
747
|
/** Header status label for a streaming/snapshot card. Shared by the live card
|
|
737
748
|
* and the private snapshot so the two never drift. */
|
|
@@ -748,6 +759,7 @@ function streamStatusLabel(status, usageLimit, locale, silentIdle) {
|
|
|
748
759
|
case 'limited': return usageLimit?.retryReady
|
|
749
760
|
? t('card.status.retry_ready', undefined, locale)
|
|
750
761
|
: t('card.status.limited', undefined, locale);
|
|
762
|
+
case 'interrupted': return t('card.status.interrupted', undefined, locale);
|
|
751
763
|
}
|
|
752
764
|
}
|
|
753
765
|
/** Push the shared "output body" elements (usage-limit notice + screenshot) used
|
|
@@ -815,6 +827,21 @@ export function buildStreamingCard(sessionId, rootId, terminalUrl, title, screen
|
|
|
815
827
|
const elements = [];
|
|
816
828
|
// ── Output body (shared with the private snapshot card) ──────────────────
|
|
817
829
|
pushStreamBody(elements, { status, usageLimit, displayMode, imageKey, cliName, locale, usage });
|
|
830
|
+
// ── 上下文余量指示(header 之下、控制行之上的显著位置)────────────────────
|
|
831
|
+
// 数据来自 usage.context.percentUsed(worker-pool 的 getDaemonStreamingCardUsageSnapshot
|
|
832
|
+
// 算好传入);无 contextWindow 数据(percentUsed 非有限数)时不渲染——优雅降级。
|
|
833
|
+
const contextPct = usage?.context?.percentUsed;
|
|
834
|
+
const hasContextPct = typeof contextPct === 'number' && Number.isFinite(contextPct);
|
|
835
|
+
if (hasContextPct) {
|
|
836
|
+
const pct = Math.min(100, Math.round(contextPct));
|
|
837
|
+
const overThreshold = pct >= contextCompactThreshold();
|
|
838
|
+
elements.push({
|
|
839
|
+
tag: 'markdown',
|
|
840
|
+
content: overThreshold
|
|
841
|
+
? `<font color='red'>⚠️ ${t('card.context.over_threshold', { pct }, locale)}</font>`
|
|
842
|
+
: `<font color='grey'>📊 ${t('card.context.indicator', { pct }, locale)}</font>`,
|
|
843
|
+
});
|
|
844
|
+
}
|
|
818
845
|
// ── Main control row: display toggle, mode toggle, terminal, manage ─────
|
|
819
846
|
const headerActions = [];
|
|
820
847
|
headerActions.push({
|
|
@@ -866,6 +893,31 @@ export function buildStreamingCard(sessionId, rootId, terminalUrl, title, screen
|
|
|
866
893
|
value: { action: 'get_write_link', ...actionBase },
|
|
867
894
|
});
|
|
868
895
|
}
|
|
896
|
+
// 「🗜️ 压缩」:仅在有上下文占用数据时出现(无 contextWindow 的 CLI 优雅降级为不渲染)。
|
|
897
|
+
// 点击走 card-handler 的 compact_session → daemon 的 deliverPassthroughToExistingSession
|
|
898
|
+
// (raw_input 透传 /compact,含完整 turn 生命周期),不新造压缩逻辑。
|
|
899
|
+
if (hasContextPct) {
|
|
900
|
+
headerActions.push({
|
|
901
|
+
tag: 'button',
|
|
902
|
+
text: { tag: 'plain_text', content: t('card.btn.compact', undefined, locale) },
|
|
903
|
+
type: 'default',
|
|
904
|
+
value: { action: 'compact_session', ...actionBase },
|
|
905
|
+
});
|
|
906
|
+
}
|
|
907
|
+
// 「⏹ 停止」:常驻主控制行(不再受 displayMode==='hidden' 折叠态限制——折叠态是 turn
|
|
908
|
+
// 跑飞时用户唯一可见的一行,此前只能 /close 杀整个会话丢上下文)。点击走已有的
|
|
909
|
+
// term_action ctrlc IPC 链路(与展开态 ^C 快捷键完全同款),中断当前 turn 但保留会话。
|
|
910
|
+
// 仅在有 turn 可停的状态显示:idle 无 turn 可停;starting CLI 未起;limited turn 已失败。
|
|
911
|
+
// remote CLI(riff/mojo)无终端可驱动、codex-app 无 PTY 输入通道,均隐藏。
|
|
912
|
+
if (!isRemoteCliId(cliId) && effectiveCliId !== 'codex-app'
|
|
913
|
+
&& (status === 'working' || status === 'analyzing' || status === 'stalled')) {
|
|
914
|
+
headerActions.push({
|
|
915
|
+
tag: 'button',
|
|
916
|
+
text: { tag: 'plain_text', content: t('card.btn.stop', undefined, locale) },
|
|
917
|
+
type: 'default',
|
|
918
|
+
value: { action: 'stop_turn', ...actionBase },
|
|
919
|
+
});
|
|
920
|
+
}
|
|
869
921
|
if (adoptMode) {
|
|
870
922
|
if (showTakeover) {
|
|
871
923
|
headerActions.push({
|