@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 @@
|
|
|
1
|
+
{"version":3,"file":"model-policy.js","sourceRoot":"","sources":["../../../src/agents/model-policy.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,MAAY,EAAE,wCAAoB;AAClC,MAAY,IAAI,iCAAa;AAC7B,MAAY,EAAE,+BAAW;AACzB,MAAY,MAAM,mCAAe;AAEjC,kEAQmC;AAEnC,iDAUwB;AA6CxB;;;;;;;;GAQG;AACH,8BAAqC,GAAY;IAC/C,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACtC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,qDAAqD,EAAE,CAAC;IAC/G,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1D,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,wBAAwB,OAAO,GAAG,6BAA6B,EAAE,CAAC;IAC1H,CAAC;IACD,MAAM,GAAG,GAAG,GAA8B,CAAC;IAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC5D,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACxE,MAAM,MAAM,GAAoB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAClD,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;YAAE,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACzE,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS;YAAE,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACxF,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS;YAAE,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvF,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAA4B,CAAC;YAC1D,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACpF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACnE,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;gBACxB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,8DAA8D,EAAE,CAAC;YAC3H,CAAC;YACD,MAAM,CAAC,GAAG,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAA,qCAAgB,EAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC/F,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC9B,CAAC;IACD,OAAO;QACL,EAAE,EAAE,KAAK;QACT,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;QACxB,MAAM,EAAE,yBAAyB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,yDAAyD;KAC3G,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,IAAI,CAAC;QAAC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AACzD,CAAC;AAED,iCAAiC;AACjC,iCAAwC,CAAkB;IACxD,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,CAAC,CAAC,GAAG;gBACV,CAAC,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE;gBAC3G,CAAC,CAAC,+BAA+B,CAAC;QACtC,KAAK,SAAS;YACZ,OAAO,iDAAiD,CAAC;QAC3D;YACE,OAAO,yDAAyD,CAAC;IACrE,CAAC;AACH,CAAC;AA2CD,4EAA4E;AAC/D,QAAA,qBAAqB,GAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AAEhF,6BAAoC,MAA0B;IAC5D,OAAO,QAAA,qBAAqB,CAAC,QAAQ,CAAC,MAAmB,CAAC,CAAC;AAC7D,CAAC;AAED;;;GAGG;AACH,qBAA4B,IAM3B;IACC,MAAM,OAAO,GAAG,IAAA,qCAAgB,EAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IACrD,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;QACrC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAC/B,OAAO;QACP,UAAU,EAAE,IAAA,iCAAY,EAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;QAC7G,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACxD,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,CAAoC,EAAE,CAAoC;IAC5F,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3B,OAAO,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU;WAC/B,IAAA,qCAAgB,EAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,KAAK,IAAA,qCAAgB,EAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;WACvE,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ;WACzB,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC;AAC3B,CAAC;AAsBD;;;;;;;;;;;;;;;;;GAiBG;AACH,yBAAgC,KAA2B;IACzD,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5G,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,WAAW,IAAI,IAAI,CAAC;IAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC;IACjC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAClD,MAAM,IAAI,GAAG;QACX,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,KAAK;QACL,MAAM;QACN,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAE,SAAmB;QACpD,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,QAAQ,EAAE,EAA0B;KACrC,CAAC;IAEF,qDAAqD;IACrD,IAAI,KAAK,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrG,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;gBACL,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ;gBAC9E,MAAM,EAAE,qDAAqD;aAC9D,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG;YACd,yBAAyB,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,OAAO,UAAU,IAAI,CAAC,UAAU,GAAG;YAClG,oBAAoB;SACrB,CAAC;QACF,IAAI,QAAQ,CAAC,MAAM;YAAE,OAAO,CAAC,IAAI,CAAC,6BAA6B,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAC9H,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,OAAO,CAAC,IAAI,CAAC,WAAW,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5E,OAAO;YACL,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ;YACtF,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;SAC3B,CAAC;IACJ,CAAC;IAED,6DAA6D;IAC7D,MAAM,YAAY,GAA0B,KAAK,CAAC,MAAM;QACtD,CAAC,CAAC,WAAW,CAAC;YACZ,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ;YAC/B,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK;YACzB,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;YAC7B,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM;YACnC,UAAU,EAAE,GAAG;SAChB,CAAC;QACF,CAAC,CAAC,IAAI,CAAC;IAET,yCAAyC;IACzC,MAAM,cAAc,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAE/E,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,IAAI,IAAI,YAAY,CAAC;QAClC,OAAO;YACL,GAAG,IAAI;YACP,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;YAClE,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;gBACV,CAAC,CAAC,UAAU,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,cAAc,cAAc,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,eAAe;gBAC3G,CAAC,CAAC,UAAU,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,cAAc,8BAA8B;SAClF,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,WAAW,CAAC;YACzB,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ;YAC7B,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK;YACvB,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,YAAY,EAAE,OAAO,IAAI,EAAE;YAC1D,cAAc,EAAE,KAAK,EAAQ,wBAAwB;YACrD,UAAU,EAAE,GAAG;SAChB,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,sCAAsC;YACtC,OAAO;gBACL,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI;gBACxE,MAAM,EAAE,cAAc,MAAM,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,sCAAsC;aACpG,CAAC;QACJ,CAAC;QACD,OAAO;YACL,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK;YAC/F,MAAM,EAAE,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE,QAAQ,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,EAAE,KAAK,IAAI,IAAA,qCAAgB,EAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAA,qCAAgB,EAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;gBACtJ,CAAC,CAAC,4BAA4B,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,KAAK,MAAM,MAAM,CAAC,OAAO,GAAG;gBACpF,CAAC,CAAC,4BAA4B,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,KAAK,MAAM,MAAM,CAAC,OAAO,gBAAgB,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM;SACjL,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,EAAE,GAAG,KAAK,CAAC,cAAc,CAAC;QAChC,IAAI,EAAE,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;YAClC,MAAM,WAAW,GAAG,WAAW,CAAC;gBAC9B,QAAQ,EAAE,EAAE,CAAC,QAAQ;gBACrB,KAAK,EAAE,EAAE,CAAC,KAAK;gBACf,OAAO,EAAE,EAAE,CAAC,OAAO,IAAI,YAAY,EAAE,OAAO,IAAI,EAAE;gBAClD,cAAc,EAAE,SAAS;gBACzB,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC;YACH,OAAO;gBACL,GAAG,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK;gBACxG,MAAM,EAAE,+BAA+B,WAAW,CAAC,QAAQ,IAAI,WAAW,CAAC,KAAK,MAAM,WAAW,CAAC,OAAO,0BAA0B;aACpI,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,IAAI,YAAY,CAAC;QAClC,OAAO;YACL,GAAG,IAAI;YACP,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;YAClE,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;gBACV,CAAC,CAAC,4BAA4B,IAAI,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,aAAa,EAAE;gBACxF,CAAC,CAAC,+CAA+C;SACpD,CAAC;IACJ,CAAC;IAED,OAAO;IACP,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,OAAO;YACL,GAAG,IAAI;YACP,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI;YACnF,MAAM,EAAE,IAAI;gBACV,CAAC,CAAC,sCAAsC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,UAAU,UAAU;gBACrG,CAAC,CAAC,2CAA2C;SAChD,CAAC;IACJ,CAAC;IACD,OAAO;QACL,GAAG,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,KAAK;QACzG,MAAM,EAAE,IAAI;YACV,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC;gBAC/B,CAAC,CAAC,yCAAyC,YAAY,CAAC,UAAU,GAAG;gBACrE,CAAC,CAAC,qBAAqB,YAAY,CAAC,QAAQ,IAAI,YAAY,CAAC,KAAK,MAAM,YAAY,CAAC,OAAO,UAAU,YAAY,CAAC,UAAU,gBAAgB,IAAI,CAAC,UAAU,EAAE,CAAC;YACjK,CAAC,CAAC,sBAAsB,YAAY,CAAC,QAAQ,IAAI,YAAY,CAAC,KAAK,MAAM,YAAY,CAAC,OAAO,GAAG;KACnG,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,QAAwB,EAAE,GAAiB;IAC9D,MAAM,GAAG,GAAyB,EAAE,CAAC;IACrC,IAAI,QAAQ,CAAC,QAAQ,KAAK,GAAG,CAAC,QAAQ;QAAE,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC3H,IAAI,QAAQ,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK;QAAE,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5G,IAAI,GAAG,CAAC,OAAO,IAAI,IAAA,qCAAgB,EAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC,KAAK,IAAA,qCAAgB,EAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9F,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAA,qCAAgB,EAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,IAAA,qCAAgB,EAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5H,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,4BAA4B;AAC5B,6BAAoC,CAAmB;IACrD,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM;QAClB,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,UAAU,WAAW,CAAC,CAAC,MAAM,CAAC,cAAc,GAAG;QAChI,CAAC,CAAC,aAAa,CAAC;IAClB,OAAO,GAAG,CAAC,CAAC,MAAM,WAAW,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;AACtI,CAAC;AA8BD,4DAA4D;AAC5D,qBAA4B,GAA6B;IACvD,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;SACrB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,IAAA,kCAAmB,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SAClD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC;AAC7F,CAAC;AAED,mDAAmD;AACnD,qBAA4B,GAAG,KAAsB;IACnD,MAAM,GAAG,GAAkB,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;YACnD,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;GAMG;AACH,gCAAuC,IAKtC;IACC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,IAAI,IAAI,CAAC;IAC/C,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACvI,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACpE,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,kCAAmB,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5E,OAAO;QACL,YAAY;QACZ,IAAI;QACJ,EAAE;QACF,MAAM,EAAE,IAAI;QACZ,kBAAkB,EAAE,QAAQ,CAAC,MAAM;QACnC,aAAa,EAAE,OAAO;QACtB,eAAe,EAAE,IAAI,CAAC,MAAM;YAC1B,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,mDAAmD,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACrI,CAAC,CAAC,8BAA8B;KACnC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,4BAAmC,MAAqB,EAAE,IAAY,EAAE,IAAa;IACnF,MAAM,CAAC,GAAG,IAAA,2BAAY,EAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC;IACvG,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACtE,CAAC;AAED,+DAA+D;AAC/D,yBAAyB;AACzB,+DAA+D;AAE/D,wDAAwD;AAC3C,QAAA,2BAA2B,GAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;AAO7G;;;;;;GAMG;AACH,kCAAyC,IAAwE;IAC/G,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;IAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACzB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,KAAK,QAAQ;gBACrD,CAAC,CAAC,oEAAoE;gBACtE,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS;oBACvB,CAAC,CAAC,oDAAoD;oBACtD,CAAC,CAAC,sBAAsB,EAAE,CAAC;IACjC,CAAC;IACD,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,6BAA6B,EAAE,CAAC;IAC3E,IAAI,CAAC,QAAA,2BAA2B,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,GAAG,uCAAuC,EAAE,CAAC;IAC9F,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,GAAG,kBAAkB,EAAE,CAAC;AACxE,CAAC;AAED,gDAAgD;AAChD,4BACE,OAA8B,EAC9B,UAA4B;IAE5B,KAAK,MAAM,CAAC,IAAI,UAAU,IAAI,EAAE,EAAE,CAAC;QACjC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,KAAK;YAAE,SAAS;QAC5C,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;YAAE,SAAS;QACrC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,OAAO,UAAU,CAAC,CAAC,UAAU,GAAG,EAAE,CAAC;IACjH,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,8BAA8B,EAAE,CAAC;AAC/D,CAAC;AAED,+DAA+D;AAC/D,2BAA2B;AAC3B,+DAA+D;AAE/D;IACE,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;AAC7D,CAAC;AAED,yBAAgC,MAAc;IAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,GAAG,MAAM,OAAO,CAAC,CAAC;AACvD,CAAC;AAED,+CAA+C;AAC/C,KAAK,UAAU,eAAe,CAAC,MAAc,EAAE,KAAsB;IACnE,MAAM,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,MAAM,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;IAC/E,MAAM,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACzE,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACI,KAAK,+BACV,MAAc,EACd,MAAuB,EACvB,IAAI,GAA2B,EAAE;IAEjC,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAC5D,MAAM,KAAK,GAAoB;QAC7B,GAAG,MAAM,CAAC,MAAM;QAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,SAAS;KACvC,CAAC;IACF,MAAM,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACrC,CAAC;AAED;;;;GAIG;AACI,KAAK,8BAA8B,MAAc,EAAE,IAAI,GAA6B,EAAE;IAC3F,IAAI,MAAM,GAAQ,IAAI,CAAC,UAAU,CAAC;IAClC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,GAAG,wDAAa,iBAAiB,GAAC,CAAC;YACrD,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YAAC,MAAM,GAAG,IAAI,CAAC;QAAC,CAAC;IAC5B,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAE,MAAc,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;IAClG,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACpD,MAAM,MAAM,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;QAChD,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;YAC7C,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,iCAAiC,CAAC;YAC/E,GAAG,EAAE,UAAU;SAChB,CAAC;IACJ,CAAC;IACD,IAAI,QAA4B,CAAC;IACjC,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACxE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,0DAA0D;QAC1D,MAAM,IAAI,GAAI,GAA6B,EAAE,IAAI,CAAC;QAClD,IAAI,IAAI,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO;gBACL,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;gBACxB,MAAM,EAAE,SAAS;gBACjB,QAAQ,EAAE,CAAC,aAAa,IAAI,yBAAyB,CAAC;gBACtD,GAAG,EAAE,SAAS;aACf,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;IACvF,CAAC;IACD,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,uCAAuC;QACvC,OAAO;YACL,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACxB,MAAM,EAAE,SAAS;YACjB,QAAQ,EAAE,CAAC,WAAW,MAAM,CAAE,GAAa,EAAE,OAAO,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,sCAAsC,CAAC;YACjH,GAAG,EAAE,SAAS;SACf,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACzC,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QACzC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,6BAA6B,CAAC;QAC3E,GAAG;KACJ,CAAC;AACJ,CAAC;AAkBD;;;;;;GAMG;AACI,KAAK,iCACV,KAAa,EACb,IAAI,GAAkC,EAAE;IAExC,MAAM,GAAG,GAAG,MAAM,IAAA,sBAAO,EAAC,KAAK,CAAC,CAAC;IACjC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACzB,IAAI,YAAY,GAA0B,SAAS,CAAC;IACpD,IAAI,cAAc,GAAa,EAAE,CAAC;IAClC,IAAI,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACrB,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;IACjC,CAAC;IACD,IAAI,MAAM,GAAgC,IAAI,CAAC;IAC/C,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;QAAE,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;SACvD,CAAC;QAAC,IAAI,CAAC;YAAC,MAAM,GAAG,MAAM,IAAA,yCAAoB,EAAC,EAAE,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,MAAM,GAAG,IAAI,CAAC;QAAC,CAAC;IAAC,CAAC;IAElF,MAAM,QAAQ,GAAG,eAAe,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAE3I,IAAI,KAAmD,CAAC;IACxD,IAAI,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,MAAM,IAAA,gCAAiB,EAAC,KAAK,EAAE;YACzC,EAAE,EAAE,QAAQ,CAAC,MAAM;YACnB,IAAI,EAAE,GAAG,CAAC,WAAW,IAAI,IAAI;YAC7B,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ;YACzD,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,MAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAuB;YAC/I,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YACrC,aAAa,EAAE,CAAC;YAChB,MAAM,EAAE,GAAG,CAAC,MAAM;SACnB,CAAC,CAAC;QACH,KAAK,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;IAC7C,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC;AAC3D,CAAC;AAgCD;;;;;;;;;;GAUG;AACI,KAAK,8BAA8B,IAAI,GAA+B,EAAE;IAC7E,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAA,sBAAO,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACtE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,EAAE,MAAM,CAAC;IAE9C,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACzB,IAAI,YAAY,GAA0B,SAAS,CAAC;IACpD,IAAI,cAAc,GAAa,EAAE,CAAC;IAClC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACrB,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;IACjC,CAAC;SAAM,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,GAAG,SAAS,CAAC,CAAG,yBAAyB;IACjD,CAAC;IAED,IAAI,MAAmC,CAAC;IACxC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;QAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;SAC/C,CAAC;QACJ,IAAI,CAAC;YAAC,MAAM,GAAG,MAAM,IAAA,yCAAoB,EAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,MAAM,GAAG,IAAI,CAAC;QAAC,CAAC;IACxG,CAAC;IACD,IAAI,cAAc,GAA0B,IAAI,CAAC;IACjD,IAAI,CAAC;QAAC,cAAc,GAAG,MAAM,IAAA,yCAAoB,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,cAAc,GAAG,IAAI,CAAC;IAAC,CAAC;IAEtG,MAAM,QAAQ,GAAG,eAAe,CAAC;QAC/B,MAAM,EAAE,UAAU;QAClB,GAAG,EAAE,OAAO;QACZ,MAAM;QACN,cAAc;QACd,MAAM;QACN,cAAc;QACd,GAAG,EAAE,IAAI,CAAC,GAAG;KACd,CAAC,CAAC;IAEH,sDAAsD;IACtD,IAAI,aAAa,GAAG,QAAQ,CAAC;IAC7B,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;QACnF,MAAM,OAAO,GAAG,wBAAwB,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAC/F,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;YAClF,IAAI,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAC/B,aAAa,GAAG;oBACd,GAAG,QAAQ;oBACX,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,MAAM,EAAE,qBAAqB;oBAC7B,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,WAAW,IAAI,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;oBAClE,MAAM,EAAE,KAAK;oBACb,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE;iBAClE,CAAC;YACJ,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC3B,aAAa,GAAG,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YACrG,CAAC;QACH,CAAC;aAAM,CAAC;YACN,aAAa,GAAG,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACnF,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEnG,6CAA6C;IAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,SAAS,CAAC;IAC9D,IAAI,KAAK,GAAoC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,8DAA8D,EAAE,CAAC;IACnI,IAAI,WAAW,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;QACxC,MAAM,OAAO,GACX,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU;YACxC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU;gBACnC,CAAC,CAAC,QAAQ,CAAC;QACjB,MAAM,GAAG,GAAG,MAAM,IAAA,gCAAiB,EAAC,WAAW,EAAE;YAC/C,EAAE,EAAE,aAAa,CAAC,MAAM;YACxB,IAAI,EAAE,OAAO,EAAE,WAAW,IAAI,IAAI;YAClC,OAAO;YACP,IAAI,EAAE,CAAC,aAAa,CAAC,IAAI,KAAK,MAAM,IAAI,aAAa,CAAC,IAAI,KAAK,QAAQ,IAAI,aAAa,CAAC,IAAI,KAAK,SAAS;gBACzG,CAAC,CAAC,aAAa,CAAC,IAAI;gBACpB,CAAC,CAAC,SAAS,CAAuB;YACpC,MAAM,EAAE,aAAa,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM;YACvE,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YAC1C,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC5D,MAAM;SACP,CAAC,CAAC;QACH,KAAK,GAAG,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;QACzC,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,KAAK,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,kBAAkB,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;IACnG,CAAC;SAAM,IAAI,WAAW,EAAE,CAAC;QACvB,KAAK,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,iCAAiC,EAAE,CAAC;IACzF,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,aAAa;QACvB,YAAY;QACZ,mBAAmB,EAAE,aAAa,CAAC,MAAM,IAAI,SAAS;QACtD,KAAK;QACL,YAAY;QACZ,cAAc;KACf,CAAC;AACJ,CAAC"}
|
|
@@ -63,7 +63,8 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
63
63
|
};
|
|
64
64
|
})();
|
|
65
65
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
66
|
-
exports.PUBLIC_HEX_KEYS = exports.FORBIDDEN_PUBLIC_KEYS = exports.OPEN_TASK_KEYS = exports.CHAIN_LABELS = exports.PUBLIC_MAINNET_CHAIN_ID = exports.PUBLIC_TESTNET_CHAIN_ID = exports.PULSE_EVENT_ACTIVITY = exports.CHAIN_EVENT_ACTIVITY = exports.CONFIRMED_ACTIVITY_LIMIT = exports.MAX_OPEN_TASKS = exports.MAX_AGENT_SITES = exports.pulseDir = exports.NETWORK_EVENT_TYPES = exports.PULSE_LIMITS = void 0;
|
|
66
|
+
exports.PUBLIC_HEX_KEYS = exports.FORBIDDEN_PUBLIC_KEYS = exports.OPEN_TASK_KEYS = exports.TOTALS_FIELD_KEYS = exports.CHAIN_LABELS = exports.PUBLIC_MAINNET_CHAIN_ID = exports.PUBLIC_TESTNET_CHAIN_ID = exports.PULSE_EVENT_ACTIVITY = exports.CHAIN_EVENT_ACTIVITY = exports.CONFIRMED_ACTIVITY_LIMIT = exports.MAX_OPEN_TASKS = exports.MAX_AGENT_SITES = exports.pulseDir = exports.NETWORK_EVENT_TYPES = exports.PULSE_LIMITS = void 0;
|
|
67
|
+
exports.tallySignatureAudit = tallySignatureAudit;
|
|
67
68
|
exports.nodeDigest = nodeDigest;
|
|
68
69
|
exports.capabilityGroup = capabilityGroup;
|
|
69
70
|
exports.bucketOf = bucketOf;
|
|
@@ -86,6 +87,7 @@ exports.isPublicChainId = isPublicChainId;
|
|
|
86
87
|
exports.summarizeActivityRows = summarizeActivityRows;
|
|
87
88
|
exports.buildChainIdScope = buildChainIdScope;
|
|
88
89
|
exports.snapshotConsistencyIssues = snapshotConsistencyIssues;
|
|
90
|
+
exports.totalsScopeIssues = totalsScopeIssues;
|
|
89
91
|
exports.openTasksIssues = openTasksIssues;
|
|
90
92
|
exports.computeSnapshot = computeSnapshot;
|
|
91
93
|
exports.getNetworkPulse = getNetworkPulse;
|
|
@@ -172,7 +174,34 @@ function writeEvents(list, h) {
|
|
|
172
174
|
/* 统计失败绝不影响主路径 */
|
|
173
175
|
}
|
|
174
176
|
}
|
|
175
|
-
|
|
177
|
+
function tallySignatureAudit(h, opts = {}) {
|
|
178
|
+
const now = opts.now ?? Date.now();
|
|
179
|
+
const windowMs = opts.windowMs ?? exports.PULSE_LIMITS.windowMs;
|
|
180
|
+
const file = path.join(home(h), '.bolloon', 'wallet-signatures.jsonl');
|
|
181
|
+
if (!fs.existsSync(file))
|
|
182
|
+
return { available: false, count: 0, window_ms: windowMs };
|
|
183
|
+
let count = 0;
|
|
184
|
+
try {
|
|
185
|
+
for (const line of fs.readFileSync(file, 'utf8').split('\n')) {
|
|
186
|
+
if (!line.trim())
|
|
187
|
+
continue;
|
|
188
|
+
let row = null;
|
|
189
|
+
try {
|
|
190
|
+
row = JSON.parse(line);
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
continue;
|
|
194
|
+
} // 坏行跳过, 不让一行坏数据毁掉整个计数
|
|
195
|
+
const at = Number(row?.at);
|
|
196
|
+
if (Number.isFinite(at) && at >= now - windowMs)
|
|
197
|
+
count += 1;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
catch {
|
|
201
|
+
return { available: false, count: 0, window_ms: windowMs };
|
|
202
|
+
}
|
|
203
|
+
return { available: true, count, window_ms: windowMs };
|
|
204
|
+
}
|
|
176
205
|
/** 节点摘要: sha256(值) 前 16 位。不可逆, 不暴露原值。 */
|
|
177
206
|
function nodeDigest(value) {
|
|
178
207
|
return crypto.createHash('sha256').update(`bolloon-pulse|${String(value)}`).digest('hex').slice(0, 16);
|
|
@@ -797,6 +826,8 @@ function buildChainIdScope(rows) {
|
|
|
797
826
|
* (页面不许出现「0 个任务」与「N 行任务」并存而**不解释**)
|
|
798
827
|
* ⑥ 0x 长 hex 越界 (2026-09-23): 只许出现在 tx_hash/contract/explorer_* 四个白名单键下 ——
|
|
799
828
|
* EOA 地址跑到别的键 (或白名单键形状不对) 就拒绝导出
|
|
829
|
+
* ⑧ ★ **同一概念不许并排两个数** (2026-09-24, 见 `totalsScopeIssues`): 顶部计数与表格行数/
|
|
830
|
+
* 同源计数矛盾, 或者某个数没有来源却不标「未接入」→ 拒绝导出 (这道门在 UI 侧还有一份镜像)
|
|
800
831
|
*/
|
|
801
832
|
function snapshotConsistencyIssues(snap) {
|
|
802
833
|
const issues = [];
|
|
@@ -825,8 +856,137 @@ function snapshotConsistencyIssues(snap) {
|
|
|
825
856
|
}
|
|
826
857
|
issues.push(...auditPublicHexLeaks(snap)); // ⑥ 0x 长 hex 越界 → 拒绝导出 (不静默放行)
|
|
827
858
|
issues.push(...openTasksIssues(snap)); // ⑦ 待接单任务的字段白名单与「只含未认领」不变式
|
|
859
|
+
issues.push(...totalsScopeIssues(snap)); // ⑧ ★ 同一概念不得并排两个数 (顶部 vs 表格)
|
|
828
860
|
return issues;
|
|
829
861
|
}
|
|
862
|
+
/** 顶部逐字段口径的键 (与 `TotalsFieldKey` 逐字一致; 少一个 = 那个数没有来源说明) */
|
|
863
|
+
exports.TOTALS_FIELD_KEYS = [
|
|
864
|
+
'nodes', 'agents', 'active_agents', 'seen_last_24h',
|
|
865
|
+
'tasks', 'tasks_completed', 'tasks_verified', 'tasks_settled', 'signatures',
|
|
866
|
+
];
|
|
867
|
+
const TOTALS_FIELD_SOURCES = ['pulse-events', 'chain-index', 'signature-audit', 'none'];
|
|
868
|
+
const TOTALS_FIELD_WINDOWS = ['window-24h', 'full', 'unknown'];
|
|
869
|
+
/** 「未接入」类措辞 (无源时必须出现, 否则等于没说清为什么没有数) */
|
|
870
|
+
const UNAVAILABLE_WORDS = /未接入|not connected|无可用源|no available source/;
|
|
871
|
+
/**
|
|
872
|
+
* ★ 新不变量门 (2026-09-24 leo:「数量怎么对不上」): **同一概念不许并排两个数**。
|
|
873
|
+
*
|
|
874
|
+
* 检查的是「页面会把它们放在同一屏里」的那几个数 —— 它们的口径必须各自挂得住:
|
|
875
|
+
* ① 逐字段口径 `totals_scope.fields` 九个键必须齐 (source/window/short/label 双语都在) ——
|
|
876
|
+
* 缺了就只能靠 notes 辩解, 而那正是当初「顶部 0 个任务 vs 表格 25 行」能上线的路径;
|
|
877
|
+
* ② 值 `null` ⇔ 口径标 `none` + 明说「未接入」; **有源却不给数** 或 **无源却拿 0 冒充** 都算矛盾;
|
|
878
|
+
* ③ 同一概念对账 (表里有 5 个任务而顶部写 0 任务 → 判红):
|
|
879
|
+
* · 链上索引可用时, 顶部 tasks/tasks_completed/tasks_settled **必须逐字等于** activity_totals
|
|
880
|
+
* 的同名字段 (同源即恒等, 任何解释都救不了);
|
|
881
|
+
* · 表格行数/同源计数非零而顶部为 0 或缺值 → 必须有口径说明 (note 里写清) 才放行;
|
|
882
|
+
* · 顶部说有 N 个任务而表格一行都没有 (反向矛盾) → 同样判红。
|
|
883
|
+
* `status === 'unavailable'` 的整份快照不发布任何计数 (页面整块显示「快照读不到」), 故只查形状。
|
|
884
|
+
*/
|
|
885
|
+
function totalsScopeIssues(snap) {
|
|
886
|
+
const out = [];
|
|
887
|
+
const t = snap?.totals || {};
|
|
888
|
+
const ts = snap?.totals_scope;
|
|
889
|
+
const at = snap?.activity_totals || {};
|
|
890
|
+
const rows = Array.isArray(snap?.confirmed_activity) ? snap.confirmed_activity : [];
|
|
891
|
+
const unavailableSnap = String(snap?.status || '') === 'unavailable';
|
|
892
|
+
if (!ts || typeof ts !== 'object')
|
|
893
|
+
return ['totals_scope 缺失 (顶部计数的口径必须随快照一起给)'];
|
|
894
|
+
if (!ts.fields || typeof ts.fields !== 'object') {
|
|
895
|
+
return ['totals_scope.fields 缺失 (顶部每个数都要能就地说明来自哪 —— 不许只靠 notes 辩解)'];
|
|
896
|
+
}
|
|
897
|
+
// ① 形状: 九个键齐 + 每个键的 source/window/short/label 都合法
|
|
898
|
+
for (const k of exports.TOTALS_FIELD_KEYS) {
|
|
899
|
+
const f = ts.fields[k];
|
|
900
|
+
if (!f || typeof f !== 'object') {
|
|
901
|
+
out.push(`totals_scope.fields.${k} 缺失`);
|
|
902
|
+
continue;
|
|
903
|
+
}
|
|
904
|
+
if (!TOTALS_FIELD_SOURCES.includes(f.source))
|
|
905
|
+
out.push(`totals_scope.fields.${k}.source=${JSON.stringify(f.source)} 不在白名单`);
|
|
906
|
+
if (!TOTALS_FIELD_WINDOWS.includes(f.window))
|
|
907
|
+
out.push(`totals_scope.fields.${k}.window=${JSON.stringify(f.window)} 不在白名单`);
|
|
908
|
+
if (!f.label?.zh || !f.label?.en)
|
|
909
|
+
out.push(`totals_scope.fields.${k}.label 必须双语都给`);
|
|
910
|
+
if (!f.short?.zh || !f.short?.en)
|
|
911
|
+
out.push(`totals_scope.fields.${k}.short 必须双语都给 (页面要就地贴在数字旁)`);
|
|
912
|
+
}
|
|
913
|
+
if (out.length)
|
|
914
|
+
return out; // 形状都不对就不往下算数
|
|
915
|
+
if (!unavailableSnap) {
|
|
916
|
+
// ② 值 ⇔ 口径 (null = 未接入; 有源必须有数; 无源不许给 0)
|
|
917
|
+
for (const k of exports.TOTALS_FIELD_KEYS) {
|
|
918
|
+
const f = ts.fields[k];
|
|
919
|
+
const v = t[k];
|
|
920
|
+
const isNull = v === null || v === undefined;
|
|
921
|
+
if (isNull) {
|
|
922
|
+
if (f.source !== 'none') {
|
|
923
|
+
out.push(`totals.${k} 没有值 (未接入) 却标了源 ${f.source} —— 有源就必须给真值, 没源就标 none`);
|
|
924
|
+
}
|
|
925
|
+
if (!UNAVAILABLE_WORDS.test(`${f.short?.zh}${f.short?.en}${f.label?.zh}${f.label?.en}`)) {
|
|
926
|
+
out.push(`totals.${k} 没有值却没有一句「未接入」说明 (读者会把空白读成 0)`);
|
|
927
|
+
}
|
|
928
|
+
}
|
|
929
|
+
else {
|
|
930
|
+
if (typeof v !== 'number' || !Number.isFinite(v) || v < 0) {
|
|
931
|
+
out.push(`totals.${k}=${JSON.stringify(v)} 不是非负有限数`);
|
|
932
|
+
}
|
|
933
|
+
else if (f.source === 'none') {
|
|
934
|
+
out.push(`totals.${k}=${v} 却标「无源」 —— 不许拿裸 0 冒充「没有接入」(那会被读成"没发生过")`);
|
|
935
|
+
}
|
|
936
|
+
}
|
|
937
|
+
}
|
|
938
|
+
// ③ 同一概念对账 (顶部计数 vs 表格行数/同源计数)
|
|
939
|
+
const notes = Array.isArray(snap.notes) ? snap.notes.join(' ') : '';
|
|
940
|
+
const pairs = [
|
|
941
|
+
['tasks', t.tasks, at.tasks],
|
|
942
|
+
['tasks_completed', t.tasks_completed, at.tasks_completed],
|
|
943
|
+
['tasks_settled', t.tasks_settled, at.tasks_settled],
|
|
944
|
+
];
|
|
945
|
+
const tableRows = Number(at.rows) || rows.length;
|
|
946
|
+
const sameSourceChain = String(at.source) === 'chain-index';
|
|
947
|
+
// ⑨ 声明与能力不符: 某字段自称「链上索引」口径, 而这一份快照的链上索引根本不可用 ——
|
|
948
|
+
// 那就是替一个不存在的源背书 (页面会写「链上索引·全量」, 而索引这一份没读出来)。
|
|
949
|
+
// 注: 本块必须放在 pairs / sameSourceChain 之后 (先声明后使用, 否则 TDZ 崩)。
|
|
950
|
+
if (!sameSourceChain) {
|
|
951
|
+
for (const [k] of pairs) {
|
|
952
|
+
const f = ts.fields[k];
|
|
953
|
+
if (f.source === 'chain-index') {
|
|
954
|
+
out.push(`totals_scope.fields.${k}.source='chain-index' 而这一份快照的链上索引不可用 ` +
|
|
955
|
+
`(activity_totals.source=${JSON.stringify(at.source)}) —— 声明与能力不符`);
|
|
956
|
+
}
|
|
957
|
+
}
|
|
958
|
+
}
|
|
959
|
+
for (const [k, top, src] of pairs) {
|
|
960
|
+
const n = Number(src) || 0;
|
|
961
|
+
const topN = (top === null || top === undefined) ? null : Number(top);
|
|
962
|
+
const topScope = ts.fields[k];
|
|
963
|
+
if (sameSourceChain && topScope.source === 'chain-index') {
|
|
964
|
+
// 同源: 必须逐字相等, 不需要任何"解释"
|
|
965
|
+
if (topN !== n) {
|
|
966
|
+
out.push(`同一概念两个数: 顶部 totals.${k}=${topN === null ? '未接入' : topN} ≠ 链上索引同源计数 activity_totals.${k}=${n}` +
|
|
967
|
+
` (表格 ${tableRows} 行) —— 同源即恒等, 页面并排出现两个数就是矛盾`);
|
|
968
|
+
}
|
|
969
|
+
continue;
|
|
970
|
+
}
|
|
971
|
+
if (n > 0 && (topN === null || topN === 0)) {
|
|
972
|
+
const explained = notes.includes('口径') && notes.includes(String(tableRows)) && notes.includes('脉冲事件');
|
|
973
|
+
if (!explained) {
|
|
974
|
+
out.push(`顶部 totals.${k}=${topN === null ? '未接入' : 0} 与表格里的 ${n} 个同类 (${tableRows} 行) 矛盾, 且没有任何口径说明`);
|
|
975
|
+
}
|
|
976
|
+
}
|
|
977
|
+
if (topN !== null && n === 0 && tableRows === 0 && topN > 0) {
|
|
978
|
+
out.push(`顶部 totals.${k}=${topN} 而表格一行都没有 (${tableRows} 行) —— 反向矛盾: 数不出行却报了数`);
|
|
979
|
+
}
|
|
980
|
+
}
|
|
981
|
+
}
|
|
982
|
+
// ④ 明说"数字不一样"时必须有解释 (老规矩保留; 不许只靠一句 label)
|
|
983
|
+
if (ts.differs_from_activity === true) {
|
|
984
|
+
const notes = Array.isArray(snap.notes) ? snap.notes.join(' ') : '';
|
|
985
|
+
if (!notes.includes('口径'))
|
|
986
|
+
out.push('totals_scope.differs_from_activity=true 但 notes 里没有任何口径说明');
|
|
987
|
+
}
|
|
988
|
+
return out;
|
|
989
|
+
}
|
|
830
990
|
/** open_tasks 行的字段白名单 (与 `OpenTaskRow` 逐字一致; 多一个键 = 可能把正文/身份带出去了) */
|
|
831
991
|
exports.OPEN_TASK_KEYS = ['capability', 'budget', 'currency', 'network', 'deadline', 'claimed', 'announcementId'];
|
|
832
992
|
/**
|
|
@@ -867,26 +1027,85 @@ function openTasksIssues(snap) {
|
|
|
867
1027
|
});
|
|
868
1028
|
return out;
|
|
869
1029
|
}
|
|
1030
|
+
// ── 顶部计数的逐字段口径 (2026-09-24) ────────────────────────────────────────
|
|
1031
|
+
// 页面把 8~9 个数字并排放在**一行**里, 一行一个总口径是解释不了它们的 —— 每个数必须自带来源。
|
|
1032
|
+
const WINDOW_HOURS = Math.round(exports.PULSE_LIMITS.windowMs / 3600000);
|
|
1033
|
+
/** 「本节点 N h 脉冲事件」口径 (节点/智能体类计数, 以及链上索引不可用时的降级口径) */
|
|
1034
|
+
function pulseField(what) {
|
|
1035
|
+
return {
|
|
1036
|
+
source: 'pulse-events',
|
|
1037
|
+
window: 'window-24h',
|
|
1038
|
+
short: { zh: `${WINDOW_HOURS}h 脉冲`, en: `${WINDOW_HOURS}h pulse` },
|
|
1039
|
+
label: {
|
|
1040
|
+
zh: `本节点 ${WINDOW_HOURS}h 观察窗口内收到的脉冲事件 · ${what.zh}`,
|
|
1041
|
+
en: `pulse events received by this node within the ${WINDOW_HOURS}h window · ${what.en}`,
|
|
1042
|
+
},
|
|
1043
|
+
};
|
|
1044
|
+
}
|
|
1045
|
+
/** 「链上索引 · 全量」口径 (与下方活动表**同源**: 同源即恒等, 页面不许并排两个数) */
|
|
1046
|
+
function chainField(what) {
|
|
1047
|
+
return {
|
|
1048
|
+
source: 'chain-index',
|
|
1049
|
+
window: 'full',
|
|
1050
|
+
short: { zh: '链上索引·全量', en: 'chain index · whole' },
|
|
1051
|
+
label: {
|
|
1052
|
+
zh: `链上索引全量 (与下方活动表同源) · ${what.zh}`,
|
|
1053
|
+
en: `chain index, whole (same source as the activity table below) · ${what.en}`,
|
|
1054
|
+
},
|
|
1055
|
+
};
|
|
1056
|
+
}
|
|
1057
|
+
/** 「本机签名审计账」口径 (真源: `<home>/.bolloon/wallet-signatures.jsonl` 窗口内条数) */
|
|
1058
|
+
function signatureAuditField() {
|
|
1059
|
+
return {
|
|
1060
|
+
source: 'signature-audit',
|
|
1061
|
+
window: 'window-24h',
|
|
1062
|
+
short: { zh: `${WINDOW_HOURS}h 签名审计`, en: `${WINDOW_HOURS}h signature audit` },
|
|
1063
|
+
label: {
|
|
1064
|
+
zh: `本机签名审计账 (wallet-signatures.jsonl) ${WINDOW_HOURS}h 内条数 —— 只数条数, 不含签名内容`,
|
|
1065
|
+
en: `rows in this node's signature audit log (wallet-signatures.jsonl) within ${WINDOW_HOURS}h — count only, no content`,
|
|
1066
|
+
},
|
|
1067
|
+
};
|
|
1068
|
+
}
|
|
1069
|
+
/** 「没有可用源」= 未接入 (值必须是 null; 页面必须写「未接入」, 不许拿 0 冒充「没发生过」) */
|
|
1070
|
+
function noneField(why) {
|
|
1071
|
+
return {
|
|
1072
|
+
source: 'none',
|
|
1073
|
+
window: 'unknown',
|
|
1074
|
+
short: { zh: '未接入', en: 'not connected' },
|
|
1075
|
+
label: { zh: `没有可用源 → 报「未接入」而不是 0 · ${why.zh}`, en: `no available source → reported as "not connected", not 0 · ${why.en}` },
|
|
1076
|
+
unavailable: true,
|
|
1077
|
+
};
|
|
1078
|
+
}
|
|
870
1079
|
function computeSnapshot(events, opts) {
|
|
871
1080
|
const now = opts.now;
|
|
872
1081
|
const fresh_until = now + exports.PULSE_LIMITS.snapshotTtlMs;
|
|
873
1082
|
if (opts.unavailable) {
|
|
874
1083
|
const emptyRows = [];
|
|
875
1084
|
const gates = normalizeActivityGates(chain_config_js_1.DEFAULT_CONFIRMATIONS);
|
|
1085
|
+
// 观察层不可用 = **没有数** (不是 0): 计数一律 null/0 占位由页面整块隐藏, 口径逐字段标「未接入」。
|
|
1086
|
+
const downField = noneField({ zh: '观察层不可用', en: 'observation layer unavailable' });
|
|
876
1087
|
return {
|
|
877
1088
|
status: 'unavailable',
|
|
878
1089
|
generated_at: now,
|
|
879
1090
|
fresh_until,
|
|
880
1091
|
scope: 'observed',
|
|
881
1092
|
scope_label: { zh: '当前节点观察到', en: 'Observed by this node' },
|
|
882
|
-
totals: {
|
|
1093
|
+
totals: {
|
|
1094
|
+
nodes: 0, agents: 0, active_agents: 0, seen_last_24h: 0,
|
|
1095
|
+
tasks: null, tasks_completed: null, tasks_verified: null, signatures: null, tasks_settled: null,
|
|
1096
|
+
},
|
|
883
1097
|
totals_scope: {
|
|
884
1098
|
source: 'pulse-events', window_ms: exports.PULSE_LIMITS.windowMs,
|
|
885
1099
|
label: {
|
|
886
|
-
zh:
|
|
887
|
-
en: `
|
|
1100
|
+
zh: `本节点 ${WINDOW_HOURS}h 观察窗口的脉冲事件层不可用 → 没有数 (不是 0)`,
|
|
1101
|
+
en: `This node's ${WINDOW_HOURS}h pulse layer is unavailable → no counts (not zero)`,
|
|
888
1102
|
},
|
|
889
1103
|
differs_from_activity: false,
|
|
1104
|
+
fields: {
|
|
1105
|
+
nodes: downField, agents: downField, active_agents: downField, seen_last_24h: downField,
|
|
1106
|
+
tasks: downField, tasks_completed: downField, tasks_verified: downField,
|
|
1107
|
+
tasks_settled: downField, signatures: downField,
|
|
1108
|
+
},
|
|
890
1109
|
},
|
|
891
1110
|
capabilities: [],
|
|
892
1111
|
recent_activity: [],
|
|
@@ -928,10 +1147,13 @@ function computeSnapshot(events, opts) {
|
|
|
928
1147
|
capabilities.push({ key: 'other', count: otherCount.size });
|
|
929
1148
|
capabilities.sort((a, b) => b.count - a.count || (a.key < b.key ? -1 : 1));
|
|
930
1149
|
}
|
|
931
|
-
//
|
|
1150
|
+
// 经济计数 (**脉冲口径**) —— 注意: 顶部「任务/已完成/已结算」的**权威源是链上索引**
|
|
1151
|
+
// (见下面 chainAuthoritative 那一段), 脉冲口径只在索引不可用时才顶上去。
|
|
1152
|
+
// 按**不同任务**去重 (同一任务重复事件不虚增), 且只给聚合数不给内容
|
|
932
1153
|
const tasks = new Set();
|
|
933
1154
|
const tasksCompleted = new Set();
|
|
934
1155
|
const tasksVerified = new Set();
|
|
1156
|
+
const tasksSettledPulse = new Set();
|
|
935
1157
|
for (const e of window) {
|
|
936
1158
|
const t = e.taskProof;
|
|
937
1159
|
if (!t)
|
|
@@ -940,6 +1162,8 @@ function computeSnapshot(events, opts) {
|
|
|
940
1162
|
tasks.add(t);
|
|
941
1163
|
if (e.type === 'task_completed' || e.type === 'trade_settled')
|
|
942
1164
|
tasksCompleted.add(t);
|
|
1165
|
+
if (e.type === 'trade_settled')
|
|
1166
|
+
tasksSettledPulse.add(t);
|
|
943
1167
|
if (e.type === 'trade_verified')
|
|
944
1168
|
tasksVerified.add(t);
|
|
945
1169
|
}
|
|
@@ -964,15 +1188,62 @@ function computeSnapshot(events, opts) {
|
|
|
964
1188
|
// 同源计数 + 链归属: **输入就是上表那批行**, 所以不可能与行数/链 id 打架
|
|
965
1189
|
const activity_totals = summarizeActivityRows(activity.rows, { source: activity.source, gates: activity.gates });
|
|
966
1190
|
const chain_id_scope = buildChainIdScope(activity.rows);
|
|
1191
|
+
// ★ 2026-09-24 (leo: 「数量怎么对不上, 尤其是后面的任务和钱包」):
|
|
1192
|
+
// 顶部任务类计数的**权威源改成链上索引** —— 它与下面那张表**同源**, 同源即恒等,
|
|
1193
|
+
// 从根上消灭「顶部 0 个任务 / 表格 15 行任务」这种并排矛盾 (不再靠 notes 辩解)。
|
|
1194
|
+
// 链上索引不可用 (降级 pulse-events) 时才退回旧的脉冲口径, 并在 fields 里如实标出降级。
|
|
1195
|
+
const chainAuthoritative = activity.source === 'chain-index';
|
|
1196
|
+
const totalsTasks = chainAuthoritative ? activity_totals.tasks : tasks.size;
|
|
1197
|
+
const totalsCompleted = chainAuthoritative ? activity_totals.tasks_completed : tasksCompleted.size;
|
|
1198
|
+
const totalsSettled = chainAuthoritative ? activity_totals.tasks_settled : tasksSettledPulse.size;
|
|
1199
|
+
// 「验真」在链上索引里**没有**对应事件 → 链上口径下这个数没有源 (null + 未接入), 不拿结算数冒充已验证
|
|
1200
|
+
const totalsVerified = chainAuthoritative ? null : tasksVerified.size;
|
|
1201
|
+
// 钱包签名: 真源 = 本机签名审计账 (窗口内条数, 只计数); 没有审计账 → 退回脉冲事件上报数;
|
|
1202
|
+
// 两个都没有 → null (未接入)。**绝不**在没有源的时候报 0 (那是「没发生过」, 是另一句话)。
|
|
1203
|
+
const sigTally = opts.signatureAudit ?? null;
|
|
1204
|
+
const auditWired = !!sigTally && sigTally.available === true;
|
|
1205
|
+
const totalsSignatures = auditWired
|
|
1206
|
+
? Number(sigTally.count)
|
|
1207
|
+
: (signatureKeys.size > 0 ? signatureKeys.size : null);
|
|
1208
|
+
const fields = {
|
|
1209
|
+
nodes: pulseField({ zh: '不同节点数', en: 'distinct nodes' }),
|
|
1210
|
+
agents: pulseField({ zh: '不同 Agent 数', en: 'distinct agents' }),
|
|
1211
|
+
active_agents: pulseField({ zh: '活跃 Agent 数', en: 'active agents' }),
|
|
1212
|
+
seen_last_24h: pulseField({ zh: '24h 内出现过的不同 Agent', en: 'distinct agents seen within 24h' }),
|
|
1213
|
+
tasks: chainAuthoritative
|
|
1214
|
+
? chainField({ zh: '有链上活动的不同任务', en: 'distinct tasks with on-chain activity' })
|
|
1215
|
+
: pulseField({ zh: '观察到发起的任务', en: 'tasks observed as created' }),
|
|
1216
|
+
tasks_completed: chainAuthoritative
|
|
1217
|
+
? chainField({ zh: '交付完成 (ProofSubmittedV2) 的不同任务', en: 'distinct tasks with ProofSubmittedV2' })
|
|
1218
|
+
: pulseField({ zh: '交付完成的任务', en: 'tasks observed as completed' }),
|
|
1219
|
+
tasks_settled: chainAuthoritative
|
|
1220
|
+
? chainField({ zh: '托管结算 (Released/Refunded/Expired/Disputed) 的不同任务', en: 'distinct tasks with an on-chain escrow settlement' })
|
|
1221
|
+
: pulseField({ zh: '链上口径结算的任务', en: 'tasks with on-chain settlement' }),
|
|
1222
|
+
tasks_verified: chainAuthoritative
|
|
1223
|
+
? noneField({ zh: '链上索引没有「验真」事件', en: 'the chain index has no verification event' })
|
|
1224
|
+
: pulseField({ zh: '真验真 (trade_verified) 的任务', en: 'tasks truly verified (trade_verified)' }),
|
|
1225
|
+
signatures: auditWired
|
|
1226
|
+
? signatureAuditField()
|
|
1227
|
+
: (signatureKeys.size > 0
|
|
1228
|
+
? pulseField({ zh: '上报过的钱包签名 (按来源+时刻去重)', en: 'reported wallet signatures (deduped by source+time)' })
|
|
1229
|
+
: noneField({ zh: '本节点既没有签名审计账, 也没有签名脉冲事件', en: 'this node has neither a signature audit log nor signature pulse events' })),
|
|
1230
|
+
};
|
|
967
1231
|
const totals_scope = {
|
|
968
|
-
source: 'pulse-events',
|
|
1232
|
+
source: chainAuthoritative ? 'mixed' : 'pulse-events',
|
|
969
1233
|
window_ms: exports.PULSE_LIMITS.windowMs,
|
|
970
1234
|
label: {
|
|
971
|
-
zh:
|
|
972
|
-
|
|
1235
|
+
zh: chainAuthoritative
|
|
1236
|
+
? `节点/智能体 = 本节点 ${WINDOW_HOURS}h 脉冲事件; 任务/已完成/已结算 = 链上索引全量 (与下表同源); 钱包签名 = 本机签名审计`
|
|
1237
|
+
: `只统计本节点 ${WINDOW_HOURS}h 观察窗口内收到的脉冲事件 (本节点自己上报的)`,
|
|
1238
|
+
en: chainAuthoritative
|
|
1239
|
+
? `nodes/agents = this node's ${WINDOW_HOURS}h pulse events; tasks/completed/settled = chain index, whole (same source as the table below); wallet signatures = this node's signature audit log`
|
|
1240
|
+
: `Only pulse events received by this node within the ${WINDOW_HOURS}h observation window (reported by this node itself)`,
|
|
973
1241
|
},
|
|
974
1242
|
differs_from_activity: activity_totals.rows > 0 &&
|
|
975
|
-
(
|
|
1243
|
+
(totalsTasks !== activity_totals.tasks ||
|
|
1244
|
+
totalsCompleted !== activity_totals.tasks_completed ||
|
|
1245
|
+
totalsSettled !== activity_totals.tasks_settled),
|
|
1246
|
+
fields,
|
|
976
1247
|
};
|
|
977
1248
|
if (activity.source === 'chain-index') {
|
|
978
1249
|
notes.push(`confirmed_activity 来自链上索引 (chain-index): ${activity_totals.rows} 行 · ${activity_totals.tasks} 个不同任务 · ` +
|
|
@@ -985,10 +1256,21 @@ function computeSnapshot(events, opts) {
|
|
|
985
1256
|
}
|
|
986
1257
|
// 两套计数口径不同时**必须**解释 —— 页面不许出现「0 个任务」与「N 行任务」并存而不解释
|
|
987
1258
|
if (totals_scope.differs_from_activity) {
|
|
988
|
-
notes.push(`口径不同, 不是数据丢失:
|
|
989
|
-
|
|
990
|
-
`
|
|
991
|
-
|
|
1259
|
+
notes.push(`口径不同, 不是数据丢失: 链上索引不可用 → 顶部任务类计数**降级为脉冲口径** (本快照 tasks=${tasks.size} · ` +
|
|
1260
|
+
`tasks_completed=${tasksCompleted.size} · tasks_verified=${tasksVerified.size} · tasks_settled=${tasksSettledPulse.size} · ` +
|
|
1261
|
+
`signatures=${signatureKeys.size}); 上表 ${activity_totals.rows} 行来自脉冲事件 (同源计数见 activity_totals, ` +
|
|
1262
|
+
`不是链上索引全量) —— 每个数的来源见 totals_scope.fields`);
|
|
1263
|
+
}
|
|
1264
|
+
if (chainAuthoritative) {
|
|
1265
|
+
notes.push(`顶部「任务/已完成/已结算」= 链上索引的**同源计数** (= activity_totals, 与下表同源, 同源即恒等): ` +
|
|
1266
|
+
`tasks=${totalsTasks} · tasks_completed=${totalsCompleted} · tasks_settled=${totalsSettled}; ` +
|
|
1267
|
+
`「节点/智能体」= 本节点 ${WINDOW_HOURS}h 脉冲事件; 「已验证」在链上索引里没有对应事件 → ` +
|
|
1268
|
+
`该口径无对应事件源, 不下发该字段 (不是 0); 「钱包签名」= ${auditWired
|
|
1269
|
+
? `本机签名审计账 ${totalsSignatures} 条 (${WINDOW_HOURS}h 窗口, 只计数)`
|
|
1270
|
+
: (totalsSignatures === null
|
|
1271
|
+
? '无可用源 (本节点既没有签名审计账, 也没有签名脉冲事件), 不下发该字段'
|
|
1272
|
+
: `脉冲事件上报 ${totalsSignatures} 条`)} — ` +
|
|
1273
|
+
`每个数的来源见 totals_scope.fields`);
|
|
992
1274
|
}
|
|
993
1275
|
if (activity_totals.rows > 0)
|
|
994
1276
|
notes.push(chain_id_scope.note.zh);
|
|
@@ -1005,10 +1287,12 @@ function computeSnapshot(events, opts) {
|
|
|
1005
1287
|
agents: agents.size,
|
|
1006
1288
|
active_agents: active.size,
|
|
1007
1289
|
seen_last_24h: agents.size, // 24h 窗口内的不同 Agent
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1290
|
+
// ★ 任务类计数 = 链上索引同源值 (与下表恒等); 索引不可用才退回脉冲口径 (见 fields.tasks)
|
|
1291
|
+
tasks: totalsTasks,
|
|
1292
|
+
tasks_completed: totalsCompleted,
|
|
1293
|
+
tasks_verified: totalsVerified, // 链上口径下 = null (未接入), 不冒充 0
|
|
1294
|
+
signatures: totalsSignatures, // 真源 = 本机签名审计账; 无源 = null (未接入)
|
|
1295
|
+
tasks_settled: totalsSettled, // 新增字段一律排最后 (老 8 个字段顺序逐字不变)
|
|
1012
1296
|
},
|
|
1013
1297
|
totals_scope,
|
|
1014
1298
|
capabilities,
|
|
@@ -1035,6 +1319,7 @@ async function getNetworkPulse(opts = {}) {
|
|
|
1035
1319
|
const shapeOk = Array.isArray(cached?.confirmed_activity)
|
|
1036
1320
|
&& typeof cached?.confirmed_activity_source === 'string'
|
|
1037
1321
|
&& !!cached?.totals_scope
|
|
1322
|
+
&& !!cached?.totals_scope?.fields // 老缓存没有逐字段口径 → 过期形状, 重算
|
|
1038
1323
|
&& !!cached?.activity_totals
|
|
1039
1324
|
&& !!cached?.chain_id_scope
|
|
1040
1325
|
&& Array.isArray(cached?.open_tasks); // 老缓存没有待接单任务 → 过期形状, 重算
|
|
@@ -1052,8 +1337,11 @@ async function getNetworkPulse(opts = {}) {
|
|
|
1052
1337
|
}
|
|
1053
1338
|
// 活动行优先取 P5 链上索引 (真链上事实); 索引不可用 → 退回脉冲事件, 并在快照里标出来源
|
|
1054
1339
|
const confirmedActivity = await resolveConfirmedActivity({ home: opts.home, events, now });
|
|
1340
|
+
// 钱包签名的**真源**: 本机签名审计账 (窗口内条数)。没有账 → 注入 available:false → 快照标「未接入」
|
|
1341
|
+
// (不拿 0 冒充「没发生过」: 本机明明签过而脉冲事件丢了的那次真事故就是这么来的)
|
|
1342
|
+
const signatureAudit = tallySignatureAudit(opts.home, { now, windowMs: exports.PULSE_LIMITS.windowMs });
|
|
1055
1343
|
// 待接单任务: 只读本机公告板目录 (未认领且未过期), 投影成白名单 7 字段 —— 与脉冲事件层无关
|
|
1056
|
-
const snap = computeSnapshot(events, { now, confirmedActivity, openTasks: readOpenTasks(opts.home, now) });
|
|
1344
|
+
const snap = computeSnapshot(events, { now, confirmedActivity, openTasks: readOpenTasks(opts.home, now), signatureAudit });
|
|
1057
1345
|
try {
|
|
1058
1346
|
fs.mkdirSync((0, exports.pulseDir)(opts.home), { recursive: true });
|
|
1059
1347
|
fs.writeFileSync(snapshotFile(opts.home), JSON.stringify(snap), 'utf8');
|