@bolloon/bolloon-agent 0.5.1 → 0.5.2
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/README.md +39 -0
- package/dist/agents/agent-lang.js +101 -0
- package/dist/agents/agent-manifest-protocol.js +4 -0
- package/dist/agents/gateway-group.js +44 -3
- package/dist/agents/pi-sdk.js +101 -8
- package/dist/agents/workflow-pivot-loop.js +3 -1
- package/dist/efficode/compress.js +78 -0
- package/dist/efficode/crc32.js +38 -0
- package/dist/efficode/did.js +66 -0
- package/dist/efficode/index.js +24 -0
- package/dist/efficode/lz77.js +170 -0
- package/dist/efficode/negotiate.js +187 -0
- package/dist/efficode/ops.js +87 -0
- package/dist/efficode/packet.js +271 -0
- package/dist/efficode/types.js +45 -0
- package/dist/electron-build/agents/agent-manifest-protocol.js +4 -0
- package/dist/electron-build/agents/agent-manifest-protocol.js.map +1 -1
- package/dist/electron-build/agents/pi-sdk.js +102 -8
- package/dist/electron-build/agents/pi-sdk.js.map +1 -1
- package/dist/electron-build/agents/workflow-pivot-loop.js +3 -1
- package/dist/electron-build/agents/workflow-pivot-loop.js.map +1 -1
- package/dist/electron-build/llm/pi-ai.js +685 -48
- package/dist/electron-build/llm/pi-ai.js.map +1 -1
- package/dist/llm/pi-ai.js +666 -47
- package/dist/web/bolloon-web.json +3 -3
- package/dist/web/mobile.js +64 -0
- package/dist/web/sw.js +1 -1
- package/package.json +1 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": "bolloon-mobile-web/1",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.2",
|
|
4
4
|
"channel": "stable",
|
|
5
5
|
"build": "stable",
|
|
6
|
-
"commit": "
|
|
7
|
-
"builtAt": "2026-09-
|
|
6
|
+
"commit": "0f98f0fc9bbcd60f04105402a5163b85c58bc785",
|
|
7
|
+
"builtAt": "2026-09-28T08:27:37.768Z",
|
|
8
8
|
"layer": "web",
|
|
9
9
|
"note": "web 资源层构建戳 (手机端 OTA 的身份第 ③ 级回退; 装机后以 OTA state.json 为准)"
|
|
10
10
|
}
|
package/dist/web/mobile.js
CHANGED
|
@@ -225,6 +225,68 @@
|
|
|
225
225
|
}
|
|
226
226
|
}
|
|
227
227
|
|
|
228
|
+
// ── Efficode 条目 (内置参考实现: 仓内 src/efficode/**, 不靠"从电脑端同步") ──────
|
|
229
|
+
// 纪律: 这段**不用 innerHTML 拼任何数据** (纯 createElement + textContent) ·
|
|
230
|
+
// 双语走 data-zh/data-en (切语言时外面那段 applyLang 会一起改文字节点) ·
|
|
231
|
+
// role=button + tabindex + aria-label + Enter/Space 可达 · 无外部依赖。
|
|
232
|
+
const EFFICODE_SPEC_PATH = 'docs/wiki/efficode.md';
|
|
233
|
+
const EFFICODE_IMPL_PATH = 'src/efficode/** · src/agents/agent-lang.ts';
|
|
234
|
+
const EFFICODE_GATE = 'scripts/verify-efficode.ts (55/0)';
|
|
235
|
+
function effiLangNow() {
|
|
236
|
+
try { return localStorage.getItem('bolloon_lang') === 'en' ? 'en' : 'zh'; } catch (e) { return 'zh'; }
|
|
237
|
+
}
|
|
238
|
+
function buildEfficodeEntry() {
|
|
239
|
+
const el = document.createElement('div');
|
|
240
|
+
el.className = 'conv-item';
|
|
241
|
+
el.id = 'item-efficode';
|
|
242
|
+
el.setAttribute('role', 'button');
|
|
243
|
+
el.setAttribute('tabindex', '0');
|
|
244
|
+
el.setAttribute('aria-label', 'Efficode 规范页 (中文): ' + EFFICODE_SPEC_PATH);
|
|
245
|
+
const avatar = document.createElement('div');
|
|
246
|
+
avatar.className = 'conv-avatar';
|
|
247
|
+
avatar.textContent = 'E';
|
|
248
|
+
const body = document.createElement('div');
|
|
249
|
+
body.className = 'conv-body';
|
|
250
|
+
const name = document.createElement('div');
|
|
251
|
+
name.className = 'conv-name';
|
|
252
|
+
name.textContent = '/efficode';
|
|
253
|
+
const desc = document.createElement('div');
|
|
254
|
+
desc.className = 'conv-preview';
|
|
255
|
+
desc.setAttribute('data-zh', '智能体间的符号化交流语言 · 参考实现 (签名/声波未实现) — 点开看规范页 docs/wiki/efficode.md');
|
|
256
|
+
desc.setAttribute('data-en', 'Symbolic agent-to-agent language · reference impl (signing/audio not implemented) — tap for docs/wiki/efficode.md');
|
|
257
|
+
desc.textContent = effiLangNow() === 'en' ? desc.getAttribute('data-en') : desc.getAttribute('data-zh');
|
|
258
|
+
body.appendChild(name);
|
|
259
|
+
body.appendChild(desc);
|
|
260
|
+
el.appendChild(avatar);
|
|
261
|
+
el.appendChild(body);
|
|
262
|
+
const open = () => alert(
|
|
263
|
+
'/efficode\n\n' +
|
|
264
|
+
(effiLangNow() === 'en'
|
|
265
|
+
? 'Symbolic binary language between agents (Efficient + Code). Reference implementation in this repo; negotiation falls back to natural language unless both sides declare efficode. Signing / ECC session keys / sound-wave mode are NOT implemented.\n\n'
|
|
266
|
+
: '智能体之间的符号化二进制交流语言 (Efficient + Code)。本仓有参考实现; 只有双方都声明 efficode 才用, 否则明确回落自然语言。签名验证 / ECC 临时会话密钥 / 声波模式尚未实现。\n\n') +
|
|
267
|
+
'规范页: ' + EFFICODE_SPEC_PATH + '\n' +
|
|
268
|
+
'实现: ' + EFFICODE_IMPL_PATH + '\n' +
|
|
269
|
+
'验收门: ' + EFFICODE_GATE
|
|
270
|
+
);
|
|
271
|
+
el.addEventListener('click', open);
|
|
272
|
+
el.addEventListener('keydown', (ev) => {
|
|
273
|
+
if (ev.key === 'Enter' || ev.key === ' ' || ev.key === 'Spacebar') { ev.preventDefault(); open(); }
|
|
274
|
+
});
|
|
275
|
+
return el;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/** 把内置 Efficode 条目追加到 Skills 页 (空态 / 有列表都显示 —— 它是仓内参考实现) */
|
|
279
|
+
function appendEfficodeBlock(body) {
|
|
280
|
+
if (!body || body.querySelector('#item-efficode')) return;
|
|
281
|
+
const cap = document.createElement('div');
|
|
282
|
+
cap.style.cssText = 'font-size:11px;color:var(--text-muted);margin:14px 0 6px';
|
|
283
|
+
cap.setAttribute('data-zh', '内置 (随客户端发布, 不来自电脑端同步)');
|
|
284
|
+
cap.setAttribute('data-en', 'Built in (ships with the client, not synced from desktop)');
|
|
285
|
+
cap.textContent = effiLangNow() === 'en' ? cap.getAttribute('data-en') : cap.getAttribute('data-zh');
|
|
286
|
+
body.appendChild(cap);
|
|
287
|
+
body.appendChild(buildEfficodeEntry());
|
|
288
|
+
}
|
|
289
|
+
|
|
228
290
|
async function openSkillsPage() {
|
|
229
291
|
if ($('#skills-page')) return;
|
|
230
292
|
const page = mkOverlayPage('skills-page', 'Skills', '<div style="font-size:12px;color:var(--text-muted)">读取中…</div>');
|
|
@@ -241,6 +303,7 @@
|
|
|
241
303
|
body.innerHTML = `<div style="padding:18px 8px;text-align:center;color:var(--text-muted);line-height:1.8">
|
|
242
304
|
还没有技能列表<br><span style="font-size:12px">电脑端 ~/.bolloon/skills/ 下的 skills,会在「从电脑端同步」后出现在这里</span>
|
|
243
305
|
${err ? `<div style="font-size:11px;margin-top:8px">(读取失败:${escapeHtml(err)})</div>` : ''}</div>`;
|
|
306
|
+
appendEfficodeBlock(body);
|
|
244
307
|
return;
|
|
245
308
|
}
|
|
246
309
|
body.innerHTML = skills.map((s, i) => `<div class="conv-item" data-sk="${i}">
|
|
@@ -252,6 +315,7 @@
|
|
|
252
315
|
const s = skills[Number(el.dataset.sk)] || {};
|
|
253
316
|
alert(`/${s.name || ''}\n\n${s.description || '(无说明)'}`);
|
|
254
317
|
}));
|
|
318
|
+
appendEfficodeBlock(body);
|
|
255
319
|
};
|
|
256
320
|
await render();
|
|
257
321
|
const btn = page.querySelector('#skills-sync');
|
package/dist/web/sw.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* 现在: 代码类资源 (html/js/css/json) 一律 **network-first** (拿不到网才回退缓存),
|
|
7
7
|
* 缓存名带版本号, activate 时清掉所有旧缓存; 图标等静态资源仍 cache-first。
|
|
8
8
|
*/
|
|
9
|
-
const CACHE = 'bolloon-mobile-v0.5.
|
|
9
|
+
const CACHE = 'bolloon-mobile-v0.5.2';
|
|
10
10
|
const SHELL = [
|
|
11
11
|
'./mobile.html',
|
|
12
12
|
'./mobile.css',
|