@wowok/agent-mcp 3.3.1 → 3.3.3
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/chain-semantics/field-capability.js +1 -1
- package/dist/chain-semantics/freeze-map.js +1 -1
- package/dist/chain-semantics/fund-flow.js +1 -1
- package/dist/chain-semantics/guard-verbs.js +1 -1
- package/dist/chain-semantics/object-graph.js +1 -1
- package/dist/composition/audit.d.ts +5 -0
- package/dist/composition/audit.js +1 -1
- package/dist/composition/blueprint-view.d.ts +0 -1
- package/dist/composition/blueprint-view.js +1 -1
- package/dist/composition/compile.d.ts +5 -3
- package/dist/composition/compile.js +1 -1
- package/dist/composition/inflight.d.ts +32 -4
- package/dist/composition/inflight.js +1 -1
- package/dist/config/judgment.d.ts +111 -1
- package/dist/config/judgment.js +1 -1
- package/dist/customer/industry-risks.js +1 -1
- package/dist/customer/user-preferences.js +1 -1
- package/dist/evaluation/arbitration-game.d.ts +4 -0
- package/dist/evaluation/arbitration-game.js +1 -1
- package/dist/evaluation/builtins/graph-service.js +1 -1
- package/dist/evaluation/builtins/graph-service.spec.js +1 -1
- package/dist/evaluation/game-strategy.d.ts +6 -0
- package/dist/evaluation/game-strategy.js +1 -1
- package/dist/evaluation/node-game.d.ts +4 -0
- package/dist/evaluation/node-game.js +1 -1
- package/dist/evaluation/value-risk.d.ts +8 -0
- package/dist/evaluation/value-risk.js +1 -0
- package/dist/experience/realtime-feedback.js +1 -1
- package/dist/extensions/business-modules.d.ts +7 -2
- package/dist/extensions/business-modules.js +1 -1
- package/dist/extensions/industry-audit.spec.js +1 -1
- package/dist/extensions/industry-pack.d.ts +3 -2
- package/dist/extensions/industry-pack.js +1 -1
- package/dist/extensions/modes.js +1 -1
- package/dist/graph/onchain/analyze.js +1 -1
- package/dist/graph/onchain/analyze.spec.js +1 -1
- package/dist/graph/onchain/expand.js +1 -1
- package/dist/graph/onchain/exposure.js +1 -1
- package/dist/graph/onchain/facet-projection.js +1 -1
- package/dist/graph/onchain/facet-projection.spec.js +1 -1
- package/dist/graph/onchain/facts.d.ts +20 -0
- package/dist/graph/onchain/facts.js +1 -1
- package/dist/graph/onchain/facts.spec.js +1 -1
- package/dist/graph/onchain/object-held-receipts.d.ts +20 -0
- package/dist/graph/onchain/object-held-receipts.js +1 -0
- package/dist/graph/onchain/object-held-receipts.spec.d.ts +1 -0
- package/dist/graph/onchain/object-held-receipts.spec.js +1 -0
- package/dist/graph/onchain/project-relationship.js +1 -1
- package/dist/graph/onchain/sdk-batch.d.ts +1 -0
- package/dist/graph/onchain/sdk-batch.js +1 -1
- package/dist/harness/index.d.ts +1 -0
- package/dist/harness/recover.d.ts +2 -1
- package/dist/harness/recover.js +1 -1
- package/dist/knowledge/acquisition-flywheel.js +1 -1
- package/dist/knowledge/allocation-ledger.d.ts +3 -1
- package/dist/knowledge/allocation-ledger.js +1 -1
- package/dist/knowledge/allocation-puzzle.d.ts +1 -0
- package/dist/knowledge/allocation-puzzle.js +1 -1
- package/dist/knowledge/allocation-risk.d.ts +1 -1
- package/dist/knowledge/allocation-risk.js +1 -1
- package/dist/knowledge/arb-fund-facts.d.ts +12 -0
- package/dist/knowledge/arb-fund-facts.js +1 -1
- package/dist/knowledge/audit-rules.d.ts +4 -3
- package/dist/knowledge/audit-rules.js +1 -1
- package/dist/knowledge/baselines/judgment-baselines.json +502 -81
- package/dist/knowledge/baselines/rules/allocation.json +0 -14
- package/dist/knowledge/baselines/rules/graph.json +4 -4
- package/dist/knowledge/baselines/rules/plan.json +81 -5
- package/dist/knowledge/baselines/rules/reward.json +1 -1
- package/dist/knowledge/builtin-templates.d.ts +9 -1
- package/dist/knowledge/builtin-templates.js +1 -1
- package/dist/knowledge/discount-threshold.js +1 -1
- package/dist/knowledge/event-semantics.js +1 -1
- package/dist/knowledge/game-scenarios.d.ts +21 -0
- package/dist/knowledge/game-scenarios.js +1 -0
- package/dist/knowledge/getting-started.js +1 -1
- package/dist/knowledge/guard-bindings.js +1 -1
- package/dist/knowledge/guard-design-patterns.d.ts +1 -1
- package/dist/knowledge/guard-design-patterns.js +1 -1
- package/dist/knowledge/guard-field-cognition.js +1 -1
- package/dist/knowledge/guard-leg-map.d.ts +5 -0
- package/dist/knowledge/guard-leg-map.js +1 -0
- package/dist/knowledge/guard-lint.js +1 -1
- package/dist/knowledge/guard-puzzle.js +1 -1
- package/dist/knowledge/guard-render.js +1 -1
- package/dist/knowledge/guard-risk.js +1 -1
- package/dist/knowledge/guard-submission-brief.d.ts +5 -0
- package/dist/knowledge/guard-submission-brief.js +1 -1
- package/dist/knowledge/guard-submission-prompt.d.ts +2 -1
- package/dist/knowledge/guard-submission-prompt.js +1 -1
- package/dist/knowledge/guard-templates.d.ts +1 -1
- package/dist/knowledge/guard-templates.js +1 -1
- package/dist/knowledge/guard-translation.js +1 -1
- package/dist/knowledge/index.js +1 -1
- package/dist/knowledge/industry-generalizer.js +1 -1
- package/dist/knowledge/industry-registry.js +1 -1
- package/dist/knowledge/industry-strategy.js +1 -1
- package/dist/knowledge/jsonrpc-enum.js +1 -1
- package/dist/knowledge/onchain-constants.d.ts +4 -2
- package/dist/knowledge/onchain-constants.js +1 -1
- package/dist/knowledge/order-ledger.d.ts +1 -1
- package/dist/knowledge/order-ledger.js +1 -1
- package/dist/knowledge/order-puzzle.d.ts +3 -0
- package/dist/knowledge/order-risk.d.ts +1 -1
- package/dist/knowledge/passport-ledger.d.ts +12 -0
- package/dist/knowledge/passport-ledger.js +1 -1
- package/dist/knowledge/payment-tracker.js +1 -1
- package/dist/knowledge/protocol-facts.d.ts +1 -0
- package/dist/knowledge/protocol-facts.js +1 -1
- package/dist/knowledge/repository-write-semantics.d.ts +1 -1
- package/dist/knowledge/repository-write-semantics.js +1 -1
- package/dist/knowledge/reward-ledger.js +1 -1
- package/dist/knowledge/reward-puzzle.d.ts +1 -1
- package/dist/knowledge/reward-risk.d.ts +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-ledger.d.ts +14 -0
- package/dist/knowledge/service-ledger.js +1 -1
- package/dist/knowledge/strategy-manuals.js +1 -1
- package/dist/knowledge/template-index.d.ts +19 -0
- package/dist/knowledge/template-index.js +1 -0
- package/dist/knowledge/template-loader.d.ts +36 -0
- package/dist/knowledge/template-loader.js +1 -1
- package/dist/knowledge/template-registry.js +1 -1
- package/dist/knowledge/template-scanner.d.ts +11 -0
- package/dist/knowledge/template-scanner.js +1 -1
- package/dist/knowledge/tool-constraints.js +1 -1
- package/dist/knowledge/workflow-guidance.d.ts +2 -0
- package/dist/knowledge/workflow-guidance.js +1 -1
- package/dist/monitor/MonitorLoop.js +1 -1
- package/dist/participation/allocation-advice.d.ts +8 -1
- package/dist/participation/allocation-advice.js +1 -1
- package/dist/participation/game-context.d.ts +25 -0
- package/dist/participation/game-context.js +1 -0
- package/dist/participation/node-action-advisor.d.ts +64 -0
- package/dist/participation/node-action-advisor.js +1 -0
- package/dist/participation/radar-core.d.ts +1 -0
- package/dist/participation/radar-core.js +1 -1
- package/dist/persona/defaults.js +1 -1
- package/dist/persona/topology-focus.js +1 -1
- package/dist/playbooks/service-build/business-puzzle.js +1 -1
- package/dist/playbooks/service-build/game-theory.d.ts +4 -1
- package/dist/playbooks/service-build/game-theory.js +1 -1
- package/dist/playbooks/service-build/machine-panorama.js +1 -1
- package/dist/playbooks/service-build/merchant-guide.d.ts +26 -1
- package/dist/playbooks/service-build/merchant-guide.js +1 -1
- package/dist/playbooks/service-build/migration-planner.d.ts +2 -2
- package/dist/playbooks/service-build/migration-planner.js +1 -1
- package/dist/playbooks/service-build/object-panorama.d.ts +13 -1
- 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 +4 -1
- package/dist/playbooks/service-build/pipeline-actions.js +1 -1
- package/dist/playbooks/service-build/relationship-profile.js +1 -1
- package/dist/playbooks/service-build/service-panorama.d.ts +12 -0
- package/dist/playbooks/service-build/service-panorama.js +1 -1
- package/dist/playbooks/service-build/service-quote.js +1 -1
- package/dist/playbooks/service-build/service-quote.spec.js +1 -1
- package/dist/relationship/derivation.d.ts +1 -1
- package/dist/review/index.js +1 -1
- package/dist/review/repository.js +1 -1
- package/dist/role/intent.d.ts +23 -0
- package/dist/role/intent.js +1 -0
- package/dist/safety/confirm-gate.js +1 -1
- package/dist/schema/benchmark-migration/index.d.ts +39 -0
- package/dist/schema/benchmark-migration/index.js +1 -1
- package/dist/schema/call/allocation.d.ts +49 -3
- package/dist/schema/call/allocation.js +1 -1
- package/dist/schema/call/arbitration.js +1 -1
- package/dist/schema/call/base.d.ts +52 -0
- package/dist/schema/call/base.js +1 -1
- package/dist/schema/call/bridge.d.ts +3 -0
- package/dist/schema/call/contact.js +1 -1
- package/dist/schema/call/error-codes.d.ts +1 -1
- package/dist/schema/call/error-codes.js +1 -1
- package/dist/schema/call/guard.js +1 -1
- package/dist/schema/call/handler.js +1 -1
- package/dist/schema/call/machine.d.ts +10 -0
- package/dist/schema/call/machine.js +1 -1
- package/dist/schema/call/order.d.ts +2 -0
- package/dist/schema/call/order.js +1 -1
- package/dist/schema/call/progress.d.ts +6 -3
- package/dist/schema/call/progress.js +1 -1
- package/dist/schema/call/repository.d.ts +4 -0
- package/dist/schema/call/repository.js +1 -1
- package/dist/schema/call/reward.d.ts +2 -2
- package/dist/schema/call/reward.js +1 -1
- package/dist/schema/call/semantic.d.ts +6 -0
- package/dist/schema/call/semantic.js +1 -1
- package/dist/schema/call/service.d.ts +42 -4
- package/dist/schema/call/service.js +1 -1
- package/dist/schema/common/index.js +1 -1
- package/dist/schema/goal/index.d.ts +54 -0
- package/dist/schema/goal/planning.d.ts +86 -0
- package/dist/schema/goal/planning.js +1 -1
- package/dist/schema/keeper/index.d.ts +2 -0
- package/dist/schema/local/index.d.ts +72 -0
- package/dist/schema/local/index.js +1 -1
- package/dist/schema/messenger/index.d.ts +2 -0
- package/dist/schema/operations.d.ts +46 -5
- package/dist/schema/operations.js +1 -1
- package/dist/schema/persona/index.d.ts +484 -0
- package/dist/schema/query/bi.d.ts +4 -0
- package/dist/schema/query/bi.js +1 -1
- package/dist/schema/query/index.d.ts +84 -60
- package/dist/schema/query/index.js +1 -1
- package/dist/schema/schema-version.d.ts +1 -1
- package/dist/schema/schema-version.js +1 -1
- package/dist/schema-query-impl/index.js +1 -1
- package/dist/schemas/account_operation.output.json +41 -10
- package/dist/schemas/account_operation.schema.json +1 -1
- package/dist/schemas/benchmark_migration_operation.output.json +8 -5
- package/dist/schemas/benchmark_migration_operation.schema.json +91 -3
- package/dist/schemas/bridge_operation.output.json +13 -7
- package/dist/schemas/goal_operation.schema.json +94 -0
- package/dist/schemas/index.json +1 -1
- package/dist/schemas/keeper_operation.output.json +12 -7
- package/dist/schemas/local_cache_operation.output.json +34 -7
- package/dist/schemas/local_cache_operation.schema.json +16 -1
- package/dist/schemas/local_history_operation.output.json +13 -7
- package/dist/schemas/local_info_operation.output.json +13 -7
- package/dist/schemas/local_info_operation.schema.json +5 -1
- package/dist/schemas/local_mark_operation.output.json +13 -7
- package/dist/schemas/messenger_operation.output.json +12 -7
- package/dist/schemas/monitor_events.output.json +12 -7
- package/dist/schemas/monitor_subscription.output.json +12 -7
- package/dist/schemas/onchain_events.output.json +67 -18
- package/dist/schemas/onchain_events.schema.json +4 -0
- package/dist/schemas/onchain_operations.output.json +81 -24
- package/dist/schemas/onchain_operations.schema.json +531 -126
- package/dist/schemas/onchain_operations_allocation.schema.json +294 -6
- package/dist/schemas/onchain_operations_arbitration.schema.json +3 -3
- package/dist/schemas/onchain_operations_contact.schema.json +2 -2
- package/dist/schemas/onchain_operations_demand.schema.json +3 -3
- package/dist/schemas/onchain_operations_gen_passport.schema.json +1 -1
- package/dist/schemas/onchain_operations_guard.schema.json +99 -63
- package/dist/schemas/onchain_operations_machine.schema.json +10 -1
- package/dist/schemas/onchain_operations_order.schema.json +8 -4
- package/dist/schemas/onchain_operations_progress.schema.json +8 -4
- package/dist/schemas/onchain_operations_proof.schema.json +1 -1
- package/dist/schemas/onchain_operations_repository.schema.json +6 -2
- package/dist/schemas/onchain_operations_reward.schema.json +8 -8
- package/dist/schemas/onchain_operations_service.schema.json +81 -21
- package/dist/schemas/onchain_operations_treasury.schema.json +7 -7
- package/dist/schemas/onchain_table_data.output.json +16 -7
- package/dist/schemas/persona_operation.output.json +1387 -0
- package/dist/schemas/persona_operation.schema.json +219 -0
- package/dist/schemas/query_toolkit.output.json +115 -64
- package/dist/schemas/query_toolkit.schema.json +8 -0
- package/dist/schemas/workflow_operation.schema.json +1 -1
- package/dist/tools/handlers/benchmark-migration.js +1 -1
- package/dist/tools/handlers/bridge.js +1 -1
- package/dist/tools/handlers/config.js +1 -1
- package/dist/tools/handlers/dispatch-expectations.js +1 -1
- package/dist/tools/handlers/file-export.js +1 -1
- package/dist/tools/handlers/industry-pack.d.ts +1 -0
- package/dist/tools/handlers/industry-pack.js +1 -1
- package/dist/tools/handlers/local.js +1 -1
- package/dist/tools/handlers/messenger.js +1 -1
- package/dist/tools/handlers/onchain-name-registration.d.ts +11 -0
- package/dist/tools/handlers/onchain-name-registration.js +1 -1
- package/dist/tools/handlers/onchain.d.ts +28 -0
- package/dist/tools/handlers/onchain.js +1 -1
- package/dist/tools/handlers/query.js +1 -1
- package/dist/tools/handlers/review-chain.d.ts +1 -1
- package/dist/tools/handlers/review-chain.js +1 -1
- package/dist/tools/handlers/schema-query.js +1 -1
- package/dist/tools/handlers/workflow.js +1 -1
- package/dist/tools/move-fn-index.gen.js +1 -1
- package/dist/tools/registry/agent.js +1 -1
- package/dist/tools/registry/local.js +1 -1
- package/dist/tools/registry/onchain.js +1 -1
- package/dist/tools/registry/query.js +1 -1
- package/dist/tools/wip-deploy-assist.js +1 -1
- package/dist/tools/wrap.js +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
import{analyzeIntent}from'./intent-analyzer.js';import{compileTemplate}from'../../composition/compile.js';import{reflux,auditScore}from'../../composition/reflux.js';import{planBlueprint}from'../../composition/blueprint-view.js';import{getGuardDesignPattern}from'../../knowledge/guard-design-patterns.js';import{GUARD_TEMPLATES,getTemplatesByScene}from'../../knowledge/guard-templates.js';import{checkGameTheoryConstraints}from'./game-theory.js';import{assessWorkflowDesign}from'./workflow-design-assessment.js';import{CORE_BUSINESS_MODULES,getBusinessModule,recommendModules,checkModuleConstraints}from'../../extensions/business-modules.js';import{recipientDesignGuidance}from'../../knowledge/recipient-constraint.js';import{getTemplate,getTemplatesByIndustry}from'../../knowledge/template-loader.js';function derivePlanSatisfiedConstraints(a,b){const c=new Set(),d=i=>a['edges']['some'](j=>j['relation']===i),e=i=>a['nodes']['some'](j=>j['id']===i),f=i=>a['nodes']['some'](j=>j['type']===i),g=i=>a['adoptedModules']['includes'](i);if(d('has_order_allocators'))c['add']('order_allocators_bound');if(d('uses_machine'))c['add']('machine_bound_before_publish');if(d('has_arbitration'))c['add']('arbitration_bound_to_service');if(e('machine'))c['add']('machine_published');if(e('repository'))c['add']('repository_published');if(e('service'))c['add']('service_published');e('permission_arb')&&e('permission')&&c['add']('arbitration_permission_independent');g('independent_arbitration')&&a['nodes']['some'](i=>i['id']['includes']('guard')&&i['id']['includes']('arbitration'))&&c['add']('voting_guard_configured');g('accept_timeout_protection')&&(c['add']('time_guard_configured'),c['add']('adminUnhold_permission'));g('milestone_escrow')&&f('guard')&&c['add']('milestone_forward_guarded');const h=d('has_order_allocators');if(h&&b['payment']['allocation']&&b['payment']['allocation']['length']>0x0){c['add']('allocators_configured');const i=b['payment']['allocation']['reduce']((k,l)=>k+l['percentage'],0x0);if(Math['abs'](i-0x64)<0.001)c['add']('sharing_sum_100');const j=b['payment']['allocation']['find'](k=>k['recipient']==='platform');if(!j||j['percentage']===0x0)c['add']('platform_fee_zero');g('supplier_collaboration')&&(c['add']('allocation_sharing_configured'),c['add']('demand_configured'));}g('wip_provenance')&&e('repository')&&c['add']('wip_hash_before_delivery');g('subscription_with_proof')&&e('repository')&&(c['add']('delivery_guard_per_cycle'),c['add']('repository_updated'));g('damage_attestation')&&(c['add']('pre_rental_hash'),c['add']('post_rental_hash'));g('refund_guarantee')&&(c['add']('compensation_fund_positive'),c['add']('refund_guard_configured'));if(g('praise_incentive')){const k=a['plan']['steps']['some'](m=>m['op']==='create'&&m['object']==='reward'),l=a['plan']['steps']['some'](m=>m['op']==='configure'&&m['method']==='coin_add');k&&l&&(c['add']('reward_pool_funded'),c['add']('reward_claim_replay_armed'));}return g('discount_lifecycle')&&(c['add']('discount_budget_planned'),c['add']('discount_burn_disclosed')),c;}function deriveDeployTimeChecks(a){const b=[];return a['nodes']['some'](c=>c['id']==='machine')&&b['push']('Machine\x20published\x20AND\x20bound\x20to\x20Service\x20BEFORE\x20Service.publish\x20(machine\x20is\x20immutable\x20after\x20publish)'),a['edges']['some'](c=>c['relation']==='has_order_allocators')&&(b['push']('Service.order_allocators\x20bound\x20(verify\x20via\x20query_objects\x20after\x20publish\x20—\x20order_allocators\x20is\x20FROZEN\x20at\x20publish)'),b['push']('Settlement\x20is\x20NOT\x20triggered\x20by\x20reaching\x20a\x20Machine\x20node\x20alone\x20—\x20an\x20explicit\x20alloc_by_guard\x20call\x20(keeper\x20or\x20merchant)\x20fires\x20the\x20settlement\x20Allocator\x20once\x20its\x20Guard\x20passes.\x20Declare\x20the\x20node->allocator\x20trigger\x20(which\x20terminal\x20node\x20unlocks\x20settlement)\x20and\x20schedule\x20the\x20keeper\x20step;\x20otherwise\x20orders\x20stall\x20at\x20the\x20settle\x20node\x20with\x20allocation_state=pending')),(a['adoptedModules']['includes']('refund_guarantee')||a['nodes']['some'](c=>c['id']==='arbitration'))&&b['push']('compensation_fund\x20MUST\x20be\x20able\x20to\x20cover\x20payouts:\x20a\x20claim\x20against\x20a\x20drained\x20fund\x20aborts\x20(service.move\x20E_COMPENSATION_NOT_MATCH).\x20Size\x20the\x20fund\x20>=\x203x\x20a\x20TYPICAL\x20single\x20order\x20(3x\x20IS\x20the\x20chain\x27s\x20hard\x20award\x20ceiling,\x20MAX_INDEMNITY_MULTIPLE)\x20—\x20per-order\x20coverage\x20is\x20enforced\x20at\x20BUY\x20time\x20(each\x20order\x20is\x20checked\x20against\x203x\x20ITS\x20OWN\x20amount,\x20not\x203x\x20the\x20highest\x20SKU),\x20so\x20publish\x20no\x20longer\x20blocks\x20on\x20coverage;\x20verify\x20the\x20on-chain\x20balance\x20before\x20going\x20live'),a['nodes']['some'](c=>c['id']==='arbitration')&&(b['push']('Arbitration.permission\x20!=\x20Service.permission\x20on-chain\x20(E_ARBITRATION_PERMISSION_CONFLICT=33)'),b['push']('A\x20freshly\x20created\x20Arbitration\x20defaults\x20to\x20PAUSED\x20—\x20unpause\x20it\x20(arbitration\x20activation)\x20before\x20the\x20first\x20case\x20can\x20be\x20filed,\x20otherwise\x20dispute\x20filing\x20aborts')),a['nodes']['some'](c=>c['id']==='repository')&&b['push']('Repository\x20published\x20and\x20Guard\x20write\x20validation\x20configured'),b['push']('After\x20materialization,\x20confirm\x20the\x20on-chain\x20state\x20matches\x20this\x20plan\x20(query_toolkit\x20query_type=\x27service_panorama\x27)'),b;}function derivePostDeploySteps(a){const b=[];return(a['adoptedModules']['includes']('refund_guarantee')||a['nodes']['some'](c=>c['id']==='arbitration'))&&b['push']({'order':b['length']+0x1,'id':'compensation_fund_topup','title':'Top\x20up\x20the\x20compensation\x20fund','when':'After\x20the\x20Service\x20object\x20is\x20created,\x20BEFORE\x20the\x20service\x20goes\x20live\x20(before\x20the\x20first\x20order)','action':'Call\x20compensation_fund_add\x20sized\x20>=\x203x\x20a\x20TYPICAL\x20single\x20order\x20(3x\x20=\x20the\x20chain\x27s\x20hard\x20award\x20ceiling,\x20MAX_INDEMNITY_MULTIPLE;\x20above\x203x\x20only\x20buys\x20headroom\x20for\x20concurrent\x20claims).\x20Per-order\x20coverage\x20is\x20enforced\x20at\x20BUY\x20time\x20—\x20each\x20incoming\x20order\x20is\x20checked\x20against\x203x\x20ITS\x20OWN\x20amount\x20and\x20under-covered\x20orders\x20cannot\x20be\x20created\x20—\x20then\x20verify\x20the\x20on-chain\x20fund\x20balance\x20via\x20query_objects','tool_hint':'onchain_operations\x20(service.compensation_fund_add)','failure_if_skipped':'a\x20compensation\x20claim\x20against\x20an\x20empty\x20fund\x20aborts\x20(E_COMPENSATION_NOT_MATCH,\x20testnet\x20lesson\x20R-4)'}),a['nodes']['some'](c=>c['id']==='arbitration')&&b['push']({'order':b['length']+0x1,'id':'arbitration_unpause','title':'Activate\x20the\x20Arbitration\x20(unpause)','when':'Immediately\x20after\x20the\x20Arbitration\x20object\x20is\x20created,\x20before\x20the\x20first\x20dispute\x20is\x20filed','action':'Unpause/activate\x20the\x20Arbitration\x20so\x20dispute\x20filing\x20is\x20accepted;\x20keep\x20its\x20Permission\x20distinct\x20from\x20the\x20Service\x20Permission\x20(E_ARBITRATION_PERMISSION_CONFLICT=33)','tool_hint':'onchain_operations\x20(arbitration\x20activation)','failure_if_skipped':'a\x20freshly\x20created\x20Arbitration\x20defaults\x20to\x20PAUSED\x20—\x20dispute\x20filing\x20aborts\x20(testnet\x20lesson\x20R-5)'}),a['edges']['some'](c=>c['relation']==='has_order_allocators')&&b['push']({'order':b['length']+0x1,'id':'settlement_alloc_by_guard','title':'Fire\x20settlement\x20via\x20alloc_by_guard\x20(keeper/merchant\x20step)','when':'Recurring\x20—\x20after\x20EACH\x20order\x20reaches\x20its\x20settlement\x20terminal\x20node\x20(declare\x20which\x20node\x20unlocks\x20settlement)','action':'Call\x20alloc_by_guard\x20on\x20the\x20order\x27s\x20allocation\x20with\x20the\x20settlement\x20Guard;\x20reaching\x20the\x20Machine\x20node\x20alone\x20does\x20NOT\x20settle\x20(allocation_state\x20stays\x20pending)','tool_hint':'onchain_operations\x20(allocation.alloc_by_guard);\x20schedule\x20as\x20a\x20keeper\x20step','failure_if_skipped':'orders\x20stall\x20at\x20the\x20settle\x20node\x20with\x20funds\x20locked\x20in\x20escrow\x20(testnet\x20lesson\x20R-2)'}),b['push']({'order':b['length']+0x1,'id':'verify_service_panorama','title':'Verify\x20the\x20on-chain\x20state\x20matches\x20the\x20plan','when':'After\x20all\x20creation\x20steps\x20and\x20the\x20steps\x20above\x20are\x20done','action':'Run\x20the\x20service\x20panorama\x20query\x20and\x20diff\x20it\x20against\x20this\x20plan\x27s\x20blueprint/creation_plan','tool_hint':'query_toolkit\x20query_type=\x27service_panorama\x27','failure_if_skipped':'plan/chain\x20drift\x20(missing\x20binding,\x20wrong\x20allocator\x20order)\x20stays\x20undetected\x20until\x20an\x20order\x20hits\x20it'}),b;}function buildCreationPlan(a){const b=[],c=new Map(a['nodes']['map'](k=>[k['id'],k])),f=new Map();for(const k of a['nodes'])f['set'](k['id'],new Set());for(const l of a['edges']){if(!f['has'](l['from'])||!c['has'](l['to']))continue;const m=l['relation']==='has_guard'?l['to']:l['from'],o=l['relation']==='has_guard'?l['from']:l['to'];if(m===o||!f['has'](m))continue;f['get'](m)['add'](o);}for(const p of a['nodes']){for(const q of Object['values'](p['config'])){q['type']==='address_ref'&&q['targetId']!==p['id']&&f['has'](q['targetId'])&&f['get'](p['id'])['add'](q['targetId']);}}const g=a['nodes']['filter'](r=>r['type']==='service')['map'](r=>r['id']);if(g['length']>0x0)for(const r of a['nodes']){if(r['type']!=='guard')continue;const s=f['get'](r['id']);if(s===undefined)continue;for(const t of g)s['add'](t);}const h=new Map([...f]['map'](([u,v])=>[u,[...v]])),i=[],j=new Map(f);while(j['size']>0x0){const u=[...j['entries']()]['filter'](([,v])=>v['size']===0x0)['map'](([v])=>v);if(u['length']===0x0){i['push'](...j['keys']());break;}u['sort']();for(const v of u){i['push'](v),j['delete'](v);for(const w of j['values']())w['delete'](v);}}return i['forEach']((x,y)=>{const z=c['get'](x),A=z['config']['name'],B=A?.['type']==='string'?A['value']:x,C=B['includes']('/')?B['replaceAll']('/','__'):B;b['push']({'order':y+0x1,'node_id':x,'object_type':z['type'],'suggested_name':C,'depends_on':h['get'](x)??[],'operation_hint':'Create\x20'+z['type']+'\x20via\x20onchain_operations,\x20then\x20configure.\x20Purpose:\x20'+z['purpose']});}),b;}function resolveTemplate(a){if(!a)return undefined;const b=getTemplate(a);if(b)return b;const c=getTemplatesByIndustry(a);if(c['length']>0x0)return c[0x0];return undefined;}export async function handleMerchantGuide(a){const b=a['guide_state']??{'intent_text':''},c=a['guide_confirm']??{},d={'intent_text':(a['intent']??b['intent_text']??'')['trim'](),'confirmed_industry':c['industry']??b['confirmed_industry'],'currency':c['currency']??b['currency'],'deliverables':c['deliverables']??b['deliverables'],'payment_override':c['payment']??b['payment_override'],'trust_override':c['trust']??b['trust_override'],'adopted_module_ids':c['adopted_module_ids']??b['adopted_module_ids'],'guard_resolutions':{...b['guard_resolutions']??{},...c['guard_resolutions']??{}},'review_mode':c['review_mode']??b['review_mode'],'reward_funding':c['reward_funding']??b['reward_funding']};for(const L of Object['keys'](d)){if(d[L]===undefined)delete d[L];}if(d['guard_resolutions']&&Object['keys'](d['guard_resolutions'])['length']===0x0)delete d['guard_resolutions'];if(!d['intent_text'])throw new Error('merchant_guide\x20requires\x20\x27intent\x27\x20(business\x20description)\x20for\x20Step\x201.\x20'+'Example:\x20intent=\x27I\x20want\x20to\x20offer\x20online\x20design\x20service\x20with\x20milestone\x20payments\x27.\x20'+'Pass\x20the\x20returned\x20guide_state\x20back\x20UNCHANGED\x20on\x20subsequent\x20calls,\x20plus\x20guide_confirm\x20for\x20merchant\x20decisions.');const e=await analyzeIntent(d['intent_text'],{'preferredIndustry':d['confirmed_industry'],'currency':d['currency']});if(!d['confirmed_industry'])return{'action':'merchant_guide','current_step':0x2,'step_name':'Industry\x20Matching','guide_state':d,'intent_draft':e['intent'],'industry_options':{'inferred':e['inferredIndustry'],'confidence':e['industryConfidence'],'similar':e['similarIndustries']},'warnings':e['warnings'],'next_action':'Confirm\x20the\x20industry\x20by\x20calling\x20merchant_guide\x20again\x20with\x20guide_state\x20(UNCHANGED)\x20'+('plus\x20guide_confirm={\x20industry:\x20\x27<one\x20of:\x20'+e['similarIndustries']['join'](',\x20')+'\x20—\x20or\x20any\x20other\x20industry\x20id>\x27\x20}')};const f={...e['intent'],'industry':d['confirmed_industry'],'deliverables':d['deliverables']??e['intent']['deliverables'],'payment':{...e['intent']['payment'],...d['payment_override']??{}},'trust':{...e['intent']['trust'],...d['trust_override']??{}}},h=d['adopted_module_ids']?d['adopted_module_ids']['map'](M=>getBusinessModule(M))['filter'](M=>!!M):recommendModules(d['confirmed_industry'],d['intent_text'],{'maxModules':0x5}),i=a['template_override']??resolveTemplate(d['confirmed_industry']);if(!i)throw new Error('No\x20compilable\x20template\x20found\x20for\x20industry\x20\x27'+d['confirmed_industry']+'\x27.\x20'+'Register\x20a\x20template\x20via\x20industry_pack_operation\x20or\x20pass\x20template_override\x20explicitly.');const j={'currency':d['currency']??f['payment']['currency'],...d['payment_override']?{'payment':d['payment_override']}:{},...d['trust_override']?{'trust':d['trust_override']}:{},...d['deliverables']?{'deliverables':d['deliverables']}:{},...d['adopted_module_ids']?{'adopted_module_ids':d['adopted_module_ids']}:{},...d['review_mode']?{'review_mode':d['review_mode']}:{},...d['reward_funding']!==undefined?{'reward_funding':d['reward_funding']}:{}},l={};for(const M of h){for(const N of M['templateRefs']){if(N['object_type']!=='guard')continue;const O=i['guards']['filter'](P=>P['template_id']===N['template_id']);if(O['length']===0x0)continue;for(const P of O){l[P['key']??N['template_id']+'#'+i['guards']['indexOf'](P)]={'kind':'template','template_id':N['template_id']};}}}Object['assign'](l,d['guard_resolutions']??{});const m=compileTemplate(i,j,{'nameBase':a['name_base']??i['id'],'intent':d['intent_text'],'guardResolutions':l}),n=reflux(m['plan']),o=n['plan'],p=n['audit'],q=auditScore(p),r=planBlueprint(o,f,h['map'](Q=>Q['id'])),s=m['blockers']['map'](Q=>({'module':'template','missing_constraints':[Q['code']],'fix':Q['detail']})),t=derivePlanSatisfiedConstraints(r,f),u=h['map'](Q=>checkModuleConstraints(Q,t)),w=deriveDeployTimeChecks(r),x=derivePostDeploySteps(r),y=r['edges']['some'](Q=>Q['relation']==='has_order_allocators')?recipientDesignGuidance()['map'](Q=>({'id':Q['id'],'move_recipient':Q['move_recipient'],'semantics':Q['semantics'],'required_constraints':Q['required_constraints'],'finding_if_unmet':Q['finding_if_unmet']})):undefined,z=[...u['filter'](Q=>!Q['adopted']),...s],A=p['findings']['filter'](Q=>Q['level']==='critical'||Q['level']==='high')['map'](Q=>({'module':'audit','missing_constraints':[Q['rule_id']],'fix':Q['title']+'\x20—\x20'+(Q['mitigation']??Q['description'])})),B=[{'re':/allocat|refund|recover|claimed_by|settle|escrow/i,'scene':'service_order_allocators_guard'},{'re':/\bbuy\b|purchase|allowlist|blocklist/i,'scene':'service_buy_guard'},{'re':/reward/i,'scene':'reward_claim'},{'re':/write_guard|repository_write/i,'scene':'repository_write_guard'},{'re':/arbitrat|ruling|voting/i,'scene':'arbitration_usage_guard'},{'re':/forward|node|witness|deliver|review|cancel|expire|submission|progress/i,'scene':'machine_forward_guard'}],C=[{'re':/claimed_by\s*some\s*==\s*true/i,'tpl':'tpl_allocator_node_gate_recover'},{'re':/claimed_by\s*some\s*==\s*false|claimed_by\s*(?:is\s+)?none|\brefund|\bcancel/i,'tpl':'tpl_allocator_node_gate_refund'},{'re':/claimed_by\s*some|\brecover|\baward/i,'tpl':'tpl_allocator_node_gate_recover'}],D=[{'host':'machine','re':/pattern\.time_lock_progress/i,'tpl':'tpl_time_lock_progress'},{'host':'machine','re':/pattern\.time_window_upper_bound/i,'tpl':'tpl_time_window_upper'},{'host':'reward','re':/pattern\./i,'tpl':'tpl_reward_one_time_claim'}],E=(Q,R,S,T,U)=>{let V;const W=/tpl_[a-z0-9_]+/['exec'](Q+'\x20'+R);W!==null&&(V=GUARD_TEMPLATES['find'](a1=>a1['id']===W[0x0])?.['scene_id']);V===undefined&&T!=='reward'&&/\ballocators?\b|claimed_by|guard_identifier|order_allocators/i['test'](R)&&(V='service_order_allocators_guard');if(V===undefined){if(T==='machine'||T==='machine_forward')V='machine_forward_guard';else{if(T==='reward')V='reward_claim';else{if(T==='repository')V='repository_write_guard';else{if(T==='arbitration')V='arbitration_usage_guard';else{const a1=B['find'](a2=>a2['re']['test'](Q+'\x20'+R));V=a1?.['scene'];}}}}}if(V===undefined)return undefined;const X=getTemplatesByScene(V);let Y=S!==undefined&&X['some'](a2=>a2['applicable_industries']['includes'](S))?X['filter'](a2=>a2['applicable_industries']['includes'](S)):X;if(/\btime[_-]?lock|\bwindow|\btimeout|\bduration|\bdeadline|\bdays?\b|\bclock|\bdelay/i['test'](Q+'\x20'+R)){const a2=Y['filter'](a3=>JSON['stringify'](a3['example_root']??{})['toLowerCase']()['includes']('clock'));if(a2['length']===0x0)return undefined;Y=a2;}if(U['length']>0x0){const a3=Y['filter'](a4=>{const a5=[];if(a4['example_root']!==undefined){const a6=JSON['stringify'](a4['example_root']);for(const a7 of a6['matchAll'](/"query":"([^"]+)"/g))a5['push'](a7[0x1]);if(a6['includes']('\x22type\x22:\x22query_progress_history_time\x22'))a5['push']('progress.history.time');if(a6['includes']('\x22type\x22:\x22query_progress_history_find\x22'))a5['push']('progress.history.find');}return a5['some'](a8=>U['some'](a9=>a8===a9||a8['startsWith'](a9)||a9['startsWith'](a8)));});if(a3['length']===0x0)return undefined;Y=a3;}const Z=T==='machine_forward'?'machine':T,a0=D['find'](a4=>a4['host']===Z&&a4['re']['test'](Q+'\x20'+R)&&Y['some'](a5=>a5['id']===a4['tpl']));a0!==undefined&&(Y=[...Y]['sort']((a4,a5)=>(a4['id']===a0['tpl']?0x0:0x1)-(a5['id']===a0['tpl']?0x0:0x1)));if(V==='service_order_allocators_guard'){const a4=C['find'](a5=>a5['re']['test'](Q+'\x20'+R));a4!==undefined&&(Y=[...Y]['sort']((a5,a6)=>(a5['id']===a4['tpl']?0x0:0x1)-(a6['id']===a4['tpl']?0x0:0x1)));}return Y['slice'](0x0,0x3)['map'](a5=>({'template_id':a5['id'],'name':a5['name'],'parameters':a5['parameters']['map'](a6=>({'name':a6['name'],'required':a6['required'],...a6['default']!==undefined?{'default':a6['default']}:{},'description':a6['description']}))}));},F=m['unresolved']['map'](Q=>{const R=getGuardDesignPattern(Q['template_id']),S=E(Q['template_id'],Q['purpose'],i?.['industry'],Q['host'],R?.['key_queries']??[]),T=new Set((i?.['machine_shape']??[])['flatMap'](Y=>(Y['from']??[])['map'](Z=>typeof Z==='string'?undefined:Z['guard_key'])['filter'](Z=>typeof Z==='string'))),U=new Map((i?.['allocator']['rows']??[])['filter'](Y=>typeof Y['guard_key']==='string')['map'](Y=>[Y['guard_key'],Y])),V=U['get'](Q['key']),W=V!==undefined&&!T['has'](Q['key']),X=!T['has'](Q['key'])&&!U['has'](Q['key'])&&Q['policy']===undefined&&Q['host']!=='reward'&&!(Q['host']==='service'&&Q['key']==='buy');return{'key':Q['key'],'template_id':Q['template_id'],'host':Q['host'],'purpose':Q['purpose'],...R?.['logic_summary']?{'logic_summary':R['logic_summary']}:{},...R?.['key_queries']?.['length']?{'key_queries':R['key_queries']}:{},...S!==undefined&&S['length']>0x0?{'suggested_templates':S}:{},'how_to_resolve':'guide_confirm.guard_resolutions[\x27'+Q['key']+'\x27]\x20=\x20{\x20kind:\x20\x27inline\x27,\x20table,\x20root\x20}\x20(a\x20resolved\x20Guard),\x20'+'or\x20{\x20kind:\x20\x27template\x27,\x20template_id:\x20\x27tpl_*\x27,\x20params\x20}\x20when\x20a\x20guard\x20template\x20matches\x20this\x20design'+(S!==undefined&&S['length']>0x0?'\x20(suggested_templates\x20below\x20list\x20the\x20matching\x20executable\x20forms\x20and\x20their\x20parameters)':'.')+(Q['host']==='machine'&&!W?'\x20MACHINE-HOST\x20REQUIREMENT:\x20the\x20inline\x20table\x20MUST\x20declare\x20the\x20protocol\x20task-binding\x20slot\x20'+'{\x20identifier:\x20254,\x20b_submission:\x20true,\x20value_type:\x20\x22Address\x22\x20}\x20—\x20the\x20forward\x27s\x20passport\x20only\x20emits\x20'+'DECLARED\x20slots,\x20so\x20a\x20machine-forward\x20guard\x20without\x20this\x20row\x20aborts\x20EVERY\x20order-bound\x20forward\x20'+'it\x20gates\x20(code\x2011)\x20and\x20the\x20pre-publish\x20gate\x20blocks\x20the\x20Machine\x20publish.':'')+(W?'\x20ALLOCATOR-RAIL\x20NOTE:\x20this\x20design\x20gates\x20an\x20allocator\x20rail\x20(not\x20a\x20machine\x20forward)\x20—\x20do\x20NOT\x20add\x20the\x20'+'254\x20task-binding\x20slot:\x20a\x20254\x20declaration\x20arms\x20once-per-order\x20replay\x20protection\x20at\x20alloc\x20time\x20'+'(allocation\x20ONCE_FOR_OBJECT)\x20and\x20permanently\x20blocks\x20multi-fire\x20rails\x20(a\x20second\x20release\x20aborts\x20'+'E_ONCE_TRIGGERED).\x20The\x20kernel\x20injects\x20254\x20ONLY\x20for\x20GuardIdentifier(254)-recipient\x20rails.'+(V['recipient']==='guard_identifier'&&V['recipient_key']!=='254'?'\x20This\x20rail\x27s\x20recipient\x20is\x20GuardIdentifier('+(V['recipient_key']??'0')+')\x20—\x20the\x20inline\x20table\x20MUST\x20'+('declare\x20slot\x20'+(V['recipient_key']??'0')+'\x20as\x20an\x20Address\x20submission\x20instead\x20(N-K21:\x20the\x20passport\x20')+'submits\x20the\x20ORDER\x20address\x20into\x20it;\x20an\x20undeclared\x20slot\x20makes\x20the\x20rail\x20unexecutable).':''):'')+(X?'\x20ADVISORY\x20DESIGN\x20(run75747\x20F-38):\x20nothing\x20in\x20this\x20archetype\x20binds\x20this\x20key\x20—\x20no\x20machine\x20edge,\x20allocator\x20'+'rail,\x20repository\x20policy,\x20or\x20service\x20mount.\x20If\x20this\x20design\x20does\x20not\x20apply\x20to\x20your\x20shop\x20you\x20may\x20resolve\x20'+'it\x20with\x20{\x20kind:\x20\x27omit\x27\x20}\x20instead\x20of\x20building\x20a\x20Guard\x20no\x20one\x20consumes:\x20the\x20design\x20leaves\x20'+'pending_guard_designs,\x20no\x20Guard\x20object\x20is\x20created,\x20and\x20the\x20decision\x20is\x20recorded\x20in\x20the\x20build\x27s\x20'+'warnings.\x20An\x20omit\x20of\x20a\x20BOUND\x20design\x20is\x20refused\x20(GUARD_OMIT_UNSUPPORTED).':'')};}),G=z['length']>0x0||p['blocking'],H=checkGameTheoryConstraints(r,f),I=assessWorkflowDesign(r),J=buildCreationPlan(r),K=i?{'name':i['id'],'display_name':i['variant']+'\x20archetype\x20('+i['industry']+')','source':a['template_override']?'custom':'builtin','risk_appetite':'medium','key_risk':i['key_risk'],'machine_shape':i['machine_shape']['map'](Q=>({'name':Q['name'],'role':Q['role'],...Q['operator']?{'operator':Q['operator']}:{},...Q['semantic_role']?{'semantic_role':Q['semantic_role']}:{}})),'guards':i['guards']['map'](Q=>({'template_id':Q['template_id'],'host':Q['host'],'purpose':Q['purpose']})),'allocator':i['allocator'],'risk_constraints':{},'build_notes':i['build_notes']??[],...i['time_anchors']?{'time_anchors':i['time_anchors']}:{}}:undefined;return{'action':'merchant_guide','current_step':G?0x9:0xa,'step_name':G?'Harness\x20Check\x20(issues\x20found)':'Submission\x20Plan\x20Ready','guide_state':{...d,'adopted_module_ids':h['map'](Q=>Q['id'])},'intent':{'intent_type':f['intent'],'industry':f['industry'],'roles':f['roles'],'deliverables':f['deliverables'],'payment':f['payment'],'trust':f['trust']},'adopted_modules':h['map'](Q=>({'id':Q['id'],'name':Q['name'],'description':Q['description'],'requires_keeper':Q['requiresKeeper'],'keeper_hint':Q['keeperHint'],'user_protections':Q['userProtections'],'merchant_obligations':Q['merchantObligations']})),'mode_prior':K,...K?.['time_anchors']?{'time_anchor_instructions':Object['entries'](K['time_anchors'])['map'](([Q,R])=>{const S=R['startsWith']('order.time')?'\x20(order-creation\x20time\x20—\x20PRE-checkout\x20branches\x20only;\x20a\x20post-checkout\x20window\x20anchored\x20here\x20is\x20unreachable)':R['startsWith']('progress.current_time')?'\x20(entry\x20time\x20of\x20the\x20window\x27s\x20source\x20node\x20—\x20witness-derived\x20via\x20OrderProgress,\x20one\x20Guard\x20serves\x20every\x20order)':R['startsWith']('absolute_date')?'\x20(per-order\x20instance\x20Guard\x20—\x20the\x20absolute\x20date\x20differs\x20per\x20booking)':'';return'Time\x20windows\x20for\x20\x27'+Q+'\x27\x20anchor\x20to\x20'+R+S;})}:{},'blueprint':{'nodes':r['nodes']['map'](Q=>({'id':Q['id'],'type':Q['type'],'purpose':Q['purpose']})),'edges':r['edges']['map'](Q=>({'from':Q['from'],'to':Q['to'],'relation':Q['relation'],'required':Q['required']}))},'evaluation_preview':{'estimatedRiskScore':q,'estimatedTrustScore':Math['max'](0x0,0x64-q),'estimatedCompletenessScore':Math['min'](0x64,0x1e+h['length']*0x8),'keyRisks':p['findings']['filter'](Q=>Q['level']==='critical'||Q['level']==='high')['map'](Q=>Q['title']),'strengths':p['findings']['filter'](Q=>Q['level']==='info')['map'](Q=>Q['title']),'moduleBoosts':{}},'graph_validation':{'valid':p['issues']['length']===0x0,'hard_violations':p['issues']['map'](Q=>({'id':Q['code'],'description':Q['detail'],'fix':'Fix\x20the\x20Plan\x20structure'})),'soft_notes':p['findings']['filter'](Q=>Q['level']==='medium'||Q['level']==='low')['map'](Q=>({'id':Q['rule_id'],'description':Q['title']}))},'harness_check':{'module_constraints':u['map'](Q=>({'module':Q['module'],'plan_satisfied':Q['adopted'],'missing':Q['missingConstraints'],'reason':Q['module']==='discount_lifecycle'&&Q['adopted']?'ADOPTION-BASED\x20satisfaction\x20(disclosure\x20obligations\x20accepted\x20with\x20module\x20adoption),\x20NOT\x20plan\x20structure:\x20creation_plan\x20intentionally\x20carries\x20no\x20Discount/SKU\x20nodes\x20—\x20they\x20are\x20minted\x20in\x20merchant\x20post-deploy\x20steps\x20and\x20verified\x20on-chain\x20after\x20deploy\x20(query\x20the\x20minted\x20Service.discount).\x20Reward\x20rails\x20likewise\x20ride\x20review_mode\x20compile\x20emission,\x20not\x20a\x20creation_plan\x20node.':Q['reason'],'estimated_score_boost':Q['estimatedScoreBoost']})),'blocking_issues':[...u['filter'](Q=>!Q['adopted'])['map'](Q=>({'module':Q['module'],'missing_constraints':Q['missingConstraints'],'fix':Q['reason']})),...s['map'](Q=>({'module':Q['module'],'missing_constraints':Q['missing_constraints'],'fix':Q['fix']})),...A],'deploy_time_checks':w,'recipient_design_guidance':y},'game_theory':{'summary':H['summary'],'coverage':H['coveredCount']+'/'+H['totalCount'],'exposed_scenarios':H['exposedScenarios'],'wow_alignments':H['wowAlignments'],'scenarios':H['results']['map'](Q=>({'scenario':Q['scenario'],'covered':Q['covered'],'conflict':Q['conflict'],'user_protection':Q['userProtection'],'evaluation_metric':Q['evaluationMetric'],'recommendation':Q['recommendation']}))},'workflow_design_assessment':{'score':I['score'],'summary':I['summary'],'findings':I['findings']['map'](Q=>({'kind':Q['kind'],'severity':Q['severity'],'message':Q['message'],'fix':Q['fix']})),'checks':I['checks']['map'](Q=>({'id':Q['id'],'dimension':Q['dimension'],'passed':Q['passed'],'severity':Q['severity'],'message':Q['message'],'fix':Q['fix']}))},'creation_plan':J,'post_deploy_steps':x,...F['length']>0x0?{'pending_guard_designs':F}:{},'warnings':[...e['warnings'],...m['omitted']['length']>0x0?['Advisory\x20guard\x20design(s)\x20omitted\x20by\x20decision\x20({kind:\x27omit\x27}):\x20'+m['omitted']['join'](',\x20')+'\x20—\x20'+'no\x20Guard\x20created,\x20nothing\x20binds\x20them\x20(run75747\x20F-38).']:[]],'next_action':z['length']>0x0?'Resolve\x20the\x20blocking_issues\x20above\x20(adjust\x20guide_confirm\x20payment/trust/modules,\x20or\x20accept\x20and\x20drop\x20the\x20affected\x20module\x20via\x20guide_confirm.adopted_module_ids),\x20then\x20call\x20merchant_guide\x20again.':p['blocking']?'The\x20plan\x20audit\x20is\x20BLOCKING\x20(see\x20harness_check.blocking_issues\x20and\x20audit.findings\x20—\x20e.g.\x20a\x20terminal\x20node\x20with\x20no\x20fund\x20exit,\x20or\x20an\x20unresolved\x20guard\x20bound\x20to\x20a\x20fund\x20path).\x20Fix\x20the\x20plan/template\x20or\x20guard\x20resolutions\x20and\x20call\x20merchant_guide\x20again;\x20do\x20NOT\x20materialize\x20this\x20plan.'+(F['length']>0x0?'\x20Pending\x20guard\x20designs:\x20'+F['length']+'\x20listed\x20in\x20pending_guard_designs\x20—\x20resolve\x20each\x20via\x20guide_confirm.guard_resolutions\x20(kind\x20\x27inline\x27\x20with\x20the\x20Guard\x20table+root,\x20kind\x20\x27template\x27\x20with\x20a\x20tpl_*\x20id,\x20or\x20{kind:\x27omit\x27}\x20for\x20advisory\x20designs\x20that\x20do\x20not\x20apply\x20to\x20this\x20shop),\x20then\x20call\x20merchant_guide\x20again.':''):'Plan\x20ready.\x20Materialize:\x20create\x20the\x20objects\x20in\x20creation_plan\x20order\x20via\x20onchain_operations,\x20then\x20run\x20post_deploy_steps\x20in\x20order\x20(compensation\x20fund\x20top-up,\x20arbitration\x20unpause,\x20per-order\x20settlement\x20via\x20alloc_by_guard).\x20WIZARD\x20CONTRACT:\x20on\x20the\x20Service\x20publish\x20call\x20(data.publish=true),\x20pass\x20this\x20exact\x20plan\x20back\x20as\x20data.creation_plan\x20—\x20the\x20publish\x20gate\x20replays\x20its\x20freeze\x20matrix\x20and\x20rejects\x20the\x20publish\x20if\x20any\x20gate\x20fails;\x20omitting\x20it\x20leaves\x20the\x20manual\x20path\x20ungated.','plan':o,'audit':{'issues':p['issues'],'findings':p['findings'],'blocking':p['blocking'],'score':q},'reflux':{'applied':n['applied'],'blocks':n['blocks'],'iterations':n['iterations']}};}export function listBusinessModules(){return CORE_BUSINESS_MODULES['map'](a=>({'id':a['id'],'name':a['name'],'description':a['description'],'industry_fit':a['industryFit'],'addresses_pain_points':a['addressesPainPoints'],'requires_keeper':a['requiresKeeper']}));}
|
|
1
|
+
import{analyzeIntent}from'./intent-analyzer.js';import{compileTemplate}from'../../composition/compile.js';import{reflux,auditScore}from'../../composition/reflux.js';import{planBlueprint}from'../../composition/blueprint-view.js';import{getGuardDesignPattern}from'../../knowledge/guard-design-patterns.js';import{GUARD_TEMPLATES,getTemplatesByScene}from'../../knowledge/guard-templates.js';import{checkGameTheoryConstraints}from'./game-theory.js';import{assessWorkflowDesign}from'./workflow-design-assessment.js';import{CORE_BUSINESS_MODULES,getBusinessModule,recommendModules,checkModuleConstraints,moduleHasIntentEvidence}from'../../extensions/business-modules.js';import{recipientDesignGuidance}from'../../knowledge/recipient-constraint.js';import{getTemplate,getTemplatesByIndustry}from'../../knowledge/template-loader.js';import{getScenarioMode}from'../../knowledge/scenario-modes.js';function derivePlanSatisfiedConstraints(a,b){const c=new Set(),d=i=>a['edges']['some'](j=>j['relation']===i),e=i=>a['nodes']['some'](j=>j['id']===i),f=i=>a['nodes']['some'](j=>j['type']===i),g=i=>a['adoptedModules']['includes'](i);if(d('has_order_allocators'))c['add']('order_allocators_bound');if(d('uses_machine'))c['add']('machine_bound_before_publish');if(d('has_arbitration'))c['add']('arbitration_bound_to_service');if(e('machine'))c['add']('machine_published');if(e('repository'))c['add']('repository_published');if(e('service'))c['add']('service_published');e('permission_arb')&&e('permission')&&c['add']('arbitration_permission_independent');g('independent_arbitration')&&a['nodes']['some'](i=>i['id']['includes']('guard')&&i['id']['includes']('arbitration'))&&c['add']('voting_guard_configured');g('accept_timeout_protection')&&(c['add']('time_guard_configured'),c['add']('adminUnhold_permission'));g('milestone_escrow')&&f('guard')&&c['add']('milestone_forward_guarded');const h=d('has_order_allocators');if(h&&b['payment']['allocation']&&b['payment']['allocation']['length']>0x0){c['add']('allocators_configured');const i=b['payment']['allocation']['reduce']((k,l)=>k+l['percentage'],0x0);if(Math['abs'](i-0x64)<0.001)c['add']('sharing_sum_100');const j=b['payment']['allocation']['find'](k=>k['recipient']==='platform');if(!j||j['percentage']===0x0)c['add']('platform_fee_zero');g('supplier_collaboration')&&(c['add']('allocation_sharing_configured'),c['add']('demand_configured'));}g('wip_provenance')&&e('repository')&&c['add']('wip_hash_before_delivery');g('subscription_with_proof')&&e('repository')&&(c['add']('delivery_guard_per_cycle'),c['add']('repository_updated'));g('damage_attestation')&&(c['add']('pre_rental_hash'),c['add']('post_rental_hash'));g('refund_guarantee')&&(c['add']('compensation_fund_positive'),c['add']('refund_guard_configured'));if(g('praise_incentive')){const k=a['plan']['steps']['some'](m=>m['op']==='create'&&m['object']==='reward'),l=a['plan']['steps']['some'](m=>m['op']==='configure'&&m['method']==='coin_add');k&&l&&(c['add']('reward_pool_funded'),c['add']('reward_claim_replay_armed'));}g('discount_lifecycle')&&(c['add']('discount_budget_planned'),c['add']('discount_burn_disclosed'));if(g('after_sales_guarantee')){const m=a['plan']['steps']['find'](p=>p['op']==='create'&&p['object']==='machine'),n=m?.['params']?.['nodes']??[],o=n['some'](p=>/return|refund|exchange|replace|reship|swap|warranty|repair/i['test'](p['name']??''));o&&(c['add']('after_sales_rail_present'),c['add']('after_sales_polarity_pair'),c['add']('after_sales_window_anchored'),c['add']('after_sales_no_double_remedy'));}if(g('acceptance_judging')){const p=a['plan']['steps']['find'](t=>t['op']==='create'&&t['object']==='machine'),q=p?.['params']?.['nodes']??[],r=q['map'](t=>t['name']??''),s=r['some'](t=>/accept|approv|award|ruling|place|placement|triage|vot|evaluat|winner|judge/i['test'](t));if(s){const t=r['some'](u=>/revis|redeliver|resubmit|rework/i['test'](u));c['add']('acceptance_race_free');if(e('arbitration'))c['add']('acceptance_judge_independent');if(!t||e('repository'))c['add']('acceptance_revision_bounded');}}if(g('installment_deposit')){const u=a['plan']['steps']['find'](z=>z['op']==='create'&&z['object']==='machine'),v=u?.['params']?.['nodes']??[],w=v['map'](z=>z['name']??''),x=w['some'](z=>/(deposit|down_?pay|balance_due|balance_owed|installment|milestone|awaiting|owed)/i['test'](z)),y=w['some'](z=>/(paid|funded|captured|settled)/i['test'](z));x&&y&&(c['add']('installment_funding_gated'),c['add']('installment_deposit_exit'),c['add']('installment_release_once'));}if(g('affiliate_commission')){const z=a['plan']['steps']['find'](D=>D['op']==='create'&&D['object']==='machine'),A=z?.['params']?.['nodes']??[],B=A['map'](D=>D['name']??''),C=B['some'](D=>/(commission|affiliate|referr|attribut|partner_?payout)/i['test'](D));C&&(c['add']('affiliate_rail_present'),c['add']('affiliate_clawback_disclosed'),c['add']('affiliate_window_anchored'));}if(g('crowdfunding')){const D=a['plan']['steps']['find'](H=>H['op']==='create'&&H['object']==='machine'),E=D?.['params']?.['nodes']??[],F=E['map'](H=>H['name']??''),G=F['some'](H=>/(releas|settle|funded|disburs|project)/i['test'](H));G&&(c['add']('crowdfunding_exit_rail_present'),c['add']('crowdfunding_aggregate_writer_bound'),c['add']('crowdfunding_disclosure_present'));}return c;}function deriveDeployTimeChecks(a,b=![]){const c=[];return a['nodes']['some'](d=>d['id']==='machine')&&c['push']('Machine\x20published\x20AND\x20bound\x20to\x20Service\x20BEFORE\x20Service.publish\x20(machine\x20is\x20immutable\x20after\x20publish)'),a['edges']['some'](d=>d['relation']==='has_order_allocators')&&(c['push']('Service.order_allocators\x20bound\x20(verify\x20via\x20query_objects\x20after\x20publish\x20—\x20order_allocators\x20is\x20FROZEN\x20at\x20publish)'),c['push']('Settlement\x20is\x20NOT\x20triggered\x20by\x20reaching\x20a\x20Machine\x20node\x20alone\x20—\x20an\x20explicit\x20alloc_by_guard\x20call\x20(keeper\x20or\x20merchant)\x20fires\x20the\x20settlement\x20Allocator\x20once\x20its\x20Guard\x20passes.\x20Declare\x20the\x20node->allocator\x20trigger\x20(which\x20terminal\x20node\x20unlocks\x20settlement)\x20and\x20schedule\x20the\x20keeper\x20step;\x20otherwise\x20orders\x20stall\x20at\x20the\x20settle\x20node\x20with\x20allocation_state=pending')),(a['adoptedModules']['includes']('refund_guarantee')||a['nodes']['some'](d=>d['id']==='arbitration'))&&(b?c['push']('COMPENSATION\x20FUND:\x20DO\x20NOT\x20FUND\x20—\x20this\x20template\x20declares\x20compensation_fund_policy=forbidden\x20(the\x20unreserved\x20pool\x20is\x20double-takeable\x20via\x20refund-then-claim\x20until\x20the\x20arbitration-escrow\x20shared\x20gate\x20lands;\x20user\x20ruling\x202026-10-15).\x20Disputes\x20ride\x20the\x20escrow\x20rails\x20only;\x20the\x20compensation_fund_topup\x20post-deploy\x20step\x20is\x20intentionally\x20absent'):c['push']('compensation_fund\x20MUST\x20be\x20able\x20to\x20cover\x20payouts:\x20a\x20claim\x20against\x20a\x20drained\x20fund\x20aborts\x20(service.move\x20E_COMPENSATION_NOT_MATCH).\x20Size\x20the\x20fund\x20>=\x203x\x20a\x20TYPICAL\x20single\x20order\x20(3x\x20IS\x20the\x20chain\x27s\x20hard\x20award\x20ceiling,\x20MAX_INDEMNITY_MULTIPLE)\x20—\x20per-order\x20coverage\x20is\x20enforced\x20at\x20BUY\x20time\x20(each\x20order\x20is\x20checked\x20against\x203x\x20ITS\x20OWN\x20amount,\x20not\x203x\x20the\x20highest\x20SKU),\x20so\x20publish\x20no\x20longer\x20blocks\x20on\x20coverage;\x20verify\x20the\x20on-chain\x20balance\x20before\x20going\x20live')),a['nodes']['some'](d=>d['id']==='arbitration')&&(c['push']('Arbitration.permission\x20!=\x20Service.permission\x20on-chain\x20(E_ARBITRATION_PERMISSION_CONFLICT=33)'),c['push']('A\x20freshly\x20created\x20Arbitration\x20defaults\x20to\x20PAUSED\x20—\x20unpause\x20it\x20(arbitration\x20activation)\x20before\x20the\x20first\x20case\x20can\x20be\x20filed,\x20otherwise\x20dispute\x20filing\x20aborts')),a['nodes']['some'](d=>d['id']==='repository')&&c['push']('Repository\x20published\x20and\x20Guard\x20write\x20validation\x20configured'),c['push']('After\x20materialization,\x20confirm\x20the\x20on-chain\x20state\x20matches\x20this\x20plan\x20(query_toolkit\x20query_type=\x27service_panorama\x27)'),c;}function derivePostDeploySteps(a,b=![]){const c=[];return!b&&(a['adoptedModules']['includes']('refund_guarantee')||a['nodes']['some'](d=>d['id']==='arbitration'))&&c['push']({'order':c['length']+0x1,'id':'compensation_fund_topup','title':'Top\x20up\x20the\x20compensation\x20fund','when':'After\x20the\x20Service\x20object\x20is\x20created,\x20BEFORE\x20the\x20service\x20goes\x20live\x20(before\x20the\x20first\x20order)','action':'Call\x20compensation_fund_add\x20sized\x20>=\x203x\x20a\x20TYPICAL\x20single\x20order\x20(3x\x20=\x20the\x20chain\x27s\x20hard\x20award\x20ceiling,\x20MAX_INDEMNITY_MULTIPLE;\x20above\x203x\x20only\x20buys\x20headroom\x20for\x20concurrent\x20claims).\x20Per-order\x20coverage\x20is\x20enforced\x20at\x20BUY\x20time\x20—\x20each\x20incoming\x20order\x20is\x20checked\x20against\x203x\x20ITS\x20OWN\x20amount\x20and\x20under-covered\x20orders\x20cannot\x20be\x20created\x20—\x20then\x20verify\x20the\x20on-chain\x20fund\x20balance\x20via\x20query_objects','tool_hint':'onchain_operations\x20(service.compensation_fund_add)','failure_if_skipped':'a\x20compensation\x20claim\x20against\x20an\x20empty\x20fund\x20aborts\x20(E_COMPENSATION_NOT_MATCH,\x20testnet\x20lesson\x20R-4)'}),a['nodes']['some'](d=>d['id']==='arbitration')&&(c['push']({'order':c['length']+0x1,'id':'arbitration_unpause','title':'Activate\x20the\x20Arbitration\x20(unpause)','when':'Immediately\x20after\x20the\x20Arbitration\x20object\x20is\x20created,\x20before\x20the\x20first\x20dispute\x20is\x20filed','action':'Unpause/activate\x20the\x20Arbitration\x20so\x20dispute\x20filing\x20is\x20accepted;\x20keep\x20its\x20Permission\x20distinct\x20from\x20the\x20Service\x20Permission\x20(E_ARBITRATION_PERMISSION_CONFLICT=33)','tool_hint':'onchain_operations\x20(arbitration\x20activation)','failure_if_skipped':'a\x20freshly\x20created\x20Arbitration\x20defaults\x20to\x20PAUSED\x20—\x20dispute\x20filing\x20aborts\x20(testnet\x20lesson\x20R-5)'}),c['push']({'order':c['length']+0x1,'id':'voting_guard_open_vote','title':'Bind\x20the\x20open-vote\x20voting_guard\x20(tpl_voting_guard_open_vote)','when':'After\x20the\x20Arbitration\x20is\x20activated,\x20BEFORE\x20the\x20first\x20dispute\x20can\x20be\x20voted\x20on','action':'Create\x20the\x20open-vote\x20guard\x20(tpl_voting_guard_open_vote:\x20always-true\x20root\x20+\x20FixedValue\x20weight\x201\x20=\x20one\x20person\x20one\x20vote)\x20and\x20set\x20it\x20as\x20the\x20Arbitration\x27s\x20voting_guard;\x20skip\x20this\x20step\x20ONLY\x20for\x20a\x20deliberately\x20closed\x20panel\x20(then\x20bind\x20tpl_voting_guard_numeric_weight\x20with\x20the\x20arbitrator\x20address\x20list\x20instead)','tool_hint':'onchain_operations\x20(guard\x20creation\x20+\x20arbitration\x20voting_guard\x20set,\x20op=\x27set\x27)','failure_if_skipped':'an\x20EMPTY\x20voting_guard\x20dead-locks\x20every\x20plain\x20vote\x20on\x20permission\x20358\x20(creator-admin\x20only)\x20—\x20the\x20first\x20dispute\x20cannot\x20reach\x20a\x20verdict\x20if\x20the\x20admin\x20is\x20unresponsive\x20(crs9-F-36,\x20R-ARB-VOTE-LOCK)'})),a['edges']['some'](d=>d['relation']==='has_order_allocators')&&c['push']({'order':c['length']+0x1,'id':'settlement_alloc_by_guard','title':'Fire\x20settlement\x20via\x20alloc_by_guard\x20(keeper/merchant\x20step)','when':'Recurring\x20—\x20after\x20EACH\x20order\x20reaches\x20its\x20settlement\x20terminal\x20node\x20(declare\x20which\x20node\x20unlocks\x20settlement)','action':'Call\x20alloc_by_guard\x20on\x20the\x20order\x27s\x20allocation\x20with\x20the\x20settlement\x20Guard;\x20reaching\x20the\x20Machine\x20node\x20alone\x20does\x20NOT\x20settle\x20(allocation_state\x20stays\x20pending)','tool_hint':'onchain_operations\x20(allocation.alloc_by_guard);\x20schedule\x20as\x20a\x20keeper\x20step','failure_if_skipped':'orders\x20stall\x20at\x20the\x20settle\x20node\x20with\x20funds\x20locked\x20in\x20escrow\x20(testnet\x20lesson\x20R-2)'}),c['push']({'order':c['length']+0x1,'id':'verify_service_panorama','title':'Verify\x20the\x20on-chain\x20state\x20matches\x20the\x20plan','when':'After\x20all\x20creation\x20steps\x20and\x20the\x20steps\x20above\x20are\x20done','action':'Run\x20the\x20service\x20panorama\x20query\x20and\x20diff\x20it\x20against\x20this\x20plan\x27s\x20blueprint/creation_plan','tool_hint':'query_toolkit\x20query_type=\x27service_panorama\x27','failure_if_skipped':'plan/chain\x20drift\x20(missing\x20binding,\x20wrong\x20allocator\x20order)\x20stays\x20undetected\x20until\x20an\x20order\x20hits\x20it'}),c;}function buildCreationPlan(a){const b=[],c=new Map(a['nodes']['map'](k=>[k['id'],k])),f=new Map();for(const k of a['nodes'])f['set'](k['id'],new Set());for(const l of a['edges']){if(!f['has'](l['from'])||!c['has'](l['to']))continue;const m=l['relation']==='has_guard'?l['to']:l['from'],o=l['relation']==='has_guard'?l['from']:l['to'];if(m===o||!f['has'](m))continue;f['get'](m)['add'](o);}for(const p of a['nodes']){for(const q of Object['values'](p['config'])){q['type']==='address_ref'&&q['targetId']!==p['id']&&f['has'](q['targetId'])&&f['get'](p['id'])['add'](q['targetId']);}}const g=a['nodes']['filter'](r=>r['type']==='service')['map'](r=>r['id']);if(g['length']>0x0)for(const r of a['nodes']){if(r['type']!=='guard')continue;const s=f['get'](r['id']);if(s===undefined)continue;for(const t of g)s['add'](t);}const h=new Map([...f]['map'](([u,v])=>[u,[...v]])),i=[],j=new Map(f);while(j['size']>0x0){const u=[...j['entries']()]['filter'](([,v])=>v['size']===0x0)['map'](([v])=>v);if(u['length']===0x0){i['push'](...j['keys']());break;}u['sort']();for(const v of u){i['push'](v),j['delete'](v);for(const w of j['values']())w['delete'](v);}}return i['forEach']((x,y)=>{const z=c['get'](x),A=z['config']['name'],B=A?.['type']==='string'?A['value']:x,C=B['includes']('/')?B['replaceAll']('/','__'):B;b['push']({'order':y+0x1,'node_id':x,'object_type':z['type'],'suggested_name':C,'depends_on':h['get'](x)??[],'operation_hint':'Create\x20'+z['type']+'\x20via\x20onchain_operations,\x20then\x20configure.\x20Purpose:\x20'+z['purpose']});}),b;}function resolveTemplate(a,b){if(!a)return undefined;const c=getTemplate(a);if(c)return c;const d=getTemplatesByIndustry(a);if(b){const f=b['toLowerCase'](),g=d['filter'](h=>{const i=String(h['product_ref']??'')['trim']()['toLowerCase']();return i['length']>0x0&&f['includes'](i);});if(g['length']===0x1)return g[0x0];}const e=getScenarioMode(a)?.['default_template'];if(e){const h=getTemplate(e);if(h)return h;}if(d['length']>0x0)return d[0x0];return undefined;}export async function handleMerchantGuide(a){const b=a['guide_state']??{'intent_text':''},c=a['guide_confirm']??{},d={'intent_text':(a['intent']??b['intent_text']??'')['trim'](),'confirmed_industry':c['industry']??b['confirmed_industry'],'currency':c['currency']??b['currency'],'deliverables':c['deliverables']??b['deliverables'],'payment_override':c['payment']??b['payment_override'],'trust_override':c['trust']??b['trust_override'],'adopted_module_ids':c['adopted_module_ids']??b['adopted_module_ids'],'guard_resolutions':{...b['guard_resolutions']??{},...c['guard_resolutions']??{}},'review_mode':c['review_mode']??b['review_mode'],'reward_funding':c['reward_funding']??b['reward_funding'],'after_sales_mode':c['after_sales_mode']??b['after_sales_mode'],'acceptance_mode':c['acceptance_mode']??b['acceptance_mode'],'installment_mode':c['installment_mode']??b['installment_mode'],'affiliate_mode':c['affiliate_mode']??b['affiliate_mode'],'crowdfunding_mode':c['crowdfunding_mode']??b['crowdfunding_mode'],'sales':c['sales']??b['sales']};for(const O of Object['keys'](d)){if(d[O]===undefined)delete d[O];}if(d['guard_resolutions']&&Object['keys'](d['guard_resolutions'])['length']===0x0)delete d['guard_resolutions'];if(!d['intent_text'])throw new Error('merchant_guide\x20requires\x20\x27intent\x27\x20(business\x20description)\x20for\x20Step\x201.\x20'+'Example:\x20intent=\x27I\x20want\x20to\x20offer\x20online\x20design\x20service\x20with\x20milestone\x20payments\x27.\x20'+'Pass\x20the\x20returned\x20guide_state\x20back\x20UNCHANGED\x20on\x20subsequent\x20calls,\x20plus\x20guide_confirm\x20for\x20merchant\x20decisions.');const e=await analyzeIntent(d['intent_text'],{'preferredIndustry':d['confirmed_industry'],'currency':d['currency']});if(!d['confirmed_industry'])return{'action':'merchant_guide','current_step':0x2,'step_name':'Industry\x20Matching','guide_state':d,'intent_draft':e['intent'],'industry_options':{'inferred':e['inferredIndustry'],'confidence':e['industryConfidence'],'similar':e['similarIndustries']},'warnings':e['warnings'],'next_action':'Confirm\x20the\x20industry\x20by\x20calling\x20merchant_guide\x20again\x20with\x20guide_state\x20(UNCHANGED)\x20'+('plus\x20guide_confirm={\x20industry:\x20\x27<one\x20of:\x20'+e['similarIndustries']['join'](',\x20')+'\x20—\x20or\x20any\x20other\x20industry\x20id>\x27\x20}')};const f={...e['intent'],'industry':d['confirmed_industry'],'deliverables':d['deliverables']??e['intent']['deliverables'],'payment':{...e['intent']['payment'],...d['payment_override']??{}},'trust':{...e['intent']['trust'],...d['trust_override']??{}}},h=!!d['adopted_module_ids'],i=d['adopted_module_ids']?d['adopted_module_ids']['map'](P=>getBusinessModule(P))['filter'](P=>!!P):recommendModules(d['confirmed_industry'],d['intent_text'],{'maxModules':0x5}),j=a['template_override']??resolveTemplate(d['confirmed_industry'],d['intent_text']);if(!j)throw new Error('No\x20compilable\x20template\x20found\x20for\x20industry\x20\x27'+d['confirmed_industry']+'\x27.\x20'+'Register\x20a\x20template\x20via\x20industry_pack_operation\x20or\x20pass\x20template_override\x20explicitly.');const l={'currency':d['currency']??f['payment']['currency'],...d['payment_override']?{'payment':d['payment_override']}:{},...d['trust_override']?{'trust':d['trust_override']}:{},...d['deliverables']?{'deliverables':d['deliverables']}:{},...d['adopted_module_ids']?{'adopted_module_ids':d['adopted_module_ids']}:{},...d['review_mode']?{'review_mode':d['review_mode']}:{},...d['reward_funding']!==undefined?{'reward_funding':d['reward_funding']}:{},...d['after_sales_mode']?{'after_sales_mode':d['after_sales_mode']}:{},...d['acceptance_mode']?{'acceptance_mode':d['acceptance_mode']}:{},...d['installment_mode']?{'installment_mode':d['installment_mode']}:{},...d['affiliate_mode']?{'affiliate_mode':d['affiliate_mode']}:{},...d['crowdfunding_mode']?{'crowdfunding_mode':d['crowdfunding_mode']}:{},...d['sales']?.['length']?{'sales':d['sales']}:{}},m={};for(const P of i){for(const Q of P['templateRefs']){if(Q['object_type']!=='guard')continue;const R=j['guards']['filter'](S=>S['template_id']===Q['template_id']);if(R['length']===0x0)continue;for(const S of R){m[S['key']??Q['template_id']+'#'+j['guards']['indexOf'](S)]={'kind':'template','template_id':Q['template_id']};}}}Object['assign'](m,d['guard_resolutions']??{});const n=compileTemplate(j,l,{'nameBase':a['name_base']??j['id'],'intent':d['intent_text'],'guardResolutions':m}),o=reflux(n['plan']),p=o['plan'],q=o['audit'],r=auditScore(q),s=planBlueprint(p,f,i['map'](T=>T['id'])),t=n['blockers']['map'](T=>({'module':'template','missing_constraints':[T['code']],'fix':T['detail']})),u=derivePlanSatisfiedConstraints(s,f),w=i['map'](T=>checkModuleConstraints(T,u,{'evidenceMatched':h||moduleHasIntentEvidence(T,d['intent_text'])})),x=j['compensation_fund_policy']==='forbidden',y=deriveDeployTimeChecks(s,x),z=derivePostDeploySteps(s,x),A=s['edges']['some'](T=>T['relation']==='has_order_allocators')?recipientDesignGuidance()['map'](T=>({'id':T['id'],'move_recipient':T['move_recipient'],'semantics':T['semantics'],'required_constraints':T['required_constraints'],'finding_if_unmet':T['finding_if_unmet']})):undefined,B=[...w['filter'](T=>!T['adopted']),...t],C=q['findings']['filter'](T=>T['level']==='critical'||T['level']==='high')['map'](T=>({'module':'audit','missing_constraints':[T['rule_id']],'fix':T['title']+'\x20—\x20'+(T['mitigation']??T['description'])})),D=[{'re':/allocat|refund|recover|claimed_by|settle|escrow/i,'scene':'service_order_allocators_guard'},{'re':/\bbuy\b|purchase|allowlist|blocklist/i,'scene':'service_buy_guard'},{'re':/reward/i,'scene':'reward_claim'},{'re':/write_guard|repository_write/i,'scene':'repository_write_guard'},{'re':/arbitrat|ruling|voting/i,'scene':'arbitration_usage_guard'},{'re':/forward|node|witness|deliver|review|cancel|expire|submission|progress/i,'scene':'machine_forward_guard'}],E=[{'re':/claimed_by\s*some\s*==\s*true/i,'tpl':'tpl_allocator_node_gate_recover'},{'re':/claimed_by\s*some\s*==\s*false|claimed_by\s*(?:is\s+)?none|\brefund|\bcancel/i,'tpl':'tpl_allocator_node_gate_refund'},{'re':/claimed_by\s*some|\brecover|\baward/i,'tpl':'tpl_allocator_node_gate_recover'}],F=[{'host':'machine','re':/pattern\.time_lock_progress/i,'tpl':'tpl_time_lock_progress'},{'host':'machine','re':/pattern\.time_window_upper_bound/i,'tpl':'tpl_time_window_upper'},{'host':'reward','re':/pattern\./i,'tpl':'tpl_reward_one_time_claim'}],G=(T,U,V,W,X)=>{let Y;const Z=/tpl_[a-z0-9_]+/['exec'](T+'\x20'+U);Z!==null&&(Y=GUARD_TEMPLATES['find'](a4=>a4['id']===Z[0x0])?.['scene_id']);Y===undefined&&W!=='reward'&&/\ballocators?\b|claimed_by|guard_identifier|order_allocators/i['test'](U)&&(Y='service_order_allocators_guard');if(Y===undefined){if(W==='machine'||W==='machine_forward')Y='machine_forward_guard';else{if(W==='reward')Y='reward_claim';else{if(W==='repository')Y='repository_write_guard';else{if(W==='arbitration')Y='arbitration_usage_guard';else{const a4=D['find'](a5=>a5['re']['test'](T+'\x20'+U));Y=a4?.['scene'];}}}}}if(Y===undefined)return undefined;const a0=getTemplatesByScene(Y);let a1=V!==undefined&&a0['some'](a5=>a5['applicable_industries']['includes'](V))?a0['filter'](a5=>a5['applicable_industries']['includes'](V)):a0;if(/\btime[_-]?lock|\bwindow|\btimeout|\bduration|\bdeadline|\bdays?\b|\bclock|\bdelay/i['test'](T+'\x20'+U)){const a5=a1['filter'](a6=>JSON['stringify'](a6['example_root']??{})['toLowerCase']()['includes']('clock'));if(a5['length']===0x0)return undefined;a1=a5;}if(X['length']>0x0){const a6=Z!==null?a1['find'](a8=>a8['id']===Z[0x0]):undefined,a7=a1['filter'](a8=>{const a9=[];if(a8['example_root']!==undefined){const aa=JSON['stringify'](a8['example_root']);for(const ab of aa['matchAll'](/"query":"([^"]+)"/g))a9['push'](ab[0x1]);if(aa['includes']('\x22type\x22:\x22query_progress_history_time\x22'))a9['push']('progress.history.time');if(aa['includes']('\x22type\x22:\x22query_progress_history_find\x22'))a9['push']('progress.history.find');}return a9['some'](ac=>X['some'](ad=>ac===ad||ac['startsWith'](ad)||ad['startsWith'](ac)));});if(a6!==undefined&&!a7['includes'](a6))a7['push'](a6);if(a7['length']===0x0)return undefined;a1=a7;}const a2=W==='machine_forward'?'machine':W,a3=F['find'](a8=>a8['host']===a2&&a8['re']['test'](T+'\x20'+U)&&a1['some'](a9=>a9['id']===a8['tpl']));a3!==undefined&&(a1=[...a1]['sort']((a8,a9)=>(a8['id']===a3['tpl']?0x0:0x1)-(a9['id']===a3['tpl']?0x0:0x1)));if(Y==='service_order_allocators_guard'){const a8=E['find'](a9=>a9['re']['test'](T+'\x20'+U));a8!==undefined&&(a1=[...a1]['sort']((a9,aa)=>(a9['id']===a8['tpl']?0x0:0x1)-(aa['id']===a8['tpl']?0x0:0x1)));}return a1['slice'](0x0,0x3)['map'](a9=>({'template_id':a9['id'],'name':a9['name'],'parameters':a9['parameters']['map'](aa=>({'name':aa['name'],'required':aa['required'],...aa['default']!==undefined?{'default':aa['default']}:{},'description':aa['description']}))}));},H=n['unresolved']['map'](T=>{const U=getGuardDesignPattern(T['template_id']),V=G(T['template_id'],T['purpose'],j?.['industry'],T['host'],U?.['key_queries']??[]),W=new Set((j?.['machine_shape']??[])['flatMap'](a1=>(a1['from']??[])['map'](a2=>typeof a2==='string'?undefined:a2['guard_key'])['filter'](a2=>typeof a2==='string'))),X=new Map((j?.['allocator']['rows']??[])['filter'](a1=>typeof a1['guard_key']==='string')['map'](a1=>[a1['guard_key'],a1])),Y=X['get'](T['key']),Z=Y!==undefined&&!W['has'](T['key']),a0=!W['has'](T['key'])&&!X['has'](T['key'])&&T['policy']===undefined&&T['host']!=='reward'&&!(T['host']==='service'&&T['key']==='buy');return{'key':T['key'],'template_id':T['template_id'],'host':T['host'],'purpose':T['purpose'],...U?.['logic_summary']?{'logic_summary':U['logic_summary']}:{},...U?.['key_queries']?.['length']?{'key_queries':U['key_queries']}:{},...V!==undefined&&V['length']>0x0?{'suggested_templates':V}:{},'how_to_resolve':'guide_confirm.guard_resolutions[\x27'+T['key']+'\x27]\x20=\x20{\x20kind:\x20\x27inline\x27,\x20table,\x20root\x20}\x20(a\x20resolved\x20Guard),\x20'+'or\x20{\x20kind:\x20\x27template\x27,\x20template_id:\x20\x27tpl_*\x27,\x20params\x20}\x20when\x20a\x20guard\x20template\x20matches\x20this\x20design'+(V!==undefined&&V['length']>0x0?'\x20(suggested_templates\x20below\x20list\x20the\x20matching\x20executable\x20forms\x20and\x20their\x20parameters)':'.')+(T['host']==='machine'&&!Z?'\x20MACHINE-HOST\x20REQUIREMENT:\x20the\x20inline\x20table\x20MUST\x20declare\x20the\x20protocol\x20task-binding\x20slot\x20'+'{\x20identifier:\x20254,\x20b_submission:\x20true,\x20value_type:\x20\x22Address\x22\x20}\x20—\x20the\x20forward\x27s\x20passport\x20only\x20emits\x20'+'DECLARED\x20slots,\x20so\x20a\x20machine-forward\x20guard\x20without\x20this\x20row\x20aborts\x20EVERY\x20order-bound\x20forward\x20'+'it\x20gates\x20(code\x2011)\x20and\x20the\x20pre-publish\x20gate\x20blocks\x20the\x20Machine\x20publish.':'')+(Z?'\x20ALLOCATOR-RAIL\x20NOTE:\x20this\x20design\x20gates\x20an\x20allocator\x20rail\x20(not\x20a\x20machine\x20forward)\x20—\x20do\x20NOT\x20add\x20the\x20'+'254\x20task-binding\x20slot:\x20a\x20254\x20declaration\x20arms\x20once-per-order\x20replay\x20protection\x20at\x20alloc\x20time\x20'+'(allocation\x20ONCE_FOR_OBJECT)\x20and\x20permanently\x20blocks\x20multi-fire\x20rails\x20(a\x20second\x20release\x20aborts\x20'+'E_ONCE_TRIGGERED).\x20The\x20kernel\x20injects\x20254\x20ONLY\x20for\x20GuardIdentifier(254)-recipient\x20rails.'+(Y['recipient']==='guard_identifier'&&Y['recipient_key']!=='254'?'\x20This\x20rail\x27s\x20recipient\x20is\x20GuardIdentifier('+(Y['recipient_key']??'0')+')\x20—\x20the\x20inline\x20table\x20MUST\x20'+('declare\x20slot\x20'+(Y['recipient_key']??'0')+'\x20as\x20an\x20Address\x20submission\x20instead\x20(N-K21:\x20the\x20passport\x20')+'submits\x20the\x20ORDER\x20address\x20into\x20it;\x20an\x20undeclared\x20slot\x20makes\x20the\x20rail\x20unexecutable).':''):'')+(a0?'\x20ADVISORY\x20DESIGN\x20(run75747\x20F-38):\x20nothing\x20in\x20this\x20archetype\x20binds\x20this\x20key\x20—\x20no\x20machine\x20edge,\x20allocator\x20'+'rail,\x20repository\x20policy,\x20or\x20service\x20mount.\x20If\x20this\x20design\x20does\x20not\x20apply\x20to\x20your\x20shop\x20you\x20may\x20resolve\x20'+'it\x20with\x20{\x20kind:\x20\x27omit\x27\x20}\x20instead\x20of\x20building\x20a\x20Guard\x20no\x20one\x20consumes:\x20the\x20design\x20leaves\x20'+'pending_guard_designs,\x20no\x20Guard\x20object\x20is\x20created,\x20and\x20the\x20decision\x20is\x20recorded\x20in\x20the\x20build\x27s\x20'+'warnings.\x20An\x20omit\x20of\x20a\x20BOUND\x20design\x20is\x20refused\x20(GUARD_OMIT_UNSUPPORTED).':'')};}),I=B['length']>0x0||q['blocking'],J={'expiredTerminal':(j['machine_shape']??[])['some'](T=>/expire|deadline|timeout/i['test'](String(T?.['name']??'')))},K=checkGameTheoryConstraints(s,f,J),L=assessWorkflowDesign(s),M=buildCreationPlan(s),N=j?{'name':j['id'],'display_name':j['variant']+'\x20archetype\x20('+j['industry']+')','source':a['template_override']?'custom':'builtin','risk_appetite':'medium','key_risk':j['key_risk'],'machine_shape':j['machine_shape']['map'](T=>({'name':T['name'],'role':T['role'],...T['operator']?{'operator':T['operator']}:{},...T['semantic_role']?{'semantic_role':T['semantic_role']}:{}})),'guards':j['guards']['map'](T=>({'template_id':T['template_id'],'host':T['host'],'purpose':T['purpose']})),'allocator':j['allocator'],'risk_constraints':{},'build_notes':j['build_notes']??[],...j['time_anchors']?{'time_anchors':j['time_anchors']}:{}}:undefined;return{'action':'merchant_guide','current_step':I?0x9:0xa,'step_name':I?'Harness\x20Check\x20(issues\x20found)':'Submission\x20Plan\x20Ready','guide_state':{...d,'adopted_module_ids':i['map'](T=>T['id'])},'intent':{'intent_type':f['intent'],'industry':f['industry'],'roles':f['roles'],'deliverables':f['deliverables'],'payment':f['payment'],'trust':f['trust']},'adopted_modules':i['map'](T=>({'id':T['id'],'name':T['name'],'description':T['description'],'requires_keeper':T['requiresKeeper'],'keeper_hint':T['keeperHint'],'user_protections':T['userProtections'],'merchant_obligations':T['merchantObligations']})),'mode_prior':N,...N?.['time_anchors']?{'time_anchor_instructions':Object['entries'](N['time_anchors'])['map'](([T,U])=>{const V=U['startsWith']('order.time')?'\x20(order-creation\x20time\x20—\x20PRE-checkout\x20branches\x20only;\x20a\x20post-checkout\x20window\x20anchored\x20here\x20is\x20unreachable)':U['startsWith']('progress.current_time')?'\x20(entry\x20time\x20of\x20the\x20window\x27s\x20source\x20node\x20—\x20witness-derived\x20via\x20OrderProgress,\x20one\x20Guard\x20serves\x20every\x20order)':U['startsWith']('absolute_date')?'\x20(per-order\x20instance\x20Guard\x20—\x20the\x20absolute\x20date\x20differs\x20per\x20booking)':'';return'Time\x20windows\x20for\x20\x27'+T+'\x27\x20anchor\x20to\x20'+U+V;})}:{},'blueprint':{'nodes':s['nodes']['map'](T=>({'id':T['id'],'type':T['type'],'purpose':T['purpose']})),'edges':s['edges']['map'](T=>({'from':T['from'],'to':T['to'],'relation':T['relation'],'required':T['required']}))},'evaluation_preview':{'estimatedRiskScore':r,'estimatedCompletenessScore':Math['min'](0x64,0x1e+i['length']*0x8),'keyRisks':q['findings']['filter'](T=>T['level']==='critical'||T['level']==='high')['map'](T=>T['title']),'strengths':q['findings']['filter'](T=>T['level']==='info')['map'](T=>T['title']),'moduleBoosts':{}},'graph_validation':{'valid':q['issues']['length']===0x0,'hard_violations':q['issues']['map'](T=>({'id':T['code'],'description':T['detail'],'fix':'Fix\x20the\x20Plan\x20structure'})),'soft_notes':q['findings']['filter'](T=>T['level']==='medium'||T['level']==='low')['map'](T=>({'id':T['rule_id'],'description':T['title']}))},'harness_check':{'module_constraints':w['map'](T=>{const U=T['module']==='discount_lifecycle'&&T['adopted']?'ADOPTION-BASED\x20satisfaction\x20(disclosure\x20obligations\x20accepted\x20with\x20module\x20adoption),\x20NOT\x20plan\x20structure:\x20creation_plan\x20intentionally\x20carries\x20no\x20Discount/SKU\x20nodes\x20—\x20they\x20are\x20minted\x20in\x20merchant\x20post-deploy\x20steps\x20and\x20verified\x20on-chain\x20after\x20deploy\x20(query\x20the\x20minted\x20Service.discount).\x20Reward\x20FUNDING\x20rides\x20review_mode\x20compile\x20emission,\x20BUT\x20the\x20reward\x20claim\x20GUARD\x20SPEC\x20must\x20still\x20be\x20declared\x20in\x20the\x20plan\x27s\x20guards[]\x20(host:\x27reward\x27)\x20—\x20compile\x20emits\x20the\x20rail\x20only\x20from\x20that\x20spec,\x20and\x20REVIEW_REWARD_GUARD_MISSING\x20hard-blocks\x20publish\x20when\x20it\x20is\x20omitted\x20(G-02,\x20onlyfans-mn\x20261019:\x20the\x20old\x20prose\x20denied\x20the\x20guard\x20spec\x20and\x20deadlocked\x20every\x20reward\x20publish).':T['reason'],V=T['evidence_matched']===![]?''+(U?U+'\x20':'')+'Adopted\x20WITHOUT\x20explicit\x20intent\x20evidence\x20(score-based\x20auto-recommendation\x20only):\x20estimated_score_boost\x20recorded\x20as\x200.\x20Keep\x20it\x20deliberately\x20or\x20drop\x20it\x20via\x20guide_state.adopted_module_ids.':U;return{'module':T['module'],'plan_satisfied':T['adopted'],'missing':T['missingConstraints'],'reason':V,'estimated_score_boost':T['estimatedScoreBoost'],'evidence_matched':T['evidence_matched']};}),'blocking_issues':[...w['filter'](T=>!T['adopted'])['map'](T=>({'module':T['module'],'missing_constraints':T['missingConstraints'],'fix':T['reason']})),...t['map'](T=>({'module':T['module'],'missing_constraints':T['missing_constraints'],'fix':T['fix']})),...C],'deploy_time_checks':y,'recipient_design_guidance':A},'game_theory':{'summary':K['summary'],'coverage':K['coveredCount']+'/'+K['totalCount'],'exposed_scenarios':K['exposedScenarios'],'wow_alignments':K['wowAlignments'],'scenarios':K['results']['map'](T=>({'scenario':T['scenario'],'covered':T['covered'],'conflict':T['conflict'],'user_protection':T['userProtection'],'evaluation_metric':T['evaluationMetric'],'recommendation':T['recommendation']}))},'workflow_design_assessment':{'score':L['score'],'summary':L['summary'],'findings':L['findings']['map'](T=>({'kind':T['kind'],'severity':T['severity'],'message':T['message'],'fix':T['fix']})),'checks':L['checks']['map'](T=>({'id':T['id'],'dimension':T['dimension'],'passed':T['passed'],'severity':T['severity'],'message':T['message'],'fix':T['fix']}))},'creation_plan':M,'post_deploy_steps':z,...H['length']>0x0?{'pending_guard_designs':H}:{},...H['length']>0x0&&(p['pending_guards']?.['length']??0x0)!==H['length']?{'pending_count_note':'Two\x20counts,\x20two\x20views:\x20pending_guard_designs\x20lists\x20'+H['length']+'\x20unresolved\x20design(s)\x20(compile\x20view\x20—\x20includes\x20advisory\x20designs\x20with\x20no\x20edge/rail/policy/buy\x20mount);\x20'+('the\x20plan\x20audit\x20counts\x20'+(p['pending_guards']?.['length']??0x0)+'\x20(plan\x20view\x20—\x20site-bound\x20designs\x20only;\x20the\x20rule-pack\x20titles\x20\x22of\x20N\x20pending\x20in\x20total\x22\x20quote\x20this).\x20')+'The\x20LIST\x20is\x20the\x20resolution\x20fill\x20space;\x20the\x20audit\x20number\x20is\x20its\x20site-bound\x20subset.'}:{},'warnings':[...e['warnings'],...n['omitted']['length']>0x0?['Advisory\x20guard\x20design(s)\x20omitted\x20by\x20decision\x20({kind:\x27omit\x27}):\x20'+n['omitted']['join'](',\x20')+'\x20—\x20'+'no\x20Guard\x20created,\x20nothing\x20binds\x20them\x20(run75747\x20F-38).']:[]],'next_action':B['length']>0x0?'Resolve\x20the\x20blocking_issues\x20above\x20(adjust\x20guide_confirm\x20payment/trust/modules,\x20or\x20accept\x20and\x20drop\x20the\x20affected\x20module\x20via\x20guide_confirm.adopted_module_ids),\x20then\x20call\x20merchant_guide\x20again.':q['blocking']?'The\x20plan\x20audit\x20is\x20BLOCKING\x20(see\x20harness_check.blocking_issues\x20and\x20audit.findings\x20—\x20e.g.\x20a\x20terminal\x20node\x20with\x20no\x20fund\x20exit,\x20or\x20an\x20unresolved\x20guard\x20bound\x20to\x20a\x20fund\x20path).\x20Fix\x20the\x20plan/template\x20or\x20guard\x20resolutions\x20and\x20call\x20merchant_guide\x20again;\x20do\x20NOT\x20materialize\x20this\x20plan.'+(H['length']>0x0?'\x20Pending\x20guard\x20designs:\x20'+H['length']+'\x20listed\x20in\x20pending_guard_designs\x20—\x20resolve\x20each\x20via\x20guide_confirm.guard_resolutions\x20(kind\x20\x27inline\x27\x20with\x20the\x20Guard\x20table+root,\x20kind\x20\x27template\x27\x20with\x20a\x20tpl_*\x20id,\x20or\x20{kind:\x27omit\x27}\x20for\x20advisory\x20designs\x20that\x20do\x20not\x20apply\x20to\x20this\x20shop),\x20then\x20call\x20merchant_guide\x20again.':''):'Plan\x20ready.\x20Materialize:\x20create\x20the\x20objects\x20in\x20creation_plan\x20order\x20via\x20onchain_operations,\x20then\x20run\x20post_deploy_steps\x20in\x20order\x20('+z['map'](T=>T['id'])['join'](',\x20')+').\x20WIZARD\x20CONTRACT:\x20on\x20the\x20Service\x20publish\x20call\x20(data.publish=true),\x20pass\x20this\x20exact\x20plan\x20back\x20as\x20data.creation_plan\x20—\x20the\x20publish\x20gate\x20replays\x20its\x20freeze\x20matrix\x20and\x20rejects\x20the\x20publish\x20if\x20any\x20gate\x20fails;\x20omitting\x20it\x20leaves\x20the\x20manual\x20path\x20ungated.','plan':p,'audit':{'issues':q['issues'],'findings':q['findings'],'blocking':q['blocking'],'score':r},'reflux':{'applied':o['applied'],'blocks':o['blocks'],'iterations':o['iterations']}};}export function listBusinessModules(){return CORE_BUSINESS_MODULES['map'](a=>({'id':a['id'],'name':a['name'],'description':a['description'],'industry_fit':a['industryFit'],'addresses_pain_points':a['addressesPainPoints'],'requires_keeper':a['requiresKeeper']}));}
|
|
@@ -34,14 +34,14 @@ export interface MigrationLog {
|
|
|
34
34
|
findings: string[];
|
|
35
35
|
};
|
|
36
36
|
questions?: MigrationQuestion[];
|
|
37
|
-
network: "testnet" | "mainnet";
|
|
37
|
+
network: "testnet" | "mainnet" | "localnet";
|
|
38
38
|
}
|
|
39
39
|
export interface MigrationPlanInput {
|
|
40
40
|
url?: string;
|
|
41
41
|
description: string;
|
|
42
42
|
template_id?: string;
|
|
43
43
|
industry?: Industry;
|
|
44
|
-
network?: "testnet" | "mainnet";
|
|
44
|
+
network?: "testnet" | "mainnet" | "localnet";
|
|
45
45
|
}
|
|
46
46
|
export declare function matchTemplate(description: string): {
|
|
47
47
|
template: IndustryTemplate;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{matchScenarioMode}from'../../knowledge/scenario-modes.js';import{getTemplate,listTemplates}from'../../knowledge/template-loader.js';import{scanTemplate}from'../../knowledge/template-scanner.js';import{TEMPLATE_KEYWORDS}from'../../knowledge/builtin-templates.js';function productRefPatterns(a){const b=new Set([a]);return a['includes']('-')&&(b['add'](a['replace'](/-/g,'.')),b['add'](a['replace'](/-/g,'\x20'))),[...b]['map'](c=>new RegExp('\x5cb'+c['replace'](/[.*+?^${}()|[\]\\]/g,'\x5c$&')+'\x5cb','i'));}export function matchTemplate(a){const b=a['toLowerCase'](),{templates:c}=listTemplates();for(const h of c){if(!h['product_ref'])continue;if(productRefPatterns(h['product_ref'])['some'](i=>i['test'](b)))return{'template':h,'confidence':0x1};}const {mode:e,confidence:f}=matchScenarioMode(a);let g;for(const i of c){const j=TEMPLATE_KEYWORDS[i['id']]??[];let k=0x0;for(const m of j){if(b['includes'](m))k+=0x1;}if(e['name']===i['industry'])k+=f;const l=j['length']+0x1;if(!g||k>g['score'])g={'template':i,'score':k,'max':l};}if(!g||g['score']<=0x0)return undefined;return{'template':g['template'],'confidence':Math['min'](0x1,g['score']/g['max'])};}function dryRunRiskCheck(a){const b=scanTemplate(a);return{'passed':b['passed'],'findings':b['findings']['map'](c=>'['+c['severity']+']\x20'+(c['rule_id']??'scan')+':\x20'+c['title']+'\x20—\x20'+c['suggestion'])};}function genericMappedEntries(a){return[{'source_element':'Order\x20lifecycle\x20/\x20status\x20flow','target_object':'Machine','mapping_note':a['machine_shape']['length']+'-node\x20workflow\x20adopted\x20from\x20the\x20'+a['id']+'\x20template'},{'source_element':'Business\x20rules\x20and\x20time\x20windows','target_object':'Guard','mapping_note':a['guards']['length']+'\x20guard\x20templates\x20carry\x20the\x20rule\x20parameters\x20as\x20immutable\x20on-chain\x20conditions'},{'source_element':'Payment\x20split\x20/\x20settlement','target_object':'Allocator','mapping_note':a['allocator']['description']},{'source_element':'Refund\x20policy','target_object':'Allocator\x20(refund\x20route)','mapping_note':'Refunds\x20route\x20via\x20Allocators\x20triggered\x20by\x20business\x20states\x20—\x20never\x20Machine\x20terminal\x20nodes\x20(R-M1-11)'},{'source_element':'Dispute\x20resolution','target_object':'Arbitration','mapping_note':'Independent\x20Arbitration\x20object\x20with\x20its\x20own\x20Permission\x20—\x20disputes\x20flow\x20off-Machine'},{'source_element':'Operator\x20roles\x20(staff/fulfiller/finance)','target_object':'Permission','mapping_note':'Role\x20slots\x20as\x20Permission\x20entities;\x20the\x20order\x20payer\x20acts\x20as\x20the\x20named\x20operator\x20without\x20occupying\x20a\x20slot'},{'source_element':'Evidence\x20and\x20records','target_object':'Repository','mapping_note':'Write-guarded\x20Repository\x20policies\x20anchor\x20evidence\x20hashes\x20(delivery,\x20inspection,\x20settlement\x20ledger)'},{'source_element':'Service\x20listing\x20and\x20pricing','target_object':'Service','mapping_note':'Service\x20carries\x20the\x20sale\x20structure,\x20buy\x20gate,\x20and\x20bound\x20Machine/Guards/Arbitration\x20before\x20publish'}];}function genericUnmappedEntries(a){const b=[{'source_element':'Incumbent\x20platform\x20internal\x20ranking\x20/\x20search\x20algorithm','mapping_note':'Marketplace\x20discovery\x20logic\x20has\x20no\x20on-chain\x20equivalent','reason':'Off-chain\x20platform\x20intelligence\x20—\x20use\x20the\x20WoWok\x20market\x20layer\x20(demand\x20matching)\x20instead'},{'source_element':'Incumbent\x20platform\x20user\x20account\x20/\x20login\x20system','mapping_note':'Identity\x20lives\x20in\x20wallets\x20and\x20Passports,\x20not\x20platform\x20accounts','reason':'WoWok\x20is\x20account-less\x20by\x20design\x20—\x20addresses\x20+\x20Passports\x20replace\x20platform\x20logins'},{'source_element':'Automatic\x20recurring\x20charges\x20(card\x20auto-debit)','mapping_note':'Recurring\x20charges\x20are\x20replaced\x20by\x20explicit\x20per-period\x20subscriber\x20signatures','reason':'Silent\x20auto-charge\x20is\x20an\x20anti-pattern\x20on\x20WoWok\x20—\x20renewal\x20requires\x20the\x20payer\x27s\x20signature\x20every\x20period'}];return a['industry']==='subscription'&&b['push']({'source_element':'Content\x20moderation\x20/\x20takedown\x20pipeline','mapping_note':'Only\x20content\x20hashes\x20live\x20on-chain;\x20content\x20bodies\x20stay\x20off-chain','reason':'Content\x20governance\x20is\x20structurally\x20out\x20of\x20scope\x20for\x20on-chain\x20objects\x20—\x20handle\x20it\x20at\x20the\x20hosting\x20layer'}),(a['industry']==='retail'||a['industry']==='rental')&&b['push']({'source_element':'Physical\x20logistics\x20/\x20courier\x20integration','mapping_note':'Logistics\x20stays\x20off-chain;\x20tracking\x20evidence\x20is\x20anchored\x20via\x20WIP\x20hashes','reason':'Carriers\x20are\x20external\x20systems\x20—\x20the\x20Machine\x20consumes\x20their\x20evidence,\x20not\x20their\x20API'}),b;}function manualReviewEntries(a){const b=[{'source_element':'Fee\x20and\x20split\x20parameters','mapping_note':'Template\x20defaults:\x20'+Object['entries'](a['fee_params'])['map'](([c,d])=>c+'='+d)['join'](',\x20'),'reason':'Confirm\x20or\x20override\x20each\x20parameter\x20before\x20generation'},{'source_element':'Operating\x20role','mapping_note':'Recommended:\x20'+a['recommended_role']+'\x20—\x20'+a['role_rationale'],'reason':'The\x20user\x20may\x20switch\x20role\x20(merchant\x20<->\x20supplier)\x20before\x20apply'},{'source_element':'Target\x20network','mapping_note':'Default\x20testnet\x20for\x20the\x20first\x20deployment','reason':'Mainnet\x20deployment\x20requires\x20explicit\x20user\x20confirmation'}];return a['keeper_dependencies']['length']>0x0&&b['push']({'source_element':'Off-chain\x20keeper\x20operations','mapping_note':'Declared\x20keepers:\x20'+a['keeper_dependencies']['join'](';\x20'),'reason':'Time-driven\x20transitions\x20only\x20ALLOW\x20advancement\x20—\x20someone\x20must\x20run\x20the\x20keepers'}),b;}function wowokAdvantages(a){const b=['Every\x20rule\x20is\x20an\x20immutable\x20on-chain\x20Guard\x20—\x20customers\x20can\x20verify\x20the\x20exact\x20policy\x20before\x20paying','Disputes\x20resolve\x20through\x20independent\x20Arbitration\x20with\x20a\x20funded\x20compensation\x20pool','Fund\x20splits\x20execute\x20by\x20contract\x20at\x20the\x20configured\x20release\x20points\x20—\x20no\x20platform\x20discretion'];return a['industry']==='subscription'&&b['push']('Per-period\x20explicit-signature\x20renewal\x20—\x20the\x20anti-auto-renew\x20trap\x20is\x20a\x20selling\x20point'),a['industry']==='freelance'&&b['push']('Chain-verifiable\x200%\x20(or\x20low)\x20commission\x20via\x20the\x20allocator\x20split\x20itself'),a['industry']==='travel'&&b['push']('Two-tier\x20allocation\x20pays\x20each\x20supplier\x20at\x20its\x20own\x20segment\x20release\x20—\x20multi-party\x20transparency'),a['industry']==='education'&&b['push']('Regulatory\x20prepay\x20caps\x20and\x20per-session\x20release\x20protect\x20students\x20from\x20run-away\x20institutions'),a['industry']==='rental'&&b['push']('Deposit\x20escrow\x20+\x20evidence-gated\x20deduction\x20—\x20neither\x20side\x20can\x20unilaterally\x20seize\x20the\x20deposit'),a['industry']==='retail'&&b['push']('Escrow\x20+\x20confirm-on-receipt\x20release\x20—\x20the\x20buyer\x27s\x20confirmation\x20is\x20the\x20only\x20release\x20trigger'),b;}function customizableModules(a){const b=['independent_arbitration','refund_guarantee','reputation_on_chain','wip_provenance'];switch(a['industry']){case'freelance':return[...b,'milestone_escrow','accept_timeout_protection'];case'rental':return[...b,'damage_attestation'];case'education':return[...b,'accept_timeout_protection'];case'travel':return[...b,'multi_tier_allocation','supplier_collaboration'];case'subscription':return[...b,'subscription_with_proof'];case'retail':return[...b,'accept_timeout_protection'];default:return b;}}export function planMigration(a){let b;if(a['template_id']){b=getTemplate(a['template_id']);if(b&&a['industry']&&b['industry']!==a['industry']){const c=matchTemplate(a['industry']+'\x20'+a['description']);if(c&&c['template']['industry']===a['industry'])b=c['template'];}}else{const d=a['industry']?a['industry']+'\x20'+a['description']:a['description'],e=matchTemplate(d);b=e?.['template'],!b&&a['industry']&&(b=listTemplates()['templates']['find'](f=>f['industry']===a['industry']&&f['archetype']==='leader'));}if(!b)return undefined;return{'source':{'url':a['url'],'description':a['description'],'detected_industry':b['industry'],'matched_template':b['id']},'mapped':genericMappedEntries(b),'unmapped':genericUnmappedEntries(b),'manual_review':manualReviewEntries(b),'wowok_advantages':wowokAdvantages(b),'customizable_modules':customizableModules(b),'role_assessment':{'recommended':b['recommended_role'],'rationale':b['role_rationale'],'alternatives':['merchant','supplier','both']['filter'](f=>f!==b['recommended_role'])},'risk_check':dryRunRiskCheck(b),...b['conditional_guards']?.['length']?{'questions':[...new Set(b['conditional_guards']['map'](f=>f['param']))]['map'](f=>{const g=b['conditional_guards']['find'](h=>h['param']===f);return{'param':f,'question':g['question'],'options':[...g['values']],'default':String(b['fee_params'][f]??'')};})}:{},'network':a['network']??'testnet'};}
|
|
1
|
+
import{matchScenarioMode}from'../../knowledge/scenario-modes.js';import{getTemplate,listTemplates,platformShareBps}from'../../knowledge/template-loader.js';import{scanTemplate}from'../../knowledge/template-scanner.js';import{TEMPLATE_KEYWORDS,TEMPLATE_TAGS}from'../../knowledge/builtin-templates.js';import{buildTemplateIndex,resolveByProductRef}from'../../knowledge/template-index.js';export function matchTemplate(a){const b=a['toLowerCase'](),{templates:c}=listTemplates(),e=buildTemplateIndex(c),f=resolveByProductRef(e,a);if(f){const j=c['find'](k=>k['id']===f);if(j)return{'template':j,'confidence':0x1};}const {mode:g,confidence:h}=matchScenarioMode(a);let i;for(const k of c){const l=TEMPLATE_KEYWORDS[k['id']]??[],m=TEMPLATE_TAGS[k['id']]??[];let n=0x0;for(const p of l){if(b['includes'](p))n+=0x1;}for(const q of m){if(b['includes'](q))n+=0x1;}if(g['name']===k['industry'])n+=h;const o=l['length']+m['length']+0x1;if(!i||n>i['score'])i={'template':k,'score':n,'max':o};}if(!i||i['score']<=0x0)return undefined;return{'template':i['template'],'confidence':Math['min'](0x1,i['score']/ i['max'])};}function dryRunRiskCheck(a){const b=scanTemplate(a),c=b['red_flags'];return{'passed':c['length']===0x0,'findings':b['findings']['map'](d=>'['+d['severity']+']\x20'+(d['rule_id']??'scan')+':\x20'+d['title']+'\x20—\x20'+d['suggestion'])};}function genericMappedEntries(a){return[{'source_element':'Order\x20lifecycle\x20/\x20status\x20flow','target_object':'Machine','mapping_note':a['machine_shape']['length']+'-node\x20workflow\x20adopted\x20from\x20the\x20'+a['id']+'\x20template'},{'source_element':'Business\x20rules\x20and\x20time\x20windows','target_object':'Guard','mapping_note':a['guards']['length']+'\x20guard\x20templates\x20carry\x20the\x20rule\x20parameters\x20as\x20immutable\x20on-chain\x20conditions'},{'source_element':'Payment\x20split\x20/\x20settlement','target_object':'Allocator','mapping_note':a['allocator']['description']},{'source_element':'Refund\x20policy','target_object':'Allocator\x20(refund\x20route)','mapping_note':'Refunds\x20route\x20via\x20Allocators\x20triggered\x20by\x20business\x20states\x20—\x20never\x20Machine\x20terminal\x20nodes\x20(R-M1-11)'},{'source_element':'Dispute\x20resolution','target_object':'Arbitration','mapping_note':'Independent\x20Arbitration\x20object\x20with\x20its\x20own\x20Permission\x20—\x20disputes\x20flow\x20off-Machine'},{'source_element':'Operator\x20roles\x20(staff/fulfiller/finance)','target_object':'Permission','mapping_note':'Role\x20slots\x20as\x20Permission\x20entities;\x20the\x20order\x20payer\x20acts\x20as\x20the\x20named\x20operator\x20without\x20occupying\x20a\x20slot'},{'source_element':'Evidence\x20and\x20records','target_object':'Repository','mapping_note':'Write-guarded\x20Repository\x20policies\x20anchor\x20evidence\x20hashes\x20(delivery,\x20inspection,\x20settlement\x20ledger)'},{'source_element':'Service\x20listing\x20and\x20pricing','target_object':'Service','mapping_note':'Service\x20carries\x20the\x20sale\x20structure,\x20buy\x20gate,\x20and\x20bound\x20Machine/Guards/Arbitration\x20before\x20publish'}];}function genericUnmappedEntries(a){const b=[{'source_element':'Incumbent\x20platform\x20internal\x20ranking\x20/\x20search\x20algorithm','mapping_note':'Marketplace\x20discovery\x20logic\x20has\x20no\x20on-chain\x20equivalent','reason':'Off-chain\x20platform\x20intelligence\x20—\x20use\x20the\x20WoWok\x20market\x20layer\x20(demand\x20matching)\x20instead'},{'source_element':'Incumbent\x20platform\x20user\x20account\x20/\x20login\x20system','mapping_note':'Identity\x20lives\x20in\x20wallets\x20and\x20Passports,\x20not\x20platform\x20accounts','reason':'WoWok\x20is\x20account-less\x20by\x20design\x20—\x20addresses\x20+\x20Passports\x20replace\x20platform\x20logins'},{'source_element':'Automatic\x20recurring\x20charges\x20(card\x20auto-debit)','mapping_note':'Recurring\x20charges\x20are\x20replaced\x20by\x20explicit\x20per-period\x20subscriber\x20signatures','reason':'Silent\x20auto-charge\x20is\x20an\x20anti-pattern\x20on\x20WoWok\x20—\x20renewal\x20requires\x20the\x20payer\x27s\x20signature\x20every\x20period'}];return a['industry']==='subscription'&&b['push']({'source_element':'Content\x20moderation\x20/\x20takedown\x20pipeline','mapping_note':'Only\x20content\x20hashes\x20live\x20on-chain;\x20content\x20bodies\x20stay\x20off-chain','reason':'Content\x20governance\x20is\x20structurally\x20out\x20of\x20scope\x20for\x20on-chain\x20objects\x20—\x20handle\x20it\x20at\x20the\x20hosting\x20layer'}),(a['industry']==='retail'||a['industry']==='rental')&&b['push']({'source_element':'Physical\x20logistics\x20/\x20courier\x20integration','mapping_note':'Logistics\x20stays\x20off-chain;\x20tracking\x20evidence\x20is\x20anchored\x20via\x20WIP\x20hashes','reason':'Carriers\x20are\x20external\x20systems\x20—\x20the\x20Machine\x20consumes\x20their\x20evidence,\x20not\x20their\x20API'}),b;}function manualReviewEntries(a){const b=[{'source_element':'Fee\x20and\x20split\x20parameters','mapping_note':'Template\x20defaults:\x20'+Object['entries'](a['fee_params'])['map'](([c,d])=>c+'='+d)['join'](',\x20'),'reason':'Confirm\x20or\x20override\x20each\x20parameter\x20before\x20generation'},{'source_element':'Operating\x20role','mapping_note':'Recommended:\x20'+a['recommended_role']+'\x20—\x20'+a['role_rationale'],'reason':'The\x20user\x20may\x20switch\x20role\x20(merchant\x20<->\x20supplier)\x20before\x20apply'},{'source_element':'Target\x20network','mapping_note':'Default\x20testnet\x20for\x20the\x20first\x20deployment','reason':'Mainnet\x20deployment\x20requires\x20explicit\x20user\x20confirmation'}];return a['keeper_dependencies']['length']>0x0&&b['push']({'source_element':'Off-chain\x20keeper\x20operations','mapping_note':'Declared\x20keepers:\x20'+a['keeper_dependencies']['join'](';\x20'),'reason':'Time-driven\x20transitions\x20only\x20ALLOW\x20advancement\x20—\x20someone\x20must\x20run\x20the\x20keepers'}),b;}const FACT_PATTERNS=[{'pattern':/\b(?:coupon|promo(?:\s*code)?|discount\s*code|voucher)\b/i,'fact':{'label':'Coupons\x20/\x20promo\x20codes','note':'Maps\x20to\x20a\x20Discount\x20object\x20minted\x20on\x20the\x20Service\x20(budget\x20=\x20max_uses\x20x\x20value;\x20coupons\x20are\x20BURNED\x20on\x20use\x20—\x20never\x20restocked\x20or\x20refunded).\x20Decide\x20the\x20coupon\x20budget\x20and\x20eligibility\x20guard\x20before\x20apply.','disposition':'manual_review'}},{'pattern':/\breview\s+(?:reward|bounty|incentive)|\bincentiv\w+\s+reviews?\b|\bbonus\s+for\s+(?:a\s+)?reviews?\b/i,'fact':{'label':'Review\x20rewards\x20/\x20bounties','note':'Maps\x20to\x20a\x20funded\x20Reward\x20object\x20+\x20claim\x20guard\x20(generation\x20input\x20review_mode=\x27review_reward\x27).\x20The\x20reward\x20pool\x20MUST\x20be\x20funded\x20at\x20generation\x20time\x20(reward_funding\x20input)\x20—\x20an\x20unfunded\x20promise\x20is\x20refused.','disposition':'manual_review'}},{'pattern':/\breturn\s+(?:window|policy)|\b\d{1,3}[\s-]?day\s+returns?\b/i,'fact':{'label':'Return\x20window\x20/\x20policy','note':'Maps\x20to\x20the\x20template\x27s\x20return-window\x20guard\x20knob\x20(return_window_days\x20fee_param).\x20Compare\x20the\x20stated\x20number\x20against\x20the\x20template\x20default\x20before\x20apply\x20—\x20the\x20guard\x20binds\x20only\x20the\x20embedded\x20constant.','disposition':'manual_review'}},{'pattern':/\ba[\s-]?to[\s-]?z\b|\bbuyer\s+protection\b|\bguarantee\s+program\b/i,'fact':{'label':'Platform\x20guarantee\x20program\x20(A-to-z\x20style)','note':'Maps\x20to\x20the\x20independent\x20Arbitration\x20venue\x20plus\x20the\x20order-side\x20claim\x20rails.\x20The\x20refund-vs-award\x20exits\x20must\x20be\x20confirmed\x20at\x20guard\x20resolution\x20—\x20the\x20venue\x20itself\x20moves\x20no\x20funds.','disposition':'manual_review'}},{'pattern':/\b(?:multiple|third[- ]party)\s+sellers?\b|\bper[- ]product\s+split\b|\bmulti[- ]seller\b/i,'fact':{'label':'Multi-seller\x20per-product\x20settlement','note':'NOT\x20supported:\x20one\x20Service/Allocation\x20settles\x20ONE\x20merchant\x27s\x20split.\x20Multi-seller\x20needs\x20one\x20Service\x20per\x20seller\x20(archived\x20framework\x20boundary)\x20—\x20disclose\x20this\x20to\x20the\x20migrating\x20merchant\x20instead\x20of\x20generating\x20a\x20shop\x20that\x20cannot\x20pay\x20out.','disposition':'unmapped'}},{'pattern':/\bsales\s+tax\b|\bVAT\b|\bGST\b/i,'fact':{'label':'Sales\x20tax\x20/\x20VAT\x20handling','note':'NOT\x20supported\x20on-chain:\x20tax\x20remittance\x20is\x20an\x20off-chain\x20compliance\x20flow\x20(archived\x20framework\x20boundary).\x20Disclose;\x20do\x20not\x20model\x20it\x20as\x20a\x20split\x20row.','disposition':'unmapped'}}];function extractSplitMention(a){const b=a;let c=b['match'](/\b(?:platform|service|commission|take)\s*(?:fee|commission|rate|cut)?\s*(?:of|is|at|:)?\s*(\d{1,3}(?:\.\d+)?)\s*%/i)??b['match'](/(\d{1,3}(?:\.\d+)?)\s*%\s*(?:platform\s+)?(?:commission|service\s*fee|take|cut)\b/i);if(c)return{'statedPct':Number(c[0x1]),'raw':c[0x0],'certain':!![]};c=b['match'](/(\d{1,3}(?:\.\d+)?)\s*%\s*(?:goes\s+to|to|for)\s+the\s+(?:merchant|seller|creator|freelancer|artist)/i)??b['match'](/\b(?:merchant|seller|creator|freelancer|artist)s?\s+(?:keep|get|receive|earn)\s+(\d{1,3}(?:\.\d+)?)\s*%/i);if(c)return{'statedPct':0x64-Number(c[0x1]),'raw':c[0x0],'certain':!![]};c=b['match'](/\b(\d{1,3})\s*[/\u2013\u2014-]\s*(\d{1,3})\b(?:\s*%?\s*(?:split|revenue\s*share|share|revenue\s*split))?/i);if(c&&/split|revenue|share|commission/i['test'](b))return{'raw':c[0x0],'certain':![]};return undefined;}function splitConflictEntry(a,b){const c=extractSplitMention(b);if(!c)return undefined;const d=platformShareBps(a['fee_params']),e=d===undefined?undefined:d/0x64;if(e===undefined)return undefined;const f=Object['keys'](a['fee_params'])['find'](h=>/(?:platform|commission|service_fee)[a-z_]*_bps$/['test'](h)&&!/^attributed_/['test'](h));if(c['certain']&&c['statedPct']!==undefined&&Math['abs'](c['statedPct']-e)<0.01)return undefined;const g=c['certain']&&c['statedPct']!==undefined?c['statedPct']+'%\x20platform\x20share':'an\x20orientation-ambiguous\x20ratio\x20('+c['raw']+'\x20—\x20which\x20side\x20is\x20the\x20platform\x20is\x20not\x20stated)';return{'source_element':'Platform\x20commission\x20stated\x20in\x20the\x20description','mapping_note':'Your\x20description\x20states\x20'+g+';\x20template\x20\x27'+a['id']+'\x27\x20defaults\x20to\x20a\x20'+(e+'%\x20platform\x20share\x20(fee_params\x20'+(f??'platform_commission_bps')+'\x20=\x20'+(d??0x0)+'\x20bps).\x20')+'These\x20differ\x20—\x20the\x20template\x20default\x20wins\x20silently\x20unless\x20you\x20override\x20it.','reason':'Confirm\x20the\x20intended\x20split.\x20To\x20apply\x20the\x20stated\x20number,\x20pass\x20'+('fee_overrides[\x22'+(f??'platform_commission_bps')+'\x22]\x20=\x20'+(c['statedPct']!==undefined&&c['certain']?Math['round'](c['statedPct']*0x64):'<bps>')+'\x20')+'(basis\x20points)\x20on\x20template_generate\x20/\x20migration_apply;\x20to\x20keep\x20the\x20template\x20default,\x20ignore\x20this\x20entry.\x20'+'A\x20wrong\x20split\x20lands\x20as\x20a\x20live\x20allocator\x20row\x20and\x20order_allocators\x20is\x20frozen\x20at\x20publish.'};}function disclosedFactEntries(a,b,c){const d=[],e=[],f=new Set([...b,...c]['map'](g=>g['source_element']['toLowerCase']()));for(const {pattern:g,fact:h}of FACT_PATTERNS){if(!g['test'](a))continue;if(f['has'](h['label']['toLowerCase']()))continue;f['add'](h['label']['toLowerCase']());const i={'source_element':h['label'],'mapping_note':'Stated\x20in\x20your\x20description\x20—\x20the\x20deterministic\x20planner\x20does\x20not\x20map\x20it\x20automatically.\x20'+h['note'],'reason':'Explicit\x20disclosure\x20(amz9\x20A-3):\x20stated\x20commerce\x20facts\x20must\x20never\x20be\x20silently\x20dropped.\x20Confirm\x20or\x20decline\x20this\x20item\x20before\x20migration_apply.'};if(h['disposition']==='unmapped')e['push'](i);else d['push'](i);}return{'manual':d,'unmapped':e};}function wowokAdvantages(a){const b=['Every\x20rule\x20is\x20an\x20immutable\x20on-chain\x20Guard\x20—\x20customers\x20can\x20verify\x20the\x20exact\x20policy\x20before\x20paying','Disputes\x20resolve\x20through\x20independent\x20Arbitration\x20with\x20a\x20funded\x20compensation\x20pool','Fund\x20splits\x20execute\x20by\x20contract\x20at\x20the\x20configured\x20release\x20points\x20—\x20no\x20platform\x20discretion'];return a['industry']==='subscription'&&b['push']('Per-period\x20explicit-signature\x20renewal\x20—\x20the\x20anti-auto-renew\x20trap\x20is\x20a\x20selling\x20point'),a['industry']==='freelance'&&b['push']('Chain-verifiable\x200%\x20(or\x20low)\x20commission\x20via\x20the\x20allocator\x20split\x20itself'),a['industry']==='travel'&&b['push']('Two-tier\x20allocation\x20pays\x20each\x20supplier\x20at\x20its\x20own\x20segment\x20release\x20—\x20multi-party\x20transparency'),a['industry']==='education'&&b['push']('Regulatory\x20prepay\x20caps\x20and\x20per-session\x20release\x20protect\x20students\x20from\x20run-away\x20institutions'),a['industry']==='rental'&&b['push']('Deposit\x20escrow\x20+\x20evidence-gated\x20deduction\x20—\x20neither\x20side\x20can\x20unilaterally\x20seize\x20the\x20deposit'),a['industry']==='retail'&&b['push']('Escrow\x20+\x20confirm-on-receipt\x20release\x20—\x20the\x20buyer\x27s\x20confirmation\x20is\x20the\x20only\x20release\x20trigger'),b;}function customizableModules(a){const b=['independent_arbitration','refund_guarantee','reputation_on_chain','wip_provenance'];switch(a['industry']){case'freelance':return[...b,'milestone_escrow','accept_timeout_protection'];case'rental':return[...b,'damage_attestation'];case'education':return[...b,'accept_timeout_protection'];case'travel':return[...b,'multi_tier_allocation','supplier_collaboration'];case'subscription':return[...b,'subscription_with_proof'];case'retail':return[...b,'accept_timeout_protection'];default:return b;}}export function planMigration(a){let b;if(a['template_id']){b=getTemplate(a['template_id']);if(b&&a['industry']&&b['industry']!==a['industry']){const g=matchTemplate(a['industry']+'\x20'+a['description']);if(g&&g['template']['industry']===a['industry'])b=g['template'];}}else{const h=a['industry']?a['industry']+'\x20'+a['description']:a['description'],i=matchTemplate(h);b=i?.['template'],!b&&a['industry']&&(b=listTemplates()['templates']['find'](j=>j['industry']===a['industry']&&j['archetype']==='leader'));}if(!b)return undefined;const c=manualReviewEntries(b),d=genericUnmappedEntries(b),e=splitConflictEntry(b,a['description']);if(e)c['unshift'](e);const f=disclosedFactEntries(a['description'],c,d);return c['push'](...f['manual']),d['push'](...f['unmapped']),{'source':{'url':a['url'],'description':a['description'],'detected_industry':b['industry'],'matched_template':b['id']},'mapped':genericMappedEntries(b),'unmapped':d,'manual_review':c,'wowok_advantages':wowokAdvantages(b),'customizable_modules':customizableModules(b),'role_assessment':{'recommended':b['recommended_role'],'rationale':b['role_rationale'],'alternatives':['merchant','supplier','both']['filter'](j=>j!==b['recommended_role'])},'risk_check':dryRunRiskCheck(b),...b['conditional_guards']?.['length']?{'questions':[...new Set(b['conditional_guards']['map'](j=>j['param']))]['map'](j=>{const k=b['conditional_guards']['find'](l=>l['param']===j);return{'param':j,'question':k['question'],'options':[...k['values']],'default':String(b['fee_params'][j]??'')};})}:{},'network':a['network']??'testnet'};}
|
|
@@ -21,6 +21,11 @@ interface PanoBase {
|
|
|
21
21
|
tags: string[];
|
|
22
22
|
description: string | null;
|
|
23
23
|
};
|
|
24
|
+
freshness?: {
|
|
25
|
+
read_at_ms: number;
|
|
26
|
+
version: string | null;
|
|
27
|
+
note: string;
|
|
28
|
+
};
|
|
24
29
|
data_gaps: string[];
|
|
25
30
|
}
|
|
26
31
|
export interface ProgressPanoramaResult extends PanoBase {
|
|
@@ -229,6 +234,7 @@ export interface RepositoryPanoramaResult extends PanoBase {
|
|
|
229
234
|
value_type: string | null;
|
|
230
235
|
write_guards: number;
|
|
231
236
|
quote_guard: string | null;
|
|
237
|
+
write_once: boolean;
|
|
232
238
|
}[];
|
|
233
239
|
rewards: string[];
|
|
234
240
|
data_entries: {
|
|
@@ -266,7 +272,13 @@ export interface ProofPanoramaResult extends PanoBase {
|
|
|
266
272
|
};
|
|
267
273
|
wts_anchor_check?: AnchorCrossCheck;
|
|
268
274
|
}
|
|
269
|
-
export
|
|
275
|
+
export interface UnknownPanoramaResult extends PanoBase {
|
|
276
|
+
object_type: "Unknown";
|
|
277
|
+
raw_type: string;
|
|
278
|
+
coin_type: string | null;
|
|
279
|
+
fields: Record<string, unknown>;
|
|
280
|
+
}
|
|
281
|
+
export type ObjectPanoramaResult = ProgressPanoramaResult | DemandPanoramaResult | OrderPanoramaResult | AllocationPanoramaResult | ArbPanoramaResult | ArbitrationPanoramaResult | RepositoryPanoramaResult | ProofPanoramaResult | UnknownPanoramaResult;
|
|
270
282
|
export declare function coinOfTypeRaw(typeRaw: unknown): string | null;
|
|
271
283
|
export declare function handleObjectPanorama(v: ProjectInput): Promise<ObjectPanoramaResult>;
|
|
272
284
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Config,LocalMark,query_objects,query_object_last_updated,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{createHash}from'node:crypto';import{checkWtsProofAnchor,readWtsDocument}from'../../communication/wts-attestation.js';import{resolveAddress as a333a}from'../../tools/handlers/name-resolution.js';import{batchReadAddressKeyedFields,batchQueryObjectsByIds,fetchObjectLinkerTx,ringWindowSaturated}from'../../graph/onchain/sdk-batch.js';import{formatMoneyAnnotation}from'./facet-money.js';const js=a=>{if(typeof a==='bigint')return a['toString']();if(a&&typeof a==='object'&&!Array['isArray'](a)){const b={};for(const [c,d]of Object['entries'](a)){b[c]=js(d);}return b;}if(Array['isArray'](a))return a['map'](js);return a;},str=a=>a===null||a===undefined?null:String(a),ownerAddr=a=>{if(typeof a==='string')return a;const b=a;if(b&&typeof b==='object'){if(typeof b['AddressOwner']==='string')return b['AddressOwner'];if(typeof b['ObjectOwner']==='string')return b['ObjectOwner'];const c=Object['values'](b)['find'](d=>typeof d==='string'&&d['length']>0x14);if(typeof c==='string')return c;}return null;},num=a=>{if(typeof a==='bigint')return Number(a);if(typeof a==='number')return Number['isFinite'](a)?a:null;if(typeof a==='string'&&a['trim']()!==''){const b=Number(a);return Number['isFinite'](b)?b:null;}return null;},arr=a=>Array['isArray'](a)?a:[];export function coinOfTypeRaw(a){if(typeof a!=='string'||!a)return null;const b=a['match'](/<(.+)>$/),c=b?.[0x1]?.['trim']();return c&&c['includes']('::')?c:null;}const RELATED_PREVIEW_CAP=0x32;async function buildRelatedList(a,b,c,d,e){const f={'key':a,'items':[],'count':0x0,'window_saturated':![],'preview_truncated':![]};if(!a)return f;try{const g=await fetchObjectLinkerTx(a,c,!![]),h=g?.['items']??[];f['window_saturated']=ringWindowSaturated(h['length']);const j=[];for(const k of h){const l=typeof k?.['who']==='string'?k['who']:'';if(!l||l['toLowerCase']()===b['toLowerCase']())continue;let m;try{m=objectTypeFromAddress(l);}catch{}if(!m)continue;j['push']({'address':l,'object_type':m,'time':typeof k?.['time']==='number'?k['time']:null});}f['count']=j['length'],f['items']=j['slice'](-RELATED_PREVIEW_CAP)['reverse'](),f['preview_truncated']=j['length']>f['items']['length'];}catch{d['push']('related:\x20ObjectLinkerTx('+e+')\x20lookup\x20failed');}return f;}const ARB_STATUS_NAMES={0x0:'Principal_confirming',0x1:'Arbitrator_confirming',0x2:'Voting',0x3:'Arbitrated',0x4:'Objectionable',0x5:'Finished',0x6:'Withdrawn'};async function resolveObject(a,b){const c=await a333a(a,'object_address');let d=b??undefined,f=null;if(!d)d=await Config['Instance']()['network_get']();try{const g=await query_objects({'objects':[c],'network':d});f=g?.['objects']?.[0x0]??null;if(!f&&b){const h=await Config['Instance']()['network_get']();if(h&&h!==d){const i=await query_objects({'objects':[c],'network':h,'no_cache':!![]}),j=i?.['objects']?.[0x0]??null;j&&(f=j,d=h);}}}catch(k){throw new Error('Failed\x20to\x20query\x20'+c+'\x20on\x20'+d+':\x20'+(k instanceof Error?k['message']:String(k)));}if(!f)throw new Error(c+'\x20not\x20found\x20on\x20'+d+(b?'':'\x20(session\x20default\x20network\x20—\x20not\x20an\x20explicit\x20request)')+'.\x20Verify\x20BOTH\x20the\x20object\x20ID\x20and\x20the\x20network:\x20an\x20object\x20that\x20exists\x20on\x20'+'one\x20network\x20answers\x20\x22not\x20found\x22\x20on\x20the\x20other.\x20Pass\x20context_network\x20'+'to\x20query\x20a\x20specific\x20network\x20before\x20concluding\x20the\x20object\x20does\x20not\x20exist.');return f['object']=f['object']??c,{'network':String(d),'obj':f};}async function resolveHead(a,b,c){let d=null,e=[];try{const f=await LocalMark['Instance']()['list']({'address':a});f['length']>0x0&&(d=f[0x0]['name']??null,e=(f[0x0]['tags']??[])['map'](g=>String(g)));}catch{c['push']('head:\x20LocalMark\x20lookup\x20failed');}return{'name':d,'tags':e,'description':str(b['description'])};}async function buildPresenters(a,b,c){const d=[];let e=0x0,f=![];try{const g=await fetchObjectLinkerTx(a,b,!![]),h=Array['isArray'](g?.['items'])?g['items']:[];f=ringWindowSaturated(h['length']);const i=h['map'](l=>({'service':String(l?.['who']??''),'time':typeof l?.['time']==='number'?l['time']:null}))['filter'](l=>objectTypeFromAddress(l['service'])===ObjectType['Service']);e=i['length'];const j=i['slice'](-0x32)['reverse'](),k=await batchReadAddressKeyedFields(a,j['map'](l=>l['service']),b,!![]);for(const l of j){const m=k['get'](l['service']['toLowerCase']());d['push']({'service':l['service'],'recommend':str(m?.['recommend']),'acceptance_score':num(m?.['acceptance_score']),'feedback':str(m?.['feedback']),'feedback_time':num(m?.['feedback_time']),'update_time':num(m?.['update_time'])??l['time']});}}catch{c['push']('presenters:\x20global-table\x20lookup\x20failed\x20(non-blocking)');}return{'count':e,'window_saturated':f,'preview_truncated':e>d['length'],'items':d};}async function buildRepositoryData(a,b,c){return void a,void b,c['push']('data:\x20per-key\x20enumeration\x20requires\x20the\x20{entity,name}\x20pair\x20—\x20showing\x20count\x20only'),{'count':null,'items':[]};}export async function handleObjectPanorama(b){const c=b['object_address']??b['filter'];if(!c)throw new Error('\x27object_address\x27\x20is\x20required\x20for\x20object_panorama\x20(a\x20LocalMark\x20NAME\x20is\x20also\x20accepted).\x20Example:\x20{\x22query_type\x22:\x20\x22object_panorama\x22,\x20\x22object_address\x22:\x20\x220x...\x22}');const {network:e,obj:f}=await resolveObject(c,b['context_network']),g=String(f['object']),h=[],j=await resolveHead(g,f,h),k=String(f['type']??'');if(k==='Progress'){const l=arr(f['session'])[0x0],m=l?{'next_node':str(l['next_node']),'weights':num(l['weights']),'threshold':num(l['threshold']),'forwards':arr(l['forwards'])['map'](q=>{const r=q;return{'forward':str(r['forward'])??'','who':str(r['who']),'accomplished':r['accomplished']===!![],'msg':str(r['msg']),'time':num(r['time'])};})}:null,n=await buildRelatedList(typeof f['machine']==='string'?f['machine']:null,g,e,h,'machine');return{'action':'object_panorama','object':g,'object_type':'Progress','network':e,'head':j,'fields':{'machine':str(f['machine']),'current':str(f['current']),'task':str(f['task']),'history_count':num(f['history_count']),'current_time':num(f['current_time'])},'context_repositories':arr(f['context_repositories'])['map'](q=>String(q)),'operators':arr(f['namedOperator'])['map'](q=>{const r=q;return{'name':str(r['name'])??'','operators':arr(r['operators'])['map'](t=>String(t))};}),'session':m,'related':n,'data_gaps':h};}if(k==='Demand')return{'action':'object_panorama','object':g,'object_type':'Demand','network':e,'head':j,'fields':{'location':str(f['location']),'um':str(f['um']),'permission':str(f['permission']),'presenters_count':num(f['presenters_count'])},'rewards':arr(f['rewards'])['map'](q=>String(q)),'guards':arr(f['guards'])['map'](q=>({'guard':str(q['guard'])??''})),'presenters':await buildPresenters(g,e,h),'data_gaps':h};if(k==='Order'){let q=null;try{const F=await query_object_last_updated({'object':g,'network':e,'previous_transaction':str(f['previousTransaction'])});q=F?.['timestamp_ms']?Number(F['timestamp_ms'])||null:null;}catch{}let r='none',t=null,u=null;const w=str(f['allocation']),x=str(f['progress']),y=str(f['service']),z=[w,x,y]['filter'](G=>!!G);let A=null;if(z['length']>0x0)try{const G=await query_objects({'objects':z,'network':e}),H=G?.['objects']??[];if(w){r='pending';const I=H['find'](K=>K?.['object']===w),J=Number(I?.['balance']??NaN);if(Number['isFinite'](J)&&J===0x0)r='allocated';}if(x){const K=H['find'](L=>L?.['object']===x);t=str(K?.['current']),u=num(K?.['current_time']);}if(y){const L=H['find'](M=>M?.['object']===y);A=coinOfTypeRaw(L?.['type_raw']??L?.['type']);}}catch{}const B=await buildRelatedList(g,g,e,h,'order'),C=str(f['amount']),D=await formatMoneyAnnotation(C,A,e),E=await Promise['all'](arr(f['items'])['map'](async M=>{const N=M,O=str(N['price']),P=await formatMoneyAnnotation(O,A,e);return{'name':str(N['name']),'price':O,'price_display':P['display'],'price_tip':P['tip'],'quantity':str(N['quantity']),'wip_hash':str(N['wip_hash'])};}));return{'action':'object_panorama','object':g,'object_type':'Order','network':e,'head':j,'coin_type':A,'fields':{'service':y,'machine':str(f['machine']),'progress':x,'allocation':w,'discount':str(f['discount']),'amount':C,'amount_display':D['display'],'amount_tip':D['tip'],'owner':ownerAddr(f['builder']??f['owner']),'claimed_by':str(f['claimed_by']),'required_info':str(f['required_info']),'time':num(f['time'])},'updated_ms':q,'related':B,'allocation_state':r,'progress_next':t,'progress_since':u,'items':E,'disputes':arr(f['dispute'])['map'](M=>String(M)),'agents':arr(f['agent'])['map'](M=>String(M)),'data_gaps':h};}if(k==='Arb'){const M=f['indemnity'];let N=null;try{const W=await query_object_last_updated({'object':g,'network':e,'previous_transaction':str(f['previousTransaction'])});N=W?.['timestamp_ms']?Number(W['timestamp_ms'])||null:null;}catch{}const O=str(f['order']);let P=null;if(O)try{const X=await query_objects({'objects':[O],'network':e}),Y=X?.['objects']?.[0x0];P=str(Y?.['service']);}catch{}const Q=await buildRelatedList(g,g,e,h,'arb'),R=coinOfTypeRaw(f['type_raw']),S=str(f['fee']),T=await formatMoneyAnnotation(S,R,e),U=M?str(M['amount']):null,V=await formatMoneyAnnotation(U,R,e);return{'action':'object_panorama','object':g,'object_type':'Arb','network':e,'head':j,'coin_type':R,'fields':{'arbitration':str(f['arbitration']),'order':str(f['order']),'service':P,'fee':S,'fee_display':T['display'],'fee_tip':T['tip'],'feedback':str(f['feedback']),'indemnity':M?{'amount':U,'amount_display':V['display'],'amount_tip':V['tip'],'time':num(M['time'])}:null,'voting_deadline':num(f['voting_deadline']),'objection':str(f['objection']),'status':ARB_STATUS_NAMES[num(f['status'])??-0x1]??str(f['status']),'compensation_time':num(f['compensation_time']),'time':num(f['time']),'type_raw':str(f['type_raw'])},'voted':arr(f['voted'])['map'](Z=>{const a0=Z;return{'voter':str(a0['voter'])??'','agrees':arr(a0['agrees'])['map'](a1=>Number(a1)),'weight':num(a0['weight'])??0x0,'time':num(a0['time'])??0x0};}),'proposition':arr(f['proposition'])['map'](Z=>{const a0=Z;return{'name':str(a0['name'])??'','votes':num(a0['votes'])??0x0};}),'related':Q,'updated_ms':N,'data_gaps':h};}if(k==='Arbitration'){const Z=coinOfTypeRaw(f['type_raw']??f['type']),a0=str(f['fee']),a1=await formatMoneyAnnotation(a0,Z,e),a2=str(f['balance']),a3=await formatMoneyAnnotation(a2,Z,e),a4=a7=>{if(a7&&typeof a7==='object'){const a8=a7;if(a8['GuardIdentifier']!==undefined)return'guard\x20identifier\x20#'+String(a8['GuardIdentifier']);if(a8['FixedValue']!==undefined)return'fixed\x20weight\x20'+String(a8['FixedValue']);}return typeof a7==='number'||typeof a7==='string'?String(a7):null;},a5=arr(f['voting_guard'])['map'](a7=>{const a8=a7;return{'guard':str(a8['guard'])??'','vote_weight':a4(a8['vote_weight'])};}),a6={'count':0x0,'window_saturated':![],'preview_truncated':![],'stats':{'first_created_ms':null,'last_created_ms':null},'items':[]};try{const a7=await fetchObjectLinkerTx(g,e,!![]),a8=a7?.['items']??[];a6['window_saturated']=ringWindowSaturated(a8['length']);const a9=a8['filter'](ac=>objectTypeFromAddress(typeof ac?.['who']==='string'?ac['who']:'')===ObjectType['Arb']);a6['count']=a9['length'];for(const ac of a9){if(typeof ac?.['time']==='number'){if(a6['stats']['first_created_ms']===null||ac['time']<a6['stats']['first_created_ms'])a6['stats']['first_created_ms']=ac['time'];if(a6['stats']['last_created_ms']===null||ac['time']>a6['stats']['last_created_ms'])a6['stats']['last_created_ms']=ac['time'];}}const aa=a9['slice'](-0x3)['reverse'](),ab=new Map();if(aa['length']>0x0)try{const ad=await batchQueryObjectsByIds(aa['map'](ae=>String(ae['who'])),e,!![]);for(const ae of ad){if(ae?.['object'])ab['set'](ae['object'],ae);}}catch{h['push']('cases:\x20detail\x20fetch\x20failed\x20(non-blocking)');}for(const af of aa){const ag=typeof af?.['who']==='string'?af['who']:'';if(!ag)continue;const ah=ab['get'](ag);a6['items']['push']({'arb':ag,'order':ah?str(ah['order']):null,'status':ah?ARB_STATUS_NAMES[num(ah['status'])??-0x1]??str(ah['status']):null,'time':typeof af?.['time']==='number'?af['time']:null});}a6['preview_truncated']=a6['count']>a6['items']['length'],a6['preview_truncated']&&(a6['drilldown']={'total_count':a6['count'],'analyzed_count':a6['items']['length'],'prompt':'Analyze\x20ALL\x20dispute\x20cases\x20of\x20Arbitration\x20'+g+'\x20('+e+')\x20one\x20by\x20one,\x20newest\x20first.\x20'+('The\x20cases\x20live\x20in\x20the\x20arbitration\x27s\x20FIFO\x20tx-linker\x20window\x20holding\x20at\x20most\x205200\x20newest\x20entries\x20—\x20the\x20retained\x20count\x20is\x20a\x20lower\x20bound\x20when\x20the\x20window\x20is\x20saturated\x20(currently\x20'+a6['count']+(a6['window_saturated']?',\x20saturated':'')+').\x20')+'For\x20each\x20case\x20call\x20object_panorama\x20with\x20the\x20Arb\x20case\x27s\x20FULL\x200x\x20address\x20(collect\x20the\x20addresses\x20from\x20the\x20same\x20reverse-index\x20source;\x20work\x20newest-first)\x20and\x20render\x20ONE\x20table\x20row\x20per\x20case:\x20'+'case\x20address\x20chip\x20(first\x20column)\x20|\x20disputed\x20order\x20address\x20chip\x20ON\x20THE\x20SAME\x20ROW\x20(the\x20order\x20is\x20the\x20case\x27s\x20child\x20plane)\x20|\x20status\x20|\x20created\x20(local\x20date)\x20|\x20indemnity\x20(the\x20display\x20value\x20with\x20its\x20token\x20symbol\x20—\x20never\x20reconvert\x20from\x20raw)\x20|\x20arbitrator\x20feedback.\x20'+'Close\x20with\x20the\x203\x20most\x20valuable\x20patterns\x20across\x20the\x20rows\x20(outcomes,\x20indemnity\x20distribution,\x20case\x20age).\x20Cases\x20only\x20—\x20do\x20not\x20re-analyze\x20the\x20Arbitration\x20itself.'});}catch{h['push']('cases:\x20affiliation-window\x20lookup\x20failed\x20(non-blocking)');}return{'action':'object_panorama','object':g,'object_type':'Arbitration','network':e,'head':j,'coin_type':Z,'fields':{'location':str(f['location']),'um':str(f['um']),'permission':str(f['permission']),'fee':a0,'fee_display':a1['display'],'fee_tip':a1['tip'],'balance':a2,'balance_display':a3['display'],'balance_tip':a3['tip'],'paused':typeof f['bPaused']==='boolean'?f['bPaused']:null,'usage_guard':str(f['usage_guard'])},'voting_guards':a5,'cases':a6,'data_gaps':h};}if(k==='Repository')return{'action':'object_panorama','object':g,'object_type':'Repository','network':e,'head':j,'fields':{'um':str(f['um']),'permission':str(f['permission']),'data_count':num(f['data_count'])},'policies':arr(f['policies'])['map'](ai=>{const aj=ai;return{'name':str(aj['name'])??'','description':str(aj['description']),'id_from':str(aj['id_from']),'value_type':str(aj['value_type']),'write_guards':arr(aj['write_guard'])['length'],'quote_guard':str(aj['quote_guard'])};}),'rewards':arr(f['rewards'])['map'](ai=>String(ai)),'data_entries':await buildRepositoryData(g,e,h),'data_gaps':h};if(k==='Proof'){const ai=aq=>typeof aq==='string'&&aq?createHash('sha256')['update'](aq)['digest']('hex')['slice'](0x0,0x10):null,aj=str(f['server_pubkey']),ak=str(f['server_signature']),al=num(f['time']),am=num(f['proof_type']),an=str(f['proof']),ao={'action':'object_panorama','object':g,'object_type':'Proof','network':e,'head':j,'fields':{'description':str(f['description']),'anchored_root':an,'item_count':num(f['item_count']),'proof_type':am,'proof_type_label':am===0x1?'1\x20=\x20WTS\x20message\x20proof\x20(WOWOK_WTS_PROOF_TYPE,\x20proof.move:11)\x20—\x20convention,\x20not\x20chain-validated':(am??'unset')+'\x20—\x20unvalidated\x20by\x20the\x20contract\x20(proof.move\x20checks\x20lengths,\x20not\x20type)','about':ownerAddr(f['about_address']??f['about']),'signer':ownerAddr(f['signer'])??str(f['signer']),'time_ms':al,'time_iso':al!==null?new Date(al)['toISOString']():null},'server_pubkey':{'present':!!aj,'length':aj?aj['length']:null,'fingerprint':ai(f['server_pubkey'])},'server_signature':{'present':!!ak,'length':ak?ak['length']:null,'fingerprint':ai(f['server_signature'])},'data_gaps':[...h,'server_pubkey\x20/\x20server_signature\x20are\x20shown\x20as\x20sha256\x20fingerprints\x20+\x20length\x20only\x20(a\x20signature\x20is\x20up\x20to\x2040,480\x20bytes)\x20—\x20pass\x20wts_file_path\x20to\x20have\x20this\x20Proof\x20compared\x20against\x20the\x20packet\x20instead\x20of\x20copying\x20the\x20material\x20out']},ap=b['wts_file_path'];if(ap){const aq=await readWtsDocument(ap);aq===undefined?ao['wts_anchor_check']={'root_matched':![],'matched_leaf_indices':[],'key_matched':![],'anchored_before_packet':null,'verdict':'wts_file_path\x20\x22'+ap+'\x22\x20could\x20not\x20be\x20read\x20as\x20a\x20local\x20JSON\x20WTS\x20packet\x20—\x20no\x20cross-check\x20performed.'}:ao['wts_anchor_check']=checkWtsProofAnchor(aq,{'proof':an,'server_pubkey':aj,'time':al,'signer':ao['fields']['signer'],'address':g});}return ao;}if(k==='Allocation'){const ar=str(f['balance']);let as=coinOfTypeRaw(f['type_raw']??f['type']);const at=arr(f['allocators']),au=f['allocators'],av=str(au?.['threshold'])??str(f['threshold']);if(!as){const aB=str(f['payment_info']?.['for_object']);if(aB)try{const aC=await query_objects({'objects':[aB],'network':e}),aD=(aC?.['objects']??[])['find'](aF=>aF?.['object']===aB),aE=str(aD?.['service']);if(aE){const aF=await query_objects({'objects':[aE],'network':e}),aG=(aF?.['objects']??[])['find'](aH=>aH?.['object']===aE);as=coinOfTypeRaw(aG?.['type_raw']??aG?.['type']);}}catch{}}const aw=await formatMoneyAnnotation(ar,as,e),ax=f['payment_info'],ay={0x0:'0=Amount\x20(fixed\x20raw\x20units)',0x1:'1=Rate\x20(per-10000\x20of\x20the\x20pool\x20base)',0x2:'2=Surplus\x20(everything\x20left\x20after\x20fixed\x20rows)',0x3:'3=RateGross\x20(per-10000\x20of\x20the\x20GROSS\x20pool)'},az=await buildRelatedList(g,g,e,h,'allocation');let aA=null;try{const aH=await query_object_last_updated({'object':g,'network':e,'previous_transaction':str(f['previousTransaction'])});aA=aH?.['timestamp_ms']?Number(aH['timestamp_ms'])||null:null;}catch{}return{'action':'object_panorama','object':g,'object_type':'Allocation','network':e,'head':j,'coin_type':as,'fields':{'balance':ar,'balance_display':aw['display'],'balance_tip':aw['tip'],'threshold':av,'for_object':str(ax?.['for_object']),'for_guard':str(ax?.['for_guard']),'remark':str(ax?.['remark']),'index':str(ax?.['index'])},'allocators':at['map'](aI=>{const aJ=aI;return{'guard':str(aJ['guard']),'sharing':arr(aJ['sharing'])['map'](aK=>{const aL=aK,aM=aL['who'];let aN='unknown',aO=null;if(aM&&typeof aM==='object'){if(typeof aM['GuardIdentifier']==='number'||typeof aM['GuardIdentifier']==='string')aN='guard_identifier',aO=num(aM['GuardIdentifier']);else{if(aM['Entity']&&typeof aM['Entity']==='object')aN='entity',aO=str(aM['Entity']['name_or_address']);else typeof aM['Signer']==='string'&&(aN='signer',aO=aM['Signer']);}}const aP=num(aL['mode']);return{'who_kind':aN,'who_value':aO,'resolution_note':aN==='guard_identifier'?'slot\x20'+String(aO)+':\x20reads\x20the\x20rail\x20guard\x27s\x20SUBMITTED\x20value\x20for\x20this\x20slot\x20at\x20spend\x20time\x20(order-scoped\x20rails\x20submit\x20the\x20Order\x20address\x20—\x20for_object\x20above).\x20A\x20STATIC\x20row\x20in\x20this\x20slot\x20is\x20the\x20F21\x20bricked\x20shape;\x20cross-check\x20the\x20guard\x27s\x20declared\x20submission\x20slots.':aN==='entity'?'static\x20address:\x20pins\x20this\x20literal\x20recipient\x20regardless\x20of\x20the\x20guard\x27s\x20submitted\x20slots.':aN==='signer'?'signer:\x20resolves\x20to\x20whoever\x20executes\x20the\x20spend\x20transaction.':'unrecognized\x20recipient\x20variant\x20—\x20SDK\x20decode\x20gap;\x20report\x20with\x20the\x20raw\x20object.','sharing':str(aL['sharing']),'mode':aP,'mode_label':ay[aP??-0x1]??(aP??'?')+'\x20=\x20unrecognized\x20mode'};})};}),'updated_ms':aA,'related':az,'data_gaps':h};}throw new Error('object_panorama:\x20unsupported\x20object\x20type\x20\x27'+(k||'unknown')+'\x27\x20for\x20'+g+'.\x20'+'Supported:\x20Progress\x20/\x20Demand\x20/\x20Order\x20/\x20Allocation\x20/\x20Arb\x20/\x20Arbitration\x20/\x20Repository\x20/\x20Proof.');}
|
|
1
|
+
import{Config,LocalMark,query_objects,query_object_last_updated,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{createHash}from'node:crypto';import{checkWtsProofAnchor,readWtsDocument}from'../../communication/wts-attestation.js';import{resolveAddress as a341a}from'../../tools/handlers/name-resolution.js';import{batchReadAddressKeyedFields,batchQueryObjectsByIds,fetchObjectLinkerTx,ringWindowSaturated}from'../../graph/onchain/sdk-batch.js';import{formatMoneyAnnotation}from'./facet-money.js';const js=a=>{if(typeof a==='bigint')return a['toString']();if(a&&typeof a==='object'&&!Array['isArray'](a)){const b={};for(const [c,d]of Object['entries'](a)){b[c]=js(d);}return b;}if(Array['isArray'](a))return a['map'](js);return a;},str=a=>a===null||a===undefined?null:String(a);function freshnessOf(a){const b=a?a['version']??a['data']?.['version']:undefined;return{'read_at_ms':Date['now'](),'version':b===undefined||b===null||String(b)===''?null:String(b),'note':'live\x20read\x20(cache\x20bypassed);\x20a\x20read\x20issued\x20in\x20the\x20same\x20second\x20as\x20a\x20committing\x20transaction\x20can\x20trail\x20the\x20committed\x20effect\x20by\x20one\x20checkpoint\x20—\x20if\x20any\x20field\x20contradicts\x20a\x20transaction\x20just\x20submitted,\x20re-query\x20once\x20(compare\x20version\x20across\x20reads)\x20before\x20concluding'};}const ownerAddr=a=>{if(typeof a==='string')return a;const b=a;if(b&&typeof b==='object'){if(typeof b['AddressOwner']==='string')return b['AddressOwner'];if(typeof b['ObjectOwner']==='string')return b['ObjectOwner'];const c=Object['values'](b)['find'](d=>typeof d==='string'&&d['length']>0x14);if(typeof c==='string')return c;}return null;},num=a=>{if(typeof a==='bigint')return Number(a);if(typeof a==='number')return Number['isFinite'](a)?a:null;if(typeof a==='string'&&a['trim']()!==''){const b=Number(a);return Number['isFinite'](b)?b:null;}return null;},arr=a=>Array['isArray'](a)?a:[];export function coinOfTypeRaw(a){if(typeof a!=='string'||!a)return null;const b=a['match'](/<(.+)>$/),c=b?.[0x1]?.['trim']();return c&&c['includes']('::')?c:null;}const RELATED_PREVIEW_CAP=0x32;async function buildRelatedList(a,b,c,d,e){const f={'key':a,'items':[],'count':0x0,'window_saturated':![],'preview_truncated':![]};if(!a)return f;try{const g=await fetchObjectLinkerTx(a,c,!![]),h=g?.['items']??[];f['window_saturated']=ringWindowSaturated(h['length']);const j=[];for(const k of h){const l=typeof k?.['who']==='string'?k['who']:'';if(!l||l['toLowerCase']()===b['toLowerCase']())continue;let m;try{m=objectTypeFromAddress(l);}catch{}if(!m)continue;j['push']({'address':l,'object_type':m,'time':typeof k?.['time']==='number'?k['time']:null});}f['count']=j['length'],f['items']=j['slice'](-RELATED_PREVIEW_CAP)['reverse'](),f['preview_truncated']=j['length']>f['items']['length'];}catch{d['push']('related:\x20ObjectLinkerTx('+e+')\x20lookup\x20failed');}return f;}const ARB_STATUS_NAMES={0x0:'Principal_confirming',0x1:'Arbitrator_confirming',0x2:'Voting',0x3:'Arbitrated',0x4:'Objectionable',0x5:'Finished',0x6:'Withdrawn'};async function resolveObject(a,b,c=!![]){const d=await a341a(a,'object_address');let f=b??undefined,g=null;if(!f)f=await Config['Instance']()['network_get']();try{const h=await query_objects({'objects':[d],'network':f,...c?{'no_cache':!![]}:{}});g=h?.['objects']?.[0x0]??null;if(!g&&b){const i=await Config['Instance']()['network_get']();if(i&&i!==f){const j=await query_objects({'objects':[d],'network':i,'no_cache':!![]}),k=j?.['objects']?.[0x0]??null;k&&(g=k,f=i);}}}catch(l){throw new Error('Failed\x20to\x20query\x20'+d+'\x20on\x20'+f+':\x20'+(l instanceof Error?l['message']:String(l)));}if(!g)throw new Error(d+'\x20not\x20found\x20on\x20'+f+(b?'':'\x20(session\x20default\x20network\x20—\x20not\x20an\x20explicit\x20request)')+'.\x20Verify\x20BOTH\x20the\x20object\x20ID\x20and\x20the\x20network:\x20an\x20object\x20that\x20exists\x20on\x20'+'one\x20network\x20answers\x20\x22not\x20found\x22\x20on\x20the\x20other.\x20Pass\x20context_network\x20'+'to\x20query\x20a\x20specific\x20network\x20before\x20concluding\x20the\x20object\x20does\x20not\x20exist.');return g['object']=g['object']??d,{'network':String(f),'obj':g};}async function resolveHead(a,b,c){let d=null,e=[];try{const f=await LocalMark['Instance']()['list']({'address':a});f['length']>0x0&&(d=f[0x0]['name']??null,e=(f[0x0]['tags']??[])['map'](g=>String(g)));}catch{c['push']('head:\x20LocalMark\x20lookup\x20failed');}return{'name':d,'tags':e,'description':str(b['description'])};}async function buildPresenters(a,b,c){const d=[];let e=0x0,f=![];try{const g=await fetchObjectLinkerTx(a,b,!![]),h=Array['isArray'](g?.['items'])?g['items']:[];f=ringWindowSaturated(h['length']);const i=h['map'](l=>({'service':String(l?.['who']??''),'time':typeof l?.['time']==='number'?l['time']:null}))['filter'](l=>objectTypeFromAddress(l['service'])===ObjectType['Service']);e=i['length'];const j=i['slice'](-0x32)['reverse'](),k=await batchReadAddressKeyedFields(a,j['map'](l=>l['service']),b,!![]);for(const l of j){const m=k['get'](l['service']['toLowerCase']());d['push']({'service':l['service'],'recommend':str(m?.['recommend']),'acceptance_score':num(m?.['acceptance_score']),'feedback':str(m?.['feedback']),'feedback_time':num(m?.['feedback_time']),'update_time':num(m?.['update_time'])??l['time']});}}catch{c['push']('presenters:\x20global-table\x20lookup\x20failed\x20(non-blocking)');}return{'count':e,'window_saturated':f,'preview_truncated':e>d['length'],'items':d};}async function buildRepositoryData(a,b,c){return void a,void b,c['push']('data:\x20per-key\x20enumeration\x20requires\x20the\x20{entity,name}\x20pair\x20—\x20showing\x20count\x20only'),{'count':null,'items':[]};}export async function handleObjectPanorama(b){const c=b['object_address']??b['filter'];if(!c)throw new Error('\x27object_address\x27\x20is\x20required\x20for\x20object_panorama\x20(a\x20LocalMark\x20NAME\x20is\x20also\x20accepted).\x20Example:\x20{\x22query_type\x22:\x20\x22object_panorama\x22,\x20\x22object_address\x22:\x20\x220x...\x22}');const {network:e,obj:f}=await resolveObject(c,b['context_network'],b['no_cache']!==![]),g=String(f['object']),h=[],j=await resolveHead(g,f,h),k=String(f['type']??'');if(k==='Progress'){const l=arr(f['session'])[0x0],m=l?{'next_node':str(l['next_node']),'weights':num(l['weights']),'threshold':num(l['threshold']),'forwards':arr(l['forwards'])['map'](q=>{const r=q;return{'forward':str(r['forward'])??'','who':str(r['who']),'accomplished':r['accomplished']===!![],'msg':str(r['msg']),'time':num(r['time'])};})}:null,n=await buildRelatedList(typeof f['machine']==='string'?f['machine']:null,g,e,h,'machine');return{'action':'object_panorama','object':g,'object_type':'Progress','network':e,'head':j,'fields':{'machine':str(f['machine']),'current':str(f['current']),'task':str(f['task']),'history_count':num(f['history_count']),'current_time':num(f['current_time'])},'context_repositories':arr(f['context_repositories'])['map'](q=>String(q)),'operators':arr(f['namedOperator'])['map'](q=>{const r=q;return{'name':str(r['name'])??'','operators':arr(r['operators'])['map'](t=>String(t))};}),'session':m,'related':n,'freshness':freshnessOf(f),'data_gaps':h};}if(k==='Demand')return{'action':'object_panorama','object':g,'object_type':'Demand','network':e,'head':j,'fields':{'location':str(f['location']),'um':str(f['um']),'permission':str(f['permission']),'presenters_count':num(f['presenters_count'])},'rewards':arr(f['rewards'])['map'](q=>String(q)),'guards':arr(f['guards'])['map'](q=>({'guard':str(q['guard'])??''})),'presenters':await buildPresenters(g,e,h),'data_gaps':h};if(k==='Order'){let q=null;try{const F=await query_object_last_updated({'object':g,'network':e,'previous_transaction':str(f['previousTransaction'])});q=F?.['timestamp_ms']?Number(F['timestamp_ms'])||null:null;}catch{}let r='none',t=null,u=null;const w=str(f['allocation']),x=str(f['progress']),y=str(f['service']),z=[w,x,y]['filter'](G=>!!G);let A=null;if(z['length']>0x0)try{const G=await query_objects({'objects':z,'network':e}),H=G?.['objects']??[];if(w){r='pending';const I=H['find'](K=>K?.['object']===w),J=Number(I?.['balance']??NaN);if(Number['isFinite'](J)&&J===0x0)r='allocated';}if(x){const K=H['find'](L=>L?.['object']===x);t=str(K?.['current']),u=num(K?.['current_time']);}if(y){const L=H['find'](M=>M?.['object']===y);A=coinOfTypeRaw(L?.['type_raw']??L?.['type']);}}catch{}const B=await buildRelatedList(g,g,e,h,'order'),C=str(f['amount']),D=await formatMoneyAnnotation(C,A,e),E=await Promise['all'](arr(f['items'])['map'](async M=>{const N=M,O=str(N['price']),P=await formatMoneyAnnotation(O,A,e);return{'name':str(N['name']),'price':O,'price_display':P['display'],'price_tip':P['tip'],'quantity':str(N['quantity']),'wip_hash':str(N['wip_hash'])};}));return{'action':'object_panorama','object':g,'object_type':'Order','network':e,'head':j,'coin_type':A,'fields':{'service':y,'machine':str(f['machine']),'progress':x,'allocation':w,'discount':str(f['discount']),'amount':C,'amount_display':D['display'],'amount_tip':D['tip'],'owner':ownerAddr(f['builder']??f['owner']),'claimed_by':str(f['claimed_by']),'required_info':str(f['required_info']),'time':num(f['time'])},'updated_ms':q,'related':B,'allocation_state':r,'progress_next':t,'progress_since':u,'items':E,'disputes':arr(f['dispute'])['map'](M=>String(M)),'agents':arr(f['agent'])['map'](M=>String(M)),'data_gaps':h};}if(k==='Arb'){const M=f['indemnity'];let N=null;try{const W=await query_object_last_updated({'object':g,'network':e,'previous_transaction':str(f['previousTransaction'])});N=W?.['timestamp_ms']?Number(W['timestamp_ms'])||null:null;}catch{}const O=str(f['order']);let P=null;if(O)try{const X=await query_objects({'objects':[O],'network':e}),Y=X?.['objects']?.[0x0];P=str(Y?.['service']);}catch{}const Q=await buildRelatedList(g,g,e,h,'arb'),R=coinOfTypeRaw(f['type_raw']),S=str(f['fee']),T=await formatMoneyAnnotation(S,R,e),U=M?str(M['amount']):null,V=await formatMoneyAnnotation(U,R,e);return{'action':'object_panorama','object':g,'object_type':'Arb','network':e,'head':j,'coin_type':R,'fields':{'arbitration':str(f['arbitration']),'order':str(f['order']),'service':P,'fee':S,'fee_display':T['display'],'fee_tip':T['tip'],'feedback':str(f['feedback']),'indemnity':M?{'amount':U,'amount_display':V['display'],'amount_tip':V['tip'],'time':num(M['time'])}:null,'voting_deadline':num(f['voting_deadline']),'objection':str(f['objection']),'status':ARB_STATUS_NAMES[num(f['status'])??-0x1]??str(f['status']),'compensation_time':num(f['compensation_time']),'time':num(f['time']),'type_raw':str(f['type_raw'])},'voted':arr(f['voted'])['map'](Z=>{const a0=Z;return{'voter':str(a0['voter'])??'','agrees':arr(a0['agrees'])['map'](a1=>Number(a1)),'weight':num(a0['weight'])??0x0,'time':num(a0['time'])??0x0};}),'proposition':arr(f['proposition'])['map'](Z=>{const a0=Z;return{'name':str(a0['name'])??'','votes':num(a0['votes'])??0x0};}),'related':Q,'updated_ms':N,'freshness':freshnessOf(f),'data_gaps':h};}if(k==='Arbitration'){const Z=coinOfTypeRaw(f['type_raw']??f['type']),a0=str(f['fee']),a1=await formatMoneyAnnotation(a0,Z,e),a2=str(f['balance']),a3=await formatMoneyAnnotation(a2,Z,e),a4=a7=>{if(a7&&typeof a7==='object'){const a8=a7;if(a8['GuardIdentifier']!==undefined)return'guard\x20identifier\x20#'+String(a8['GuardIdentifier']);if(a8['FixedValue']!==undefined)return'fixed\x20weight\x20'+String(a8['FixedValue']);}return typeof a7==='number'||typeof a7==='string'?String(a7):null;},a5=arr(f['voting_guard'])['map'](a7=>{const a8=a7;return{'guard':str(a8['guard'])??'','vote_weight':a4(a8['vote_weight'])};}),a6={'count':0x0,'window_saturated':![],'preview_truncated':![],'stats':{'first_created_ms':null,'last_created_ms':null},'items':[]};try{const a7=await fetchObjectLinkerTx(g,e,!![]),a8=a7?.['items']??[];a6['window_saturated']=ringWindowSaturated(a8['length']);const a9=a8['filter'](ac=>objectTypeFromAddress(typeof ac?.['who']==='string'?ac['who']:'')===ObjectType['Arb']);a6['count']=a9['length'];for(const ac of a9){if(typeof ac?.['time']==='number'){if(a6['stats']['first_created_ms']===null||ac['time']<a6['stats']['first_created_ms'])a6['stats']['first_created_ms']=ac['time'];if(a6['stats']['last_created_ms']===null||ac['time']>a6['stats']['last_created_ms'])a6['stats']['last_created_ms']=ac['time'];}}const aa=a9['slice'](-0x3)['reverse'](),ab=new Map();if(aa['length']>0x0)try{const ad=await batchQueryObjectsByIds(aa['map'](ae=>String(ae['who'])),e,!![]);for(const ae of ad){if(ae?.['object'])ab['set'](ae['object'],ae);}}catch{h['push']('cases:\x20detail\x20fetch\x20failed\x20(non-blocking)');}for(const af of aa){const ag=typeof af?.['who']==='string'?af['who']:'';if(!ag)continue;const ah=ab['get'](ag);a6['items']['push']({'arb':ag,'order':ah?str(ah['order']):null,'status':ah?ARB_STATUS_NAMES[num(ah['status'])??-0x1]??str(ah['status']):null,'time':typeof af?.['time']==='number'?af['time']:null});}a6['preview_truncated']=a6['count']>a6['items']['length'],a6['preview_truncated']&&(a6['drilldown']={'total_count':a6['count'],'analyzed_count':a6['items']['length'],'prompt':'Analyze\x20ALL\x20dispute\x20cases\x20of\x20Arbitration\x20'+g+'\x20('+e+')\x20one\x20by\x20one,\x20newest\x20first.\x20'+('The\x20cases\x20live\x20in\x20the\x20arbitration\x27s\x20FIFO\x20tx-linker\x20window\x20holding\x20at\x20most\x205200\x20newest\x20entries\x20—\x20the\x20retained\x20count\x20is\x20a\x20lower\x20bound\x20when\x20the\x20window\x20is\x20saturated\x20(currently\x20'+a6['count']+(a6['window_saturated']?',\x20saturated':'')+').\x20')+'For\x20each\x20case\x20call\x20object_panorama\x20with\x20the\x20Arb\x20case\x27s\x20FULL\x200x\x20address\x20(collect\x20the\x20addresses\x20from\x20the\x20same\x20reverse-index\x20source;\x20work\x20newest-first)\x20and\x20render\x20ONE\x20table\x20row\x20per\x20case:\x20'+'case\x20address\x20chip\x20(first\x20column)\x20|\x20disputed\x20order\x20address\x20chip\x20ON\x20THE\x20SAME\x20ROW\x20(the\x20order\x20is\x20the\x20case\x27s\x20child\x20plane)\x20|\x20status\x20|\x20created\x20(local\x20date)\x20|\x20indemnity\x20(the\x20display\x20value\x20with\x20its\x20token\x20symbol\x20—\x20never\x20reconvert\x20from\x20raw)\x20|\x20arbitrator\x20feedback.\x20'+'Close\x20with\x20the\x203\x20most\x20valuable\x20patterns\x20across\x20the\x20rows\x20(outcomes,\x20indemnity\x20distribution,\x20case\x20age).\x20Cases\x20only\x20—\x20do\x20not\x20re-analyze\x20the\x20Arbitration\x20itself.'});}catch{h['push']('cases:\x20affiliation-window\x20lookup\x20failed\x20(non-blocking)');}return{'action':'object_panorama','object':g,'object_type':'Arbitration','network':e,'head':j,'coin_type':Z,'fields':{'location':str(f['location']),'um':str(f['um']),'permission':str(f['permission']),'fee':a0,'fee_display':a1['display'],'fee_tip':a1['tip'],'balance':a2,'balance_display':a3['display'],'balance_tip':a3['tip'],'paused':typeof f['bPaused']==='boolean'?f['bPaused']:null,'usage_guard':str(f['usage_guard'])},'voting_guards':a5,'cases':a6,'data_gaps':h};}if(k==='Repository')return{'action':'object_panorama','object':g,'object_type':'Repository','network':e,'head':j,'fields':{'um':str(f['um']),'permission':str(f['permission']),'data_count':num(f['data_count'])},'policies':arr(f['policies'])['map'](ai=>{const aj=ai;return{'name':str(aj['name'])??'','description':str(aj['description']),'id_from':str(aj['id_from']),'value_type':str(aj['value_type']),'write_guards':arr(aj['write_guard'])['length'],'quote_guard':str(aj['quote_guard']),'write_once':aj['write_once']===!![]};}),'rewards':arr(f['rewards'])['map'](ai=>String(ai)),'data_entries':await buildRepositoryData(g,e,h),'data_gaps':h};if(k==='Proof'){const ai=aq=>typeof aq==='string'&&aq?createHash('sha256')['update'](aq)['digest']('hex')['slice'](0x0,0x10):null,aj=str(f['server_pubkey']),ak=str(f['server_signature']),al=num(f['time']),am=num(f['proof_type']),an=str(f['proof']),ao={'action':'object_panorama','object':g,'object_type':'Proof','network':e,'head':j,'fields':{'description':str(f['description']),'anchored_root':an,'item_count':num(f['item_count']),'proof_type':am,'proof_type_label':am===0x1?'1\x20=\x20WTS\x20message\x20proof\x20(WOWOK_WTS_PROOF_TYPE,\x20proof.move:11)\x20—\x20convention,\x20not\x20chain-validated':(am??'unset')+'\x20—\x20unvalidated\x20by\x20the\x20contract\x20(proof.move\x20checks\x20lengths,\x20not\x20type)','about':ownerAddr(f['about_address']??f['about']),'signer':ownerAddr(f['signer'])??str(f['signer']),'time_ms':al,'time_iso':al!==null?new Date(al)['toISOString']():null},'server_pubkey':{'present':!!aj,'length':aj?aj['length']:null,'fingerprint':ai(f['server_pubkey'])},'server_signature':{'present':!!ak,'length':ak?ak['length']:null,'fingerprint':ai(f['server_signature'])},'data_gaps':[...h,'server_pubkey\x20/\x20server_signature\x20are\x20shown\x20as\x20sha256\x20fingerprints\x20+\x20length\x20only\x20(a\x20signature\x20is\x20up\x20to\x2040,480\x20bytes)\x20—\x20pass\x20wts_file_path\x20to\x20have\x20this\x20Proof\x20compared\x20against\x20the\x20packet\x20instead\x20of\x20copying\x20the\x20material\x20out']},ap=b['wts_file_path'];if(ap){const aq=await readWtsDocument(ap);aq===undefined?ao['wts_anchor_check']={'root_matched':![],'matched_leaf_indices':[],'key_matched':![],'anchored_before_packet':null,'verdict':'wts_file_path\x20\x22'+ap+'\x22\x20could\x20not\x20be\x20read\x20as\x20a\x20local\x20JSON\x20WTS\x20packet\x20—\x20no\x20cross-check\x20performed.'}:ao['wts_anchor_check']=checkWtsProofAnchor(aq,{'proof':an,'server_pubkey':aj,'time':al,'signer':ao['fields']['signer'],'address':g});}return ao;}if(k==='Allocation'){const ar=str(f['balance']);let as=coinOfTypeRaw(f['type_raw']??f['type']);const at=arr(f['allocators']),au=f['allocators'],av=str(au?.['threshold'])??str(f['threshold']);if(!as){const aB=str(f['payment_info']?.['for_object']);if(aB)try{const aC=await query_objects({'objects':[aB],'network':e}),aD=(aC?.['objects']??[])['find'](aF=>aF?.['object']===aB),aE=str(aD?.['service']);if(aE){const aF=await query_objects({'objects':[aE],'network':e}),aG=(aF?.['objects']??[])['find'](aH=>aH?.['object']===aE);as=coinOfTypeRaw(aG?.['type_raw']??aG?.['type']);}}catch{}}const aw=await formatMoneyAnnotation(ar,as,e),ax=f['payment_info'],ay={0x0:'0=Amount\x20(fixed\x20raw\x20units)',0x1:'1=Rate\x20(per-10000\x20of\x20the\x20pool\x20base)',0x2:'2=Surplus\x20(everything\x20left\x20after\x20fixed\x20rows)',0x3:'3=RateGross\x20(per-10000\x20of\x20the\x20GROSS\x20pool)'},az=await buildRelatedList(g,g,e,h,'allocation');let aA=null;try{const aH=await query_object_last_updated({'object':g,'network':e,'previous_transaction':str(f['previousTransaction'])});aA=aH?.['timestamp_ms']?Number(aH['timestamp_ms'])||null:null;}catch{}return{'action':'object_panorama','object':g,'object_type':'Allocation','network':e,'head':j,'coin_type':as,'fields':{'balance':ar,'balance_display':aw['display'],'balance_tip':aw['tip'],'threshold':av,'for_object':str(ax?.['for_object']),'for_guard':str(ax?.['for_guard']),'remark':str(ax?.['remark']),'index':str(ax?.['index'])},'allocators':at['map'](aI=>{const aJ=aI;return{'guard':str(aJ['guard']),'sharing':arr(aJ['sharing'])['map'](aK=>{const aL=aK,aM=aL['who'];let aN='unknown',aO=null;if(aM&&typeof aM==='object'){if(typeof aM['GuardIdentifier']==='number'||typeof aM['GuardIdentifier']==='string')aN='guard_identifier',aO=num(aM['GuardIdentifier']);else{if(aM['Entity']&&typeof aM['Entity']==='object')aN='entity',aO=str(aM['Entity']['name_or_address']);else typeof aM['Signer']==='string'&&(aN='signer',aO=aM['Signer']);}}const aP=num(aL['mode']);return{'who_kind':aN,'who_value':aO,'resolution_note':aN==='guard_identifier'?'slot\x20'+String(aO)+':\x20reads\x20the\x20rail\x20guard\x27s\x20SUBMITTED\x20value\x20for\x20this\x20slot\x20at\x20spend\x20time\x20(order-scoped\x20rails\x20submit\x20the\x20Order\x20address\x20—\x20for_object\x20above).\x20A\x20STATIC\x20row\x20in\x20this\x20slot\x20is\x20the\x20F21\x20bricked\x20shape;\x20cross-check\x20the\x20guard\x27s\x20declared\x20submission\x20slots.':aN==='entity'?'static\x20address:\x20pins\x20this\x20literal\x20recipient\x20regardless\x20of\x20the\x20guard\x27s\x20submitted\x20slots.':aN==='signer'?'signer:\x20resolves\x20to\x20whoever\x20executes\x20the\x20spend\x20transaction.':'unrecognized\x20recipient\x20variant\x20—\x20SDK\x20decode\x20gap;\x20report\x20with\x20the\x20raw\x20object.','sharing':str(aL['sharing']),'mode':aP,'mode_label':ay[aP??-0x1]??(aP??'?')+'\x20=\x20unrecognized\x20mode'};})};}),'updated_ms':aA,'related':az,'data_gaps':h};}return h['push']('No\x20semantic\x20decoder\x20for\x20type\x20\x27'+(k||'unknown')+'\x27\x20—\x20fields\x20below\x20are\x20the\x20RAW\x20on-chain\x20payload,\x20not\x20interpreted.\x20'+'Semantic\x20decoders\x20exist\x20for:\x20Progress\x20/\x20Demand\x20/\x20Order\x20/\x20Allocation\x20/\x20Arb\x20/\x20Arbitration\x20/\x20Repository\x20/\x20Proof.'),{'action':'object_panorama','object':g,'network':e,'head':j,'freshness':freshnessOf(f),'object_type':'Unknown','raw_type':k||'unknown','coin_type':coinOfTypeRaw(k),'fields':js(f),'data_gaps':h};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{watch_conversations}from'@wowok/wowok';import{analyzeOrderParticipation,aggregateRadar,isConsequenceNode}from'../../participation/radar-core.js';import{workflowSubgraphFromRows}from'../../graph/onchain/index.js';import{Config}from'@wowok/wowok/w/local';import{resolveAddress as a335a}from'../../tools/handlers/name-resolution.js';import{monitorOrder}from'../../customer/order-monitor.js';import{analyzeMerchantInterest}from'../../participation/merchant-interest.js';import{analyzeCustomerInterest}from'../../participation/customer-interest.js';import{analyzeSupplierInterest}from'../../participation/supplier-interest.js';import{analyzeCollaboratorInterest}from'../../participation/collaborator-interest.js';import{buildAllocationAdvice}from'../../participation/allocation-advice.js';import{fetchMachineNodes}from'./machine-nodes.js';import{extractGenericTokenType,registryDisplayHint}from'../../knowledge/fund-layer.js';import{classifyRecipient,derivePayoffFromSharing}from'../../knowledge/recipient-constraint.js';import{batchQueryObjectsByIds,batchQueryTableItems}from'../../graph/onchain/sdk-batch.js';function fld(a,b){return a?.[b]??a?.['data']?.[b];}async function resolveAddress(a,b){return a335a(a,b);}function balanceStr(a){if(a==null)return undefined;if(typeof a==='object'&&'balance'in a)return String(a['balance']);return String(a);}function balanceToken(a){if(a!=null&&typeof a==='object'&&typeof a['token_type']==='string')return a['token_type'];return undefined;}function summarizeAllocation(a,b){const c=Array['isArray'](a)?a:Array['isArray'](a?.['allocators'])?a['allocators']:[];if(c['length']===0x0)return undefined;let d=0x0,e=0x0,f=0x0,g=0x0;const h=[],i=b['toLowerCase']();for(const j of c){const k=j?.['sharing']??[];for(const l of k){d++;const m=classifyRecipient(l['who']);if(!m)continue;if(m['kind']==='submission')e++;else{if(m['kind']==='signer')g++;else{if(m['kind']==='entity'&&m['address']['toLowerCase']()===i)f++;}}}h['push'](derivePayoffFromSharing(k,'service_order_allocators'));}return{'recipient_slots':d,'guard_gated_slots':e,'direct_to_me_slots':f,'to_payer_slots':g,'payoffs':h};}export async function fetchEntityPermissions(a,b){const c=new Map(),{items:d}=await batchQueryTableItems(a,{'network':b});for(const e of d){const f=e['object'];if(f?.['type']!=='TableItem_PermissionPerm')continue;const g=fld(f,'address'),h=fld(f,'perm')??[],i=h['map'](j=>typeof j==='number'?j:typeof j?.['index']==='number'?j['index']:null)['filter'](j=>j!==null);if(g)c['set'](g,i);}return c;}function toWorkflowSubgraph(a,b){return workflowSubgraphFromRows(a,b);}export async function handleParticipationRadar(a){if(!a['radar_account'])throw new Error('\x27radar_account\x27\x20is\x20required\x20for\x20participation_radar');if(!a['radar_targets']||a['radar_targets']['length']===0x0)throw new Error('\x27radar_targets\x27\x20(1-20\x20in-flight\x20orders)\x20is\x20required\x20for\x20participation_radar');const b=a['context_network']??await Config['Instance']()['network_get'](),d=a['radar_include_alerts']??!![],f=[],g=await resolveAddress(a['radar_account'],'radar_account'),h=await Promise['all'](a['radar_targets']['map'](async K=>({'progress':await resolveAddress(K['progress'],'progress'),'order':K['order']?await resolveAddress(K['order'],'order'):undefined}))),i=h['flatMap'](K=>K['order']?[K['progress'],K['order']]:[K['progress']]),j=await batchQueryObjectsByIds(i,b),k=new Map();for(const K of j){const L=fld(K,'object');if(L)k['set'](L,K);}const l=new Map(),m=new Map();for(const M of h){const N=k['get'](M['progress']);if(!N){f['push']('Progress\x20'+M['progress']+'\x20not\x20found\x20on\x20'+b+'\x20—\x20target\x20skipped.');continue;}l['set'](M['progress'],N);if(M['order']){const O=k['get'](M['order']);if(O)m['set'](M['order'],O);else f['push']('Order\x20'+M['order']+'\x20not\x20found\x20on\x20'+b+'\x20—\x20order-holder\x20detection\x20disabled\x20for\x20'+M['progress']+'.');}}h['length']>0x0&&l['size']===0x0&&f['push']('NETWORK\x20MISMATCH\x20SUSPECTED:\x200/'+h['length']+'\x20radar\x20targets\x20exist\x20on\x20network=\x27'+b+'\x27.\x20'+'These\x20objects\x20most\x20likely\x20live\x20on\x20a\x20different\x20network\x20—\x20re-run\x20with\x20the\x20matching\x20\x27network\x27\x20parameter.');const q=[...new Set([...l['values']()]['map'](P=>fld(P,'machine'))['filter'](P=>!!P))],s=[...new Set([...m['values']()]['map'](P=>fld(P,'service'))['filter'](P=>!!P))],u=[...new Set([...m['values']()]['flatMap'](P=>{const Q=fld(P,'dispute');return Array['isArray'](Q)?Q:[];}))],w=[...new Set([...m['values']()]['map'](P=>fld(P,'allocation'))['filter'](P=>!!P&&P['startsWith']('0x')))],x=new Map(),y=new Map(),z=new Map(),A=new Map(),B=new Map();await Promise['all']([...q['map'](async P=>{try{const [Q,R]=await Promise['all']([batchQueryObjectsByIds([P],b),fetchMachineNodes(P,b,!![])]);if(Q[0x0])x['set'](P,Q[0x0]);y['set'](P,toWorkflowSubgraph(R,P));}catch(S){f['push']('Machine\x20'+P+'\x20fetch\x20failed:\x20'+S['message']+'\x20—\x20workflow\x20unknown\x20for\x20its\x20orders.');}}),((async()=>{if(s['length']===0x0)return;try{const P=await batchQueryObjectsByIds(s,b);for(const Q of P){const R=fld(Q,'object');if(R)z['set'](R,Q);}}catch(S){f['push']('Service\x20query\x20failed:\x20'+S['message']+'\x20—\x20compensation/reward\x20context\x20degraded.');}})()),((async()=>{if(u['length']===0x0)return;try{const P=await batchQueryObjectsByIds(u,b);for(const Q of P){const R=fld(Q,'object');if(R)A['set'](R,Q);}}catch(S){f['push']('Arb\x20query\x20failed:\x20'+S['message']+'\x20—\x20compensation\x20claim\x20detection\x20disabled.');}})()),((async()=>{if(w['length']===0x0)return;try{const P=await batchQueryObjectsByIds(w,b);for(const Q of P){const R=fld(Q,'object');if(R)B['set'](R,Q);}}catch(S){f['push']('Allocation\x20pool\x20query\x20failed:\x20'+S['message']+'\x20—\x20fund-state\x20advice\x20degraded\x20to\x20template\x20level.');}})())]);const C=new Map(),D=[...new Set(q['map'](P=>fld(x['get'](P),'permission'))['filter'](P=>!!P))],E=new Map();await Promise['all'](D['map'](async P=>{try{const [Q,R]=await Promise['all']([batchQueryObjectsByIds([P],b),fetchEntityPermissions(P,b)]),S=Q[0x0];E['set'](P,{'address':P,'entity_count':fld(S,'entity_count'),'perm_remark':fld(S,'perm_remark'),'entityPermissions':R,'owner':fld(S,'builder')});}catch(T){f['push']('Permission\x20'+P+'\x20fetch\x20failed:\x20'+T['message']+'\x20—\x20operator\x20permission\x20matching\x20degraded.');}}));for(const P of q){const Q=fld(x['get'](P),'permission');if(Q&&E['has'](Q))C['set'](P,E['get'](Q));}let F=0x0;const G=new Map();try{const R=await watch_conversations({'account':g,'unreadOnly':!![],'previewMessageCount':0x0,'skipAutoMarkViewed':!![]}),S=Array['isArray'](R)?R:R?.['conversations']??[];for(const T of S){const U=T?.['peerAddress'],V=typeof T?.['unreadCount']==='number'?T['unreadCount']:0x0;typeof U==='string'&&V>0x0&&(G['set'](U['toLowerCase'](),V),F+=V);}}catch{f['push']('Messenger\x20unread\x20unavailable\x20(radar\x20account\x20is\x20not\x20a\x20local\x20messenger\x20account,\x20or\x20messenger\x20storage\x20offline)\x20'+'—\x20unread_messages_total\x20reported\x20as\x200.');}const H=[],I=Date['now']();for(const W of h){const X=l['get'](W['progress']);if(!X)continue;const Y=W['order']?m['get'](W['order']):undefined,Z=fld(X,'machine'),a0=fld(X,'current')??'',a1=fld(X,'namedOperator')??[],a2={};for(const ai of a1){if(ai?.['name'])a2[ai['name']]=Array['isArray'](ai['operators'])?ai['operators']:[];}const a3=Y?fld(Y,'service'):undefined,a4=a3?z['get'](a3):undefined;let a5;const a6=Y?fld(Y,'builder'):undefined;if(Y&&a6===g){const aj=fld(Y,'dispute')??[];for(const ak of aj){const al=A['get'](ak);if(!al)continue;const am=fld(al,'indemnity');if(am){a5={'arbitration':fld(al,'arbitration')??ak,'note':'Arbitration\x20verdict\x20recorded\x20an\x20indemnity\x20(Arb\x20'+ak+').\x20'+'Claim\x20via\x20order\x20op=\x27arb_claim_compensation\x27\x20—\x20paid\x20directly\x20from\x20the\x20Service\x20compensation_fund.\x20'+'(Claimed-status\x20is\x20not\x20readable\x20from\x20the\x20Arb\x20object;\x20the\x20contract\x20rejects\x20double-claims.)'};break;}}}const a7=isConsequenceNode(a0,'completed'),a8=isConsequenceNode(a0,'refunded'),a9=[];if(a4&&a6===g){if(a8)f['push']('Rewards\x20suppressed\x20for\x20order\x20'+(W['order']??W['progress'])+':\x20the\x20order\x20sits\x20on\x20a\x20refund/exception\x20'+('terminal\x20node\x20('+(a0||'unknown')+'),\x20so\x20Service\x20rewards\x20are\x20not\x20advertised\x20as\x20claimable\x20against\x20it.'));else{const an=fld(a4,'rewards')??[];for(const ao of an){a9['push']({'address':ao,'description':'Service\x20reward\x20'+ao+'\x20(guard-gated\x20—\x20eligibility\x20verified\x20at\x20claim\x20time)'});}}}let aa=0x0;if(G['size']>0x0){const ap=new Set();if(a6)ap['add'](a6['toLowerCase']());for(const aq of Object['values'](a2)){for(const ar of aq)ap['add'](ar['toLowerCase']());}ap['delete'](g['toLowerCase']());for(const as of ap){aa+=G['get'](as)??0x0;}}const ab={'account':g,'progress_address':W['progress'],'order_address':W['order'],'current_node':a0,'order_holder':a6,'workflow':Z?y['get'](Z):undefined,'permission':Z?C['get'](Z)??null:null,'named_accounts':a2,'claimable_rewards':a9['length']>0x0?a9:undefined,'pending_compensation':a5,'rating_pending':a7&&a6===g,'review_summary':a['radar_review_summary'],'unread_messages':aa>0x0?aa:undefined,'last_progress_at':fld(X,'current_time')??undefined,'now':I},ac=analyzeOrderParticipation(ab),ad=(fld(a4,'arbitrations')??[])['length']>0x0,ae=a7?'completed':a8?'refunded':null,af=ab['last_progress_at']!=null?(I-ab['last_progress_at'])/0x36ee80:undefined,ag=summarizeAllocation(fld(a4,'order_allocators'),g);if(ac['perspective']==='merchant')ac['interest_analysis']=analyzeMerchantInterest({'account':g,'current_node':a0,'operable':ac['operable'],'waiting_on':ac['waiting_on'],'order_amount':balanceStr(fld(Y,'amount')),'token_type':balanceToken(fld(Y,'amount')),'allocation':ag,'compensation_fund':balanceStr(fld(a4,'compensation_fund')),'arbitration_bound':ad,'rewards_count':(fld(a4,'rewards')??[])['length'],'stalled_hours':af,'terminal':ae,'unread_messages':aa>0x0?aa:undefined});else{if(ac['perspective']==='supplier')ac['interest_analysis']=analyzeSupplierInterest({'account':g,'current_node':a0,'operable':ac['operable'],'waiting_on':ac['waiting_on'],'order_amount':balanceStr(fld(Y,'amount')),'token_type':balanceToken(fld(Y,'amount')),'arbitration_bound':ad,'compensation_fund':balanceStr(fld(a4,'compensation_fund')),'allocation_payoff':ag?.['payoffs'],'terminal':ae,'stalled_hours':af,'unread_messages':aa>0x0?aa:undefined});else{if(ac['perspective']==='collaborator')ac['interest_analysis']=analyzeCollaboratorInterest({'account':g,'current_node':a0,'operable':ac['operable'],'waiting_on':ac['waiting_on'],'collaborator_kind':ac['collaborator_kind'],'arbitration_bound':ad,'allocation_payoff':ag?.['payoffs'],'terminal':ae,'stalled_hours':af,'unread_messages':aa>0x0?aa:undefined});else ac['perspective']==='customer'&&(ac['interest_analysis']=analyzeCustomerInterest({'account':g,'current_node':a0,'operable':ac['operable'],'waiting_on':ac['waiting_on'],'order_amount':balanceStr(fld(Y,'amount')),'token_type':balanceToken(fld(Y,'amount')),'compensation_fund':balanceStr(fld(a4,'compensation_fund')),'arbitration_bound':ad,'allocation_payoff':ag?.['payoffs'],'terminal':ae,'stalled_hours':af,'unread_messages':aa>0x0?aa:undefined}));}}const ah=Y?fld(Y,'allocation'):undefined;if(Y&&ah){const at=B['get'](ah['toLowerCase']()),au=fld(Y,'dispute')??[];if(at)try{ac['fund_advice']=buildAllocationAdvice({'pool':{'address':ah,'balance':fld(at,'balance'),'allocators':fld(at,'allocators'),'threshold':fld(at,'threshold'),'payment':fld(at,'payment'),'for_object':fld(at,'payment_info')!==undefined?fld(at,'payment_info')?.['for_object']:fld(at,'for_object')},'order_amount':fld(Y,'amount'),'perspective':ac['perspective'],'is_order_holder':a6===g,'completed':a7,'refunded':a8,'can_act_now':ac['operable']['length']>0x0,'compensation_fund':fld(a4,'compensation_fund'),'has_dispute':au['length']>0x0});}catch(av){f['push']('Fund\x20advice\x20failed\x20for\x20'+ah+':\x20'+av['message']+'.');}else f['push']('Allocation\x20pool\x20'+ah+'\x20not\x20found\x20—\x20fund-state\x20advice\x20unavailable\x20for\x20'+W['progress']+'.');}if(d&&Y){const aw={'order_id':W['order'],'service_id':a3??'','current_node':a0||undefined,'created_at':Number(fld(Y,'time')??I)||I,'last_progress_at':fld(X,'current_time')??undefined,'now':I,'order_amount':((()=>{try{return BigInt(fld(Y,'amount')??0x0);}catch{return undefined;}})()),'compensation_balance':((()=>{try{const ax=fld(a4,'compensation_fund');return ax!=null?BigInt(ax):undefined;}catch{return undefined;}})()),'token':registryDisplayHint(extractGenericTokenType(fld(a4,'type_raw'))),'has_arbitration':(fld(a4,'arbitrations')??[])['length']>0x0,'pending_user_action':ac['operable']['some'](ax=>ax['execution_path']==='order_holder'),'completed':a7,'refunded':a8};try{const ax=monitorOrder({'current':aw,'thresholds':a['radar_monitor_thresholds']});ax['length']>0x0&&(ac['attached_alerts']=ax);}catch(ay){f['push']('Order\x20monitor\x20failed\x20for\x20'+W['order']+':\x20'+ay['message']+'.');}}H['push'](ac);}const J=aggregateRadar(H,F);return{'action':'participation_radar','account':g,'orders_analyzed':J['orders_analyzed'],'actionable':J['actionable'],'waiting':J['waiting'],'all_pending_claims':J['all_pending_claims'],'unread_messages_total':J['unread_messages_total'],'data_gaps':f,'summary':J['summary']};}
|
|
1
|
+
import{watch_conversations}from'@wowok/wowok';import{analyzeOrderParticipation,aggregateRadar,isConsequenceNode}from'../../participation/radar-core.js';import{workflowSubgraphFromRows}from'../../graph/onchain/index.js';import{Config}from'@wowok/wowok/w/local';import{resolveAddress as a343a}from'../../tools/handlers/name-resolution.js';import{monitorOrder}from'../../customer/order-monitor.js';import{buildNodeActionAdvice}from'../../participation/node-action-advisor.js';import{isTerminalArbStatus}from'../../knowledge/arbitration-ledger.js';import{fetchMachineNodes}from'./machine-nodes.js';import{extractGenericTokenType,registryDisplayHint}from'../../knowledge/fund-layer.js';import{classifyRecipient,derivePayoffFromSharing}from'../../knowledge/recipient-constraint.js';import{batchQueryObjectsByIds,batchQueryTableItems}from'../../graph/onchain/sdk-batch.js';function fld(a,b){return a?.[b]??a?.['data']?.[b];}async function resolveAddress(a,b){return a343a(a,b);}function balanceStr(a){if(a==null)return undefined;if(typeof a==='object'&&'balance'in a)return String(a['balance']);return String(a);}function balanceToken(a){if(a!=null&&typeof a==='object'&&typeof a['token_type']==='string')return a['token_type'];return undefined;}function allocatorGuardAddresses(b){const c=Array['isArray'](b)?b:Array['isArray'](b?.['allocators'])?b['allocators']:[],d=[];for(const e of c){const f=e?.['guard'];if(typeof f==='string'&&f['startsWith']('0x'))d['push'](f);}return d;}async function fetchAllocatorGuardDefs(a,b,c){const d=new Map(),f=[...new Set(allocatorGuardAddresses(a))];if(f['length']===0x0)return d;try{const h=await batchQueryObjectsByIds(f,b);for(const i of h){const j=fld(i,'object'),k=fld(i,'root');if(j&&k!==undefined&&k!==null){const l=fld(i,'table'),m=Array['isArray'](l)?l['filter'](n=>n!=null&&typeof n==='object')['filter'](n=>typeof n['identifier']==='number')['map'](n=>({'identifier':n['identifier'],'value_type':n['value_type'],'value':n['value'],'name':typeof n['name']==='string'?n['name']:undefined,'b_submission':n['b_submission']===!![]})):undefined;d['set'](j,{'root':k,...m&&m['length']>0x0?{'table':m}:{}});}}}catch(n){c['push']('Allocator\x20guard\x20fetch\x20failed:\x20'+n['message']+'\x20—\x20Signer-recipient\x20payoff\x20stays\x20conservative\x20'+'(unresolved\x20guards\x20cannot\x20clear\x20an\x20RC-FIND-01\x20suspicion).');}return d;}function summarizeAllocation(a,b,c){const d=Array['isArray'](a)?a:Array['isArray'](a?.['allocators'])?a['allocators']:[];if(d['length']===0x0)return undefined;let e=0x0,f=0x0,g=0x0,h=0x0;const i=[],j=b['toLowerCase']();for(const k of d){const l=k?.['sharing']??[];for(const n of l){e++;const o=classifyRecipient(n['who']);if(!o)continue;if(o['kind']==='submission')f++;else{if(o['kind']==='signer')h++;else{if(o['kind']==='entity'&&o['address']['toLowerCase']()===j)g++;}}}const m=typeof k?.['guard']==='string'?c['get'](k['guard']):undefined;i['push'](derivePayoffFromSharing(l,'service_order_allocators',m));}return{'recipient_slots':e,'guard_gated_slots':f,'direct_to_me_slots':g,'to_payer_slots':h,'payoffs':i};}export async function fetchEntityPermissions(a,b){const c=new Map(),{items:d}=await batchQueryTableItems(a,{'network':b});for(const e of d){const f=e['object'];if(f?.['type']!=='TableItem_PermissionPerm')continue;const g=fld(f,'address'),h=fld(f,'perm')??[],i=h['map'](j=>typeof j==='number'?j:typeof j?.['index']==='number'?j['index']:null)['filter'](j=>j!==null);if(g)c['set'](g,i);}return c;}function toWorkflowSubgraph(a,b){return workflowSubgraphFromRows(a,b);}export async function handleParticipationRadar(a){if(!a['radar_account'])throw new Error('\x27radar_account\x27\x20is\x20required\x20for\x20participation_radar');if(!a['radar_targets']||a['radar_targets']['length']===0x0)throw new Error('\x27radar_targets\x27\x20(1-20\x20in-flight\x20orders)\x20is\x20required\x20for\x20participation_radar');const b=a['context_network']??await Config['Instance']()['network_get'](),d=a['radar_include_alerts']??!![],f=[],h=await resolveAddress(a['radar_account'],'radar_account'),i=await Promise['all'](a['radar_targets']['map'](async M=>({'progress':await resolveAddress(M['progress'],'progress'),'order':M['order']?await resolveAddress(M['order'],'order'):undefined}))),j=i['flatMap'](M=>M['order']?[M['progress'],M['order']]:[M['progress']]),k=await batchQueryObjectsByIds(j,b,!![]),l=new Map();for(const M of k){const N=fld(M,'object');if(N)l['set'](N,M);}const m=new Map(),q=new Map();for(const O of i){const P=l['get'](O['progress']);if(!P){f['push']('Progress\x20'+O['progress']+'\x20not\x20found\x20on\x20'+b+'\x20—\x20target\x20skipped.');continue;}m['set'](O['progress'],P);if(O['order']){const Q=l['get'](O['order']);if(Q)q['set'](O['order'],Q);else f['push']('Order\x20'+O['order']+'\x20not\x20found\x20on\x20'+b+'\x20—\x20order-holder\x20detection\x20disabled\x20for\x20'+O['progress']+'.');}}i['length']>0x0&&m['size']===0x0&&f['push']('NETWORK\x20MISMATCH\x20SUSPECTED:\x200/'+i['length']+'\x20radar\x20targets\x20exist\x20on\x20network=\x27'+b+'\x27.\x20'+'These\x20objects\x20most\x20likely\x20live\x20on\x20a\x20different\x20network\x20—\x20re-run\x20with\x20the\x20matching\x20\x27network\x27\x20parameter.');const s=[...new Set([...m['values']()]['map'](R=>fld(R,'machine'))['filter'](R=>!!R))],u=[...new Set([...q['values']()]['map'](R=>fld(R,'service'))['filter'](R=>!!R))],w=[...new Set([...q['values']()]['flatMap'](R=>{const S=fld(R,'dispute');return Array['isArray'](S)?S:[];}))],x=[...new Set([...q['values']()]['map'](R=>fld(R,'allocation'))['filter'](R=>!!R&&R['startsWith']('0x')))],y=new Map(),z=new Map(),A=new Map(),B=new Map(),C=new Map();await Promise['all']([...s['map'](async R=>{try{const [S,T]=await Promise['all']([batchQueryObjectsByIds([R],b),fetchMachineNodes(R,b,!![])]);if(S[0x0])y['set'](R,S[0x0]);z['set'](R,toWorkflowSubgraph(T,R));}catch(U){f['push']('Machine\x20'+R+'\x20fetch\x20failed:\x20'+U['message']+'\x20—\x20workflow\x20unknown\x20for\x20its\x20orders.');}}),((async()=>{if(u['length']===0x0)return;try{const R=await batchQueryObjectsByIds(u,b);for(const S of R){const T=fld(S,'object');if(T)A['set'](T,S);}}catch(U){f['push']('Service\x20query\x20failed:\x20'+U['message']+'\x20—\x20compensation/reward\x20context\x20degraded.');}})()),((async()=>{if(w['length']===0x0)return;try{const R=await batchQueryObjectsByIds(w,b);for(const S of R){const T=fld(S,'object');if(T)B['set'](T,S);}}catch(U){f['push']('Arb\x20query\x20failed:\x20'+U['message']+'\x20—\x20compensation\x20claim\x20detection\x20disabled.');}})()),((async()=>{if(x['length']===0x0)return;try{const R=await batchQueryObjectsByIds(x,b,!![]);for(const S of R){const T=fld(S,'object');if(T)C['set'](T,S);}}catch(U){f['push']('Allocation\x20pool\x20query\x20failed:\x20'+U['message']+'\x20—\x20fund-state\x20advice\x20degraded\x20to\x20template\x20level.');}})())]);const D=new Map(),E=[...new Set(s['map'](R=>fld(y['get'](R),'permission'))['filter'](R=>!!R))],F=new Map();await Promise['all'](E['map'](async R=>{try{const [S,T]=await Promise['all']([batchQueryObjectsByIds([R],b),fetchEntityPermissions(R,b)]),U=S[0x0];F['set'](R,{'address':R,'entity_count':fld(U,'entity_count'),'perm_remark':fld(U,'perm_remark'),'entityPermissions':T,'owner':fld(U,'builder')});}catch(V){f['push']('Permission\x20'+R+'\x20fetch\x20failed:\x20'+V['message']+'\x20—\x20operator\x20permission\x20matching\x20degraded.');}}));for(const R of s){const S=fld(y['get'](R),'permission');if(S&&F['has'](S))D['set'](R,F['get'](S));}const G=new Map();await Promise['all']([...A['entries']()]['map'](async([T,U])=>{G['set'](T,await fetchAllocatorGuardDefs(fld(U,'order_allocators'),b,f));}));let H=0x0;const I=new Map();try{const T=await watch_conversations({'account':h,'unreadOnly':!![],'previewMessageCount':0x0,'skipAutoMarkViewed':!![]}),U=Array['isArray'](T)?T:T?.['conversations']??[];for(const V of U){const W=V?.['peerAddress'],X=typeof V?.['unreadCount']==='number'?V['unreadCount']:0x0;typeof W==='string'&&X>0x0&&(I['set'](W['toLowerCase'](),X),H+=X);}}catch{f['push']('Messenger\x20unread\x20unavailable\x20(radar\x20account\x20is\x20not\x20a\x20local\x20messenger\x20account,\x20or\x20messenger\x20storage\x20offline)\x20'+'—\x20unread_messages_total\x20reported\x20as\x200.');}const J=[],K=Date['now']();for(const Y of i){const Z=m['get'](Y['progress']);if(!Z)continue;const a0=Y['order']?q['get'](Y['order']):undefined;!Y['order']&&f['push']('Target\x20progress\x20'+Y['progress']+'\x20carries\x20NO\x20order\x20address\x20—\x20order-holder\x20identity,\x20'+'buyer/customer\x20perspective\x20routing\x20and\x20order-scoped\x20amounts\x20are\x20UNVERIFIED\x20for\x20this\x20'+'target;\x20the\x20participation\x20stance\x20below\x20is\x20downgraded\x20accordingly.\x20Pass\x20the\x20order\x20'+'address\x20to\x20restore\x20full\x20analysis.');const a1=fld(Z,'machine'),a2=fld(Z,'current')??'',a3=fld(Z,'namedOperator')??[],a4={};for(const am of a3){if(am?.['name'])a4[am['name']]=Array['isArray'](am['operators'])?am['operators']:[];}const a5=a0?fld(a0,'service'):undefined,a6=a5?A['get'](a5):undefined;let a7;const a8=a0?fld(a0,'builder'):undefined;if(a0&&a8===h){const an=fld(a0,'dispute')??[];for(const ao of an){const ap=B['get'](ao);if(!ap)continue;const aq=fld(ap,'indemnity');if(aq){a7={'arbitration':fld(ap,'arbitration')??ao,'note':'Arbitration\x20verdict\x20recorded\x20an\x20indemnity\x20(Arb\x20'+ao+').\x20'+'Claim\x20via\x20order\x20op=\x27arb_claim_compensation\x27\x20—\x20paid\x20directly\x20from\x20the\x20Service\x20compensation_fund.\x20'+'(Claimed-status\x20is\x20not\x20readable\x20from\x20the\x20Arb\x20object;\x20the\x20contract\x20rejects\x20double-claims.)'};break;}}}const a9=isConsequenceNode(a2,'completed'),aa=isConsequenceNode(a2,'refunded'),ab=[];if(a6&&a8===h){if(aa)f['push']('Rewards\x20suppressed\x20for\x20order\x20'+(Y['order']??Y['progress'])+':\x20the\x20order\x20sits\x20on\x20a\x20refund/exception\x20'+('terminal\x20node\x20('+(a2||'unknown')+'),\x20so\x20Service\x20rewards\x20are\x20not\x20advertised\x20as\x20claimable\x20against\x20it.'));else{const ar=fld(a6,'rewards')??[];for(const as of ar){ab['push']({'address':as,'description':'Service\x20reward\x20'+as+'\x20(guard-gated\x20—\x20eligibility\x20verified\x20at\x20claim\x20time)'});}}}let ac=0x0;if(I['size']>0x0){const at=new Set();if(a8)at['add'](a8['toLowerCase']());for(const au of Object['values'](a4)){for(const av of au)at['add'](av['toLowerCase']());}at['delete'](h['toLowerCase']());for(const aw of at){ac+=I['get'](aw)??0x0;}}const ad={'account':h,'progress_address':Y['progress'],'order_address':Y['order'],'current_node':a2,'order_holder':a8,'workflow':a1?z['get'](a1):undefined,'permission':a1?D['get'](a1)??null:null,'named_accounts':a4,'claimable_rewards':ab['length']>0x0?ab:undefined,'pending_compensation':a7,'rating_pending':a9&&a8===h,'review_summary':a['radar_review_summary'],'unread_messages':ac>0x0?ac:undefined,'last_progress_at':fld(Z,'current_time')??undefined,'now':K},ae=analyzeOrderParticipation(ad),af=(fld(a6,'arbitrations')??[])['length']>0x0,ag=a0?fld(a0,'dispute')??[]:[],ah=ag['map'](ax=>B['get'](ax))['filter'](ax=>ax!=null),ai=ah['find'](ax=>{const ay=fld(ax,'status');return ay==null||!isTerminalArbStatus(ay);}),aj=summarizeAllocation(fld(a6,'order_allocators'),h,a5?G['get'](a5)??new Map():new Map()),ak=a0?fld(a0,'allocation'):undefined,al=a0&&ak?C['get'](ak['toLowerCase']()):undefined;try{const ax=buildNodeActionAdvice({'radar':ae,'is_order_holder':a8===h,'order_amount':balanceStr(fld(a0,'amount')),'token_type':balanceToken(fld(a0,'amount')),'compensation_fund':balanceStr(fld(a6,'compensation_fund')),'arbitration_bound':af,'has_dispute':ag['length']>0x0,'dispute_active':ai!=null,'arb_status':ai?fld(ai,'status'):undefined,'rewards_count':(fld(a6,'rewards')??[])['length'],'completed':a9,'refunded':aa,'allocation_pool':al&&ak?{'address':ak,'balance':fld(al,'balance'),'allocators':fld(al,'allocators'),'threshold':fld(al,'threshold'),'payment':fld(al,'payment'),'for_object':fld(al,'payment_info')!==undefined?fld(al,'payment_info')?.['for_object']:fld(al,'for_object')}:undefined,'allocation_summary':aj,'last_progress_at':ad['last_progress_at'],'now':K,'unread_messages':ac>0x0?ac:undefined});ae['interest_analysis']=ax['interest_analysis'],ae['fund_advice']=ax['fund_advice'],ae['advice']={'context':ax['context'],'kernels_run':ax['kernels_run'],'node_game':ax['node_game'],'arb_game':ax['arb_game'],'actions':ax['actions']};for(const ay of ax['advisory_gaps'])f['push'](ay);}catch(az){f['push']('Action\x20advice\x20failed\x20for\x20'+Y['progress']+':\x20'+az['message']+'.');}a0&&ak&&!al&&f['push']('Allocation\x20pool\x20'+ak+'\x20not\x20found\x20—\x20fund-state\x20advice\x20unavailable\x20for\x20'+Y['progress']+'.');if(d&&a0){const aA={'order_id':Y['order'],'service_id':a5??'','current_node':a2||undefined,'created_at':Number(fld(a0,'time')??K)||K,'last_progress_at':fld(Z,'current_time')??undefined,'now':K,'order_amount':((()=>{try{return BigInt(fld(a0,'amount')??0x0);}catch{return undefined;}})()),'compensation_balance':((()=>{try{const aB=fld(a6,'compensation_fund');return aB!=null?BigInt(aB):undefined;}catch{return undefined;}})()),'token':registryDisplayHint(extractGenericTokenType(fld(a6,'type_raw'))),'has_arbitration':(fld(a6,'arbitrations')??[])['length']>0x0,'pending_user_action':ae['operable']['some'](aB=>aB['execution_path']==='order_holder'),'completed':a9,'refunded':aa};try{const aB=monitorOrder({'current':aA,'thresholds':a['radar_monitor_thresholds']});aB['length']>0x0&&(ae['attached_alerts']=aB);}catch(aC){f['push']('Order\x20monitor\x20failed\x20for\x20'+Y['order']+':\x20'+aC['message']+'.');}}J['push'](ae);}const L=aggregateRadar(J,H);return{'action':'participation_radar','account':h,'orders_analyzed':L['orders_analyzed'],'actionable':L['actionable'],'waiting':L['waiting'],'all_pending_claims':L['all_pending_claims'],'unread_messages_total':L['unread_messages_total'],'data_gaps':f,'summary':L['summary']};}
|
|
@@ -45,11 +45,15 @@ export interface AggregateRisksInput {
|
|
|
45
45
|
}
|
|
46
46
|
export declare function handleAggregateRisks(v: AggregateRisksInput): Promise<{
|
|
47
47
|
intent_echo?: {
|
|
48
|
+
classification_source: "aggregate_risks_intent_echo";
|
|
48
49
|
primary_object: string;
|
|
49
50
|
industry: string;
|
|
50
51
|
overall_completeness: "complete" | "partial" | "empty";
|
|
51
52
|
} | undefined;
|
|
52
53
|
safety_findings?: import("../../knowledge/safety-rules.js").SafetyRiskItem[] | undefined;
|
|
54
|
+
status: string;
|
|
55
|
+
status_note: string;
|
|
56
|
+
objects_inspected: number;
|
|
53
57
|
evidence_scope: "puzzle_snapshots_only";
|
|
54
58
|
object_grounded: boolean;
|
|
55
59
|
publish_authorized: boolean;
|
|
@@ -62,7 +66,6 @@ export declare function handleAggregateRisks(v: AggregateRisksInput): Promise<{
|
|
|
62
66
|
};
|
|
63
67
|
findings: import("./risk-aggregator.js").AggregatedRisk[];
|
|
64
68
|
severity_summary: Record<import("./risk-aggregator.js").RiskSeverity, number>;
|
|
65
|
-
status: "STATIC_ANALYZERS_CLEAN" | "RISK_BLOCKED" | "RISK_PENDING_CONFIRM" | "RISK_CANCELLED";
|
|
66
69
|
pending_confirmations?: Array<{
|
|
67
70
|
risk_rule_id: string;
|
|
68
71
|
description: string;
|