@bolloon/bolloon-agent 0.4.33 → 0.5.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.
Files changed (143) hide show
  1. package/dist/agents/contacts/chain.js +27 -7
  2. package/dist/agents/execution-supervisor.js +493 -35
  3. package/dist/agents/external-events.js +35 -6
  4. package/dist/agents/gateway-group.js +100 -12
  5. package/dist/agents/goal-criteria.js +10 -3
  6. package/dist/agents/goal-flywheel/block-executor.js +346 -0
  7. package/dist/agents/goal-flywheel/continuation-decision.js +592 -0
  8. package/dist/agents/goal-flywheel/goal-change.js +754 -0
  9. package/dist/agents/goal-flywheel/index.js +26 -0
  10. package/dist/agents/goal-flywheel/memory-layers.js +227 -0
  11. package/dist/agents/goal-flywheel/run-closure.js +809 -0
  12. package/dist/agents/goal-flywheel/skill-candidate.js +628 -0
  13. package/dist/agents/goal-flywheel/types.js +329 -0
  14. package/dist/agents/goal-flywheel/wiring/change.js +288 -0
  15. package/dist/agents/goal-flywheel/wiring/closure.js +697 -0
  16. package/dist/agents/goal-flywheel/wiring/continuation.js +432 -0
  17. package/dist/agents/goal-flywheel/wiring/contract.js +270 -0
  18. package/dist/agents/goal-flywheel/wiring/index.js +26 -0
  19. package/dist/agents/goal-flywheel/wiring/monitor.js +254 -0
  20. package/dist/agents/goal-flywheel/wiring/seams.js +592 -0
  21. package/dist/agents/goal-flywheel/work-contract.js +478 -0
  22. package/dist/agents/goal-flywheel/work-monitor.js +488 -0
  23. package/dist/agents/goal-flywheel-wiring.js +1870 -0
  24. package/dist/agents/goal-state-reducer.js +406 -0
  25. package/dist/agents/goal-store.js +35 -1
  26. package/dist/agents/mobile-flywheel-view.js +144 -0
  27. package/dist/agents/mobile-task-actions-verify.js +74 -0
  28. package/dist/agents/mobile-task-actions.js +178 -0
  29. package/dist/agents/mobile-task-views.js +199 -0
  30. package/dist/agents/network-pulse.js +304 -18
  31. package/dist/agents/pi-sdk.js +75 -20
  32. package/dist/agents/run-store.js +18 -5
  33. package/dist/agents/skill-readiness.js +52 -10
  34. package/dist/agents/subagent-manager.js +209 -3
  35. package/dist/agents/task/task-runner.js +9 -3
  36. package/dist/agents/task-group.js +8 -51
  37. package/dist/agents/task-public-text.js +89 -0
  38. package/dist/cli/commands/index.js +1 -0
  39. package/dist/cli/commands/tasks.js +350 -2
  40. package/dist/cli/identity-command.js +177 -0
  41. package/dist/cli/setup-wizard.js +71 -0
  42. package/dist/cli/update-commands.js +150 -24
  43. package/dist/cli-entry.js +12 -2
  44. package/dist/electron-build/agents/contacts/chain.js +26 -6
  45. package/dist/electron-build/agents/contacts/chain.js.map +1 -1
  46. package/dist/electron-build/agents/execution-supervisor.js +492 -34
  47. package/dist/electron-build/agents/execution-supervisor.js.map +1 -1
  48. package/dist/electron-build/agents/external-events.js +34 -5
  49. package/dist/electron-build/agents/external-events.js.map +1 -1
  50. package/dist/electron-build/agents/goal-criteria.js +10 -3
  51. package/dist/electron-build/agents/goal-criteria.js.map +1 -1
  52. package/dist/electron-build/agents/goal-flywheel/continuation-decision.js +598 -0
  53. package/dist/electron-build/agents/goal-flywheel/continuation-decision.js.map +1 -0
  54. package/dist/electron-build/agents/goal-flywheel/goal-change.js +773 -0
  55. package/dist/electron-build/agents/goal-flywheel/goal-change.js.map +1 -0
  56. package/dist/electron-build/agents/goal-flywheel/memory-layers.js +269 -0
  57. package/dist/electron-build/agents/goal-flywheel/memory-layers.js.map +1 -0
  58. package/dist/electron-build/agents/goal-flywheel/run-closure.js +818 -0
  59. package/dist/electron-build/agents/goal-flywheel/run-closure.js.map +1 -0
  60. package/dist/electron-build/agents/goal-flywheel/skill-candidate.js +642 -0
  61. package/dist/electron-build/agents/goal-flywheel/skill-candidate.js.map +1 -0
  62. package/dist/electron-build/agents/goal-flywheel/types.js +333 -0
  63. package/dist/electron-build/agents/goal-flywheel/types.js.map +1 -0
  64. package/dist/electron-build/agents/goal-flywheel/wiring/change.js +294 -0
  65. package/dist/electron-build/agents/goal-flywheel/wiring/change.js.map +1 -0
  66. package/dist/electron-build/agents/goal-flywheel/wiring/closure.js +742 -0
  67. package/dist/electron-build/agents/goal-flywheel/wiring/closure.js.map +1 -0
  68. package/dist/electron-build/agents/goal-flywheel/wiring/continuation.js +444 -0
  69. package/dist/electron-build/agents/goal-flywheel/wiring/continuation.js.map +1 -0
  70. package/dist/electron-build/agents/goal-flywheel/wiring/contract.js +279 -0
  71. package/dist/electron-build/agents/goal-flywheel/wiring/contract.js.map +1 -0
  72. package/dist/electron-build/agents/goal-flywheel/wiring/index.js +111 -0
  73. package/dist/electron-build/agents/goal-flywheel/wiring/index.js.map +1 -0
  74. package/dist/electron-build/agents/goal-flywheel/wiring/monitor.js +264 -0
  75. package/dist/electron-build/agents/goal-flywheel/wiring/monitor.js.map +1 -0
  76. package/dist/electron-build/agents/goal-flywheel/wiring/seams.js +612 -0
  77. package/dist/electron-build/agents/goal-flywheel/wiring/seams.js.map +1 -0
  78. package/dist/electron-build/agents/goal-flywheel/work-contract.js +488 -0
  79. package/dist/electron-build/agents/goal-flywheel/work-contract.js.map +1 -0
  80. package/dist/electron-build/agents/goal-flywheel/work-monitor.js +501 -0
  81. package/dist/electron-build/agents/goal-flywheel/work-monitor.js.map +1 -0
  82. package/dist/electron-build/agents/goal-flywheel-wiring.js +1962 -0
  83. package/dist/electron-build/agents/goal-flywheel-wiring.js.map +1 -0
  84. package/dist/electron-build/agents/goal-state-reducer.js +414 -0
  85. package/dist/electron-build/agents/goal-state-reducer.js.map +1 -0
  86. package/dist/electron-build/agents/goal-store.js +35 -1
  87. package/dist/electron-build/agents/goal-store.js.map +1 -1
  88. package/dist/electron-build/agents/network-pulse.js +307 -19
  89. package/dist/electron-build/agents/network-pulse.js.map +1 -1
  90. package/dist/electron-build/agents/pi-sdk.js +74 -19
  91. package/dist/electron-build/agents/pi-sdk.js.map +1 -1
  92. package/dist/electron-build/agents/run-store.js +20 -5
  93. package/dist/electron-build/agents/run-store.js.map +1 -1
  94. package/dist/electron-build/agents/skill-readiness.js +52 -9
  95. package/dist/electron-build/agents/skill-readiness.js.map +1 -1
  96. package/dist/electron-build/agents/task/task-runner.js +8 -2
  97. package/dist/electron-build/agents/task/task-runner.js.map +1 -1
  98. package/dist/electron-build/orbitdb/cid-database.js +83 -17
  99. package/dist/electron-build/orbitdb/cid-database.js.map +1 -1
  100. package/dist/electron-build/orbitdb/ipfs-node.js +31 -2
  101. package/dist/electron-build/orbitdb/ipfs-node.js.map +1 -1
  102. package/dist/electron-build/utils/dual-source.js +471 -0
  103. package/dist/electron-build/utils/dual-source.js.map +1 -0
  104. package/dist/electron-build/utils/update-manager.js +331 -57
  105. package/dist/electron-build/utils/update-manager.js.map +1 -1
  106. package/dist/electron-build/utils/update-state.js +16 -1
  107. package/dist/electron-build/utils/update-state.js.map +1 -1
  108. package/dist/electron-build/utils/version-info.js +82 -2
  109. package/dist/electron-build/utils/version-info.js.map +1 -1
  110. package/dist/index.js +103 -12
  111. package/dist/ios/chain-explorer.js +617 -0
  112. package/dist/ios/explorer.html +163 -0
  113. package/dist/ios/index.html +96 -0
  114. package/dist/ios/mobile-agent.js +2 -2
  115. package/dist/ios/mobile-contacts.js +329 -0
  116. package/dist/ios/mobile-core.js +1379 -226
  117. package/dist/ios/mobile-privacy.js +185 -0
  118. package/dist/ios/mobile.css +19 -0
  119. package/dist/ios/mobile.html +96 -0
  120. package/dist/ios/mobile.js +706 -7
  121. package/dist/ios/routes-chain-index.js +108 -0
  122. package/dist/ios/routes-contacts.js +420 -0
  123. package/dist/ios/routes-onchain-trade.js +99 -0
  124. package/dist/ios/routes-x402-info.js +1 -0
  125. package/dist/ios/server.js +762 -0
  126. package/dist/ios/task-frame-server.js +211 -0
  127. package/dist/orbitdb/cid-database.js +81 -16
  128. package/dist/orbitdb/ipfs-node.js +31 -2
  129. package/dist/utils/dual-source.js +426 -0
  130. package/dist/utils/update-cli.js +16 -21
  131. package/dist/utils/update-health.js +35 -5
  132. package/dist/utils/update-manager.js +329 -57
  133. package/dist/utils/update-state.js +16 -1
  134. package/dist/utils/version-info.js +75 -1
  135. package/dist/web/mobile-contacts.js +44 -11
  136. package/dist/web/mobile-core.js +1197 -513
  137. package/dist/web/mobile-tasks.js +339 -0
  138. package/dist/web/mobile.css +19 -0
  139. package/dist/web/mobile.html +64 -0
  140. package/dist/web/mobile.js +531 -1
  141. package/dist/web/routes-mobile-tasks.js +353 -0
  142. package/dist/web/server.js +163 -4
  143. package/package.json +3 -1
@@ -0,0 +1,264 @@
1
+ "use strict";
2
+ /**
3
+ * wiring/monitor.ts — 接缝 ④「有谁卡住了, 该谁动手?」 (**M3 独占**)
4
+ *
5
+ * 归属: `seams.ts` 的 `SEAM_ROSTER` 里 `id: 'monitor'`, `stage: 'M3'`。
6
+ * M3 只准改本文件 + `wiring/contract.ts` + 声明的 `wiringPoints` (`goal-flywheel/work-monitor.ts`)。
7
+ *
8
+ * ## 这条接缝钉住的冻结规则
9
+ *
10
+ * **规则 ④ 的"子 Agent 被阻塞"那一类终止路径必须经过收尾漏斗**。
11
+ * Watchdog 只看进程存活; 这条接缝看的是"任务卡住了没有"。它只做三件事:
12
+ * ① **统一巡检** (`sweepAll` / `sweep`): 一次把**所有**待回报 Goal 的阻塞查清楚 (有界, 不静默);
13
+ * ② **按计划处理** (`handle`): 处置动作交给宿主执行 —— 接缝自己**永不自动绕过 Harness**;
14
+ * ③ **用户可见态** (`visibleState` / `createVisibleStateProbe`): 只暴露冻结层的闭集, 内部词不外泄。
15
+ *
16
+ * 阻塞升级到人 → Goal 的状态变更**不在这里直接写**, 而是交给 Goal reducer
17
+ * (规则 ②), 由接线层在 `handle` 之后调用。本文件因此没有任何 Goal 写入面。
18
+ *
19
+ * ## M3 的两处深化 (为什么不是"又一个透传壳")
20
+ *
21
+ * 1. **统一监控**: 真实 tick 里"逐个 Goal 巡检"是散在各处的循环 (`execution-supervisor.ts` 那段
22
+ * `listGoalsWithPendingWork` → `collectWorkBlocks` → `applyBlockHandling`)。`sweepAll` 把这条循环
23
+ * 收成**一次调用**: 有界扫描 + 每个 Goal 一份结论 + **失败必须留痕** (`errors[]`),
24
+ * 不许"某个 Goal 巡检抛错 → 这一轮当它不存在"。
25
+ * 2. **用户只看到闭集**: `createVisibleStateProbe` 以前是**裸透传** (`return deps.visible(input)`),
26
+ * 端口给什么就往外说什么 —— 于是"用户视野只有这几类"只是端口自觉。现在它**逐值校验闭集**
27
+ * (`USER_VISIBLE_STATES`), 闭集外的值 / 端口抛错一律**拒绝**并说清原因, 而不是把内部词
28
+ * 顺手暴露给用户。
29
+ *
30
+ * ### 五类还是六类 (如实说明, 不改冻结层)
31
+ *
32
+ * 设计稿 §8 写的是"用户可见只暴露**五类**": 正在执行 / 等待外部回复 / 子 Agent 被阻塞 /
33
+ * 暂时没有进展 / 需要你决定。冻结层 (`types.ts`) 在 2026-09-25 接线时**追加了第 6 类** `ended`
34
+ * (理由: 前五类里没有"已结束", 已结束的目标只能借用 `executing` 或 `needs_your_decision`,
35
+ * 那正是 P3/P4 要防的假象)。改冻结层要单独一个提交 + 更新类型计数门, **不归 M3**。
36
+ * 所以本接缝按**冻结闭集** (五类 + `ended`) 钉住: 断言"返回值只能是闭集里的值"是硬的,
37
+ * 断言"闭集有几个值"留给冻结层 (`goal-flywheel-types.test.ts` 的计数门)。
38
+ */
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.INTERNAL_VISIBLE_WORDS = exports.USER_FACING_STATES = exports.MONITOR_SWEEP_MAX_LIMIT = exports.MONITOR_SWEEP_DEFAULT_LIMIT = exports.MONITOR_SEAM_ID = void 0;
41
+ exports.isUserVisibleState = isUserVisibleState;
42
+ exports.scanInternalLeak = scanInternalLeak;
43
+ exports.userFacingState = userFacingState;
44
+ exports.createMonitorSeam = createMonitorSeam;
45
+ exports.createVisibleStateProbe = createVisibleStateProbe;
46
+ exports.describeVisibleState = describeVisibleState;
47
+ const types_js_1 = require("../types.js");
48
+ // 自己那个阶段的实现模块 (P3, 纯函数): "用户该看到哪一类"的判定只有一份
49
+ const work_monitor_js_1 = require("../work-monitor.js");
50
+ const seams_js_1 = require("./seams.js");
51
+ exports.MONITOR_SEAM_ID = 'monitor';
52
+ /** 统一巡检的默认/上限 (有界: 不许在 tick 里无界扫盘) */
53
+ exports.MONITOR_SWEEP_DEFAULT_LIMIT = 20;
54
+ exports.MONITOR_SWEEP_MAX_LIMIT = 200;
55
+ function errText(e) {
56
+ return String(e?.message || e).slice(0, 300);
57
+ }
58
+ // ============================================================================
59
+ // §1. 用户可见面: 闭集校验 + 内部词扫描 (纯函数, 可被门/变异验证复用)
60
+ // ============================================================================
61
+ /**
62
+ * 一个 continuation 决策是否长得像 `ContinuationDecision` (只做形状检查, 不猜内容)。
63
+ * 用它把 `decision?: unknown` 安全地喂给真 P3 判定: 不像就传 null (宁可少一层精化, 不许瞎 cast)。
64
+ */
65
+ function isDecisionLike(x) {
66
+ if (!x || typeof x !== 'object')
67
+ return false;
68
+ const d = x;
69
+ return typeof d.decision === 'string' || typeof d.state === 'string';
70
+ }
71
+ /** 用户可见态的**闭集** (冻结层唯一事实来源; 本文件不另立一份) */
72
+ exports.USER_FACING_STATES = types_js_1.USER_VISIBLE_STATES;
73
+ function isUserVisibleState(x) {
74
+ return typeof x === 'string' && exports.USER_FACING_STATES.includes(x);
75
+ }
76
+ /**
77
+ * **不该出现在用户视野里**的内部词 (设计 §8 的名单 + 同义写法)。
78
+ *
79
+ * 为什么连 `retry_count` / `leaseOwner` 这种代码标识也扫: 界面拼字符串时最常干的事就是
80
+ * 把内部字段名顺手带出去 (`lease owner=worker-3`), 只扫中文词会漏掉这一类。
81
+ */
82
+ exports.INTERNAL_VISIBLE_WORDS = [
83
+ 'lease',
84
+ 'leaseOwner',
85
+ 'lease_until',
86
+ 'reducer',
87
+ 'internal status',
88
+ 'retry counter',
89
+ 'retryCounter',
90
+ 'retry_count',
91
+ 'worker owner',
92
+ 'workerOwner',
93
+ 'attempts',
94
+ '抢租约',
95
+ '租约',
96
+ '内部状态',
97
+ '重试计数',
98
+ ];
99
+ /** 扫出文本里出现的内部词 (空数组 = 干净)。大小写不敏感; 只报词, 不改文本。 */
100
+ function scanInternalLeak(text) {
101
+ const s = String(text ?? '');
102
+ if (!s)
103
+ return [];
104
+ const lower = s.toLowerCase();
105
+ const hits = [];
106
+ for (const w of exports.INTERNAL_VISIBLE_WORDS) {
107
+ if (lower.includes(w.toLowerCase()))
108
+ hits.push(w);
109
+ }
110
+ return hits;
111
+ }
112
+ /** 闭集里的一个状态 → 用户看到的**全部**内容 (只有这三样, 没有内部字段) */
113
+ function userFacingState(state) {
114
+ if (!isUserVisibleState(state)) {
115
+ return (0, seams_js_1.refuse)('only_supervisor_decides_continuation', `拒绝: 用户可见态 ${JSON.stringify(state) ?? String(state)} 不在冻结闭集里 `
116
+ + `(${exports.USER_FACING_STATES.join(' / ')}) —— 用户可见态是 continuation 的投影, 不许第三方编一个状态出来`);
117
+ }
118
+ const labels = types_js_1.USER_VISIBLE_STATE_LABELS[state];
119
+ return { state, zh: labels.zh, en: labels.en };
120
+ }
121
+ // ============================================================================
122
+ // §2. 接缝本体
123
+ // ============================================================================
124
+ function createMonitorSeam(deps) {
125
+ // 可见面来源: 宿主注入的 `visible` 优先; 否则用**真 P3** 的判定 (注入的 continuation 是它的输入)。
126
+ // 两条路都不通 ⇒ 探针会如实拒绝 (不编一个"正在执行")。
127
+ const visiblePort = deps.visible ?? (deps.continuationOf
128
+ ? async (input) => {
129
+ const raw = await deps.continuationOf(input.goalId);
130
+ // 盘上的 continuation 允许缺字段 (goal-store 的 `pendingReports?` 是 optional; `setContinuation`
131
+ // 又是部分覆盖) —— 归一化只有**一份**实现 (`work-monitor.normalizeContinuationRecord`),
132
+ // 判定层(`toUserVisibleState`)自己也调它; 这里用同一个函数是为了让"接缝这一路也没传半份记录"可读。
133
+ const continuation = (0, work_monitor_js_1.normalizeContinuationRecord)(raw);
134
+ const decision = isDecisionLike(input.decision) ? input.decision : null;
135
+ return (0, work_monitor_js_1.toUserVisibleState)(continuation, input.blocks ?? [], decision);
136
+ }
137
+ : undefined);
138
+ const visibleOrRefuse = createVisibleStateProbe({ visible: visiblePort });
139
+ return {
140
+ id: exports.MONITOR_SEAM_ID,
141
+ stage: 'M3',
142
+ async sweep(input) {
143
+ if (!input.goalId) {
144
+ return (0, seams_js_1.refuse)('all_terminal_paths_pass_close_run', '拒绝: 阻塞巡检没有 goalId → 拿到的是"谁都不卡"的假结论');
145
+ }
146
+ return deps.collect({ goalId: input.goalId, now: input.now, runnerAvailable: input.runnerAvailable });
147
+ },
148
+ async handle(input) {
149
+ if (!input.blocks?.length)
150
+ return { actions: [], escalated: [], takeovers: [], requests: [] };
151
+ return deps.handle({ goalId: input.goalId, blocks: input.blocks, now: input.now });
152
+ },
153
+ pendingGoals(limit) {
154
+ return deps.goalsWithPendingWork(limit);
155
+ },
156
+ /**
157
+ * 统一监控 (M3): 一次调用 = 所有待回报 Goal 的阻塞结论。
158
+ *
159
+ * 纪律:
160
+ * · **子 Agent 不许巡检别人的阻塞**: `caller='child_agent'` → 拒 (规则 ⑤, 一条都不查);
161
+ * · **有界**: `limit` 夹在 [1, 200] (默认 20) —— tick 里扫盘不许无界;
162
+ * · **不静默**: 单个 Goal 巡检/处置抛错 → 该 Goal 的 `error` 与顶层 `errors[]` 都留痕,
163
+ * 而不是"这一轮它不存在"。全失败时 `silentRisk=true` 并要求交人;
164
+ * · 没有阻塞的 Goal **也占一格** (它有待回报工作 → 用户看到的是"等待外部回复", 不是"没人管")。
165
+ */
166
+ async sweepAll(input) {
167
+ if (input.caller === 'child_agent') {
168
+ return (0, seams_js_1.refuse)('child_cannot_mutate_goal', '拒绝: 子 Agent 不许巡检/处置其它执行者的阻塞 —— 巡检与处置是父/调度器的责任面');
169
+ }
170
+ const limit = Math.min(Math.max(Math.floor(input.limit ?? exports.MONITOR_SWEEP_DEFAULT_LIMIT) || 1, 1), exports.MONITOR_SWEEP_MAX_LIMIT);
171
+ const view = {
172
+ goals: [], blockCount: 0, escalated: [], takeovers: [], requests: [],
173
+ visibleCounts: {}, errors: [], silentRisk: false,
174
+ };
175
+ let pending = [];
176
+ try {
177
+ const raw = await deps.goalsWithPendingWork(limit);
178
+ pending = Array.isArray(raw) ? raw.filter((g) => !!g?.goalId).slice(0, limit) : [];
179
+ if (!Array.isArray(raw))
180
+ view.errors.push('待回报 Goal 清单不是数组 (宿主 bug) —— 无法巡检, 不许当成"没有阻塞"');
181
+ }
182
+ catch (e) {
183
+ view.errors.push(`取待回报 Goal 清单失败: ${errText(e)}`);
184
+ view.silentRisk = true;
185
+ return view; // 拿不到事实就如实报 (不是"巡检过了, 没问题")
186
+ }
187
+ for (const g of pending) {
188
+ const cell = { goalId: g.goalId, blocks: [], handling: null, visibleState: null, error: null };
189
+ try {
190
+ const blocks = await deps.collect({ goalId: g.goalId, now: input.now, runnerAvailable: input.runnerAvailable });
191
+ cell.blocks = Array.isArray(blocks) ? blocks : [];
192
+ if (cell.blocks.length > 0) {
193
+ cell.handling = await deps.handle({ goalId: g.goalId, blocks: cell.blocks, now: input.now });
194
+ view.escalated.push(...(cell.handling?.escalated ?? []));
195
+ view.takeovers.push(...(cell.handling?.takeovers ?? []));
196
+ view.requests.push(...(cell.handling?.requests ?? []));
197
+ }
198
+ const vis = await visibleOrRefuse({ goalId: g.goalId, blocks: cell.blocks, now: input.now });
199
+ if (vis && typeof vis === 'object' && vis.ok === false) {
200
+ // 可见面拒绝 → 这一格如实留痕 (不是静默给个"正在执行")
201
+ cell.error = vis.reason;
202
+ view.errors.push(`goal=${g.goalId} 可见态: ${vis.reason}`);
203
+ }
204
+ else if (vis) {
205
+ cell.visibleState = vis;
206
+ view.visibleCounts[cell.visibleState] = (view.visibleCounts[cell.visibleState] ?? 0) + 1;
207
+ }
208
+ view.blockCount += cell.blocks.length;
209
+ }
210
+ catch (e) {
211
+ cell.error = errText(e);
212
+ view.errors.push(`goal=${g.goalId} 巡检失败: ${cell.error}`);
213
+ }
214
+ view.goals.push(cell);
215
+ }
216
+ const inspected = view.goals.filter((c) => c.error === null).length;
217
+ if (pending.length > 0 && inspected === 0) {
218
+ view.silentRisk = true;
219
+ view.escalated.push(...pending.map((g) => `巡检未完成: ${g.goalId}`));
220
+ }
221
+ return view;
222
+ },
223
+ async visibleState(input) {
224
+ return visibleOrRefuse({ goalId: input.goalId, blocks: input.blocks, decision: input.decision, now: input.now });
225
+ },
226
+ };
227
+ }
228
+ /**
229
+ * 用户可见态探针: 只回答"用户该看到哪一类", 且**只**能是冻结闭集里的值。
230
+ *
231
+ * 硬化的三件事 (旧版是 `return deps.visible(input)` 的裸透传):
232
+ * ① **闭集校验**: 端口给出闭集外的值 (或 undefined / null / 对象) → 拒绝 + 说清收到了什么 ——
233
+ * 用户视野的假象比"什么都不显示"更贵;
234
+ * ② **端口抛错不吞**: 原文进拒绝理由 (不静默降级成 `executing`);
235
+ * ③ **缺端口 = 拒**: 没有可见面来源就不编一个状态 (旧版会直接 `TypeError`)。
236
+ *
237
+ * 返回值用冻结类型 + `userFacingState` 的文案; 调用方拿到的就是用户看到的东西。
238
+ */
239
+ function createVisibleStateProbe(deps) {
240
+ return async (input) => {
241
+ if (typeof deps.visible !== 'function') {
242
+ return (0, seams_js_1.refuse)('only_supervisor_decides_continuation', '拒绝: 没有注入用户可见面 (拿不到权威 continuation 的投影) —— 不许编一个状态给用户');
243
+ }
244
+ let raw;
245
+ try {
246
+ raw = await deps.visible(input);
247
+ }
248
+ catch (e) {
249
+ return (0, seams_js_1.refuse)('only_supervisor_decides_continuation', `拒绝: 用户可见面抛错 (${errText(e)}) —— 不静默降级成"正在执行"`);
250
+ }
251
+ const view = userFacingState(raw);
252
+ if (view.ok === false)
253
+ return view;
254
+ return view.state;
255
+ };
256
+ }
257
+ /**
258
+ * 给界面用的**唯一**文案出口: 状态 → `{state, zh, en}` (闭集外的值直接拒绝)。
259
+ * 界面不许自己拼状态名, 也不许把内部字段带出去 (见 `scanInternalLeak`)。
260
+ */
261
+ function describeVisibleState(state) {
262
+ return userFacingState(state);
263
+ }
264
+ //# sourceMappingURL=monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../../../../src/agents/goal-flywheel/wiring/monitor.ts"],"names":[],"mappings":"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"}