@wowok/agent-mcp 3.1.2 → 3.1.4
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/config/config-audit.spec.d.ts +1 -0
- package/dist/config/config-audit.spec.js +1 -0
- package/dist/config/exposure.d.ts +108 -0
- package/dist/config/exposure.js +1 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.js +1 -1
- package/dist/config/judgment.d.ts +1228 -0
- package/dist/config/judgment.js +1 -0
- package/dist/config/judgment.spec.d.ts +1 -0
- package/dist/config/judgment.spec.js +1 -0
- package/dist/config/rule-engine.d.ts +299 -0
- package/dist/config/rule-engine.js +1 -0
- package/dist/config/rule-engine.spec.d.ts +1 -0
- package/dist/config/rule-engine.spec.js +1 -0
- package/dist/config/runtime.js +1 -1
- package/dist/config/severity.d.ts +7 -0
- package/dist/config/severity.js +1 -0
- package/dist/customer/index.d.ts +3 -9
- package/dist/customer/index.js +1 -1
- package/dist/customer/industry-risks.d.ts +3 -17
- package/dist/customer/industry-risks.js +1 -1
- package/dist/customer/order-monitor.d.ts +3 -1
- package/dist/customer/order-monitor.js +1 -1
- package/dist/customer/types.d.ts +1 -165
- package/dist/customer/types.js +1 -1
- package/dist/customer/user-preferences.d.ts +0 -49
- package/dist/customer/user-preferences.js +1 -1
- package/dist/evaluation/acceptance.d.ts +1 -0
- package/dist/evaluation/acceptance.js +1 -1
- package/dist/evaluation/arbitration-game.js +1 -1
- package/dist/evaluation/architecture.spec.d.ts +1 -0
- package/dist/evaluation/architecture.spec.js +1 -0
- package/dist/evaluation/builtins/demand-match.js +1 -1
- package/dist/evaluation/builtins/graph-service.d.ts +16 -0
- package/dist/evaluation/builtins/graph-service.js +1 -0
- package/dist/evaluation/builtins/graph-service.spec.d.ts +1 -0
- package/dist/evaluation/builtins/graph-service.spec.js +1 -0
- package/dist/evaluation/builtins/index.d.ts +1 -1
- package/dist/evaluation/builtins/index.js +1 -1
- package/dist/evaluation/builtins/purity.spec.d.ts +1 -0
- package/dist/evaluation/builtins/purity.spec.js +1 -0
- package/dist/evaluation/engine.js +1 -1
- package/dist/evaluation/facets/catalog.d.ts +19 -0
- package/dist/evaluation/facets/catalog.js +1 -0
- package/dist/evaluation/game-strategy.d.ts +2 -2
- package/dist/evaluation/game-strategy.js +1 -1
- package/dist/evaluation/guard-scan.d.ts +10 -0
- package/dist/evaluation/guard-scan.js +1 -0
- package/dist/evaluation/match-operation.d.ts +2 -2
- package/dist/evaluation/match-operation.js +1 -1
- package/dist/evaluation/standards.d.ts +9 -0
- package/dist/evaluation/standards.js +1 -0
- package/dist/evaluation/standards.spec.d.ts +1 -0
- package/dist/evaluation/standards.spec.js +1 -0
- package/dist/evaluation/types.d.ts +11 -1
- package/dist/experience/realtime-feedback.js +1 -1
- package/dist/extensions/business-modules.js +1 -1
- package/dist/extensions/custom-registry-file.js +1 -1
- package/dist/extensions/index.d.ts +1 -1
- package/dist/extensions/index.js +1 -1
- package/dist/extensions/industry-audit.spec.d.ts +1 -0
- package/dist/extensions/industry-audit.spec.js +1 -0
- package/dist/extensions/industry-layers.d.ts +14 -5
- package/dist/extensions/industry-layers.js +1 -1
- package/dist/extensions/industry-pack.d.ts +2 -0
- package/dist/extensions/industry-pack.js +1 -1
- package/dist/extensions/mode-evaluator.js +1 -1
- package/dist/extensions/modes.js +1 -1
- package/dist/graph/onchain/analyze.d.ts +16 -1
- package/dist/graph/onchain/analyze.js +1 -1
- package/dist/graph/onchain/analyze.spec.js +1 -1
- package/dist/graph/onchain/dataplane.d.ts +1 -1
- package/dist/graph/onchain/dataplane.js +1 -1
- package/dist/graph/onchain/edge-batch.spec.d.ts +1 -0
- package/dist/graph/onchain/edge-batch.spec.js +1 -0
- package/dist/graph/onchain/edge-schema.d.ts +11 -2
- package/dist/graph/onchain/edge-schema.js +1 -1
- package/dist/graph/onchain/entity-profile.spec.d.ts +1 -0
- package/dist/graph/onchain/entity-profile.spec.js +1 -0
- package/dist/graph/onchain/event-history.spec.d.ts +1 -0
- package/dist/graph/onchain/event-history.spec.js +1 -0
- package/dist/graph/onchain/expand.js +1 -1
- package/dist/graph/onchain/exploration.d.ts +28 -0
- package/dist/graph/onchain/exploration.js +1 -0
- package/dist/graph/onchain/exploration.spec.d.ts +1 -0
- package/dist/graph/onchain/exploration.spec.js +1 -0
- package/dist/graph/onchain/exposure.d.ts +18 -0
- package/dist/graph/onchain/exposure.js +1 -0
- package/dist/graph/onchain/exposure.spec.d.ts +1 -0
- package/dist/graph/onchain/exposure.spec.js +1 -0
- package/dist/graph/onchain/extract-deep.spec.d.ts +1 -0
- package/dist/graph/onchain/extract-deep.spec.js +1 -0
- package/dist/graph/onchain/extract.d.ts +11 -3
- package/dist/graph/onchain/extract.js +1 -1
- package/dist/graph/onchain/facet-projection.d.ts +99 -0
- package/dist/graph/onchain/facet-projection.js +1 -0
- package/dist/graph/onchain/facet-projection.spec.d.ts +1 -0
- package/dist/graph/onchain/facet-projection.spec.js +1 -0
- package/dist/graph/onchain/facts.d.ts +103 -0
- package/dist/graph/onchain/facts.js +1 -0
- package/dist/graph/onchain/facts.spec.d.ts +1 -0
- package/dist/graph/onchain/facts.spec.js +1 -0
- package/dist/graph/onchain/field-manifest.d.ts +29 -0
- package/dist/graph/onchain/field-manifest.js +1 -0
- package/dist/graph/onchain/field-manifest.spec.d.ts +1 -0
- package/dist/graph/onchain/field-manifest.spec.js +1 -0
- package/dist/graph/onchain/fixtures.d.ts +80 -0
- package/dist/graph/onchain/fixtures.js +1 -0
- package/dist/graph/onchain/fixtures.spec.d.ts +1 -0
- package/dist/graph/onchain/fixtures.spec.js +1 -0
- package/dist/graph/onchain/graph-policy.spec.d.ts +1 -0
- package/dist/graph/onchain/graph-policy.spec.js +1 -0
- package/dist/graph/onchain/index.d.ts +14 -2
- package/dist/graph/onchain/index.js +1 -1
- package/dist/graph/onchain/interest.js +1 -1
- package/dist/graph/onchain/interest.spec.js +1 -1
- package/dist/graph/onchain/label-lint.spec.d.ts +1 -0
- package/dist/graph/onchain/label-lint.spec.js +1 -0
- package/dist/graph/onchain/names.d.ts +23 -0
- package/dist/graph/onchain/names.js +1 -0
- package/dist/graph/onchain/names.spec.d.ts +1 -0
- package/dist/graph/onchain/names.spec.js +1 -0
- package/dist/graph/onchain/onchain.spec.js +1 -1
- package/dist/graph/onchain/policy.d.ts +8 -0
- package/dist/graph/onchain/policy.js +1 -0
- package/dist/graph/onchain/proposal-graph.d.ts +11 -0
- package/dist/graph/onchain/proposal-graph.js +1 -0
- package/dist/graph/onchain/proposal-graph.spec.d.ts +1 -0
- package/dist/graph/onchain/proposal-graph.spec.js +1 -0
- package/dist/graph/onchain/sdk-batch.d.ts +5 -1
- package/dist/graph/onchain/sdk-batch.js +1 -1
- package/dist/graph/onchain/strategy.d.ts +16 -0
- package/dist/graph/onchain/strategy.js +1 -1
- package/dist/graph/onchain/strategy.spec.js +1 -1
- package/dist/graph/onchain/synthesis.d.ts +20 -0
- package/dist/graph/onchain/synthesis.js +1 -0
- package/dist/graph/onchain/synthesis.spec.d.ts +1 -0
- package/dist/graph/onchain/synthesis.spec.js +1 -0
- package/dist/graph/onchain/table-ledger.spec.d.ts +1 -0
- package/dist/graph/onchain/table-ledger.spec.js +1 -0
- package/dist/graph/onchain/types.d.ts +57 -7
- package/dist/graph/onchain/viewport.d.ts +1 -0
- package/dist/graph/onchain/viewport.js +1 -1
- package/dist/harness/index.d.ts +1 -5
- package/dist/harness/index.js +1 -1
- package/dist/harness/verify.d.ts +6 -1
- package/dist/harness/verify.js +1 -1
- package/dist/index.js +1 -1
- package/dist/keeper/keeper.spec.js +1 -1
- package/dist/knowledge/alloc-audit-policy.spec.d.ts +1 -0
- package/dist/knowledge/alloc-audit-policy.spec.js +1 -0
- package/dist/knowledge/allocation-ledger.js +1 -1
- package/dist/knowledge/allocation-puzzle.d.ts +1 -1
- package/dist/knowledge/allocation-puzzle.js +1 -1
- package/dist/knowledge/allocation-risk.d.ts +4 -3
- package/dist/knowledge/allocation-risk.js +1 -1
- package/dist/knowledge/allocation-templates.js +1 -1
- package/dist/knowledge/arb-risk.d.ts +6 -6
- package/dist/knowledge/arb-risk.js +1 -1
- package/dist/knowledge/arbitration-ledger.d.ts +4 -4
- package/dist/knowledge/arbitration-ledger.js +1 -1
- package/dist/knowledge/arbitration-puzzle.d.ts +1 -1
- package/dist/knowledge/arbitration-puzzle.js +1 -1
- package/dist/knowledge/arbitration-risk.d.ts +4 -3
- package/dist/knowledge/arbitration-risk.js +1 -1
- package/dist/knowledge/arbitration-templates.js +1 -1
- package/dist/knowledge/baselines/guard-lint-baseline.spec.d.ts +1 -0
- package/dist/knowledge/baselines/guard-lint-baseline.spec.js +1 -0
- package/dist/knowledge/baselines/judgment-baselines.json +289 -0
- package/dist/knowledge/baselines/risk-baselines.spec.d.ts +1 -0
- package/dist/knowledge/baselines/risk-baselines.spec.js +1 -0
- package/dist/knowledge/baselines/risk-cases.d.ts +8 -0
- package/dist/knowledge/baselines/risk-cases.js +1 -0
- package/dist/knowledge/baselines/rules/alloc_audit.json +290 -0
- package/dist/knowledge/baselines/rules/allocation.json +492 -0
- package/dist/knowledge/baselines/rules/arb.json +155 -0
- package/dist/knowledge/baselines/rules/arbitration.json +366 -0
- package/dist/knowledge/baselines/rules/bridge.json +197 -0
- package/dist/knowledge/baselines/rules/contact.json +152 -0
- package/dist/knowledge/baselines/rules/demand.json +158 -0
- package/dist/knowledge/baselines/rules/graph.json +453 -0
- package/dist/knowledge/baselines/rules/guard.json +981 -0
- package/dist/knowledge/baselines/rules/machine.json +706 -0
- package/dist/knowledge/baselines/rules/order.json +549 -0
- package/dist/knowledge/baselines/rules/payment.json +205 -0
- package/dist/knowledge/baselines/rules/permission.json +330 -0
- package/dist/knowledge/baselines/rules/personal.json +139 -0
- package/dist/knowledge/baselines/rules/progress.json +346 -0
- package/dist/knowledge/baselines/rules/proof.json +158 -0
- package/dist/knowledge/baselines/rules/registrar.json +159 -0
- package/dist/knowledge/baselines/rules/repository.json +244 -0
- package/dist/knowledge/baselines/rules/resource.json +117 -0
- package/dist/knowledge/baselines/rules/reward.json +471 -0
- package/dist/knowledge/baselines/rules/service.json +595 -0
- package/dist/knowledge/baselines/rules/treasury.json +440 -0
- package/dist/knowledge/baselines/rules/util.json +101 -0
- package/dist/knowledge/bridge-risk.d.ts +6 -6
- package/dist/knowledge/bridge-risk.js +1 -1
- package/dist/knowledge/builtin-templates.d.ts +26 -0
- package/dist/knowledge/builtin-templates.js +1 -0
- package/dist/knowledge/contact-risk.d.ts +6 -6
- package/dist/knowledge/contact-risk.js +1 -1
- package/dist/knowledge/contract-invariants.d.ts +1 -0
- package/dist/knowledge/contract-invariants.js +1 -1
- package/dist/knowledge/demand-risk.d.ts +6 -6
- package/dist/knowledge/demand-risk.js +1 -1
- package/dist/knowledge/event-semantics.js +1 -1
- package/dist/knowledge/facts-sync.spec.d.ts +1 -0
- package/dist/knowledge/facts-sync.spec.js +1 -0
- package/dist/knowledge/getting-started.js +1 -1
- package/dist/knowledge/guard-design-patterns.js +1 -1
- package/dist/knowledge/guard-eval.d.ts +15 -0
- package/dist/knowledge/guard-eval.js +1 -0
- package/dist/knowledge/guard-eval.spec.d.ts +1 -0
- package/dist/knowledge/guard-eval.spec.js +1 -0
- package/dist/knowledge/guard-field-cognition.d.ts +1 -1
- package/dist/knowledge/guard-field-cognition.js +1 -1
- package/dist/knowledge/guard-ledger.js +1 -1
- package/dist/knowledge/guard-lint.d.ts +1 -1
- package/dist/knowledge/guard-lint.js +1 -1
- package/dist/knowledge/guard-risk.d.ts +7 -19
- package/dist/knowledge/guard-risk.js +1 -1
- package/dist/knowledge/guard-templates.js +1 -1
- package/dist/knowledge/guard-translation.js +1 -1
- package/dist/knowledge/index.d.ts +51 -45
- package/dist/knowledge/index.js +1 -1
- package/dist/knowledge/industry-registry.js +1 -1
- package/dist/knowledge/industry-rule-node.d.ts +7 -0
- package/dist/knowledge/industry-rule-node.js +1 -0
- package/dist/knowledge/industry-strategy.js +1 -1
- package/dist/knowledge/jsonrpc-enum.js +1 -1
- package/dist/knowledge/machine-ledger.js +1 -1
- package/dist/knowledge/machine-risk.d.ts +4 -7
- package/dist/knowledge/machine-risk.js +1 -1
- package/dist/knowledge/machine-templates.js +1 -1
- package/dist/knowledge/machine-translation.js +1 -1
- package/dist/knowledge/migration-preflight.js +1 -1
- package/dist/knowledge/operation-dictionary.js +1 -1
- package/dist/knowledge/order-ledger.js +1 -1
- package/dist/knowledge/order-puzzle.d.ts +3 -3
- package/dist/knowledge/order-puzzle.js +1 -1
- package/dist/knowledge/order-risk.d.ts +7 -12
- package/dist/knowledge/order-risk.js +1 -1
- package/dist/knowledge/order-templates.js +1 -1
- package/dist/knowledge/passport-ledger.js +1 -1
- package/dist/knowledge/passport-templates.js +1 -1
- package/dist/knowledge/payment-risk.d.ts +8 -7
- package/dist/knowledge/payment-risk.js +1 -1
- package/dist/knowledge/payment-tracker.js +1 -1
- package/dist/knowledge/permission-ledger.js +1 -1
- package/dist/knowledge/permission-puzzle.d.ts +12 -12
- package/dist/knowledge/permission-puzzle.js +1 -1
- package/dist/knowledge/permission-risk.d.ts +4 -10
- package/dist/knowledge/permission-risk.js +1 -1
- package/dist/knowledge/permission-templates.js +1 -1
- package/dist/knowledge/personal-risk.d.ts +6 -6
- package/dist/knowledge/personal-risk.js +1 -1
- package/dist/knowledge/progress-ledger.js +1 -1
- package/dist/knowledge/progress-puzzle.d.ts +2 -2
- package/dist/knowledge/progress-puzzle.js +1 -1
- package/dist/knowledge/progress-risk.d.ts +4 -3
- package/dist/knowledge/progress-risk.js +1 -1
- package/dist/knowledge/progress-templates.js +1 -1
- package/dist/knowledge/proof-risk.d.ts +6 -6
- package/dist/knowledge/proof-risk.js +1 -1
- package/dist/knowledge/puzzle-projections.d.ts +11 -0
- package/dist/knowledge/puzzle-projections.js +1 -0
- package/dist/knowledge/recipient-constraint.d.ts +20 -1
- package/dist/knowledge/recipient-constraint.js +1 -1
- package/dist/knowledge/registrar-risk.d.ts +6 -6
- package/dist/knowledge/registrar-risk.js +1 -1
- package/dist/knowledge/repository-risk.d.ts +7 -7
- package/dist/knowledge/repository-risk.js +1 -1
- package/dist/knowledge/resource-risk.d.ts +6 -6
- package/dist/knowledge/resource-risk.js +1 -1
- package/dist/knowledge/reward-ledger.d.ts +1 -1
- package/dist/knowledge/reward-ledger.js +1 -1
- package/dist/knowledge/reward-puzzle.d.ts +2 -2
- package/dist/knowledge/reward-puzzle.js +1 -1
- package/dist/knowledge/reward-risk.d.ts +5 -6
- package/dist/knowledge/reward-risk.js +1 -1
- package/dist/knowledge/rule-node-analyzers.d.ts +43 -0
- package/dist/knowledge/rule-node-analyzers.js +1 -0
- package/dist/knowledge/rule-node-analyzers.spec.d.ts +1 -0
- package/dist/knowledge/rule-node-analyzers.spec.js +1 -0
- package/dist/knowledge/rule-outcome.d.ts +5 -0
- package/dist/knowledge/rule-outcome.js +1 -0
- package/dist/knowledge/safety-rules.js +1 -1
- package/dist/knowledge/scenario-modes.d.ts +2 -2
- package/dist/knowledge/scenario-modes.js +1 -1
- package/dist/knowledge/scenario-topology.js +1 -1
- package/dist/knowledge/service-allocator-audit-node.js +1 -1
- package/dist/knowledge/service-ledger.js +1 -1
- package/dist/knowledge/service-puzzle.d.ts +2 -2
- package/dist/knowledge/service-puzzle.js +1 -1
- package/dist/knowledge/service-risk-node.js +1 -1
- package/dist/knowledge/service-risk.d.ts +4 -4
- package/dist/knowledge/service-risk.js +1 -1
- package/dist/knowledge/service-templates.js +1 -1
- package/dist/knowledge/strategy-manuals.d.ts +1 -1
- package/dist/knowledge/strategy-manuals.js +1 -1
- package/dist/knowledge/template-loader.d.ts +84 -0
- package/dist/knowledge/template-loader.js +1 -0
- package/dist/knowledge/template-loader.spec.d.ts +1 -0
- package/dist/knowledge/template-loader.spec.js +1 -0
- package/dist/knowledge/template-registry.js +1 -1
- package/dist/knowledge/template-scanner.d.ts +17 -0
- package/dist/knowledge/template-scanner.js +1 -0
- package/dist/knowledge/template-scanner.spec.d.ts +1 -0
- package/dist/knowledge/template-scanner.spec.js +1 -0
- package/dist/knowledge/tools-reference.js +1 -1
- package/dist/knowledge/treasury-ledger.d.ts +1 -1
- package/dist/knowledge/treasury-ledger.js +1 -1
- package/dist/knowledge/treasury-puzzle.d.ts +3 -3
- package/dist/knowledge/treasury-puzzle.js +1 -1
- package/dist/knowledge/treasury-risk.d.ts +6 -4
- package/dist/knowledge/treasury-risk.js +1 -1
- package/dist/knowledge/treasury-templates.js +1 -1
- package/dist/knowledge/util-risk.d.ts +6 -6
- package/dist/knowledge/util-risk.js +1 -1
- package/dist/knowledge/workflow-guidance.d.ts +4 -0
- package/dist/knowledge/workflow-guidance.js +1 -1
- package/dist/knowledge/workspace-lists.js +1 -1
- package/dist/monitor/MonitorLoop.js +1 -1
- package/dist/participation/arbitrator-interest.js +1 -1
- package/dist/participation/radar-core.js +1 -1
- package/dist/persona/analyzer.js +1 -1
- package/dist/persona/bridge.js +1 -1
- package/dist/persona/facet-profile.d.ts +33 -0
- package/dist/persona/facet-profile.js +1 -0
- package/dist/persona/index.js +1 -1
- package/dist/persona/model.d.ts +2 -1
- package/dist/persona/model.js +1 -1
- package/dist/persona/persona-audit.spec.d.ts +1 -0
- package/dist/persona/persona-audit.spec.js +1 -0
- package/dist/persona/topology-focus.d.ts +2 -2
- package/dist/persona/topology-focus.js +1 -1
- package/dist/persona/types.d.ts +14 -0
- package/dist/playbooks/service-build/business-puzzle.js +1 -1
- package/dist/playbooks/service-build/facet-money.d.ts +33 -0
- package/dist/playbooks/service-build/facet-money.js +1 -0
- package/dist/playbooks/service-build/facet-money.spec.d.ts +1 -0
- package/dist/playbooks/service-build/facet-money.spec.js +1 -0
- package/dist/playbooks/service-build/machine-panorama.d.ts +20 -0
- package/dist/playbooks/service-build/machine-panorama.js +1 -1
- package/dist/playbooks/service-build/merchant-guide.d.ts +2 -2
- package/dist/playbooks/service-build/migration-planner.d.ts +43 -0
- package/dist/playbooks/service-build/migration-planner.js +1 -0
- package/dist/playbooks/service-build/object-panorama.d.ts +65 -24
- package/dist/playbooks/service-build/object-panorama.js +1 -1
- package/dist/playbooks/service-build/participation-radar.js +1 -1
- package/dist/playbooks/service-build/pipeline-actions.d.ts +3 -3
- package/dist/playbooks/service-build/pipeline-actions.js +1 -1
- package/dist/playbooks/service-build/reverse-mapping.d.ts +1 -0
- package/dist/playbooks/service-build/reverse-mapping.js +1 -1
- package/dist/playbooks/service-build/risk-aggregator.d.ts +4 -2
- package/dist/playbooks/service-build/risk-aggregator.js +1 -1
- package/dist/playbooks/service-build/semantic-graph.js +1 -1
- package/dist/playbooks/service-build/service-panorama.d.ts +56 -9
- package/dist/playbooks/service-build/service-panorama.js +1 -1
- package/dist/playbooks/service-build/topology-evaluation.spec.d.ts +1 -0
- package/dist/playbooks/service-build/topology-evaluation.spec.js +1 -0
- package/dist/playbooks/service-build/topology-query.d.ts +13 -2
- package/dist/playbooks/service-build/topology-query.js +1 -1
- package/dist/playbooks/service-build/workflow-design-assessment.d.ts +2 -2
- package/dist/playbooks/service-build/workflow-design-assessment.js +1 -1
- package/dist/relationship/registry.js +1 -1
- package/dist/review/arb.d.ts +0 -2
- package/dist/review/arb.js +1 -1
- package/dist/review/machine.js +1 -1
- package/dist/review/order.d.ts +0 -1
- package/dist/review/order.js +1 -1
- package/dist/review/service.js +1 -1
- package/dist/review/types.d.ts +7 -0
- package/dist/role/profiles.js +1 -1
- package/dist/rules.d.ts +1 -2
- package/dist/rules.js +1 -1
- package/dist/safety/confirm-gate.js +1 -1
- package/dist/schema/benchmark-migration/index.d.ts +207 -0
- package/dist/schema/benchmark-migration/index.js +1 -0
- package/dist/schema/call/allocation.d.ts +1 -1
- package/dist/schema/call/allocation.js +1 -1
- package/dist/schema/call/arbitration.d.ts +1 -1
- package/dist/schema/call/arbitration.js +1 -1
- package/dist/schema/call/base.d.ts +3374 -670
- package/dist/schema/call/base.js +1 -1
- package/dist/schema/call/contact.d.ts +1 -1
- package/dist/schema/call/demand.d.ts +1 -1
- package/dist/schema/call/guard.d.ts +3 -3
- package/dist/schema/call/handler.js +1 -1
- package/dist/schema/call/machine.d.ts +5 -5
- package/dist/schema/call/order.d.ts +3 -3
- package/dist/schema/call/payment.js +1 -1
- package/dist/schema/call/permission-handler.d.ts +1 -1
- package/dist/schema/call/permission-handler.js +1 -1
- package/dist/schema/call/permission.d.ts +16 -16
- package/dist/schema/call/permission.js +1 -1
- package/dist/schema/call/personal.d.ts +8 -8
- package/dist/schema/call/personal.js +1 -1
- package/dist/schema/call/progress.d.ts +3 -3
- package/dist/schema/call/receipt.d.ts +28 -0
- package/dist/schema/call/receipt.js +1 -0
- package/dist/schema/call/repository.d.ts +11 -11
- package/dist/schema/call/repository.js +1 -1
- package/dist/schema/call/reward.d.ts +1 -1
- package/dist/schema/call/semantic-customer-advice.spec.d.ts +1 -0
- package/dist/schema/call/semantic-customer-advice.spec.js +1 -0
- package/dist/schema/call/semantic.d.ts +5 -2
- package/dist/schema/call/semantic.js +1 -1
- package/dist/schema/call/service.d.ts +7 -7
- package/dist/schema/call/service.js +1 -1
- package/dist/schema/call/treasury.d.ts +1 -1
- package/dist/schema/call/treasury.js +1 -1
- package/dist/schema/common/index.d.ts +6 -6
- package/dist/schema/common/index.js +1 -1
- package/dist/schema/config/index.d.ts +50 -1
- package/dist/schema/config/index.js +1 -1
- package/dist/schema/evaluation/index.d.ts +307 -213
- package/dist/schema/evaluation/index.js +1 -1
- package/dist/schema/goal/index.d.ts +6 -6
- package/dist/schema/goal/planning.d.ts +17 -17
- package/dist/schema/goal/planning.js +1 -1
- package/dist/schema/index.d.ts +1 -1
- package/dist/schema/index.js +1 -1
- package/dist/schema/industry-pack/index.d.ts +1 -1
- package/dist/schema/interaction/index.d.ts +1 -1
- package/dist/schema/keeper/index.d.ts +1 -1
- package/dist/schema/local/index.js +1 -1
- package/dist/schema/messenger/index.d.ts +26 -26
- package/dist/schema/operations.d.ts +59 -43
- package/dist/schema/operations.js +1 -1
- package/dist/schema/persona/index.d.ts +4732 -24
- package/dist/schema/persona/index.js +1 -1
- package/dist/schema/query/bi.d.ts +830 -10
- package/dist/schema/query/bi.js +1 -1
- package/dist/schema/query/index.d.ts +44 -44
- package/dist/schema/query/index.js +1 -1
- package/dist/schema/schema-version.js +1 -1
- package/dist/schema/workflow/index.d.ts +1 -1
- package/dist/schema/workspace/index.d.ts +2 -2
- package/dist/schema-query-impl/index.d.ts +9 -0
- package/dist/schema-query-impl/index.js +1 -1
- package/dist/schemas/account_operation.output.json +1 -1
- package/dist/schemas/benchmark_migration_operation.output.json +793 -0
- package/dist/schemas/benchmark_migration_operation.schema.json +83 -0
- package/dist/schemas/bridge_operation.output.json +1 -1
- package/dist/schemas/bridge_operation.schema.json +5 -5
- package/dist/schemas/config_operation.output.json +252 -0
- package/dist/schemas/config_operation.schema.json +21 -1
- package/dist/schemas/evaluation_operation.output.json +702 -162
- package/dist/schemas/evaluation_operation.schema.json +0 -429
- package/dist/schemas/goal_operation.schema.json +8 -8
- package/dist/schemas/guard2file.schema.json +1 -1
- package/dist/schemas/index.json +7 -7
- package/dist/schemas/keeper_operation.output.json +1 -1
- package/dist/schemas/local_history_operation.output.json +1 -1
- package/dist/schemas/local_info_operation.output.json +1 -1
- package/dist/schemas/local_mark_operation.output.json +1 -1
- package/dist/schemas/machineNode2file.schema.json +1 -1
- package/dist/schemas/messenger_operation.output.json +1 -1
- package/dist/schemas/messenger_operation.schema.json +24 -12
- package/dist/schemas/monitor_events.output.json +1 -1
- package/dist/schemas/monitor_subscription.output.json +1 -1
- package/dist/schemas/onchain_events.output.json +2 -2
- package/dist/schemas/onchain_operations.output.json +6359 -3724
- package/dist/schemas/onchain_operations.schema.json +191 -141
- package/dist/schemas/onchain_operations_allocation.schema.json +13 -11
- package/dist/schemas/onchain_operations_arbitration.schema.json +10 -8
- package/dist/schemas/onchain_operations_contact.schema.json +7 -5
- package/dist/schemas/onchain_operations_demand.schema.json +7 -5
- package/dist/schemas/onchain_operations_gen_passport.schema.json +5 -3
- package/dist/schemas/onchain_operations_gen_proof.schema.json +1 -1
- package/dist/schemas/onchain_operations_guard.schema.json +5 -3
- package/dist/schemas/onchain_operations_machine.schema.json +22 -18
- package/dist/schemas/onchain_operations_order.schema.json +11 -7
- package/dist/schemas/onchain_operations_payment.schema.json +3 -3
- package/dist/schemas/onchain_operations_permission.schema.json +19 -11
- package/dist/schemas/onchain_operations_personal.schema.json +16 -10
- package/dist/schemas/onchain_operations_progress.schema.json +11 -7
- package/dist/schemas/onchain_operations_proof.schema.json +5 -3
- package/dist/schemas/onchain_operations_repository.schema.json +12 -8
- package/dist/schemas/onchain_operations_reward.schema.json +11 -9
- package/dist/schemas/onchain_operations_service.schema.json +28 -22
- package/dist/schemas/onchain_operations_treasury.schema.json +13 -11
- package/dist/schemas/onchain_table_data.output.json +88 -88
- package/dist/schemas/persona_operation.output.json +15875 -1
- package/dist/schemas/persona_operation.schema.json +3056 -478
- package/dist/schemas/query_toolkit.output.json +1325 -212
- package/dist/schemas/query_toolkit.schema.json +60 -2
- package/dist/schemas/workflow_operation.schema.json +4 -2
- package/dist/strategy/metrics.js +1 -1
- package/dist/strategy/scorecard.js +1 -1
- package/dist/tools/handlers/benchmark-migration.d.ts +2 -0
- package/dist/tools/handlers/benchmark-migration.js +1 -0
- package/dist/tools/handlers/bridge.js +1 -1
- package/dist/tools/handlers/config.js +1 -1
- package/dist/tools/handlers/dispatch-expectations.d.ts +3 -0
- package/dist/tools/handlers/dispatch-expectations.js +1 -0
- package/dist/tools/handlers/evaluation.js +1 -1
- package/dist/tools/handlers/industry-pack.js +1 -1
- package/dist/tools/handlers/onchain.js +1 -1
- package/dist/tools/handlers/query.js +1 -1
- package/dist/tools/handlers/schema-query.js +1 -1
- package/dist/tools/index.js +1 -1
- package/dist/tools/move-fn-index.gen.d.ts +3 -0
- package/dist/tools/move-fn-index.gen.js +1 -0
- package/dist/tools/registry/business.js +1 -1
- package/dist/tools/registry/config.js +1 -1
- package/dist/tools/registry/evaluation.d.ts +2 -0
- package/dist/tools/registry/evaluation.js +1 -0
- package/dist/tools/registry/onchain.js +1 -1
- package/dist/tools/registry/query.js +1 -1
- package/dist/tools/sanitize-output.d.ts +3 -0
- package/dist/tools/sanitize-output.js +1 -0
- package/dist/tools/sanitize-output.spec.d.ts +1 -0
- package/dist/tools/sanitize-output.spec.js +1 -0
- package/dist/tools/shared.d.ts +0 -1
- package/dist/tools/shared.js +1 -1
- package/dist/tools/wrap.js +1 -1
- package/package.json +9 -3
- package/dist/customer/customer-advice.d.ts +0 -32
- package/dist/customer/customer-advice.js +0 -1
- package/dist/customer/info-puzzle.d.ts +0 -146
- package/dist/customer/info-puzzle.js +0 -1
- package/dist/customer/order-strategy.d.ts +0 -17
- package/dist/customer/order-strategy.js +0 -1
- package/dist/customer/preorder-compare.d.ts +0 -24
- package/dist/customer/preorder-compare.js +0 -1
- package/dist/customer/reminder-system.d.ts +0 -42
- package/dist/customer/reminder-system.js +0 -1
- package/dist/customer/risk-assessment.d.ts +0 -13
- package/dist/customer/risk-assessment.js +0 -1
- package/dist/evaluation/builtins/service-risk.d.ts +0 -7
- package/dist/evaluation/builtins/service-risk.js +0 -1
- package/dist/knowledge/trust-metrics.d.ts +0 -66
- package/dist/knowledge/trust-metrics.js +0 -1
- package/dist/schema/trust/index.d.ts +0 -334
- package/dist/schema/trust/index.js +0 -1
- package/dist/schemas/trust_score.output.json +0 -847
- package/dist/schemas/trust_score.schema.json +0 -364
- package/dist/tools/handlers/trust.d.ts +0 -16
- package/dist/tools/handlers/trust.js +0 -1
- package/dist/tools/registry/trust.d.ts +0 -2
- package/dist/tools/registry/trust.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
export const TREASURY_TEMPLATES=[{'id':'T-T-01','name':'Basic\x20Treasury\x20(owner-only\x20deposit/withdraw)','description':'Single-owner\x20Treasury\x20with\x20no\x20external\x20Guard.\x20Owner\x20has\x20all\x20permissions.\x20Suitable\x20for\x20solo\x20operators\x20or\x20simple\x20team\x20funds.','applicable_scenes':['treasury_fund_collection','treasury_um_delegation'],'industry_tags':['universal','solo'],'params':[{'name':'treasury_name','type':'string','description':'Name\x20for\x20the\x20new\x20Treasury\x20object','required':!![]},{'name':'owner_address','type':'address','description':'Owner\x20address\x20(becomes\x20admin)','required':!![]},{'name':'coin_type','type':'coin_type','description':'Coin\x20type\x20T\x20(e.g.\x200x2::wow::WOW)','required':!![]},{'name':'description','type':'string','description':'Treasury\x20description','required':!![]},{'name':'permission_name','type':'string','description':'Name\x20for\x20the\x20new\x20Permission\x20object','required':!![]}],'body':a=>({'object':{'name':a['treasury_name'],'type_parameter':a['coin_type'],'permission':{'name':a['permission_name'],'description':'Permission\x20for\x20'+a['treasury_name']}},'description':a['description'],'_permission_config':{'TREASURY_NEW':[a['owner_address']],'TREASURY_DESCRIPTION':[a['owner_address']],'TREASURY_DEPOSIT':[a['owner_address']],'TREASURY_RECEIVE':[a['owner_address']],'TREASURY_WITHDRAW':[a['owner_address']],'TREASURY_OWNER_RECEIVE':[a['owner_address']],'TREASURY_UM':[a['owner_address']]}}),'notes':['All\x20permissions\x20granted\x20to\x20owner\x20only;\x20suitable\x20for\x20solo\x20treasury','No\x20external\x20Guard\x20configured;\x20all\x20deposits/withdraws\x20via\x20Permission','To\x20enable\x20external\x20operations\x20later,\x20use\x20T-T-03\x20pattern']},{'id':'T-T-02','name':'Multi-role\x20Treasury\x20(separated\x20depositor/withdrawer)','description':'Treasury\x20with\x20separated\x20depositor\x20and\x20withdrawer\x20roles.\x20Enforces\x20separation\x20of\x20duties.\x20Suitable\x20for\x20project\x20budget\x20management.','applicable_scenes':['treasury_fund_collection','treasury_permission_sharing'],'industry_tags':['universal','team','project'],'params':[{'name':'treasury_name','type':'string','description':'Name\x20for\x20the\x20new\x20Treasury\x20object','required':!![]},{'name':'owner_address','type':'address','description':'Owner\x20address\x20(full\x20control)','required':!![]},{'name':'depositor_addresses','type':'string[]','description':'Addresses\x20allowed\x20to\x20deposit\x20(TREASURY_DEPOSIT=252)','required':!![]},{'name':'withdrawer_addresses','type':'string[]','description':'Addresses\x20allowed\x20to\x20withdraw\x20(TREASURY_WITHDRAW=254)','required':!![]},{'name':'receiver_address','type':'address','description':'Address\x20allowed\x20to\x20receive\x20CoinWrapper\x20(TREASURY_RECEIVE=253)','required':!![]},{'name':'coin_type','type':'coin_type','description':'Coin\x20type\x20T','required':!![]},{'name':'description','type':'string','description':'Treasury\x20description','required':!![]},{'name':'permission_name','type':'string','description':'Name\x20for\x20the\x20new\x20Permission\x20object','required':!![]}],'body':a=>({'object':{'name':a['treasury_name'],'type_parameter':a['coin_type'],'permission':{'name':a['permission_name'],'description':'Permission\x20for\x20'+a['treasury_name']+'\x20(multi-role)'}},'description':a['description'],'_permission_config':{'TREASURY_NEW':[a['owner_address']],'TREASURY_DESCRIPTION':[a['owner_address']],'TREASURY_DEPOSIT':a['depositor_addresses'],'TREASURY_RECEIVE':[a['receiver_address']],'TREASURY_WITHDRAW':a['withdrawer_addresses'],'TREASURY_OWNER_RECEIVE':[a['owner_address']],'TREASURY_UM':[a['owner_address']]}}),'notes':['Separation\x20of\x20duties:\x20deposit\x20and\x20withdraw\x20roles\x20assigned\x20to\x20different\x20addresses','Use\x20distinct\x20addresses\x20for\x20depositor_addresses\x20and\x20withdrawer_addresses','Owner\x20retains\x20full\x20control\x20(um_set,\x20owner_receive,\x20description_set)']},{'id':'T-T-03','name':'External\x20operations\x20Treasury\x20(with\x20Guard\x20protection)','description':'Treasury\x20with\x20external_deposit_guard\x20and/or\x20external_withdraw_guard\x20configured.\x20Allows\x20external\x20users\x20to\x20deposit/withdraw\x20via\x20Guard\x20+\x20Passport\x20without\x20Permission.','applicable_scenes':['treasury_external_ops','treasury_guard_protection'],'industry_tags':['finance','crowdfunding','refund','compensation'],'params':[{'name':'treasury_name','type':'string','description':'Name\x20for\x20the\x20new\x20Treasury\x20object','required':!![]},{'name':'owner_address','type':'address','description':'Owner\x20address','required':!![]},{'name':'coin_type','type':'coin_type','description':'Coin\x20type\x20T','required':!![]},{'name':'description','type':'string','description':'Treasury\x20description','required':!![]},{'name':'permission_name','type':'string','description':'Name\x20for\x20the\x20new\x20Permission\x20object','required':!![]},{'name':'external_deposit_guards','type':'string[]','description':'Guard\x20addresses/names\x20for\x20external\x20deposit\x20(identifier=Optional)','required':![]},{'name':'external_withdraw_guards','type':'string[]','description':'Guard\x20addresses/names\x20for\x20external\x20withdraw\x20(identifier=Required)','required':![]},{'name':'withdraw_identifier_index','type':'number','description':'Guard\x20table\x20identifier\x20index\x20for\x20withdraw\x20amount\x20(u8,\x20required\x20for\x20withdraw\x20guards)','required':![],'default':0x0},{'name':'store_from_id_index','type':'number','description':'Optional\x20store_from_id\x20index\x20for\x20audit\x20trail','required':![]}],'body':a=>{const b={'object':{'name':a['treasury_name'],'type_parameter':a['coin_type'],'permission':{'name':a['permission_name'],'description':'Permission\x20for\x20'+a['treasury_name']+'\x20(external\x20ops)'}},'description':a['description'],'_permission_config':{'TREASURY_NEW':[a['owner_address']],'TREASURY_EXTERNAL_DEPOSIT_GUARD':[a['owner_address']],'TREASURY_EXTERNAL_WITHDRAW_GUARD':[a['owner_address']],'TREASURY_OWNER_RECEIVE':[a['owner_address']],'TREASURY_UM':[a['owner_address']]}};a['external_deposit_guards']&&Array['isArray'](a['external_deposit_guards'])&&a['external_deposit_guards']['length']>0x0&&(b['external_deposit_guard']={'op':'add','guards':a['external_deposit_guards']['map'](c=>({'guard':c,'identifier':null,'store_from_id':a['store_from_id_index']!==undefined?a['store_from_id_index']:null}))});if(a['external_withdraw_guards']&&Array['isArray'](a['external_withdraw_guards'])&&a['external_withdraw_guards']['length']>0x0){if(a['withdraw_identifier_index']===undefined)throw new Error('withdraw_identifier_index\x20is\x20REQUIRED\x20when\x20external_withdraw_guards\x20is\x20specified\x20(u8,\x20not\x20Option)');b['external_withdraw_guard']={'op':'add','guards':a['external_withdraw_guards']['map'](c=>({'guard':c,'identifier':a['withdraw_identifier_index'],'store_from_id':a['store_from_id_index']!==undefined?a['store_from_id_index']:null}))};}return b;},'notes':['Asymmetric\x20identifier:\x20deposit=Option<u8>\x20(null\x20OK),\x20withdraw=u8\x20(REQUIRED)','Pair\x20with\x20Guard\x20objects\x20that\x20have\x20appropriate\x20table\x20fields\x20(number-type\x20for\x20identifier,\x20address-compatible\x20for\x20store_from_id)','External\x20operations\x20bypass\x20Permission;\x20ensure\x20Guard\x20rules\x20are\x20correctly\x20configured','Use\x20T-T-04\x20style\x20for\x20Service-shared\x20Permission\x20if\x20needed']},{'id':'T-T-04','name':'Service-shared\x20Treasury\x20(shared\x20Permission\x20with\x20Service)','description':'Treasury\x20that\x20shares\x20its\x20Permission\x20object\x20with\x20a\x20Service.\x20Single\x20admin\x20team\x20manages\x20both\x20Service\x20and\x20Treasury\x20operations.','applicable_scenes':['treasury_permission_sharing'],'industry_tags':['service','retail','ecommerce'],'params':[{'name':'treasury_name','type':'string','description':'Name\x20for\x20the\x20new\x20Treasury\x20object','required':!![]},{'name':'owner_address','type':'address','description':'Owner\x20address\x20(Service\x20and\x20Treasury\x20share\x20owner)','required':!![]},{'name':'coin_type','type':'coin_type','description':'Coin\x20type\x20T','required':!![]},{'name':'description','type':'string','description':'Treasury\x20description','required':!![]},{'name':'existing_permission_address','type':'address','description':'Existing\x20Permission\x20object\x20address\x20(already\x20applied\x20to\x20Service)','required':!![]},{'name':'service_address','type':'address','description':'Service\x20object\x20address\x20that\x20shares\x20this\x20Permission','required':![]}],'body':a=>({'object':{'name':a['treasury_name'],'type_parameter':a['coin_type'],'permission':a['existing_permission_address']},'description':a['description'],'_permission_config':{'_note':'Permission\x20shared\x20with\x20Service;\x20do\x20NOT\x20reconfigure\x20indexes\x20300-320\x20(Service\x20range)','TREASURY_DEPOSIT':[a['owner_address']],'TREASURY_RECEIVE':[a['owner_address']],'TREASURY_WITHDRAW':[a['owner_address']],'TREASURY_OWNER_RECEIVE':[a['owner_address']]},'_integration':{'service':a['service_address']??'(specify\x20service_address)','flow':'Service\x20collects\x20payments\x20→\x20Allocator\x20splits\x20→\x20Treasury.receive\x20(253)\x20→\x20balance'}}),'notes':['Shares\x20Permission\x20with\x20an\x20existing\x20Service;\x20admin\x20changes\x20affect\x20both\x20objects','Verify\x20Permission\x20indexes\x20250-258\x20(Treasury)\x20and\x20300-320\x20(Service)\x20are\x20assigned\x20to\x20intended\x20entities','Use\x20this\x20when\x20a\x20single\x20business\x20unit\x20operates\x20both\x20a\x20Service\x20storefront\x20and\x20a\x20Treasury\x20fund\x20pool']},{'id':'T-T-05','name':'Allocation\x20fund-pool\x20Treasury\x20(referenced\x20by\x20Allocator)','description':'Treasury\x20configured\x20as\x20Allocation\x27s\x20sharing.who=Entity\x20target.\x20Receives\x20automated\x20fund\x20splits\x20from\x20Service\x20revenue.\x20Requires\x20TREASURY_RECEIVE\x20(253)\x20for\x20intake.','applicable_scenes':['treasury_fund_collection','treasury_permission_sharing'],'industry_tags':['service','ecommerce','marketplace'],'params':[{'name':'treasury_name','type':'string','description':'Name\x20for\x20the\x20new\x20Treasury\x20object','required':!![]},{'name':'owner_address','type':'address','description':'Owner\x20address\x20(Service\x20owner)','required':!![]},{'name':'receiver_address','type':'address','description':'Address\x20allowed\x20to\x20call\x20receive\x20(253)\x20for\x20CoinWrapper\x20intake','required':!![]},{'name':'coin_type','type':'coin_type','description':'Coin\x20type\x20T\x20(must\x20match\x20Service\x20coin\x20type)','required':!![]},{'name':'description','type':'string','description':'Treasury\x20description','required':!![]},{'name':'permission_name','type':'string','description':'Name\x20for\x20the\x20new\x20Permission\x20object','required':!![]},{'name':'allocator_address','type':'address','description':'Allocator\x20object\x20address\x20(references\x20this\x20Treasury\x20as\x20Entity\x20target)','required':![]}],'body':a=>({'object':{'name':a['treasury_name'],'type_parameter':a['coin_type'],'permission':{'name':a['permission_name'],'description':'Permission\x20for\x20'+a['treasury_name']+'\x20(Allocation\x20target)'}},'description':a['description'],'_permission_config':{'TREASURY_RECEIVE':[a['receiver_address']],'TREASURY_OWNER_RECEIVE':[a['owner_address']],'TREASURY_WITHDRAW':[a['owner_address']]},'_integration':{'allocator':a['allocator_address']??'(specify\x20allocator_address)','flow':'Service.payment\x20→\x20Allocator.alloc\x20→\x20CoinWrapper\x20to\x20Treasury\x20→\x20Treasury.receive\x20(253)\x20→\x20balance','_note':'Without\x20TREASURY_RECEIVE\x20(253)\x20granted,\x20CoinWrapper\x20will\x20accumulate\x20without\x20entering\x20balance'}}),'notes':['CRITICAL:\x20TREASURY_RECEIVE\x20(253)\x20must\x20be\x20granted\x20to\x20a\x20trusted\x20operator\x20for\x20regular\x20intake','Configure\x20a\x20scheduled\x20job\x20to\x20call\x20receive\x20periodically\x20(e.g.,\x20daily)\x20to\x20convert\x20CoinWrapper\x20to\x20balance','Allocator\x27s\x20sharing.who=Entity\x20must\x20point\x20to\x20this\x20Treasury\x27s\x20address','Pair\x20with\x20guard\x20template\x20tpl_allocator_treasury_personal\x20if\x20needed']},{'id':'T-T-06','name':'Receivable\x20Treasury\x20(deposit\x20+\x20owner_receive\x20only)','description':'Minimal\x20Treasury\x20that\x20only\x20accepts\x20deposits\x20and\x20forwards\x20received\x20assets\x20to\x20Permission\x20owner\x20via\x20owner_receive.\x20No\x20withdraw\x20role.\x20Suitable\x20for\x20fee\x20sinks\x20or\x20donation\x20pools.','applicable_scenes':['treasury_fund_collection','treasury_owner_receive'],'industry_tags':['universal','fee_sink','donation'],'params':[{'name':'treasury_name','type':'string','description':'Name\x20for\x20the\x20new\x20Treasury\x20object','required':!![]},{'name':'owner_address','type':'address','description':'Owner\x20address\x20(receives\x20forwarded\x20assets)','required':!![]},{'name':'depositor_addresses','type':'string[]','description':'Addresses\x20allowed\x20to\x20deposit\x20(TREASURY_DEPOSIT=252)','required':!![]},{'name':'coin_type','type':'coin_type','description':'Coin\x20type\x20T','required':!![]},{'name':'description','type':'string','description':'Treasury\x20description','required':!![]},{'name':'permission_name','type':'string','description':'Name\x20for\x20the\x20new\x20Permission\x20object','required':!![]}],'body':a=>({'object':{'name':a['treasury_name'],'type_parameter':a['coin_type'],'permission':{'name':a['permission_name'],'description':'Permission\x20for\x20'+a['treasury_name']+'\x20(receivable-only)'}},'description':a['description'],'_permission_config':{'TREASURY_DEPOSIT':a['depositor_addresses'],'TREASURY_RECEIVE':[a['owner_address']],'TREASURY_OWNER_RECEIVE':[a['owner_address']]},'_workflow':{'step_1':'Depositors\x20call\x20treasury.deposit\x20(252)\x20to\x20add\x20funds','step_2':'Owner\x20calls\x20treasury.receive\x20(253)\x20to\x20convert\x20any\x20CoinWrapper\x20to\x20balance','step_3':'Owner\x20calls\x20treasury.owner_receive\x20(257)\x20to\x20forward\x20balance\x20to\x20owner\x20address','_note':'No\x20withdraw\x20path;\x20owner_receive\x20is\x20the\x20only\x20fund\x20exit'}}),'notes':['No\x20TREASURY_WITHDRAW\x20(254)\x20granted;\x20funds\x20exit\x20only\x20via\x20owner_receive\x20(257)','owner_receive\x20does\x20NOT\x20write\x20to\x20history;\x20rely\x20on\x20Payment\x20records\x20for\x20audit','Suitable\x20for\x20fee\x20sinks,\x20donation\x20pools,\x20or\x20auto-forwarding\x20revenue']},{'id':'T-T-07','name':'Exception\x20Compensation\x20Treasury\x20(scene-bound\x20Payment\x20withdraw)','description':'Treasury\x20for\x20exception\x20branch\x20compensation:\x20withdraws\x20create\x20scene-bound\x20Payments\x20with\x20for_object\x20+\x20for_guard\x20+\x20index\x20binding.\x20Enables\x20auto-compensation\x20for\x20delays,\x20defects,\x20or\x20service\x20exceptions.','applicable_scenes':['treasury_fund_collection','treasury_um_delegation'],'industry_tags':['retail','travel','rental','freelance','ecommerce'],'params':[{'name':'treasury_name','type':'string','description':'Name\x20for\x20the\x20new\x20Treasury\x20object','required':!![]},{'name':'owner_address','type':'address','description':'Owner\x20address\x20(service\x20provider,\x20becomes\x20admin)','required':!![]},{'name':'coin_type','type':'coin_type','description':'Coin\x20type\x20T\x20(e.g.\x200x2::wow::WOW)','required':!![]},{'name':'description','type':'string','description':'Treasury\x20description\x20(e.g.,\x20\x27Compensation\x20fund\x20for\x20delivery\x20delays\x27)','required':!![]},{'name':'permission_name','type':'string','description':'Name\x20for\x20the\x20new\x20Permission\x20object','required':!![]},{'name':'withdrawer_address','type':'address','description':'Address\x20authorized\x20to\x20withdraw\x20compensations\x20(can\x20be\x20same\x20as\x20owner)','required':!![]},{'name':'external_withdraw_guard','type':'address','description':'Guard\x20address\x20for\x20external_withdraw\x20(verifies\x20exception\x20conditions\x20+\x20Payment\x20binding)','required':!![]}],'body':a=>({'object':{'name':a['treasury_name'],'type_parameter':a['coin_type'],'permission':{'name':a['permission_name'],'description':'Permission\x20for\x20'+a['treasury_name'],'indexes':[{'index':0xfd,'name':'TREASURY_DEPOSIT','mark':a['owner_address'],'description':'Owner\x20deposits\x20funds'},{'index':0xfe,'name':'TREASURY_WITHDRAW','mark':a['withdrawer_address'],'description':'Withdraw\x20for\x20exception\x20compensation\x20(creates\x20scene-bound\x20Payment)'},{'index':0x100,'name':'TREASURY_EXTERNAL_WITHDRAW','mark':a['withdrawer_address'],'description':'External\x20withdraw\x20with\x20guard\x20(verifies\x20exception\x20+\x20Payment\x20binding)'},{'index':0x101,'name':'TREASURY_OWNER_RECEIVE','mark':a['owner_address'],'description':'Owner\x20receives\x20remaining\x20funds'}]}},'description':a['description']}),'notes':['VERIFIED:\x20treasury.move#L249-264\x20(withdraw\x20creates\x20Payment\x20via\x20payment::new_singleton\x20+\x20from_object_set)','VERIFIED:\x20treasury.move#L415-418\x20(withdraw<T>\x20sends\x20to\x20recipient\x20with\x20PaymentInfo)','Payment\x20created\x20has\x20PaymentInfo(for_object=order,\x20for_guard=exception_guard,\x20index=current_progress)','ANTI-REUSE:\x20for_object\x20+\x20for_guard\x20+\x20index\x20binds\x20Payment\x20to\x20specific\x20context\x20(payment.move#L66-71)','VERIFIER-EVIDENCE:\x20customer\x20submits\x20Payment\x20via\x20Passport,\x20Guard\x20verifies\x20binding\x20fields\x20match','Use\x20with\x20tpl_payment_exception_compensation\x20(guard-templates.ts)\x20for\x20the\x20exception\x20branch\x20guard','Suitable\x20for:\x20delivery\x20delay\x20compensation,\x20defect\x20refund,\x20service-level\x20agreement\x20penalties']}];export const TREASURY_TEMPLATES_VERSION='1.0.0';export function getAllTreasuryTemplates(){return[...TREASURY_TEMPLATES];}export function getTemplateById(a){return TREASURY_TEMPLATES['find'](b=>b['id']===a);}export function getTemplatesByScene(a){return TREASURY_TEMPLATES['filter'](b=>b['applicable_scenes']['includes'](a));}export function getTemplatesByIndustry(a){return TREASURY_TEMPLATES['filter'](b=>b['industry_tags']['includes'](a)||b['industry_tags']['includes']('universal'));}export function suggestTemplateForScene(a){const b=getTemplatesByScene(a);return b['length']>0x0?b[0x0]:undefined;}export function listTemplates(){return TREASURY_TEMPLATES['map'](a=>({'id':a['id'],'name':a['name'],'description':a['description'],'scenes':a['applicable_scenes']}));}export function fillTemplate(a,b){const c=getTemplateById(a);if(!c)return{'ok':![],'error':'Template\x20'+a+'\x20not\x20found'};for(const d of c['params']){if(d['required']&&!(d['name']in b))return{'ok':![],'error':'Missing\x20required\x20param:\x20'+d['name']};}try{return{'ok':!![],'body':c['body'](b)};}catch(f){return{'ok':![],'error':'Template\x20body\x20execution\x20failed:\x20'+f['message']};}}
|
|
1
|
+
export const TREASURY_TEMPLATES=[{'id':'T-T-01','name':'Basic\x20Treasury\x20(owner-only\x20deposit/withdraw)','description':'Single-owner\x20Treasury\x20with\x20no\x20external\x20Guard.\x20Owner\x20has\x20all\x20permissions.\x20Suitable\x20for\x20solo\x20operators\x20or\x20simple\x20team\x20funds.','applicable_scenes':['treasury_fund_collection','treasury_um_delegation'],'industry_tags':['universal','solo'],'params':[{'name':'treasury_name','type':'string','description':'Name\x20for\x20the\x20new\x20Treasury\x20object','required':!![]},{'name':'owner_address','type':'address','description':'Owner\x20address\x20(becomes\x20admin)','required':!![]},{'name':'coin_type','type':'coin_type','description':'Coin\x20type\x20T\x20(e.g.\x200x2::wow::WOW)','required':!![]},{'name':'description','type':'string','description':'Treasury\x20description','required':!![]},{'name':'permission_name','type':'string','description':'Name\x20for\x20the\x20new\x20Permission\x20object','required':!![]}],'body':a=>({'object':{'name':a['treasury_name'],'type_parameter':a['coin_type'],'permission':{'name':a['permission_name'],'description':'Permission\x20for\x20'+a['treasury_name']}},'description':a['description'],'_permission_config':{'TREASURY_NEW':[a['owner_address']],'TREASURY_DESCRIPTION':[a['owner_address']],'TREASURY_DEPOSIT':[a['owner_address']],'TREASURY_RECEIVE':[a['owner_address']],'TREASURY_WITHDRAW':[a['owner_address']],'TREASURY_OWNER_RECEIVE':[a['owner_address']],'TREASURY_UM':[a['owner_address']]}}),'notes':['All\x20permissions\x20granted\x20to\x20owner\x20only;\x20suitable\x20for\x20solo\x20treasury','No\x20external\x20Guard\x20configured;\x20all\x20deposits/withdraws\x20via\x20Permission','To\x20enable\x20external\x20operations\x20later,\x20use\x20T-T-03\x20pattern']},{'id':'T-T-02','name':'Multi-role\x20Treasury\x20(separated\x20depositor/withdrawer)','description':'Treasury\x20with\x20separated\x20depositor\x20and\x20withdrawer\x20roles.\x20Enforces\x20separation\x20of\x20duties.\x20Suitable\x20for\x20project\x20budget\x20management.','applicable_scenes':['treasury_fund_collection','treasury_permission_sharing'],'industry_tags':['universal','team','project'],'params':[{'name':'treasury_name','type':'string','description':'Name\x20for\x20the\x20new\x20Treasury\x20object','required':!![]},{'name':'owner_address','type':'address','description':'Owner\x20address\x20(full\x20control)','required':!![]},{'name':'depositor_addresses','type':'string[]','description':'Addresses\x20allowed\x20to\x20deposit\x20(TREASURY_DEPOSIT=252)','required':!![]},{'name':'withdrawer_addresses','type':'string[]','description':'Addresses\x20allowed\x20to\x20withdraw\x20(TREASURY_WITHDRAW=254)','required':!![]},{'name':'receiver_address','type':'address','description':'Address\x20allowed\x20to\x20receive\x20CoinWrapper\x20(TREASURY_RECEIVE=253)','required':!![]},{'name':'coin_type','type':'coin_type','description':'Coin\x20type\x20T','required':!![]},{'name':'description','type':'string','description':'Treasury\x20description','required':!![]},{'name':'permission_name','type':'string','description':'Name\x20for\x20the\x20new\x20Permission\x20object','required':!![]}],'body':a=>({'object':{'name':a['treasury_name'],'type_parameter':a['coin_type'],'permission':{'name':a['permission_name'],'description':'Permission\x20for\x20'+a['treasury_name']+'\x20(multi-role)'}},'description':a['description'],'_permission_config':{'TREASURY_NEW':[a['owner_address']],'TREASURY_DESCRIPTION':[a['owner_address']],'TREASURY_DEPOSIT':a['depositor_addresses'],'TREASURY_RECEIVE':[a['receiver_address']],'TREASURY_WITHDRAW':a['withdrawer_addresses'],'TREASURY_OWNER_RECEIVE':[a['owner_address']],'TREASURY_UM':[a['owner_address']]}}),'notes':['Separation\x20of\x20duties:\x20deposit\x20and\x20withdraw\x20roles\x20assigned\x20to\x20different\x20addresses','Use\x20distinct\x20addresses\x20for\x20depositor_addresses\x20and\x20withdrawer_addresses','Owner\x20retains\x20full\x20control\x20(set/clear\x20usage\x20method,\x20owner\x20receive,\x20set\x20description)']},{'id':'T-T-03','name':'External\x20operations\x20Treasury\x20(with\x20Guard\x20protection)','description':'Treasury\x20with\x20external_deposit_guard\x20and/or\x20external_withdraw_guard\x20configured.\x20Allows\x20external\x20users\x20to\x20deposit/withdraw\x20via\x20Guard\x20+\x20Passport\x20without\x20Permission.','applicable_scenes':['treasury_external_ops','treasury_guard_protection'],'industry_tags':['finance','crowdfunding','refund','compensation'],'params':[{'name':'treasury_name','type':'string','description':'Name\x20for\x20the\x20new\x20Treasury\x20object','required':!![]},{'name':'owner_address','type':'address','description':'Owner\x20address','required':!![]},{'name':'coin_type','type':'coin_type','description':'Coin\x20type\x20T','required':!![]},{'name':'description','type':'string','description':'Treasury\x20description','required':!![]},{'name':'permission_name','type':'string','description':'Name\x20for\x20the\x20new\x20Permission\x20object','required':!![]},{'name':'external_deposit_guards','type':'string[]','description':'Guard\x20addresses/names\x20for\x20external\x20deposit\x20(identifier=Optional)','required':![]},{'name':'external_withdraw_guards','type':'string[]','description':'Guard\x20addresses/names\x20for\x20external\x20withdraw\x20(identifier=Required)','required':![]},{'name':'withdraw_identifier_index','type':'number','description':'Guard\x20table\x20identifier\x20index\x20for\x20withdraw\x20amount\x20(u8,\x20required\x20for\x20withdraw\x20guards)','required':![],'default':0x0},{'name':'store_from_id_index','type':'number','description':'Optional\x20store_from_id\x20index\x20for\x20audit\x20trail','required':![]}],'body':a=>{const b={'object':{'name':a['treasury_name'],'type_parameter':a['coin_type'],'permission':{'name':a['permission_name'],'description':'Permission\x20for\x20'+a['treasury_name']+'\x20(external\x20ops)'}},'description':a['description'],'_permission_config':{'TREASURY_NEW':[a['owner_address']],'TREASURY_EXTERNAL_DEPOSIT_GUARD':[a['owner_address']],'TREASURY_EXTERNAL_WITHDRAW_GUARD':[a['owner_address']],'TREASURY_OWNER_RECEIVE':[a['owner_address']],'TREASURY_UM':[a['owner_address']]}};a['external_deposit_guards']&&Array['isArray'](a['external_deposit_guards'])&&a['external_deposit_guards']['length']>0x0&&(b['external_deposit_guard']={'op':'add','guards':a['external_deposit_guards']['map'](c=>({'guard':c,'identifier':null,'store_from_id':a['store_from_id_index']!==undefined?a['store_from_id_index']:null}))});if(a['external_withdraw_guards']&&Array['isArray'](a['external_withdraw_guards'])&&a['external_withdraw_guards']['length']>0x0){if(a['withdraw_identifier_index']===undefined)throw new Error('withdraw_identifier_index\x20is\x20REQUIRED\x20when\x20external_withdraw_guards\x20is\x20specified\x20(u8,\x20not\x20Option)');b['external_withdraw_guard']={'op':'add','guards':a['external_withdraw_guards']['map'](c=>({'guard':c,'identifier':a['withdraw_identifier_index'],'store_from_id':a['store_from_id_index']!==undefined?a['store_from_id_index']:null}))};}return b;},'notes':['Asymmetric\x20identifier:\x20deposit=Option<u8>\x20(null\x20OK),\x20withdraw=u8\x20(REQUIRED)','Pair\x20with\x20Guard\x20objects\x20that\x20have\x20appropriate\x20table\x20fields\x20(number-type\x20for\x20identifier,\x20address-compatible\x20for\x20store_from_id)','External\x20operations\x20bypass\x20Permission;\x20ensure\x20Guard\x20rules\x20are\x20correctly\x20configured','Use\x20T-T-04\x20style\x20for\x20Service-shared\x20Permission\x20if\x20needed']},{'id':'T-T-04','name':'Service-shared\x20Treasury\x20(shared\x20Permission\x20with\x20Service)','description':'Treasury\x20that\x20shares\x20its\x20Permission\x20object\x20with\x20a\x20Service.\x20Single\x20admin\x20team\x20manages\x20both\x20Service\x20and\x20Treasury\x20operations.','applicable_scenes':['treasury_permission_sharing'],'industry_tags':['service','retail','ecommerce'],'params':[{'name':'treasury_name','type':'string','description':'Name\x20for\x20the\x20new\x20Treasury\x20object','required':!![]},{'name':'owner_address','type':'address','description':'Owner\x20address\x20(Service\x20and\x20Treasury\x20share\x20owner)','required':!![]},{'name':'coin_type','type':'coin_type','description':'Coin\x20type\x20T','required':!![]},{'name':'description','type':'string','description':'Treasury\x20description','required':!![]},{'name':'existing_permission_address','type':'address','description':'Existing\x20Permission\x20object\x20address\x20(already\x20applied\x20to\x20Service)','required':!![]},{'name':'service_address','type':'address','description':'Service\x20object\x20address\x20that\x20shares\x20this\x20Permission','required':![]}],'body':a=>({'object':{'name':a['treasury_name'],'type_parameter':a['coin_type'],'permission':a['existing_permission_address']},'description':a['description'],'_permission_config':{'_note':'Permission\x20shared\x20with\x20Service;\x20do\x20NOT\x20reconfigure\x20indexes\x20300-320\x20(Service\x20range)','TREASURY_DEPOSIT':[a['owner_address']],'TREASURY_RECEIVE':[a['owner_address']],'TREASURY_WITHDRAW':[a['owner_address']],'TREASURY_OWNER_RECEIVE':[a['owner_address']]},'_integration':{'service':a['service_address']??'(specify\x20service_address)','flow':'Service\x20collects\x20payments\x20→\x20Allocator\x20splits\x20→\x20Treasury.receive\x20(253)\x20→\x20balance'}}),'notes':['Shares\x20Permission\x20with\x20an\x20existing\x20Service;\x20admin\x20changes\x20affect\x20both\x20objects','Verify\x20Permission\x20indexes\x20250-258\x20(Treasury)\x20and\x20300-320\x20(Service)\x20are\x20assigned\x20to\x20intended\x20entities','Use\x20this\x20when\x20a\x20single\x20business\x20unit\x20operates\x20both\x20a\x20Service\x20storefront\x20and\x20a\x20Treasury\x20fund\x20pool']},{'id':'T-T-05','name':'Allocation\x20fund-pool\x20Treasury\x20(referenced\x20by\x20Allocator)','description':'Treasury\x20configured\x20as\x20Allocation\x27s\x20sharing.who=Entity\x20target.\x20Receives\x20automated\x20fund\x20splits\x20from\x20Service\x20revenue.\x20Requires\x20TREASURY_RECEIVE\x20(253)\x20for\x20intake.','applicable_scenes':['treasury_fund_collection','treasury_permission_sharing'],'industry_tags':['service','ecommerce','marketplace'],'params':[{'name':'treasury_name','type':'string','description':'Name\x20for\x20the\x20new\x20Treasury\x20object','required':!![]},{'name':'owner_address','type':'address','description':'Owner\x20address\x20(Service\x20owner)','required':!![]},{'name':'receiver_address','type':'address','description':'Address\x20allowed\x20to\x20call\x20receive\x20(253)\x20for\x20CoinWrapper\x20intake','required':!![]},{'name':'coin_type','type':'coin_type','description':'Coin\x20type\x20T\x20(must\x20match\x20Service\x20coin\x20type)','required':!![]},{'name':'description','type':'string','description':'Treasury\x20description','required':!![]},{'name':'permission_name','type':'string','description':'Name\x20for\x20the\x20new\x20Permission\x20object','required':!![]},{'name':'allocator_address','type':'address','description':'Allocator\x20object\x20address\x20(references\x20this\x20Treasury\x20as\x20Entity\x20target)','required':![]}],'body':a=>({'object':{'name':a['treasury_name'],'type_parameter':a['coin_type'],'permission':{'name':a['permission_name'],'description':'Permission\x20for\x20'+a['treasury_name']+'\x20(Allocation\x20target)'}},'description':a['description'],'_permission_config':{'TREASURY_RECEIVE':[a['receiver_address']],'TREASURY_OWNER_RECEIVE':[a['owner_address']],'TREASURY_WITHDRAW':[a['owner_address']]},'_integration':{'allocator':a['allocator_address']??'(specify\x20allocator_address)','flow':'Service.payment\x20→\x20Allocator.alloc\x20→\x20CoinWrapper\x20to\x20Treasury\x20→\x20Treasury.receive\x20(253)\x20→\x20balance','_note':'Without\x20TREASURY_RECEIVE\x20(253)\x20granted,\x20CoinWrapper\x20will\x20accumulate\x20without\x20entering\x20balance'}}),'notes':['CRITICAL:\x20TREASURY_RECEIVE\x20(253)\x20must\x20be\x20granted\x20to\x20a\x20trusted\x20operator\x20for\x20regular\x20intake','Configure\x20a\x20scheduled\x20job\x20to\x20call\x20receive\x20periodically\x20(e.g.,\x20daily)\x20to\x20convert\x20CoinWrapper\x20to\x20balance','Allocator\x27s\x20sharing.who=Entity\x20must\x20point\x20to\x20this\x20Treasury\x27s\x20address','Pair\x20with\x20guard\x20template\x20tpl_allocator_treasury_personal\x20if\x20needed']},{'id':'T-T-06','name':'Receivable\x20Treasury\x20(deposit\x20+\x20owner_receive\x20only)','description':'Minimal\x20Treasury\x20that\x20only\x20accepts\x20deposits\x20and\x20forwards\x20received\x20assets\x20to\x20Permission\x20owner\x20via\x20owner_receive.\x20No\x20withdraw\x20role.\x20Suitable\x20for\x20fee\x20sinks\x20or\x20donation\x20pools.','applicable_scenes':['treasury_fund_collection','treasury_owner_receive'],'industry_tags':['universal','fee_sink','donation'],'params':[{'name':'treasury_name','type':'string','description':'Name\x20for\x20the\x20new\x20Treasury\x20object','required':!![]},{'name':'owner_address','type':'address','description':'Owner\x20address\x20(receives\x20forwarded\x20assets)','required':!![]},{'name':'depositor_addresses','type':'string[]','description':'Addresses\x20allowed\x20to\x20deposit\x20(TREASURY_DEPOSIT=252)','required':!![]},{'name':'coin_type','type':'coin_type','description':'Coin\x20type\x20T','required':!![]},{'name':'description','type':'string','description':'Treasury\x20description','required':!![]},{'name':'permission_name','type':'string','description':'Name\x20for\x20the\x20new\x20Permission\x20object','required':!![]}],'body':a=>({'object':{'name':a['treasury_name'],'type_parameter':a['coin_type'],'permission':{'name':a['permission_name'],'description':'Permission\x20for\x20'+a['treasury_name']+'\x20(receivable-only)'}},'description':a['description'],'_permission_config':{'TREASURY_DEPOSIT':a['depositor_addresses'],'TREASURY_RECEIVE':[a['owner_address']],'TREASURY_OWNER_RECEIVE':[a['owner_address']]},'_workflow':{'step_1':'Depositors\x20call\x20treasury.deposit\x20(252)\x20to\x20add\x20funds','step_2':'Owner\x20calls\x20treasury.receive\x20(253)\x20to\x20convert\x20any\x20CoinWrapper\x20to\x20balance','step_3':'Owner\x20calls\x20treasury.owner_receive\x20(257)\x20to\x20forward\x20balance\x20to\x20owner\x20address','_note':'No\x20withdraw\x20path;\x20owner_receive\x20is\x20the\x20only\x20fund\x20exit'}}),'notes':['No\x20TREASURY_WITHDRAW\x20(254)\x20granted;\x20funds\x20exit\x20only\x20via\x20owner_receive\x20(257)','owner_receive\x20does\x20NOT\x20write\x20to\x20history;\x20rely\x20on\x20Payment\x20records\x20for\x20audit','Suitable\x20for\x20fee\x20sinks,\x20donation\x20pools,\x20or\x20auto-forwarding\x20revenue']},{'id':'T-T-07','name':'Exception\x20Compensation\x20Treasury\x20(scene-bound\x20Payment\x20withdraw)','description':'Treasury\x20for\x20exception\x20branch\x20compensation:\x20withdraws\x20create\x20scene-bound\x20Payments\x20with\x20for_object\x20+\x20for_guard\x20+\x20index\x20binding.\x20Enables\x20auto-compensation\x20for\x20delays,\x20defects,\x20or\x20service\x20exceptions.','applicable_scenes':['treasury_fund_collection','treasury_um_delegation'],'industry_tags':['retail','travel','rental','freelance','ecommerce'],'params':[{'name':'treasury_name','type':'string','description':'Name\x20for\x20the\x20new\x20Treasury\x20object','required':!![]},{'name':'owner_address','type':'address','description':'Owner\x20address\x20(service\x20provider,\x20becomes\x20admin)','required':!![]},{'name':'coin_type','type':'coin_type','description':'Coin\x20type\x20T\x20(e.g.\x200x2::wow::WOW)','required':!![]},{'name':'description','type':'string','description':'Treasury\x20description\x20(e.g.,\x20\x27Compensation\x20fund\x20for\x20delivery\x20delays\x27)','required':!![]},{'name':'permission_name','type':'string','description':'Name\x20for\x20the\x20new\x20Permission\x20object','required':!![]},{'name':'withdrawer_address','type':'address','description':'Address\x20authorized\x20to\x20withdraw\x20compensations\x20(can\x20be\x20same\x20as\x20owner)','required':!![]},{'name':'external_withdraw_guard','type':'address','description':'Guard\x20address\x20for\x20external_withdraw\x20(verifies\x20exception\x20conditions\x20+\x20Payment\x20binding)','required':!![]}],'body':a=>({'object':{'name':a['treasury_name'],'type_parameter':a['coin_type'],'permission':{'name':a['permission_name'],'description':'Permission\x20for\x20'+a['treasury_name'],'indexes':[{'index':0xfd,'name':'TREASURY_DEPOSIT','mark':a['owner_address'],'description':'Owner\x20deposits\x20funds'},{'index':0xfe,'name':'TREASURY_WITHDRAW','mark':a['withdrawer_address'],'description':'Withdraw\x20for\x20exception\x20compensation\x20(creates\x20scene-bound\x20Payment)'},{'index':0x100,'name':'TREASURY_EXTERNAL_WITHDRAW','mark':a['withdrawer_address'],'description':'External\x20withdraw\x20with\x20guard\x20(verifies\x20exception\x20+\x20Payment\x20binding)'},{'index':0x101,'name':'TREASURY_OWNER_RECEIVE','mark':a['owner_address'],'description':'Owner\x20receives\x20remaining\x20funds'}]}},'description':a['description']}),'notes':['VERIFIED:\x20withdraw\x20creates\x20the\x20Payment\x20as\x20a\x20fresh\x20singleton\x20object\x20from\x20the\x20withdrawn\x20object\x20set','VERIFIED:\x20withdraw<T>\x20sends\x20to\x20recipient\x20with\x20PaymentInfo','Payment\x20created\x20has\x20PaymentInfo(for_object=order,\x20for_guard=exception_guard,\x20index=current_progress)','ANTI-REUSE:\x20for_object\x20+\x20for_guard\x20+\x20index\x20binds\x20Payment\x20to\x20specific\x20context','VERIFIER-EVIDENCE:\x20customer\x20submits\x20Payment\x20via\x20Passport,\x20Guard\x20verifies\x20binding\x20fields\x20match','Use\x20with\x20tpl_payment_exception_compensation\x20(guard-templates.ts)\x20for\x20the\x20exception\x20branch\x20guard','Suitable\x20for:\x20delivery\x20delay\x20compensation,\x20defect\x20refund,\x20service-level\x20agreement\x20penalties']}];export const TREASURY_TEMPLATES_VERSION='1.0.0';export function getAllTreasuryTemplates(){return[...TREASURY_TEMPLATES];}export function getTemplateById(a){return TREASURY_TEMPLATES['find'](b=>b['id']===a);}export function getTemplatesByScene(a){return TREASURY_TEMPLATES['filter'](b=>b['applicable_scenes']['includes'](a));}export function getTemplatesByIndustry(a){return TREASURY_TEMPLATES['filter'](b=>b['industry_tags']['includes'](a)||b['industry_tags']['includes']('universal'));}export function suggestTemplateForScene(a){const b=getTemplatesByScene(a);return b['length']>0x0?b[0x0]:undefined;}export function listTemplates(){return TREASURY_TEMPLATES['map'](a=>({'id':a['id'],'name':a['name'],'description':a['description'],'scenes':a['applicable_scenes']}));}export function fillTemplate(a,b){const c=getTemplateById(a);if(!c)return{'ok':![],'error':'Template\x20'+a+'\x20not\x20found'};for(const d of c['params']){if(d['required']&&!(d['name']in b))return{'ok':![],'error':'Missing\x20required\x20param:\x20'+d['name']};}try{return{'ok':!![],'body':c['body'](b)};}catch(f){return{'ok':![],'error':'Template\x20body\x20execution\x20failed:\x20'+f['message']};}}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import { type Facts } from "../config/rule-engine.js";
|
|
2
|
+
export type UtilRiskLevel = "critical" | "high" | "medium" | "low" | "info";
|
|
2
3
|
export type UtilRiskCategory = "structural" | "semantic" | "lifecycle" | "cross_object" | "knowledge";
|
|
3
4
|
export type UtilStakeholder = "caller" | "system";
|
|
4
5
|
export interface UtilRisk {
|
|
@@ -21,10 +22,9 @@ export interface UtilRiskCheckContext {
|
|
|
21
22
|
expects_util_events?: boolean;
|
|
22
23
|
bcs_manually_synced?: boolean;
|
|
23
24
|
}
|
|
24
|
-
export declare
|
|
25
|
-
rule: UtilRisk;
|
|
26
|
-
check: (ctx: UtilRiskCheckContext) => UtilRisk | null;
|
|
27
|
-
}[];
|
|
25
|
+
export declare function utilRiskFacts(ctx: UtilRiskCheckContext): Facts;
|
|
28
26
|
export declare const UTIL_RISK_VERSION = "1.0.0";
|
|
27
|
+
export declare const UTIL_RISK_RULES: Array<UtilRisk & {
|
|
28
|
+
trigger?: string;
|
|
29
|
+
}>;
|
|
29
30
|
export declare function checkUtilRisks(ctx: UtilRiskCheckContext): UtilRisk[];
|
|
30
|
-
export declare function getUtilRiskById(id: string): UtilRisk | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const USER_ADDRESS_BYTE=0x0,OBJECT_ADDRESS_BYTE=0xf1,TYPED_OBJECT_BYTE_MIN=0x10,TYPED_OBJECT_BYTE_MAX=0x24
|
|
1
|
+
import{getJudgmentDoc,factoryRulePack}from'../config/judgment.js';import{evaluateRuleBook,interpolate}from'../config/rule-engine.js';const USER_ADDRESS_BYTE=0x0,OBJECT_ADDRESS_BYTE=0xf1,TYPED_OBJECT_BYTE_MIN=0x10,TYPED_OBJECT_BYTE_MAX=0x24;export function utilRiskFacts(a){return{'uses_typo_function_name':a['uses_typo_function_name'],'assumes_stable_address_bytes':a['assumes_stable_address_bytes'],'large_util_import':a['large_util_import'],'expects_util_events':a['expects_util_events'],'bcs_manually_synced':a['bcs_manually_synced'],'address_byte_user':USER_ADDRESS_BYTE,'address_byte_object_regular':OBJECT_ADDRESS_BYTE,'address_byte_typed_min':TYPED_OBJECT_BYTE_MIN,'address_byte_typed_max':TYPED_OBJECT_BYTE_MAX};}function utilRuleBook(){const a=getJudgmentDoc()['rules']['domains']['util'];if(!a)throw new Error('factory\x20rule\x20pack\x20\x27util\x27\x20missing\x20—\x20broken\x20installation');return a['rules'];}function findingToUtilRisk(a){return{'id':a['rule_id'],'level':a['level'],'category':a['dimension']??'semantic','title':a['title'],'description':a['description'],'affected_stakeholders':a['stakeholders']??[],'scenario':a['scenario']??'','mitigation':a['mitigation']??'','evidence':a['evidence'],'auto_fixable':![]};}export const UTIL_RISK_VERSION='1.0.0';export const UTIL_RISK_RULES=((()=>{const a=factoryRulePack('util');if(!a)return[];const b=utilRiskFacts({});return a['rules']['map'](d=>{const e=d['cases'][0x0];return{'id':d['rule_id'],'level':e['level'],'category':d['dimension']??'semantic','title':interpolate(e['title'],b),'description':interpolate(e['description'],b),'affected_stakeholders':e['stakeholders']??[],'scenario':e['scenario']===undefined?'':interpolate(e['scenario'],b),'mitigation':e['mitigation']===undefined?'':interpolate(e['mitigation'],b),'auto_fixable':![],...d['trigger']===undefined?{}:{'trigger':d['trigger']}};});})());export function checkUtilRisks(a){const {findings:b}=evaluateRuleBook(utilRuleBook(),utilRiskFacts(a));return b['map'](findingToUtilRisk);}
|
|
@@ -63,6 +63,7 @@ export interface ReceiptInput extends GuidanceInput {
|
|
|
63
63
|
weights?: number;
|
|
64
64
|
threshold?: number;
|
|
65
65
|
}>;
|
|
66
|
+
simulated?: boolean;
|
|
66
67
|
}
|
|
67
68
|
export interface WaitingInfo {
|
|
68
69
|
forward: string;
|
|
@@ -82,6 +83,7 @@ export interface ReceiptResult {
|
|
|
82
83
|
waiting_on?: WaitingInfo[];
|
|
83
84
|
next_guidance?: GuidanceResult;
|
|
84
85
|
note?: string;
|
|
86
|
+
simulated?: boolean;
|
|
85
87
|
}
|
|
86
88
|
export declare function buildWorkflowReceipt(input: ReceiptInput): ReceiptResult;
|
|
87
89
|
export declare function renderGuidanceText(g: GuidanceResult): string;
|
|
@@ -97,8 +99,10 @@ export interface EnrichOptions {
|
|
|
97
99
|
};
|
|
98
100
|
noCache?: boolean;
|
|
99
101
|
txResult?: unknown;
|
|
102
|
+
dryRun?: boolean;
|
|
100
103
|
}
|
|
101
104
|
export declare function extractObjectVersionFromTx(txResult: unknown, objectAddr: string): string | undefined;
|
|
105
|
+
export declare function extractProgressEventNodeFromTx(txResult: unknown, progressAddr: string): string | undefined;
|
|
102
106
|
export interface EnrichResult {
|
|
103
107
|
guidance?: GuidanceResult;
|
|
104
108
|
receipt?: ReceiptResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{query_account_list,LocalMark,GetLocalNamesByAddresses}from'@wowok/wowok';import{REPOSITORY_PERMISSIONS,REWARD_PERMISSIONS,MACHINE_PERMISSIONS,PROGRESS_PERMISSIONS,TREASURY_PERMISSIONS,SERVICE_PERMISSIONS,ARBITRATION_PERMISSIONS,DEMAND_PERMISSIONS,CONTACT_PERMISSIONS}from'./permission-ledger.js';import{formatShortAddress}from'../persona/address-format.js';import{recommendedCallForForwardBinding}from'../participation/radar-core.js';import{batchQueryObjectsByIds,fetchMachineNodes,fetchOrderContext,fetchPermissionContext}from'../graph/onchain/sdk-batch.js';const BUILTIN_PERMISSION_MAP=new Map();for(const entry of[...REPOSITORY_PERMISSIONS,...REWARD_PERMISSIONS,...MACHINE_PERMISSIONS,...PROGRESS_PERMISSIONS,...TREASURY_PERMISSIONS,...SERVICE_PERMISSIONS,...ARBITRATION_PERMISSIONS,...DEMAND_PERMISSIONS,...CONTACT_PERMISSIONS]){BUILTIN_PERMISSION_MAP['set'](entry['index'],entry['name']);}export function resolvePermissionRole(a,b){if(a===undefined||a===null)return'unknown\x20role';if(b){const d=/([A-Za-z][A-Za-z0-9_]*)\s*=\s*(\d+)/g;let e;while((e=d['exec'](b))!==null){if(Number(e[0x2])===a)return e[0x1]+'\x20(permission\x20'+a+')';}}const c=BUILTIN_PERMISSION_MAP['get'](a);if(c)return c+'\x20(permission\x20'+a+')';return'permission\x20'+a;}const COMPLETE_RE=/(^|_)(completed?|done|finished|received|delivered|accepted|confirmed|finalized|success|approved)(_|$)/i,REFUND_RE=/(^|_)(cancel(led)?|refund(ed)?|return(ed|_approved)?)(_|$)/i,EXCEPTION_RE=/(^|_)(interrupt(ed)?|exception|dispute(d)?|fail(ed)?|abort(ed)?|reject(ed)?)(_|$)/i;function classifyNode(a){if(COMPLETE_RE['test'](a))return'complete';if(REFUND_RE['test'](a))return'refund';if(EXCEPTION_RE['test'](a))return'exception';return'advance';}function businessMeaning(a,b){switch(b){case'complete':return'Service/deliverable\x20accepted\x20at\x20\x22'+a+'\x22\x20—\x20triggers\x20settlement\x20allocation\x20(funds\x20released\x20to\x20the\x20provider)';case'refund':return'Order\x20cancelled/returned\x20at\x20\x22'+a+'\x22\x20—\x20triggers\x20refund\x20allocation\x20(funds\x20back\x20to\x20the\x20customer)';case'exception':return'Exception\x20path\x20at\x20\x22'+a+'\x22\x20—\x20typically\x20routes\x20to\x20arbitration\x20or\x20partial-refund\x20handling';default:return'Progress\x20to\x20\x22'+a+'\x22';}}function shortAddr(a){if(!a)return undefined;return formatShortAddress(a);}function callerIsOrderHolder(a,b){if(!a||!b?.['length'])return![];const d=a['toLowerCase']();return b['some'](e=>e?.['toLowerCase']()===d);}function resolveOperator(a,b,c,d){const e=recommendedCallForForwardBinding({'permissionIndex':a['permissionIndex'],'namedOperator':a['namedOperator'],'hasGuard':!!a['guard']});if(a['namedOperator']===''){const g=b?.[0x0];return{'kind':'order_holder','role_name':'order\x20holder\x20(customer)','account_name':d?d(g):shortAddr(g),'recommended_call':e};}if(typeof a['namedOperator']==='string'&&a['namedOperator']['length']>0x0)return{'kind':'named_operator','named_operator':a['namedOperator'],'role_name':'named\x20operator\x20\x22'+a['namedOperator']+'\x22','recommended_call':e};if(a['permissionIndex']!==undefined&&a['permissionIndex']!==null)return{'kind':'permission_index','permission_index':a['permissionIndex'],'role_name':resolvePermissionRole(a['permissionIndex'],c),'recommended_call':e};return{'kind':'order_holder','role_name':'unknown\x20operator'};}function gainsRisksFor(a,b,c){if(!c)return{'gains':[],'risks':[]};if(b)switch(a){case'complete':return{'gains':['Flow\x20advances','Settlement\x20triggered\x20(funds\x20released)'],'risks':['Funds\x20released\x20to\x20provider','Refund\x20leverage\x20lost\x20—\x20confirm\x20only\x20if\x20service\x20verified']};case'refund':return{'gains':['Funds\x20returned\x20to\x20you'],'risks':['If\x20service\x20was\x20already\x20rendered,\x20cancellation\x20may\x20be\x20disputed']};case'exception':return{'gains':['Avoids\x20stalemate'],'risks':['May\x20trigger\x20arbitration\x20/\x20reputation\x20impact']};default:return{'gains':['Flow\x20advances'],'risks':[]};}switch(a){case'complete':return{'gains':['Settlement\x20triggered\x20—\x20funds\x20released\x20to\x20provider'],'risks':[]};case'refund':return{'gains':['Clean\x20closure'],'risks':['Lost\x20revenue\x20for\x20this\x20order']};case'exception':return{'gains':['Avoids\x20stalemate'],'risks':['May\x20trigger\x20arbitration\x20/\x20compensation\x20fund']};default:return{'gains':['Flow\x20advances'],'risks':[]};}}function consistencyFor(a,b,c,d,e){let f;if(!e)f=a==='exception'?0x2d:0x32;else b?f=a==='refund'?0x46:a==='complete'?0x37:a==='exception'?0x23:0x32:f=a==='complete'?0x4b:a==='refund'?0x1e:a==='exception'?0x23:0x32;if(e&&c)f+=0x14;if(d)f-=0xa;return Math['max'](0x0,Math['min'](0x64,f));}export function buildWorkflowGuidance(a){const b=[];for(const i of a['nodes']){for(const j of i['pairs']){if(j['prev_node']!==a['current'])continue;for(const k of j['forwards']){if(!k['name'])continue;const l=resolveOperator(k,a['orderHolderAddresses'],a['permissionDescription'],a['nameResolver']),m=callerIsOrderHolder(a['callerAddress']??a['caller'],a['orderHolderAddresses']);let n=![];a['callerAddress']&&(n=accountCanExecuteForward(k,a['callerAddress'],a['progressNamedOperator']??[],a['orderContext'],a['permissionContext']));const p=classifyNode(i['name']),q=!!a['caller'],{gains:r,risks:s}=gainsRisksFor(p,m,q),t=consistencyFor(p,m,n,!!k['guard'],q);b['push']({'next_node':i['name'],'forward':k['name'],'weight':k['weight'],'operator':l,'guard':k['guard'],'business_meaning':businessMeaning(i['name'],p),'gains':r,'risks':s,'consistency':t,'recommended':![]});}}}if(b['length']===0x0)return{'current_node':a['current'],'caller':a['caller'],'options':[],'note':'Node\x20\x22'+a['current']+'\x22\x20has\x20no\x20outgoing\x20forwards\x20—\x20it\x20is\x20a\x20terminal\x20node\x20(or\x20the\x20workflow\x20is\x20stuck).\x20No\x20further\x20progress\x20operation\x20is\x20available\x20here.'};b['sort']((u,v)=>v['consistency']-u['consistency']);const c=b[0x0];b[0x0]={...c,'recommended':!![]};const d=[];for(const u of b){u!==c&&u['consistency']>0x0&&u['forward']!==c['forward']&&d['push']('Choosing\x20\x22'+u['forward']+'\x20→\x20'+u['next_node']+'\x22\x20forfeits\x20the\x20faster/more\x20aligned\x20path\x20\x22'+c['forward']+'\x20→\x20'+c['next_node']+'\x22');}const e=[],g=b['filter'](v=>v['operator']['kind']==='order_holder'&&v['forward']!==c['forward']&&c['forward']!==v['forward']),h=b['filter'](v=>v['operator']['account_name']&&v['operator']['account_name']!==a['caller']);return h['length']>0x0&&!b['some'](v=>v['recommended']&&v['operator']['account_name']===a['caller'])&&e['push']('The\x20recommended\x20action\x20is\x20executed\x20by\x20another\x20account\x20('+h[0x0]['operator']['account_name']+');\x20switch\x20the\x20signing\x20account\x20(env.account)\x20before\x20operating.'),{'current_node':a['current'],'caller':a['caller'],'options':b,'recommendation':{'best':c['forward']+'\x20→\x20'+c['next_node'],'rationale':'Highest\x20consistency\x20('+c['consistency']+'/100)\x20with\x20the\x20caller\x27s\x20interests.\x20Gains:\x20'+(c['gains']['join'](';\x20')||'none')+'.\x20Risks:\x20'+(c['risks']['join'](';\x20')||'none')+'.\x20Operator:\x20'+(c['operator']['role_name']??c['operator']['kind'])+(c['operator']['account_name']?'\x20('+c['operator']['account_name']+')':'')+'.'+(c['guard']?'\x20Guard\x20to\x20satisfy:\x20'+c['guard']+'.':''),'caveat':d['length']?d['join']('.\x20'):undefined},'note':e['length']?e['join']('\x20'):undefined};}export function buildWorkflowReceipt(a){const b=a['current']===a['targetNode'],c={'account':a['callerName'],'action':a['callerName']+'\x20executed\x20'+a['forward']+'\x20(→\x20'+a['targetNode']+')','forward':a['forward'],'target_node':a['targetNode'],'op':a['op'],'migrated':b,'current_node':a['current']};if(!b){const e=a['nodes']['filter'](j=>j['name']===a['targetNode'])['flatMap'](j=>j['pairs'])['find'](j=>j['prev_node']===a['current']),g=a['session']?.['slice'](-0x1)[0x0],h=g?.['threshold']??e?.['threshold']??0x0,i=g?.['weights']??0x0;if(h>0x0){c['threshold']=h,c['accumulated_weight']=i,c['remaining']=Math['max'](0x0,h-i);const j=new Set((g?.['forwards']??[])['filter'](l=>l?.['accomplished']!==![])['map'](l=>l?.['forward'])['filter'](l=>!!l)),k=[];for(const l of e?.['forwards']??[]){if(!l['name']||j['has'](l['name']))continue;k['push']({'forward':l['name'],'operator':resolveOperator(l,a['orderHolderAddresses'],a['permissionDescription'],a['nameResolver'])});}if(k['length'])c['waiting_on']=k;c['note']='Node\x20did\x20not\x20migrate:\x20threshold\x20'+h+',\x20accumulated\x20weight\x20'+i+',\x20remaining\x20'+Math['max'](0x0,h-i)+'.\x20'+(k['length']?'Waiting\x20for:\x20'+k['map'](m=>m['forward']+'\x20('+(m['operator']['role_name']??m['operator']['kind'])+')')['join'](';\x20'):'All\x20forwards\x20on\x20this\x20pair\x20are\x20accomplished\x20—\x20the\x20node\x20should\x20migrate\x20on\x20the\x20next\x20operation.');}else c['note']='Node\x20did\x20not\x20migrate\x20(threshold\x200)\x20—\x20no\x20further\x20weight\x20cooperation\x20required;\x20verify\x20the\x20operation\x20outcome.';}const d=buildWorkflowGuidance({'current':a['current'],'nodes':a['nodes'],'caller':a['caller'],'callerAddress':a['callerAddress'],'orderHolderAddresses':a['orderHolderAddresses'],'progressNamedOperator':a['progressNamedOperator'],'permissionContext':a['permissionContext'],'orderContext':a['orderContext'],'permissionDescription':a['permissionDescription'],'nameResolver':a['nameResolver']});if(d['options']['length']>0x0)c['next_guidance']=d;return c;}function operatorText(a){const b=[a['role_name']??a['kind']];if(a['account_name'])b['push'](a['account_name']);return b['join']('\x20/\x20');}export function renderGuidanceText(a){const b=['[WORKFLOW\x20GUIDANCE]\x20current\x20node:\x20\x22'+a['current_node']+'\x22'+(a['caller']?'\x20(caller:\x20'+a['caller']+')':'')];if(a['options']['length']===0x0)return b['push']('\x20\x20•\x20'+(a['note']??'No\x20reachable\x20next\x20nodes.')),b['join']('\x0a');for(const c of a['options']){const d=['\x22'+c['forward']+'\x22\x20→\x20\x22'+c['next_node']+'\x22','operator:\x20'+operatorText(c['operator']),'weight:\x20'+c['weight'],'consistency:\x20'+c['consistency']+'/100'+(c['recommended']?'\x20[RECOMMENDED]':'')];if(c['guard'])d['push']('guard:\x20'+c['guard']);d['push']('meaning:\x20'+c['business_meaning']);if(c['gains']['length'])d['push']('gains:\x20'+c['gains']['join'](';\x20'));if(c['risks']['length'])d['push']('risks:\x20'+c['risks']['join'](';\x20'));b['push']('\x20\x20•\x20'+d['join']('\x20|\x20'));}if(a['recommendation']?.['best']){b['push']('\x20\x20RECOMMENDED:\x20'+a['recommendation']['best']+'.\x20'+(a['recommendation']['rationale']??''));if(a['recommendation']['caveat'])b['push']('\x20\x20CAVEAT\x20(opportunity\x20cost):\x20'+a['recommendation']['caveat']);}if(a['note'])b['push']('\x20\x20NOTE:\x20'+a['note']);return b['push']('\x20\x20(AI\x20recommendation\x20only\x20—\x20the\x20account\x20decides;\x20switch\x20env.account\x20if\x20another\x20operator\x20must\x20act.)'),b['join']('\x0a');}export function renderReceiptText(a){const b=['[WORKFLOW\x20RECEIPT]\x20'+a['action']];b['push']('\x20\x20•\x20node\x20migrated:\x20'+(a['migrated']?'yes\x20→\x20current:\x20\x22'+a['current_node']+'\x22':'no\x20→\x20current:\x20\x22'+a['current_node']+'\x22'));if(!a['migrated']){a['threshold']!==undefined&&a['threshold']>0x0&&(b['push']('\x20\x20•\x20threshold:\x20'+a['threshold']+'\x20|\x20accumulated\x20weight:\x20'+(a['accumulated_weight']??0x0)+'\x20|\x20remaining:\x20'+(a['remaining']??0x0)),a['waiting_on']?.['length']&&b['push']('\x20\x20•\x20waiting\x20on:\x20'+a['waiting_on']['map'](c=>'\x22'+c['forward']+'\x22\x20('+operatorText(c['operator'])+')')['join'](';\x20')));if(a['note'])b['push']('\x20\x20•\x20note:\x20'+a['note']);}return a['next_guidance']&&a['next_guidance']['options']['length']>0x0&&b['push'](renderGuidanceText(a['next_guidance'])),b['join']('\x0a');}async function makeNameResolver(a){const b=[...new Set(a['filter'](d=>!!d))],c=new Map();if(b['length'])try{const d=await GetLocalNamesByAddresses(b);for(const e of d){const f=e?.['account']??e?.['local_mark'];if(f)c['set'](e['address']['toLowerCase'](),f);}}catch{}return g=>{if(!g)return undefined;const h=c['get'](g['toLowerCase']());return h??shortAddr(g);};}export function extractObjectVersionFromTx(a,b){if(!a||typeof a!=='object')return undefined;const d=a,e=d['effects']?.['objectChanges']??d['objectChanges'];if(!Array['isArray'](e))return undefined;const f=b['toLowerCase']();for(const g of e){if(typeof g?.['object']!=='string'||String(g['object'])['toLowerCase']()!==f)continue;if(g['version']!==undefined&&g['version']!==null)return String(g['version']);}return undefined;}export async function enrichWorkflowGuidance(a){try{let b;if(a['progressRef']['startsWith']('0x'))b=a['progressRef'];else b=await LocalMark['Instance']()['get_address'](a['progressRef'])??undefined;if(!b)return undefined;const c=async()=>(await batchQueryObjectsByIds([b],a['network'],!![]))[0x0];let d=await c();const e=extractObjectVersionFromTx(a['txResult'],b);for(let w=0x0;e!==undefined&&d&&String(d['version']??'')!==e&&w<0x2;w++){await new Promise(y=>setTimeout(y,0x258));const x=await c();if(x)d=x;}const f=d?.['data']??d;if((d?.['type']??f?.['type'])!=='Progress')return undefined;const g=f['current']??'',h=f['machine'],i=Array['isArray'](f['session'])?f['session']:[],j=(Array['isArray'](f['namedOperator'])?f['namedOperator']['find'](y=>y?.['name']==='')?.['operators']:undefined)??[];if(!h)return undefined;const k=await fetchMachineNodes(h,a['network'],![]);let l,m;try{const y=await batchQueryObjectsByIds([h],a['network'],a['noCache']),z=y[0x0],A=z?.['data']??z,B=A?.['permission'];if(B){const C=await batchQueryObjectsByIds([B],a['network'],a['noCache']),D=C[0x0];l=(D?.['data']??D)?.['description']??undefined,m=await fetchPermissionContext(B,a['network'],a['noCache']);}}catch{}const n=(Array['isArray'](f['namedOperator'])?f['namedOperator']:[])['map'](E=>({'name':String(E?.['name']??''),'operators':(E?.['operators']??[])['map'](F=>String(F))}));let o;f['task']&&(o=await fetchOrderContext(f['task'],a['network'],a['noCache']));const p=o?Array['from'](new Set([o['builder'],...o['agent']])['values']()):j;let q;try{q=await LocalMark['Instance']()['get_address'](a['accountName'])??undefined;}catch{q=undefined;}const r=await makeNameResolver([a['accountName'],...p]),s={'current':g,'nodes':k,'caller':a['accountName'],'callerAddress':q,'orderHolderAddresses':p,'progressNamedOperator':n,'permissionContext':m,'orderContext':o,'permissionDescription':l,'nameResolver':r},t=buildWorkflowGuidance(s);let u;a['operate']?.['forward']&&a['operate']?.['next_node_name']&&(u=buildWorkflowReceipt({...s,'callerName':a['accountName']??b,'forward':a['operate']['forward'],'targetNode':a['operate']['next_node_name'],'op':a['operate']['op'],'session':i}));const v=[u?renderReceiptText(u):undefined,t['options']['length']&&!u?.['next_guidance']?.['options']['length']?renderGuidanceText(t):undefined]['filter'](E=>!!E)['join']('\x0a\x0a');return{'guidance':t,'receipt':u,'text':v};}catch{return undefined;}}export function mergeGuidanceIntoOutput(a,b){if(!b)return a;try{const c=a?.['structuredContent'];if(c&&typeof c==='object'){const d=c['semantic'];if(d&&typeof d==='object'){if(b['guidance'])d['workflow_guidance']=b['guidance'];if(b['receipt'])d['workflow_receipt']=b['receipt'];}}b['text']&&Array['isArray'](a?.['content'])&&a['content'][0x0]?.['text']!==undefined&&(a['content'][0x0]['text']=b['text']+'\x0a\x0a'+a['content'][0x0]['text']);}catch{}return a;}export async function resolveLocalNamesFor(a){const b=new Map();try{const c=[...new Set((a??[])['filter'](e=>typeof e==='string'&&e['startsWith']('0x')))];if(c['length']===0x0)return{'byAddress':b};const d=await GetLocalNamesByAddresses(c);for(const e of d??[]){const f=e?.['account']||e?.['local_mark'];if(f)b['set'](String(e['address'])['toLowerCase'](),f);}}catch{}return{'byAddress':b};}export async function listLocalAccounts(){try{const a=await query_account_list({'suspended':![]});return(a??[])['filter'](b=>b?.['address'])['map'](b=>({'address':String(b['address']),'name':b['name']??undefined}));}catch{return[];}}export function accountCanExecuteForward(a,b,c,d,e){const g=b['toLowerCase']();if(a['namedOperator']!==undefined&&a['namedOperator']!==null){if(a['namedOperator']===''){if(d&&(g===d['builder']['toLowerCase']()||d['agent']['has'](g)))return!![];}else{if(a['namedOperator']['length']>0x0){const h=a['namedOperator'],i=c['find'](j=>String(j?.['name']??'')===h);if(i?.['operators']?.['some'](j=>String(j)['toLowerCase']()===g))return!![];}}}if(a['permissionIndex']!==undefined&&a['permissionIndex']!==null&&e){if(e['admin']['has'](g))return!![];const j=e['table']['get'](g);if(j?.['has'](a['permissionIndex']))return!![];}return![];}export function forwardOperatorKind(a){if(a['namedOperator']==='')return'order_holder';if(typeof a['namedOperator']==='string'&&a['namedOperator']['length']>0x0)return'named_operator';return'permission_index';}export function enumerateActionableForwards(a,b,c,d,e,g){const h=typeof a?.['current']==='string'?a['current']:'',i=new Map();for(const k of Array['isArray'](a?.['session'])?a['session']:[]){const l=String(k?.['next_node']??'');for(const m of Array['isArray'](k?.['forwards'])?k['forwards']:[]){i['set'](l+'|'+String(m?.['forward']??''),{'who':m?.['who']?String(m['who'])['toLowerCase']():null,'accomplished':!!m?.['accomplished']});}}const j=[];for(const n of b){for(const o of n['pairs']){if(o['prev_node']!==h)continue;for(const p of o['forwards']){if(!p['name'])continue;const q=i['get'](n['name']+'|'+p['name']);if(q?.['accomplished'])continue;let r=c['filter'](t=>accountCanExecuteForward(p,t,d,e,g));q?.['who']&&(r=r['filter'](t=>t['toLowerCase']()===q['who'])),j['push']({'next_node':n['name'],'forward':p['name'],'weight':p['weight'],'threshold':o['threshold'],'guard':p['guard'],'operator_kind':forwardOperatorKind(p),'permission_index':p['permissionIndex']??undefined,'named_operator':typeof p['namedOperator']==='string'&&p['namedOperator']['length']>0x0?p['namedOperator']:undefined,'executable_accounts':r['map'](t=>t['toLowerCase']())});}}}return j;}
|
|
1
|
+
import{query_account_list,LocalMark,GetLocalNamesByAddresses}from'@wowok/wowok';import{REPOSITORY_PERMISSIONS,REWARD_PERMISSIONS,MACHINE_PERMISSIONS,PROGRESS_PERMISSIONS,TREASURY_PERMISSIONS,SERVICE_PERMISSIONS,ARBITRATION_PERMISSIONS,DEMAND_PERMISSIONS,CONTACT_PERMISSIONS}from'./permission-ledger.js';import{formatShortAddress}from'../persona/address-format.js';import{recommendedCallForForwardBinding}from'../participation/radar-core.js';import{batchQueryObjectsByIds,fetchMachineNodes,fetchOrderContext,fetchPermissionContext}from'../graph/onchain/sdk-batch.js';const BUILTIN_PERMISSION_MAP=new Map();for(const entry of[...REPOSITORY_PERMISSIONS,...REWARD_PERMISSIONS,...MACHINE_PERMISSIONS,...PROGRESS_PERMISSIONS,...TREASURY_PERMISSIONS,...SERVICE_PERMISSIONS,...ARBITRATION_PERMISSIONS,...DEMAND_PERMISSIONS,...CONTACT_PERMISSIONS]){BUILTIN_PERMISSION_MAP['set'](entry['index'],entry['name']);}export function resolvePermissionRole(a,b){if(a===undefined||a===null)return'unknown\x20role';if(b){const d=/([A-Za-z][A-Za-z0-9_]*)\s*=\s*(\d+)/g;let e;while((e=d['exec'](b))!==null){if(Number(e[0x2])===a)return e[0x1]+'\x20(permission\x20'+a+')';}}const c=BUILTIN_PERMISSION_MAP['get'](a);if(c)return c+'\x20(permission\x20'+a+')';return'permission\x20'+a;}const COMPLETE_RE=/(^|_)(completed?|done|finished|received|delivered|accepted|confirmed|finalized|success|approved)(_|$)/i,REFUND_RE=/(^|_)(cancel(led)?|refund(ed)?|return(ed|_approved)?)(_|$)/i,EXCEPTION_RE=/(^|_)(interrupt(ed)?|exception|dispute(d)?|fail(ed)?|abort(ed)?|reject(ed)?)(_|$)/i;function classifyNode(a){if(COMPLETE_RE['test'](a))return'complete';if(REFUND_RE['test'](a))return'refund';if(EXCEPTION_RE['test'](a))return'exception';return'advance';}function businessMeaning(a,b){switch(b){case'complete':return'Service/deliverable\x20accepted\x20at\x20\x22'+a+'\x22\x20—\x20triggers\x20settlement\x20allocation\x20(funds\x20released\x20to\x20the\x20provider)';case'refund':return'Order\x20cancelled/returned\x20at\x20\x22'+a+'\x22\x20—\x20triggers\x20refund\x20allocation\x20(funds\x20back\x20to\x20the\x20customer)';case'exception':return'Exception\x20path\x20at\x20\x22'+a+'\x22\x20—\x20typically\x20routes\x20to\x20arbitration\x20or\x20partial-refund\x20handling';default:return'Progress\x20to\x20\x22'+a+'\x22';}}function shortAddr(a){if(!a)return undefined;return formatShortAddress(a);}function callerIsOrderHolder(a,b){if(!a||!b?.['length'])return![];const d=a['toLowerCase']();return b['some'](e=>e?.['toLowerCase']()===d);}function resolveOperator(a,b,c,d){const e=recommendedCallForForwardBinding({'permissionIndex':a['permissionIndex'],'namedOperator':a['namedOperator'],'hasGuard':!!a['guard']});if(a['namedOperator']===''){const g=b?.[0x0];return{'kind':'order_holder','role_name':'order\x20holder\x20(customer)','account_name':d?d(g):shortAddr(g),'recommended_call':e};}if(typeof a['namedOperator']==='string'&&a['namedOperator']['length']>0x0)return{'kind':'named_operator','named_operator':a['namedOperator'],'role_name':'named\x20operator\x20\x22'+a['namedOperator']+'\x22','recommended_call':e};if(a['permissionIndex']!==undefined&&a['permissionIndex']!==null)return{'kind':'permission_index','permission_index':a['permissionIndex'],'role_name':resolvePermissionRole(a['permissionIndex'],c),'recommended_call':e};return{'kind':'order_holder','role_name':'unknown\x20operator'};}function gainsRisksFor(a,b,c){if(!c)return{'gains':[],'risks':[]};if(b)switch(a){case'complete':return{'gains':['Flow\x20advances','Settlement\x20triggered\x20(funds\x20released)'],'risks':['Funds\x20released\x20to\x20provider','Refund\x20leverage\x20lost\x20—\x20confirm\x20only\x20if\x20service\x20verified']};case'refund':return{'gains':['Funds\x20returned\x20to\x20you'],'risks':['If\x20service\x20was\x20already\x20rendered,\x20cancellation\x20may\x20be\x20disputed']};case'exception':return{'gains':['Avoids\x20stalemate'],'risks':['May\x20trigger\x20arbitration\x20/\x20reputation\x20impact']};default:return{'gains':['Flow\x20advances'],'risks':[]};}switch(a){case'complete':return{'gains':['Settlement\x20triggered\x20—\x20funds\x20released\x20to\x20provider'],'risks':[]};case'refund':return{'gains':['Clean\x20closure'],'risks':['Lost\x20revenue\x20for\x20this\x20order']};case'exception':return{'gains':['Avoids\x20stalemate'],'risks':['May\x20trigger\x20arbitration\x20/\x20compensation\x20fund']};default:return{'gains':['Flow\x20advances'],'risks':[]};}}function consistencyFor(a,b,c,d,e){let f;if(!e)f=a==='exception'?0x2d:0x32;else b?f=a==='refund'?0x46:a==='complete'?0x37:a==='exception'?0x23:0x32:f=a==='complete'?0x4b:a==='refund'?0x1e:a==='exception'?0x23:0x32;if(e&&c)f+=0x14;if(d)f-=0xa;return Math['max'](0x0,Math['min'](0x64,f));}export function buildWorkflowGuidance(a){const b=[];for(const i of a['nodes']){for(const j of i['pairs']){if(j['prev_node']!==a['current'])continue;for(const k of j['forwards']){if(!k['name'])continue;const l=resolveOperator(k,a['orderHolderAddresses'],a['permissionDescription'],a['nameResolver']),m=callerIsOrderHolder(a['callerAddress']??a['caller'],a['orderHolderAddresses']);let n=![];a['callerAddress']&&(n=accountCanExecuteForward(k,a['callerAddress'],a['progressNamedOperator']??[],a['orderContext'],a['permissionContext']));const p=classifyNode(i['name']),q=!!a['caller'],{gains:r,risks:s}=gainsRisksFor(p,m,q),t=consistencyFor(p,m,n,!!k['guard'],q);b['push']({'next_node':i['name'],'forward':k['name'],'weight':k['weight'],'operator':l,'guard':k['guard'],'business_meaning':businessMeaning(i['name'],p),'gains':r,'risks':s,'consistency':t,'recommended':![]});}}}if(b['length']===0x0)return{'current_node':a['current'],'caller':a['caller'],'options':[],'note':'Node\x20\x22'+a['current']+'\x22\x20has\x20no\x20outgoing\x20forwards\x20—\x20it\x20is\x20a\x20terminal\x20node\x20(or\x20the\x20workflow\x20is\x20stuck).\x20No\x20further\x20progress\x20operation\x20is\x20available\x20here.'};b['sort']((u,v)=>v['consistency']-u['consistency']);const c=b[0x0];b[0x0]={...c,'recommended':!![]};const d=[];for(const u of b){u!==c&&u['consistency']>0x0&&u['forward']!==c['forward']&&d['push']('Choosing\x20\x22'+u['forward']+'\x20→\x20'+u['next_node']+'\x22\x20forfeits\x20the\x20faster/more\x20aligned\x20path\x20\x22'+c['forward']+'\x20→\x20'+c['next_node']+'\x22');}const e=[],g=b['filter'](v=>v['operator']['kind']==='order_holder'&&v['forward']!==c['forward']&&c['forward']!==v['forward']),h=b['filter'](v=>v['operator']['account_name']&&v['operator']['account_name']!==a['caller']);return h['length']>0x0&&!b['some'](v=>v['recommended']&&v['operator']['account_name']===a['caller'])&&e['push']('The\x20recommended\x20action\x20is\x20executed\x20by\x20another\x20account\x20('+h[0x0]['operator']['account_name']+');\x20switch\x20the\x20signing\x20account\x20(env.account)\x20before\x20operating.'),{'current_node':a['current'],'caller':a['caller'],'options':b,'recommendation':{'best':c['forward']+'\x20→\x20'+c['next_node'],'rationale':'Highest\x20consistency\x20('+c['consistency']+'/100)\x20with\x20the\x20caller\x27s\x20interests.\x20Gains:\x20'+(c['gains']['join'](';\x20')||'none')+'.\x20Risks:\x20'+(c['risks']['join'](';\x20')||'none')+'.\x20Operator:\x20'+(c['operator']['role_name']??c['operator']['kind'])+(c['operator']['account_name']?'\x20('+c['operator']['account_name']+')':'')+'.'+(c['guard']?'\x20Guard\x20to\x20satisfy:\x20'+c['guard']+'.':''),'caveat':d['length']?d['join']('.\x20'):undefined},'note':e['length']?e['join']('\x20'):undefined};}export function buildWorkflowReceipt(a){const b=a['current']===a['targetNode'],c={'account':a['callerName'],'action':a['callerName']+'\x20executed\x20'+a['forward']+'\x20(→\x20'+a['targetNode']+')','forward':a['forward'],'target_node':a['targetNode'],'op':a['op'],'migrated':b,'current_node':a['current']};if(a['simulated'])c['simulated']=!![];if(!b){const e=a['nodes']['filter'](j=>j['name']===a['targetNode'])['flatMap'](j=>j['pairs'])['find'](j=>j['prev_node']===a['current']),g=a['session']?.['slice'](-0x1)[0x0],h=g?.['threshold']??e?.['threshold']??0x0,i=g?.['weights']??0x0;if(h>0x0){c['threshold']=h,c['accumulated_weight']=i,c['remaining']=Math['max'](0x0,h-i);const j=new Set((g?.['forwards']??[])['filter'](l=>l?.['accomplished']!==![])['map'](l=>l?.['forward'])['filter'](l=>!!l)),k=[];for(const l of e?.['forwards']??[]){if(!l['name']||j['has'](l['name']))continue;k['push']({'forward':l['name'],'operator':resolveOperator(l,a['orderHolderAddresses'],a['permissionDescription'],a['nameResolver'])});}if(k['length'])c['waiting_on']=k;c['note']='Node\x20did\x20not\x20migrate:\x20threshold\x20'+h+',\x20accumulated\x20weight\x20'+i+',\x20remaining\x20'+Math['max'](0x0,h-i)+'.\x20'+(k['length']?'Waiting\x20for:\x20'+k['map'](m=>m['forward']+'\x20('+(m['operator']['role_name']??m['operator']['kind'])+')')['join'](';\x20'):'All\x20forwards\x20on\x20this\x20pair\x20are\x20accomplished\x20—\x20the\x20node\x20should\x20migrate\x20on\x20the\x20next\x20operation.');}else c['note']='Node\x20did\x20not\x20migrate\x20(threshold\x200)\x20—\x20no\x20further\x20weight\x20cooperation\x20required;\x20verify\x20the\x20operation\x20outcome.';}const d=buildWorkflowGuidance({'current':a['current'],'nodes':a['nodes'],'caller':a['caller'],'callerAddress':a['callerAddress'],'orderHolderAddresses':a['orderHolderAddresses'],'progressNamedOperator':a['progressNamedOperator'],'permissionContext':a['permissionContext'],'orderContext':a['orderContext'],'permissionDescription':a['permissionDescription'],'nameResolver':a['nameResolver']});if(d['options']['length']>0x0)c['next_guidance']=d;return c;}function operatorText(a){const b=[a['role_name']??a['kind']];if(a['account_name'])b['push'](a['account_name']);return b['join']('\x20/\x20');}export function renderGuidanceText(a){const b=['[WORKFLOW\x20GUIDANCE]\x20current\x20node:\x20\x22'+a['current_node']+'\x22'+(a['caller']?'\x20(caller:\x20'+a['caller']+')':'')];if(a['options']['length']===0x0)return b['push']('\x20\x20•\x20'+(a['note']??'No\x20reachable\x20next\x20nodes.')),b['join']('\x0a');for(const c of a['options']){const d=['\x22'+c['forward']+'\x22\x20→\x20\x22'+c['next_node']+'\x22','operator:\x20'+operatorText(c['operator']),'weight:\x20'+c['weight'],'consistency:\x20'+c['consistency']+'/100'+(c['recommended']?'\x20[RECOMMENDED]':'')];if(c['guard'])d['push']('guard:\x20'+c['guard']);d['push']('meaning:\x20'+c['business_meaning']);if(c['gains']['length'])d['push']('gains:\x20'+c['gains']['join'](';\x20'));if(c['risks']['length'])d['push']('risks:\x20'+c['risks']['join'](';\x20'));b['push']('\x20\x20•\x20'+d['join']('\x20|\x20'));}if(a['recommendation']?.['best']){b['push']('\x20\x20RECOMMENDED:\x20'+a['recommendation']['best']+'.\x20'+(a['recommendation']['rationale']??''));if(a['recommendation']['caveat'])b['push']('\x20\x20CAVEAT\x20(opportunity\x20cost):\x20'+a['recommendation']['caveat']);}if(a['note'])b['push']('\x20\x20NOTE:\x20'+a['note']);return b['push']('\x20\x20(AI\x20recommendation\x20only\x20—\x20the\x20account\x20decides;\x20switch\x20env.account\x20if\x20another\x20operator\x20must\x20act.)'),b['join']('\x0a');}export function renderReceiptText(a){const b=['[WORKFLOW\x20RECEIPT]\x20'+a['action']];b['push']('\x20\x20•\x20node\x20migrated:\x20'+(a['migrated']?'yes\x20→\x20current:\x20\x22'+a['current_node']+'\x22':'no\x20→\x20current:\x20\x22'+a['current_node']+'\x22'));a['simulated']&&b['push']('\x20\x20•\x20simulated\x20(dry-run):\x20this\x20migration\x20comes\x20from\x20the\x20call\x27s\x20own\x20events\x20—\x20state\x20NOT\x20committed\x20on-chain');if(!a['migrated']){a['threshold']!==undefined&&a['threshold']>0x0&&(b['push']('\x20\x20•\x20threshold:\x20'+a['threshold']+'\x20|\x20accumulated\x20weight:\x20'+(a['accumulated_weight']??0x0)+'\x20|\x20remaining:\x20'+(a['remaining']??0x0)),a['waiting_on']?.['length']&&b['push']('\x20\x20•\x20waiting\x20on:\x20'+a['waiting_on']['map'](c=>'\x22'+c['forward']+'\x22\x20('+operatorText(c['operator'])+')')['join'](';\x20')));if(a['note'])b['push']('\x20\x20•\x20note:\x20'+a['note']);}return a['next_guidance']&&a['next_guidance']['options']['length']>0x0&&b['push'](renderGuidanceText(a['next_guidance'])),b['join']('\x0a');}async function makeNameResolver(a){const b=[...new Set(a['filter'](d=>!!d))],c=new Map();if(b['length'])try{const d=await GetLocalNamesByAddresses(b);for(const e of d){const f=e?.['account']??e?.['local_mark'];if(f)c['set'](e['address']['toLowerCase'](),f);}}catch{}return g=>{if(!g)return undefined;const h=c['get'](g['toLowerCase']());return h??shortAddr(g);};}export function extractObjectVersionFromTx(a,b){if(!a||typeof a!=='object')return undefined;const d=a,e=d['effects']?.['objectChanges']??d['objectChanges'];if(!Array['isArray'](e))return undefined;const f=b['toLowerCase']();for(const g of e){if(typeof g?.['object']!=='string'||String(g['object'])['toLowerCase']()!==f)continue;if(g['version']!==undefined&&g['version']!==null)return String(g['version']);}return undefined;}export function extractProgressEventNodeFromTx(a,b){if(!a||typeof a!=='object'||!b)return undefined;const c=a,d=c['events']??c['effects']?.['events'];if(!Array['isArray'](d))return undefined;const e=b['toLowerCase']();for(const f of d){const g=typeof f?.['node']==='string'?f['node']:undefined;if(!g)continue;const h=typeof f?.['object']==='string'?f['object']['trim']()['toLowerCase']():'';if(h===e||h['startsWith'](e+'\x20')||h['startsWith'](e+'('))return g;}return undefined;}export async function enrichWorkflowGuidance(a){try{let b;if(a['progressRef']['startsWith']('0x'))b=a['progressRef'];else b=await LocalMark['Instance']()['get_address'](a['progressRef'])??undefined;if(!b)return undefined;const c=async()=>(await batchQueryObjectsByIds([b],a['network'],!![]))[0x0];let d=await c();const e=extractObjectVersionFromTx(a['txResult'],b);for(let z=0x0;e!==undefined&&d&&String(d['version']??'')!==e&&z<0x2;z++){await new Promise(B=>setTimeout(B,0x258));const A=await c();if(A)d=A;}const f=d?.['data']??d;if((d?.['type']??f?.['type'])!=='Progress')return undefined;let g=f['current']??'';const h=extractProgressEventNodeFromTx(a['txResult'],b),i=h!==undefined&&g!==h;if(i)g=h;const j=i&&a['dryRun']===!![],k=f['machine'],l=Array['isArray'](f['session'])?f['session']:[],m=(Array['isArray'](f['namedOperator'])?f['namedOperator']['find'](B=>B?.['name']==='')?.['operators']:undefined)??[];if(!k)return undefined;const n=await fetchMachineNodes(k,a['network'],![]);let o,p;try{const B=await batchQueryObjectsByIds([k],a['network'],a['noCache']),C=B[0x0],D=C?.['data']??C,E=D?.['permission'];if(E){const F=await batchQueryObjectsByIds([E],a['network'],a['noCache']),G=F[0x0];o=(G?.['data']??G)?.['description']??undefined,p=await fetchPermissionContext(E,a['network'],a['noCache']);}}catch{}const q=(Array['isArray'](f['namedOperator'])?f['namedOperator']:[])['map'](H=>({'name':String(H?.['name']??''),'operators':(H?.['operators']??[])['map'](I=>String(I))}));let r;f['task']&&(r=await fetchOrderContext(f['task'],a['network'],a['noCache']));const s=r?Array['from'](new Set([r['builder'],...r['agent']])['values']()):m;let t;try{t=await LocalMark['Instance']()['get_address'](a['accountName'])??undefined;}catch{t=undefined;}const u=await makeNameResolver([a['accountName'],...s]),v={'current':g,'nodes':n,'caller':a['accountName'],'callerAddress':t,'orderHolderAddresses':s,'progressNamedOperator':q,'permissionContext':p,'orderContext':r,'permissionDescription':o,'nameResolver':u},w=buildWorkflowGuidance(v);let x;a['operate']?.['forward']&&a['operate']?.['next_node_name']&&(x=buildWorkflowReceipt({...v,'callerName':a['accountName']??b,'forward':a['operate']['forward'],'targetNode':a['operate']['next_node_name'],'op':a['operate']['op'],'session':l,'simulated':j}));const y=[x?renderReceiptText(x):undefined,w['options']['length']&&!x?.['next_guidance']?.['options']['length']?renderGuidanceText(w):undefined]['filter'](H=>!!H)['join']('\x0a\x0a');return{'guidance':w,'receipt':x,'text':y};}catch{return undefined;}}export function mergeGuidanceIntoOutput(a,b){if(!b)return a;try{const c=a?.['structuredContent'];if(c&&typeof c==='object'){const d=c['semantic'];if(d&&typeof d==='object'){if(b['guidance'])d['workflow_guidance']=b['guidance'];if(b['receipt'])d['workflow_receipt']=b['receipt'];}}b['text']&&Array['isArray'](a?.['content'])&&a['content'][0x0]?.['text']!==undefined&&(a['content'][0x0]['text']=b['text']+'\x0a\x0a'+a['content'][0x0]['text']);}catch{}return a;}export async function resolveLocalNamesFor(a){const b=new Map();try{const c=[...new Set((a??[])['filter'](e=>typeof e==='string'&&e['startsWith']('0x')))];if(c['length']===0x0)return{'byAddress':b};const d=await GetLocalNamesByAddresses(c);for(const e of d??[]){const f=e?.['account']||e?.['local_mark'];if(f)b['set'](String(e['address'])['toLowerCase'](),f);}}catch{}return{'byAddress':b};}export async function listLocalAccounts(){try{const a=await query_account_list({'suspended':![]});return(a??[])['filter'](b=>b?.['address'])['map'](b=>({'address':String(b['address']),'name':b['name']??undefined}));}catch{return[];}}export function accountCanExecuteForward(a,b,c,d,e){const g=b['toLowerCase']();if(a['namedOperator']!==undefined&&a['namedOperator']!==null){if(a['namedOperator']===''){if(d&&(g===d['builder']['toLowerCase']()||d['agent']['has'](g)))return!![];}else{if(a['namedOperator']['length']>0x0){const h=a['namedOperator'],i=c['find'](j=>String(j?.['name']??'')===h);if(i?.['operators']?.['some'](j=>String(j)['toLowerCase']()===g))return!![];}}}if(a['permissionIndex']!==undefined&&a['permissionIndex']!==null&&e){if(e['admin']['has'](g))return!![];const j=e['table']['get'](g);if(j?.['has'](a['permissionIndex']))return!![];}return![];}export function forwardOperatorKind(a){if(a['namedOperator']==='')return'order_holder';if(typeof a['namedOperator']==='string'&&a['namedOperator']['length']>0x0)return'named_operator';return'permission_index';}export function enumerateActionableForwards(a,b,c,d,e,g){const h=typeof a?.['current']==='string'?a['current']:'',i=new Map();for(const k of Array['isArray'](a?.['session'])?a['session']:[]){const l=String(k?.['next_node']??'');for(const m of Array['isArray'](k?.['forwards'])?k['forwards']:[]){i['set'](l+'|'+String(m?.['forward']??''),{'who':m?.['who']?String(m['who'])['toLowerCase']():null,'accomplished':!!m?.['accomplished']});}}const j=[];for(const n of b){for(const o of n['pairs']){if(o['prev_node']!==h)continue;for(const p of o['forwards']){if(!p['name'])continue;const q=i['get'](n['name']+'|'+p['name']);if(q?.['accomplished'])continue;let r=c['filter'](t=>accountCanExecuteForward(p,t,d,e,g));q?.['who']&&(r=r['filter'](t=>t['toLowerCase']()===q['who'])),j['push']({'next_node':n['name'],'forward':p['name'],'weight':p['weight'],'threshold':o['threshold'],'guard':p['guard'],'operator_kind':forwardOperatorKind(p),'permission_index':p['permissionIndex']??undefined,'named_operator':typeof p['namedOperator']==='string'&&p['namedOperator']['length']>0x0?p['namedOperator']:undefined,'executable_accounts':r['map'](t=>t['toLowerCase']())});}}}return j;}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{objectTypeFromAddress,query_local_mark_list,query_table}from'@wowok/wowok';import{ObjectType}from'@wowok/wowok';import{batchFetchEntityLinker,batchFetchEntityRegistrar,batchFetchEntityContact,batchFetchEntityPermission,batchFetchObjectLinkerCore,batchFetchObjectLinkerTx,batchQueryObjectsByIds}from'../graph/onchain/sdk-batch.js';import{listLocalAccounts,resolveLocalNamesFor}from'./workflow-guidance.js';import{fetchMachineNodes,buildMachineGraph}from'../playbooks/service-build/machine-nodes.js';const AGG_TTL_MS=0x1d4c0,AGG_CACHE_MAX=0x8,aggCache=new Map(),aggInflight=new Map(),CLASSIFIED_TYPES=new Set([ObjectType['Permission'],ObjectType['Service'],ObjectType['Machine'],ObjectType['Treasury'],ObjectType['Repository'],ObjectType['Reward'],ObjectType['Demand'],ObjectType['Arbitration'],ObjectType['Arb'],ObjectType['Contact'],ObjectType['Order'],ObjectType['Progress']]);function sortItems(a){return a['sort']((c,d)=>(d['time']??0x0)-(c['time']??0x0)||c['object']['localeCompare'](d['object']));}export async function buildWorkspaceLists(a){const b=a['network'],c=a['account']?.['trim']()['toLowerCase']()||undefined,d=a['no_cache']===!![],e=(b??'')+'|'+(c??'');if(!d){const g=aggCache['get'](e);if(g&&Date['now']()-g['at']<AGG_TTL_MS)return{...g['value'],'cached':!![]};const h=aggInflight['get'](e);if(h)return h;}const f=((async()=>{const i=c?[{'address':c,'name':undefined}]:await listLocalAccounts(),j={'action':'workspace_lists','network':b,'updated_at_ms':Date['now'](),'cached':![],'treasuries':[],'repositories':[],'contacts':[],'machines':[],'rewards':[],'payments':[],'others':[],'counts':{'treasuries':0x0,'repositories':0x0,'contacts':0x0,'machines':0x0,'rewards':0x0,'payments':0x0,'others':0x0},'note':i['length']===0x0?'No\x20local\x20accounts\x20found\x20—\x20create\x20or\x20import\x20an\x20account\x20first.':undefined};if(i['length']===0x0)return aggCache['set'](e,{'at':Date['now'](),'value':j}),j;const l=i['map'](a1=>String(a1['address'])['toLowerCase']()),[p,q,s]=await Promise['all']([batchFetchEntityPermission(l,b,d)['catch'](()=>undefined),batchFetchEntityContact(l,b,d)['catch'](()=>undefined),batchFetchObjectLinkerTx(l,b,d)['catch'](()=>undefined)]),u=l['map'](a1=>p?.['get'](a1)),v=l['map'](a1=>q?.['get'](a1)),w=l['map'](a1=>s?.['get'](a1)),x=[],y=new Set();for(const a1 of u){for(const a2 of a1?.['items']??[]){!y['has'](a2['permission'])&&(y['add'](a2['permission']),x['push'](a2['permission']));}}const z=await batchFetchObjectLinkerCore(x,b,d)['catch'](()=>undefined),A=x['map'](a3=>z?.['get'](a3)),B={'treasuries':new Map(),'repositories':new Map(),'contacts':new Map(),'machines':new Map(),'rewards':new Map(),'payments':new Map()},C=(a3,a4,a5)=>{const a6=a4['toLowerCase'](),a7=a3['get'](a6);if(a7===undefined||(a5??0x0)>a7)a3['set'](a6,a5??0x0);};A['forEach'](a3=>{for(const a4 of a3?.['items']??[]){const a5=objectTypeFromAddress(a4['who']);if(a5===ObjectType['Treasury'])C(B['treasuries'],a4['who'],a4['time']);else{if(a5===ObjectType['Repository'])C(B['repositories'],a4['who'],a4['time']);else{if(a5===ObjectType['Machine'])C(B['machines'],a4['who'],a4['time']);else{if(a5===ObjectType['Reward'])C(B['rewards'],a4['who'],a4['time']);else{if(a5===ObjectType['Contact'])C(B['contacts'],a4['who'],a4['time']);}}}}}});for(const a3 of v){for(const a4 of a3?.['items']??[])C(B['contacts'],a4['contact'],a4['time']);}const D=new Map();for(const a5 of w){for(const a6 of a5?.['items']??[]){const a7=objectTypeFromAddress(a6['who']);if(a7&&CLASSIFIED_TYPES['has'](a7))continue;if(a7===ObjectType['Payment']){C(B['payments'],a6['who'],a6['time']);continue;}C(D,a6['who'],a6['time']);}}const E=[...B['treasuries']['keys'](),...B['repositories']['keys'](),...B['contacts']['keys'](),...B['machines']['keys'](),...B['rewards']['keys'](),...B['payments']['keys'](),...D['keys']()],F=a8=>a8['startsWith']('0x00'),G=[],H=[];for(const a8 of E){if(F(a8))H['push'](a8);else G['push'](a8);}const I=await resolveLocalNamesFor(E);if(a['light']){const a9=ab=>sortItems([...ab['entries']()]['map'](([ac,ad])=>({'object':ac,'object_type':objectTypeFromAddress(ac)??null,'name':I['byAddress']['get'](ac),'time':ad||undefined}))),aa={'treasuries':B['treasuries']['size'],'repositories':B['repositories']['size'],'contacts':B['contacts']['size'],'machines':B['machines']['size'],'rewards':B['rewards']['size'],'payments':B['payments']['size'],'others':D['size']};return{'action':'workspace_lists','network':b,'updated_at_ms':Date['now'](),'cached':![],'treasuries':a9(B['treasuries']),'repositories':a9(B['repositories']),'contacts':a9(B['contacts']),'machines':a9(B['machines']),'rewards':a9(B['rewards']),'payments':a9(B['payments']),'others':a9(D),'counts':aa,'note':i['length']===0x0?'No\x20local\x20accounts\x20found\x20—\x20create\x20or\x20import\x20an\x20account\x20first.':undefined};}const J=new Map(),K=new Map(),L=new Map(),M=new Map(),N=new Map(),O=new Map(),P=new Map(),Q=new Map();let R=![];try{const [ab,ac,ad,ae]=await Promise['all']([G['length']>0x0?batchQueryObjectsByIds(G,b,d)['then'](as=>({'objects':as})):Promise['resolve']({'objects':[]}),batchFetchEntityRegistrar(H,b,d),query_local_mark_list(undefined),listLocalAccounts()]),af=new Set((ae??[])['map'](as=>String(as?.['address']??'')['toLowerCase']())),ag=new Set((ab?.['objects']??[])['map'](as=>String(as?.['object']??as?.['address']??'')['toLowerCase']())['filter'](Boolean));for(const [as,at]of ac){ag['add'](as);const au=at?.['description']??at?.['info']?.['description'];if(typeof au==='string'&&au['trim']())J['set'](as,au['trim']());}if(ag['size']>0x0){const av=aw=>{for(const ax of[...aw['keys']()])if(!ag['has'](ax))aw['delete'](ax);};av(B['treasuries']),av(B['repositories']),av(B['contacts']),av(B['machines']),av(B['rewards']),av(B['payments']),av(D);}const ah=new Set([...B['treasuries']['keys'](),...B['repositories']['keys'](),...B['contacts']['keys'](),...B['machines']['keys'](),...B['rewards']['keys'](),...B['payments']['keys'](),...D['keys']()]),ai=((async()=>{try{const aw=await batchFetchEntityLinker([...ah],b,d);R=!![];for(const [ax,ay]of aw){const az=Array['isArray'](ay?.['votes'])?ay['votes']:[];Q['set'](ax,{'like':az['filter'](aA=>aA&&aA['like'])['length'],'dislike':az['filter'](aA=>aA&&aA['dislike'])['length'],'favor':az['filter'](aA=>aA&&aA['favor'])['length'],...az['length']>0x0?{'votes':az['map'](aA=>({'who':aA?.['who']??null,'like':!!aA?.['like'],'dislike':!!aA?.['dislike'],'favor':!!aA?.['favor']}))}:{}});}}catch{}})());for(const aw of ab?.['objects']??[]){const ax=String(aw?.['object']??aw?.['address']??'')['toLowerCase'](),ay=aw?.['description']??aw?.['data']?.['description'];ax&&typeof ay==='string'&&ay['trim']()&&J['set'](ax,ay['trim']());if(ax&&B['contacts']['has'](ax)){const az=Array['isArray'](aw?.['ims'])?aw['ims']:[],aA=typeof aw?.['location']==='string'?aw['location']['trim']():'';L['set'](ax,{...aA?{'location':aA}:{},'members_total':az['length'],'members_mine':az['filter'](aB=>af['has'](String(aB?.['at']??'')['toLowerCase']()))['length']});}if(ax&&B['rewards']['has'](ax)){const aB=/<([0-9a-zA-Z_:]+)>\s*$/['exec'](String(aw?.['type_raw']??'')),aC=Array['isArray'](aw?.['guards'])?aw['guards']:[],aD=Number(aw?.['record_count']);O['set'](ax,{...aB?{'token':aB[0x1]['split']('::')['pop']()}:{},'guards_total':aC['length'],...Number['isFinite'](aD)?{'claimers':aD}:{},...aw?.['balance']!=null?{'balance_total':String(aw['balance'])}:{},...aw?.['type_raw']!=null?{'type_raw':String(aw['type_raw'])}:{}});}if(ax&&B['treasuries']['has'](ax)){const aE=/<([0-9a-zA-Z_:]+)>\s*$/['exec'](String(aw?.['type_raw']??'')),aF=aG=>aG===null||aG===undefined||aG===''?undefined:String(aG);O['set'](ax,{...aE?{'token':aE[0x1]['split']('::')['pop']()}:{},...aw?.['balance']!=null?{'balance_total':String(aw['balance'])}:{},...aw?.['type_raw']!=null?{'type_raw':String(aw['type_raw'])}:{},...aw?.['inflow']!=null?{'inflow':aF(aw['inflow'])}:{},...aw?.['outflow']!=null?{'outflow':aF(aw['outflow'])}:{}});}if(ax&&B['repositories']['has'](ax)){const aG=Number(aw?.['data_count']),aH=Array['isArray'](aw?.['policies'])?aw['policies']:[],aI=Array['isArray'](aw?.['rewards'])?aw['rewards']:[];M['set'](ax,{...Number['isFinite'](aG)?{'records_total':aG}:{},'policies_total':aH['length'],'rewards_total':aI['length']});}ax&&B['machines']['has'](ax)&&(aw?.['bPublished']!=null||aw?.['bPaused']!=null||aw?.['node_count']!=null)&&N['set'](ax,{'status':aw['bPublished']===!![]?aw['bPaused']===!![]?'PAUSED':'LIVE':'UNPUBLISHED',...Number['isFinite'](Number(aw?.['node_count']))?{'nodes':Number(aw['node_count'])}:{}});if(ax&&B['payments']['has'](ax)){const aJ=Array['isArray'](aw?.['record'])?aw['record']:[];let aK=BigInt(0x0);if(c)for(const aN of aJ){if(String(aN['recipient']??'')['toLowerCase']()===c)aK+=BigInt(aN['amount']??0x0);}const aL=!!c&&String(aw?.['signer']??'')['toLowerCase']()===c,aM=/<([0-9a-zA-Z_:]+)>\s*$/['exec'](String(aw?.['type_raw']??''));P['set'](ax,{'payment_amount':String(aw?.['amount']??'0'),...c&&aK>0x0?{'payment_incoming':String(aK)}:{},...c?{'direction':aK>0x0?'INCOMING':aL?'OUTGOING':'RELATED'}:{},...aM?{'token':aM[0x1]['split']('::')['pop']()}:{}});}}for(const aO of ad??[]){const aP=String(aO?.['address']??'')['toLowerCase']();aP&&Array['isArray'](aO?.['tags'])&&aO['tags']['length']>0x0&&K['set'](aP,aO['tags']['map'](String));}const aj=[...L['keys'](),...M['keys'](),...[...O['keys']()]['filter'](aQ=>B['treasuries']['has'](aQ)||B['rewards']['has'](aQ))],[ak,al]=await Promise['all']([batchFetchObjectLinkerCore(aj,b,d)['catch'](()=>undefined),batchFetchObjectLinkerTx(aj,b,d)['catch'](()=>undefined)]);for(const aQ of aj){const aR=ak?.['get'](aQ),aS=al?.['get'](aQ);if(!aR||!aS)continue;const aT=new Set();let aU=0x0;for(const [aW,aX]of[['object_linker_core',aR['items']],['object_linker_tx',aS['items']]]){for(const aY of aX){const aZ=String(aY?.['who']??'')['toLowerCase']();if(!aZ||aZ==='0x0')continue;if(objectTypeFromAddress(aZ)===undefined)continue;const b0=aW+':'+aZ;if(aT['has'](b0))continue;aT['add'](b0),aU++;}}const aV=L['get'](aQ)??M['get'](aQ)??(B['treasuries']['has'](aQ)||B['rewards']['has'](aQ)?O['get'](aQ):undefined);if(aV)aV['related_objects']=aU;}const am=[...B['machines']['keys']()],an=await batchFetchObjectLinkerTx(am,b,d)['catch'](()=>undefined),ao=Promise['all'](am['map'](async b1=>{try{const [b2,b3]=await Promise['all']([fetchMachineNodes(b1,b)['catch'](()=>undefined),Promise['resolve'](an?.['get'](b1))]);if(!N['has'](b1))N['set'](b1,{});const b4=N['get'](b1);if(b2&&b2['length']>0x0){const b5=buildMachineGraph(b2);!Number['isFinite'](Number(b4['nodes']))&&(b4['nodes']=b5['nodes']['filter'](b6=>!b6['is_start']&&b6['name']!=='')['length']),b4['edges']=b5['edges']['length'];}else Number(b4['nodes'])===0x0&&(b4['edges']=0x0);if(b3){const b6=new Set();let b7=0x0,b8=0x0;for(const b9 of b3['items']??[]){const ba=String(b9?.['who']??'')['toLowerCase']();if(!ba||ba==='0x0'||b6['has'](ba))continue;b6['add'](ba);if(objectTypeFromAddress(ba)===undefined)continue;b7++;if(objectTypeFromAddress(ba)===ObjectType['Progress'])b8++;}b4['related_objects']=b7,b4['progresses']=b8;}}catch{}})),ap=0x12c,aq=0xc8,ar=Promise['all']([...M['keys']()]['map'](async b1=>{try{if(M['get'](b1)?.['records_total']!==undefined)return;let b2=undefined,b3=0x0;for(;;){const b5=await query_table({'parent':b1,'cursor':b2,'limit':aq,'no_cache':d,'network':b});b3+=Array['isArray'](b5?.['items'])?b5['items']['length']:0x0;if(!b5?.['hasNextPage']||!b5?.['nextCursor']||b3>=ap)break;b2=String(b5['nextCursor']);}const b4=M['get'](b1);if(b4)b4['records_total']=Math['min'](b3,ap);}catch(b6){if(/query\.parent/i['test'](String(b6?.['message']??b6))){const b7=M['get'](b1);if(b7)b7['records_total']=0x0;}}}));await Promise['all']([ai,ao,ar]);}catch{}const S=b1=>sortItems([...b1['entries']()]['map'](([b2,b3])=>({'object':b2,'object_type':objectTypeFromAddress(b2)??null,'name':I['byAddress']['get'](b2),'time':b3||undefined,'description':J['get'](b2),'tags':K['get'](b2)}))),T=b1=>sortItems([...b1['entries']()]['map'](([b2,b3])=>({'object':b2,'object_type':objectTypeFromAddress(b2)??null,'name':I['byAddress']['get'](b2),'time':b3||undefined,'description':J['get'](b2),'tags':K['get'](b2),...L['get'](b2)??{}}))),U=b1=>sortItems([...b1['entries']()]['map'](([b2,b3])=>({'object':b2,'object_type':objectTypeFromAddress(b2)??null,'name':I['byAddress']['get'](b2),'time':b3||undefined,'description':J['get'](b2),'tags':K['get'](b2),...O['get'](b2)??{}}))),V=b1=>sortItems([...b1['entries']()]['map'](([b2,b3])=>({'object':b2,'object_type':objectTypeFromAddress(b2)??null,'name':I['byAddress']['get'](b2),'time':b3||undefined,'description':J['get'](b2),'tags':K['get'](b2),...O['get'](b2)??{}}))),W=b1=>sortItems([...b1['entries']()]['map'](([b2,b3])=>({'object':b2,'object_type':objectTypeFromAddress(b2)??null,'name':I['byAddress']['get'](b2),'time':b3||undefined,'description':J['get'](b2),'tags':K['get'](b2),...M['get'](b2)??{}}))),X=b1=>sortItems([...b1['entries']()]['map'](([b2,b3])=>({'object':b2,'object_type':objectTypeFromAddress(b2)??null,'name':I['byAddress']['get'](b2),'time':b3||undefined,'description':J['get'](b2),'tags':K['get'](b2),...N['get'](b2)??{}}))),Y=b1=>sortItems([...b1['entries']()]['map'](([b2,b3])=>({'object':b2,'object_type':objectTypeFromAddress(b2)??null,'name':I['byAddress']['get'](b2),'time':b3||undefined,'description':J['get'](b2),'tags':K['get'](b2),...P['get'](b2)??{}}))),Z={'action':'workspace_lists','network':b,'updated_at_ms':Date['now'](),'cached':![],'treasuries':V(B['treasuries']),'repositories':W(B['repositories']),'contacts':T(B['contacts']),'machines':X(B['machines']),'rewards':U(B['rewards']),'payments':Y(B['payments']),'others':S(D),'counts':{'treasuries':B['treasuries']['size'],'repositories':B['repositories']['size'],'contacts':B['contacts']['size'],'machines':B['machines']['size'],'rewards':B['rewards']['size'],'payments':B['payments']['size'],'others':D['size']}},a0={'like':0x0,'dislike':0x0,'favor':0x0};for(const b1 of[Z['treasuries'],Z['repositories'],Z['contacts'],Z['machines'],Z['rewards'],Z['payments'],Z['others']]){for(const b2 of b1){const b3=Q['get'](b2['object']);if(b3)b2['rep']=b3;else{if(R)b2['rep']=a0;}}}aggCache['set'](e,{'at':Date['now'](),'value':Z});if(aggCache['size']>AGG_CACHE_MAX){const b4=aggCache['keys']()['next']()['value'];if(b4!==undefined)aggCache['delete'](b4);}return Z;})());if(!d)aggInflight['set'](e,f);try{return await f;}finally{if(!d)aggInflight['delete'](e);}}
|
|
1
|
+
import{objectTypeFromAddress,query_local_mark_list,query_table}from'@wowok/wowok';import{ObjectType}from'@wowok/wowok';import{batchFetchEntityLinker,batchFetchEntityRegistrar,batchFetchEntityContact,batchFetchEntityPermission,batchFetchObjectLinkerCore,batchFetchObjectLinkerTx,batchQueryObjectsByIds}from'../graph/onchain/sdk-batch.js';import{listLocalAccounts,resolveLocalNamesFor}from'./workflow-guidance.js';import{fetchMachineNodes,buildMachineGraph}from'../playbooks/service-build/machine-nodes.js';const AGG_TTL_MS=0x1d4c0,AGG_CACHE_MAX=0x8,aggCache=new Map(),aggInflight=new Map(),CLASSIFIED_TYPES=new Set([ObjectType['Permission'],ObjectType['Service'],ObjectType['Machine'],ObjectType['Treasury'],ObjectType['Repository'],ObjectType['Reward'],ObjectType['Demand'],ObjectType['Arbitration'],ObjectType['Arb'],ObjectType['Contact'],ObjectType['Order'],ObjectType['Progress']]);function sortItems(a){return a['sort']((c,d)=>(d['time']??0x0)-(c['time']??0x0)||c['object']['localeCompare'](d['object']));}export async function buildWorkspaceLists(a){const b=a['network'];let c=a['account']?.['trim']()||undefined;if(c&&!c['startsWith']('0x')){const g=(await listLocalAccounts())['find'](h=>h['name']?.['toLowerCase']()===c['toLowerCase']());if(!g?.['address'])throw new Error('invalid\x20parameter:account\x20\x27'+a['account']+'\x27\x20not\x20found\x20among\x20local\x20accounts\x20—\x20check\x20account_list,\x20or\x20pass\x20the\x20account\x27s\x200x\x20address');c=String(g['address'])['toLowerCase']();}c=c?.['toLowerCase']()||undefined;const d=a['no_cache']===!![],e=(b??'')+'|'+(c??'');if(!d){const h=aggCache['get'](e);if(h&&Date['now']()-h['at']<AGG_TTL_MS)return{...h['value'],'cached':!![]};const i=aggInflight['get'](e);if(i)return i;}const f=((async()=>{const j=c?[{'address':c,'name':undefined}]:await listLocalAccounts(),l={'action':'workspace_lists','network':b,'updated_at_ms':Date['now'](),'cached':![],'treasuries':[],'repositories':[],'contacts':[],'machines':[],'rewards':[],'payments':[],'others':[],'counts':{'treasuries':0x0,'repositories':0x0,'contacts':0x0,'machines':0x0,'rewards':0x0,'payments':0x0,'others':0x0},'note':j['length']===0x0?'No\x20local\x20accounts\x20found\x20—\x20create\x20or\x20import\x20an\x20account\x20first.':undefined};if(j['length']===0x0)return aggCache['set'](e,{'at':Date['now'](),'value':l}),l;const p=j['map'](a2=>String(a2['address'])['toLowerCase']()),[q,s,u]=await Promise['all']([batchFetchEntityPermission(p,b,d)['catch'](()=>undefined),batchFetchEntityContact(p,b,d)['catch'](()=>undefined),batchFetchObjectLinkerTx(p,b,d)['catch'](()=>undefined)]),v=p['map'](a2=>q?.['get'](a2)),w=p['map'](a2=>s?.['get'](a2)),x=p['map'](a2=>u?.['get'](a2)),y=[],z=new Set();for(const a2 of v){for(const a3 of a2?.['items']??[]){!z['has'](a3['permission'])&&(z['add'](a3['permission']),y['push'](a3['permission']));}}const A=await batchFetchObjectLinkerCore(y,b,d)['catch'](()=>undefined),B=y['map'](a4=>A?.['get'](a4)),C={'treasuries':new Map(),'repositories':new Map(),'contacts':new Map(),'machines':new Map(),'rewards':new Map(),'payments':new Map()},D=(a4,a5,a6)=>{const a7=a5['toLowerCase'](),a8=a4['get'](a7);if(a8===undefined||(a6??0x0)>a8)a4['set'](a7,a6??0x0);};B['forEach'](a4=>{for(const a5 of a4?.['items']??[]){const a6=objectTypeFromAddress(a5['who']);if(a6===ObjectType['Treasury'])D(C['treasuries'],a5['who'],a5['time']);else{if(a6===ObjectType['Repository'])D(C['repositories'],a5['who'],a5['time']);else{if(a6===ObjectType['Machine'])D(C['machines'],a5['who'],a5['time']);else{if(a6===ObjectType['Reward'])D(C['rewards'],a5['who'],a5['time']);else{if(a6===ObjectType['Contact'])D(C['contacts'],a5['who'],a5['time']);}}}}}});for(const a4 of w){for(const a5 of a4?.['items']??[])D(C['contacts'],a5['contact'],a5['time']);}const E=new Map();for(const a6 of x){for(const a7 of a6?.['items']??[]){const a8=objectTypeFromAddress(a7['who']);if(a8&&CLASSIFIED_TYPES['has'](a8))continue;if(a8===ObjectType['Payment']){D(C['payments'],a7['who'],a7['time']);continue;}D(E,a7['who'],a7['time']);}}const F=[...C['treasuries']['keys'](),...C['repositories']['keys'](),...C['contacts']['keys'](),...C['machines']['keys'](),...C['rewards']['keys'](),...C['payments']['keys'](),...E['keys']()],G=a9=>a9['startsWith']('0x00'),H=[],I=[];for(const a9 of F){if(G(a9))I['push'](a9);else H['push'](a9);}const J=await resolveLocalNamesFor(F);if(a['light']){const aa=ac=>sortItems([...ac['entries']()]['map'](([ad,ae])=>({'object':ad,'object_type':objectTypeFromAddress(ad)??null,'name':J['byAddress']['get'](ad),'time':ae||undefined}))),ab={'treasuries':C['treasuries']['size'],'repositories':C['repositories']['size'],'contacts':C['contacts']['size'],'machines':C['machines']['size'],'rewards':C['rewards']['size'],'payments':C['payments']['size'],'others':E['size']};return{'action':'workspace_lists','network':b,'updated_at_ms':Date['now'](),'cached':![],'treasuries':aa(C['treasuries']),'repositories':aa(C['repositories']),'contacts':aa(C['contacts']),'machines':aa(C['machines']),'rewards':aa(C['rewards']),'payments':aa(C['payments']),'others':aa(E),'counts':ab,'note':j['length']===0x0?'No\x20local\x20accounts\x20found\x20—\x20create\x20or\x20import\x20an\x20account\x20first.':undefined};}const K=new Map(),L=new Map(),M=new Map(),N=new Map(),O=new Map(),P=new Map(),Q=new Map(),R=new Map();let S=![];try{const [ac,ad,ae,af]=await Promise['all']([H['length']>0x0?batchQueryObjectsByIds(H,b,d)['then'](at=>({'objects':at})):Promise['resolve']({'objects':[]}),batchFetchEntityRegistrar(I,b,d),query_local_mark_list(undefined),listLocalAccounts()]),ag=new Set((af??[])['map'](at=>String(at?.['address']??'')['toLowerCase']())),ah=new Set((ac?.['objects']??[])['map'](at=>String(at?.['object']??at?.['address']??'')['toLowerCase']())['filter'](Boolean));for(const [at,au]of ad){ah['add'](at);const av=au?.['description']??au?.['info']?.['description'];if(typeof av==='string'&&av['trim']())K['set'](at,av['trim']());}if(ah['size']>0x0){const aw=ax=>{for(const ay of[...ax['keys']()])if(!ah['has'](ay))ax['delete'](ay);};aw(C['treasuries']),aw(C['repositories']),aw(C['contacts']),aw(C['machines']),aw(C['rewards']),aw(C['payments']),aw(E);}const ai=new Set([...C['treasuries']['keys'](),...C['repositories']['keys'](),...C['contacts']['keys'](),...C['machines']['keys'](),...C['rewards']['keys'](),...C['payments']['keys'](),...E['keys']()]),aj=((async()=>{try{const ax=await batchFetchEntityLinker([...ai],b,d);S=!![];for(const [ay,az]of ax){const aA=Array['isArray'](az?.['votes'])?az['votes']:[];R['set'](ay,{'like':aA['filter'](aB=>aB&&aB['like'])['length'],'dislike':aA['filter'](aB=>aB&&aB['dislike'])['length'],'favor':aA['filter'](aB=>aB&&aB['favor'])['length'],...aA['length']>0x0?{'votes':aA['map'](aB=>({'who':aB?.['who']??null,'like':!!aB?.['like'],'dislike':!!aB?.['dislike'],'favor':!!aB?.['favor']}))}:{}});}}catch{}})());for(const ax of ac?.['objects']??[]){const ay=String(ax?.['object']??ax?.['address']??'')['toLowerCase'](),az=ax?.['description']??ax?.['data']?.['description'];ay&&typeof az==='string'&&az['trim']()&&K['set'](ay,az['trim']());if(ay&&C['contacts']['has'](ay)){const aA=Array['isArray'](ax?.['ims'])?ax['ims']:[],aB=typeof ax?.['location']==='string'?ax['location']['trim']():'';M['set'](ay,{...aB?{'location':aB}:{},'members_total':aA['length'],'members_mine':aA['filter'](aC=>ag['has'](String(aC?.['at']??'')['toLowerCase']()))['length']});}if(ay&&C['rewards']['has'](ay)){const aC=/<([0-9a-zA-Z_:]+)>\s*$/['exec'](String(ax?.['type_raw']??'')),aD=Array['isArray'](ax?.['guards'])?ax['guards']:[],aE=Number(ax?.['record_count']);P['set'](ay,{...aC?{'token':aC[0x1]['split']('::')['pop']()}:{},'guards_total':aD['length'],...Number['isFinite'](aE)?{'claimers':aE}:{},...ax?.['balance']!=null?{'balance_total':String(ax['balance'])}:{},...ax?.['type_raw']!=null?{'type_raw':String(ax['type_raw'])}:{}});}if(ay&&C['treasuries']['has'](ay)){const aF=/<([0-9a-zA-Z_:]+)>\s*$/['exec'](String(ax?.['type_raw']??'')),aG=aH=>aH===null||aH===undefined||aH===''?undefined:String(aH);P['set'](ay,{...aF?{'token':aF[0x1]['split']('::')['pop']()}:{},...ax?.['balance']!=null?{'balance_total':String(ax['balance'])}:{},...ax?.['type_raw']!=null?{'type_raw':String(ax['type_raw'])}:{},...ax?.['inflow']!=null?{'inflow':aG(ax['inflow'])}:{},...ax?.['outflow']!=null?{'outflow':aG(ax['outflow'])}:{}});}if(ay&&C['repositories']['has'](ay)){const aH=Number(ax?.['data_count']),aI=Array['isArray'](ax?.['policies'])?ax['policies']:[],aJ=Array['isArray'](ax?.['rewards'])?ax['rewards']:[];N['set'](ay,{...Number['isFinite'](aH)?{'records_total':aH}:{},'policies_total':aI['length'],'rewards_total':aJ['length']});}ay&&C['machines']['has'](ay)&&(ax?.['bPublished']!=null||ax?.['bPaused']!=null||ax?.['node_count']!=null)&&O['set'](ay,{'status':ax['bPublished']===!![]?ax['bPaused']===!![]?'PAUSED':'LIVE':'UNPUBLISHED',...Number['isFinite'](Number(ax?.['node_count']))?{'nodes':Number(ax['node_count'])}:{}});if(ay&&C['payments']['has'](ay)){const aK=Array['isArray'](ax?.['record'])?ax['record']:[];let aL=BigInt(0x0);if(c)for(const aO of aK){if(String(aO['recipient']??'')['toLowerCase']()===c)aL+=BigInt(aO['amount']??0x0);}const aM=!!c&&String(ax?.['signer']??'')['toLowerCase']()===c,aN=/<([0-9a-zA-Z_:]+)>\s*$/['exec'](String(ax?.['type_raw']??''));Q['set'](ay,{'payment_amount':String(ax?.['amount']??'0'),...c&&aL>0x0?{'payment_incoming':String(aL)}:{},...c?{'direction':aL>0x0?'INCOMING':aM?'OUTGOING':'RELATED'}:{},...aN?{'token':aN[0x1]['split']('::')['pop']()}:{}});}}for(const aP of ae??[]){const aQ=String(aP?.['address']??'')['toLowerCase']();aQ&&Array['isArray'](aP?.['tags'])&&aP['tags']['length']>0x0&&L['set'](aQ,aP['tags']['map'](String));}const ak=[...M['keys'](),...N['keys'](),...[...P['keys']()]['filter'](aR=>C['treasuries']['has'](aR)||C['rewards']['has'](aR))],[al,am]=await Promise['all']([batchFetchObjectLinkerCore(ak,b,d)['catch'](()=>undefined),batchFetchObjectLinkerTx(ak,b,d)['catch'](()=>undefined)]);for(const aR of ak){const aS=al?.['get'](aR),aT=am?.['get'](aR);if(!aS||!aT)continue;const aU=new Set();let aV=0x0;for(const [aX,aY]of[['object_linker_core',aS['items']],['object_linker_tx',aT['items']]]){for(const aZ of aY){const b0=String(aZ?.['who']??'')['toLowerCase']();if(!b0||b0==='0x0')continue;if(objectTypeFromAddress(b0)===undefined)continue;const b1=aX+':'+b0;if(aU['has'](b1))continue;aU['add'](b1),aV++;}}const aW=M['get'](aR)??N['get'](aR)??(C['treasuries']['has'](aR)||C['rewards']['has'](aR)?P['get'](aR):undefined);if(aW)aW['related_objects']=aV;}const an=[...C['machines']['keys']()],ao=await batchFetchObjectLinkerTx(an,b,d)['catch'](()=>undefined),ap=Promise['all'](an['map'](async b2=>{try{const [b3,b4]=await Promise['all']([fetchMachineNodes(b2,b)['catch'](()=>undefined),Promise['resolve'](ao?.['get'](b2))]);if(!O['has'](b2))O['set'](b2,{});const b5=O['get'](b2);if(b3&&b3['length']>0x0){const b6=buildMachineGraph(b3);!Number['isFinite'](Number(b5['nodes']))&&(b5['nodes']=b6['nodes']['filter'](b7=>!b7['is_start']&&b7['name']!=='')['length']),b5['edges']=b6['edges']['length'];}else Number(b5['nodes'])===0x0&&(b5['edges']=0x0);if(b4){const b7=new Set();let b8=0x0,b9=0x0;for(const ba of b4['items']??[]){const bb=String(ba?.['who']??'')['toLowerCase']();if(!bb||bb==='0x0'||b7['has'](bb))continue;b7['add'](bb);if(objectTypeFromAddress(bb)===undefined)continue;b8++;if(objectTypeFromAddress(bb)===ObjectType['Progress'])b9++;}b5['related_objects']=b8,b5['progresses']=b9;}}catch{}})),aq=0x12c,ar=0xc8,as=Promise['all']([...N['keys']()]['map'](async b2=>{try{if(N['get'](b2)?.['records_total']!==undefined)return;let b3=undefined,b4=0x0;for(;;){const b6=await query_table({'parent':b2,'cursor':b3,'limit':ar,'no_cache':d,'network':b});b4+=Array['isArray'](b6?.['items'])?b6['items']['length']:0x0;if(!b6?.['hasNextPage']||!b6?.['nextCursor']||b4>=aq)break;b3=String(b6['nextCursor']);}const b5=N['get'](b2);if(b5)b5['records_total']=Math['min'](b4,aq);}catch(b7){if(/query\.parent/i['test'](String(b7?.['message']??b7))){const b8=N['get'](b2);if(b8)b8['records_total']=0x0;}}}));await Promise['all']([aj,ap,as]);}catch{}const T=b2=>sortItems([...b2['entries']()]['map'](([b3,b4])=>({'object':b3,'object_type':objectTypeFromAddress(b3)??null,'name':J['byAddress']['get'](b3),'time':b4||undefined,'description':K['get'](b3),'tags':L['get'](b3)}))),U=b2=>sortItems([...b2['entries']()]['map'](([b3,b4])=>({'object':b3,'object_type':objectTypeFromAddress(b3)??null,'name':J['byAddress']['get'](b3),'time':b4||undefined,'description':K['get'](b3),'tags':L['get'](b3),...M['get'](b3)??{}}))),V=b2=>sortItems([...b2['entries']()]['map'](([b3,b4])=>({'object':b3,'object_type':objectTypeFromAddress(b3)??null,'name':J['byAddress']['get'](b3),'time':b4||undefined,'description':K['get'](b3),'tags':L['get'](b3),...P['get'](b3)??{}}))),W=b2=>sortItems([...b2['entries']()]['map'](([b3,b4])=>({'object':b3,'object_type':objectTypeFromAddress(b3)??null,'name':J['byAddress']['get'](b3),'time':b4||undefined,'description':K['get'](b3),'tags':L['get'](b3),...P['get'](b3)??{}}))),X=b2=>sortItems([...b2['entries']()]['map'](([b3,b4])=>({'object':b3,'object_type':objectTypeFromAddress(b3)??null,'name':J['byAddress']['get'](b3),'time':b4||undefined,'description':K['get'](b3),'tags':L['get'](b3),...N['get'](b3)??{}}))),Y=b2=>sortItems([...b2['entries']()]['map'](([b3,b4])=>({'object':b3,'object_type':objectTypeFromAddress(b3)??null,'name':J['byAddress']['get'](b3),'time':b4||undefined,'description':K['get'](b3),'tags':L['get'](b3),...O['get'](b3)??{}}))),Z=b2=>sortItems([...b2['entries']()]['map'](([b3,b4])=>({'object':b3,'object_type':objectTypeFromAddress(b3)??null,'name':J['byAddress']['get'](b3),'time':b4||undefined,'description':K['get'](b3),'tags':L['get'](b3),...Q['get'](b3)??{}}))),a0={'action':'workspace_lists','network':b,'updated_at_ms':Date['now'](),'cached':![],'treasuries':W(C['treasuries']),'repositories':X(C['repositories']),'contacts':U(C['contacts']),'machines':Y(C['machines']),'rewards':V(C['rewards']),'payments':Z(C['payments']),'others':T(E),'counts':{'treasuries':C['treasuries']['size'],'repositories':C['repositories']['size'],'contacts':C['contacts']['size'],'machines':C['machines']['size'],'rewards':C['rewards']['size'],'payments':C['payments']['size'],'others':E['size']}},a1={'like':0x0,'dislike':0x0,'favor':0x0};for(const b2 of[a0['treasuries'],a0['repositories'],a0['contacts'],a0['machines'],a0['rewards'],a0['payments'],a0['others']]){for(const b3 of b2){const b4=R['get'](b3['object']);if(b4)b3['rep']=b4;else{if(S)b3['rep']=a1;}}}aggCache['set'](e,{'at':Date['now'](),'value':a0});if(aggCache['size']>AGG_CACHE_MAX){const b5=aggCache['keys']()['next']()['value'];if(b5!==undefined)aggCache['delete'](b5);}return a0;})());if(!d)aggInflight['set'](e,f);try{return await f;}finally{if(!d)aggInflight['delete'](e);}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{randomUUID}from'node:crypto';import{Config,SQLiteStorage}from'@wowok/wowok/w/local';import{query_events}from'@wowok/wowok';import{monitorEventStore}from'./EventStore.js';import{subscriptionStore}from'./SubscriptionStore.js';import{loadScopeSnapshot,resolveScope}from'./ScopeResolver.js';import{annotateBatch,backfillAnnotations}from'./EventRouter.js';import{bridgeMonitorProblems}from'./ProblemBridge.js';import{bridgeMonitorSuggestions}from'./SuggestionBridge.js';import{EVENT_MODULE_OF,MONITOR_CAPTURE_TYPES,PAYMENT_EVENT_TYPE,normalizeMonitorEvent}from'./normalize.js';import{LOOP_DEFAULTS}from'./types.js';import{goalStore}from'../goal/GoalStore.js';import{runKeeperScan as a209a,realKeeperScanDeps}from'../keeper/KeeperScan.js';import{addProblem,addSuggestion,listProblems,listSuggestions}from'../task/ProcessStore.js';const LEASE_PREFIX='mon_lease:v4:',SEED_PAGE=0x64,SEED_MAX=0x7d0,POLL_BATCH=0x32,MAX_BACKOFF_MS=0x493e0;function netKey(a){return(a||'default')['replace'](/[^a-zA-Z0-9_-]/g,'_');}function leaseKey(a){return''+LEASE_PREFIX+netKey(a);}function realDeps(){return{'store':monitorEventStore,'configStore':subscriptionStore,'storage':new SQLiteStorage(),'resolveScope':(a,b)=>resolveScope(a,b),'loadScope':a=>loadScopeSnapshot(a),'router':{'annotateBatch':annotateBatch,'backfillAnnotations':backfillAnnotations},'queryEvents':a=>query_events({'type':a['type'],'cursor':a['cursor'],'limit':a['limit'],'order':a['order'],'network':a['network']}),'defaultNetwork':()=>Config['Instance']()['network_get'](),'now':()=>Date['now'](),'pid':process['pid'],'bootId':randomUUID(),'logger':a=>console['error']('[monitor]\x20'+a),'openProblems':a=>bridgeMonitorProblems(a,{'getGoal':(b,c)=>goalStore['get'](b,c),'addProblem':addProblem,'listProblems':listProblems,'logger':b=>console['error']('[monitor]\x20'+b)}),'openSuggestions':a=>bridgeMonitorSuggestions(a,{'getGoal':(b,c)=>goalStore['get'](b,c),'addSuggestion':addSuggestion,'listSuggestions':listSuggestions,'logger':b=>console['error']('[monitor]\x20'+b)}),'runKeeperScan':(a,b)=>a209a(a,b,realKeeperScanDeps()),'setTimer':(a,b)=>setTimeout(a,b),'clearTimer':a=>clearTimeout(a)};}function newRuntime(a){return{'network':a,'started':![],'holdsLease':![],'leaseHolder':null,'timer':undefined,'ticking':![],'scope':undefined,'lastScopeRefreshAt':0x0,'pollIntervalMs':LOOP_DEFAULTS['poll_interval_ms'],'lastTickAt':0x0,'lastNewCount':0x0,'lastSummary':undefined,'consecutiveErrors':0x0,'backoffMs':0x0};}export class MonitorLoop{['deps'];['runtimes']=new Map();constructor(a){this['deps']={...realDeps(),...a??{}};}async['start'](a){let b=a&&a['length']>0x0?a:undefined;if(!b)b=[await this['deps']['defaultNetwork']()];for(const c of b){const d=netKey(c);if(this['runtimes']['has'](d)){const f=this['runtimes']['get'](d);if(f['started'])continue;f['started']=!![],this['schedule'](f,0x0);continue;}const e=newRuntime(c);e['started']=!![],this['runtimes']['set'](d,e);try{const g=await this['deps']['loadScope'](c);g&&(e['scope']=g,e['lastScopeRefreshAt']=Number(g['resolved_at'])||0x0);}catch{}this['schedule'](e,0x0);}return b;}async['stop'](a){const b=a?[netKey(a)]:[...this['runtimes']['keys']()];for(const c of b){const d=this['runtimes']['get'](c);if(!d)continue;d['started']=![];d['timer']!==undefined&&(this['deps']['clearTimer'](d['timer']),d['timer']=undefined);if(d['holdsLease']){d['holdsLease']=![];try{await this['deps']['storage']['del'](leaseKey(d['network']));}catch{}}this['runtimes']['delete'](c);}}['status'](a){const b=a?this['runtimes']['get'](netKey(a)):[...this['runtimes']['values']()][0x0];if(!b)return{'running':![],'lease_holder':null,'last_tick_at':0x0,'last_new_count':0x0,'scope_version':0x0,'backoff_ms':0x0};return{'running':b['started']&&b['holdsLease'],'lease_holder':b['leaseHolder']?b['leaseHolder']['pid']+':'+b['leaseHolder']['boot_id']:null,'last_tick_at':b['lastTickAt'],'last_new_count':b['lastNewCount'],'scope_version':b['scope']?.['version']??0x0,'backoff_ms':b['backoffMs'],...b['lastSummary']?{'last_tick':b['lastSummary']}:{}};}['kick'](a){const b=this['runtimes']['get'](netKey(a));if(!b||!b['started']||!b['holdsLease']||b['ticking'])return;if(this['deps']['now']()-b['lastTickAt']<b['pollIntervalMs'])return;void this['tick'](b['network']);}['invalidateScope'](a){const b=this['runtimes']['get'](netKey(a));if(!b)return;b['scope']=undefined,b['lastScopeRefreshAt']=0x0;}async['tick'](a){const b=netKey(a);let c=this['runtimes']['get'](b);!c&&(c=newRuntime(a),this['runtimes']['set'](b,c));if(c['ticking'])return undefined;c['ticking']=!![];const d=this['deps']['now']();try{const f=await this['deps']['configStore']['getConfig'](a),g=Number(f['loop']?.['poll_interval_ms'])||LOOP_DEFAULTS['poll_interval_ms'];c['pollIntervalMs']=g;const h=await this['acquireLease'](c,g);if(!h)return undefined;const {newCount:i,events:j}=await this['capture'](c,f),k=await this['getScope'](c,f);let l=0x0,m=[];if(i>0x0&&j['length']>0x0){const p=this['deps']['router']['annotateBatch'](j,k,f)['filter'](q=>q['rules']['length']>0x0||q['focus_hit']||q['matched_filters']['length']>0x0);p['length']>0x0&&(await this['deps']['store']['saveAnnotations'](a,p),l=p['length'],m=p);}if(m['length']>0x0&&this['deps']['openProblems'])try{await this['deps']['openProblems']({'network':a,'events':j,'annotations':m,'scope':k});}catch(q){this['deps']['logger']('monitor\x20loop:\x20problem\x20bridge\x20error\x20on\x20'+a+':\x20'+String(q?.['message']??q));}if(m['length']>0x0&&this['deps']['openSuggestions'])try{await this['deps']['openSuggestions']({'network':a,'events':j,'annotations':m,'scope':k});}catch(s){this['deps']['logger']('monitor\x20loop:\x20suggestion\x20bridge\x20error\x20on\x20'+a+':\x20'+String(s?.['message']??s));}if(this['deps']['runKeeperScan'])try{await this['deps']['runKeeperScan'](a,k);}catch(t){this['deps']['logger']('monitor\x20loop:\x20keeper\x20scan\x20error\x20on\x20'+a+':\x20'+String(t?.['message']??t));}const n=Number(f['loop']?.['scope_refresh_ms'])||LOOP_DEFAULTS['scope_refresh_ms'];if(this['deps']['now']()-c['lastScopeRefreshAt']>=n){c['lastScopeRefreshAt']=this['deps']['now']();const {snapshot:u,changed:v}=await this['deps']['resolveScope'](a,f);c['scope']=u;if(v){const w=Number(f['loop']?.['backfill_days']??LOOP_DEFAULTS['backfill_days']),x=await this['deps']['router']['backfillAnnotations'](a,this['deps']['store'],u,w,f);this['deps']['logger']('monitor\x20loop:\x20scope\x20v'+u['version']+'\x20on\x20'+a+'\x20changed\x20—\x20backfill\x20rescanned\x20'+x['rescanned']+',\x20updated\x20'+x['updated']);}}c['lastTickAt']=this['deps']['now'](),c['lastNewCount']=i,c['consecutiveErrors']=0x0,c['backoffMs']=0x0;const o={'captured':j['length'],'annotated':l,'duration_ms':this['deps']['now']()-d};return c['lastSummary']=o,o;}catch(y){const z=String(y?.['message']??y);return this['deps']['logger']('monitor\x20loop:\x20tick\x20error\x20on\x20'+a+':\x20'+z),c['consecutiveErrors']+=0x1,c['backoffMs']=Math['min'](c['pollIntervalMs']*0x2**c['consecutiveErrors'],MAX_BACKOFF_MS),undefined;}finally{c['ticking']=![],c['started']&&this['schedule'](c,c['backoffMs']>0x0?c['backoffMs']:c['pollIntervalMs']);}}['schedule'](a,b){if(a['timer']!==undefined)this['deps']['clearTimer'](a['timer']);const c=this['deps']['setTimer'](()=>{a['timer']=undefined,void this['tick'](a['network']);},Math['max'](0x0,b));c?.['unref']?.(),a['timer']=c;}async['acquireLease'](a,b){const c=leaseKey(a['network']),d=this['deps']['now']();let e;try{const i=await this['deps']['storage']['get'](c);e=i?JSON['parse'](i):undefined;}catch{e=undefined;}const f={'pid':this['deps']['pid'],'boot_id':this['deps']['bootId']},g=!!e&&e['boot_id']===f['boot_id']&&e['pid']===f['pid'],h=!e||d-Number(e['heartbeat_at']??0x0)>0x2*b;if(g||h)return await this['deps']['storage']['put'](c,JSON['stringify']({...f,'heartbeat_at':d})),a['holdsLease']=!![],a['leaseHolder']=f,!![];return a['holdsLease']=![],a['leaseHolder']={'pid':e['pid'],'boot_id':e['boot_id']},![];}async['getScope'](a,b){if(!a['scope'])try{const c=await this['deps']['loadScope'](a['network']);c&&(a['scope']=c,a['lastScopeRefreshAt']=Number(c['resolved_at'])||0x0);}catch{}if(!a['scope']){a['lastScopeRefreshAt']=this['deps']['now']();const {snapshot:d,changed:e}=await this['deps']['resolveScope'](a['network'],b);a['scope']=d;if(e){const f=Number(b['loop']?.['backfill_days']??LOOP_DEFAULTS['backfill_days']);await this['deps']['router']['backfillAnnotations'](a['network'],this['deps']['store'],d,f,b);}}return a['scope'];}async['capture'](a,b){const c=a['network'],d=await this['deps']['store']['getCursors'](c);let f=0x0;const g=[],h=[...MONITOR_CAPTURE_TYPES];if(b['events']?.[PAYMENT_EVENT_TYPE]===!![])h['push'](PAYMENT_EVENT_TYPE);for(const i of h){const j=EVENT_MODULE_OF[i];if(!j)continue;try{const k=d['cursors'][i];let l=null;if(!k){let m=null,n=0x0;while(n<SEED_MAX){const o=await this['deps']['queryEvents']({'type':i,'cursor':m,'limit':Math['min'](SEED_PAGE,SEED_MAX-n),'order':'descending','network':c}),p=(o?.['data']??[])['map'](q=>normalizeMonitorEvent(q));if(p['length']===0x0)break;if(l===null)l=p[0x0];n+=p['length'],f+=await this['deps']['store']['insert'](c,j,p),g['push'](...p);if(!o?.['hasNextPage']||!o?.['nextCursor'])break;m=o['nextCursor'];}}else{const q=await this['deps']['queryEvents']({'type':i,'cursor':k,'limit':POLL_BATCH,'order':'ascending','network':c}),r=(q?.['data']??[])['map'](s=>normalizeMonitorEvent(s));f+=await this['deps']['store']['insert'](c,j,r),g['push'](...r);if(r['length']>0x0)l=r[r['length']-0x1];}if(l?.['id']){const s=d['cursors'][i];(!s||BigInt(l['id']['eventSeq'])>BigInt(s['eventSeq']||'0'))&&(d['cursors'][i]={'eventSeq':String(l['id']['eventSeq']),'txDigest':String(l['id']['txDigest'])});}}catch(t){const u=String(t?.['message']??t);this['deps']['logger']('monitor\x20loop:\x20type\x20'+i+'\x20poll\x20error:\x20'+u),/referenced transaction/i['test'](u)&&(delete d['cursors'][i],this['deps']['logger']('monitor\x20loop:\x20type\x20'+i+'\x20cursor\x20invalid\x20—\x20dropped,\x20will\x20re-seed\x20next\x20cycle'));}}return await this['deps']['store']['saveCursors'](c,d['cursors'],this['deps']['now']()),{'newCount':f,'events':g};}}export const monitorLoop=new MonitorLoop();
|
|
1
|
+
import{randomUUID}from'node:crypto';import{Config,SQLiteStorage}from'@wowok/wowok/w/local';import{query_events}from'@wowok/wowok';import{monitorEventStore}from'./EventStore.js';import{subscriptionStore}from'./SubscriptionStore.js';import{loadScopeSnapshot,resolveScope}from'./ScopeResolver.js';import{annotateBatch,backfillAnnotations}from'./EventRouter.js';import{bridgeMonitorProblems}from'./ProblemBridge.js';import{bridgeMonitorSuggestions}from'./SuggestionBridge.js';import{EVENT_MODULE_OF,MONITOR_CAPTURE_TYPES,PAYMENT_EVENT_TYPE,normalizeMonitorEvent}from'./normalize.js';import{LOOP_DEFAULTS}from'./types.js';import{goalStore}from'../goal/GoalStore.js';import{runKeeperScan as a260a,realKeeperScanDeps}from'../keeper/KeeperScan.js';import{addProblem,addSuggestion,listProblems,listSuggestions}from'../task/ProcessStore.js';const LEASE_PREFIX='mon_lease:v4:',SEED_PAGE=0x64,SEED_MAX=0x7d0,POLL_BATCH=0x32,MAX_BACKOFF_MS=0x493e0;function netKey(a){return(a||'default')['replace'](/[^a-zA-Z0-9_-]/g,'_');}function leaseKey(a){return''+LEASE_PREFIX+netKey(a);}function realDeps(){return{'store':monitorEventStore,'configStore':subscriptionStore,'storage':new SQLiteStorage(),'resolveScope':(a,b)=>resolveScope(a,b),'loadScope':a=>loadScopeSnapshot(a),'router':{'annotateBatch':annotateBatch,'backfillAnnotations':backfillAnnotations},'queryEvents':a=>query_events({'type':a['type'],'cursor':a['cursor'],'limit':a['limit'],'order':a['order'],'network':a['network']}),'defaultNetwork':()=>Config['Instance']()['network_get'](),'now':()=>Date['now'](),'pid':process['pid'],'bootId':randomUUID(),'logger':a=>console['error']('[monitor]\x20'+a),'openProblems':a=>bridgeMonitorProblems(a,{'getGoal':(b,c)=>goalStore['get'](b,c),'addProblem':addProblem,'listProblems':listProblems,'logger':b=>console['error']('[monitor]\x20'+b)}),'openSuggestions':a=>bridgeMonitorSuggestions(a,{'getGoal':(b,c)=>goalStore['get'](b,c),'addSuggestion':addSuggestion,'listSuggestions':listSuggestions,'logger':b=>console['error']('[monitor]\x20'+b)}),'runKeeperScan':(a,b)=>a260a(a,b,realKeeperScanDeps()),'setTimer':(a,b)=>setTimeout(a,b),'clearTimer':a=>clearTimeout(a)};}function newRuntime(a){return{'network':a,'started':![],'holdsLease':![],'leaseHolder':null,'timer':undefined,'ticking':![],'scope':undefined,'lastScopeRefreshAt':0x0,'pollIntervalMs':LOOP_DEFAULTS['poll_interval_ms'],'lastTickAt':0x0,'lastNewCount':0x0,'lastSummary':undefined,'consecutiveErrors':0x0,'backoffMs':0x0};}export class MonitorLoop{['deps'];['runtimes']=new Map();constructor(a){this['deps']={...realDeps(),...a??{}};}async['start'](a){let b=a&&a['length']>0x0?a:undefined;if(!b)b=[await this['deps']['defaultNetwork']()];for(const c of b){const d=netKey(c);if(this['runtimes']['has'](d)){const f=this['runtimes']['get'](d);if(f['started'])continue;f['started']=!![],this['schedule'](f,0x0);continue;}const e=newRuntime(c);e['started']=!![],this['runtimes']['set'](d,e);try{const g=await this['deps']['loadScope'](c);g&&(e['scope']=g,e['lastScopeRefreshAt']=Number(g['resolved_at'])||0x0);}catch{}this['schedule'](e,0x0);}return b;}async['stop'](a){const b=a?[netKey(a)]:[...this['runtimes']['keys']()];for(const c of b){const d=this['runtimes']['get'](c);if(!d)continue;d['started']=![];d['timer']!==undefined&&(this['deps']['clearTimer'](d['timer']),d['timer']=undefined);if(d['holdsLease']){d['holdsLease']=![];try{await this['deps']['storage']['del'](leaseKey(d['network']));}catch{}}this['runtimes']['delete'](c);}}['status'](a){const b=a?this['runtimes']['get'](netKey(a)):[...this['runtimes']['values']()][0x0];if(!b)return{'running':![],'lease_holder':null,'last_tick_at':0x0,'last_new_count':0x0,'scope_version':0x0,'backoff_ms':0x0};return{'running':b['started']&&b['holdsLease'],'lease_holder':b['leaseHolder']?b['leaseHolder']['pid']+':'+b['leaseHolder']['boot_id']:null,'last_tick_at':b['lastTickAt'],'last_new_count':b['lastNewCount'],'scope_version':b['scope']?.['version']??0x0,'backoff_ms':b['backoffMs'],...b['lastSummary']?{'last_tick':b['lastSummary']}:{}};}['kick'](a){const b=this['runtimes']['get'](netKey(a));if(!b||!b['started']||!b['holdsLease']||b['ticking'])return;if(this['deps']['now']()-b['lastTickAt']<b['pollIntervalMs'])return;void this['tick'](b['network']);}['invalidateScope'](a){const b=this['runtimes']['get'](netKey(a));if(!b)return;b['scope']=undefined,b['lastScopeRefreshAt']=0x0;}async['tick'](a){const b=netKey(a);let c=this['runtimes']['get'](b);!c&&(c=newRuntime(a),this['runtimes']['set'](b,c));if(c['ticking'])return undefined;c['ticking']=!![];const d=this['deps']['now']();try{const f=await this['deps']['configStore']['getConfig'](a),g=Number(f['loop']?.['poll_interval_ms'])||LOOP_DEFAULTS['poll_interval_ms'];c['pollIntervalMs']=g;const h=await this['acquireLease'](c,g);if(!h)return undefined;const {newCount:i,events:j}=await this['capture'](c,f),k=await this['getScope'](c,f);let l=0x0,m=[];if(i>0x0&&j['length']>0x0){const p=this['deps']['router']['annotateBatch'](j,k,f)['filter'](q=>q['rules']['length']>0x0||q['focus_hit']||q['matched_filters']['length']>0x0);p['length']>0x0&&(await this['deps']['store']['saveAnnotations'](a,p),l=p['length'],m=p);}if(m['length']>0x0&&this['deps']['openProblems'])try{await this['deps']['openProblems']({'network':a,'events':j,'annotations':m,'scope':k});}catch(q){this['deps']['logger']('monitor\x20loop:\x20problem\x20bridge\x20error\x20on\x20'+a+':\x20'+String(q?.['message']??q));}if(m['length']>0x0&&this['deps']['openSuggestions'])try{await this['deps']['openSuggestions']({'network':a,'events':j,'annotations':m,'scope':k});}catch(s){this['deps']['logger']('monitor\x20loop:\x20suggestion\x20bridge\x20error\x20on\x20'+a+':\x20'+String(s?.['message']??s));}if(this['deps']['runKeeperScan'])try{await this['deps']['runKeeperScan'](a,k);}catch(t){this['deps']['logger']('monitor\x20loop:\x20keeper\x20scan\x20error\x20on\x20'+a+':\x20'+String(t?.['message']??t));}const n=Number(f['loop']?.['scope_refresh_ms'])||LOOP_DEFAULTS['scope_refresh_ms'];if(this['deps']['now']()-c['lastScopeRefreshAt']>=n){c['lastScopeRefreshAt']=this['deps']['now']();const {snapshot:u,changed:v}=await this['deps']['resolveScope'](a,f);c['scope']=u;if(v){const w=Number(f['loop']?.['backfill_days']??LOOP_DEFAULTS['backfill_days']),x=await this['deps']['router']['backfillAnnotations'](a,this['deps']['store'],u,w,f);this['deps']['logger']('monitor\x20loop:\x20scope\x20v'+u['version']+'\x20on\x20'+a+'\x20changed\x20—\x20backfill\x20rescanned\x20'+x['rescanned']+',\x20updated\x20'+x['updated']);}}c['lastTickAt']=this['deps']['now'](),c['lastNewCount']=i,c['consecutiveErrors']=0x0,c['backoffMs']=0x0;const o={'captured':j['length'],'annotated':l,'duration_ms':this['deps']['now']()-d};return c['lastSummary']=o,o;}catch(y){const z=String(y?.['message']??y);return this['deps']['logger']('monitor\x20loop:\x20tick\x20error\x20on\x20'+a+':\x20'+z),c['consecutiveErrors']+=0x1,c['backoffMs']=Math['min'](c['pollIntervalMs']*0x2**c['consecutiveErrors'],MAX_BACKOFF_MS),undefined;}finally{c['ticking']=![],c['started']&&this['schedule'](c,c['backoffMs']>0x0?c['backoffMs']:c['pollIntervalMs']);}}['schedule'](a,b){if(a['timer']!==undefined)this['deps']['clearTimer'](a['timer']);const c=this['deps']['setTimer'](()=>{a['timer']=undefined,void this['tick'](a['network']);},Math['max'](0x0,b));c?.['unref']?.(),a['timer']=c;}async['acquireLease'](a,b){const c=leaseKey(a['network']),d=this['deps']['now']();let e;try{const i=await this['deps']['storage']['get'](c);e=i?JSON['parse'](i):undefined;}catch{e=undefined;}const f={'pid':this['deps']['pid'],'boot_id':this['deps']['bootId']},g=!!e&&e['boot_id']===f['boot_id']&&e['pid']===f['pid'],h=!e||d-Number(e['heartbeat_at']??0x0)>0x2*b;if(g||h)return await this['deps']['storage']['put'](c,JSON['stringify']({...f,'heartbeat_at':d})),a['holdsLease']=!![],a['leaseHolder']=f,!![];return a['holdsLease']=![],a['leaseHolder']={'pid':e['pid'],'boot_id':e['boot_id']},![];}async['getScope'](a,b){if(!a['scope'])try{const c=await this['deps']['loadScope'](a['network']);c&&(a['scope']=c,a['lastScopeRefreshAt']=Number(c['resolved_at'])||0x0);}catch{}if(!a['scope']){a['lastScopeRefreshAt']=this['deps']['now']();const {snapshot:d,changed:e}=await this['deps']['resolveScope'](a['network'],b);a['scope']=d;if(e){const f=Number(b['loop']?.['backfill_days']??LOOP_DEFAULTS['backfill_days']);await this['deps']['router']['backfillAnnotations'](a['network'],this['deps']['store'],d,f,b);}}return a['scope'];}async['capture'](a,b){const c=a['network'],d=await this['deps']['store']['getCursors'](c);let f=0x0;const g=[],h=[...MONITOR_CAPTURE_TYPES];if(b['events']?.[PAYMENT_EVENT_TYPE]===!![])h['push'](PAYMENT_EVENT_TYPE);for(const i of h){const j=EVENT_MODULE_OF[i];if(!j)continue;try{const k=d['cursors'][i];let l=null;if(!k){let m=null,n=0x0;while(n<SEED_MAX){const o=await this['deps']['queryEvents']({'type':i,'cursor':m,'limit':Math['min'](SEED_PAGE,SEED_MAX-n),'order':'descending','network':c}),p=(o?.['data']??[])['map'](q=>normalizeMonitorEvent(q));if(p['length']===0x0)break;if(l===null)l=p[0x0];n+=p['length'],f+=await this['deps']['store']['insert'](c,j,p),g['push'](...p);if(!o?.['hasNextPage']||!o?.['nextCursor'])break;m=o['nextCursor'];}}else{const q=await this['deps']['queryEvents']({'type':i,'cursor':k,'limit':POLL_BATCH,'order':'ascending','network':c}),r=(q?.['data']??[])['map'](s=>normalizeMonitorEvent(s));f+=await this['deps']['store']['insert'](c,j,r),g['push'](...r);if(r['length']>0x0)l=r[r['length']-0x1];}if(l?.['id']){const s=d['cursors'][i];(!s||BigInt(l['id']['eventSeq'])>BigInt(s['eventSeq']||'0'))&&(d['cursors'][i]={'eventSeq':String(l['id']['eventSeq']),'txDigest':String(l['id']['txDigest'])});}}catch(t){const u=String(t?.['message']??t);this['deps']['logger']('monitor\x20loop:\x20type\x20'+i+'\x20poll\x20error:\x20'+u),/referenced transaction/i['test'](u)&&(delete d['cursors'][i],this['deps']['logger']('monitor\x20loop:\x20type\x20'+i+'\x20cursor\x20invalid\x20—\x20dropped,\x20will\x20re-seed\x20next\x20cycle'));}}return await this['deps']['store']['saveCursors'](c,d['cursors'],this['deps']['now']()),{'newCount':f,'events':g};}}export const monitorLoop=new MonitorLoop();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export function analyzeArbitratorInterest(a){const b=[],c=[],e=[],f=[];b['push']('Arbitration\x20fee\x20is\x20escrowed\x20per\x20dispute\x20
|
|
1
|
+
export function analyzeArbitratorInterest(a){const b=[],c=[],e=[],f=[];b['push']('Arbitration\x20fee\x20is\x20escrowed\x20per\x20dispute\x20—\x20collected\x20when\x20the\x20verdict\x20lands,\x20forfeited\x20if\x20you\x20never\x20vote.');a['vote_weight']!==undefined&&b['push']('Your\x20vote\x20carries\x20weight\x20'+a['vote_weight']+'\x20—\x20weighted\x20voting,\x20not\x20majority\x20count:\x20a\x20high-weight\x20vote\x20can\x20decide\x20a\x20case\x20alone.');if(a['fee_payoff']?.['length']){const h=a['fee_payoff']['map'](i=>i['beneficial_recipient'])['filter'](Boolean);b['push']('Fee\x20allocation\x20payoff\x20resolves\x20to:\x20'+([...new Set(h)]['join'](';\x20')||'(unresolved)')+'\x20—\x20'+'check\x20the\x20allocation\x20guard\x27s\x20Signer/scope\x20constraints\x20before\x20relying\x20on\x20collection.');}if(a['open_disputes']['length']>0x0){c['push'](a['open_disputes']['length']+'\x20open\x20dispute(s)\x20await\x20your\x20proposition/vote\x20—\x20you\x20hold\x20arbitration\x20power\x20over\x20funds\x20that\x20are\x20already\x20escrowed.');for(const i of a['open_disputes']){if(i['voting_deadline']!==undefined&&i['current_time']!==undefined){const j=Math['round']((i['voting_deadline']-i['current_time'])/0x36ee80);c['push']('Arb\x20'+i['arb']+':\x20'+(j>=0x0?j+'h\x20left\x20to\x20the\x20voting\x20deadline':'voting\x20deadline\x20PASSED')+(i['order']?'\x20(order\x20'+i['order']+')':'')+'.');}}}c['push']('Verdicts\x20must\x20be\x20defensible\x20from\x20on-chain\x20evidence\x20(progress\x20records,\x20WIP\x20hashes,\x20Messenger\x20records)\x20—\x20every\x20Voted\x20entry\x20is\x20permanent\x20and\x20queryable.'),e['push']('Pull\x20the\x20order\x27s\x20full\x20record\x20before\x20voting:\x20Progress\x20holders\x20show\x20WHO\x20advanced\x20WHAT\x20and\x20WHEN\x20—\x20the\x20liability\x20question\x20usually\x20answers\x20itself\x20from\x20the\x20timestamps.');a['open_disputes']['length']>0x0&&e['push']('Request\x20missing\x20evidence\x20via\x20Messenger\x20—\x20the\x20conversation\x20record\x20becomes\x20part\x20of\x20the\x20dispute\x20record.');f['push']('Deadline\x20miss:\x20a\x20case\x20you\x20hold\x20weight\x20in\x20resolves\x20without\x20you\x20—\x20fee\x20forfeited\x20and\x20your\x20arbitration\x20reputation\x20degrades\x20(registrar\x20votes\x20are\x20queryable\x20by\x20future\x20disputants).');a['resolved_indemnities']?.['length']&&f['push']('You\x20resolved\x20'+a['resolved_indemnities']['length']+'\x20case(s)\x20recently\x20—\x20a\x20verdict\x20overturned\x20by\x20evidence\x20later\x20discovered\x20is\x20a\x20permanent\x20reputation\x20mark.');f['push']('Separation\x20of\x20powers:\x20you\x20must\x20NOT\x20hold\x20power\x20in\x20the\x20disputing\x20service\x27s\x20own\x20permission\x20(such\x20bindings\x20are\x20rejected\x20on-chain)\x20—\x20avoid\x20any\x20position\x20that\x20re-creates\x20that\x20conflict.');const g='As\x20an\x20arbitrator\x20of\x20'+a['arbitration']+(a['vote_weight']!==undefined?'\x20(weight\x20'+a['vote_weight']+')':'')+(',\x20'+a['open_disputes']['length']+'\x20open\x20dispute(s)')+(a['open_disputes']['length']>0x0?'\x20await\x20your\x20vote':'\x20are\x20pending')+'.\x20Your\x20income\x20is\x20the\x20fee;\x20your\x20asset\x20is\x20a\x20defensible\x20verdict\x20record;\x20your\x20exposure\x20is\x20the\x20deadline.';return{'fund_flow':b,'responsibility':c,'leverage':e,'stakes':f,'summary':g};}
|