@bolloon/bolloon-agent 0.4.33 → 0.5.1
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/contacts/chain.js +27 -7
- package/dist/agents/execution-supervisor.js +580 -40
- package/dist/agents/external-events.js +35 -6
- package/dist/agents/gateway-group.js +100 -12
- package/dist/agents/goal-criteria.js +10 -3
- package/dist/agents/goal-flywheel/block-executor.js +346 -0
- package/dist/agents/goal-flywheel/continuation-decision.js +592 -0
- package/dist/agents/goal-flywheel/goal-change.js +754 -0
- package/dist/agents/goal-flywheel/index.js +26 -0
- package/dist/agents/goal-flywheel/memory-layers.js +227 -0
- package/dist/agents/goal-flywheel/run-closure.js +809 -0
- package/dist/agents/goal-flywheel/skill-candidate.js +628 -0
- package/dist/agents/goal-flywheel/types.js +329 -0
- package/dist/agents/goal-flywheel/wiring/change.js +288 -0
- package/dist/agents/goal-flywheel/wiring/closure.js +697 -0
- package/dist/agents/goal-flywheel/wiring/continuation.js +432 -0
- package/dist/agents/goal-flywheel/wiring/contract.js +270 -0
- package/dist/agents/goal-flywheel/wiring/index.js +26 -0
- package/dist/agents/goal-flywheel/wiring/monitor.js +254 -0
- package/dist/agents/goal-flywheel/wiring/seams.js +592 -0
- package/dist/agents/goal-flywheel/work-contract.js +478 -0
- package/dist/agents/goal-flywheel/work-monitor.js +488 -0
- package/dist/agents/goal-flywheel-wiring.js +1870 -0
- package/dist/agents/goal-state-reducer.js +406 -0
- package/dist/agents/goal-store.js +35 -1
- package/dist/agents/mobile-flywheel-view.js +144 -0
- package/dist/agents/mobile-task-actions-verify.js +74 -0
- package/dist/agents/mobile-task-actions.js +178 -0
- package/dist/agents/mobile-task-views.js +199 -0
- package/dist/agents/model-policy.js +651 -0
- package/dist/agents/network-pulse.js +304 -18
- package/dist/agents/pi-sdk-tools.js +84 -33
- package/dist/agents/pi-sdk.js +157 -42
- package/dist/agents/run-store.js +71 -5
- package/dist/agents/skill-readiness.js +52 -10
- package/dist/agents/subagent-manager.js +209 -3
- package/dist/agents/task/task-runner.js +17 -4
- package/dist/agents/task-group.js +8 -51
- package/dist/agents/task-public-text.js +89 -0
- package/dist/agents/workflow-pivot-loop.js +19 -12
- package/dist/cli/clipboard.js +65 -0
- package/dist/cli/commands/index.js +1 -0
- package/dist/cli/commands/tasks.js +350 -2
- package/dist/cli/identity-command.js +177 -0
- package/dist/cli/ink-app.js +145 -17
- package/dist/cli/log-gate.js +386 -0
- package/dist/cli/mention-data.js +2 -0
- package/dist/cli/model-selector.js +538 -0
- package/dist/cli/reply-hygiene.js +54 -0
- package/dist/cli/setup-wizard.js +757 -69
- package/dist/cli/startup-notice.js +160 -0
- package/dist/cli/stores.js +22 -1
- package/dist/cli/theme.js +49 -0
- package/dist/cli/tui-select.js +970 -0
- package/dist/cli/update-commands.js +150 -24
- package/dist/cli-entry.js +137 -20
- package/dist/electron-build/agents/contacts/chain.js +26 -6
- package/dist/electron-build/agents/contacts/chain.js.map +1 -1
- package/dist/electron-build/agents/execution-supervisor.js +578 -38
- package/dist/electron-build/agents/execution-supervisor.js.map +1 -1
- package/dist/electron-build/agents/external-events.js +34 -5
- package/dist/electron-build/agents/external-events.js.map +1 -1
- package/dist/electron-build/agents/goal-criteria.js +10 -3
- package/dist/electron-build/agents/goal-criteria.js.map +1 -1
- package/dist/electron-build/agents/goal-flywheel/continuation-decision.js +598 -0
- package/dist/electron-build/agents/goal-flywheel/continuation-decision.js.map +1 -0
- package/dist/electron-build/agents/goal-flywheel/goal-change.js +773 -0
- package/dist/electron-build/agents/goal-flywheel/goal-change.js.map +1 -0
- package/dist/electron-build/agents/goal-flywheel/memory-layers.js +269 -0
- package/dist/electron-build/agents/goal-flywheel/memory-layers.js.map +1 -0
- package/dist/electron-build/agents/goal-flywheel/run-closure.js +818 -0
- package/dist/electron-build/agents/goal-flywheel/run-closure.js.map +1 -0
- package/dist/electron-build/agents/goal-flywheel/skill-candidate.js +642 -0
- package/dist/electron-build/agents/goal-flywheel/skill-candidate.js.map +1 -0
- package/dist/electron-build/agents/goal-flywheel/types.js +333 -0
- package/dist/electron-build/agents/goal-flywheel/types.js.map +1 -0
- package/dist/electron-build/agents/goal-flywheel/wiring/change.js +294 -0
- package/dist/electron-build/agents/goal-flywheel/wiring/change.js.map +1 -0
- package/dist/electron-build/agents/goal-flywheel/wiring/closure.js +742 -0
- package/dist/electron-build/agents/goal-flywheel/wiring/closure.js.map +1 -0
- package/dist/electron-build/agents/goal-flywheel/wiring/continuation.js +444 -0
- package/dist/electron-build/agents/goal-flywheel/wiring/continuation.js.map +1 -0
- package/dist/electron-build/agents/goal-flywheel/wiring/contract.js +279 -0
- package/dist/electron-build/agents/goal-flywheel/wiring/contract.js.map +1 -0
- package/dist/electron-build/agents/goal-flywheel/wiring/index.js +111 -0
- package/dist/electron-build/agents/goal-flywheel/wiring/index.js.map +1 -0
- package/dist/electron-build/agents/goal-flywheel/wiring/monitor.js +264 -0
- package/dist/electron-build/agents/goal-flywheel/wiring/monitor.js.map +1 -0
- package/dist/electron-build/agents/goal-flywheel/wiring/seams.js +612 -0
- package/dist/electron-build/agents/goal-flywheel/wiring/seams.js.map +1 -0
- package/dist/electron-build/agents/goal-flywheel/work-contract.js +488 -0
- package/dist/electron-build/agents/goal-flywheel/work-contract.js.map +1 -0
- package/dist/electron-build/agents/goal-flywheel/work-monitor.js +501 -0
- package/dist/electron-build/agents/goal-flywheel/work-monitor.js.map +1 -0
- package/dist/electron-build/agents/goal-flywheel-wiring.js +1962 -0
- package/dist/electron-build/agents/goal-flywheel-wiring.js.map +1 -0
- package/dist/electron-build/agents/goal-state-reducer.js +414 -0
- package/dist/electron-build/agents/goal-state-reducer.js.map +1 -0
- package/dist/electron-build/agents/goal-store.js +35 -1
- package/dist/electron-build/agents/goal-store.js.map +1 -1
- package/dist/electron-build/agents/model-policy.js +706 -0
- package/dist/electron-build/agents/model-policy.js.map +1 -0
- package/dist/electron-build/agents/network-pulse.js +307 -19
- package/dist/electron-build/agents/network-pulse.js.map +1 -1
- package/dist/electron-build/agents/pi-sdk-tools.js +84 -33
- 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 +156 -41
- package/dist/electron-build/agents/pi-sdk.js.map +1 -1
- package/dist/electron-build/agents/run-store.js +75 -6
- package/dist/electron-build/agents/run-store.js.map +1 -1
- package/dist/electron-build/agents/skill-readiness.js +52 -9
- package/dist/electron-build/agents/skill-readiness.js.map +1 -1
- package/dist/electron-build/agents/task/task-runner.js +16 -3
- package/dist/electron-build/agents/task/task-runner.js.map +1 -1
- package/dist/electron-build/agents/workflow-pivot-loop.js +19 -12
- package/dist/electron-build/agents/workflow-pivot-loop.js.map +1 -1
- package/dist/electron-build/llm/config-store.js +146 -6
- package/dist/electron-build/llm/config-store.js.map +1 -1
- package/dist/electron-build/llm/connection-probe.js +764 -0
- package/dist/electron-build/llm/connection-probe.js.map +1 -0
- package/dist/electron-build/llm/custom-provider-store.js +272 -0
- package/dist/electron-build/llm/custom-provider-store.js.map +1 -0
- package/dist/electron-build/llm/data/provider-catalog-baked.js +23 -0
- package/dist/electron-build/llm/data/provider-catalog-baked.js.map +1 -0
- package/dist/electron-build/llm/model-catalog.js +778 -0
- package/dist/electron-build/llm/model-catalog.js.map +1 -0
- package/dist/electron-build/llm/model-discovery.js +1202 -0
- package/dist/electron-build/llm/model-discovery.js.map +1 -0
- package/dist/electron-build/llm/model-selection.js +1315 -0
- package/dist/electron-build/llm/model-selection.js.map +1 -0
- package/dist/electron-build/llm/pi-ai.js +70 -11
- package/dist/electron-build/llm/pi-ai.js.map +1 -1
- package/dist/electron-build/llm/provider-catalog.js +969 -0
- package/dist/electron-build/llm/provider-catalog.js.map +1 -0
- package/dist/electron-build/llm/provider-registry.js +950 -0
- package/dist/electron-build/llm/provider-registry.js.map +1 -0
- package/dist/electron-build/llm/tool-name.js +266 -0
- package/dist/electron-build/llm/tool-name.js.map +1 -0
- package/dist/electron-build/orbitdb/cid-database.js +83 -17
- package/dist/electron-build/orbitdb/cid-database.js.map +1 -1
- package/dist/electron-build/orbitdb/ipfs-node.js +31 -2
- package/dist/electron-build/orbitdb/ipfs-node.js.map +1 -1
- package/dist/electron-build/utils/dual-source-facts.js +236 -0
- package/dist/electron-build/utils/dual-source-facts.js.map +1 -0
- package/dist/electron-build/utils/dual-source.js +347 -0
- package/dist/electron-build/utils/dual-source.js.map +1 -0
- package/dist/electron-build/utils/update-manager.js +328 -104
- package/dist/electron-build/utils/update-manager.js.map +1 -1
- package/dist/electron-build/utils/update-state.js +9 -11
- package/dist/electron-build/utils/update-state.js.map +1 -1
- package/dist/electron-build/utils/version-identity.js +193 -0
- package/dist/electron-build/utils/version-identity.js.map +1 -0
- package/dist/electron-build/utils/version-info.js +57 -31
- package/dist/electron-build/utils/version-info.js.map +1 -1
- package/dist/index.js +385 -108
- package/dist/ios/bolloon-web.json +10 -0
- package/dist/ios/chain-explorer.js +617 -0
- package/dist/ios/explorer.html +163 -0
- package/dist/ios/index.html +96 -0
- package/dist/ios/mobile-agent.js +2 -2
- package/dist/ios/mobile-contacts.js +362 -0
- package/dist/ios/mobile-core.js +3102 -310
- package/dist/ios/mobile-privacy.js +185 -0
- package/dist/ios/mobile-tasks.js +339 -0
- package/dist/ios/mobile-update.js +1442 -0
- package/dist/ios/mobile.css +19 -0
- package/dist/ios/mobile.html +96 -0
- package/dist/ios/mobile.js +1013 -41
- package/dist/ios/routes-chain-index.js +108 -0
- package/dist/ios/routes-contacts.js +420 -0
- package/dist/ios/routes-llm-config.js +344 -52
- package/dist/ios/routes-mobile-tasks.js +353 -0
- package/dist/ios/routes-onchain-trade.js +99 -0
- package/dist/ios/routes-x402-info.js +1 -0
- package/dist/ios/server.js +921 -0
- package/dist/ios/sw.js +1 -1
- package/dist/ios/task-frame-server.js +211 -0
- package/dist/llm/config-store.js +146 -6
- package/dist/llm/connection-probe.js +744 -0
- package/dist/llm/custom-provider-store.js +224 -0
- package/dist/llm/data/provider-catalog-baked.js +19 -0
- package/dist/llm/model-catalog.js +717 -0
- package/dist/llm/model-discovery.js +1137 -0
- package/dist/llm/model-selection.js +1241 -0
- package/dist/llm/pi-ai.js +70 -11
- package/dist/llm/provider-catalog.js +898 -0
- package/dist/llm/provider-registry.js +917 -0
- package/dist/llm/tool-name.js +220 -0
- package/dist/orbitdb/cid-database.js +81 -16
- package/dist/orbitdb/ipfs-node.js +31 -2
- package/dist/setup/onboard.js +34 -8
- package/dist/utils/dual-source-facts.js +223 -0
- package/dist/utils/dual-source.js +297 -0
- package/dist/utils/update-cli.js +16 -21
- package/dist/utils/update-health.js +35 -5
- package/dist/utils/update-manager.js +325 -96
- package/dist/utils/update-state.js +13 -10
- package/dist/utils/version-identity.js +176 -0
- package/dist/utils/version-info.js +27 -22
- package/dist/web/bolloon-web.json +10 -0
- package/dist/web/mobile-contacts.js +44 -11
- package/dist/web/mobile-core.js +2901 -580
- package/dist/web/mobile-tasks.js +339 -0
- package/dist/web/mobile-update.js +1442 -0
- package/dist/web/mobile.css +19 -0
- package/dist/web/mobile.html +64 -0
- package/dist/web/mobile.js +838 -35
- package/dist/web/routes-llm-config.js +344 -52
- package/dist/web/routes-mobile-tasks.js +353 -0
- package/dist/web/server.js +163 -4
- package/dist/web/sw.js +1 -1
- package/package.json +3 -1
- package/scripts/build-web.ts +36 -0
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="zh-CN">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>链上浏览器 · Chain Explorer — Bolloon</title>
|
|
7
|
+
<meta name="description" content="Bolloon 链上托管事件浏览器 (只读索引: 高度 / 统计 / 时间线 / cursor 增量 / 最终性三档)">
|
|
8
|
+
<link rel="icon" href="./icons/favicon.ico">
|
|
9
|
+
<style>
|
|
10
|
+
/* 本页自带样式 (不动主界面 style.css): 全部 cx- 前缀, 避免污染 */
|
|
11
|
+
:root {
|
|
12
|
+
--cx-bg: #0d1117; --cx-panel: #161b22; --cx-panel2: #1c2230; --cx-fg: #e6edf3;
|
|
13
|
+
--cx-dim: #8b949e; --cx-line: #30363d; --cx-accent: #58a6ff;
|
|
14
|
+
--cx-ok: #3fb950; --cx-warn: #d29922; --cx-bad: #f85149;
|
|
15
|
+
}
|
|
16
|
+
@media (prefers-color-scheme: light) {
|
|
17
|
+
:root { --cx-bg:#f6f8fa; --cx-panel:#ffffff; --cx-panel2:#f0f3f6; --cx-fg:#1f2328; --cx-dim:#59636e; --cx-line:#d0d7de; --cx-accent:#0969da; }
|
|
18
|
+
}
|
|
19
|
+
* { box-sizing: border-box; }
|
|
20
|
+
body { margin: 0; background: var(--cx-bg); color: var(--cx-fg); font: 14px/1.55 -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif; }
|
|
21
|
+
a { color: var(--cx-accent); }
|
|
22
|
+
.cx-wrap { max-width: 1180px; margin: 0 auto; padding: 18px 16px 60px; }
|
|
23
|
+
.cx-top { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; justify-content: space-between; border-bottom: 1px solid var(--cx-line); padding-bottom: 12px; }
|
|
24
|
+
.cx-top h1 { font-size: 18px; margin: 0; font-weight: 650; letter-spacing: .2px; }
|
|
25
|
+
.cx-top .cx-sub { color: var(--cx-dim); font-size: 12.5px; margin-top: 2px; }
|
|
26
|
+
.cx-actions { display: flex; gap: 8px; align-items: center; }
|
|
27
|
+
button, .cx-btn { font: inherit; background: var(--cx-panel2); color: var(--cx-fg); border: 1px solid var(--cx-line); border-radius: 7px; padding: 6px 11px; cursor: pointer; }
|
|
28
|
+
button:hover { border-color: var(--cx-accent); }
|
|
29
|
+
button:disabled { opacity: .5; cursor: default; }
|
|
30
|
+
.cx-state { display: flex; align-items: center; gap: 8px; margin: 14px 0 4px; font-size: 13px; color: var(--cx-dim); }
|
|
31
|
+
.cx-dot { width: 9px; height: 9px; border-radius: 50%; background: var(--cx-dim); display: inline-block; }
|
|
32
|
+
.cx-dot-live { background: var(--cx-ok); }
|
|
33
|
+
.cx-dot-degraded { background: var(--cx-bad); }
|
|
34
|
+
.cx-dot-loading { background: var(--cx-warn); animation: cx-pulse 1.2s ease-in-out infinite; }
|
|
35
|
+
@keyframes cx-pulse { 0%,100% { opacity: 1 } 50% { opacity: .3 } }
|
|
36
|
+
.cx-degraded { margin: 10px 0; border: 1px solid var(--cx-bad); background: rgba(248,81,73,.08); border-radius: 8px; padding: 10px 12px; }
|
|
37
|
+
.cx-degraded b { color: var(--cx-bad); }
|
|
38
|
+
.cx-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 10px; margin: 14px 0 6px; }
|
|
39
|
+
.cx-card { background: var(--cx-panel); border: 1px solid var(--cx-line); border-radius: 9px; padding: 10px 12px; }
|
|
40
|
+
.cx-card .cx-k { color: var(--cx-dim); font-size: 12px; display: block; }
|
|
41
|
+
.cx-card .cx-v { font-size: 20px; font-weight: 650; font-variant-numeric: tabular-nums; }
|
|
42
|
+
.cx-card .cx-v-sm { font-size: 13px; font-weight: 500; font-variant-numeric: tabular-nums; word-break: break-all; }
|
|
43
|
+
.cx-cats { display: flex; flex-wrap: wrap; gap: 8px; margin: 6px 0 16px; }
|
|
44
|
+
.cx-cat { background: var(--cx-panel); border: 1px solid var(--cx-line); border-radius: 20px; padding: 4px 11px; font-size: 12.5px; }
|
|
45
|
+
.cx-cat b { font-variant-numeric: tabular-nums; }
|
|
46
|
+
.cx-sec-title { font-size: 14px; font-weight: 650; margin: 20px 0 8px; display: flex; gap: 10px; align-items: baseline; flex-wrap: wrap; }
|
|
47
|
+
.cx-sec-title .cx-hint { color: var(--cx-dim); font-weight: 400; font-size: 12.5px; }
|
|
48
|
+
.cx-legend { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 8px; }
|
|
49
|
+
.cx-final { border: 1px solid var(--cx-line); background: var(--cx-panel); border-radius: 7px; padding: 3px 10px; font-size: 12.5px; }
|
|
50
|
+
.cx-final b { font-variant-numeric: tabular-nums; }
|
|
51
|
+
ol.cx-list { list-style: none; margin: 0; padding: 0; border: 1px solid var(--cx-line); border-radius: 9px; overflow: hidden; background: var(--cx-panel); }
|
|
52
|
+
.cx-row { display: grid; grid-template-columns: 110px 110px 108px 1fr; gap: 4px 10px; padding: 9px 12px; border-bottom: 1px solid var(--cx-line); align-items: center; }
|
|
53
|
+
.cx-row:last-child { border-bottom: none; }
|
|
54
|
+
.cx-row:hover { background: var(--cx-panel2); }
|
|
55
|
+
.cx-block, .cx-tx, .cx-task, .cx-conf { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 12.5px; color: var(--cx-dim); }
|
|
56
|
+
.cx-event { font-weight: 600; }
|
|
57
|
+
.cx-args { grid-column: 1 / -1; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 12px; color: var(--cx-dim); word-break: break-all; }
|
|
58
|
+
.cx-badge { justify-self: start; font-size: 11.5px; border-radius: 20px; padding: 1px 9px; border: 1px solid var(--cx-line); }
|
|
59
|
+
.cx-badge-observed { color: var(--cx-warn); border-color: var(--cx-warn); }
|
|
60
|
+
.cx-badge-confirmed { color: var(--cx-accent); border-color: var(--cx-accent); }
|
|
61
|
+
.cx-badge-finalized { color: var(--cx-ok); border-color: var(--cx-ok); }
|
|
62
|
+
.cx-badge-unknown { color: var(--cx-dim); }
|
|
63
|
+
.cx-suspect { color: var(--cx-bad); font-size: 11.5px; }
|
|
64
|
+
.cx-link { padding: 2px 8px; font-size: 12px; border-radius: 20px; }
|
|
65
|
+
.cx-empty { padding: 14px 12px; color: var(--cx-dim); font-size: 13px; }
|
|
66
|
+
.cx-bar { display: flex; gap: 10px; align-items: center; justify-content: space-between; margin: 10px 0; flex-wrap: wrap; }
|
|
67
|
+
.cx-form { display: flex; gap: 8px; flex-wrap: wrap; }
|
|
68
|
+
.cx-form input { font: inherit; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 12.5px; background: var(--cx-panel); color: var(--cx-fg); border: 1px solid var(--cx-line); border-radius: 7px; padding: 6px 10px; min-width: 320px; }
|
|
69
|
+
.cx-note { color: var(--cx-dim); font-size: 12px; margin: 6px 0 0; }
|
|
70
|
+
@media (max-width: 720px) { .cx-row { grid-template-columns: 1fr 1fr; } .cx-args { grid-column: 1 / -1; } .cx-form input { min-width: 0; width: 100%; } }
|
|
71
|
+
/* 尊重系统设置: 关掉一切过渡/动画 */
|
|
72
|
+
@media (prefers-reduced-motion: reduce) {
|
|
73
|
+
* { animation: none !important; transition: none !important; }
|
|
74
|
+
}
|
|
75
|
+
.cx-reduce * { animation: none !important; transition: none !important; }
|
|
76
|
+
</style>
|
|
77
|
+
</head>
|
|
78
|
+
<body>
|
|
79
|
+
<div class="cx-wrap" id="chain-explorer-root" data-api-base="">
|
|
80
|
+
<div class="cx-top">
|
|
81
|
+
<div>
|
|
82
|
+
<h1 data-zh="链上浏览器 (只读)" data-en="Chain Explorer (read-only)">链上浏览器 (只读)</h1>
|
|
83
|
+
<div class="cx-sub" data-zh="数据来自本机链上索引 (P5) — 只读: 不发交易 · 不签名 · 不写盘" data-en="Data comes from the local chain index (P5) — read-only: no transactions, no signing, no writes">数据来自本机链上索引 (P5) — 只读: 不发交易 · 不签名 · 不写盘</div>
|
|
84
|
+
</div>
|
|
85
|
+
<div class="cx-actions">
|
|
86
|
+
<button type="button" id="cx-reload" data-zh="立即刷新" data-en="Refresh now">立即刷新</button>
|
|
87
|
+
<button type="button" id="cx-lang" data-zh="中文 / EN" data-en="EN / 中文">中文 / EN</button>
|
|
88
|
+
<a class="cx-btn" href="/" data-zh="← 回主界面" data-en="← Back to app">← 回主界面</a>
|
|
89
|
+
</div>
|
|
90
|
+
</div>
|
|
91
|
+
|
|
92
|
+
<div class="cx-state" role="status" aria-live="polite">
|
|
93
|
+
<span class="cx-dot cx-dot-loading" id="cx-state-dot" aria-hidden="true"></span>
|
|
94
|
+
<span id="cx-state" data-zh="加载中…" data-en="loading…">加载中…</span>
|
|
95
|
+
</div>
|
|
96
|
+
|
|
97
|
+
<div class="cx-degraded" id="cx-degraded" style="display:none">
|
|
98
|
+
<b data-zh="后端不可用 (降级态)" data-en="backend unavailable (degraded)">后端不可用 (降级态)</b>
|
|
99
|
+
<div class="cx-note" data-zh="数字一律显示为 “—” — 拿不到索引就绝不用 0 顶替 (0 会被误读成真值)。页面会自动按指数退避重试。" data-en="All numbers show “—” — when the index is unreachable we never substitute 0 (0 would read as a real value). The page retries with exponential backoff.">数字一律显示为 “—” — 拿不到索引就绝不用 0 顶替 (0 会被误读成真值)。页面会自动按指数退避重试。</div>
|
|
100
|
+
<div class="cx-note" id="cx-degraded-reason"></div>
|
|
101
|
+
</div>
|
|
102
|
+
|
|
103
|
+
<div class="cx-grid">
|
|
104
|
+
<div class="cx-card"><span class="cx-k" data-zh="索引高度 (lastSyncedBlock)" data-en="index height (lastSyncedBlock)">索引高度 (lastSyncedBlock)</span><span class="cx-v" id="cx-height">—</span></div>
|
|
105
|
+
<div class="cx-card"><span class="cx-k" data-zh="快照 head 区块" data-en="snapshot head block">快照 head 区块</span><span class="cx-v" id="cx-head">—</span></div>
|
|
106
|
+
<div class="cx-card"><span class="cx-k" data-zh="最后同步时间" data-en="last synced at">最后同步时间</span><span class="cx-v-sm" id="cx-lastsync">—</span></div>
|
|
107
|
+
<div class="cx-card"><span class="cx-k" data-zh="链 / 网络" data-en="chain / network">链 / 网络</span><span class="cx-v-sm" id="cx-chain">—</span></div>
|
|
108
|
+
<div class="cx-card"><span class="cx-k" data-zh="托管合约 (短写)" data-en="escrow contract (short)">托管合约 (短写)</span><span class="cx-v-sm" id="cx-escrow">—</span></div>
|
|
109
|
+
</div>
|
|
110
|
+
|
|
111
|
+
<div class="cx-sec-title"><span data-zh="事件总数与分类" data-en="total events & categories">事件总数与分类</span></div>
|
|
112
|
+
<div class="cx-grid">
|
|
113
|
+
<div class="cx-card"><span class="cx-k" data-zh="事件总数 (含被回退)" data-en="total events (incl. reverted)">事件总数 (含被回退)</span><span class="cx-v" id="cx-entries">—</span></div>
|
|
114
|
+
<div class="cx-card"><span class="cx-k" data-zh="任务数 (唯一 taskKey)" data-en="tasks (unique taskKey)">任务数 (唯一 taskKey)</span><span class="cx-v" id="cx-tasks">—</span></div>
|
|
115
|
+
<div class="cx-card"><span class="cx-k" data-zh="被回退 (suspect)" data-en="reverted (suspect)">被回退 (suspect)</span><span class="cx-v" id="cx-suspects">—</span></div>
|
|
116
|
+
</div>
|
|
117
|
+
<div class="cx-cats">
|
|
118
|
+
<span class="cx-cat"><span data-zh="托管创建" data-en="escrow created">托管创建</span> <b id="cx-created">—</b></span>
|
|
119
|
+
<span class="cx-cat"><span data-zh="提交证明" data-en="proof submitted">提交证明</span> <b id="cx-proof">—</b></span>
|
|
120
|
+
<span class="cx-cat"><span data-zh="已放款" data-en="released">已放款</span> <b id="cx-released">—</b></span>
|
|
121
|
+
<span class="cx-cat"><span data-zh="已退款" data-en="refunded">已退款</span> <b id="cx-refunded">—</b></span>
|
|
122
|
+
<span class="cx-cat"><span data-zh="争议" data-en="disputed">争议</span> <b id="cx-disputed">—</b></span>
|
|
123
|
+
<span class="cx-cat"><span data-zh="已过期" data-en="expired">已过期</span> <b id="cx-expired">—</b></span>
|
|
124
|
+
</div>
|
|
125
|
+
|
|
126
|
+
<div class="cx-sec-title"><span data-zh="最终性三档 (1/12 确认门槛)" data-en="finality tiers (1/12 confirmations gate)">最终性三档 (1/12 确认门槛)</span></div>
|
|
127
|
+
<div class="cx-legend">
|
|
128
|
+
<span class="cx-final"><span data-zh="观测中 observed" data-en="observed">观测中 observed</span> <b id="cx-final-observed">—</b></span>
|
|
129
|
+
<span class="cx-final"><span data-zh="已确认 confirmed" data-en="confirmed">已确认 confirmed</span> <b id="cx-final-confirmed">—</b></span>
|
|
130
|
+
<span class="cx-final"><span data-zh="已最终 finalized" data-en="finalized">已最终 finalized</span> <b id="cx-final-finalized">—</b></span>
|
|
131
|
+
</div>
|
|
132
|
+
|
|
133
|
+
<div class="cx-sec-title">
|
|
134
|
+
<span data-zh="交易时间线" data-en="transaction timeline">交易时间线</span>
|
|
135
|
+
<span class="cx-hint" data-zh="按 (区块号, logIndex) 升序 · cursor 增量加载" data-en="sorted by (block, logIndex) · cursor incremental loading">按 (区块号, logIndex) 升序 · cursor 增量加载</span>
|
|
136
|
+
<span class="cx-hint" id="cx-timeline-count" role="status" aria-live="polite"></span>
|
|
137
|
+
</div>
|
|
138
|
+
<div class="cx-bar">
|
|
139
|
+
<span class="cx-hint" id="cx-timeline-lede" data-zh="首屏只拉一页; 向下点「加载更多」按 cursor 取下一段 (不整页重拉)" data-en="First paint loads one page; “load more” fetches the next segment by cursor (no full reload)">首屏只拉一页; 向下点「加载更多」按 cursor 取下一段 (不整页重拉)</span>
|
|
140
|
+
<span class="cx-hint" id="cx-remaining"></span>
|
|
141
|
+
</div>
|
|
142
|
+
<ol class="cx-list" id="cx-timeline-body" aria-label="chain timeline"></ol>
|
|
143
|
+
<div class="cx-bar">
|
|
144
|
+
<button type="button" id="cx-more" data-zh="加载更多 (按 cursor 取下一段)" data-en="load more (next cursor)">加载更多 (按 cursor 取下一段)</button>
|
|
145
|
+
</div>
|
|
146
|
+
|
|
147
|
+
<div class="cx-sec-title">
|
|
148
|
+
<span data-zh="单个 escrow 时间线" data-en="single escrow timeline">单个 escrow 时间线</span>
|
|
149
|
+
<span class="cx-hint" id="cx-task-title" role="status" aria-live="polite">(未选择)</span>
|
|
150
|
+
</div>
|
|
151
|
+
<form class="cx-form" id="cx-task-form">
|
|
152
|
+
<input type="text" id="cx-task-input" spellcheck="false" autocomplete="off" placeholder="0x… (64 hex taskKey)" aria-label="taskKey">
|
|
153
|
+
<button type="submit" data-zh="查这个 taskKey" data-en="look up this taskKey">查这个 taskKey</button>
|
|
154
|
+
</form>
|
|
155
|
+
<div class="cx-note" data-zh="create → proof → release / refund / expire / dispute (按事件推出的状态)" data-en="create → proof → release / refund / expire / dispute (state derived from events)">create → proof → release / refund / expire / dispute (按事件推出的状态)</div>
|
|
156
|
+
<ol class="cx-list" id="cx-task-body" aria-label="escrow timeline"></ol>
|
|
157
|
+
|
|
158
|
+
<div class="cx-note" data-zh="隐私: 地址/哈希一律短写 (0x12ab…9f0e); 页面不展示完整 DID / peerId / IP / 钱包地址。" data-en="Privacy: addresses/hashes are always shortened (0x12ab…9f0e); the page never shows full DID / peerId / IP / wallet addresses.">隐私: 地址/哈希一律短写 (0x12ab…9f0e); 页面不展示完整 DID / peerId / IP / 钱包地址。</div>
|
|
159
|
+
</div>
|
|
160
|
+
|
|
161
|
+
<script type="module" src="./chain-explorer.js"></script>
|
|
162
|
+
</body>
|
|
163
|
+
</html>
|
package/dist/ios/index.html
CHANGED
|
@@ -104,6 +104,49 @@
|
|
|
104
104
|
<div id="a2ui-root"></div>
|
|
105
105
|
</section>
|
|
106
106
|
|
|
107
|
+
<!-- 任务 tab (2026-09-25): 与桌面/CLI 同一套任务闭环 —— 入群 · 发公告 · 看飞轮进度
|
|
108
|
+
分工不变: 手机 = 输入 · 展示待发内容 · 设备签名确认; 桌面 = 落盘 · 执行 · 等待回复 · 证据。
|
|
109
|
+
高风险动作 (入群/建群/发公告/发进群/留痕) 一律走确认页 → 设备签名 → 桌面验签。 -->
|
|
110
|
+
<section class="page" id="page-tasks" data-tab="tasks" hidden>
|
|
111
|
+
<div class="section-label" data-zh="本机授权与签名" data-en="This device: approval & signing">本机授权与签名</div>
|
|
112
|
+
<div class="list">
|
|
113
|
+
<div class="list-item" id="tasks-signing-item"><span class="list-icon"><svg class="ico" viewBox="0 0 24 24"><rect x="4.5" y="10.5" width="15" height="9.5" rx="2.5"/><path d="M8 10.5V7.5a4 4 0 0 1 8 0v3"/><path d="M12 14v3"/></svg></span><span id="tasks-signing" style="flex:1">检查中…</span></div>
|
|
114
|
+
</div>
|
|
115
|
+
<div class="sheet-text" id="tasks-hint" style="font-size:12px;color:var(--text-secondary);padding:0 14px 6px"></div>
|
|
116
|
+
<div class="list" style="padding:0 14px 4px">
|
|
117
|
+
<button class="sheet-choice" id="tasks-refresh" data-zh="刷新任务数据" data-en="Refresh task data" style="width:100%">刷新任务数据</button>
|
|
118
|
+
</div>
|
|
119
|
+
|
|
120
|
+
<div class="section-label" data-zh="群 (与 CLI task group 同一份记录)" data-en="Groups (same records as CLI task group)">群 (与 CLI task group 同一份记录)</div>
|
|
121
|
+
<div class="list" id="tasks-groups"><div class="sheet-text" style="padding:0 14px">加载中…</div></div>
|
|
122
|
+
<div style="padding:0 14px 8px">
|
|
123
|
+
<input id="tasks-group-link" placeholder="群邀请链接 (orbitdb://…?type=group&name=…)" style="width:100%;padding:10px 12px;border-radius:10px;border:1px solid var(--border);background:transparent;color:var(--text);font-size:14px" />
|
|
124
|
+
<button class="sheet-choice" id="tasks-group-join" data-zh="入群(需手机确认 + 签名)" data-en="Join group (needs on-device confirm + signature)" style="width:100%;margin-top:8px">入群(需手机确认 + 签名)</button>
|
|
125
|
+
<input id="tasks-group-name" placeholder="新群名称" style="width:100%;margin-top:8px;padding:10px 12px;border-radius:10px;border:1px solid var(--border);background:transparent;color:var(--text);font-size:14px" />
|
|
126
|
+
<button class="sheet-choice" id="tasks-group-create" data-zh="建群(需手机确认 + 签名)" data-en="Create group (needs on-device confirm + signature)" style="width:100%;margin-top:8px">建群(需手机确认 + 签名)</button>
|
|
127
|
+
</div>
|
|
128
|
+
|
|
129
|
+
<div class="section-label" data-zh="公告板 (与 CLI task board 同一份事实)" data-en="Task board (same facts as CLI task board)">公告板 (与 CLI task board 同一份事实)</div>
|
|
130
|
+
<div class="list" id="tasks-board"><div class="sheet-text" style="padding:0 14px">加载中…</div></div>
|
|
131
|
+
<div style="padding:0 14px 8px">
|
|
132
|
+
<input id="tasks-pub-capability" placeholder="能力 (例如 research)" style="width:100%;padding:10px 12px;border-radius:10px;border:1px solid var(--border);background:transparent;color:var(--text);font-size:14px" />
|
|
133
|
+
<input id="tasks-pub-instruction" placeholder="任务正文 (一句能执行的委托)" style="width:100%;margin-top:8px;padding:10px 12px;border-radius:10px;border:1px solid var(--border);background:transparent;color:var(--text);font-size:14px" />
|
|
134
|
+
<input id="tasks-pub-budget" placeholder="预算 (例如 0.05)" inputmode="decimal" style="width:100%;margin-top:8px;padding:10px 12px;border-radius:10px;border:1px solid var(--border);background:transparent;color:var(--text);font-size:14px" />
|
|
135
|
+
<input id="tasks-pub-deadline" placeholder="截止 (+24h / +2h / +1d, 留空=桌面默认 24h)" style="width:100%;margin-top:8px;padding:10px 12px;border-radius:10px;border:1px solid var(--border);background:transparent;color:var(--text);font-size:14px" />
|
|
136
|
+
<button class="sheet-choice" id="tasks-pub-submit" data-zh="发布公告(需手机确认 + 签名)" data-en="Publish announcement (needs on-device confirm + signature)" style="width:100%;margin-top:8px">发布公告(需手机确认 + 签名)</button>
|
|
137
|
+
</div>
|
|
138
|
+
|
|
139
|
+
<div class="section-label" data-zh="群过程痕迹 (只读, 脱敏)" data-en="Group trail (read-only, redacted)">群过程痕迹 (只读, 脱敏)</div>
|
|
140
|
+
<div class="list" id="tasks-trail-group-picker"></div>
|
|
141
|
+
<div class="list" id="tasks-trail"><div class="sheet-text" style="padding:0 14px">选一个群看这一期的痕迹</div></div>
|
|
142
|
+
<div style="padding:0 14px 8px">
|
|
143
|
+
<button class="sheet-choice" id="tasks-trail-refresh" data-zh="读群痕迹" data-en="Read group trail" style="width:100%">读群痕迹</button>
|
|
144
|
+
</div>
|
|
145
|
+
|
|
146
|
+
<div class="section-label" data-zh="飞轮进度 (只读, 与桌面同一状态)" data-en="Goal flywheel progress (read-only, same state as desktop)">飞轮进度 (只读, 与桌面同一状态)</div>
|
|
147
|
+
<div class="list" id="tasks-flywheel"><div class="sheet-text" style="padding:0 14px">加载中…</div></div>
|
|
148
|
+
</section>
|
|
149
|
+
|
|
107
150
|
<!-- 我 tab -->
|
|
108
151
|
<section class="page" id="page-me" data-tab="me" hidden>
|
|
109
152
|
<div class="profile-card" id="profile-card">
|
|
@@ -121,6 +164,7 @@
|
|
|
121
164
|
<div class="list-item" id="item-settings"><span class="list-icon"><svg class="ico" viewBox="0 0 24 24"><path d="M4 7.5h6M14 7.5h6M4 16.5h9M17 16.5h3"/><circle cx="12" cy="7.5" r="2.2"/><circle cx="15" cy="16.5" r="2.2"/></svg></span><span>设置</span><span class="list-arrow">›</span></div>
|
|
122
165
|
<div class="list-item" id="item-wallet"><span class="list-icon"><svg class="ico" viewBox="0 0 24 24"><rect x="3" y="6.5" width="18" height="12" rx="3"/><path d="M3 10.5h18"/><circle cx="16.8" cy="14.5" r="1.3" fill="currentColor" stroke="none"/></svg></span><span>钱包</span><span class="list-arrow">›</span></div>
|
|
123
166
|
<div class="list-item" id="item-judgments"><span class="list-icon"><svg class="ico" viewBox="0 0 24 24"><path d="M11 3.5l1.8 4.7 4.7 1.8-4.7 1.8L11 16.5l-1.8-4.7L4.5 10l4.7-1.8z"/><path d="M18.5 16l.6 1.6 1.6.6-1.6.6-.6 1.6-.6-1.6-1.6-.6 1.6-.6z"/></svg></span><span>判断力 API</span><span class="list-arrow">›</span></div>
|
|
167
|
+
<div class="list-item" id="item-contacts"><span class="list-icon"><svg class="ico" viewBox="0 0 24 24"><rect x="3.5" y="5.5" width="17" height="13" rx="2.5"/><path d="M3.5 9h17"/><circle cx="8.5" cy="14" r="1.6"/><path d="M12 13h5M12 15.5h3"/></svg></span><span>联系方式与授权</span><span class="list-arrow" id="contacts-arrow">›</span></div>
|
|
124
168
|
<div class="list-item" id="item-login"><span class="list-icon"><svg class="ico" viewBox="0 0 24 24"><rect x="4.5" y="10.5" width="15" height="9.5" rx="2.5"/><path d="M8 10.5V7.5a4 4 0 0 1 8 0v3"/></svg></span><span id="login-label">登录</span><span class="list-arrow">›</span></div>
|
|
125
169
|
<div class="list-item" id="item-logout"><span class="list-icon"><svg class="ico" viewBox="0 0 24 24"><path d="M14.5 4.5h3.5a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2h-3.5"/><path d="M10 8.5l-3.5 3.5L10 15.5M6.5 12h8"/></svg></span><span>注销</span></div>
|
|
126
170
|
</div>
|
|
@@ -132,6 +176,7 @@
|
|
|
132
176
|
<button class="tab active" data-tab="main"><span class="tab-icon"><svg class="ico" viewBox="0 0 24 24"><rect x="3.5" y="3.5" width="7" height="7" rx="1.6"/><rect x="13.5" y="3.5" width="7" height="7" rx="1.6"/><rect x="3.5" y="13.5" width="7" height="7" rx="1.6"/><rect x="13.5" y="13.5" width="7" height="7" rx="1.6"/></svg></span><span>首页</span></button>
|
|
133
177
|
<button class="tab" data-tab="friends"><span class="tab-icon"><svg class="ico" viewBox="0 0 24 24"><circle cx="9" cy="8" r="3.2"/><path d="M3.5 19c.8-3 3-4.6 5.5-4.6S13.7 16 14.5 19"/><path d="M17 8v6M14 11h6"/></svg></span><span>好友</span></button>
|
|
134
178
|
<button class="tab" data-tab="network"><span class="tab-icon"><svg class="ico" viewBox="0 0 24 24"><circle cx="12" cy="12" r="8.5"/><path d="M3.5 12h17"/><path d="M12 3.5c2.3 2.3 3.5 5.3 3.5 8.5s-1.2 6.2-3.5 8.5c-2.3-2.3-3.5-5.3-3.5-8.5S9.7 5.8 12 3.5z"/></svg></span><span>网络</span></button>
|
|
179
|
+
<button class="tab" data-tab="tasks"><span class="tab-icon"><svg class="ico" viewBox="0 0 24 24"><path d="M4 7.5h10M4 12h7M4 16.5h12"/><path d="M18 5.5l1.6 1.6L22 4.5"/><path d="M18 14.5l1.6 1.6L22 13.5"/></svg></span><span>任务</span></button>
|
|
135
180
|
<button class="tab" data-tab="me"><span class="tab-icon"><svg class="ico" viewBox="0 0 24 24"><circle cx="12" cy="8.5" r="4"/><path d="M4.5 20.5a7.5 7.5 0 0 1 15 0"/></svg></span><span>我</span></button>
|
|
136
181
|
</nav>
|
|
137
182
|
|
|
@@ -235,3 +280,54 @@ if ('serviceWorker' in navigator) {
|
|
|
235
280
|
</script>
|
|
236
281
|
</body>
|
|
237
282
|
</html>
|
|
283
|
+
|
|
284
|
+
<!-- 联系方式与持久授权 (2026-09-19): 手机确认一次, Agent 长期自动使用 -->
|
|
285
|
+
<div class="sheet" id="contacts-sheet" hidden>
|
|
286
|
+
<div class="sheet-inner">
|
|
287
|
+
<div class="sheet-title">联系方式与授权</div>
|
|
288
|
+
<div class="sheet-text" id="contacts-effective">加载中...</div>
|
|
289
|
+
<div class="sheet-text" id="contacts-signing" style="font-size:12px;color:var(--text-secondary)"></div>
|
|
290
|
+
|
|
291
|
+
<div id="contacts-approvals"></div>
|
|
292
|
+
|
|
293
|
+
<div class="sheet-title" style="margin-top:10px">我的联系方式</div>
|
|
294
|
+
<div id="contacts-list"><div class="sheet-text">加载中...</div></div>
|
|
295
|
+
|
|
296
|
+
<div style="margin-top:10px">
|
|
297
|
+
<input id="contacts-value" placeholder="手机号 (+86...) 或 邮箱" style="width:100%;padding:10px 12px;border-radius:10px;border:1px solid var(--border);background:transparent;color:var(--text);font-size:14px" />
|
|
298
|
+
<div style="display:flex;gap:8px;margin-top:8px">
|
|
299
|
+
<button class="sheet-choice" id="contacts-bind" style="flex:1">绑定并发送验证码</button>
|
|
300
|
+
</div>
|
|
301
|
+
<input id="contacts-code" placeholder="收到的验证码" inputmode="numeric" style="width:100%;margin-top:8px;padding:10px 12px;border-radius:10px;border:1px solid var(--border);background:transparent;color:var(--text);font-size:14px" />
|
|
302
|
+
<button class="sheet-choice" id="contacts-verify" style="margin-top:8px;width:100%">验证</button>
|
|
303
|
+
</div>
|
|
304
|
+
|
|
305
|
+
<div class="sheet-title" style="margin-top:12px">让 Bolloon 代表你联系外部的人</div>
|
|
306
|
+
<div class="sheet-text" id="contacts-willnot" style="font-size:12px"></div>
|
|
307
|
+
<div class="sheet-inner-choices" id="contacts-choices" style="margin-top:8px"></div>
|
|
308
|
+
<div class="sheet-inner-choices">
|
|
309
|
+
<button class="sheet-choice" id="contacts-revoke-all">撤销全部授权</button>
|
|
310
|
+
<button class="sheet-choice sheet-cancel" id="contacts-close">关闭</button>
|
|
311
|
+
</div>
|
|
312
|
+
</div>
|
|
313
|
+
</div>
|
|
314
|
+
|
|
315
|
+
<!-- 任务动作确认页 (2026-09-25): 展示待发内容 → 手机确认 → 设备签名 → 桌面验签执行
|
|
316
|
+
高风险动作不许绕过这里: 入群 / 建群 / 发公告 / 发进群 / 过程留痕 都走这一个入口。 -->
|
|
317
|
+
<div class="sheet" id="task-confirm-sheet" hidden>
|
|
318
|
+
<div class="sheet-inner">
|
|
319
|
+
<div class="sheet-title" id="task-confirm-title">确认这个动作</div>
|
|
320
|
+
<div class="sheet-text" id="task-confirm-lines" style="font-size:12px"></div>
|
|
321
|
+
<div class="sheet-text" id="task-confirm-what" style="font-size:12px;color:var(--text-secondary)"></div>
|
|
322
|
+
<div id="task-confirm-group-wrap" hidden style="margin-top:8px">
|
|
323
|
+
<div class="sheet-text" data-zh="发到哪个群" data-en="Which group" style="font-size:12px"></div>
|
|
324
|
+
<div class="list" id="task-confirm-group"></div>
|
|
325
|
+
</div>
|
|
326
|
+
<div id="task-confirm-fields" style="margin-top:8px"></div>
|
|
327
|
+
<button class="sheet-choice" id="task-confirm-preview" hidden data-zh="预览要发进群的那一行" data-en="Preview the exact line to be posted">预览要发进群的那一行</button>
|
|
328
|
+
<div class="sheet-title" id="task-confirm-content-title" style="margin-top:10px" hidden data-zh="要发进群的内容 (原文)" data-en="Content to be posted (verbatim)">要发进群的内容 (原文)</div>
|
|
329
|
+
<div class="sheet-text" id="task-confirm-content" style="font-size:12px;white-space:pre-wrap;word-break:break-word" hidden></div>
|
|
330
|
+
<button class="sheet-choice" id="task-confirm-yes">确认并签名</button>
|
|
331
|
+
<button class="sheet-choice sheet-cancel" id="task-confirm-no">取消</button>
|
|
332
|
+
</div>
|
|
333
|
+
</div>
|
package/dist/ios/mobile-agent.js
CHANGED
|
@@ -555,13 +555,13 @@ export async function runPhoneAgent(goal) {
|
|
|
555
555
|
const reply = await runLocalAgent(goal);
|
|
556
556
|
return {
|
|
557
557
|
ok: true, goal, result: reply, did: id.did, mode: 'fallback',
|
|
558
|
-
hint: '
|
|
558
|
+
hint: '当前是「手机本地规则」模式:这台手机上还没接原生执行能力,所以只能用内置规则回复。连上电脑端后,任务可以交给电脑端 Agent 真正执行。',
|
|
559
559
|
};
|
|
560
560
|
}
|
|
561
561
|
catch (e) {
|
|
562
562
|
return {
|
|
563
563
|
ok: false, goal, error: String(e?.message || e).slice(0, 100), did: id.did, mode: native ? 'native' : 'fallback',
|
|
564
|
-
hint: '任务没跑起来。常见原因:① 电脑端没在运行或不同网段 (设置 → 电脑端同步 里配置/测试) ② 没配 LLM API (设置 → API 配置) ③
|
|
564
|
+
hint: '任务没跑起来。常见原因:① 电脑端没在运行或不同网段 (设置 → 电脑端同步 里配置/测试) ② 没配 LLM API (设置 → API 配置) ③ 这台手机没接原生执行能力。',
|
|
565
565
|
};
|
|
566
566
|
}
|
|
567
567
|
}
|