@bolloon/bolloon-agent 0.5.4 → 0.6.0
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/agent-identity-store.js +41 -5
- package/dist/agents/background-notices.js +124 -0
- package/dist/agents/channel-identity.js +54 -0
- package/dist/agents/code-write-gate.js +47 -0
- package/dist/agents/deny-pipeline.js +11 -2
- package/dist/agents/egress-sanitize.js +69 -0
- package/dist/agents/error-classifier.js +67 -5
- package/dist/agents/experience-review.js +226 -0
- package/dist/agents/gateway-group.js +153 -18
- package/dist/agents/iteration-budget.js +64 -0
- package/dist/agents/lesson-to-skill.js +211 -0
- package/dist/agents/managed-services.js +64 -0
- package/dist/agents/parse-tool-call.js +43 -32
- package/dist/agents/pi-sdk-session-factory.js +36 -3
- package/dist/agents/pi-sdk-session-manager.js +72 -3
- package/dist/agents/pi-sdk-tools.js +201 -32
- package/dist/agents/pi-sdk.js +798 -206
- package/dist/agents/plan-store.js +36 -0
- package/dist/agents/process-runner.js +64 -2
- package/dist/agents/run-context.js +20 -0
- package/dist/agents/runner-resolver.js +2 -1
- package/dist/agents/shell-guard.js +109 -13
- package/dist/agents/skill-health.js +90 -0
- package/dist/agents/skill-ledger.js +129 -0
- package/dist/agents/tool-loop-guard.js +303 -0
- package/dist/agents/tool-path-args.js +53 -0
- package/dist/agents/tool-result-gate.js +50 -0
- package/dist/agents/tool-subset.js +109 -0
- package/dist/agents/tool-telemetry.js +97 -0
- package/dist/bootstrap/context-collector.js +37 -7
- package/dist/bootstrap/lifecycle-hooks.js +12 -3
- package/dist/bootstrap/persona-init.js +174 -0
- package/dist/bootstrap/persona-loader.js +5 -1
- package/dist/cli/ink-app.js +153 -6
- package/dist/cli/input-paste.js +218 -0
- package/dist/cli/loading-tui.js +3 -1
- package/dist/cli/log-gate.js +7 -0
- package/dist/cli/mention-data.js +30 -0
- package/dist/cli/reasoning-view.js +103 -0
- package/dist/cli/startup-notice.js +25 -0
- package/dist/cli/status-segments.js +87 -2
- package/dist/cli/trace-line.js +54 -0
- package/dist/context-compaction/auto-compact.js +37 -2
- package/dist/electron-build/agents/agent-identity-store.js +43 -5
- package/dist/electron-build/agents/agent-identity-store.js.map +1 -1
- package/dist/electron-build/agents/background-notices.js +138 -0
- package/dist/electron-build/agents/background-notices.js.map +1 -0
- package/dist/electron-build/agents/channel-identity.js +64 -0
- package/dist/electron-build/agents/channel-identity.js.map +1 -0
- package/dist/electron-build/agents/code-write-gate.js +55 -0
- package/dist/electron-build/agents/code-write-gate.js.map +1 -0
- package/dist/electron-build/agents/deny-pipeline.js +11 -2
- package/dist/electron-build/agents/deny-pipeline.js.map +1 -1
- package/dist/electron-build/agents/egress-sanitize.js +76 -0
- package/dist/electron-build/agents/egress-sanitize.js.map +1 -0
- package/dist/electron-build/agents/error-classifier.js +68 -5
- package/dist/electron-build/agents/error-classifier.js.map +1 -1
- package/dist/electron-build/agents/experience-review.js +243 -0
- package/dist/electron-build/agents/experience-review.js.map +1 -0
- package/dist/electron-build/agents/iteration-budget.js +73 -0
- package/dist/electron-build/agents/iteration-budget.js.map +1 -0
- package/dist/electron-build/agents/lesson-to-skill.js +228 -0
- package/dist/electron-build/agents/lesson-to-skill.js.map +1 -0
- package/dist/electron-build/agents/managed-services.js +69 -0
- package/dist/electron-build/agents/managed-services.js.map +1 -0
- package/dist/electron-build/agents/parse-tool-call.js +43 -32
- package/dist/electron-build/agents/parse-tool-call.js.map +1 -1
- package/dist/electron-build/agents/pi-sdk-session-factory.js +36 -3
- package/dist/electron-build/agents/pi-sdk-session-factory.js.map +1 -1
- package/dist/electron-build/agents/pi-sdk-session-manager.js +75 -3
- package/dist/electron-build/agents/pi-sdk-session-manager.js.map +1 -1
- package/dist/electron-build/agents/pi-sdk-tools.js +200 -31
- package/dist/electron-build/agents/pi-sdk-tools.js.map +1 -1
- package/dist/electron-build/agents/pi-sdk-types.js.map +1 -1
- package/dist/electron-build/agents/pi-sdk.js +799 -206
- package/dist/electron-build/agents/pi-sdk.js.map +1 -1
- package/dist/electron-build/agents/plan-store.js +37 -0
- package/dist/electron-build/agents/plan-store.js.map +1 -1
- package/dist/electron-build/agents/process-runner.js +71 -2
- package/dist/electron-build/agents/process-runner.js.map +1 -1
- package/dist/electron-build/agents/run-context.js +24 -0
- package/dist/electron-build/agents/run-context.js.map +1 -0
- package/dist/electron-build/agents/runner-resolver.js +2 -1
- package/dist/electron-build/agents/runner-resolver.js.map +1 -1
- package/dist/electron-build/agents/shell-guard.js +110 -14
- package/dist/electron-build/agents/shell-guard.js.map +1 -1
- package/dist/electron-build/agents/skill-health.js +103 -0
- package/dist/electron-build/agents/skill-health.js.map +1 -0
- package/dist/electron-build/agents/skill-ledger.js +146 -0
- package/dist/electron-build/agents/skill-ledger.js.map +1 -0
- package/dist/electron-build/agents/tool-loop-guard.js +319 -0
- package/dist/electron-build/agents/tool-loop-guard.js.map +1 -0
- package/dist/electron-build/agents/tool-path-args.js +63 -0
- package/dist/electron-build/agents/tool-path-args.js.map +1 -0
- package/dist/electron-build/agents/tool-result-gate.js +59 -0
- package/dist/electron-build/agents/tool-result-gate.js.map +1 -0
- package/dist/electron-build/agents/tool-subset.js +116 -0
- package/dist/electron-build/agents/tool-subset.js.map +1 -0
- package/dist/electron-build/agents/tool-telemetry.js +108 -0
- package/dist/electron-build/agents/tool-telemetry.js.map +1 -0
- package/dist/electron-build/bootstrap/context-collector.js +38 -7
- package/dist/electron-build/bootstrap/context-collector.js.map +1 -1
- package/dist/electron-build/bootstrap/lifecycle-hooks.js +12 -3
- package/dist/electron-build/bootstrap/lifecycle-hooks.js.map +1 -1
- package/dist/electron-build/bootstrap/persona-init.js +216 -0
- package/dist/electron-build/bootstrap/persona-init.js.map +1 -0
- package/dist/electron-build/bootstrap/persona-loader.js +5 -1
- package/dist/electron-build/bootstrap/persona-loader.js.map +1 -1
- package/dist/electron-build/context-compaction/auto-compact.js +38 -2
- package/dist/electron-build/context-compaction/auto-compact.js.map +1 -1
- package/dist/electron-build/external-engines/delegate.js +22 -0
- package/dist/electron-build/external-engines/delegate.js.map +1 -1
- package/dist/electron-build/kernel/channel-actor.js +314 -0
- package/dist/electron-build/kernel/channel-actor.js.map +1 -0
- package/dist/electron-build/orbitdb/cid-database.js +55 -0
- package/dist/electron-build/orbitdb/cid-database.js.map +1 -1
- package/dist/electron-build/orbitdb/ipfs-node.js +36 -11
- package/dist/electron-build/orbitdb/ipfs-node.js.map +1 -1
- package/dist/electron-build/web/server-storage.js +26 -5
- package/dist/electron-build/web/server-storage.js.map +1 -1
- package/dist/external-engines/delegate.js +21 -0
- package/dist/index.js +526 -95
- package/dist/kernel/channel-actor.js +297 -0
- package/dist/kernel/control.js +95 -0
- package/dist/kernel/gate-scan.js +1036 -0
- package/dist/kernel/model-runtime.js +472 -0
- package/dist/kernel/plan-channel-actor.js +298 -0
- package/dist/kernel/plan-constraint.js +165 -0
- package/dist/kernel/plan-deletion.js +32 -0
- package/dist/kernel/plan-modelruntime.js +60 -0
- package/dist/kernel/plan-runcontext.js +163 -0
- package/dist/kernel/plan.js +153 -0
- package/dist/kernel/roster.js +242 -0
- package/dist/orbitdb/cid-database.js +55 -0
- package/dist/orbitdb/event-index.js +370 -0
- package/dist/orbitdb/event-query.js +131 -0
- package/dist/orbitdb/event-shell.js +510 -0
- package/dist/orbitdb/group-access.js +381 -0
- package/dist/orbitdb/group-shards.js +140 -0
- package/dist/orbitdb/ipfs-node.js +36 -11
- package/dist/web/bolloon-web.json +3 -3
- package/dist/web/client.js +4 -2
- package/dist/web/mobile-core.js +7762 -6289
- package/dist/web/routes-mobile-tasks.js +2 -1
- package/dist/web/routes-tasks.js +5 -1
- package/dist/web/server-storage.js +26 -5
- package/dist/web/server.js +60 -18
- package/dist/web/sw.js +1 -1
- package/dist/web/ui/message-renderer.js +473 -29
- package/dist/web/ui/step-timeline.js +13 -12
- package/package.json +2 -1
- package/scripts/build-web.ts +74 -1
- package/dist/constraint-runtime/_archive_helper.d.ts +0 -1
- package/dist/constraint-runtime/_archive_helper.js +0 -9
- package/dist/constraint-runtime/assistant/index.d.ts +0 -11
- package/dist/constraint-runtime/assistant/index.js +0 -12
- package/dist/constraint-runtime/bootstrap/index.d.ts +0 -11
- package/dist/constraint-runtime/bootstrap/index.js +0 -12
- package/dist/constraint-runtime/bridge/index.d.ts +0 -11
- package/dist/constraint-runtime/bridge/index.js +0 -12
- package/dist/constraint-runtime/buddy/index.d.ts +0 -11
- package/dist/constraint-runtime/buddy/index.js +0 -12
- package/dist/constraint-runtime/cli/index.d.ts +0 -11
- package/dist/constraint-runtime/cli/index.js +0 -12
- package/dist/constraint-runtime/components/index.d.ts +0 -11
- package/dist/constraint-runtime/components/index.js +0 -12
- package/dist/constraint-runtime/constants/index.d.ts +0 -11
- package/dist/constraint-runtime/constants/index.js +0 -12
- package/dist/constraint-runtime/coordinator/index.d.ts +0 -11
- package/dist/constraint-runtime/coordinator/index.js +0 -12
- package/dist/constraint-runtime/cost_hook.d.ts +0 -2
- package/dist/constraint-runtime/cost_hook.js +0 -4
- package/dist/constraint-runtime/entrypoints/index.d.ts +0 -11
- package/dist/constraint-runtime/entrypoints/index.js +0 -12
- package/dist/constraint-runtime/execution_registry.d.ts +0 -20
- package/dist/constraint-runtime/execution_registry.js +0 -44
- package/dist/constraint-runtime/hooks/index.d.ts +0 -11
- package/dist/constraint-runtime/hooks/index.js +0 -12
- package/dist/constraint-runtime/ink.d.ts +0 -1
- package/dist/constraint-runtime/ink.js +0 -4
- package/dist/constraint-runtime/keybindings/index.d.ts +0 -11
- package/dist/constraint-runtime/keybindings/index.js +0 -12
- package/dist/constraint-runtime/memdir/index.d.ts +0 -11
- package/dist/constraint-runtime/memdir/index.js +0 -12
- package/dist/constraint-runtime/migrations/index.d.ts +0 -11
- package/dist/constraint-runtime/migrations/index.js +0 -12
- package/dist/constraint-runtime/moreright/index.d.ts +0 -11
- package/dist/constraint-runtime/moreright/index.js +0 -12
- package/dist/constraint-runtime/native_ts/index.d.ts +0 -11
- package/dist/constraint-runtime/native_ts/index.js +0 -12
- package/dist/constraint-runtime/output_styles/index.d.ts +0 -11
- package/dist/constraint-runtime/output_styles/index.js +0 -12
- package/dist/constraint-runtime/plugins/index.d.ts +0 -11
- package/dist/constraint-runtime/plugins/index.js +0 -12
- package/dist/constraint-runtime/port_manifest.d.ts +0 -7
- package/dist/constraint-runtime/port_manifest.js +0 -11
- package/dist/constraint-runtime/query.d.ts +0 -6
- package/dist/constraint-runtime/query.js +0 -1
- package/dist/constraint-runtime/remote/index.d.ts +0 -11
- package/dist/constraint-runtime/remote/index.js +0 -12
- package/dist/constraint-runtime/schemas/index.d.ts +0 -11
- package/dist/constraint-runtime/schemas/index.js +0 -12
- package/dist/constraint-runtime/screens/index.d.ts +0 -11
- package/dist/constraint-runtime/screens/index.js +0 -12
- package/dist/constraint-runtime/server/index.d.ts +0 -11
- package/dist/constraint-runtime/server/index.js +0 -12
- package/dist/constraint-runtime/services/index.d.ts +0 -11
- package/dist/constraint-runtime/services/index.js +0 -12
- package/dist/constraint-runtime/state/index.d.ts +0 -11
- package/dist/constraint-runtime/state/index.js +0 -12
- package/dist/constraint-runtime/system_init.d.ts +0 -1
- package/dist/constraint-runtime/system_init.js +0 -20
- package/dist/constraint-runtime/types/index.d.ts +0 -11
- package/dist/constraint-runtime/types/index.js +0 -12
- package/dist/constraint-runtime/upstream_proxy/index.d.ts +0 -11
- package/dist/constraint-runtime/upstream_proxy/index.js +0 -12
- package/dist/constraint-runtime/utils/index.d.ts +0 -11
- package/dist/constraint-runtime/utils/index.js +0 -12
- package/dist/constraint-runtime/vim/index.d.ts +0 -11
- package/dist/constraint-runtime/vim/index.js +0 -12
- package/dist/constraint-runtime/voice/index.d.ts +0 -11
- package/dist/constraint-runtime/voice/index.js +0 -12
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* **Channel Actor** (K5 第 2 步: 容器)
|
|
4
|
+
*
|
|
5
|
+
* 为什么需要它: `messageHistory` / `currentChannelId` / `currentAgentId` / `currentGoalId` 四个字段
|
|
6
|
+
* 在 Pi 实例上被**所有入口共享** —— 这正是"多通道串台 / 同 Channel 并发改 history"的根。
|
|
7
|
+
* K2 已按 leo 口径判定它们**不是 Run 状态**, 该由 Channel Actor 承载 (见 `plan-channel-actor.ts`)。
|
|
8
|
+
*
|
|
9
|
+
* 本文件是**纯新增的容器**: 不改任何现有行为 (Pi 仍按原样跑)。它提供三件事:
|
|
10
|
+
* ① `ActorState` —— Actor 状态容器 (9 项, 与台账逐条对应);
|
|
11
|
+
* ② `SerialMailbox` —— 同 Channel **串行**执行队列 (1 个 channel 同时只有 1 个任务在跑);
|
|
12
|
+
* ③ `ChannelActor` —— 把两者绑起来: `submit()` 入队并串行执行 · `abort()` 取消当前任务。
|
|
13
|
+
*
|
|
14
|
+
* 纪律: 串行语义**真跑验证** (`src/test/kernel-channel-actor.test.ts` 的串行用例), 不靠"看起来对"。
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.ChannelActor = exports.SerialMailbox = void 0;
|
|
18
|
+
exports.currentActorContext = currentActorContext;
|
|
19
|
+
exports.createActorState = createActorState;
|
|
20
|
+
exports.getOrCreateActor = getOrCreateActor;
|
|
21
|
+
exports.peekActor = peekActor;
|
|
22
|
+
exports.actorCount = actorCount;
|
|
23
|
+
exports.resetActors = resetActors;
|
|
24
|
+
exports.deliverThroughActor = deliverThroughActor;
|
|
25
|
+
exports.getChannelQueue = getChannelQueue;
|
|
26
|
+
exports.channelQueueCount = channelQueueCount;
|
|
27
|
+
exports.createPrivateActor = createPrivateActor;
|
|
28
|
+
exports.privateActorCount = privateActorCount;
|
|
29
|
+
/** Actor 状态容器 —— 与 `ACTOR_STATE_ITEMS` 的 9 项一一对应 */
|
|
30
|
+
const node_async_hooks_1 = require("node:async_hooks");
|
|
31
|
+
/**
|
|
32
|
+
* **当前正在哪个 Actor 的 mailbox 任务里跑** (K5 第 5 步的前置安全网)。
|
|
33
|
+
*
|
|
34
|
+
* 为什么必须有: `SerialMailbox` 是**无重入**的 —— 一个已在 mailbox 里跑的任务若再往同一个 mailbox
|
|
35
|
+
* 投递并 await, 就是**自锁** (新任务排在"自己"后面)。入口投递 (步骤④) 一旦覆盖到"运行中会被调用"
|
|
36
|
+
* 的执行点 (LLM 回调 / judge / 工具内再问一次), 就会踩到这条。
|
|
37
|
+
* ⇒ 用 ALS 记住"我在谁的上下文里", 同 actor 重入时**直跑**, 不同 actor 照常排队。
|
|
38
|
+
*/
|
|
39
|
+
const actorCtx = new node_async_hooks_1.AsyncLocalStorage();
|
|
40
|
+
/** 当前是否正跑在某个 Actor 的 mailbox 任务内 (诊断用) */
|
|
41
|
+
function currentActorContext() {
|
|
42
|
+
return actorCtx.getStore();
|
|
43
|
+
}
|
|
44
|
+
function createActorState(init = {}) {
|
|
45
|
+
return {
|
|
46
|
+
channelId: init.channelId ?? '',
|
|
47
|
+
agentId: init.agentId ?? '',
|
|
48
|
+
goalBinding: init.goalBinding ?? '',
|
|
49
|
+
messageHistory: init.messageHistory ?? [],
|
|
50
|
+
mailbox: init.mailbox ?? { pending: 0, processed: 0 },
|
|
51
|
+
activeRun: init.activeRun ?? '',
|
|
52
|
+
cancellation: init.cancellation ?? null,
|
|
53
|
+
outboundStream: init.outboundStream ?? null,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* 同 Channel **串行**邮箱。
|
|
58
|
+
*
|
|
59
|
+
* 契约 (K5 验收标准 ①):
|
|
60
|
+
* · `submit()` 立即返回 promise, 任务**排队**执行;
|
|
61
|
+
* · 同一个 mailbox 内**永不并发** —— 后一个任务在前一个 settle 之后才开始;
|
|
62
|
+
* · 一个任务抛错**不阻塞**队列 (错误交给该任务自己的 promise, 队列继续);
|
|
63
|
+
* · `pending` 是"已入队未完成"的数量, 用于观测 (不是背压实现)。
|
|
64
|
+
*/
|
|
65
|
+
class SerialMailbox {
|
|
66
|
+
tail = Promise.resolve();
|
|
67
|
+
pendingCount = 0;
|
|
68
|
+
processedCount = 0;
|
|
69
|
+
get pending() { return this.pendingCount; }
|
|
70
|
+
get processed() { return this.processedCount; }
|
|
71
|
+
submit(task) {
|
|
72
|
+
this.pendingCount += 1;
|
|
73
|
+
const run = this.tail.then(async () => {
|
|
74
|
+
try {
|
|
75
|
+
return await task();
|
|
76
|
+
}
|
|
77
|
+
finally {
|
|
78
|
+
this.pendingCount -= 1;
|
|
79
|
+
this.processedCount += 1;
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
// 队列尾巴吞掉错误, 避免一个失败任务毒化后续任务 (错误仍由返回的 promise 抛给调用方)
|
|
83
|
+
this.tail = run.then(() => undefined, () => undefined);
|
|
84
|
+
return run;
|
|
85
|
+
}
|
|
86
|
+
/** 等队列跑空 (测试与收尾用) */
|
|
87
|
+
async drain() {
|
|
88
|
+
await this.tail;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
exports.SerialMailbox = SerialMailbox;
|
|
92
|
+
/**
|
|
93
|
+
* 把一个 Channel 的状态与串行队列绑在一起。
|
|
94
|
+
*
|
|
95
|
+
* 现在**只是容器**: 还没有任何入口往里投递 (K5 第 4 步才接)。
|
|
96
|
+
* 因此它不改变现有行为 —— 现有链路仍走 Pi 实例字段。
|
|
97
|
+
*/
|
|
98
|
+
class ChannelActor {
|
|
99
|
+
state;
|
|
100
|
+
mailbox = new SerialMailbox();
|
|
101
|
+
constructor(init = {}) {
|
|
102
|
+
this.state = createActorState(init);
|
|
103
|
+
}
|
|
104
|
+
/** 投递一次执行 (串行执行)。执行期间 `state.activeRun` 由调用方/后续步骤写入 */
|
|
105
|
+
submit(fn) {
|
|
106
|
+
// 任务体内建立 ALS 上下文 ⇒ 任务内部的异步续体也能认出"自己在谁的上下文里"
|
|
107
|
+
return this.mailbox.submit(() => actorCtx.run(this, () => fn(this.state)));
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* **K5 第 4 步 — hydrate**: 实现体 (load → filter → 截断 → 替换) 住在 Actor, 业务侧只给纯变换。
|
|
111
|
+
* 走邮箱 ⇒ 与 append / persist 串行, 不会再出现"读-改-写"三拍被并发踩掉。
|
|
112
|
+
* 返回灌入条数 (0 = 没历史 / 空 / 加载失败由调用方处理)。
|
|
113
|
+
*/
|
|
114
|
+
hydrateHistory(spec) {
|
|
115
|
+
return this.mailbox.submit(async () => {
|
|
116
|
+
const loaded = await spec.load();
|
|
117
|
+
if (!loaded)
|
|
118
|
+
return 0;
|
|
119
|
+
const next = spec.filter(loaded).slice(-spec.maxMessages);
|
|
120
|
+
if (next.length === 0)
|
|
121
|
+
return 0;
|
|
122
|
+
const arr = this.state.messageHistory;
|
|
123
|
+
arr.length = 0;
|
|
124
|
+
arr.push(...next);
|
|
125
|
+
return next.length;
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* **K5 第 4 步 — persist 的取数拍**: 取一份快照 (浅拷贝)。
|
|
130
|
+
* 走邮箱 ⇒ 拿到的是一致的 history, 不会与正在进行的 append 交错 (原来的 `this.messageHistory.map(...)`
|
|
131
|
+
* 是"边写边读", 压缩/工具回灌并发时可能落盘到半截状态)。
|
|
132
|
+
*/
|
|
133
|
+
historySnapshot() {
|
|
134
|
+
return this.mailbox.submit(() => [...this.state.messageHistory]);
|
|
135
|
+
}
|
|
136
|
+
/** **K5 第 4 步 — append (排队版)**: 串行追加 (同 Channel 内排队) */
|
|
137
|
+
appendMessage(msg) {
|
|
138
|
+
return this.mailbox.submit(() => { this.state.messageHistory.push(msg); });
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* **K5 第 4 步 — append (同步漏斗版)**: 给"写完立刻要读到"的调用面用 (Pi 的 ReAct 循环里大量
|
|
142
|
+
* `push` 后马上读 `length`/索引) —— 不能改成 await, 否则会改变同拍可见性。
|
|
143
|
+
*
|
|
144
|
+
* 它提供的是**归属与可数性** (所有 history 写入收敛到唯一漏斗, 门可以断言"零处直写"),
|
|
145
|
+
* **不是并发安全** —— 并发安全由"入口投递进 mailbox"负责 (K5 第 5 步 / entriesWired)。
|
|
146
|
+
*/
|
|
147
|
+
appendMessageSync(msg) {
|
|
148
|
+
this.state.messageHistory.push(msg);
|
|
149
|
+
}
|
|
150
|
+
/** **K5 第 4 步 — pop 漏斗** (与 appendMessageSync 同性质: 归属可数, 不负责并发) */
|
|
151
|
+
popMessageSync() {
|
|
152
|
+
return this.state.messageHistory.pop();
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* **K5 第 4 步 — compact 的落地拍 (rebase)**: 用压缩结果替换 history, 但**保住**变换期间新追加的尾部。
|
|
156
|
+
*
|
|
157
|
+
* 为什么必须有这一拍: 压缩流水线是 **async** —— 从"取快照"(`snapshotLen`) 到"落地"之间是 await 窗口,
|
|
158
|
+
* 期间 append 进来的消息会被整块替换**丢掉** (lost update)。这里把尾部原样接回去。
|
|
159
|
+
* (同步压缩路径不受影响: 取快照与替换在同一拍相邻两行, 没有窗口 —— 见 pi-sdk 的注释。)
|
|
160
|
+
*/
|
|
161
|
+
rebaseHistory(compacted, snapshotLen) {
|
|
162
|
+
return this.mailbox.submit(() => {
|
|
163
|
+
const arr = this.state.messageHistory;
|
|
164
|
+
const at = Math.max(0, Math.min(snapshotLen, arr.length));
|
|
165
|
+
const tail = arr.slice(at);
|
|
166
|
+
arr.length = 0;
|
|
167
|
+
arr.push(...compacted, ...tail);
|
|
168
|
+
return { keptTail: tail.length };
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
/** **K5 第 4 步 — 整体替换漏斗** (hydrate 回灌 / 压缩后的整体赋值都走这里) */
|
|
172
|
+
replaceHistory(next) {
|
|
173
|
+
const arr = this.state.messageHistory;
|
|
174
|
+
arr.length = 0;
|
|
175
|
+
arr.push(...next);
|
|
176
|
+
}
|
|
177
|
+
/** 取消当前任务: 中断 signal, 队列继续 (后续任务看到的是新的 controller) */
|
|
178
|
+
abort(reason = 'aborted') {
|
|
179
|
+
this.state.cancellation?.abort(reason);
|
|
180
|
+
this.state.cancellation = null;
|
|
181
|
+
}
|
|
182
|
+
/** 开一个新的取消位 (进入一次执行时用) */
|
|
183
|
+
beginCancellation() {
|
|
184
|
+
const ac = new AbortController();
|
|
185
|
+
this.state.cancellation = ac;
|
|
186
|
+
return ac.signal;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
exports.ChannelActor = ChannelActor;
|
|
190
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
191
|
+
// Actor 注册表 (K5 第 3 步): 一个 channel 一个 actor
|
|
192
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
193
|
+
/**
|
|
194
|
+
* 进程内注册表: **会话身份 → ChannelActor**。
|
|
195
|
+
*
|
|
196
|
+
* ⚠️ 键是**会话身份** (SessionStore key / 整条 peerId), **不是** channel 前缀 —— 这条是被全量回归打出来的:
|
|
197
|
+
* 第一版取 `peerId` 的 `:` 前段当键 ⇒ 同一 channel 下不同会话落进同一个桶 ⇒ 新 session 一构造
|
|
198
|
+
* 就看到别人的 history (4742 测试里 5 红, 症状统一 `expected 2/5/6 to be 0`)。
|
|
199
|
+
* 隔离粒度必须与被迁移状态原有的粒度一致: history 属于**会话**, 不属于 channel 前缀。
|
|
200
|
+
*
|
|
201
|
+
* ⚠️ **没有身份就不归属** (没有 'default' 兜底桶) —— 宁可不共享, 不许串台。这里先把"落点"建起来。
|
|
202
|
+
*
|
|
203
|
+
* ⚠️ 现在的定位 (不许夸大):
|
|
204
|
+
* · 只做**归属**: 同一 channelId 永远拿到同一个 actor 实例, 不同 channelId 互不相干;
|
|
205
|
+
* · **还没有任何入口把执行投递进来** (`submit()` 尚未被业务调用) ⇒ K5 进度里
|
|
206
|
+
* `entriesWired` 仍是 **0/4**, 行为与迁移前一致;
|
|
207
|
+
* · 进程内 (非持久): 重启后 actor 表为空 —— 持久化是后续步骤 (history/Goal/Run 的恢复)。
|
|
208
|
+
*/
|
|
209
|
+
const actors = new Map();
|
|
210
|
+
/**
|
|
211
|
+
* 取(或建)某 channel 的 actor。
|
|
212
|
+
* `init` **只在新建时生效** (既有 actor 不会被 init 覆盖 —— 避免"后到的调用把先建的会话状态冲掉")。
|
|
213
|
+
*/
|
|
214
|
+
function getOrCreateActor(actorKey, init = {}) {
|
|
215
|
+
const key = actorKey;
|
|
216
|
+
const existing = actors.get(key);
|
|
217
|
+
if (existing)
|
|
218
|
+
return existing;
|
|
219
|
+
// ⚠️ **不拿身份键当 channel 绑定**: `state.channelId` 的语义 = 会话当前绑定的 channel
|
|
220
|
+
// (与 Pi 的 currentChannelId 一致, 由 prompt/入口设置)。工厂若预置成 peerId 前缀,
|
|
221
|
+
// 会让会话在入口设置之前就读到非空值 (snapshot / compaction cacheScope 都会跟着变) —— 静默行为变化。
|
|
222
|
+
const created = new ChannelActor({ ...init });
|
|
223
|
+
actors.set(key, created);
|
|
224
|
+
return created;
|
|
225
|
+
}
|
|
226
|
+
/** 只读探查 (不建) —— 测试与诊断用 */
|
|
227
|
+
function peekActor(actorKey) {
|
|
228
|
+
return actors.get(actorKey);
|
|
229
|
+
}
|
|
230
|
+
/** 当前 actor 数 (诊断用) */
|
|
231
|
+
function actorCount() {
|
|
232
|
+
return actors.size;
|
|
233
|
+
}
|
|
234
|
+
/** 清空注册表 —— **仅测试用** (避免测试之间互相污染) */
|
|
235
|
+
function resetActors() {
|
|
236
|
+
actors.clear();
|
|
237
|
+
channelQueues.clear();
|
|
238
|
+
privateActorsCreated = 0;
|
|
239
|
+
}
|
|
240
|
+
async function deliverThroughActor(
|
|
241
|
+
// 形参故意放宽成 `unknown`: 调用点的 receiver 类型五花八门 (AgentSession / 结构子集 / any),
|
|
242
|
+
// 写成 `{ actor?: ChannelActor }` 会触发 TS 的弱类型检查 ("no properties in common") 而误报。
|
|
243
|
+
// 实际用法由下面这行运行时取值保证 (取不到 actor 就直跑)。
|
|
244
|
+
holder, run, opts = {}) {
|
|
245
|
+
const actor = holder?.actor;
|
|
246
|
+
if (!actor || typeof actor.submit !== 'function')
|
|
247
|
+
return run();
|
|
248
|
+
// **重入保护**: 已经跑在同一个 actor 的 mailbox 任务里 ⇒ 直跑。
|
|
249
|
+
// 否则"运行中被调用的执行点"(LLM 回调 / judge / 工具内再问) 会往自己的队列尾投递 ⇒ **自锁**。
|
|
250
|
+
if (actorCtx.getStore() === actor)
|
|
251
|
+
return run();
|
|
252
|
+
// channel 级串行 (opt-in): 走 channel 队列; 同样要防重入 (已在同一 channel 队列任务里 ⇒ 直跑)
|
|
253
|
+
if (opts.serializeByChannel) {
|
|
254
|
+
const ch = actor.state.channelId;
|
|
255
|
+
if (ch) {
|
|
256
|
+
const q = getChannelQueue(ch);
|
|
257
|
+
if (channelCtx.getStore() === q)
|
|
258
|
+
return run();
|
|
259
|
+
return q.submit(() => channelCtx.run(q, () => actor.submit(() => actorCtx.run(actor, () => run()))));
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
return actor.submit(run);
|
|
263
|
+
}
|
|
264
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
265
|
+
// channel 级串行锁 (K5 步骤⑤) —— **能力先落地, 默认不启用**
|
|
266
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
267
|
+
/**
|
|
268
|
+
* channel 级队列注册表: `channelId → 串行队列`。
|
|
269
|
+
*
|
|
270
|
+
* 为什么要它 / 为什么默认不启用 (证据在 `plan-channel-actor.ts` 的 `K5_CHANNEL_LOCK`):
|
|
271
|
+
* · **证据**: web 的 channel 只有一个 `currentSessionId` ⇒ 用户消息都投到**同一个会话身份**
|
|
272
|
+
* ⇒ 身份级串行 (mailbox) **已经把该 channel 的输入串起来了** —— 验收①在活跃会话上已成立。
|
|
273
|
+
* · **能力**: 会话切换 (`[新会话] 已切换`) 后旧会话仍在内存, 此时两个身份可能并行 —— 若要"跨会话切换也串行",
|
|
274
|
+
* 需要 channel 级锁。
|
|
275
|
+
* · **代价**: 同 channel 的**多个 agent** (P2P 多智能体) 也会被串起来 ⇒ 吞吐下降。
|
|
276
|
+
* ⇒ 是否全局启用是**意图层**的决定 (leo), 这里只把能力与证据备好, 由台账的 `enabled` 开关控制。
|
|
277
|
+
*/
|
|
278
|
+
const channelQueues = new Map();
|
|
279
|
+
/** 取(或建)某 channel 的串行队列 */
|
|
280
|
+
function getChannelQueue(channelId) {
|
|
281
|
+
const key = channelId || 'default';
|
|
282
|
+
let q = channelQueues.get(key);
|
|
283
|
+
if (!q) {
|
|
284
|
+
q = new SerialMailbox();
|
|
285
|
+
channelQueues.set(key, q);
|
|
286
|
+
}
|
|
287
|
+
return q;
|
|
288
|
+
}
|
|
289
|
+
/** 当前 channel 队列数 (诊断用) */
|
|
290
|
+
function channelQueueCount() {
|
|
291
|
+
return channelQueues.size;
|
|
292
|
+
}
|
|
293
|
+
/** channel 队列上下文 (重入判定用; 与 actorCtx 同理 —— 不许自锁) */
|
|
294
|
+
const channelCtx = new node_async_hooks_1.AsyncLocalStorage();
|
|
295
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
296
|
+
// 私有 actor (K5 步骤⑧): 给"没有会话身份"的 session 用
|
|
297
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
298
|
+
let privateActorsCreated = 0;
|
|
299
|
+
/**
|
|
300
|
+
* 造一个**私有** actor: **不注册**进 `actors`, 所以别人拿不到它 ⇒ 不可能串台。
|
|
301
|
+
*
|
|
302
|
+
* 为什么需要它 (K5 步骤⑧ 的前提): 要删掉 Pi 实例侧的"绑定前暂存"字段, 就必须保证**任何 session 都有 actor**。
|
|
303
|
+
* 没有身份时不许猜键 (猜就会共享) —— 那就给它一个**谁也拿不到**的私有 actor:
|
|
304
|
+
* 隔离性比"共享"更保守, 语义与"暂存字段"完全等价 (每个 session 自己一份)。
|
|
305
|
+
*/
|
|
306
|
+
function createPrivateActor() {
|
|
307
|
+
privateActorsCreated += 1;
|
|
308
|
+
return new ChannelActor();
|
|
309
|
+
}
|
|
310
|
+
/** 已创建的私有 actor 数 (诊断/测试用: 证明"每个无身份 session 各拿一份") */
|
|
311
|
+
function privateActorCount() {
|
|
312
|
+
return privateActorsCreated;
|
|
313
|
+
}
|
|
314
|
+
//# sourceMappingURL=channel-actor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-actor.js","sourceRoot":"","sources":["../../../src/kernel/channel-actor.ts"],"names":[],"mappings":"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"}
|
|
@@ -141,6 +141,61 @@ class OrbitDBAdapter {
|
|
|
141
141
|
get ipfsPaths() {
|
|
142
142
|
return this.node?.paths ?? null;
|
|
143
143
|
}
|
|
144
|
+
// ============ P2P 观测/接入口 (2026-09-30, 为真两节点复制验证加的) ============
|
|
145
|
+
// 之前 helia/libp2p 完全藏在私有字段里 —— 于是所有多节点测试只能注入 fake CIDDatabase,
|
|
146
|
+
// 「真两节点能不能同步」从来没被验过。这三个口只读/只拨号, 不改变任何既有行为。
|
|
147
|
+
/** 本节点 peerId (未初始化时 null; 验收/诊断用) */
|
|
148
|
+
get peerId() {
|
|
149
|
+
return this.node?.peerId ?? null;
|
|
150
|
+
}
|
|
151
|
+
/** 本节点当前监听地址 (multiaddr 字符串; 未初始化时 []) */
|
|
152
|
+
listenAddrs() {
|
|
153
|
+
const l = this.node?.helia?.libp2p;
|
|
154
|
+
try {
|
|
155
|
+
return (l?.getMultiaddrs?.() ?? []).map((m) => m.toString());
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
return [];
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* 当前与本节点**有连接**的对端 (诊断用只读口)。
|
|
163
|
+
* 用途: P0 门里 S3「不拨号必须看不见」不稳定 (关 mDNS、全静默档都仍 seen=101) ——
|
|
164
|
+
* 得先看清"是谁、通过什么连上的", 再谈判据。返回 `peerId ← 远端地址`。
|
|
165
|
+
*/
|
|
166
|
+
peerConnections() {
|
|
167
|
+
const l = this.node?.helia?.libp2p;
|
|
168
|
+
try {
|
|
169
|
+
return (l?.getConnections?.() ?? []).map((c) => {
|
|
170
|
+
const p = c.remotePeer?.toString?.() ?? String(c.remotePeer);
|
|
171
|
+
const a = c.remoteAddr?.toString?.() ?? '';
|
|
172
|
+
return `${p} ← ${a}`;
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
return [];
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* 某个 pubsub 主题当前的订阅者 peerId (诊断用只读口)。
|
|
181
|
+
* OrbitDB 的同步靠 pubsub: 新 peer 订阅 `address` 主题后, 已在线的 peer 会把 heads 发给它
|
|
182
|
+
* (@orbitdb/core src/sync.js:143 的 join 事件)。所以"订阅者为 0"和"日志为空"是两回事, 必须分开看。
|
|
183
|
+
*/
|
|
184
|
+
pubsubSubscribers(topic) {
|
|
185
|
+
const ps = this.node?.helia?.libp2p?.services?.pubsub;
|
|
186
|
+
try {
|
|
187
|
+
return (ps?.getSubscribers?.(topic) ?? []).map((x) => x.toString());
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
return [];
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/** 拨号到另一个真节点 (验收/群组接入用)。失败原样抛, 不吞。 */
|
|
194
|
+
async dial(addr) {
|
|
195
|
+
await this.ensure();
|
|
196
|
+
const { multiaddr } = await Promise.resolve().then(() => __importStar(require('@multiformats/multiaddr')));
|
|
197
|
+
await this.node.helia.libp2p.dial(multiaddr(addr));
|
|
198
|
+
}
|
|
144
199
|
/** 懒初始化: 首次使用时启动 helia + OrbitDB + 打开 keyvalue store */
|
|
145
200
|
async ensure() {
|
|
146
201
|
if (this.db)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cid-database.js","sourceRoot":"","sources":["../../../src/orbitdb/cid-database.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cid-database.js","sourceRoot":"","sources":["../../../src/orbitdb/cid-database.ts"],"names":[],"mappings":"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"}
|
|
@@ -65,6 +65,7 @@ exports.createBolloonIpfs = createBolloonIpfs;
|
|
|
65
65
|
exports.dbNameFromAddress = dbNameFromAddress;
|
|
66
66
|
const helia_1 = require("helia");
|
|
67
67
|
const libp2p_1 = require("@helia/libp2p");
|
|
68
|
+
const bitswap_1 = require("@helia/bitswap");
|
|
68
69
|
const blockstore_fs_1 = require("blockstore-fs");
|
|
69
70
|
const datastore_fs_1 = require("datastore-fs");
|
|
70
71
|
const dagCbor = __importStar(require("@ipld/dag-cbor"));
|
|
@@ -106,7 +107,21 @@ async function createBolloonIpfs(dataDir) {
|
|
|
106
107
|
// createHeliaLight 无 libp2p → withLibp2p 手动装配 (可传 services)
|
|
107
108
|
// codecs/hashers 照抄 createHelia 默认: OrbitDB 的 log entry 用 dag-cbor (codec 113),
|
|
108
109
|
// 不注册会报 "Could not load codec for 113"
|
|
109
|
-
|
|
110
|
+
// 2026-09-30 (P0b 实验): "轻客户端"开关。P0b 实测到一个**与条数无关的 ~25-30s 固定停顿**
|
|
111
|
+
// (连"只有 1 条的 keyvalue store"新节点都要 25.3s 才看见内容; 历次出现 打开=30002ms),
|
|
112
|
+
// 怀疑是每次取块前的提供者查找 (kadDHT / delegated routing 两个客户端) 在超时。
|
|
113
|
+
// 打开 BOLLOON_ORBITDB_LEAN_ROUTING=1 ⇒ 不带 DHT/delegated/autoTLS, 只留 pubsub+identify+ping+relay。
|
|
114
|
+
// 这既是一个诊断开关, 也是"轻量客户端"该有的形态 (手机/低配节点不需要当 DHT 服务器)。
|
|
115
|
+
const leanRouting = process.env.BOLLOON_ORBITDB_LEAN_ROUTING === '1' || process.env.BOLLOON_ORBITDB_LEAN_ROUTING === 'true';
|
|
116
|
+
// 2026-10-01: 反事实需要"真隔离"。节点默认带 mDNS ⇒ 同机/同网的 peer **不拨号也会被自动发现并连上**
|
|
117
|
+
// ⇒ P0 的 S3(「不拨号必须看不见」)曾经假红/假绿都出现过。做隔离实验时打开这个开关。
|
|
118
|
+
const noMdns = process.env.BOLLOON_ORBITDB_NO_MDNS === '1' || process.env.BOLLOON_ORBITDB_NO_MDNS === 'true';
|
|
119
|
+
// 2026-10-01: "全静默"隔离档。S3 那条反事实(不拨号必须看不见)在只关 mDNS 时**不稳定**
|
|
120
|
+
// (同一份代码一轮 seen=0 一轮 seen=101) ⇒ 说明还有服务在自发建连。这一档只留
|
|
121
|
+
// pubsub + identify + ping, 其余(autoNAT/relay/dcutr/upnp/mdns/dht/delegated/autoTLS)全关。
|
|
122
|
+
// 用途: 反事实隔离实验, 以及"最小可用节点"的形态参考。
|
|
123
|
+
const isolated = process.env.BOLLOON_ORBITDB_ISOLATED === '1' || process.env.BOLLOON_ORBITDB_ISOLATED === 'true';
|
|
124
|
+
const heliaWithLibp2p = (0, libp2p_1.withLibp2p)((0, helia_1.createHeliaLight)({
|
|
110
125
|
blockstore,
|
|
111
126
|
datastore,
|
|
112
127
|
codecs: [dagCbor, dagJson, json],
|
|
@@ -115,22 +130,32 @@ async function createBolloonIpfs(dataDir) {
|
|
|
115
130
|
// 显式列出服务: createLibp2p 浅合并会覆盖默认 services
|
|
116
131
|
services: {
|
|
117
132
|
pubsub: (0, gossipsub_1.gossipsub)({ emitSelf: true }), // OrbitDB 同步必需; emitSelf 让单机也能 publish (否则 NoPeersSubscribedToTopic)
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
133
|
+
...(isolated ? {} : {
|
|
134
|
+
autoNAT: (0, autonat_1.autoNAT)(),
|
|
135
|
+
dcutr: (0, dcutr_1.dcutr)(),
|
|
136
|
+
relay: (0, circuit_relay_v2_1.circuitRelayServer)(),
|
|
137
|
+
upnp: (0, upnp_nat_1.uPnPNAT)(),
|
|
138
|
+
http: (0, http_1.http)(),
|
|
139
|
+
}),
|
|
140
|
+
...(isolated || leanRouting ? {} : { autoTLS: (0, libp2p_auto_tls_1.autoTLS)() }),
|
|
141
|
+
...(isolated || leanRouting ? {} : {
|
|
142
|
+
delegatedPeerRouting: (0, delegated_routing_v1_http_api_client_1.delegatedRoutingV1HttpApiClientPeerRouting)((0, delegated_routing_client_1.delegatedHTTPRoutingDefaults)()),
|
|
143
|
+
delegatedContentRouting: (0, delegated_routing_v1_http_api_client_1.delegatedRoutingV1HttpApiClientContentRouting)((0, delegated_routing_client_1.delegatedHTTPRoutingDefaults)()),
|
|
144
|
+
dht: (0, kad_dht_1.kadDHT)(),
|
|
145
|
+
}),
|
|
124
146
|
identify: (0, identify_1.identify)(),
|
|
125
147
|
identifyPush: (0, identify_1.identifyPush)(),
|
|
126
148
|
keychain: (0, keychain_1.keychain)({ pass: 'bolloon-orbitdb-keychain-pass-2026' }),
|
|
127
149
|
ping: (0, ping_1.ping)(),
|
|
128
|
-
|
|
129
|
-
upnp: (0, upnp_nat_1.uPnPNAT)(),
|
|
130
|
-
mdns: (0, mdns_1.mdns)(),
|
|
131
|
-
http: (0, http_1.http)(),
|
|
150
|
+
...(isolated || noMdns ? {} : { mdns: (0, mdns_1.mdns)() }),
|
|
132
151
|
},
|
|
133
152
|
});
|
|
153
|
+
// 2026-09-30 (P0 真两节点验收照出的根因): 在此之前节点**没有任何 block broker** ——
|
|
154
|
+
// 新节点按地址打开群时连 manifest/oplog 的块都拉不到, 报
|
|
155
|
+
// "No block brokers capable of retrieving blocks are configured, the CID bafyrei… cannot be fetched",
|
|
156
|
+
// 也就是「跨机群消息复制」从来就不可能。此前 5 个"多节点"测试都注入 fake CIDDatabase, 照不出来。
|
|
157
|
+
// createHeliaLight 不带 bitswap, withLibp2p 也不加 ⇒ 必须显式 withBitswap (顺序: 在 libp2p 之后)。
|
|
158
|
+
const helia = (0, bitswap_1.withBitswap)(heliaWithLibp2p);
|
|
134
159
|
await helia.start();
|
|
135
160
|
const peerId = helia.libp2p.peerId.toString();
|
|
136
161
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipfs-node.js","sourceRoot":"","sources":["../../../src/orbitdb/ipfs-node.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,iCAAqD;AACrD,0CAA2C;AAC3C,iDAA6C;AAC7C,+CAA2C;AAC3C,MAAY,OAAO,2CAAuB;AAC1C,MAAY,OAAO,2CAAuB;AAC1C,MAAY,IAAI,qDAAiC;AACjD,mDAAkD;AAClD,iDAA8C;AAC9C,+CAA0D;AAC1D,6CAAyC;AACzC,+CAA4C;AAC5C,6CAA0C;AAC1C,+CAA2C;AAC3C,uCAAoC;AACpC,uCAAoC;AACpC,+DAA8D;AAC9D,yCAAsC;AACtC,uCAAoC;AACpC,sGAAwJ;AACxJ,8EAA+E;AAC/E,iEAAsD;AACtD,MAAY,IAAI,iCAAa;AAC7B,MAAY,EAAE,+BAAW;AAoBzB;;;;;;GAMG;AACI,KAAK,4BAA4B,OAAgB;IACtD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,IAAI,MAAM,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC;IACvH,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAEjD,oEAAoE;IACpE,MAAM,UAAU,GAAG,IAAI,4BAAY,CAAC,SAAS,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,IAAI,0BAAW,CAAC,YAAY,CAAC,CAAC;IAChD,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,gDAAgD;IACzE,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;IAEvB,4DAA4D;IAC5D,gFAAgF;IAChF,uCAAuC;IACvC,MAAM,KAAK,GAAG,IAAA,mBAAU,EAAC,IAAA,wBAAgB,EAAC;
|
|
1
|
+
{"version":3,"file":"ipfs-node.js","sourceRoot":"","sources":["../../../src/orbitdb/ipfs-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -67,6 +67,8 @@ exports.releaseStaleClaims = releaseStaleClaims;
|
|
|
67
67
|
exports.startTaskExecution = startTaskExecution;
|
|
68
68
|
exports.endTaskExecution = endTaskExecution;
|
|
69
69
|
const fs = __importStar(require("fs/promises"));
|
|
70
|
+
const path = __importStar(require("path"));
|
|
71
|
+
const agent_identity_store_js_1 = require("../agents/agent-identity-store.js");
|
|
70
72
|
const server_types_js_1 = require("./server-types.js");
|
|
71
73
|
const session_window_js_1 = require("../bootstrap/session-window.js");
|
|
72
74
|
const task_deps_js_1 = require("./task-deps.js");
|
|
@@ -98,7 +100,7 @@ async function updateChannels(fn) {
|
|
|
98
100
|
}
|
|
99
101
|
async function rawLoadChannels() {
|
|
100
102
|
try {
|
|
101
|
-
const data = await fs.readFile(
|
|
103
|
+
const data = await fs.readFile(channelsPathNow(), 'utf-8');
|
|
102
104
|
return JSON.parse(data);
|
|
103
105
|
}
|
|
104
106
|
catch (readErr) {
|
|
@@ -106,11 +108,11 @@ async function rawLoadChannels() {
|
|
|
106
108
|
if (readErr?.code !== 'ENOENT') {
|
|
107
109
|
console.warn('[loadChannels] channels.json 解析失败, 尝试从 .tmp 恢复:', readErr?.message?.slice(0, 80));
|
|
108
110
|
try {
|
|
109
|
-
const tmpData = await fs.readFile(
|
|
111
|
+
const tmpData = await fs.readFile(channelsPathNow() + '.tmp', 'utf-8');
|
|
110
112
|
const recovered = JSON.parse(tmpData);
|
|
111
113
|
console.log(`[loadChannels] 从 .tmp 恢复成功: ${recovered.length} 个 channel`);
|
|
112
114
|
// 立即把恢复的内容写回主文件
|
|
113
|
-
await fs.writeFile(
|
|
115
|
+
await fs.writeFile(channelsPathNow(), tmpData, 'utf-8');
|
|
114
116
|
return recovered;
|
|
115
117
|
}
|
|
116
118
|
catch (tmpErr) {
|
|
@@ -120,6 +122,22 @@ async function rawLoadChannels() {
|
|
|
120
122
|
return [];
|
|
121
123
|
}
|
|
122
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* channels.json 的路径**每次调用时**解析 (2026-10-01, 数据事故修复)。
|
|
127
|
+
*
|
|
128
|
+
* 事故: `server-types.CHANNELS_PATH` 是 import 时定死的常量 (按那一刻的 HOME 解析),
|
|
129
|
+
* 于是测试里后设的 process.env.HOME **完全不起作用** ⇒ 测试夹具把用户的真实
|
|
130
|
+
* ~/.bolloon/sessions/channels.json 整表覆盖 (4 个智能体只剩 1 条)。
|
|
131
|
+
* 现在改成按**当前** HOME 解析 (与 CLI 侧 agent-identity-store.channelsPaths 同一口径)。
|
|
132
|
+
*/
|
|
133
|
+
function channelsPathNow() {
|
|
134
|
+
try {
|
|
135
|
+
return (0, agent_identity_store_js_1.channelsPaths)()[0];
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
return server_types_js_1.CHANNELS_PATH;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
123
141
|
async function rawSaveChannels(channels) {
|
|
124
142
|
const sanitized = channels.map(ch => {
|
|
125
143
|
const { didDocument: _omit, ...rest } = ch;
|
|
@@ -131,9 +149,12 @@ async function rawSaveChannels(channels) {
|
|
|
131
149
|
lastChannelsJson = jsonStr;
|
|
132
150
|
console.log('[saveChannels] 保存频道数据, 数量:', sanitized.length);
|
|
133
151
|
// 2026-07-24: 原子写入 — 先写 .tmp 再 rename, 防止崩溃导致 channels.json 损坏
|
|
134
|
-
const
|
|
152
|
+
const target = channelsPathNow();
|
|
153
|
+
// 测试进程只允许写临时目录 —— 真实数据目录一律拒绝 (第二道闸)
|
|
154
|
+
(0, agent_identity_store_js_1.assertTestWriteTarget)(path.dirname(path.dirname(target)), 'channels.json');
|
|
155
|
+
const tmpPath = target + '.tmp';
|
|
135
156
|
await fs.writeFile(tmpPath, jsonStr, 'utf-8');
|
|
136
|
-
await fs.rename(tmpPath,
|
|
157
|
+
await fs.rename(tmpPath, target);
|
|
137
158
|
lastChannelsWriteAt = Date.now();
|
|
138
159
|
}
|
|
139
160
|
async function loadChannels() {
|