agent-embassy 1.2.0 → 1.4.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/CHANGELOG.md +41 -0
- package/CONTRIBUTING.md +50 -16
- package/README.md +57 -25
- package/README.zh-CN.md +45 -23
- package/SECURITY.md +68 -48
- package/dist/src/gateway/claude-helper-protocol.d.ts +1 -0
- package/dist/src/gateway/claude-helper-protocol.js +4 -2
- package/dist/src/gateway/claude-helper-protocol.js.map +1 -1
- package/dist/src/gateway/claude-helper-supervisor.d.ts +1 -0
- package/dist/src/gateway/claude-helper-supervisor.js +3 -1
- package/dist/src/gateway/claude-helper-supervisor.js.map +1 -1
- package/dist/src/gateway/claude-runtime.d.ts +0 -2
- package/dist/src/gateway/claude-runtime.js +6 -17
- package/dist/src/gateway/claude-runtime.js.map +1 -1
- package/dist/src/gateway/cli-copy.d.ts +1 -1
- package/dist/src/gateway/cli-copy.en.d.ts +4 -1
- package/dist/src/gateway/cli-copy.en.js +7 -3
- package/dist/src/gateway/cli-copy.en.js.map +1 -1
- package/dist/src/gateway/cli-copy.js +3 -0
- package/dist/src/gateway/cli-copy.js.map +1 -1
- package/dist/src/gateway/cli-copy.zh-CN.d.ts +4 -1
- package/dist/src/gateway/cli-copy.zh-CN.js +7 -3
- package/dist/src/gateway/cli-copy.zh-CN.js.map +1 -1
- package/dist/src/gateway/cli.d.ts +2 -5
- package/dist/src/gateway/cli.js +41 -67
- package/dist/src/gateway/cli.js.map +1 -1
- package/dist/src/gateway/codex-app-server.d.ts +2 -8
- package/dist/src/gateway/codex-app-server.js +36 -62
- package/dist/src/gateway/codex-app-server.js.map +1 -1
- package/dist/src/gateway/codex-local-transport.d.ts +4 -10
- package/dist/src/gateway/codex-local-transport.js +13 -16
- package/dist/src/gateway/codex-local-transport.js.map +1 -1
- package/dist/src/gateway/compatibility.d.ts +0 -27
- package/dist/src/gateway/compatibility.js +1 -101
- package/dist/src/gateway/compatibility.js.map +1 -1
- package/dist/src/gateway/config.d.ts +1 -4
- package/dist/src/gateway/config.js +0 -10
- package/dist/src/gateway/config.js.map +1 -1
- package/dist/src/gateway/control.d.ts +2 -21
- package/dist/src/gateway/control.js +7 -36
- package/dist/src/gateway/control.js.map +1 -1
- package/dist/src/gateway/dashboard-copy.d.ts +1 -1
- package/dist/src/gateway/dashboard-copy.en.d.ts +21 -8
- package/dist/src/gateway/dashboard-copy.en.js +40 -27
- package/dist/src/gateway/dashboard-copy.en.js.map +1 -1
- package/dist/src/gateway/dashboard-copy.js +21 -8
- package/dist/src/gateway/dashboard-copy.js.map +1 -1
- package/dist/src/gateway/dashboard-copy.zh-CN.d.ts +21 -8
- package/dist/src/gateway/dashboard-copy.zh-CN.js +40 -27
- package/dist/src/gateway/dashboard-copy.zh-CN.js.map +1 -1
- package/dist/src/gateway/dashboard-model.d.ts +4 -9
- package/dist/src/gateway/dashboard-model.js +159 -46
- package/dist/src/gateway/dashboard-model.js.map +1 -1
- package/dist/src/gateway/dashboard.js +27 -16
- package/dist/src/gateway/dashboard.js.map +1 -1
- package/dist/src/gateway/instance-lease.d.ts +2 -3
- package/dist/src/gateway/instance-lease.js +17 -140
- package/dist/src/gateway/instance-lease.js.map +1 -1
- package/dist/src/gateway/live-dashboard-app/app.js +62 -63
- package/dist/src/gateway/live-dashboard-command.d.ts +5 -1
- package/dist/src/gateway/live-dashboard-command.js +8 -6
- package/dist/src/gateway/live-dashboard-command.js.map +1 -1
- package/dist/src/gateway/live-dashboard-http.d.ts +0 -4
- package/dist/src/gateway/live-dashboard-http.js +20 -94
- package/dist/src/gateway/live-dashboard-http.js.map +1 -1
- package/dist/src/gateway/live-dashboard-protocol.d.ts +1 -5
- package/dist/src/gateway/live-dashboard-protocol.js +0 -42
- package/dist/src/gateway/live-dashboard-protocol.js.map +1 -1
- package/dist/src/gateway/live-dashboard-server.d.ts +2 -2
- package/dist/src/gateway/live-dashboard-server.js +18 -4
- package/dist/src/gateway/live-dashboard-server.js.map +1 -1
- package/dist/src/gateway/live-dashboard.d.ts +3 -6
- package/dist/src/gateway/live-dashboard.js +6 -42
- package/dist/src/gateway/live-dashboard.js.map +1 -1
- package/dist/src/gateway/progress-watch-machine.d.ts +6 -5
- package/dist/src/gateway/progress-watch-machine.js +6 -6
- package/dist/src/gateway/progress-watch-machine.js.map +1 -1
- package/dist/src/gateway/provenance-envelope.d.ts +1 -0
- package/dist/src/gateway/provenance-envelope.js +11 -4
- package/dist/src/gateway/provenance-envelope.js.map +1 -1
- package/dist/src/gateway/providers.d.ts +2 -21
- package/dist/src/gateway/providers.js +21 -261
- package/dist/src/gateway/providers.js.map +1 -1
- package/dist/src/gateway/server.js +0 -3
- package/dist/src/gateway/server.js.map +1 -1
- package/dist/src/gateway/service.d.ts +5 -15
- package/dist/src/gateway/service.js +101 -265
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/gateway/store.d.ts +9 -21
- package/dist/src/gateway/store.js +360 -140
- package/dist/src/gateway/store.js.map +1 -1
- package/dist/src/gateway/types.d.ts +1 -6
- package/dist/src/gateway/types.js.map +1 -1
- package/docs/CONFIGURATION.md +102 -0
- package/docs/CONFIGURATION.zh-CN.md +72 -0
- package/docs/DASHBOARD.md +103 -0
- package/docs/DASHBOARD.zh-CN.md +47 -0
- package/docs/DELIVERY.md +84 -0
- package/docs/DELIVERY.zh-CN.md +53 -0
- package/docs/GATEWAY-ARCHITECTURE.md +249 -153
- package/package.json +8 -4
- package/skills/embassy-peer/SKILL.md +25 -10
- package/dist/src/gateway/claude-compatibility-scratch.d.ts +0 -18
- package/dist/src/gateway/claude-compatibility-scratch.js +0 -158
- package/dist/src/gateway/claude-compatibility-scratch.js.map +0 -1
- package/dist/src/gateway/live-dashboard-bootstrap.d.ts +0 -36
- package/dist/src/gateway/live-dashboard-bootstrap.js +0 -176
- package/dist/src/gateway/live-dashboard-bootstrap.js.map +0 -1
- package/docs/DESIGN.md +0 -134
|
@@ -19,7 +19,7 @@ export const dashboardCopyZhCn = {
|
|
|
19
19
|
"inbound.paired.body": "每个已注册的 Codex 任务只接受沿显式 Claude 同意边发送的消息。",
|
|
20
20
|
"inbound.open.badge": "开放入站",
|
|
21
21
|
"inbound.open.body": "同一操作系统用户下的任何在线 Claude 会话都可发起入站工作;显式 Codex 发送仍需同意边。",
|
|
22
|
-
"inbound.noPair.body": "
|
|
22
|
+
"inbound.noPair.body": "当前没有同意边;配对模式会拒绝未配对发送方。",
|
|
23
23
|
"exchange.claude.title": "Claude 会话",
|
|
24
24
|
"exchange.claude.note": "同意边端点",
|
|
25
25
|
"exchange.codex.title": "Codex 任务",
|
|
@@ -64,6 +64,12 @@ export const dashboardCopyZhCn = {
|
|
|
64
64
|
"guidance.reobserveCodex.title": "需要重新观察 Codex 注册",
|
|
65
65
|
"guidance.reobserveCodex.body": "已保存路由目前没有匹配的在线端点证明。",
|
|
66
66
|
"guidance.reobserveCodex.action": "在该 Codex 任务内重新运行 register-codex。",
|
|
67
|
+
"guidance.codexReactivationRequired.title": "已保存的 Codex 路由不在线",
|
|
68
|
+
"guidance.codexReactivationRequired.body": "同意边仍然保留,但已保存的 Codex 路由当前没有在线端点证明。",
|
|
69
|
+
"guidance.codexReactivationRequired.action": "在该 Codex 任务内运行 embassy register-codex --alias {alias}。",
|
|
70
|
+
"guidance.consentEdgeUnavailable.title": "同意边端点不可用",
|
|
71
|
+
"guidance.consentEdgeUnavailable.body": "同意边仍然保留,但当前有界快照中缺少这个已保存端点。",
|
|
72
|
+
"guidance.consentEdgeUnavailable.action": "请先运行 embassy refresh-dashboard。如果端点仍然缺失,请恢复“范围”中显示的确切端点;无需重建同意边。",
|
|
67
73
|
"guidance.claudeNotObserved.title": "已选择的 Claude 会话不可见",
|
|
68
74
|
"guidance.claudeNotObserved.body": "当前本地发现中没有该会话。",
|
|
69
75
|
"guidance.claudeNotObserved.action": "保持 Claude 运行并启用 crossSessionInbound,刷新后选择其当前别名。",
|
|
@@ -79,6 +85,9 @@ export const dashboardCopyZhCn = {
|
|
|
79
85
|
"guidance.queueStalled.title": "排队投递停滞",
|
|
80
86
|
"guidance.queueStalled.body": "最早接受的消息已排队超过投递截止时间的一半。",
|
|
81
87
|
"guidance.queueStalled.action": "运行 embassy status。不要重发已接受的工作;Embassy 会跟踪到结算或过期。",
|
|
88
|
+
"guidance.recipientWaitingInput.title": "消息已写入邮箱,但接收方仍未被观察到",
|
|
89
|
+
"guidance.recipientWaitingInput.body": "Embassy 已将消息写入接收方消息邮箱,且当前未观察到接收方会话。",
|
|
90
|
+
"guidance.recipientWaitingInput.action": "请在接收方会话自己的窗口中查看;不要重发已接受的消息。",
|
|
82
91
|
"guidance.unconfirmed.title": "无法确认投递",
|
|
83
92
|
"guidance.unconfirmed.body": "本地传输写入已完成,但该次尝试结算时没有可用的终结原生证据。",
|
|
84
93
|
"guidance.unconfirmed.action": "重试前检查接收方;重试可能造成重复消息。",
|
|
@@ -95,8 +104,8 @@ export const dashboardCopyZhCn = {
|
|
|
95
104
|
"guidance.codexSuccessionRecovery.body": "任务更换未能到达安全的活跃代次。Embassy 会让 Codex 注册保持离线,而不会猜测哪个任务拥有路由。",
|
|
96
105
|
"guidance.codexSuccessionRecovery.action": "请勿发送消息、重试任务更换或假定任一任务处于活跃状态。运行 embassy status,并保留当前状态以供手动恢复。",
|
|
97
106
|
"guidance.progressWatch.title": "受监视的对话已安静",
|
|
98
|
-
"guidance.progressWatch.body": "Embassy
|
|
99
|
-
"guidance.progressWatch.action": "
|
|
107
|
+
"guidance.progressWatch.body": "Embassy 正在监视这项以完成为终止条件的对话,并观察到安静阶段或已降级为仅路由证据。",
|
|
108
|
+
"guidance.progressWatch.action": "请检查工作方路由和最近的监视历史。任一参与方都可用精确的 DONE: 结束监视;所有者也可运行 embassy untrack --conversation <token>。",
|
|
100
109
|
"transit.eyebrow": "传输中",
|
|
101
110
|
"transit.title": "队列状态",
|
|
102
111
|
"transit.queued": "排队消息",
|
|
@@ -107,7 +116,7 @@ export const dashboardCopyZhCn = {
|
|
|
107
116
|
"count.atLeast": "至少 {count}",
|
|
108
117
|
"watches.eyebrow": "进度监视",
|
|
109
118
|
"watches.title": "活跃进度监视",
|
|
110
|
-
"watches.note": "
|
|
119
|
+
"watches.note": "任一参与方报告精确的 DONE: 都会结束监视;不显示消息正文或完整对话令牌。",
|
|
111
120
|
"watches.empty": "当前没有受监视的对话。",
|
|
112
121
|
"watches.column.conversation": "对话",
|
|
113
122
|
"watches.column.parties": "所有者 → 工作方",
|
|
@@ -120,15 +129,17 @@ export const dashboardCopyZhCn = {
|
|
|
120
129
|
"watches.phase.episode": "安静阶段",
|
|
121
130
|
"watches.capability.conversation": "对话锚定",
|
|
122
131
|
"watches.capability.route": "仅路由",
|
|
123
|
-
"watches.workerComplete": "工作方已报告完成;仍需所有者确认。",
|
|
124
132
|
"watches.history.title": "最近监视终局",
|
|
125
133
|
"watches.event.opened": "已开启",
|
|
126
134
|
"watches.event.nudge": "已提醒",
|
|
127
|
-
"watches.event.workerReportedComplete": "
|
|
135
|
+
"watches.event.workerReportedComplete": "工作方已完成",
|
|
128
136
|
"watches.event.capabilityDegraded": "仅路由证据",
|
|
129
|
-
"watches.event.
|
|
137
|
+
"watches.event.conversationRebound": "会话已重新绑定",
|
|
138
|
+
"watches.event.replaced": "已由较新的监视替代",
|
|
139
|
+
"watches.event.done": "所有者已完成",
|
|
130
140
|
"watches.event.unresponsive": "无响应",
|
|
131
141
|
"watches.event.endpointRetired": "端点已退役",
|
|
142
|
+
"watches.event.pairRemoved": "配对已移除",
|
|
132
143
|
"watches.event.disabled": "监视已禁用",
|
|
133
144
|
"activity.eyebrow": "活动记录",
|
|
134
145
|
"activity.title": "最近投递证据",
|
|
@@ -144,12 +155,12 @@ export const dashboardCopyZhCn = {
|
|
|
144
155
|
"activity.history.one": "1 个阶段",
|
|
145
156
|
"activity.history.many": "{count} 个阶段",
|
|
146
157
|
"activity.meaning.delivered": "已达到 delivered 终局状态。这不表示模型已经读取或处理该消息。",
|
|
147
|
-
"activity.meaning.delivered.codexToClaude": "
|
|
158
|
+
"activity.meaning.delivered.codexToClaude": "Embassy 已立即将消息写入 Claude 的原生消息邮箱,并未等待路由空闲。这不表示模型已经读取或处理该消息。",
|
|
148
159
|
"activity.meaning.delivered.claudeToCodex": "Codex App Server 已接受该轮输入。这不表示模型已经完成或处理该输入。",
|
|
149
160
|
"activity.meaning.unconfirmed": "传输写入已完成,但终结原生证据不可用。重试前请检查接收方。",
|
|
150
161
|
"activity.meaning.ambiguous": "不确定写入后的结果未知。请勿自动重试。",
|
|
151
162
|
"activity.meaning.other": "这是最新的规范化投递状态。",
|
|
152
|
-
"activity.meaning.queued": "
|
|
163
|
+
"activity.meaning.queued": "正在本地等待提供方写入;仅 Claude 忙碌状态不会导致排队。是进行中,不代表成功。",
|
|
153
164
|
"activity.meaning.dispatching": "正在移交给接收端连接器。是进行中,不代表成功。",
|
|
154
165
|
"activity.meaning.transportWritten": "已写入接收方传输通道,最终回执尚未到达。是进行中,不代表成功。",
|
|
155
166
|
"activity.meaning.held": "写入已完成;接收方在其审批闸门后暂挂处理。",
|
|
@@ -204,17 +215,15 @@ export const dashboardCopyZhCn = {
|
|
|
204
215
|
"diagnostics.connectors": "连接器",
|
|
205
216
|
"diagnostics.connectors.empty": "没有连接器元数据。",
|
|
206
217
|
"diagnostics.connectors.caption": "本地提供方连接器状态",
|
|
207
|
-
"diagnostics.compatibilityChecks": "
|
|
208
|
-
"diagnostics.compatibilityChecks.empty": "
|
|
209
|
-
"diagnostics.compatibilityChecks.caption": "
|
|
218
|
+
"diagnostics.compatibilityChecks": "提供方兼容性",
|
|
219
|
+
"diagnostics.compatibilityChecks.empty": "暂无提供方兼容性状态。",
|
|
220
|
+
"diagnostics.compatibilityChecks.caption": "自动提供方兼容性状态",
|
|
210
221
|
"diagnostics.version": "版本",
|
|
211
222
|
"diagnostics.tier": "层级",
|
|
212
223
|
"diagnostics.checkedAt": "检查时间",
|
|
213
|
-
"diagnostics.
|
|
214
|
-
"
|
|
215
|
-
"
|
|
216
|
-
"compatibilityTier.certified": "已认证",
|
|
217
|
-
"compatibilityTier.schema_attested": "架构已证明",
|
|
224
|
+
"diagnostics.failure": "失败项",
|
|
225
|
+
"compatibilityTier.certified": "受支持",
|
|
226
|
+
"compatibilityTier.schema_attested": "旧版观察",
|
|
218
227
|
"compatibilityTier.incompatible": "不兼容",
|
|
219
228
|
"diagnostics.protocol": "协议",
|
|
220
229
|
"diagnostics.health": "健康状态",
|
|
@@ -275,7 +284,7 @@ export const dashboardCopyZhCn = {
|
|
|
275
284
|
"route.incompatible": "不兼容",
|
|
276
285
|
"route.disabled": "已停用",
|
|
277
286
|
"route.meaning.idle": "已启用、兼容,可以承载消息。",
|
|
278
|
-
"route.meaning.busy": "
|
|
287
|
+
"route.meaning.busy": "发往 Claude 的消息仍会立即写入原生消息邮箱;发往 Codex 的普通消息会等待路由空闲。",
|
|
279
288
|
"route.meaning.awaitingApproval": "正在等待提供方的原生审批。",
|
|
280
289
|
"route.meaning.stale": "当前没有端点证明;请刷新并恢复该路由。",
|
|
281
290
|
"route.meaning.offline": "该路由的连接器无法访问。",
|
|
@@ -325,6 +334,7 @@ export const dashboardCopyZhCn = {
|
|
|
325
334
|
"live.connection.connecting": "正在连接…",
|
|
326
335
|
"live.connection.connected": "数据流已连接",
|
|
327
336
|
"live.connection.unavailable": "观察器不可用 — 正在重试",
|
|
337
|
+
"live.connection.capacity": "已打开 4 个实时面板窗口——请关闭一个,然后重新连接",
|
|
328
338
|
"live.connection.disconnected": "连接已断开 — 请点击“重新连接”",
|
|
329
339
|
"live.connection.fatal": "面板会话不可用",
|
|
330
340
|
"live.connection.paused": "更新已暂停",
|
|
@@ -341,8 +351,6 @@ export const dashboardCopyZhCn = {
|
|
|
341
351
|
"live.diagnostics.title": "诊断",
|
|
342
352
|
"live.metric.revision": "流版本",
|
|
343
353
|
"live.stream.reset": "来源已重启;视图已重新同步。",
|
|
344
|
-
"live.bootstrap.title": "打开 Embassy 实时面板",
|
|
345
|
-
"live.bootstrap.open": "打开 Embassy 实时面板",
|
|
346
354
|
"live.http.badRequest": "请求无效。",
|
|
347
355
|
"live.http.forbidden": "禁止访问。",
|
|
348
356
|
"live.http.notFound": "未找到。",
|
|
@@ -350,7 +358,7 @@ export const dashboardCopyZhCn = {
|
|
|
350
358
|
"live.http.bodyTooLarge": "请求正文过大。",
|
|
351
359
|
"live.http.targetTooLarge": "请求目标过长。",
|
|
352
360
|
"live.http.unsupportedMediaType": "不支持此媒体类型。",
|
|
353
|
-
"live.http.tooManyStreams": "
|
|
361
|
+
"live.http.tooManyStreams": "已打开 4 个实时面板窗口。请关闭一个,然后重新连接。",
|
|
354
362
|
"live.http.headersTooLarge": "请求头过大。",
|
|
355
363
|
"live.http.snapshotUnavailable": "面板快照不可用。",
|
|
356
364
|
"live.http.requestFailed": "请求失败。",
|
|
@@ -385,8 +393,10 @@ export const dashboardCopyZhCn = {
|
|
|
385
393
|
"app.overview.node.codex.title": "codex",
|
|
386
394
|
"app.overview.node.codex.sub": "任务",
|
|
387
395
|
"app.overview.count.codex": "已就绪 {ready} · 已注册 {total} · 仅监控 {monitorOnly}",
|
|
388
|
-
"app.overview.noPair.title": "
|
|
396
|
+
"app.overview.noPair.title": "没有同意边",
|
|
389
397
|
"app.overview.noPair.body": "配对入站仅接受由显式同意边连接到已注册 Codex 任务的发送方;Codex 也只沿显式边路由。",
|
|
398
|
+
"app.overview.degradedEdge": "有一条已显示的同意边尚未就绪。",
|
|
399
|
+
"app.overview.degradedEdges": "部分同意边仍然保留,但尚未就绪。",
|
|
390
400
|
"app.overview.queueC2x": "Claude → Codex",
|
|
391
401
|
"app.overview.queueX2c": "Claude ← Codex",
|
|
392
402
|
"app.overview.depth": "深度",
|
|
@@ -422,9 +432,13 @@ export const dashboardCopyZhCn = {
|
|
|
422
432
|
"app.routes.claudeSessions": "Claude 会话",
|
|
423
433
|
"app.routes.codexRoutes": "Codex 任务",
|
|
424
434
|
"app.routes.pairs": "同意边",
|
|
425
|
-
"app.routes.pairDescription": "{claude}
|
|
426
|
-
"app.routes.
|
|
427
|
-
"app.routes.
|
|
435
|
+
"app.routes.pairDescription": "同意边:{claude} ↔ {codex}",
|
|
436
|
+
"app.routes.pairState.degraded": "已降级",
|
|
437
|
+
"app.routes.pairState.unavailable": "不可用",
|
|
438
|
+
"app.routes.pairDegradedReason": "同意边仍然保留;一端或两端路由需要处理。",
|
|
439
|
+
"app.routes.pairUnavailableReason": "同意边仍然保留;此快照中缺少一端或两端已保存路由的记录。",
|
|
440
|
+
"app.routes.pairSummary": "就绪:{ready} · 同意边:{total}",
|
|
441
|
+
"app.routes.unpairedSummary": "{claude} 个就绪 Claude 端点与 {codex} 个就绪 Codex 端点没有同意边。",
|
|
428
442
|
"app.routes.pairCmd.consequence": "仅在 {claude} 与 {codex} 之间建立同意;现有边保持不变。",
|
|
429
443
|
"app.routes.unpairCmd.consequence": "仅移除 {claude} 与 {codex} 之间的同意;相邻边上的工作保持活动。",
|
|
430
444
|
"app.routes.selectCmd.title": "建立同意边",
|
|
@@ -480,8 +494,7 @@ export const dashboardCopyZhCn = {
|
|
|
480
494
|
"app.diag.col.version": "版本",
|
|
481
495
|
"app.diag.col.compat": "兼容性",
|
|
482
496
|
"app.diag.versions.rangeAbsent": "实时契约不携带受支持的协议范围,因此这里只显示兼容性判定。",
|
|
483
|
-
"app.diag.
|
|
484
|
-
"app.diag.attestation.absent": "实时契约不携带证明信息。请用下面的命令查看本地状态。",
|
|
497
|
+
"app.diag.providerCompatibility.title": "提供方兼容性",
|
|
485
498
|
"app.diag.lease.title": "租约 / 实例",
|
|
486
499
|
"app.diag.lease.absent": "实时契约不携带租约状态。请用下面的命令查看本地状态。",
|
|
487
500
|
"app.diag.limits": "限制与压力",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-copy.zh-CN.js","sourceRoot":"","sources":["../../../src/gateway/dashboard-copy.zh-CN.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dashboard-copy.zh-CN.js","sourceRoot":"","sources":["../../../src/gateway/dashboard-copy.zh-CN.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type CompatibilityTier, type CompatibilitySurface } from "./compatibility.js";
|
|
2
2
|
import type { AlertSeverity, CompatibilityState, ConnectorHealth, DeliveryState, GatewayProvider, GatewayPublicSnapshot, MessageDirection, PublicAvailablePeerState, RouteCounters, RouteState } from "./types.js";
|
|
3
3
|
export declare const DASHBOARD_MODEL_LIMITS: Readonly<{
|
|
4
4
|
readonly connectors: 16;
|
|
@@ -32,7 +32,7 @@ export type DashboardAttentionItem = Readonly<{
|
|
|
32
32
|
provider?: GatewayProvider | undefined;
|
|
33
33
|
alias?: string | undefined;
|
|
34
34
|
host?: string | undefined;
|
|
35
|
-
guidance: "reobserve_claude" | "reobserve_codex" | "claude_not_observed" | "codex_stale" | "connector_offline" | "route_stale" | "queue_stalled" | "unconfirmed" | "degraded" | "codex_succession_busy" | "codex_succession_recovery" | "progress_watch" | "generic";
|
|
35
|
+
guidance: "reobserve_claude" | "reobserve_codex" | "codex_reactivation_required" | "consent_edge_unavailable" | "claude_not_observed" | "codex_stale" | "connector_offline" | "route_stale" | "queue_stalled" | "recipient_waiting_input" | "unconfirmed" | "degraded" | "codex_succession_busy" | "codex_succession_recovery" | "progress_watch" | "generic";
|
|
36
36
|
}>;
|
|
37
37
|
export type DashboardProgressWatchRow = Readonly<{
|
|
38
38
|
conversationIdSuffix: string;
|
|
@@ -46,7 +46,6 @@ export type DashboardProgressWatchRow = Readonly<{
|
|
|
46
46
|
idleForMs: number;
|
|
47
47
|
dueInMs: number;
|
|
48
48
|
nudgeCount: 0 | 1 | 2;
|
|
49
|
-
workerReportedComplete: boolean;
|
|
50
49
|
}>;
|
|
51
50
|
export type DashboardProgressWatchEventRow = Readonly<{
|
|
52
51
|
sequence: number;
|
|
@@ -54,7 +53,7 @@ export type DashboardProgressWatchEventRow = Readonly<{
|
|
|
54
53
|
conversationIdSuffix: string;
|
|
55
54
|
ownerAlias: string;
|
|
56
55
|
workerAlias: string;
|
|
57
|
-
kind: "opened" | "nudge" | "worker_reported_complete" | "capability_degraded" | "done" | "unresponsive" | "endpoint_retired" | "disabled";
|
|
56
|
+
kind: "opened" | "nudge" | "worker_reported_complete" | "capability_degraded" | "conversation_rebound" | "replaced" | "done" | "unresponsive" | "endpoint_retired" | "pair_removed" | "disabled";
|
|
58
57
|
nudgeNumber?: 1 | 2 | undefined;
|
|
59
58
|
}>;
|
|
60
59
|
export type DashboardMessageEvent = Readonly<{
|
|
@@ -146,11 +145,7 @@ export type DashboardCompatibilityCheckRow = Readonly<{
|
|
|
146
145
|
version: string;
|
|
147
146
|
tier: CompatibilityTier;
|
|
148
147
|
checkedAt: string;
|
|
149
|
-
|
|
150
|
-
certificationOutcome?: "pass" | "fail" | undefined;
|
|
151
|
-
certifiedAt?: string | undefined;
|
|
152
|
-
certificationSafeErrorCode?: string | undefined;
|
|
153
|
-
failedProbe?: string | undefined;
|
|
148
|
+
failure?: string | undefined;
|
|
154
149
|
safeErrorCode?: string | undefined;
|
|
155
150
|
}>;
|
|
156
151
|
export type DashboardOmissions = Readonly<{
|
|
@@ -126,6 +126,11 @@ function guidanceFor(code, provider) {
|
|
|
126
126
|
if (code?.startsWith("CODEX_SUCCESSION_") === true) {
|
|
127
127
|
return "codex_succession_recovery";
|
|
128
128
|
}
|
|
129
|
+
if (provider === "codex" &&
|
|
130
|
+
(code === "REOBSERVATION_REQUIRED" ||
|
|
131
|
+
code === "CODEX_BOOT_REACTIVATION_SKIPPED")) {
|
|
132
|
+
return "codex_reactivation_required";
|
|
133
|
+
}
|
|
129
134
|
switch (code) {
|
|
130
135
|
case "REOBSERVATION_REQUIRED":
|
|
131
136
|
return provider === "claude" ? "reobserve_claude" : "reobserve_codex";
|
|
@@ -150,6 +155,55 @@ function guidanceFor(code, provider) {
|
|
|
150
155
|
return "generic";
|
|
151
156
|
}
|
|
152
157
|
}
|
|
158
|
+
function isCodexReactivationCondition(item) {
|
|
159
|
+
return (item.provider === "codex" &&
|
|
160
|
+
(item.code === "REOBSERVATION_REQUIRED" ||
|
|
161
|
+
item.code === "CODEX_BOOT_REACTIVATION_SKIPPED"));
|
|
162
|
+
}
|
|
163
|
+
function coalesceCodexReactivationAlerts(alerts, routes) {
|
|
164
|
+
const staleCodexScopes = new Set(routes
|
|
165
|
+
.filter((route) => route.provider === "codex" && route.state === "stale")
|
|
166
|
+
.map((route) => `${route.alias}\0${route.host}`));
|
|
167
|
+
const coalesced = [];
|
|
168
|
+
for (const alert of alerts) {
|
|
169
|
+
if (!isCodexReactivationCondition(alert)) {
|
|
170
|
+
coalesced.push(alert);
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
if (alert.alias === undefined || alert.host === undefined)
|
|
174
|
+
continue;
|
|
175
|
+
const scope = `${alert.alias}\0${alert.host}`;
|
|
176
|
+
if (!staleCodexScopes.has(scope))
|
|
177
|
+
continue;
|
|
178
|
+
const existingIndex = coalesced.findIndex((candidate) => isCodexReactivationCondition(candidate) &&
|
|
179
|
+
candidate.alias === alert.alias &&
|
|
180
|
+
candidate.host === alert.host);
|
|
181
|
+
if (existingIndex === -1) {
|
|
182
|
+
coalesced.push(alert);
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
const existing = coalesced[existingIndex];
|
|
186
|
+
const bootSkipped = alert.code === "CODEX_BOOT_REACTIVATION_SKIPPED"
|
|
187
|
+
? alert
|
|
188
|
+
: existing.code === "CODEX_BOOT_REACTIVATION_SKIPPED"
|
|
189
|
+
? existing
|
|
190
|
+
: alert;
|
|
191
|
+
const timestamp = compareText(alert.timestamp ?? "", existing.timestamp ?? "") >= 0 ? alert.timestamp : existing.timestamp;
|
|
192
|
+
coalesced[existingIndex] = {
|
|
193
|
+
...bootSkipped,
|
|
194
|
+
severity: alertPriority(alert.severity) < alertPriority(existing.severity)
|
|
195
|
+
? alert.severity
|
|
196
|
+
: existing.severity,
|
|
197
|
+
...(timestamp === undefined ? {} : { timestamp }),
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
return coalesced;
|
|
201
|
+
}
|
|
202
|
+
function recipientIsUnobserved(route) {
|
|
203
|
+
return (route.provider === "claude" &&
|
|
204
|
+
(route.safeErrorCode === "CLAUDE_PEER_NOT_OBSERVED" ||
|
|
205
|
+
route.safeErrorCode === "PEER_NOT_OBSERVED"));
|
|
206
|
+
}
|
|
153
207
|
function queueAge(depth, oldestQueuedAt, generatedAt) {
|
|
154
208
|
if (depth === 0 || oldestQueuedAt === undefined || generatedAt === undefined) {
|
|
155
209
|
return undefined;
|
|
@@ -389,7 +443,6 @@ export function buildDashboardViewModel(snapshot) {
|
|
|
389
443
|
idleForMs: Math.max(0, generatedAtMs - Date.parse(lastActivityAt)),
|
|
390
444
|
dueInMs: Math.max(0, Date.parse(nextActionAt) - generatedAtMs),
|
|
391
445
|
nudgeCount: watch.nudgeCount,
|
|
392
|
-
workerReportedComplete: Boolean(watch.workerReportedComplete),
|
|
393
446
|
},
|
|
394
447
|
];
|
|
395
448
|
})
|
|
@@ -447,27 +500,14 @@ export function buildDashboardViewModel(snapshot) {
|
|
|
447
500
|
: [])
|
|
448
501
|
.map((attestation) => {
|
|
449
502
|
const failed = attestation.probes.find((probe) => probe.outcome === "fail");
|
|
503
|
+
const issue = safeCode(attestation.safeErrorCode);
|
|
450
504
|
return {
|
|
451
505
|
surface: attestation.surface,
|
|
452
506
|
version: boundedText(attestation.version),
|
|
453
507
|
tier: attestation.tier,
|
|
454
508
|
checkedAt: attestation.checkedAt,
|
|
455
|
-
...(
|
|
456
|
-
|
|
457
|
-
: {
|
|
458
|
-
certificationDepth: attestation.certification.depth,
|
|
459
|
-
certificationOutcome: attestation.certification.outcome,
|
|
460
|
-
certifiedAt: attestation.certification.certifiedAt,
|
|
461
|
-
...(safeCode(attestation.certification.safeErrorCode) === undefined
|
|
462
|
-
? {}
|
|
463
|
-
: {
|
|
464
|
-
certificationSafeErrorCode: safeCode(attestation.certification.safeErrorCode),
|
|
465
|
-
}),
|
|
466
|
-
}),
|
|
467
|
-
...(failed === undefined ? {} : { failedProbe: failed.name }),
|
|
468
|
-
...(safeCode(attestation.safeErrorCode) === undefined
|
|
469
|
-
? {}
|
|
470
|
-
: { safeErrorCode: safeCode(attestation.safeErrorCode) }),
|
|
509
|
+
...(failed === undefined ? {} : { failure: failed.name }),
|
|
510
|
+
...(issue === undefined ? {} : { safeErrorCode: issue }),
|
|
471
511
|
};
|
|
472
512
|
})
|
|
473
513
|
.sort((left, right) => compareText(left.surface, right.surface))
|
|
@@ -484,37 +524,47 @@ export function buildDashboardViewModel(snapshot) {
|
|
|
484
524
|
const readyClaude = claudeRoutes.filter(routeIsReady).length;
|
|
485
525
|
const readyCodex = codexRoutes.filter(routeIsReady).length;
|
|
486
526
|
const readyPairs = allPairs.filter((pair) => pair.state === "ready");
|
|
487
|
-
const
|
|
488
|
-
const
|
|
527
|
+
const pairedClaude = new Set(allPairs.map((pair) => pair.claudeAlias));
|
|
528
|
+
const pairedCodex = new Set(allPairs.map((pair) => pair.codexAlias));
|
|
529
|
+
const readyPairedClaude = claudeRoutes.some((route) => routeIsReady(route) && pairedClaude.has(route.alias));
|
|
530
|
+
const readyPairedCodex = codexRoutes.some((route) => routeIsReady(route) && pairedCodex.has(route.alias));
|
|
531
|
+
const pairCountIsLowerBound = (normalizedInteger(snapshot.truncation.pairs) ?? 0) > 0;
|
|
532
|
+
const hasPairEvidence = allPairs.length > 0 || pairCountIsLowerBound;
|
|
489
533
|
const graph = {
|
|
490
534
|
pairCount: allPairs.length,
|
|
491
535
|
readyPairCount: readyPairs.length,
|
|
492
|
-
pairCountIsLowerBound
|
|
493
|
-
unpairedReadyClaude: claudeRoutes.filter((route) => routeIsReady(route) && !
|
|
494
|
-
unpairedReadyCodex: codexRoutes.filter((route) => routeIsReady(route) && !
|
|
536
|
+
pairCountIsLowerBound,
|
|
537
|
+
unpairedReadyClaude: claudeRoutes.filter((route) => routeIsReady(route) && !pairedClaude.has(route.alias)).length,
|
|
538
|
+
unpairedReadyCodex: codexRoutes.filter((route) => routeIsReady(route) && !pairedCodex.has(route.alias)).length,
|
|
495
539
|
};
|
|
496
540
|
const selectedPeers = validPeers.filter((peer) => peer.selected && peerIsSelectable(peer));
|
|
497
541
|
const selectablePeers = validPeers.filter(peerIsSelectable);
|
|
498
542
|
const selectedClaudeCount = Math.max(selectedPeers.length, readyClaude);
|
|
499
543
|
const claudeStatus = partyStatus(claudeRoutes, readyClaude);
|
|
500
544
|
const codexStatus = partyStatus(codexRoutes, readyCodex);
|
|
501
|
-
const claudeNextAction =
|
|
545
|
+
const claudeNextAction = selectedClaudeCount > 0 &&
|
|
546
|
+
(readyPairedClaude || (pairCountIsLowerBound && readyClaude > 0))
|
|
502
547
|
? "none"
|
|
503
|
-
:
|
|
504
|
-
? "
|
|
505
|
-
:
|
|
506
|
-
? "
|
|
507
|
-
:
|
|
508
|
-
?
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
548
|
+
: readyClaude > 0
|
|
549
|
+
? "pair_routes"
|
|
550
|
+
: validPeers.length === 0
|
|
551
|
+
? "discover_claude"
|
|
552
|
+
: selectablePeers.length > 0
|
|
553
|
+
? !hasPairEvidence
|
|
554
|
+
? "pair_routes"
|
|
555
|
+
: "restore_claude"
|
|
556
|
+
: selectedPeers.length > 0
|
|
557
|
+
? "restore_claude"
|
|
558
|
+
: "repair_claude_inventory";
|
|
559
|
+
const codexNextAction = readyPairedCodex || (pairCountIsLowerBound && readyCodex > 0)
|
|
560
|
+
? "none"
|
|
561
|
+
: readyCodex > 0
|
|
562
|
+
? "pair_routes"
|
|
563
|
+
: codexRoutes.length === 0
|
|
564
|
+
? "register_codex"
|
|
565
|
+
: "restore_codex";
|
|
566
|
+
const explicitAlerts = coalesceCodexReactivationAlerts(snapshot.alerts
|
|
567
|
+
.filter((alert) => alert.code !== "COMPATIBILITY_CERTIFICATION_FAILED")
|
|
518
568
|
.map((alert) => {
|
|
519
569
|
const code = safeCode(alert.code);
|
|
520
570
|
return {
|
|
@@ -534,13 +584,70 @@ export function buildDashboardViewModel(snapshot) {
|
|
|
534
584
|
...(typeof alert.alias === "string"
|
|
535
585
|
? { alias: boundedText(alert.alias) }
|
|
536
586
|
: {}),
|
|
537
|
-
...(typeof alert.host === "string"
|
|
587
|
+
...(typeof alert.host === "string"
|
|
588
|
+
? { host: boundedText(alert.host) }
|
|
589
|
+
: {}),
|
|
538
590
|
guidance: guidanceFor(code, alert.provider),
|
|
539
591
|
};
|
|
540
|
-
})
|
|
541
|
-
.sort((left, right) => alertPriority(left.severity) - alertPriority(right.severity) ||
|
|
592
|
+
}), allRoutes).sort((left, right) => alertPriority(left.severity) - alertPriority(right.severity) ||
|
|
542
593
|
compareText(right.timestamp ?? "", left.timestamp ?? ""));
|
|
543
594
|
const attentionCandidates = [...explicitAlerts];
|
|
595
|
+
const unavailableConsentEdgeScopes = new Set();
|
|
596
|
+
for (const pair of allPairs) {
|
|
597
|
+
if (pair.state !== "unavailable")
|
|
598
|
+
continue;
|
|
599
|
+
for (const endpoint of [
|
|
600
|
+
{ provider: "claude", alias: pair.claudeAlias },
|
|
601
|
+
{ provider: "codex", alias: pair.codexAlias },
|
|
602
|
+
]) {
|
|
603
|
+
if (routeByAlias.has(endpoint.alias))
|
|
604
|
+
continue;
|
|
605
|
+
const scope = `${endpoint.provider}\0${endpoint.alias}\0${pair.host}`;
|
|
606
|
+
if (unavailableConsentEdgeScopes.has(scope))
|
|
607
|
+
continue;
|
|
608
|
+
unavailableConsentEdgeScopes.add(scope);
|
|
609
|
+
attentionCandidates.push({
|
|
610
|
+
kind: "route",
|
|
611
|
+
severity: "warning",
|
|
612
|
+
provider: endpoint.provider,
|
|
613
|
+
alias: endpoint.alias,
|
|
614
|
+
host: pair.host,
|
|
615
|
+
guidance: "consent_edge_unavailable",
|
|
616
|
+
});
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
for (const route of allRoutes) {
|
|
620
|
+
const writes = messages.groups.filter(({ direction, targetAlias, state, timestamp }) => direction === "codex_to_claude" &&
|
|
621
|
+
targetAlias === route.alias && state === "delivered" &&
|
|
622
|
+
timestamp !== undefined);
|
|
623
|
+
// Groups arrive newest-first. The oldest unconsumed write owns the notice:
|
|
624
|
+
// a fresh write to the same recipient is not evidence that an hours-old one
|
|
625
|
+
// was ever read.
|
|
626
|
+
const write = writes[writes.length - 1];
|
|
627
|
+
if (generatedAt === undefined || write?.timestamp === undefined ||
|
|
628
|
+
!recipientIsUnobserved(route) ||
|
|
629
|
+
Date.parse(generatedAt) - Date.parse(write.timestamp) <
|
|
630
|
+
120_000)
|
|
631
|
+
continue;
|
|
632
|
+
const item = {
|
|
633
|
+
kind: "route",
|
|
634
|
+
code: route.safeErrorCode,
|
|
635
|
+
severity: "warning",
|
|
636
|
+
...(route.lastSeenAt === undefined ? {} : { timestamp: route.lastSeenAt }),
|
|
637
|
+
provider: route.provider,
|
|
638
|
+
alias: route.alias,
|
|
639
|
+
host: route.host,
|
|
640
|
+
guidance: "recipient_waiting_input",
|
|
641
|
+
};
|
|
642
|
+
const existingIndex = attentionCandidates.findIndex((candidate) => candidate.provider === item.provider &&
|
|
643
|
+
candidate.alias === item.alias &&
|
|
644
|
+
(candidate.code === "CLAUDE_PEER_NOT_OBSERVED" ||
|
|
645
|
+
candidate.code === "PEER_NOT_OBSERVED"));
|
|
646
|
+
if (existingIndex === -1)
|
|
647
|
+
attentionCandidates.push(item);
|
|
648
|
+
else
|
|
649
|
+
attentionCandidates[existingIndex] = item;
|
|
650
|
+
}
|
|
544
651
|
for (const watch of allWatches) {
|
|
545
652
|
if (watch.phase !== "episode" && watch.capability !== "route")
|
|
546
653
|
continue;
|
|
@@ -573,9 +680,13 @@ export function buildDashboardViewModel(snapshot) {
|
|
|
573
680
|
provider: route.provider,
|
|
574
681
|
alias: route.alias,
|
|
575
682
|
host: route.host,
|
|
576
|
-
guidance: route.provider === "codex" &&
|
|
577
|
-
|
|
578
|
-
|
|
683
|
+
guidance: route.provider === "codex" &&
|
|
684
|
+
route.state === "stale" &&
|
|
685
|
+
route.safeErrorCode === "REOBSERVATION_REQUIRED"
|
|
686
|
+
? "codex_reactivation_required"
|
|
687
|
+
: route.provider === "codex" && route.state === "stale"
|
|
688
|
+
? "codex_stale"
|
|
689
|
+
: "route_stale",
|
|
579
690
|
});
|
|
580
691
|
representedScopes.add(scope);
|
|
581
692
|
}
|
|
@@ -613,9 +724,11 @@ export function buildDashboardViewModel(snapshot) {
|
|
|
613
724
|
});
|
|
614
725
|
}
|
|
615
726
|
const attention = attentionCandidates.slice(0, DASHBOARD_MODEL_LIMITS.alerts);
|
|
616
|
-
const setupComplete =
|
|
727
|
+
const setupComplete = hasPairEvidence;
|
|
728
|
+
const hasDegradedPair = allPairs.some((pair) => pair.state !== "ready");
|
|
617
729
|
const overall = attentionCandidates.length > 0 ||
|
|
618
|
-
(normalizedInteger(snapshot.truncation.alerts) ?? 0) > 0
|
|
730
|
+
(normalizedInteger(snapshot.truncation.alerts) ?? 0) > 0 ||
|
|
731
|
+
hasDegradedPair
|
|
619
732
|
? "attention"
|
|
620
733
|
: setupComplete
|
|
621
734
|
? "ready"
|