@bolloon/bolloon-agent 0.5.4 → 0.5.5

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.
Files changed (126) hide show
  1. package/dist/agents/agent-identity-store.js +41 -5
  2. package/dist/agents/background-notices.js +124 -0
  3. package/dist/agents/channel-identity.js +54 -0
  4. package/dist/agents/code-write-gate.js +47 -0
  5. package/dist/agents/deny-pipeline.js +11 -2
  6. package/dist/agents/egress-sanitize.js +69 -0
  7. package/dist/agents/error-classifier.js +67 -5
  8. package/dist/agents/experience-review.js +226 -0
  9. package/dist/agents/gateway-group.js +153 -18
  10. package/dist/agents/iteration-budget.js +64 -0
  11. package/dist/agents/lesson-to-skill.js +211 -0
  12. package/dist/agents/managed-services.js +64 -0
  13. package/dist/agents/parse-tool-call.js +38 -32
  14. package/dist/agents/pi-sdk-session-manager.js +72 -3
  15. package/dist/agents/pi-sdk-tools.js +201 -32
  16. package/dist/agents/pi-sdk.js +463 -21
  17. package/dist/agents/plan-store.js +36 -0
  18. package/dist/agents/process-runner.js +64 -2
  19. package/dist/agents/shell-guard.js +109 -13
  20. package/dist/agents/skill-health.js +90 -0
  21. package/dist/agents/skill-ledger.js +129 -0
  22. package/dist/agents/tool-loop-guard.js +303 -0
  23. package/dist/agents/tool-path-args.js +53 -0
  24. package/dist/agents/tool-result-gate.js +50 -0
  25. package/dist/agents/tool-subset.js +109 -0
  26. package/dist/agents/tool-telemetry.js +97 -0
  27. package/dist/bootstrap/context-collector.js +37 -7
  28. package/dist/bootstrap/lifecycle-hooks.js +12 -3
  29. package/dist/bootstrap/persona-init.js +174 -0
  30. package/dist/bootstrap/persona-loader.js +5 -1
  31. package/dist/cli/ink-app.js +153 -6
  32. package/dist/cli/input-paste.js +218 -0
  33. package/dist/cli/loading-tui.js +3 -1
  34. package/dist/cli/log-gate.js +7 -0
  35. package/dist/cli/mention-data.js +30 -0
  36. package/dist/cli/reasoning-view.js +103 -0
  37. package/dist/cli/startup-notice.js +25 -0
  38. package/dist/cli/status-segments.js +87 -2
  39. package/dist/cli/trace-line.js +54 -0
  40. package/dist/context-compaction/auto-compact.js +37 -2
  41. package/dist/electron-build/agents/agent-identity-store.js +43 -5
  42. package/dist/electron-build/agents/agent-identity-store.js.map +1 -1
  43. package/dist/electron-build/agents/background-notices.js +138 -0
  44. package/dist/electron-build/agents/background-notices.js.map +1 -0
  45. package/dist/electron-build/agents/channel-identity.js +64 -0
  46. package/dist/electron-build/agents/channel-identity.js.map +1 -0
  47. package/dist/electron-build/agents/code-write-gate.js +55 -0
  48. package/dist/electron-build/agents/code-write-gate.js.map +1 -0
  49. package/dist/electron-build/agents/deny-pipeline.js +11 -2
  50. package/dist/electron-build/agents/deny-pipeline.js.map +1 -1
  51. package/dist/electron-build/agents/egress-sanitize.js +76 -0
  52. package/dist/electron-build/agents/egress-sanitize.js.map +1 -0
  53. package/dist/electron-build/agents/error-classifier.js +68 -5
  54. package/dist/electron-build/agents/error-classifier.js.map +1 -1
  55. package/dist/electron-build/agents/experience-review.js +243 -0
  56. package/dist/electron-build/agents/experience-review.js.map +1 -0
  57. package/dist/electron-build/agents/iteration-budget.js +73 -0
  58. package/dist/electron-build/agents/iteration-budget.js.map +1 -0
  59. package/dist/electron-build/agents/lesson-to-skill.js +228 -0
  60. package/dist/electron-build/agents/lesson-to-skill.js.map +1 -0
  61. package/dist/electron-build/agents/managed-services.js +69 -0
  62. package/dist/electron-build/agents/managed-services.js.map +1 -0
  63. package/dist/electron-build/agents/parse-tool-call.js +38 -32
  64. package/dist/electron-build/agents/parse-tool-call.js.map +1 -1
  65. package/dist/electron-build/agents/pi-sdk-session-manager.js +75 -3
  66. package/dist/electron-build/agents/pi-sdk-session-manager.js.map +1 -1
  67. package/dist/electron-build/agents/pi-sdk-tools.js +200 -31
  68. package/dist/electron-build/agents/pi-sdk-tools.js.map +1 -1
  69. package/dist/electron-build/agents/pi-sdk-types.js.map +1 -1
  70. package/dist/electron-build/agents/pi-sdk.js +464 -21
  71. package/dist/electron-build/agents/pi-sdk.js.map +1 -1
  72. package/dist/electron-build/agents/plan-store.js +37 -0
  73. package/dist/electron-build/agents/plan-store.js.map +1 -1
  74. package/dist/electron-build/agents/process-runner.js +71 -2
  75. package/dist/electron-build/agents/process-runner.js.map +1 -1
  76. package/dist/electron-build/agents/shell-guard.js +110 -14
  77. package/dist/electron-build/agents/shell-guard.js.map +1 -1
  78. package/dist/electron-build/agents/skill-health.js +103 -0
  79. package/dist/electron-build/agents/skill-health.js.map +1 -0
  80. package/dist/electron-build/agents/skill-ledger.js +146 -0
  81. package/dist/electron-build/agents/skill-ledger.js.map +1 -0
  82. package/dist/electron-build/agents/tool-loop-guard.js +319 -0
  83. package/dist/electron-build/agents/tool-loop-guard.js.map +1 -0
  84. package/dist/electron-build/agents/tool-path-args.js +63 -0
  85. package/dist/electron-build/agents/tool-path-args.js.map +1 -0
  86. package/dist/electron-build/agents/tool-result-gate.js +59 -0
  87. package/dist/electron-build/agents/tool-result-gate.js.map +1 -0
  88. package/dist/electron-build/agents/tool-subset.js +116 -0
  89. package/dist/electron-build/agents/tool-subset.js.map +1 -0
  90. package/dist/electron-build/agents/tool-telemetry.js +108 -0
  91. package/dist/electron-build/agents/tool-telemetry.js.map +1 -0
  92. package/dist/electron-build/bootstrap/context-collector.js +38 -7
  93. package/dist/electron-build/bootstrap/context-collector.js.map +1 -1
  94. package/dist/electron-build/bootstrap/lifecycle-hooks.js +12 -3
  95. package/dist/electron-build/bootstrap/lifecycle-hooks.js.map +1 -1
  96. package/dist/electron-build/bootstrap/persona-init.js +216 -0
  97. package/dist/electron-build/bootstrap/persona-init.js.map +1 -0
  98. package/dist/electron-build/bootstrap/persona-loader.js +5 -1
  99. package/dist/electron-build/bootstrap/persona-loader.js.map +1 -1
  100. package/dist/electron-build/context-compaction/auto-compact.js +38 -2
  101. package/dist/electron-build/context-compaction/auto-compact.js.map +1 -1
  102. package/dist/electron-build/external-engines/delegate.js +22 -0
  103. package/dist/electron-build/external-engines/delegate.js.map +1 -1
  104. package/dist/electron-build/orbitdb/cid-database.js +55 -0
  105. package/dist/electron-build/orbitdb/cid-database.js.map +1 -1
  106. package/dist/electron-build/orbitdb/ipfs-node.js +36 -11
  107. package/dist/electron-build/orbitdb/ipfs-node.js.map +1 -1
  108. package/dist/electron-build/web/server-storage.js +26 -5
  109. package/dist/electron-build/web/server-storage.js.map +1 -1
  110. package/dist/external-engines/delegate.js +21 -0
  111. package/dist/index.js +503 -77
  112. package/dist/orbitdb/cid-database.js +55 -0
  113. package/dist/orbitdb/event-index.js +370 -0
  114. package/dist/orbitdb/event-query.js +131 -0
  115. package/dist/orbitdb/event-shell.js +510 -0
  116. package/dist/orbitdb/group-access.js +381 -0
  117. package/dist/orbitdb/group-shards.js +140 -0
  118. package/dist/orbitdb/ipfs-node.js +36 -11
  119. package/dist/web/bolloon-web.json +3 -3
  120. package/dist/web/client.js +3 -2
  121. package/dist/web/mobile-core.js +7762 -6289
  122. package/dist/web/routes-mobile-tasks.js +2 -1
  123. package/dist/web/server-storage.js +26 -5
  124. package/dist/web/server.js +2 -0
  125. package/dist/web/sw.js +1 -1
  126. package/package.json +2 -1
@@ -167,7 +167,8 @@ export function registerMobileTaskRoutes(app, opts = {}) {
167
167
  if (kind === 'group_create' || kind === 'group_join' || kind === 'group_leave') {
168
168
  const { createGroup, joinGroup, leaveGroup } = await import('../agents/gateway-group.js');
169
169
  if (kind === 'group_create') {
170
- const r = await createGroup(String(request.groupRef || '').trim());
170
+ // 手机端建群与 Web 端同一语义 (微信式群聊) ⇒ 显式声明开放写入
171
+ const r = await createGroup(String(request.groupRef || '').trim(), { acl: 'open' });
171
172
  if (!r.ok || !r.group)
172
173
  return fail(res, 409, 'GROUP_CREATE_FAILED', `建群失败: ${r.error || '未知原因'}`);
173
174
  return res.json({ ok: true, kind, group: { id: r.group.id, name: r.group.name }, text: `已建群「${r.group.name}」` });
@@ -11,6 +11,8 @@
11
11
  * Channel / Session / Task / SessionMessage / SessionSummary type 来自 ./server-types.ts.
12
12
  */
13
13
  import * as fs from 'fs/promises';
14
+ import * as path from 'path';
15
+ import { channelsPaths, assertTestWriteTarget } from '../agents/agent-identity-store.js';
14
16
  import { CHANNELS_PATH, SESSION_CACHE_PATH, TASK_QUEUE_PATH, THEME_PATH, } from './server-types.js';
15
17
  import { saveWindow as saveSessionWindow, loadWindow as loadSessionWindow } from '../bootstrap/session-window.js';
16
18
  import { parentsSatisfied } from './task-deps.js';
@@ -42,7 +44,7 @@ export async function updateChannels(fn) {
42
44
  }
43
45
  async function rawLoadChannels() {
44
46
  try {
45
- const data = await fs.readFile(CHANNELS_PATH, 'utf-8');
47
+ const data = await fs.readFile(channelsPathNow(), 'utf-8');
46
48
  return JSON.parse(data);
47
49
  }
48
50
  catch (readErr) {
@@ -50,11 +52,11 @@ async function rawLoadChannels() {
50
52
  if (readErr?.code !== 'ENOENT') {
51
53
  console.warn('[loadChannels] channels.json 解析失败, 尝试从 .tmp 恢复:', readErr?.message?.slice(0, 80));
52
54
  try {
53
- const tmpData = await fs.readFile(CHANNELS_PATH + '.tmp', 'utf-8');
55
+ const tmpData = await fs.readFile(channelsPathNow() + '.tmp', 'utf-8');
54
56
  const recovered = JSON.parse(tmpData);
55
57
  console.log(`[loadChannels] 从 .tmp 恢复成功: ${recovered.length} 个 channel`);
56
58
  // 立即把恢复的内容写回主文件
57
- await fs.writeFile(CHANNELS_PATH, tmpData, 'utf-8');
59
+ await fs.writeFile(channelsPathNow(), tmpData, 'utf-8');
58
60
  return recovered;
59
61
  }
60
62
  catch (tmpErr) {
@@ -64,6 +66,22 @@ async function rawLoadChannels() {
64
66
  return [];
65
67
  }
66
68
  }
69
+ /**
70
+ * channels.json 的路径**每次调用时**解析 (2026-10-01, 数据事故修复)。
71
+ *
72
+ * 事故: `server-types.CHANNELS_PATH` 是 import 时定死的常量 (按那一刻的 HOME 解析),
73
+ * 于是测试里后设的 process.env.HOME **完全不起作用** ⇒ 测试夹具把用户的真实
74
+ * ~/.bolloon/sessions/channels.json 整表覆盖 (4 个智能体只剩 1 条)。
75
+ * 现在改成按**当前** HOME 解析 (与 CLI 侧 agent-identity-store.channelsPaths 同一口径)。
76
+ */
77
+ function channelsPathNow() {
78
+ try {
79
+ return channelsPaths()[0];
80
+ }
81
+ catch {
82
+ return CHANNELS_PATH;
83
+ }
84
+ }
67
85
  async function rawSaveChannels(channels) {
68
86
  const sanitized = channels.map(ch => {
69
87
  const { didDocument: _omit, ...rest } = ch;
@@ -75,9 +93,12 @@ async function rawSaveChannels(channels) {
75
93
  lastChannelsJson = jsonStr;
76
94
  console.log('[saveChannels] 保存频道数据, 数量:', sanitized.length);
77
95
  // 2026-07-24: 原子写入 — 先写 .tmp 再 rename, 防止崩溃导致 channels.json 损坏
78
- const tmpPath = CHANNELS_PATH + '.tmp';
96
+ const target = channelsPathNow();
97
+ // 测试进程只允许写临时目录 —— 真实数据目录一律拒绝 (第二道闸)
98
+ assertTestWriteTarget(path.dirname(path.dirname(target)), 'channels.json');
99
+ const tmpPath = target + '.tmp';
79
100
  await fs.writeFile(tmpPath, jsonStr, 'utf-8');
80
- await fs.rename(tmpPath, CHANNELS_PATH);
101
+ await fs.rename(tmpPath, target);
81
102
  lastChannelsWriteAt = Date.now();
82
103
  }
83
104
  export async function loadChannels() {
@@ -4034,6 +4034,8 @@ fetchState();
4034
4034
  const r = await createGroup(String(req.body?.name || '').trim(), {
4035
4035
  from: String(req.body?.from || '').trim() || undefined,
4036
4036
  hello: req.body?.hello ? String(req.body.hello) : undefined,
4037
+ // 微信式群聊: 拿到邀请链接的人都能发言 ⇒ 显式声明 (2026-10-01 起不再是隐式默认)
4038
+ acl: 'open',
4037
4039
  });
4038
4040
  if (!r.ok)
4039
4041
  return res.status(400).json({ error: r.error });
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.4';
9
+ const CACHE = 'bolloon-mobile-v0.5.5';
10
10
  const SHELL = [
11
11
  './mobile.html',
12
12
  './mobile.css',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bolloon/bolloon-agent",
3
- "version": "0.5.4",
3
+ "version": "0.5.5",
4
4
  "type": "module",
5
5
  "description": "P2P AI Document Agent - 全局安装后执行 `bolloon` 启动产品",
6
6
  "main": "dist/cli-entry.js",
@@ -71,6 +71,7 @@
71
71
  "@chainsafe/libp2p-noise": "^17.0.0",
72
72
  "@chainsafe/libp2p-yamux": "^8.0.1",
73
73
  "@diap/sdk": "^0.2.7",
74
+ "@helia/bitswap": "^4.0.20",
74
75
  "@ipld/dag-cbor": "^9.2.7",
75
76
  "@libp2p/autonat": "^3.0.28",
76
77
  "@libp2p/circuit-relay-v2": "^4.2.13",