@bolloon/bolloon-agent 0.5.3 → 0.5.4
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 +67 -15
- package/dist/agents/pi-sdk.js +7 -1
- package/dist/agents/session-store.js +144 -3
- package/dist/agents/wallet-tools.js +63 -0
- package/dist/cli/ink-app.js +79 -27
- package/dist/cli/input-history.js +119 -0
- package/dist/cli/loading-tui.js +66 -6
- package/dist/cli/log-gate.js +39 -1
- package/dist/cli/session-summary.js +129 -0
- package/dist/cli/session-tree.js +141 -0
- package/dist/cli/status-segments.js +70 -0
- package/dist/cli/stores.js +16 -0
- package/dist/cli/wallet-store.js +159 -0
- package/dist/cli/wallet-table.js +46 -0
- package/dist/cli-entry.js +22 -0
- package/dist/electron-build/agents/pi-sdk-tools.js +68 -15
- package/dist/electron-build/agents/pi-sdk-tools.js.map +1 -1
- package/dist/electron-build/agents/pi-sdk.js +7 -1
- package/dist/electron-build/agents/pi-sdk.js.map +1 -1
- package/dist/electron-build/agents/session-store.js +144 -3
- package/dist/electron-build/agents/session-store.js.map +1 -1
- package/dist/electron-build/agents/wallet-tools.js +102 -0
- package/dist/electron-build/agents/wallet-tools.js.map +1 -0
- package/dist/electron-build/cli/wallet-store.js +200 -0
- package/dist/electron-build/cli/wallet-store.js.map +1 -0
- package/dist/electron-build/llm/pi-ai.js +25 -0
- package/dist/electron-build/llm/pi-ai.js.map +1 -1
- package/dist/index.js +826 -101
- package/dist/llm/pi-ai.js +23 -0
- package/dist/web/bolloon-web.json +3 -3
- package/dist/web/sw.js +1 -1
- package/package.json +1 -1
|
@@ -138,6 +138,59 @@ class SessionStore {
|
|
|
138
138
|
* fs.writeFile 抛 EINVAL. 修法: filename 层 escape `:` → `__`, key 保持不变
|
|
139
139
|
* (load/save/listKeys/deleteKey 全部透明).
|
|
140
140
|
*/
|
|
141
|
+
/**
|
|
142
|
+
* **写**的时候用这个 —— 与 resolveExisting 的区别: 不存在**不抛错**, 返回规范路径 (等于新建)。
|
|
143
|
+
*
|
|
144
|
+
* 2026-09-30 回归事故: 我把 resolveExisting (读语义, 不存在就抛 not found) 批量替换进了
|
|
145
|
+
* saveMessages ⇒ 退出存档对"还没落盘的新会话"直接抛 `session not found`
|
|
146
|
+
* (leo 贴的 `⚠ session 存档失败: SessionStore: session not found: 20260930_175348_870c70`)。
|
|
147
|
+
* 写路径必须容忍"还没有文件" —— 那正是它要创建的东西。
|
|
148
|
+
*/
|
|
149
|
+
async resolveWritePath(key) {
|
|
150
|
+
const canonical = this.pathFor(key);
|
|
151
|
+
try {
|
|
152
|
+
await fs.access(canonical);
|
|
153
|
+
return canonical;
|
|
154
|
+
}
|
|
155
|
+
catch { /* 试老名 */ }
|
|
156
|
+
const legacy = path.join(this.cacheDir, `${key}.json`);
|
|
157
|
+
try {
|
|
158
|
+
await fs.access(legacy);
|
|
159
|
+
return legacy;
|
|
160
|
+
}
|
|
161
|
+
catch { /* 新会话 */ }
|
|
162
|
+
return canonical;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* 读的时候用这个 —— 兼容**老文件名**。
|
|
166
|
+
*
|
|
167
|
+
* 2026-09-30 发现: 早期版本直接把 `channelId:sessionId` 当文件名写盘 (`real-123:default.json`),
|
|
168
|
+
* 后来 Windows 兼容改成 filenameEscape (`:` → `__`), 但**老文件没迁移** ⇒ 用 pathFor 去读
|
|
169
|
+
* 老会话一律 ENOENT (`/sessions` 里那些 `real-*:default` 全是 Preview `—`, 也续不上)。
|
|
170
|
+
* 这里: 先试新名, 不存在再试老名; 老名存在时**顺手迁移**成新名 (迁移失败就继续读老名)。
|
|
171
|
+
*/
|
|
172
|
+
async resolveExisting(key) {
|
|
173
|
+
const canonical = this.pathFor(key);
|
|
174
|
+
try {
|
|
175
|
+
await fs.access(canonical);
|
|
176
|
+
return canonical;
|
|
177
|
+
}
|
|
178
|
+
catch { /* 试老名 */ }
|
|
179
|
+
const legacy = path.join(this.cacheDir, `${key}.json`);
|
|
180
|
+
try {
|
|
181
|
+
await fs.access(legacy);
|
|
182
|
+
try {
|
|
183
|
+
await fs.rename(legacy, canonical);
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
return legacy;
|
|
187
|
+
} // 迁移失败也能读
|
|
188
|
+
return canonical;
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
throw new Error(`SessionStore: session not found: ${key}`);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
141
194
|
pathFor(key) {
|
|
142
195
|
if (!key || key.includes('/') || key.includes('..')) {
|
|
143
196
|
throw new Error(`SessionStore: invalid key ${JSON.stringify(key)}`);
|
|
@@ -171,7 +224,7 @@ class SessionStore {
|
|
|
171
224
|
totalCount: messages.length,
|
|
172
225
|
},
|
|
173
226
|
};
|
|
174
|
-
const filePath = this.
|
|
227
|
+
const filePath = await this.resolveWritePath(key); // 写路径: 新会话就建 (不抛 not found)
|
|
175
228
|
const tmpPath = `${filePath}.tmp`;
|
|
176
229
|
await fs.writeFile(tmpPath, JSON.stringify(payload, null, 2), 'utf-8');
|
|
177
230
|
await fs.rename(tmpPath, filePath);
|
|
@@ -213,7 +266,7 @@ class SessionStore {
|
|
|
213
266
|
totalCount: messages.length,
|
|
214
267
|
},
|
|
215
268
|
};
|
|
216
|
-
const filePath = this.pathFor(key);
|
|
269
|
+
const filePath = this.pathFor(key); // 同步保存一律写规范文件名
|
|
217
270
|
const tmpPath = `${filePath}.tmp`;
|
|
218
271
|
fsSyncWrite(tmpPath, JSON.stringify(payload, null, 2));
|
|
219
272
|
fsSyncRename(tmpPath, filePath);
|
|
@@ -228,7 +281,11 @@ class SessionStore {
|
|
|
228
281
|
if (!key || key.includes('/') || key.includes('..')) {
|
|
229
282
|
throw new Error(`SessionStore: invalid key ${JSON.stringify(key)}`);
|
|
230
283
|
}
|
|
231
|
-
|
|
284
|
+
// 2026-09-30 回归修复: 读路径**不许**在"会话不存在"时抛错 —— 仓里的契约是
|
|
285
|
+
// `loadMessages('cli:nonexistent') === null` (见 src/test/session-store.test.ts)。
|
|
286
|
+
// 用容错解析 (不存在 ⇒ 返回规范路径), 随后的 readFile 命中 ENOENT ⇒ return null。
|
|
287
|
+
// 老文件名(`real-123:default.json` 那批)由 resolveWritePath 兼容: 存在就返回老路径。
|
|
288
|
+
const filePath = await this.resolveWritePath(key);
|
|
232
289
|
let raw;
|
|
233
290
|
try {
|
|
234
291
|
raw = await fs.readFile(filePath, 'utf-8');
|
|
@@ -258,6 +315,90 @@ class SessionStore {
|
|
|
258
315
|
return [];
|
|
259
316
|
}
|
|
260
317
|
}
|
|
318
|
+
/**
|
|
319
|
+
* 列最近改动的会话 (按 mtime 倒序), 带条数与首条用户消息预览。
|
|
320
|
+
*
|
|
321
|
+
* 2026-09-30 (leo: 「/session 没有反应, 没展示最新记录, 无法选择继续」): 只为"选一个继续"服务 ——
|
|
322
|
+
* **只解析最新的 limit 个文件**(缓存目录可能上千个, 全量解析会卡住输入), 解析失败的那条如实记 0。
|
|
323
|
+
*/
|
|
324
|
+
async listRecent(limit = 10) {
|
|
325
|
+
const out = [];
|
|
326
|
+
let files = [];
|
|
327
|
+
try {
|
|
328
|
+
files = await fs.readdir(this.cacheDir);
|
|
329
|
+
}
|
|
330
|
+
catch {
|
|
331
|
+
return out;
|
|
332
|
+
}
|
|
333
|
+
const cands = [];
|
|
334
|
+
for (const f of files) {
|
|
335
|
+
if (!f.endsWith('.json') || f.endsWith('.tmp'))
|
|
336
|
+
continue;
|
|
337
|
+
try {
|
|
338
|
+
const st = await fs.stat(path.join(this.cacheDir, f));
|
|
339
|
+
cands.push({ key: SessionStore.filenameUnescape(f.slice(0, -'.json'.length)), mtimeMs: st.mtimeMs });
|
|
340
|
+
}
|
|
341
|
+
catch { /* 单条 stat 失败跳过 */ }
|
|
342
|
+
}
|
|
343
|
+
cands.sort((a, b) => b.mtimeMs - a.mtimeMs);
|
|
344
|
+
for (const c of cands.slice(0, Math.max(1, limit))) {
|
|
345
|
+
let messages = 0;
|
|
346
|
+
let preview = '';
|
|
347
|
+
let title = c.key; // 会话文件里没有 title 字段 ⇒ 默认就是 key (web 侧才有会话名)
|
|
348
|
+
try {
|
|
349
|
+
// 兼容老文件名 (`real-123:default.json` 未转义那批) —— 读不到规范名就试原名
|
|
350
|
+
let text = '';
|
|
351
|
+
try {
|
|
352
|
+
text = await fs.readFile(this.pathFor(c.key), 'utf-8');
|
|
353
|
+
}
|
|
354
|
+
catch {
|
|
355
|
+
text = await fs.readFile(path.join(this.cacheDir, `${c.key}.json`), 'utf-8');
|
|
356
|
+
}
|
|
357
|
+
const raw = JSON.parse(text);
|
|
358
|
+
const arr = Array.isArray(raw) ? raw : (raw?.messages || []);
|
|
359
|
+
messages = Array.isArray(arr) ? arr.length : 0;
|
|
360
|
+
const md = (!Array.isArray(raw) && raw?.metadata) || {};
|
|
361
|
+
if (typeof md.title === 'string' && md.title.trim())
|
|
362
|
+
title = md.title.trim();
|
|
363
|
+
const mdPreview = typeof md.preview === 'string' ? md.preview.trim() : '';
|
|
364
|
+
// 预览要用**真实用户话**, 跳过自动注入的上下文块 (否则全是 <!-- current-turn … -->)
|
|
365
|
+
const isInjected = (x) => !!x && (/^<!--/.test(x.trim()) || /^#\s*你的项目上下文/.test(x.trim()) || /^\[cron\]/.test(x.trim()));
|
|
366
|
+
const first = (Array.isArray(arr) ? arr : []).find((m) => m && m.role === 'user' && m.content && !isInjected(String(m.content)));
|
|
367
|
+
preview = mdPreview || String(first?.content || '').replace(/\s+/g, ' ').trim().slice(0, 120);
|
|
368
|
+
}
|
|
369
|
+
catch { /* 损坏文件: 仍列出, 只是 0 条无预览 */ }
|
|
370
|
+
out.push({ key: c.key, title, mtimeMs: c.mtimeMs, messages, preview });
|
|
371
|
+
}
|
|
372
|
+
return out;
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* 合并写回会话文件的 metadata (原子: 先写 .tmp 再 rename)。
|
|
376
|
+
* 2026-09-30 (leo: 「Title/Preview 要有内容, 使用 AI 来总结进去」): AI 总结结果落在
|
|
377
|
+
* `metadata.{title,preview,summarizedAt}`, **只算一次**, 后续 /sessions 直接读。
|
|
378
|
+
* 原子写是硬要求 —— 会话文件是用户的会话历史, 半截文件比没有标题糟得多。
|
|
379
|
+
*/
|
|
380
|
+
async updateMetadata(key, patch) {
|
|
381
|
+
if (!key || key.includes('/') || key.includes('..'))
|
|
382
|
+
throw new Error(`SessionStore: invalid key ${JSON.stringify(key)}`);
|
|
383
|
+
const file = await this.resolveWritePath(key);
|
|
384
|
+
let raw = null;
|
|
385
|
+
try {
|
|
386
|
+
raw = JSON.parse(await fs.readFile(file, 'utf-8'));
|
|
387
|
+
}
|
|
388
|
+
catch (e) {
|
|
389
|
+
if (e?.code !== 'ENOENT')
|
|
390
|
+
throw new Error(`会话文件读不了 (${file}): ${String(e?.message || e).slice(0, 120)}`);
|
|
391
|
+
// 还没有文件 ⇒ 建成只有 metadata 的会话 (元数据更新对新会话应当有效, 不是错误)
|
|
392
|
+
}
|
|
393
|
+
const next = raw === null
|
|
394
|
+
? { key, messages: [], metadata: { ...patch } }
|
|
395
|
+
: Array.isArray(raw)
|
|
396
|
+
? { key, messages: raw, metadata: { ...patch } }
|
|
397
|
+
: { ...raw, metadata: { ...(raw?.metadata || {}), ...patch } };
|
|
398
|
+
const tmp = `${file}.tmp`;
|
|
399
|
+
await fs.writeFile(tmp, JSON.stringify(next, null, 2), 'utf-8');
|
|
400
|
+
await fs.rename(tmp, file);
|
|
401
|
+
}
|
|
261
402
|
/** 删一条 session — 失败抛错. */
|
|
262
403
|
async deleteKey(key) {
|
|
263
404
|
if (!key || key.includes('/') || key.includes('..')) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../../src/agents/session-store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../../src/agents/session-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* wallet-tools.ts — 钱包工具的**双布局加载器** (2026-09-30)
|
|
4
|
+
*
|
|
5
|
+
* 为什么要有这个文件:
|
|
6
|
+
* 钱包真身是 `constraint-runtime` 里的 `tools/WalletTools/*`。构建 (`npm run build:main` =
|
|
7
|
+
* `tsc && node scripts/copy-constraint-runtime.mjs`) 把 `src/constraint-runtime/dist/*`
|
|
8
|
+
* 复制成 `dist/constraint-runtime/*` —— **少一层 `dist/`**。于是同一句相对导入:
|
|
9
|
+
* `../constraint-runtime/dist/tools/WalletTools/createWallet.js`
|
|
10
|
+
* 在源码态 (src/agents) 能解析 ✓, 构建后 (dist/agents) 解析到 `dist/constraint-runtime/dist/…` ✗
|
|
11
|
+
* ⇒ `wallet_create` 报 `Cannot find module '…/dist/constraint-runtime/src/tools/…'` (leo 2026-09-30 贴的屏),
|
|
12
|
+
* 而 `/wallet` 又因为"从来没写过文件"显示「钱包 (0)」—— 两个毛病叠在一起, 看着像"钱包功能不存在"。
|
|
13
|
+
*
|
|
14
|
+
* 规则: **按存在的路径挑**, 挑不到就抛错并**列出试过的路径** (不许含糊成"未知错误")。
|
|
15
|
+
* 注意: 这里用**变量**给 `import()` ⇒ 不做静态解析 (跨布局本来就不能静态解析)。
|
|
16
|
+
*/
|
|
17
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
20
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
21
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
22
|
+
}
|
|
23
|
+
Object.defineProperty(o, k2, desc);
|
|
24
|
+
}) : (function(o, m, k, k2) {
|
|
25
|
+
if (k2 === undefined) k2 = k;
|
|
26
|
+
o[k2] = m[k];
|
|
27
|
+
}));
|
|
28
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
29
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
30
|
+
}) : function(o, v) {
|
|
31
|
+
o["default"] = v;
|
|
32
|
+
});
|
|
33
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
34
|
+
var ownKeys = function(o) {
|
|
35
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
36
|
+
var ar = [];
|
|
37
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
38
|
+
return ar;
|
|
39
|
+
};
|
|
40
|
+
return ownKeys(o);
|
|
41
|
+
};
|
|
42
|
+
return function (mod) {
|
|
43
|
+
if (mod && mod.__esModule) return mod;
|
|
44
|
+
var result = {};
|
|
45
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
46
|
+
__setModuleDefault(result, mod);
|
|
47
|
+
return result;
|
|
48
|
+
};
|
|
49
|
+
})();
|
|
50
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
51
|
+
exports.walletToolCandidates = walletToolCandidates;
|
|
52
|
+
exports.loadWalletTool = loadWalletTool;
|
|
53
|
+
exports.walletToolLayout = walletToolLayout;
|
|
54
|
+
const path = __importStar(require("path"));
|
|
55
|
+
const url_1 = require("url");
|
|
56
|
+
// 2026-09-30: 不用 import.meta —— 本文件会被 electron 那条 CJS 链间接引到,
|
|
57
|
+
// `tsc -p tsconfig.electron.json` 会报 TS1343 (module: CommonJS 下不允许 import.meta),
|
|
58
|
+
// 而 `npm publish` 的 prepublishOnly (build:all → build:electron) 会因此挂住。
|
|
59
|
+
// 仓里现成的替代: cjsModuleDir() (CJS/ESM 都能用) + currentPackageRoot() + firstExisting()。
|
|
60
|
+
const module_context_js_1 = require("../utils/module-context.js");
|
|
61
|
+
const version_info_js_1 = require("../utils/version-info.js");
|
|
62
|
+
/** 候选路径 (先近后远; 覆盖 dev / dist 两种布局) */
|
|
63
|
+
function walletToolCandidates(name) {
|
|
64
|
+
const root = (() => { try {
|
|
65
|
+
return (0, version_info_js_1.currentPackageRoot)();
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return process.cwd();
|
|
69
|
+
} })();
|
|
70
|
+
const here = (0, module_context_js_1.cjsModuleDir)() || path.join(root, 'dist', 'agents'); // src/agents 或 dist/agents
|
|
71
|
+
return [
|
|
72
|
+
// ① 构建后布局: dist/constraint-runtime/tools/… (从 dist/agents 出发)
|
|
73
|
+
path.join(here, '..', 'constraint-runtime', 'tools', 'WalletTools', `${name}.js`),
|
|
74
|
+
// ② 源码态布局: src/constraint-runtime/dist/tools/… (从 src/agents 出发)
|
|
75
|
+
path.join(here, '..', 'constraint-runtime', 'dist', 'tools', 'WalletTools', `${name}.js`),
|
|
76
|
+
// ③ 兜底: 从仓根分别按两种布局找
|
|
77
|
+
path.join(root, 'dist', 'constraint-runtime', 'tools', 'WalletTools', `${name}.js`),
|
|
78
|
+
path.join(root, 'src', 'constraint-runtime', 'dist', 'tools', 'WalletTools', `${name}.js`),
|
|
79
|
+
];
|
|
80
|
+
}
|
|
81
|
+
/** 加载一个钱包工具模块 (挑第一个真实存在的; 都不在就带着"试过哪些"报错) */
|
|
82
|
+
async function loadWalletTool(name) {
|
|
83
|
+
const tried = walletToolCandidates(name);
|
|
84
|
+
const hit = (0, module_context_js_1.firstExisting)(tried);
|
|
85
|
+
if (hit)
|
|
86
|
+
return (await Promise.resolve(`${(0, url_1.pathToFileURL)(hit).href}`).then(s => __importStar(require(s))));
|
|
87
|
+
throw new Error(`找不到钱包工具 ${name} (试过 ${tried.length} 个路径):\n ${tried.join('\n ')}`);
|
|
88
|
+
}
|
|
89
|
+
/** 给诊断用: 当前各自解析到哪 (打印用的字符串, 不加载) */
|
|
90
|
+
function walletToolLayout() {
|
|
91
|
+
const names = ['createWallet', 'getBalance', 'signMessage'];
|
|
92
|
+
const out = [];
|
|
93
|
+
for (const n of names) {
|
|
94
|
+
for (const c of walletToolCandidates(n)) {
|
|
95
|
+
if (out.some(o => o.pattern === c))
|
|
96
|
+
continue;
|
|
97
|
+
out.push({ pattern: c, exists: (0, module_context_js_1.firstExisting)([c]) !== null });
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return out;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=wallet-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet-tools.js","sourceRoot":"","sources":["../../../src/agents/wallet-tools.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,MAAY,IAAI,iCAAa;AAC7B,6BAAoC;AACpC,6DAA6D;AAC7D,mFAAmF;AACnF,yEAAyE;AACzE,oFAAoF;AACpF,kEAAyE;AACzE,8DAA8D;AAO9D,sCAAsC;AACtC,8BAAqC,IAAoB;IACvD,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QAAC,OAAO,IAAA,oCAAkB,GAAE,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;IAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChG,MAAM,IAAI,GAAG,IAAA,gCAAY,GAAE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAG,2BAA2B;IAC/F,OAAO;QACL,8DAA8D;QAC9D,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,KAAK,CAAC;QACjF,iEAAiE;QACjE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,KAAK,CAAC;QACzF,oBAAoB;QACpB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,oBAAoB,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,KAAK,CAAC;QACnF,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,oBAAoB,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,KAAK,CAAC;KAC3F,CAAC;AACJ,CAAC;AAED,6CAA6C;AACtC,KAAK,yBAAkC,IAAoB;IAChE,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,IAAA,iCAAa,EAAC,KAAK,CAAC,CAAC;IACjC,IAAI,GAAG;QAAE,OAAO,CAAC,yBAAa,IAAA,mBAAa,EAAC,GAAG,CAAC,CAAC,IAAI,uCAAC,CAAM,CAAC;IAC7D,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,QAAQ,KAAK,CAAC,MAAM,eAAe,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC5F,CAAC;AAED,oCAAoC;AACpC;IACE,MAAM,KAAK,GAAqB,CAAC,cAAc,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;IAC9E,MAAM,GAAG,GAA2C,EAAE,CAAC;IACvD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,KAAK,MAAM,CAAC,IAAI,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;YACxC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC;gBAAE,SAAS;YAC7C,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,IAAA,iCAAa,EAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* wallet-store.ts — bolloon 自己的钱包台账: **一个目录, 一钱包一文件** (leo 2026-09-30)
|
|
4
|
+
*
|
|
5
|
+
* 事实与边界:
|
|
6
|
+
* · agent 工具 `wallet_create` / `wallet_import` 只**生成/解析**钱包, **从不落盘**
|
|
7
|
+
* (`constraint-runtime/src/tools/WalletTools/createWallet.ts` 纯 `Wallet.createRandom()`) ⇒
|
|
8
|
+
* `/wallet` 一直是「钱包 (0)」不是路径写错, 是**从来没写过文件**。
|
|
9
|
+
* · 台账目录 = `~/.bolloon/wallets/`, **一钱包一文件** `<名字>.json` (**0600**)。
|
|
10
|
+
* 放这儿而不是仓库里: 仓库是公开的 (`private:false`), 私钥进 git 就完了。
|
|
11
|
+
* · 文件里允许有私钥/助记词 (签名要用), 但**命令输出永不回显** —— 只给地址 + 路径。
|
|
12
|
+
* · 不读别的 agent 的钱包目录 (`~/.hermes/wallets/…`): `chain-config.ts` 定的硬规则 ——
|
|
13
|
+
* 那不属于本进程, 读了就是越权。要收编必须由**用户显式给路径** (`/wallet import <path>`)。
|
|
14
|
+
* · 老的单文件台账 (`~/.bolloon/wallets.json`) 若存在 ⇒ 一次性拆进目录, 原文件改名 `.migrated`
|
|
15
|
+
* (不删: 用户的数据, 出问题能翻回去)。
|
|
16
|
+
*/
|
|
17
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
20
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
21
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
22
|
+
}
|
|
23
|
+
Object.defineProperty(o, k2, desc);
|
|
24
|
+
}) : (function(o, m, k, k2) {
|
|
25
|
+
if (k2 === undefined) k2 = k;
|
|
26
|
+
o[k2] = m[k];
|
|
27
|
+
}));
|
|
28
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
29
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
30
|
+
}) : function(o, v) {
|
|
31
|
+
o["default"] = v;
|
|
32
|
+
});
|
|
33
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
34
|
+
var ownKeys = function(o) {
|
|
35
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
36
|
+
var ar = [];
|
|
37
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
38
|
+
return ar;
|
|
39
|
+
};
|
|
40
|
+
return ownKeys(o);
|
|
41
|
+
};
|
|
42
|
+
return function (mod) {
|
|
43
|
+
if (mod && mod.__esModule) return mod;
|
|
44
|
+
var result = {};
|
|
45
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
46
|
+
__setModuleDefault(result, mod);
|
|
47
|
+
return result;
|
|
48
|
+
};
|
|
49
|
+
})();
|
|
50
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
51
|
+
exports.walletsDir = walletsDir;
|
|
52
|
+
exports.loadWallets = loadWallets;
|
|
53
|
+
exports.addWallet = addWallet;
|
|
54
|
+
exports.pickWallet = pickWallet;
|
|
55
|
+
exports.shortAddr = shortAddr;
|
|
56
|
+
const fs = __importStar(require("fs/promises"));
|
|
57
|
+
const path = __importStar(require("path"));
|
|
58
|
+
/** 一钱包一文件所在目录 */
|
|
59
|
+
function walletsDir() {
|
|
60
|
+
return path.join(process.env.HOME || '/tmp', '.bolloon', 'wallets');
|
|
61
|
+
}
|
|
62
|
+
/** 文件名安全化 (只保留字母数字与 - _ .) */
|
|
63
|
+
function safeName(name, fallback = 'wallet') {
|
|
64
|
+
const s = String(name || '').trim().replace(/[^A-Za-z0-9._-]+/g, '-').replace(/^-+|-+$/g, '');
|
|
65
|
+
return s || fallback;
|
|
66
|
+
}
|
|
67
|
+
async function readOne(file) {
|
|
68
|
+
try {
|
|
69
|
+
const raw = JSON.parse(await fs.readFile(file, 'utf-8'));
|
|
70
|
+
const address = raw?.address;
|
|
71
|
+
if (typeof address !== 'string' || !address.startsWith('0x'))
|
|
72
|
+
return null;
|
|
73
|
+
return {
|
|
74
|
+
name: String(raw?.name || path.basename(file).replace(/\.json$/, '')),
|
|
75
|
+
address,
|
|
76
|
+
network: String(raw?.network || '—'),
|
|
77
|
+
source: raw?.source === 'imported' ? 'imported' : 'created',
|
|
78
|
+
createdAt: String(raw?.createdAt || ''),
|
|
79
|
+
privateKey: typeof raw?.privateKey === 'string' ? raw.privateKey : undefined,
|
|
80
|
+
mnemonic: typeof raw?.mnemonic === 'string' ? raw.mnemonic : undefined,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return null; // 坏文件不挡列表 —— 但下面 loadWallets 会把"读不了的"计数报出去
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/** 老单文件台账拆进目录 (一次性; 原文件改名 .migrated 保留) */
|
|
88
|
+
async function migrateLegacySingleFile(dir) {
|
|
89
|
+
const legacy = path.join(process.env.HOME || '/tmp', '.bolloon', 'wallets.json');
|
|
90
|
+
let raw;
|
|
91
|
+
try {
|
|
92
|
+
raw = JSON.parse(await fs.readFile(legacy, 'utf-8'));
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return 0;
|
|
96
|
+
}
|
|
97
|
+
const list = Array.isArray(raw) ? raw : Array.isArray(raw?.wallets) ? raw.wallets : [];
|
|
98
|
+
let n = 0;
|
|
99
|
+
for (const w of list) {
|
|
100
|
+
if (!w?.address)
|
|
101
|
+
continue;
|
|
102
|
+
const rec = {
|
|
103
|
+
name: safeName(w.name || `wallet-${n + 1}`), address: String(w.address),
|
|
104
|
+
network: String(w.network || '—'), source: w.source === 'imported' ? 'imported' : 'created',
|
|
105
|
+
createdAt: String(w.createdAt || new Date().toISOString()),
|
|
106
|
+
privateKey: typeof w.privateKey === 'string' ? w.privateKey : undefined,
|
|
107
|
+
mnemonic: typeof w.mnemonic === 'string' ? w.mnemonic : undefined,
|
|
108
|
+
};
|
|
109
|
+
await writeWalletFile(dir, rec);
|
|
110
|
+
n++;
|
|
111
|
+
}
|
|
112
|
+
try {
|
|
113
|
+
await fs.rename(legacy, `${legacy}.migrated`);
|
|
114
|
+
}
|
|
115
|
+
catch { /* 改名失败就留着, 下次再试 */ }
|
|
116
|
+
return n;
|
|
117
|
+
}
|
|
118
|
+
async function writeWalletFile(dir, rec) {
|
|
119
|
+
await fs.mkdir(dir, { recursive: true });
|
|
120
|
+
const file = path.join(dir, `${safeName(rec.name)}.json`);
|
|
121
|
+
const tmp = `${file}.tmp`;
|
|
122
|
+
await fs.writeFile(tmp, JSON.stringify(rec, null, 2), { encoding: 'utf-8', mode: 0o600 });
|
|
123
|
+
await fs.rename(tmp, file);
|
|
124
|
+
try {
|
|
125
|
+
await fs.chmod(file, 0o600);
|
|
126
|
+
}
|
|
127
|
+
catch { /* 已足够 */ }
|
|
128
|
+
return file;
|
|
129
|
+
}
|
|
130
|
+
/** 迁移只做一次 (模块级旗标) —— 每次进程首次读台账时试一次 */
|
|
131
|
+
let legacyMigrated = false;
|
|
132
|
+
/** 读全部钱包 (一钱包一文件, 按文件名排序) */
|
|
133
|
+
async function loadWallets() {
|
|
134
|
+
const dir = walletsDir();
|
|
135
|
+
await fs.mkdir(dir, { recursive: true }).catch(() => { });
|
|
136
|
+
// 老单文件台账: 每进程首次读的时候试一次迁移 (旗标防重复; 迁移里自己判断有没有老文件)
|
|
137
|
+
if (!legacyMigrated) {
|
|
138
|
+
legacyMigrated = true;
|
|
139
|
+
const n = await migrateLegacySingleFile(dir);
|
|
140
|
+
if (n > 0) { /* 迁移来的文件就在下面一起读 */ }
|
|
141
|
+
}
|
|
142
|
+
let names = [];
|
|
143
|
+
try {
|
|
144
|
+
names = (await fs.readdir(dir)).filter(n => n.endsWith('.json') && !n.endsWith('.tmp')).sort();
|
|
145
|
+
}
|
|
146
|
+
catch (e) {
|
|
147
|
+
throw new Error(`钱包目录读不了 (${dir}): ${String(e?.message || e).slice(0, 120)}`);
|
|
148
|
+
}
|
|
149
|
+
const out = [];
|
|
150
|
+
for (const n of names) {
|
|
151
|
+
const rec = await readOne(path.join(dir, n));
|
|
152
|
+
if (rec)
|
|
153
|
+
out.push(rec);
|
|
154
|
+
}
|
|
155
|
+
return out;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* 写一个钱包进目录。
|
|
159
|
+
* · 同地址**不新建文件**: 合并进那条 (不覆盖已有私钥/助记词)
|
|
160
|
+
* · 名字撞了就自动加后缀 (-2, -3 …)
|
|
161
|
+
*/
|
|
162
|
+
async function addWallet(rec) {
|
|
163
|
+
const dir = walletsDir();
|
|
164
|
+
const existing = await loadWallets();
|
|
165
|
+
const dup = existing.find(w => w.address.toLowerCase() === rec.address.toLowerCase());
|
|
166
|
+
if (dup) {
|
|
167
|
+
const merged = {
|
|
168
|
+
...rec,
|
|
169
|
+
name: dup.name, // 保留原来的文件名/名字
|
|
170
|
+
privateKey: dup.privateKey || rec.privateKey,
|
|
171
|
+
mnemonic: dup.mnemonic || rec.mnemonic,
|
|
172
|
+
createdAt: dup.createdAt || rec.createdAt,
|
|
173
|
+
};
|
|
174
|
+
const file = await writeWalletFile(dir, merged);
|
|
175
|
+
return { rec: merged, replaced: true, file };
|
|
176
|
+
}
|
|
177
|
+
let name = safeName(rec.name);
|
|
178
|
+
const used = new Set(existing.map(w => w.name));
|
|
179
|
+
for (let i = 2; used.has(name); i++)
|
|
180
|
+
name = `${safeName(rec.name)}-${i}`;
|
|
181
|
+
const out = { ...rec, name };
|
|
182
|
+
const file = await writeWalletFile(dir, out);
|
|
183
|
+
return { rec: out, replaced: false, file };
|
|
184
|
+
}
|
|
185
|
+
/** 按 # / 地址 / 名字挑一个 */
|
|
186
|
+
function pickWallet(list, spec) {
|
|
187
|
+
if (!spec)
|
|
188
|
+
return list[0];
|
|
189
|
+
const n = Number(spec);
|
|
190
|
+
if (Number.isFinite(n) && n >= 1)
|
|
191
|
+
return list[n - 1];
|
|
192
|
+
if (spec.startsWith('0x'))
|
|
193
|
+
return list.find(w => w.address.toLowerCase() === spec.toLowerCase());
|
|
194
|
+
return list.find(w => w.name === spec);
|
|
195
|
+
}
|
|
196
|
+
/** 地址缩写 (单行显示用) */
|
|
197
|
+
function shortAddr(a) {
|
|
198
|
+
return a && a.length > 12 ? `${a.slice(0, 6)}…${a.slice(-4)}` : String(a || '?');
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=wallet-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet-store.js","sourceRoot":"","sources":["../../../src/cli/wallet-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -57,6 +57,8 @@ exports.currentModelFingerprint = currentModelFingerprint;
|
|
|
57
57
|
exports.initPiAI = initPiAI;
|
|
58
58
|
exports.getModel = getModel;
|
|
59
59
|
exports.isModelAvailable = isModelAvailable;
|
|
60
|
+
exports.getLastAiTiming = getLastAiTiming;
|
|
61
|
+
exports.getLastAiUsage = getLastAiUsage;
|
|
60
62
|
exports.getMinimax = getMinimax;
|
|
61
63
|
exports.initMinimax = initMinimax;
|
|
62
64
|
exports.getChatErrorLessons = getChatErrorLessons;
|
|
@@ -982,6 +984,8 @@ class PiAIModel {
|
|
|
982
984
|
const _tAfter = Date.now();
|
|
983
985
|
const promptBytes = JSON.stringify(messages).length;
|
|
984
986
|
console.log(`[pi-ai timing] total=${_tAfter - _t0}ms attempt=${attempt + 1} fetch=${_tResp - _tFetch}ms parse=${_tParse - _tResp}ms reply=${content.length}B toolCalls=${toolCalls?.length ?? 0} model=${this.mapModel()} prompt=${promptBytes}B`);
|
|
987
|
+
lastAiTiming = { bytes: content.length, ms: Math.max(1, _tAfter - _t0), at: _tAfter }; // 状态栏 ↑ t/s 的真数
|
|
988
|
+
lastAiUsage = { cached: usage?.cachedTokens || 0, prompt: usage?.promptTokens || 0, at: _tAfter }; // 状态栏 ◎ 缓存命中率
|
|
985
989
|
retryAgent?.destroy().catch(() => { });
|
|
986
990
|
return { reply: content, toolCalls: toolCalls && toolCalls.length > 0 ? toolCalls : undefined, reasoningContent, usage };
|
|
987
991
|
}
|
|
@@ -1056,6 +1060,8 @@ class PiAIModel {
|
|
|
1056
1060
|
console.log(formatKvServerLine(purpose, usage, { stream: true }));
|
|
1057
1061
|
const toolCalls = acc.filter(Boolean);
|
|
1058
1062
|
console.log(`[pi-ai timing] total=${Date.now() - t0}ms stream reply=${reply.length}B toolCalls=${toolCalls.length}`);
|
|
1063
|
+
lastAiTiming = { bytes: reply.length, ms: Math.max(1, Date.now() - t0), at: Date.now() }; // 状态栏 ↑ t/s 的真数
|
|
1064
|
+
lastAiUsage = { cached: usage?.cachedTokens || 0, prompt: usage?.promptTokens || 0, at: Date.now() }; // 状态栏 ◎ 缓存命中率
|
|
1059
1065
|
return {
|
|
1060
1066
|
reply,
|
|
1061
1067
|
reasoningContent: reasoning || undefined,
|
|
@@ -1512,6 +1518,25 @@ function getModel() {
|
|
|
1512
1518
|
function isModelAvailable() {
|
|
1513
1519
|
return modelInstance !== null;
|
|
1514
1520
|
}
|
|
1521
|
+
/**
|
|
1522
|
+
* 最近一次模型调用的**真实吞吐** (2026-09-30, 状态栏 `↑ ≈N t/s` 用)。
|
|
1523
|
+
*
|
|
1524
|
+
* 为什么不用"猜": 这里就是 pi-ai 自己打 timing 日志的地方 —— `total=<ms>` 与 `reply=<bytes>`
|
|
1525
|
+
* 都是**实测**, 状态栏直接读它 = 真数字 (字节折 token 才标 ≈)。
|
|
1526
|
+
* 注意: 只在**成功的模型调用**后更新; 没有记录时状态栏就不显示 ↑ (不编)。
|
|
1527
|
+
*/
|
|
1528
|
+
let lastAiTiming = null;
|
|
1529
|
+
/** 读最近一次模型调用的吞吐记录 (null = 本进程还没成功调过) */
|
|
1530
|
+
function getLastAiTiming() { return lastAiTiming; }
|
|
1531
|
+
/**
|
|
1532
|
+
* 最近一次模型调用的**用量** (2026-09-30, 状态栏 `◎ 缓存命中率` 用)。
|
|
1533
|
+
* cachedTokens / promptTokens 都来自 provider 的 usage 字段 (OpenAI/DeepSeek:
|
|
1534
|
+
* prompt_tokens_details.cached_tokens; llama.cpp: timings.cache_n) —— 见 extractUsage。
|
|
1535
|
+
* 命中率 = cached / prompt。**只报实测**, 没记录就不显示 (不编)。
|
|
1536
|
+
*/
|
|
1537
|
+
let lastAiUsage = null;
|
|
1538
|
+
/** 读最近一次模型调用的用量记录 (null = 本进程还没有带 usage 的成功调用) */
|
|
1539
|
+
function getLastAiUsage() { return lastAiUsage; }
|
|
1515
1540
|
function getMinimax() {
|
|
1516
1541
|
return getModel();
|
|
1517
1542
|
}
|