@bolloon/bolloon-agent 0.3.37 → 0.3.38
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/agents/pi-sdk-tools.js +107 -0
- package/dist/agents/pi-sdk.js +20 -2
- package/dist/bootstrap/context-collector.js +5 -1
- package/dist/cli/ink-app.js +46 -8
- package/dist/cli/loading-tui.js +7 -5
- package/dist/cli-entry.js +1 -1
- package/dist/electron-build/utils/auto-update.js +8 -0
- package/dist/electron-build/utils/auto-update.js.map +1 -1
- package/dist/index.js +134 -31
- package/dist/llm/config-store.js +18 -2
- package/dist/llm/pi-ai.js +29 -11
- package/dist/security/tool-gate.js +2 -0
- package/dist/utils/auto-update.js +7 -0
- package/package.json +2 -2
|
@@ -2118,6 +2118,113 @@ export function registerBuiltinTools(ctx) {
|
|
|
2118
2118
|
}
|
|
2119
2119
|
}
|
|
2120
2120
|
});
|
|
2121
|
+
// ============================================================
|
|
2122
|
+
// bolloon_config_get / bolloon_config_set (2026-08-07)
|
|
2123
|
+
// Bolloon 自己读写 ~/.bolloon/bolloon-config.json — 统一配置文件,
|
|
2124
|
+
// 让 agent 有修改自身配置的权限 (模型/供应商/温度等), 不再只能靠用户手改.
|
|
2125
|
+
// ============================================================
|
|
2126
|
+
ctx.tools.set('bolloon_config_get', {
|
|
2127
|
+
name: 'bolloon_config_get',
|
|
2128
|
+
description: '读取 Bolloon 自身配置 (~/.bolloon/bolloon-config.json): 当前激活供应商 + 各供应商 API 配置 (baseUrl/model/温度). 注意: 不输出 apiKey 明文 (脱敏), 只显示是否已配置.',
|
|
2129
|
+
parameters: {},
|
|
2130
|
+
execute: async () => {
|
|
2131
|
+
try {
|
|
2132
|
+
const { llmConfigStore } = await import('../llm/config-store.js');
|
|
2133
|
+
await llmConfigStore.initialize();
|
|
2134
|
+
const cfg = await llmConfigStore.getConfig();
|
|
2135
|
+
const active = cfg.activeProvider;
|
|
2136
|
+
const lines = [`📋 Bolloon 配置 (${active} 激活):`];
|
|
2137
|
+
for (const [name, p] of Object.entries(cfg.providers || {})) {
|
|
2138
|
+
const pc = p;
|
|
2139
|
+
if (!pc)
|
|
2140
|
+
continue;
|
|
2141
|
+
const mark = name === active ? '●' : '○';
|
|
2142
|
+
const key = pc.apiKey ? '🔑' : pc.requiresApiKey ? '✗ 无key' : '无key需求';
|
|
2143
|
+
lines.push(` ${mark} ${name}: ${key} · model=${pc.model || '?'} · baseUrl=${pc.baseUrl || '?'}${pc.temperature ? ` · temp=${pc.temperature}` : ''}`);
|
|
2144
|
+
}
|
|
2145
|
+
return { success: true, output: lines.join('\n') };
|
|
2146
|
+
}
|
|
2147
|
+
catch (e) {
|
|
2148
|
+
return { success: false, error: `bolloon_config_get 失败: ${String(e.message || e).slice(0, 200)}` };
|
|
2149
|
+
}
|
|
2150
|
+
}
|
|
2151
|
+
});
|
|
2152
|
+
ctx.tools.set('bolloon_config_set', {
|
|
2153
|
+
name: 'bolloon_config_set',
|
|
2154
|
+
description: '修改 Bolloon 自身配置 (~/.bolloon/bolloon-config.json). 可切换激活供应商 (provider) 或改某供应商的 model/baseUrl/temperature/enabled. 修改立即生效 (下次 LLM 调用使用新配置). 例: provider=deepseek; provider=minimax, model=MiniMax-M3; deepseek.temperature=0.3',
|
|
2155
|
+
parameters: {
|
|
2156
|
+
provider: '可选: 切换激活供应商 (如 deepseek / minimax / openai / anthropic / ollama)',
|
|
2157
|
+
'provider.key': '可选: 修改指定供应商字段, 格式 <供应商>.<字段>=<值>, 如 minimax.model=MiniMax-M3',
|
|
2158
|
+
model: '可选: 同时设置激活供应商的 model',
|
|
2159
|
+
temperature: '可选: 同时设置激活供应商的 temperature (0-2)',
|
|
2160
|
+
},
|
|
2161
|
+
execute: async (args) => {
|
|
2162
|
+
try {
|
|
2163
|
+
const { llmConfigStore } = await import('../llm/config-store.js');
|
|
2164
|
+
await llmConfigStore.initialize();
|
|
2165
|
+
const changes = [];
|
|
2166
|
+
// 1. 切换激活供应商
|
|
2167
|
+
if (args.provider) {
|
|
2168
|
+
const name = String(args.provider).trim().toLowerCase();
|
|
2169
|
+
const known = ['openai', 'anthropic', 'ollama', 'openrouter', 'gemini', 'minimax', 'deepseek', 'kimi', 'glm', 'qwen', 'mimo', 'grok', 'local'];
|
|
2170
|
+
if (!known.includes(name))
|
|
2171
|
+
return { success: false, error: `未知供应商: ${name}. 可用: ${known.join(', ')}` };
|
|
2172
|
+
await llmConfigStore.setActiveProvider(name);
|
|
2173
|
+
changes.push(`activeProvider=${name}`);
|
|
2174
|
+
}
|
|
2175
|
+
// 2. 修改指定供应商字段 (provider.key=value)
|
|
2176
|
+
for (const [k, v] of Object.entries(args)) {
|
|
2177
|
+
if (k === 'provider' || k === 'model' || k === 'temperature')
|
|
2178
|
+
continue;
|
|
2179
|
+
if (!k.includes('.'))
|
|
2180
|
+
continue;
|
|
2181
|
+
const [prov, field] = k.split('.');
|
|
2182
|
+
const val = String(v);
|
|
2183
|
+
if (field === 'temperature' || field === 'maxTokens') {
|
|
2184
|
+
const num = Number(val);
|
|
2185
|
+
if (Number.isNaN(num))
|
|
2186
|
+
return { success: false, error: `${k}=${val} 不是数字` };
|
|
2187
|
+
await llmConfigStore.updateProvider(prov, { [field]: num });
|
|
2188
|
+
}
|
|
2189
|
+
else if (field === 'enabled') {
|
|
2190
|
+
await llmConfigStore.updateProvider(prov, { enabled: val === 'true' || val === '1' });
|
|
2191
|
+
}
|
|
2192
|
+
else if (field === 'apiKey') {
|
|
2193
|
+
await llmConfigStore.updateProvider(prov, { apiKey: val });
|
|
2194
|
+
}
|
|
2195
|
+
else {
|
|
2196
|
+
await llmConfigStore.updateProvider(prov, { [field]: val });
|
|
2197
|
+
}
|
|
2198
|
+
changes.push(`${prov}.${field}=${field === 'apiKey' ? '***' : val}`);
|
|
2199
|
+
}
|
|
2200
|
+
// 3. 激活供应商的 model / temperature
|
|
2201
|
+
if (args.model || args.temperature) {
|
|
2202
|
+
const active = await llmConfigStore.getActiveProvider();
|
|
2203
|
+
const patch = {};
|
|
2204
|
+
if (args.model)
|
|
2205
|
+
patch.model = String(args.model);
|
|
2206
|
+
if (args.temperature) {
|
|
2207
|
+
const t = Number(args.temperature);
|
|
2208
|
+
if (Number.isNaN(t))
|
|
2209
|
+
return { success: false, error: `temperature=${args.temperature} 不是数字` };
|
|
2210
|
+
patch.temperature = t;
|
|
2211
|
+
}
|
|
2212
|
+
await llmConfigStore.updateProvider(active, patch);
|
|
2213
|
+
if (args.model)
|
|
2214
|
+
changes.push(`${active}.model=${args.model}`);
|
|
2215
|
+
if (args.temperature)
|
|
2216
|
+
changes.push(`${active}.temperature=${args.temperature}`);
|
|
2217
|
+
}
|
|
2218
|
+
if (changes.length === 0)
|
|
2219
|
+
return { success: false, error: '没有要修改的配置项. 例: provider=deepseek 或 minimax.model=MiniMax-M3' };
|
|
2220
|
+
const cfg = await llmConfigStore.getConfig();
|
|
2221
|
+
return { success: true, output: `✅ 配置已更新: ${changes.join(', ')}\n 当前激活: ${cfg.activeProvider}` };
|
|
2222
|
+
}
|
|
2223
|
+
catch (e) {
|
|
2224
|
+
return { success: false, error: `bolloon_config_set 失败: ${String(e.message || e).slice(0, 200)}` };
|
|
2225
|
+
}
|
|
2226
|
+
}
|
|
2227
|
+
});
|
|
2121
2228
|
}
|
|
2122
2229
|
// ─── IPFS/IPNS 通用 helper (2026-08-04) ─────────────────────────────────────
|
|
2123
2230
|
// 复用 publish_did 的 checkKuboSetup 自动安装/启动本地 Kubo (darwin-arm64 v0.28.0)
|
package/dist/agents/pi-sdk.js
CHANGED
|
@@ -13,6 +13,10 @@ import * as fsSync from 'fs';
|
|
|
13
13
|
import * as os from 'os';
|
|
14
14
|
import * as path from 'path';
|
|
15
15
|
import { getContextManager } from '../bootstrap/context-manager.js';
|
|
16
|
+
import { createRequire } from 'module';
|
|
17
|
+
// 2026-08-07: ESM 下裸 require 抛错被 catch 吞掉 → estimateHistoryTokens/maxContextTokens 静默失效
|
|
18
|
+
// (状态栏恒 0 的第二层根因). 统一用 createRequire 加载 CJS 模块.
|
|
19
|
+
const _piRequire = createRequire(import.meta.url);
|
|
16
20
|
import { documentReader } from '../documents/reader.js';
|
|
17
21
|
import { getMinimax } from '../constraints/index.js';
|
|
18
22
|
import { p2pNetwork } from '../network/p2p.js';
|
|
@@ -90,7 +94,7 @@ export class PiAgentSession {
|
|
|
90
94
|
/** 2026-08-06: 上下文窗口 (tokens) — 统一走 ContextManager 配置 (1M 默认). */
|
|
91
95
|
maxContextTokens() {
|
|
92
96
|
try {
|
|
93
|
-
const { getContextManager } =
|
|
97
|
+
const { getContextManager } = _piRequire('../bootstrap/context-manager.js');
|
|
94
98
|
const n = getContextManager().getConfig().maxTokens;
|
|
95
99
|
return Number.isFinite(n) && n > 0 ? n : this.MAX_OUTPUT_TOKEN_ESCALATION_THRESHOLD;
|
|
96
100
|
}
|
|
@@ -574,6 +578,14 @@ export class PiAgentSession {
|
|
|
574
578
|
return false;
|
|
575
579
|
}
|
|
576
580
|
}
|
|
581
|
+
/** 2026-08-07: prompt 出口统一上报 token 用量到 ContextManager (fallback/pivot/react 全路径覆盖) —
|
|
582
|
+
* 之前只有 runReActLoop 迭代内上报, chitchat/fallback/pivot 路径状态栏恒 0 */
|
|
583
|
+
reportUsageToContextManager() {
|
|
584
|
+
try {
|
|
585
|
+
getContextManager().updateUsage(this.estimateHistoryTokens());
|
|
586
|
+
}
|
|
587
|
+
catch { /* 非致命 */ }
|
|
588
|
+
}
|
|
577
589
|
async prompt(input, options) {
|
|
578
590
|
this.minimaxAvailable = this.checkMinimax();
|
|
579
591
|
this.currentChannelId = options?.channelId ?? this.currentChannelId;
|
|
@@ -584,6 +596,7 @@ export class PiAgentSession {
|
|
|
584
596
|
if (!this.minimaxAvailable) {
|
|
585
597
|
const response = await this.handleFallback(input);
|
|
586
598
|
this.messageHistory.push({ role: 'assistant', content: response });
|
|
599
|
+
this.reportUsageToContextManager();
|
|
587
600
|
return response;
|
|
588
601
|
}
|
|
589
602
|
// P0 注入门
|
|
@@ -624,6 +637,7 @@ export class PiAgentSession {
|
|
|
624
637
|
this.clearJudgmentGate();
|
|
625
638
|
this.currentSignal = null;
|
|
626
639
|
this.currentOnStream = null;
|
|
640
|
+
this.reportUsageToContextManager();
|
|
627
641
|
}
|
|
628
642
|
}
|
|
629
643
|
try {
|
|
@@ -641,6 +655,7 @@ export class PiAgentSession {
|
|
|
641
655
|
this.clearJudgmentGate();
|
|
642
656
|
this.currentSignal = null;
|
|
643
657
|
this.currentOnStream = null;
|
|
658
|
+
this.reportUsageToContextManager();
|
|
644
659
|
}
|
|
645
660
|
}
|
|
646
661
|
async promptStream(input, onStream, signal, channelId) {
|
|
@@ -667,6 +682,7 @@ export class PiAgentSession {
|
|
|
667
682
|
const response = await this.handleFallback(userText);
|
|
668
683
|
this.messageHistory.push({ role: 'assistant', content: response });
|
|
669
684
|
onStream({ type: 'done', content: '' });
|
|
685
|
+
this.reportUsageToContextManager();
|
|
670
686
|
return response;
|
|
671
687
|
}
|
|
672
688
|
// P0 注入门: 缓存 onStream + signal, computeJudgmentGate 用 currentOnStream 广播 phase
|
|
@@ -812,6 +828,7 @@ export class PiAgentSession {
|
|
|
812
828
|
this.bootstrapAddition = '';
|
|
813
829
|
this.contextHintAddition = '';
|
|
814
830
|
this.promptStartTime = 0;
|
|
831
|
+
this.reportUsageToContextManager();
|
|
815
832
|
}
|
|
816
833
|
return pivotResult;
|
|
817
834
|
}
|
|
@@ -898,6 +915,7 @@ export class PiAgentSession {
|
|
|
898
915
|
// 用完即清, 避免污染下一轮
|
|
899
916
|
this.clearJudgmentGate();
|
|
900
917
|
this.currentOnStream = null;
|
|
918
|
+
this.reportUsageToContextManager();
|
|
901
919
|
this.currentSignal = null;
|
|
902
920
|
this.bootstrapAddition = '';
|
|
903
921
|
this.promptStartTime = 0;
|
|
@@ -1823,7 +1841,7 @@ ${toolDefs}
|
|
|
1823
1841
|
*/
|
|
1824
1842
|
estimateHistoryTokens() {
|
|
1825
1843
|
try {
|
|
1826
|
-
const { estimateTokens } =
|
|
1844
|
+
const { estimateTokens } = _piRequire('../context-compaction/index.js');
|
|
1827
1845
|
return estimateTokens(this.messageHistory);
|
|
1828
1846
|
}
|
|
1829
1847
|
catch {
|
|
@@ -184,7 +184,11 @@ function collectEnv() {
|
|
|
184
184
|
let llmProvider = 'unknown';
|
|
185
185
|
try {
|
|
186
186
|
const home = process.env.HOME || os.homedir() || '/tmp';
|
|
187
|
-
|
|
187
|
+
// 2026-08-07: bolloon-config.json 优先, 旧 llm-config.json 兜底
|
|
188
|
+
let cfgPath = path.join(home, '.bolloon', 'bolloon-config.json');
|
|
189
|
+
if (!require('fs').existsSync(cfgPath))
|
|
190
|
+
cfgPath = path.join(home, '.bolloon', 'llm-config.json');
|
|
191
|
+
const cfg = require(cfgPath);
|
|
188
192
|
if (cfg && typeof cfg === 'object' && 'provider' in cfg) {
|
|
189
193
|
llmProvider = String(cfg.provider);
|
|
190
194
|
}
|
package/dist/cli/ink-app.js
CHANGED
|
@@ -41,6 +41,13 @@ const MentionPopup = ({ title, items, sel, width, loading }) => {
|
|
|
41
41
|
};
|
|
42
42
|
const InkApp = ({ onPrompt, initialStatus, getStatusUpdate, terminalW, terminalH }) => {
|
|
43
43
|
const [input, setInput] = useState('');
|
|
44
|
+
// 2026-08-07: inputRef 同步镜像 input — useInput 回调拿最新值 (闭包里的 input 是陈旧的)
|
|
45
|
+
const inputRef = useRef('');
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
inputRef.current = input;
|
|
48
|
+
}, [input]);
|
|
49
|
+
// 2026-08-07: 提交防重 (InkApp \n/\r 兜底 + TextInput 双触发场景)
|
|
50
|
+
const lastSubmitRef = useRef({ t: 0, v: '' });
|
|
44
51
|
const [msgs, setMsgs] = useState([]);
|
|
45
52
|
const [status, setStatus] = useState(initialStatus);
|
|
46
53
|
const { exit } = useApp();
|
|
@@ -285,6 +292,11 @@ const InkApp = ({ onPrompt, initialStatus, getStatusUpdate, terminalW, terminalH
|
|
|
285
292
|
}, []);
|
|
286
293
|
const onSubmit = useCallback((value) => {
|
|
287
294
|
const trimmed = value.trim();
|
|
295
|
+
// 2026-08-07: 防重 — \n/\r 兜底分支与 TextInput 可能都触发提交, 1.5s 内同值只提交一次
|
|
296
|
+
const now = Date.now();
|
|
297
|
+
if (lastSubmitRef.current.v === trimmed && now - lastSubmitRef.current.t < 1500)
|
|
298
|
+
return;
|
|
299
|
+
lastSubmitRef.current = { t: now, v: trimmed };
|
|
288
300
|
if (!trimmed)
|
|
289
301
|
return;
|
|
290
302
|
// 入历史 (去重最近一条, 上限 100)
|
|
@@ -349,13 +361,13 @@ const InkApp = ({ onPrompt, initialStatus, getStatusUpdate, terminalW, terminalH
|
|
|
349
361
|
setSel(s => Math.min(filtered.length - 1, s + 1));
|
|
350
362
|
return;
|
|
351
363
|
}
|
|
352
|
-
if ((key.tab || key.return) && filtered.length > 0) {
|
|
364
|
+
if ((key.tab || key.return || /[\n\r]/.test(_input)) && filtered.length > 0) {
|
|
353
365
|
const it = filtered[safeSel];
|
|
354
366
|
if (it)
|
|
355
367
|
acceptMention(it);
|
|
356
368
|
return;
|
|
357
369
|
}
|
|
358
|
-
if (key.return && filtered.length === 0) {
|
|
370
|
+
if ((key.return || /[\n\r]/.test(_input)) && filtered.length === 0) {
|
|
359
371
|
// 弹窗无匹配项: Enter = 提交当前输入 (否则 /channel 无参 + Enter 永远提交不了 — 2026-08-06)
|
|
360
372
|
const v = input.trim();
|
|
361
373
|
if (v)
|
|
@@ -409,7 +421,19 @@ const InkApp = ({ onPrompt, initialStatus, getStatusUpdate, terminalW, terminalH
|
|
|
409
421
|
return; // 其余键忽略 (return/tab/esc 等由 TextInput 或上层处理)
|
|
410
422
|
}
|
|
411
423
|
// ── 正常模式 ──
|
|
412
|
-
//
|
|
424
|
+
// 2026-08-07: Enter 兜底 — pty/管道下 termios 可能把 \r 转 \n 且 node 把整 chunk
|
|
425
|
+
// 当一次 keypress (key.return=false), TextInput 的 onSubmit 永不触发 → 消息发不出去.
|
|
426
|
+
// 应用层把 \n/\r 一律视为提交 (兼容 raw/cooked 两种模式, 不依赖 termios).
|
|
427
|
+
if (/[\n\r]/.test(_input)) {
|
|
428
|
+
const before = String(_input).split(/[\n\r]/)[0];
|
|
429
|
+
const val = inputRef.current + before;
|
|
430
|
+
if (val.trim())
|
|
431
|
+
onSubmit(val);
|
|
432
|
+
else
|
|
433
|
+
setInput('');
|
|
434
|
+
return;
|
|
435
|
+
}
|
|
436
|
+
// Tab 命令补齐 (匹配触发符后的 token 再补)
|
|
413
437
|
if (key.tab) {
|
|
414
438
|
doTabCompletion();
|
|
415
439
|
return;
|
|
@@ -468,14 +492,28 @@ const InkApp = ({ onPrompt, initialStatus, getStatusUpdate, terminalW, terminalH
|
|
|
468
492
|
// TextInput handles actual input; useInput only for Ctrl+C / Esc
|
|
469
493
|
});
|
|
470
494
|
// 自动更新状态栏 (每秒)
|
|
495
|
+
// 2026-08-07 修复: 依赖必须为空 [] — [getStatusUpdate] 在渲染间引用变化 (Ink 内部元素重建),
|
|
496
|
+
// effect 每次渲染 cleanup+setup → setInterval 刚建立就被清除 → 永不 tick → 状态栏恒初始值.
|
|
497
|
+
// getStatusUpdate 是 startInk 传入的模块级函数 (引用稳定), 空依赖首渲染捕获即可, 内部实时读.
|
|
471
498
|
useEffect(() => {
|
|
499
|
+
// 挂载时立即同步刷新一次状态栏 (不等 1s 后第一个 tick)
|
|
500
|
+
try {
|
|
501
|
+
const s0 = getStatusUpdate();
|
|
502
|
+
if (s0)
|
|
503
|
+
setStatus(s0);
|
|
504
|
+
}
|
|
505
|
+
catch { /* 状态栏更新失败不致命 */ }
|
|
472
506
|
const timer = setInterval(() => {
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
507
|
+
try {
|
|
508
|
+
const s = getStatusUpdate();
|
|
509
|
+
if (s)
|
|
510
|
+
setStatus(s);
|
|
511
|
+
}
|
|
512
|
+
catch { /* 状态栏更新失败不致命 */ }
|
|
476
513
|
}, 1000);
|
|
477
514
|
return () => clearInterval(timer);
|
|
478
|
-
|
|
515
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
516
|
+
}, []);
|
|
479
517
|
// 调试/测试钩子: 输入变化时通知外部 (pty 测试用)
|
|
480
518
|
useEffect(() => {
|
|
481
519
|
globalThis.__inkOnInput?.(input);
|
|
@@ -511,7 +549,7 @@ export function startInk(onPrompt, initialStatus, getStatusUpdate) {
|
|
|
511
549
|
stdout: process.stdout,
|
|
512
550
|
stdin: process.stdin,
|
|
513
551
|
exitOnCtrlC: false,
|
|
514
|
-
patchConsole: false, //
|
|
552
|
+
patchConsole: false, // 重要: 阻止 Ink 劫持 console.log
|
|
515
553
|
});
|
|
516
554
|
}
|
|
517
555
|
export function stopInk() {
|
package/dist/cli/loading-tui.js
CHANGED
|
@@ -23,12 +23,14 @@ function bg(r, g, b) { return `\x1b[48;2;${r};${g};${b}m`; }
|
|
|
23
23
|
const C_ACCENT = fg(0xc4, 0xd6, 0x40); // #c4d640
|
|
24
24
|
const C_ACCENT_BG = bg(0xc4, 0xd6, 0x40);
|
|
25
25
|
const C_TEXT = fg(0xd8, 0xd8, 0xc8); // #d8d8c8
|
|
26
|
+
const C_WHITE = fg(0xff, 0xff, 0xff); // #ffffff 纯白 (2026-08-07: 用户要求回复字体白色显眼)
|
|
26
27
|
const C_DIM = fg(0x90, 0x90, 0x88); // #909088
|
|
27
28
|
const C_MUTED = fg(0x60, 0x60, 0x58); // #606058
|
|
28
29
|
const C_OK = fg(0x22, 0xc5, 0x5e); // #22c55e
|
|
29
30
|
const C_ERROR = fg(0xef, 0x44, 0x44); // #ef4444
|
|
30
31
|
const C_WARN = fg(0xf5, 0x9e, 0x0b); // #f59e0b
|
|
31
|
-
const C_BORDER = fg(0x3a, 0x3a, 0x36); // #3a3a36
|
|
32
|
+
const C_BORDER = fg(0x3a, 0x3a, 0x36); // #3a3a36 (暗描边)
|
|
33
|
+
const C_BORDER_BRIGHT = fg(0x8a, 0x8a, 0x7e); // #8a8a7e (2026-08-07: 对话框边框提亮, 告别灰白)
|
|
32
34
|
const HIDE = '\x1b[?25l';
|
|
33
35
|
const SHOW = '\x1b[?25h';
|
|
34
36
|
// 版本信息 — 从 package.json 读取, 不再硬编码
|
|
@@ -287,11 +289,11 @@ export function renderMessageBox(opts) {
|
|
|
287
289
|
const inner = Math.max(20, dispWidth(title) + 4, maxLine);
|
|
288
290
|
const width = Math.min(termWidth() - 2, opts.width ?? inner + 4);
|
|
289
291
|
const lines = [];
|
|
290
|
-
// 2026-08-
|
|
291
|
-
lines.push(`${
|
|
292
|
+
// 2026-08-07: 边框提亮 (C_BORDER_BRIGHT), 正文纯白 (C_WHITE) — 告别灰白内容
|
|
293
|
+
lines.push(`${C_BORDER_BRIGHT}${boxTop(`${color}${title}${RESET}`, width, RD)}${RESET}`);
|
|
292
294
|
for (const l of wrapText(opts.body, width - 4))
|
|
293
|
-
lines.push(`${
|
|
294
|
-
lines.push(`${
|
|
295
|
+
lines.push(`${C_BORDER_BRIGHT}${boxRow(`${C_WHITE}${l}${RESET}`, width, 'left', RD)}${RESET}`);
|
|
296
|
+
lines.push(`${C_BORDER_BRIGHT}${boxBottom(width, RD)}${RESET}`);
|
|
295
297
|
return lines.join('\n');
|
|
296
298
|
}
|
|
297
299
|
/** 取首条非空行作为预览 (按可见宽度截断, 加省略号) */
|
package/dist/cli-entry.js
CHANGED
|
@@ -357,7 +357,7 @@ async function handleModelCommand(modelArgs) {
|
|
|
357
357
|
const info = PROVIDER_INFO[name] || {};
|
|
358
358
|
console.log(`${GREEN}✅ 已切换到 ${name}${RESET} (${info.name || ''})${modelNote}`);
|
|
359
359
|
console.log(` 当前模型: ${modelArgs[1] || provider.model || (info.models && info.models[0]) || '默认'}`);
|
|
360
|
-
console.log(` 配置已持久化: ~/.bolloon/
|
|
360
|
+
console.log(` 配置已持久化: ~/.bolloon/bolloon-config.json`);
|
|
361
361
|
}
|
|
362
362
|
/** 引擎子命令: list / run */
|
|
363
363
|
async function handleEngineCommand(engineArgs) {
|
|
@@ -48,6 +48,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
48
48
|
};
|
|
49
49
|
})();
|
|
50
50
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
51
|
+
exports.setNotifyQuiet = setNotifyQuiet;
|
|
51
52
|
exports.checkAndUpdate = checkAndUpdate;
|
|
52
53
|
exports.checkForUpdates = checkForUpdates;
|
|
53
54
|
exports.performUpdate = performUpdate;
|
|
@@ -66,10 +67,17 @@ const MAGENTA = '\x1b[35m';
|
|
|
66
67
|
const PKG_NAME = '@bolloon/bolloon-agent';
|
|
67
68
|
const BOLLOON_DIR = path.join(process.env.HOME || process.env.USERPROFILE || '/tmp', '.bolloon');
|
|
68
69
|
const UPDATE_CACHE = path.join(BOLLOON_DIR, '.update-check.json');
|
|
70
|
+
/** 2026-08-07: CLI 交互模式下静音自动更新通知 (避免后台检查污染 TUI 屏幕) */
|
|
71
|
+
let notifyQuiet = false;
|
|
72
|
+
function setNotifyQuiet(v) {
|
|
73
|
+
notifyQuiet = v;
|
|
74
|
+
}
|
|
69
75
|
/**
|
|
70
76
|
* 通知用户。使用 stderr,避免在交互式 CLI 模式下 stdout 被吞掉。
|
|
71
77
|
*/
|
|
72
78
|
function notify(msg, color = RESET) {
|
|
79
|
+
if (notifyQuiet)
|
|
80
|
+
return;
|
|
73
81
|
process.stderr.write(`${color}${msg}${RESET}`);
|
|
74
82
|
}
|
|
75
83
|
function httpGet(url) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-update.js","sourceRoot":"","sources":["../../../src/utils/auto-update.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auto-update.js","sourceRoot":"","sources":["../../../src/utils/auto-update.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CH,wCAEC;AA8aD,wCAiHC;AAKD,0CAEC;AAKD,sCAEC;AA3lBD,iDAAyC;AACzC,uCAAyB;AACzB,2CAA6B;AAC7B,6CAA+B;AAC/B,2CAA6B;AAE7B,UAAU;AACV,MAAM,KAAK,GAAG,SAAS,CAAC;AACxB,MAAM,IAAI,GAAG,SAAS,CAAC;AACvB,MAAM,IAAI,GAAG,UAAU,CAAC;AACxB,MAAM,KAAK,GAAG,UAAU,CAAC;AACzB,MAAM,MAAM,GAAG,UAAU,CAAC;AAC1B,MAAM,OAAO,GAAG,UAAU,CAAC;AAE3B,MAAM,QAAQ,GAAG,wBAAwB,CAAC;AAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,MAAM,EAAE,UAAU,CAAC,CAAC;AACjG,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;AA0BlE,sDAAsD;AACtD,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB,SAAgB,cAAc,CAAC,CAAU;IACvC,WAAW,GAAG,CAAC,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,MAAM,CAAC,GAAW,EAAE,QAAgB,KAAK;IAChD,IAAI,WAAW;QAAE,OAAO;IACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,OAAO,CAAC,GAAW;IAC1B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACtD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,GAAQ,EAAE,EAAE;YAC3D,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC;YACjD,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACxB,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YACrB,GAAG,CAAC,OAAO,EAAE,CAAC;YACd,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,GAAkB;IACrC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC/C,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAC1D,OAAO,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC;QAC7B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,KAAK;IACP,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,SAAS,mBAAmB;IAC1B,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,sBAAsB;IACtB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,wBAAQ,EAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACrF,IAAI,OAAO;YAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC;IAChF,CAAC;IAAC,MAAM,CAAC;QACP,KAAK;IACP,CAAC;IAED,mBAAmB;IACnB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,wBAAQ,EAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACzF,IAAI,SAAS;YAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC;IAC3G,CAAC;IAAC,MAAM,CAAC;QACP,KAAK;IACP,CAAC;IAED,eAAe;IACf,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC5D,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,KAAK,MAAM,GAAG,IAAI,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1C,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC;YAC/F,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,KAAK;IACP,CAAC;IAED,cAAc;IACd,UAAU,CAAC,IAAI,CACb,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,CAAC,EAClF,oDAAoD,EACpD,uDAAuD,EACvD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,CAAC,CAC7D,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,SAAS,mBAAmB,CAAC,WAAmB;IAC9C,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,WAAW,CAAC,mBAAmB,EAAE,CAAC,CAAC;QACtD,IAAI,UAAU;YAAE,OAAO,UAAU,CAAC;QAElC,qCAAqC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;QACxD,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC1D,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO;oBAAE,OAAO,IAAI,CAAC,OAAO,CAAC;YAClE,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,KAAK;QACP,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,MAAM,eAAe,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IACrD,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,WAAmB;IAC1C,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,CAAC;QACrE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,cAAc,CAAC;KAC3H,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,gBAAgB,CAAC,WAAmB;IACjD,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,8BAA8B,WAAW,EAAE,CAAC;QACxD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,IAAI,IAAI,CAAC;IAC3C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,OAAe,EAAE,MAAc;IACtD,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrF,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3E,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,mBAAmB;IAChC,MAAM,eAAe,GAAG;QACtB,QAAQ;QACR,6BAA6B;KAC9B,CAAC;IAEF,MAAM,gBAAgB,GAAsB,EAAE,CAAC;IAC/C,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,cAAc,GAAG,EAAE,CAAC;IACxB,IAAI,aAAa,GAAG,EAAE,CAAC;IAEvB,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS;YAAE,SAAS;QAEzB,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACrB,cAAc,GAAG,SAAS,CAAC;QAC7B,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,MAAM,IAAI,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACrD,SAAS,GAAG,IAAI,CAAC;YACjB,aAAa,GAAG,MAAM,CAAC;YACvB,gBAAgB,CAAC,IAAI,CAAC;gBACpB,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,SAAS;gBAClB,MAAM,EAAE,MAAM;gBACd,MAAM;gBACN,QAAQ,EAAE,GAAG;aACd,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,cAAc;YACvB,MAAM,EAAE,cAAc;YACtB,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,EAAE;SACb,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,cAAc;QACvB,MAAM,EAAE,aAAa;QACrB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,gBAAgB;KAC3B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB;IACvB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,qBAAqB,EAAE;YAC7C,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;YAC3B,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;SACnB,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YAAE,OAAO,EAAE,CAAC;QAE9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAsB,EAAE,CAAC;QAEvC,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,MAAM,GAAG,GAAG,IAAW,CAAC;YACxB,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI;gBACJ,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,OAAO;gBAC/B,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,OAAO;gBAC7B,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,OAAO;gBAC7B,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,IAAI;aAC/B,CAAC,CAAC;QACL,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,+BAA+B;QAC/B,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YAC3D,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,yBAAyB,CAAC,OAAiB;IACxD,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACxC,qDAAqD;QACrD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAC/C,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC5C,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7C,CAAC,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,yBAAyB,CAAC,mBAA6B;IACpE,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QAC5C,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,EAAE,IAAI,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QAChD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;IAClE,CAAC,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;IAChD,KAAK,MAAM,CAAC,IAAI,OAAO;QAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/D,kDAAkD;IAClD,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,mBAAmB,CAAC,CAAC;IAE9D,MAAM,CAAC,KAAK,IAAI,cAAc,KAAK,IAAI,EAAE,KAAK,CAAC,CAAC;IAEhD,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACvB,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,MAAM;YACf,KAAK,EAAE,SAAS;YAChB,yCAAyC;YACzC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM;SAClC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,MAAM;YACf,KAAK,EAAE,CAAC,CAAC,OAAO;SACjB,CAAC;IACJ,CAAC;IAED,kDAAkD;IAClD,wCAAwC;IACxC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,KAAK,IAAI,GAAG,IAAI,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACpD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,QAAQ,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACtC,eAAe,EAAE,QAAQ;SAC1B,CAAC;IACJ,CAAC;IACD,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,aAAa;QACtB,eAAe,EAAE,EAAE;KACpB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,cAAc,CAAC,QAAmB;IAC/C,MAAM,OAAO,GAAG,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACxE,MAAM,WAAW,GAAG,MAAM,yBAAyB,CAAC,OAAO,CAAC,CAAC;IAC7D,OAAO,yBAAyB,CAAC,WAAW,CAAC,CAAC;AAChD,CAAC;AAYD,SAAS,gBAAgB;IACvB,MAAM,GAAG,GAAiB,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE,EAAE,CAAC;IAC1F,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QACtD,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAC1D,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,SAAS;gBAAE,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;YACzE,IAAI,OAAO,GAAG,CAAC,WAAW,KAAK,SAAS;gBAAE,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;QAC9E,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,KAAK;IACP,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,SAAS;IAChB,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,KAAK;IACP,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,EAAE,GAAG,SAAS,EAAE,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QACnE,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,KAAK;IACP,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,GAAiB;IACvC,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,GAAG,CAAC,kBAAkB,GAAG,IAAI,GAAG,IAAI,CAAC;IACtD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,QAAQ,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,SAAS,uBAAuB;IAC9B,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACjG,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,MAAM,CAAC;IAC5D,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;WACpD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;WACrC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,GAAG,CAAC;IACzD,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;IAE/B,MAAM,OAAO,GAAG,SAAS,IAAI,QAAQ,CAAC;IACtC,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,IAAI,SAAS,IAAI,QAAQ,CAAC;IACxD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;AACxD,CAAC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,cAAc,CAAC,OAAoD,EAAE;IAMzF,MAAM,MAAM,GAAG,uBAAuB,EAAE,CAAC;IAEzC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;IACpF,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACnC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,qEAAqE,EAAE,CAAC;IAC1I,CAAC;IAED,+BAA+B;IAC/B,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACxF,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;IACnF,CAAC;IAED,MAAM,CAAC,KAAK,IAAI,aAAa,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;IAE7C,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,mBAAmB,EAAE,CAAC;QAEhD,IAAI,WAAW,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;YACxC,MAAM,CAAC,KAAK,MAAM,cAAc,WAAW,CAAC,MAAM,GAAG,KAAK,IAAI,EAAE,KAAK,CAAC,CAAC;YACvE,MAAM,CAAC,YAAY,WAAW,CAAC,OAAO,IAAI,EAAE,KAAK,CAAC,CAAC;YACnD,MAAM,CAAC,YAAY,WAAW,CAAC,MAAM,MAAM,EAAE,KAAK,CAAC,CAAC;YAEpD,0BAA0B;YAC1B,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;YAC1B,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC;YAC5C,IAAI,WAAW,CAAC,OAAO,KAAK,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC1F,MAAM,CAAC,GAAG,MAAM,6CAA6C,KAAK,MAAM,EAAE,KAAK,CAAC,CAAC;gBACjF,UAAU,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACtC,OAAO;oBACL,SAAS,EAAE,IAAI;oBACf,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,MAAM,WAAW,CAAC,MAAM,aAAa;iBAC/C,CAAC;YACJ,CAAC;YAED,0BAA0B;YAC1B,MAAM,kBAAkB,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YAClF,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC,kBAAkB,CAAC,CAAC;YAEnE,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACrC,UAAU,CAAC,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;gBAEvE,YAAY;gBACZ,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;gBAEhD,uBAAuB;gBACvB,IAAI,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;oBAC7C,MAAM,CAAC,KAAK,KAAK,UAAU,WAAW,CAAC,MAAM,mBAAmB,KAAK,MAAM,EAAE,KAAK,CAAC,CAAC;oBACpF,gEAAgE;oBAChE,qBAAqB;oBACrB,IAAI,CAAC,SAAS,EAAE,CAAC;oBACjB,4BAA4B;oBAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBAED,MAAM,CAAC,KAAK,KAAK,UAAU,WAAW,CAAC,MAAM,WAAW,KAAK,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC1E,MAAM,CAAC,GAAG,MAAM,0BAA0B,KAAK,MAAM,EAAE,KAAK,CAAC,CAAC;gBAC9D,OAAO;oBACL,SAAS,EAAE,IAAI;oBACf,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,QAAQ,WAAW,CAAC,MAAM,EAAE;iBACtC,CAAC;YACJ,CAAC;iBAAM,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC7C,+BAA+B;gBAC/B,UAAU,CAAC,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;gBACxE,MAAM,CAAC,IAAI,MAAM,eAAe,KAAK,MAAM,EAAE,KAAK,CAAC,CAAC;gBACpD,OAAO;oBACL,SAAS,EAAE,IAAI;oBACf,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,QAAQ;iBAClB,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;gBACxE,MAAM,CAAC,IAAI,MAAM,aAAa,MAAM,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC/D,MAAM,CAAC,GAAG,MAAM,iCAAiC,KAAK,MAAM,EAAE,KAAK,CAAC,CAAC;gBACrE,OAAO;oBACL,SAAS,EAAE,IAAI;oBACf,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,SAAS,MAAM,CAAC,KAAK,EAAE;iBACjC,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,KAAK,IAAI,KAAK,YAAY,WAAW,EAAE,OAAO,IAAI,SAAS,KAAK,EAAE,KAAK,CAAC,CAAC;YACpF,UAAU,CAAC,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YACvD,OAAO;gBACL,SAAS,EAAE,KAAK;gBAChB,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,QAAQ;aAClB,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,MAAM,IAAI,KAAK,YAAY,CAAC,CAAC,OAAO,IAAI,EAAE,KAAK,CAAC,CAAC;QAC5D,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,SAAS,CAAC,CAAC,OAAO,EAAE;SAC9B,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,eAAe;IACnC,OAAO,MAAM,mBAAmB,EAAE,CAAC;AACrC,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,aAAa,CAAC,QAAmB;IACrD,OAAO,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC;AAED,SAAS;AACT,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;IAC7C,CAAC,KAAK,IAAI,EAAE;QACV,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEhC,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,OAAO;gBACV,MAAM,IAAI,GAAG,MAAM,eAAe,EAAE,CAAC;gBACrC,IAAI,IAAI,EAAE,CAAC;oBACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC7C,CAAC;gBACD,MAAM;YAER,KAAK,QAAQ;gBACX,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC7C,MAAM;YAER;gBACE,MAAM,cAAc,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;AACP,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -15,7 +15,7 @@ import { createSubAgentManager } from './agents/subagent-manager.js';
|
|
|
15
15
|
import { getGlobalSharedContext } from './social/global-shared-context.js';
|
|
16
16
|
import { createBollharnessIntegration } from './bollharness-integration/index.js';
|
|
17
17
|
import * as readline from 'readline';
|
|
18
|
-
import { printBanner, renderDialog, renderUserMessage, renderAgentMessage, renderToolCallListItem, termWidth } from './cli/loading-tui.js';
|
|
18
|
+
import { printBanner, renderDialog, renderUserMessage, renderAgentMessage, renderMessageBox, renderToolCallListItem, termWidth } from './cli/loading-tui.js';
|
|
19
19
|
import { startInk, stopInk, inkAppendLine as appendLine, inkSetStatus, inkSetThinking } from './cli/ink-app.js';
|
|
20
20
|
// 启动自动检查更新:后台、节流、检测到新版本自动安装(可被 --no-update / BOLLOON_SKIP_UPDATE 关闭)
|
|
21
21
|
import { createRequire } from 'module';
|
|
@@ -230,6 +230,13 @@ async function bootstrapP2P(verifier) {
|
|
|
230
230
|
// ---------------------------------------------------------------------------
|
|
231
231
|
// iroh/Hybrid P2P 初始化
|
|
232
232
|
// ---------------------------------------------------------------------------
|
|
233
|
+
/** 启动路径网络操作超时门: 超时 reject (由调用方 catch 降级) — 防止弱网下 CLI 卡死在启动 (2026-08-07) */
|
|
234
|
+
function withTimeout(p, ms, label) {
|
|
235
|
+
return Promise.race([
|
|
236
|
+
p,
|
|
237
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error(`${label} 超时 (${ms}ms)`)), ms)),
|
|
238
|
+
]);
|
|
239
|
+
}
|
|
233
240
|
async function bootstrapIroh(keypair, name) {
|
|
234
241
|
s.step(4, 5, '启动 iroh P2P', 'loading');
|
|
235
242
|
try {
|
|
@@ -371,10 +378,14 @@ function fmtDuration(ms) {
|
|
|
371
378
|
return `${h}h ${m % 60}m`;
|
|
372
379
|
}
|
|
373
380
|
/** 2026-08-06: 从 ContextManager 读上下文用量 (CLI 状态栏数据源, 失败退化 0/1M) */
|
|
381
|
+
// 2026-08-07: 不能用 require 加载 ESM 模块 (ERR_REQUIRE_ESM) → startCLI 里 await import 一次缓存引用,
|
|
382
|
+
// 同步函数 getCliCtxUsage/getStatus 复用 — 之前裸 require 与 _require 都抛错被 catch → 状态栏恒 0/1M
|
|
383
|
+
let _ctxManagerRef = null;
|
|
374
384
|
function getCliCtxUsage() {
|
|
375
385
|
try {
|
|
376
|
-
|
|
377
|
-
|
|
386
|
+
const cm = _ctxManagerRef?.getContextManager();
|
|
387
|
+
if (!cm)
|
|
388
|
+
return { pct: 0, usedTokens: 0, maxTokens: 1_000_000, stage: 'normal' };
|
|
378
389
|
const u = cm.getUsage();
|
|
379
390
|
return {
|
|
380
391
|
// 保留浮点 (0-100), 由 buildContextBar 格式化 — round 会让 <0.5% 全变 0, 状态栏像死代码
|
|
@@ -438,7 +449,8 @@ async function startCLI(comm) {
|
|
|
438
449
|
peerCount = comm.getConnections().length;
|
|
439
450
|
}
|
|
440
451
|
catch { /* */ }
|
|
441
|
-
// 读取 LLM 模型名
|
|
452
|
+
// 读取 LLM 模型名 — 优先 bolloon-config.json (activeProvider), 再退 env (2026-08-07:
|
|
453
|
+
// 之前只读 env → 用户配了配置文件但状态栏显示"未配置")
|
|
442
454
|
const providerNames = [
|
|
443
455
|
['OPENAI_API_KEY', 'OpenAI'],
|
|
444
456
|
['ANTHROPIC_API_KEY', 'Anthropic'],
|
|
@@ -449,8 +461,23 @@ async function startCLI(comm) {
|
|
|
449
461
|
['XAI_API_KEY', 'xAI'],
|
|
450
462
|
['TOGETHER_API_KEY', 'Together'],
|
|
451
463
|
];
|
|
452
|
-
|
|
464
|
+
let foundProvider = providerNames.find(([k]) => process.env[k]);
|
|
453
465
|
cliModelName = foundProvider ? foundProvider[1] : '未配置';
|
|
466
|
+
// bolloon-config.json activeProvider 优先 (用户真实配置来源)
|
|
467
|
+
try {
|
|
468
|
+
const { llmConfigStore } = await import('./llm/config-store.js');
|
|
469
|
+
await llmConfigStore.initialize();
|
|
470
|
+
const active = await llmConfigStore.getActiveProvider();
|
|
471
|
+
if (active) {
|
|
472
|
+
const label = String(active).trim();
|
|
473
|
+
cliModelName = label || cliModelName;
|
|
474
|
+
const cfg = await llmConfigStore.getActiveProviderConfig().catch(() => null);
|
|
475
|
+
const model = cfg?.model;
|
|
476
|
+
if (model)
|
|
477
|
+
cliModelName = `${label} · ${model}`;
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
catch { /* config-store 失败静默, 用 env 结果 */ }
|
|
454
481
|
cliAgentName = agentIdentity?.name || 'bolloon';
|
|
455
482
|
cliStartTime = Date.now();
|
|
456
483
|
// 恢复上次 active channel (session 恢复: CLI 与 Web 共用 active-channel.json)
|
|
@@ -469,6 +496,11 @@ async function startCLI(comm) {
|
|
|
469
496
|
}
|
|
470
497
|
// 进入 Ink TUI 输入循环
|
|
471
498
|
// 2026-08-06: 初始状态栏也带上下文显示 (0/1M │ [░░░░░░░░░░] 0%)
|
|
499
|
+
// 2026-08-07: 缓存 ContextManager 引用 (require 加载 ESM 抛 ERR_REQUIRE_ESM, 状态栏恒 0 根因)
|
|
500
|
+
try {
|
|
501
|
+
_ctxManagerRef = await import('./bootstrap/context-manager.js');
|
|
502
|
+
}
|
|
503
|
+
catch { /* 降级: getCliCtxUsage 返回 0/1M */ }
|
|
472
504
|
const initialStatus = `${C_ACCENT}${cliModelName}${RESET}${C_DIM} │${RESET} ${cliAgentName} ${C_DIM}│${RESET} ⏱ 0s${C_DIM} │${RESET} ${buildContextBar(getCliCtxUsage())}`;
|
|
473
505
|
startInk((text) => { processInput(text, comm); }, initialStatus, getStatus);
|
|
474
506
|
// Wait on a promise that resolves on Ctrl+C / 双击 Esc
|
|
@@ -1095,7 +1127,38 @@ async function processInput(input, comm) {
|
|
|
1095
1127
|
// 工具调用显示由 tui-shell 的 onStream handler 处理
|
|
1096
1128
|
const response = await a.prompt(trimmed, {
|
|
1097
1129
|
onStream: (e) => {
|
|
1098
|
-
|
|
1130
|
+
// 2026-08-07: 中间思考/状态显示 — 之前只显示工具步骤, LLM 的思考过程
|
|
1131
|
+
// (thinking / status / phase / Reflection) 全被丢弃 → 用户只能看到输入和最终输出
|
|
1132
|
+
// 用户偏好 (2026-08-07): 思考过程 = 圆角框渲染 (和回复同路径 renderMessageBox),
|
|
1133
|
+
// 颜文字动画 (inkSetThinking) 只表示"正在运行", 不承载思考内容
|
|
1134
|
+
if (e.type === 'thinking' && e.content) {
|
|
1135
|
+
// thinking 事件只有 "🤔 开始思考..." 占位 → 不 appendLine, 运行过程由动画表示;
|
|
1136
|
+
// 真正思考内容在 status 的 Reflection/💡 事件 → 下方框渲染
|
|
1137
|
+
}
|
|
1138
|
+
else if (e.phase && !e.type) {
|
|
1139
|
+
const ph = String(e.phase);
|
|
1140
|
+
const detail = e.detail ? ` (${String(e.detail).slice(0, 60)})` : '';
|
|
1141
|
+
const phLabel = {
|
|
1142
|
+
intent_classified: '意图识别',
|
|
1143
|
+
tool_selected: '工具选择',
|
|
1144
|
+
reflection: '反思',
|
|
1145
|
+
planning: '规划',
|
|
1146
|
+
};
|
|
1147
|
+
appendLine(`${C_WARN}◈ ${phLabel[ph] || ph}${detail}${RESET}`);
|
|
1148
|
+
}
|
|
1149
|
+
else if (e.type === 'status' && e.content) {
|
|
1150
|
+
const content = String(e.content);
|
|
1151
|
+
// Reflection / 反思 / 💡 → 圆角思考框 (和回复一样走 renderMessageBox, 白字+亮边框)
|
|
1152
|
+
if (content.includes('Reflection') || content.includes('反思') || content.includes('💡')) {
|
|
1153
|
+
const body = content.replace(/^💡\s*/, '').slice(0, 1500);
|
|
1154
|
+
if (body.trim())
|
|
1155
|
+
appendLine(renderMessageBox({ title: '💡 反思', body, color: C_WARN }));
|
|
1156
|
+
}
|
|
1157
|
+
else if (!content.includes('🔄 循环') && !content.includes('📋 参数')) {
|
|
1158
|
+
appendLine(`${C_DIM}${content}${RESET}`);
|
|
1159
|
+
}
|
|
1160
|
+
}
|
|
1161
|
+
else if (e.type === 'step_start') {
|
|
1099
1162
|
tuiToolCounter++;
|
|
1100
1163
|
tuiToolCalls.push({ tool: e.tool || '?', args: e.args, _t: Date.now() });
|
|
1101
1164
|
}
|
|
@@ -1139,21 +1202,26 @@ async function processInput(input, comm) {
|
|
|
1139
1202
|
}
|
|
1140
1203
|
// 更新状态栏: 上下文进度 (2026-08-06: 每轮按当前 messageHistory 重算并写回 ContextManager,
|
|
1141
1204
|
// 保证状态栏按需更新 — 不依赖 pi-sdk loop 内部上报, 1s 定时器读到的一定是最新值)
|
|
1205
|
+
// 2026-08-07 修复: pi-sdk loop 每轮已用 estimateHistoryTokens() 上报 ContextManager (pi-sdk.ts:1223),
|
|
1206
|
+
// 这里直接读现值 — 之前用 (a as any).messageHistory 重算, 私有字段拿不到恒为 [] → 0,
|
|
1207
|
+
// 还把 pi-sdk 上报的真实值覆盖成 0 (状态栏永远 0.00% 的根因)
|
|
1142
1208
|
try {
|
|
1143
1209
|
const { getContextManager } = await import('./bootstrap/context-manager.js');
|
|
1144
1210
|
const cm = getContextManager();
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1211
|
+
let usage = cm.getUsage();
|
|
1212
|
+
if (!usage || usage.usedTokens <= 0) {
|
|
1213
|
+
// fallback: 非交互/异常路径 pi-sdk 未上报时兜底估算 (4 字符 ≈ 1 token)
|
|
1214
|
+
const hist = a?.agent?.messageHistory ?? a?.piAgent?.messageHistory ?? [];
|
|
1215
|
+
let t = 0;
|
|
1216
|
+
try {
|
|
1217
|
+
const { estimateTokens } = _require('./context-compaction/index.js');
|
|
1218
|
+
t = estimateTokens(hist);
|
|
1219
|
+
}
|
|
1220
|
+
catch {
|
|
1221
|
+
t = Math.max(0, Math.round(JSON.stringify(hist).length / 4));
|
|
1222
|
+
}
|
|
1223
|
+
usage = cm.updateUsage(Math.max(t, usage?.usedTokens ?? 0));
|
|
1154
1224
|
}
|
|
1155
|
-
// 写回数据源 — 状态栏/Web/任何订阅方都拿到新鲜值
|
|
1156
|
-
const usage = cm.updateUsage(usedTokens);
|
|
1157
1225
|
const usageView = {
|
|
1158
1226
|
// 保留浮点 (0-100), buildContextBar 内部格式化
|
|
1159
1227
|
pct: Math.min(100, (usage.usedTokens / Math.max(1, usage.maxTokens)) * 100),
|
|
@@ -2599,7 +2667,16 @@ async function main() {
|
|
|
2599
2667
|
if (isCLIInteractive) {
|
|
2600
2668
|
console.log = () => { };
|
|
2601
2669
|
console.info = () => { };
|
|
2602
|
-
|
|
2670
|
+
// 2026-08-07: 只吞 SDK 结构化日志 (2026-...T 前缀直接写 stdout 的), 其余 (Ink ANSI 渲染) 走原始 write
|
|
2671
|
+
// 不能整体 no-op — Ink 渲染依赖 write callback, 且 pty/管道缓冲满时 no-op 会掩盖真实写状态
|
|
2672
|
+
process.stdout.write = ((chunk, ...rest) => {
|
|
2673
|
+
const s = String(chunk);
|
|
2674
|
+
if (/^\d{4}-\d{2}-\d{2}T/.test(s))
|
|
2675
|
+
return true; // SDK 结构化日志 → 吞
|
|
2676
|
+
return originalStdoutWrite(chunk, ...rest);
|
|
2677
|
+
});
|
|
2678
|
+
// 2026-08-07: 交互模式静音 auto-update 后台通知 (stderr), 避免 "🔍 检查更新" 污染 TUI
|
|
2679
|
+
void import('./utils/auto-update.js').then(({ setNotifyQuiet }) => setNotifyQuiet(true)).catch(() => { });
|
|
2603
2680
|
}
|
|
2604
2681
|
if (isNonInteractive) {
|
|
2605
2682
|
console.error = () => { };
|
|
@@ -2636,12 +2713,30 @@ async function main() {
|
|
|
2636
2713
|
}
|
|
2637
2714
|
const { keypair, did, name } = await bootstrapIdentity();
|
|
2638
2715
|
agentIdentity = { did, name, publicKey: Buffer.from(keypair.publicKey).toString('hex') };
|
|
2639
|
-
|
|
2640
|
-
|
|
2641
|
-
|
|
2642
|
-
|
|
2643
|
-
|
|
2644
|
-
|
|
2716
|
+
// 2026-08-07: CLI 模式后台自动安装/启动本地 Kubo (web 模式 server.ts 已有, CLI 缺 → IPNS 发布后无法解析的根因)
|
|
2717
|
+
// fire-and-forget, 不阻塞启动; Kubo 就绪后才发布 DID (避免 registerAgent 在 Kubo 未启动时 30s 超时)
|
|
2718
|
+
// 装好后 /ipfs /ipns /ipfs_add /ipns_publish 工具可用
|
|
2719
|
+
void (async () => {
|
|
2720
|
+
let kuboReady = false;
|
|
2721
|
+
try {
|
|
2722
|
+
const sdk = await import('@diap/sdk');
|
|
2723
|
+
const checkKuboSetup = sdk.checkKuboSetup;
|
|
2724
|
+
if (typeof checkKuboSetup === 'function') {
|
|
2725
|
+
const setup = await checkKuboSetup(true, true);
|
|
2726
|
+
kuboReady = !!(setup?.ready && setup?.daemonRunning);
|
|
2727
|
+
s.info(kuboReady ? 'IPFS 本地 Kubo 就绪 → IPNS 发布/解析可用' : 'Kubo 不可用, IPFS 降级本地模式');
|
|
2728
|
+
}
|
|
2729
|
+
}
|
|
2730
|
+
catch (e) {
|
|
2731
|
+
s.warn(`Kubo 自动安装失败 (非致命): ${String(e?.message || e).slice(0, 120)}`);
|
|
2732
|
+
}
|
|
2733
|
+
publishDID(name, keypair).then(({ cid, ipnsName }) => {
|
|
2734
|
+
if (cid)
|
|
2735
|
+
agentIdentity.cid = cid;
|
|
2736
|
+
if (ipnsName)
|
|
2737
|
+
agentIdentity.ipnsName = ipnsName;
|
|
2738
|
+
}).catch(() => { });
|
|
2739
|
+
})();
|
|
2645
2740
|
const verifier = createVerificationManager();
|
|
2646
2741
|
let comm = null;
|
|
2647
2742
|
try {
|
|
@@ -2658,11 +2753,18 @@ async function main() {
|
|
|
2658
2753
|
});
|
|
2659
2754
|
}
|
|
2660
2755
|
else {
|
|
2661
|
-
|
|
2662
|
-
|
|
2663
|
-
|
|
2664
|
-
|
|
2665
|
-
|
|
2756
|
+
// 2026-08-07: 弱网下 hyperswarm DHT start/joinTopic 可能无限挂起 → 20s 超时门, 超时降级无 P2P 模式
|
|
2757
|
+
comm = await withTimeout(bootstrapP2P(verifier), 20_000, 'P2P 网络初始化')
|
|
2758
|
+
.catch((err) => {
|
|
2759
|
+
s.warn(`P2P 初始化超时/失败, 降级无 P2P 模式: ${err.message}`);
|
|
2760
|
+
return null;
|
|
2761
|
+
});
|
|
2762
|
+
if (comm) {
|
|
2763
|
+
const connections = comm.getConnections();
|
|
2764
|
+
if (connections.length > 0) {
|
|
2765
|
+
agentIdentity.peerId = connections[0].publicKey;
|
|
2766
|
+
agentIdentity.p2pChannel = 'bolloon-agent-harness';
|
|
2767
|
+
}
|
|
2666
2768
|
}
|
|
2667
2769
|
}
|
|
2668
2770
|
}
|
|
@@ -2670,13 +2772,14 @@ async function main() {
|
|
|
2670
2772
|
s.warn(`P2P 初始化失败: ${err.message}`);
|
|
2671
2773
|
s.warn('将使用无 P2P 模式运行');
|
|
2672
2774
|
}
|
|
2673
|
-
await bootstrapIroh(keypair, name)
|
|
2775
|
+
await withTimeout(bootstrapIroh(keypair, name), 15_000, 'iroh P2P 初始化')
|
|
2776
|
+
.catch((err) => s.warn(`iroh 初始化超时, 继续使用 Hyperswarm P2P: ${err.message}`));
|
|
2674
2777
|
// Bolloon Bootstrap: 启动扫描 + Context 收集 + 挂定时任务
|
|
2675
2778
|
// 失败静默 (主流程不被阻塞)
|
|
2676
2779
|
try {
|
|
2677
2780
|
const { bootstrapBolloon } = await import('./pi-ecosystem-judgment/human-value-pipeline.js');
|
|
2678
2781
|
s.info('正在 bootstrap bolloon 上下文...');
|
|
2679
|
-
const bs = await bootstrapBolloon({ cwd: process.cwd() });
|
|
2782
|
+
const bs = await withTimeout(bootstrapBolloon({ cwd: process.cwd() }), 20_000, 'Bolloon 上下文扫描');
|
|
2680
2783
|
s.info(`Bootstrap 完成 (${bs.durationMs}ms, ${bs.errors.length} 个非致命错误)`);
|
|
2681
2784
|
}
|
|
2682
2785
|
catch (err) {
|
package/dist/llm/config-store.js
CHANGED
|
@@ -5,7 +5,10 @@
|
|
|
5
5
|
import * as fs from 'fs/promises';
|
|
6
6
|
import * as path from 'path';
|
|
7
7
|
const CONFIG_DIR = path.join(process.env.HOME || '/tmp', '.bolloon');
|
|
8
|
-
|
|
8
|
+
// 2026-08-07: llm-config.json → bolloon-config.json (统一配置文件名, Bolloon 自己有写权限)
|
|
9
|
+
// initialize() 会做一次迁移: 旧文件存在且新文件不存在 → 复制旧内容, 之后统一读写新文件
|
|
10
|
+
const CONFIG_PATH = path.join(CONFIG_DIR, 'bolloon-config.json');
|
|
11
|
+
const LEGACY_CONFIG_PATH = path.join(CONFIG_DIR, 'llm-config.json');
|
|
9
12
|
export const DEFAULT_PROVIDER_CONFIGS = {
|
|
10
13
|
openai: {
|
|
11
14
|
enabled: false,
|
|
@@ -245,6 +248,18 @@ class LLMConfigStore {
|
|
|
245
248
|
return;
|
|
246
249
|
try {
|
|
247
250
|
await fs.mkdir(CONFIG_DIR, { recursive: true });
|
|
251
|
+
// 2026-08-07: 迁移 — 旧 llm-config.json 存在且新 bolloon-config.json 不存在时复制旧内容
|
|
252
|
+
try {
|
|
253
|
+
await fs.access(CONFIG_PATH);
|
|
254
|
+
}
|
|
255
|
+
catch {
|
|
256
|
+
try {
|
|
257
|
+
const legacy = await fs.readFile(LEGACY_CONFIG_PATH, 'utf-8');
|
|
258
|
+
await fs.writeFile(CONFIG_PATH, legacy, { mode: 0o600 });
|
|
259
|
+
console.log('[config-store] 已迁移 llm-config.json → bolloon-config.json');
|
|
260
|
+
}
|
|
261
|
+
catch { /* 旧文件也不存在 → 走默认配置 */ }
|
|
262
|
+
}
|
|
248
263
|
const data = await fs.readFile(CONFIG_PATH, 'utf-8');
|
|
249
264
|
const loadedConfig = JSON.parse(data);
|
|
250
265
|
// 确保加载的配置包含所有默认供应商,缺失的用默认值补充
|
|
@@ -271,7 +286,8 @@ class LLMConfigStore {
|
|
|
271
286
|
if (!this.config)
|
|
272
287
|
return;
|
|
273
288
|
this.config.updatedAt = new Date().toISOString();
|
|
274
|
-
|
|
289
|
+
// 2026-08-07: mode 0o600 — 仅当前用户可读写 (含 API key 的敏感配置); Bolloon 自身进程可写
|
|
290
|
+
await fs.writeFile(CONFIG_PATH, JSON.stringify(this.config, null, 2), { mode: 0o600 });
|
|
275
291
|
}
|
|
276
292
|
async getConfig() {
|
|
277
293
|
await this.initialize();
|
package/dist/llm/pi-ai.js
CHANGED
|
@@ -590,14 +590,30 @@ ${prompt}`;
|
|
|
590
590
|
}
|
|
591
591
|
}
|
|
592
592
|
let modelInstance = null;
|
|
593
|
+
/** 2026-08-07: bolloon-config.json 优先, 旧 llm-config.json 兜底 (迁移期兼容) */
|
|
594
|
+
function resolveConfigPath() {
|
|
595
|
+
const home = process.env.HOME || '/tmp';
|
|
596
|
+
const base = path.join(home, '.bolloon');
|
|
597
|
+
for (const name of ['bolloon-config.json', 'llm-config.json']) {
|
|
598
|
+
const p = path.join(base, name);
|
|
599
|
+
try {
|
|
600
|
+
if (fs.existsSync(p))
|
|
601
|
+
return p;
|
|
602
|
+
}
|
|
603
|
+
catch { /* continue */ }
|
|
604
|
+
}
|
|
605
|
+
return null;
|
|
606
|
+
}
|
|
593
607
|
function detectProvider() {
|
|
594
608
|
// 首先检查配置文件(优先级最高)
|
|
595
609
|
try {
|
|
596
|
-
const configPath =
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
610
|
+
const configPath = resolveConfigPath();
|
|
611
|
+
if (configPath) {
|
|
612
|
+
const configData = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
613
|
+
if (configData.activeProvider && configData.providers[configData.activeProvider]) {
|
|
614
|
+
console.log('[PiAIModel] Detected provider from config:', configData.activeProvider);
|
|
615
|
+
return configData.activeProvider;
|
|
616
|
+
}
|
|
601
617
|
}
|
|
602
618
|
}
|
|
603
619
|
catch { }
|
|
@@ -656,12 +672,14 @@ export function initPiAI(config = {}) {
|
|
|
656
672
|
let apiKey = config.apiKey;
|
|
657
673
|
if (!apiKey) {
|
|
658
674
|
try {
|
|
659
|
-
const configPath =
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
675
|
+
const configPath = resolveConfigPath();
|
|
676
|
+
if (configPath) {
|
|
677
|
+
const configData = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
678
|
+
const providerConfig = configData.providers[provider];
|
|
679
|
+
if (providerConfig?.apiKey) {
|
|
680
|
+
apiKey = providerConfig.apiKey;
|
|
681
|
+
console.log('[PiAIModel] Loaded apiKey from config for', provider);
|
|
682
|
+
}
|
|
665
683
|
}
|
|
666
684
|
}
|
|
667
685
|
catch (e) {
|
|
@@ -64,6 +64,8 @@ const TOOL_WHITELIST = new Set([
|
|
|
64
64
|
'cid_save', 'cid_load', 'cid_update', 'cid_version', 'cid_list', 'cid_share',
|
|
65
65
|
'context_save_snapshot', 'context_restore',
|
|
66
66
|
'ui_save_component', 'ui_load_component',
|
|
67
|
+
// 2026-08-07: Bolloon 自身配置读写 (bolloon-config.json, agent 有修改自身配置权限)
|
|
68
|
+
'bolloon_config_get', 'bolloon_config_set',
|
|
67
69
|
]);
|
|
68
70
|
export const gateWhitelist = { gate: 'whitelist', allowed: true };
|
|
69
71
|
/**
|
|
@@ -28,10 +28,17 @@ const MAGENTA = '\x1b[35m';
|
|
|
28
28
|
const PKG_NAME = '@bolloon/bolloon-agent';
|
|
29
29
|
const BOLLOON_DIR = path.join(process.env.HOME || process.env.USERPROFILE || '/tmp', '.bolloon');
|
|
30
30
|
const UPDATE_CACHE = path.join(BOLLOON_DIR, '.update-check.json');
|
|
31
|
+
/** 2026-08-07: CLI 交互模式下静音自动更新通知 (避免后台检查污染 TUI 屏幕) */
|
|
32
|
+
let notifyQuiet = false;
|
|
33
|
+
export function setNotifyQuiet(v) {
|
|
34
|
+
notifyQuiet = v;
|
|
35
|
+
}
|
|
31
36
|
/**
|
|
32
37
|
* 通知用户。使用 stderr,避免在交互式 CLI 模式下 stdout 被吞掉。
|
|
33
38
|
*/
|
|
34
39
|
function notify(msg, color = RESET) {
|
|
40
|
+
if (notifyQuiet)
|
|
41
|
+
return;
|
|
35
42
|
process.stderr.write(`${color}${msg}${RESET}`);
|
|
36
43
|
}
|
|
37
44
|
function httpGet(url) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bolloon/bolloon-agent",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.38",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "P2P AI Document Agent - 全局安装后执行 `bolloon` 启动产品",
|
|
6
6
|
"main": "dist/cli-entry.js",
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
"@capacitor/ios": "^8.4.2",
|
|
60
60
|
"@chainsafe/libp2p-noise": "^17.0.0",
|
|
61
61
|
"@chainsafe/libp2p-yamux": "^8.0.1",
|
|
62
|
-
"@diap/sdk": "^0.2.
|
|
62
|
+
"@diap/sdk": "^0.2.2",
|
|
63
63
|
"@libp2p/autonat": "^3.0.25",
|
|
64
64
|
"@libp2p/circuit-relay-v2": "^4.2.9",
|
|
65
65
|
"@libp2p/dcutr": "^3.0.20",
|