@wowok/agent-mcp 3.2.0 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/dist/config/exposure.d.ts +8 -8
  2. package/dist/config/judgment.d.ts +20 -20
  3. package/dist/config/rule-engine.d.ts +20 -20
  4. package/dist/extensions/industry-pack.js +1 -1
  5. package/dist/graph/onchain/facts.js +1 -1
  6. package/dist/graph/onchain/sdk-batch.d.ts +1 -0
  7. package/dist/graph/onchain/sdk-batch.js +1 -1
  8. package/dist/graph/onchain/sdk-dataplane.d.ts +1 -0
  9. package/dist/graph/onchain/sdk-dataplane.js +1 -1
  10. package/dist/knowledge/allocation-templates.d.ts +1 -1
  11. package/dist/knowledge/allocation-templates.js +1 -1
  12. package/dist/knowledge/arbitration-ledger.js +1 -1
  13. package/dist/knowledge/audit-rules.d.ts +1 -1
  14. package/dist/knowledge/audit-rules.js +1 -1
  15. package/dist/knowledge/builtin-templates.d.ts +1 -1
  16. package/dist/knowledge/builtin-templates.js +1 -1
  17. package/dist/knowledge/discount-threshold.d.ts +15 -0
  18. package/dist/knowledge/discount-threshold.js +1 -0
  19. package/dist/knowledge/getting-started.js +1 -1
  20. package/dist/knowledge/guard-design-patterns.js +1 -1
  21. package/dist/knowledge/guard-lint.js +1 -1
  22. package/dist/knowledge/guard-translation.js +1 -1
  23. package/dist/knowledge/index.d.ts +2 -2
  24. package/dist/knowledge/index.js +1 -1
  25. package/dist/knowledge/industry-generalizer.d.ts +38 -1
  26. package/dist/knowledge/industry-generalizer.js +1 -1
  27. package/dist/knowledge/industry-registry.js +1 -1
  28. package/dist/knowledge/industry-strategy.js +1 -1
  29. package/dist/knowledge/jsonrpc-enum.js +1 -1
  30. package/dist/knowledge/onchain-constants.d.ts +2 -2
  31. package/dist/knowledge/onchain-constants.js +1 -1
  32. package/dist/knowledge/scenario-modes.d.ts +10 -0
  33. package/dist/knowledge/strategy-manuals.d.ts +1 -1
  34. package/dist/knowledge/strategy-manuals.js +1 -1
  35. package/dist/knowledge/template-loader.d.ts +20 -0
  36. package/dist/knowledge/template-loader.js +1 -1
  37. package/dist/knowledge/template-registry.js +1 -1
  38. package/dist/knowledge/template-scanner.js +1 -1
  39. package/dist/knowledge/tools-reference.js +1 -1
  40. package/dist/monitor/MonitorLoop.js +1 -1
  41. package/dist/participation/arbitrator-interest.js +1 -1
  42. package/dist/participation/customer-interest.js +1 -1
  43. package/dist/participation/merchant-interest.js +1 -1
  44. package/dist/playbooks/service-build/business-puzzle.js +1 -1
  45. package/dist/playbooks/service-build/machine-panorama.js +1 -1
  46. package/dist/playbooks/service-build/merchant-guide.js +1 -1
  47. package/dist/playbooks/service-build/mode-actions.d.ts +12 -1
  48. package/dist/playbooks/service-build/mode-actions.js +1 -1
  49. package/dist/playbooks/service-build/object-panorama.js +1 -1
  50. package/dist/playbooks/service-build/participation-radar.js +1 -1
  51. package/dist/playbooks/service-build/relationship-profile.js +1 -1
  52. package/dist/playbooks/service-build/reverse-mapping-refund-p0-5.spec.d.ts +1 -0
  53. package/dist/playbooks/service-build/reverse-mapping-refund-p0-5.spec.js +1 -0
  54. package/dist/playbooks/service-build/reverse-mapping.js +1 -1
  55. package/dist/playbooks/service-build/semantic-graph.js +1 -1
  56. package/dist/playbooks/service-build/service-panorama.js +1 -1
  57. package/dist/playbooks/service-build/service-quote.js +1 -1
  58. package/dist/review/index.js +1 -1
  59. package/dist/role/profiles.js +1 -1
  60. package/dist/role/types.d.ts +2 -0
  61. package/dist/role/types.js +1 -1
  62. package/dist/safety/confirm-gate.js +1 -1
  63. package/dist/schema/call/allocation.d.ts +7 -7
  64. package/dist/schema/call/arbitration.d.ts +1 -1
  65. package/dist/schema/call/arbitration.js +1 -1
  66. package/dist/schema/call/base.d.ts +5 -5
  67. package/dist/schema/call/base.js +1 -1
  68. package/dist/schema/call/bridge.d.ts +5 -9
  69. package/dist/schema/call/bridge.js +1 -1
  70. package/dist/schema/call/contact.d.ts +1 -1
  71. package/dist/schema/call/demand.d.ts +1 -1
  72. package/dist/schema/call/guard.d.ts +11 -11
  73. package/dist/schema/call/handler.js +1 -1
  74. package/dist/schema/call/machine.d.ts +2 -2
  75. package/dist/schema/call/order.d.ts +1 -1
  76. package/dist/schema/call/payment.d.ts +1 -1
  77. package/dist/schema/call/permission.d.ts +1 -1
  78. package/dist/schema/call/personal.d.ts +1 -1
  79. package/dist/schema/call/progress.d.ts +1 -1
  80. package/dist/schema/call/proof.d.ts +2 -2
  81. package/dist/schema/call/repository.d.ts +1 -1
  82. package/dist/schema/call/reward.d.ts +1 -1
  83. package/dist/schema/call/semantic.js +1 -1
  84. package/dist/schema/call/service.d.ts +5 -5
  85. package/dist/schema/call/service.js +1 -1
  86. package/dist/schema/call/treasury.d.ts +1 -1
  87. package/dist/schema/common/index.js +1 -1
  88. package/dist/schema/evaluation/index.d.ts +6 -2
  89. package/dist/schema/evaluation/index.js +1 -1
  90. package/dist/schema/goal/index.d.ts +8 -8
  91. package/dist/schema/goal/planning.d.ts +15 -15
  92. package/dist/schema/industry-pack/index.d.ts +15 -0
  93. package/dist/schema/industry-pack/modes.d.ts +15 -0
  94. package/dist/schema/industry-pack/modes.js +1 -1
  95. package/dist/schema/intent-radar/index.d.ts +3 -0
  96. package/dist/schema/intent-radar/index.js +1 -1
  97. package/dist/schema/local/index.d.ts +577 -18
  98. package/dist/schema/local/index.js +1 -1
  99. package/dist/schema/messenger/index.d.ts +140 -20
  100. package/dist/schema/messenger/index.js +1 -1
  101. package/dist/schema/operations.d.ts +30 -28
  102. package/dist/schema/operations.js +1 -1
  103. package/dist/schema/persona/index.d.ts +708 -708
  104. package/dist/schema/persona/index.js +1 -1
  105. package/dist/schema/query/bi.d.ts +20 -6
  106. package/dist/schema/query/bi.js +1 -1
  107. package/dist/schema/query/index.d.ts +32 -32
  108. package/dist/schema/query/index.js +1 -1
  109. package/dist/schema/schema-query/index.d.ts +3 -3
  110. package/dist/schema/schema-version.js +1 -1
  111. package/dist/schema/watch/index.d.ts +2 -2
  112. package/dist/schema/workflow/index.d.ts +2 -2
  113. package/dist/schema-query-impl/index.js +1 -1
  114. package/dist/schemas/account_operation.output.json +6 -2
  115. package/dist/schemas/account_operation.schema.json +1 -1
  116. package/dist/schemas/bridge_operation.schema.json +2 -10
  117. package/dist/schemas/evaluation_operation.output.json +2 -0
  118. package/dist/schemas/evaluation_operation.schema.json +2 -0
  119. package/dist/schemas/index.json +7 -1
  120. package/dist/schemas/industry_pack_operation.output.json +87 -4
  121. package/dist/schemas/intent_radar.output.json +2 -0
  122. package/dist/schemas/intent_radar.schema.json +1 -0
  123. package/dist/schemas/local_cache_operation.output.json +1536 -0
  124. package/dist/schemas/local_cache_operation.schema.json +101 -0
  125. package/dist/schemas/local_mark_operation.output.json +51 -36
  126. package/dist/schemas/local_mark_operation.schema.json +1 -0
  127. package/dist/schemas/messenger_operation.schema.json +358 -35
  128. package/dist/schemas/onchain_operations.schema.json +10 -10
  129. package/dist/schemas/onchain_operations_allocation.schema.json +1 -1
  130. package/dist/schemas/onchain_operations_arbitration.schema.json +3 -3
  131. package/dist/schemas/onchain_operations_payment.schema.json +1 -1
  132. package/dist/schemas/onchain_operations_reward.schema.json +1 -1
  133. package/dist/schemas/onchain_operations_service.schema.json +3 -3
  134. package/dist/schemas/onchain_operations_treasury.schema.json +1 -1
  135. package/dist/schemas/onchain_table_data.output.json +11 -0
  136. package/dist/schemas/query_toolkit.output.json +11 -4
  137. package/dist/schemas/query_toolkit.schema.json +13 -2
  138. package/dist/tools/handlers/benchmark-migration.js +1 -1
  139. package/dist/tools/handlers/bridge.js +1 -1
  140. package/dist/tools/handlers/config.js +1 -1
  141. package/dist/tools/handlers/local.d.ts +1 -0
  142. package/dist/tools/handlers/local.js +1 -1
  143. package/dist/tools/handlers/messenger.d.ts +9 -2
  144. package/dist/tools/handlers/messenger.js +1 -1
  145. package/dist/tools/handlers/name-resolution.d.ts +4 -0
  146. package/dist/tools/handlers/name-resolution.js +1 -0
  147. package/dist/tools/handlers/name-resolution.spec.d.ts +1 -0
  148. package/dist/tools/handlers/name-resolution.spec.js +1 -0
  149. package/dist/tools/handlers/onchain-name-registration.d.ts +37 -0
  150. package/dist/tools/handlers/onchain-name-registration.js +1 -0
  151. package/dist/tools/handlers/onchain-name-registration.spec.d.ts +1 -0
  152. package/dist/tools/handlers/onchain-name-registration.spec.js +1 -0
  153. package/dist/tools/handlers/onchain.d.ts +1 -0
  154. package/dist/tools/handlers/onchain.js +1 -1
  155. package/dist/tools/handlers/query.d.ts +1 -0
  156. package/dist/tools/handlers/query.js +1 -1
  157. package/dist/tools/index.js +1 -1
  158. package/dist/tools/registry/local.js +1 -1
  159. package/dist/tools/sanitize-description-roundtrip.spec.d.ts +1 -0
  160. package/dist/tools/sanitize-description-roundtrip.spec.js +1 -0
  161. package/dist/tools/sanitize-output.d.ts +1 -0
  162. package/dist/tools/sanitize-output.js +1 -1
  163. package/dist/tools/wrap.js +1 -1
  164. package/package.json +2 -2
@@ -1 +1 @@
1
- import{analyzeIntent}from'./intent-analyzer.js';import{buildSemanticGraph,validateGraph}from'./semantic-graph.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{getIndustryModeRegistry}from'../../extensions/index.js';import{LOCAL_MODE_OWNER}from'./mode-actions.js';import{recipientDesignGuidance}from'../../knowledge/recipient-constraint.js';function derivePlanSatisfiedConstraints(a,b){const c=new Set(),d=h=>a['edges']['some'](i=>i['relation']===h),e=h=>a['nodes']['some'](i=>i['id']===h),f=h=>a['nodes']['some'](i=>i['type']===h),g=h=>a['adoptedModules']['includes'](h);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('main_machine'))c['add']('machine_published');if(e('main_repository'))c['add']('repository_published');if(e('main_service'))c['add']('service_published');e('arb_permission')&&e('main_permission')&&c['add']('arbitration_permission_independent');g('independent_arbitration')&&e('guard_independent_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');if(e('main_allocation')&&b['payment']['allocation']&&b['payment']['allocation']['length']>0x0){c['add']('allocators_configured');const h=b['payment']['allocation']['reduce']((j,k)=>j+k['percentage'],0x0);if(Math['abs'](h-0x64)<0.001)c['add']('sharing_sum_100');const i=b['payment']['allocation']['find'](j=>j['recipient']==='platform');if(i&&i['percentage']===0x0)c['add']('platform_fee_zero');g('supplier_collaboration')&&(c['add']('allocation_sharing_configured'),c['add']('demand_configured'));}return g('wip_provenance')&&e('main_repository')&&c['add']('wip_hash_before_delivery'),g('subscription_with_proof')&&e('main_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')),c;}function deriveDeployTimeChecks(a){const b=[];return a['nodes']['some'](c=>c['id']==='main_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']==='main_arbitration'))&&b['push']('compensation_fund\x20MUST\x20be\x20topped\x20up\x20BEFORE\x20any\x20payout:\x20a\x20claim\x20against\x20an\x20empty\x20fund\x20aborts\x20(service.move\x20E_COMPENSATION_NOT_MATCH).\x20Add\x20a\x20compensation_fund_add\x20step\x20sized\x20>=\x20the\x20protection\x20cap\x20(recommend\x20>=\x205x)\x20and\x20verify\x20the\x20on-chain\x20balance\x20before\x20going\x20live'),a['nodes']['some'](c=>c['id']==='main_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']==='main_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']==='main_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>=\x20the\x20protection\x20cap\x20(recommend\x20>=\x205x\x20cap),\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']==='main_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'](j=>[j['id'],j])),f=new Map();for(const j of a['nodes'])f['set'](j['id'],new Set());for(const k of a['edges']){if(!f['has'](k['from'])||!c['has'](k['to']))continue;const l=k['relation']==='has_guard'?k['to']:k['from'],m=k['relation']==='has_guard'?k['from']:k['to'];if(l===m||!f['has'](l))continue;f['get'](l)['add'](m);}for(const o of a['nodes']){for(const p of Object['values'](o['config'])){p['type']==='address_ref'&&p['targetId']!==o['id']&&f['has'](p['targetId'])&&f['get'](o['id'])['add'](p['targetId']);}}const g=new Map([...f]['map'](([q,r])=>[q,[...r]])),h=[],i=new Map(f);while(i['size']>0x0){const q=[...i['entries']()]['filter'](([,r])=>r['size']===0x0)['map'](([r])=>r);if(q['length']===0x0){h['push'](...i['keys']());break;}q['sort']();for(const r of q){h['push'](r),i['delete'](r);for(const s of i['values']())s['delete'](r);}}return h['forEach']((t,u)=>{const v=c['get'](t),w=v['config']['name'];b['push']({'order':u+0x1,'node_id':t,'object_type':v['type'],'suggested_name':w?.['type']==='string'?w['value']:t,'depends_on':g['get'](t)??[],'operation_hint':'Create\x20'+v['type']+'\x20via\x20onchain_operations,\x20then\x20configure.\x20Purpose:\x20'+v['purpose']});}),b;}async function resolveModePrior(a){if(!a)return undefined;const b=getIndustryModeRegistry(),c=await b['getUserMode'](a,LOCAL_MODE_OWNER);return c??b['getMode'](a);}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']};for(const u of Object['keys'](d)){if(d[u]===undefined)delete d[u];}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']??{}}},g=d['adopted_module_ids']?d['adopted_module_ids']['map'](w=>getBusinessModule(w))['filter'](w=>!!w):recommendModules(d['confirmed_industry'],d['intent_text'],{'maxModules':0x5}),h=a['mode_prior_override']??await resolveModePrior(d['confirmed_industry']),i=buildSemanticGraph(f,g,h,{'paymentExplicit':!!(d['payment_override']||d['trust_override']),'nameBase':a['name_base']}),j=validateGraph(i),l=derivePlanSatisfiedConstraints(i,f),m=g['map'](w=>checkModuleConstraints(w,l)),n=deriveDeployTimeChecks(i),o=derivePostDeploySteps(i),p=i['edges']['some'](w=>w['relation']==='has_order_allocators')?recipientDesignGuidance()['map'](w=>({'id':w['id'],'move_recipient':w['move_recipient'],'semantics':w['semantics'],'required_constraints':w['required_constraints'],'finding_if_unmet':w['finding_if_unmet']})):undefined,q=m['filter'](w=>!w['adopted']),r=checkGameTheoryConstraints(i,f),s=assessWorkflowDesign(i),t=buildCreationPlan(i);return{'action':'merchant_guide','current_step':q['length']>0x0?0x9:0xa,'step_name':q['length']>0x0?'Harness\x20Check\x20(issues\x20found)':'Submission\x20Plan\x20Ready','guide_state':{...d,'adopted_module_ids':g['map'](w=>w['id'])},'intent':{'intent_type':f['intent'],'industry':f['industry'],'roles':f['roles'],'deliverables':f['deliverables'],'payment':f['payment'],'trust':f['trust']},'adopted_modules':g['map'](w=>({'id':w['id'],'name':w['name'],'description':w['description'],'requires_keeper':w['requiresKeeper'],'keeper_hint':w['keeperHint'],'user_protections':w['userProtections'],'merchant_obligations':w['merchantObligations']})),'mode_prior':h?{'name':h['name'],'display_name':h['display_name'],'source':h['source'],'risk_appetite':h['risk_appetite'],'key_risk':h['key_risk'],'machine_shape':h['machine_shape']['map'](w=>({'name':w['name'],'role':w['role'],...w['operator']?{'operator':w['operator']}:{},...w['semantic_role']?{'semantic_role':w['semantic_role']}:{}})),'guards':h['guards']['map'](w=>({'template_id':w['template_id'],'host':w['host'],'purpose':w['purpose']})),'allocator':h['allocator'],'risk_constraints':h['risk_constraints'],'build_notes':h['build_notes']??[],...h['time_anchors']?{'time_anchors':h['time_anchors']}:{}}:undefined,...h?.['time_anchors']?{'time_anchor_instructions':Object['entries'](h['time_anchors'])['map'](([w,x])=>{const y=x==='order.time'?'\x20(order-creation\x20time\x20—\x20PRE-checkout\x20branches\x20only;\x20a\x20post-checkout\x20window\x20anchored\x20here\x20is\x20unreachable)':x==='progress.current_time'?'\x20(entry\x20time\x20of\x20the\x20window\x27s\x20source\x20node\x20—\x20witness-derived\x20via\x20OrderProgress,\x20one\x20Guard\x20serves\x20every\x20order)':x==='absolute_date'?'\x20(per-order\x20instance\x20Guard\x20—\x20the\x20absolute\x20date\x20differs\x20per\x20booking)':'';return'Time\x20windows\x20for\x20\x27'+w+'\x27\x20anchor\x20to\x20'+x+y;})}:{},'blueprint':{'nodes':i['nodes']['map'](w=>({'id':w['id'],'type':w['type'],'purpose':w['purpose']})),'edges':i['edges']['map'](w=>({'from':w['from'],'to':w['to'],'relation':w['relation'],'required':w['required']}))},'evaluation_preview':i['evaluationPreview'],'graph_validation':{'valid':j['valid'],'hard_violations':j['hardViolations']['map'](w=>({'id':w['id'],'description':w['description'],'fix':w['fixSuggestion']})),'soft_notes':j['softViolations']['map'](w=>({'id':w['id'],'description':w['description']}))},'harness_check':{'module_constraints':m['map'](w=>({'module':w['module'],'plan_satisfied':w['adopted'],'missing':w['missingConstraints'],'reason':w['reason'],'estimated_score_boost':w['estimatedScoreBoost']})),'blocking_issues':q['map'](w=>({'module':w['module'],'missing_constraints':w['missingConstraints'],'fix':w['reason']})),'deploy_time_checks':n,'recipient_design_guidance':p},'game_theory':{'summary':r['summary'],'coverage':r['coveredCount']+'/'+r['totalCount'],'exposed_scenarios':r['exposedScenarios'],'wow_alignments':r['wowAlignments'],'scenarios':r['results']['map'](w=>({'scenario':w['scenario'],'covered':w['covered'],'conflict':w['conflict'],'user_protection':w['userProtection'],'evaluation_metric':w['evaluationMetric'],'recommendation':w['recommendation']}))},'workflow_design_assessment':{'score':s['score'],'summary':s['summary'],'findings':s['findings']['map'](w=>({'kind':w['kind'],'severity':w['severity'],'message':w['message'],'fix':w['fix']})),'checks':s['checks']['map'](w=>({'id':w['id'],'dimension':w['dimension'],'passed':w['passed'],'severity':w['severity'],'message':w['message'],'fix':w['fix']}))},'creation_plan':t,'post_deploy_steps':o,'warnings':e['warnings'],'next_action':q['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.':'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).'};}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{buildSemanticGraph,validateGraph}from'./semantic-graph.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{getIndustryModeRegistry}from'../../extensions/index.js';import{LOCAL_MODE_OWNER}from'./mode-actions.js';import{recipientDesignGuidance}from'../../knowledge/recipient-constraint.js';function derivePlanSatisfiedConstraints(a,b){const c=new Set(),d=h=>a['edges']['some'](i=>i['relation']===h),e=h=>a['nodes']['some'](i=>i['id']===h),f=h=>a['nodes']['some'](i=>i['type']===h),g=h=>a['adoptedModules']['includes'](h);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('main_machine'))c['add']('machine_published');if(e('main_repository'))c['add']('repository_published');if(e('main_service'))c['add']('service_published');e('arb_permission')&&e('main_permission')&&c['add']('arbitration_permission_independent');g('independent_arbitration')&&e('guard_independent_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');if(e('main_allocation')&&b['payment']['allocation']&&b['payment']['allocation']['length']>0x0){c['add']('allocators_configured');const h=b['payment']['allocation']['reduce']((j,k)=>j+k['percentage'],0x0);if(Math['abs'](h-0x64)<0.001)c['add']('sharing_sum_100');const i=b['payment']['allocation']['find'](j=>j['recipient']==='platform');if(i&&i['percentage']===0x0)c['add']('platform_fee_zero');g('supplier_collaboration')&&(c['add']('allocation_sharing_configured'),c['add']('demand_configured'));}return g('wip_provenance')&&e('main_repository')&&c['add']('wip_hash_before_delivery'),g('subscription_with_proof')&&e('main_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')),c;}function deriveDeployTimeChecks(a){const b=[];return a['nodes']['some'](c=>c['id']==='main_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']==='main_arbitration'))&&b['push']('compensation_fund\x20MUST\x20be\x20topped\x20up\x20BEFORE\x20any\x20payout:\x20a\x20claim\x20against\x20an\x20empty\x20fund\x20aborts\x20(service.move\x20E_COMPENSATION_NOT_MATCH).\x20Add\x20a\x20compensation_fund_add\x20step\x20sized\x20>=\x203x\x20the\x20highest\x20single\x20order\x20(3x\x20IS\x20the\x20chain\x27s\x20hard\x20award\x20ceiling,\x20MAX_INDEMNITY_MULTIPLE)\x20and\x20verify\x20the\x20on-chain\x20balance\x20before\x20going\x20live'),a['nodes']['some'](c=>c['id']==='main_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']==='main_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']==='main_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\x20the\x20highest\x20single\x20order\x20(3x\x20=\x20the\x20chain\x27s\x20hard\x20award\x20ceiling,\x20MAX_INDEMNITY_MULTIPLE;\x20above\x203x\x20only\x20buys\x20headroom\x20for\x20concurrent\x20claims),\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']==='main_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'](j=>[j['id'],j])),f=new Map();for(const j of a['nodes'])f['set'](j['id'],new Set());for(const k of a['edges']){if(!f['has'](k['from'])||!c['has'](k['to']))continue;const l=k['relation']==='has_guard'?k['to']:k['from'],m=k['relation']==='has_guard'?k['from']:k['to'];if(l===m||!f['has'](l))continue;f['get'](l)['add'](m);}for(const o of a['nodes']){for(const p of Object['values'](o['config'])){p['type']==='address_ref'&&p['targetId']!==o['id']&&f['has'](p['targetId'])&&f['get'](o['id'])['add'](p['targetId']);}}const g=new Map([...f]['map'](([q,r])=>[q,[...r]])),h=[],i=new Map(f);while(i['size']>0x0){const q=[...i['entries']()]['filter'](([,r])=>r['size']===0x0)['map'](([r])=>r);if(q['length']===0x0){h['push'](...i['keys']());break;}q['sort']();for(const r of q){h['push'](r),i['delete'](r);for(const s of i['values']())s['delete'](r);}}return h['forEach']((t,u)=>{const v=c['get'](t),w=v['config']['name'];b['push']({'order':u+0x1,'node_id':t,'object_type':v['type'],'suggested_name':w?.['type']==='string'?w['value']:t,'depends_on':g['get'](t)??[],'operation_hint':'Create\x20'+v['type']+'\x20via\x20onchain_operations,\x20then\x20configure.\x20Purpose:\x20'+v['purpose']});}),b;}async function resolveModePrior(a){if(!a)return undefined;const b=getIndustryModeRegistry(),c=await b['getUserMode'](a,LOCAL_MODE_OWNER);return c??b['getMode'](a);}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']};for(const u of Object['keys'](d)){if(d[u]===undefined)delete d[u];}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']??{}}},g=d['adopted_module_ids']?d['adopted_module_ids']['map'](w=>getBusinessModule(w))['filter'](w=>!!w):recommendModules(d['confirmed_industry'],d['intent_text'],{'maxModules':0x5}),h=a['mode_prior_override']??await resolveModePrior(d['confirmed_industry']),i=buildSemanticGraph(f,g,h,{'paymentExplicit':!!(d['payment_override']||d['trust_override']),'nameBase':a['name_base']}),j=validateGraph(i),l=derivePlanSatisfiedConstraints(i,f),m=g['map'](w=>checkModuleConstraints(w,l)),n=deriveDeployTimeChecks(i),o=derivePostDeploySteps(i),p=i['edges']['some'](w=>w['relation']==='has_order_allocators')?recipientDesignGuidance()['map'](w=>({'id':w['id'],'move_recipient':w['move_recipient'],'semantics':w['semantics'],'required_constraints':w['required_constraints'],'finding_if_unmet':w['finding_if_unmet']})):undefined,q=m['filter'](w=>!w['adopted']),r=checkGameTheoryConstraints(i,f),s=assessWorkflowDesign(i),t=buildCreationPlan(i);return{'action':'merchant_guide','current_step':q['length']>0x0?0x9:0xa,'step_name':q['length']>0x0?'Harness\x20Check\x20(issues\x20found)':'Submission\x20Plan\x20Ready','guide_state':{...d,'adopted_module_ids':g['map'](w=>w['id'])},'intent':{'intent_type':f['intent'],'industry':f['industry'],'roles':f['roles'],'deliverables':f['deliverables'],'payment':f['payment'],'trust':f['trust']},'adopted_modules':g['map'](w=>({'id':w['id'],'name':w['name'],'description':w['description'],'requires_keeper':w['requiresKeeper'],'keeper_hint':w['keeperHint'],'user_protections':w['userProtections'],'merchant_obligations':w['merchantObligations']})),'mode_prior':h?{'name':h['name'],'display_name':h['display_name'],'source':h['source'],'risk_appetite':h['risk_appetite'],'key_risk':h['key_risk'],'machine_shape':h['machine_shape']['map'](w=>({'name':w['name'],'role':w['role'],...w['operator']?{'operator':w['operator']}:{},...w['semantic_role']?{'semantic_role':w['semantic_role']}:{}})),'guards':h['guards']['map'](w=>({'template_id':w['template_id'],'host':w['host'],'purpose':w['purpose']})),'allocator':h['allocator'],'risk_constraints':h['risk_constraints'],'build_notes':h['build_notes']??[],...h['time_anchors']?{'time_anchors':h['time_anchors']}:{}}:undefined,...h?.['time_anchors']?{'time_anchor_instructions':Object['entries'](h['time_anchors'])['map'](([w,x])=>{const y=x==='order.time'?'\x20(order-creation\x20time\x20—\x20PRE-checkout\x20branches\x20only;\x20a\x20post-checkout\x20window\x20anchored\x20here\x20is\x20unreachable)':x==='progress.current_time'?'\x20(entry\x20time\x20of\x20the\x20window\x27s\x20source\x20node\x20—\x20witness-derived\x20via\x20OrderProgress,\x20one\x20Guard\x20serves\x20every\x20order)':x==='absolute_date'?'\x20(per-order\x20instance\x20Guard\x20—\x20the\x20absolute\x20date\x20differs\x20per\x20booking)':'';return'Time\x20windows\x20for\x20\x27'+w+'\x27\x20anchor\x20to\x20'+x+y;})}:{},'blueprint':{'nodes':i['nodes']['map'](w=>({'id':w['id'],'type':w['type'],'purpose':w['purpose']})),'edges':i['edges']['map'](w=>({'from':w['from'],'to':w['to'],'relation':w['relation'],'required':w['required']}))},'evaluation_preview':i['evaluationPreview'],'graph_validation':{'valid':j['valid'],'hard_violations':j['hardViolations']['map'](w=>({'id':w['id'],'description':w['description'],'fix':w['fixSuggestion']})),'soft_notes':j['softViolations']['map'](w=>({'id':w['id'],'description':w['description']}))},'harness_check':{'module_constraints':m['map'](w=>({'module':w['module'],'plan_satisfied':w['adopted'],'missing':w['missingConstraints'],'reason':w['reason'],'estimated_score_boost':w['estimatedScoreBoost']})),'blocking_issues':q['map'](w=>({'module':w['module'],'missing_constraints':w['missingConstraints'],'fix':w['reason']})),'deploy_time_checks':n,'recipient_design_guidance':p},'game_theory':{'summary':r['summary'],'coverage':r['coveredCount']+'/'+r['totalCount'],'exposed_scenarios':r['exposedScenarios'],'wow_alignments':r['wowAlignments'],'scenarios':r['results']['map'](w=>({'scenario':w['scenario'],'covered':w['covered'],'conflict':w['conflict'],'user_protection':w['userProtection'],'evaluation_metric':w['evaluationMetric'],'recommendation':w['recommendation']}))},'workflow_design_assessment':{'score':s['score'],'summary':s['summary'],'findings':s['findings']['map'](w=>({'kind':w['kind'],'severity':w['severity'],'message':w['message'],'fix':w['fix']})),'checks':s['checks']['map'](w=>({'id':w['id'],'dimension':w['dimension'],'passed':w['passed'],'severity':w['severity'],'message':w['message'],'fix':w['fix']}))},'creation_plan':t,'post_deploy_steps':o,'warnings':e['warnings'],'next_action':q['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.':'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).'};}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,4 +1,5 @@
1
1
  import { type MetricType, type MetricScale, type ConstraintRule, type ConstraintSeverity, type ConstraintViolationAction } from "../../extensions/index.js";
2
+ import type { IndustryTraits } from "../../knowledge/industry-registry.js";
2
3
  import { type InfrastructureLever } from "../../persona/strategy-intent.js";
3
4
  import type { LocationSensitivity } from "../../evaluation/location-match.js";
4
5
  export declare const LOCAL_MODE_OWNER = "local";
@@ -11,15 +12,21 @@ export interface RecommendIndustryInput {
11
12
  export declare function handleRecommendIndustry(v: RecommendIndustryInput): {
12
13
  action: "recommend_industry";
13
14
  intent: string;
14
- inferred_traits: import("../../knowledge/industry-registry.js").IndustryTraits;
15
+ inferred_traits: IndustryTraits;
15
16
  inference_confidence: number;
16
17
  matched_keywords: string[];
18
+ domain_priors: import("../../knowledge/industry-generalizer.js").DomainPriorMatch[];
17
19
  strategy_intents: import("../../persona/strategy-intent.js").StrategyIntent[];
18
20
  lever_suggestions: import("../../persona/strategy-intent.js").LeverSuggestion[];
19
21
  recommendations: {
20
22
  industry: string;
21
23
  similarity: number;
24
+ trait_distance: number | undefined;
22
25
  matched_traits: string[];
26
+ contradicted_traits: string[];
27
+ evidenced_traits: string[];
28
+ domain_prior: boolean | undefined;
29
+ requirement_support: number | undefined;
23
30
  location_sensitivity: LocationSensitivity;
24
31
  trust_selling_points: string[];
25
32
  build_notes: string[];
@@ -29,6 +36,10 @@ export declare function handleRecommendIndustry(v: RecommendIndustryInput): {
29
36
  missing_levers: InfrastructureLever[];
30
37
  } | undefined;
31
38
  }[];
39
+ excluded_by_consistency: {
40
+ industry: string;
41
+ contradicted_requirements: string[];
42
+ }[];
32
43
  hint: string;
33
44
  };
34
45
  export declare function handleListModes(): Promise<{
@@ -1 +1 @@
1
- import{getIndustryModeRegistry,getMetricRegistry,getConstraintRegistry}from'../../extensions/index.js';import{inferTraitsFromDescription,findSimilarIndustries}from'../../knowledge/industry-generalizer.js';import{resolveObjective,buildStrategyIntent,suggestLevers}from'../../persona/strategy-intent.js';export const LOCAL_MODE_OWNER='local';function locationSensitivity(a){if(a['has_logistics'])return'logistics';if(a['pure_digital'])return'near';return'strict';}const RM1_11_NODE_REGEX=/(^|_)(disputed?|arbitration|arb)(_|$)|^(refund|refunded|deposit_refunded|deposit_deducted|cancel|cancelled)$/i;function validateMachineShape(a,b){const c=[];if(!Array['isArray'](a))return c;const d=new Set();for(const e of a){const f=e?.['name'];if(typeof f!=='string'||!f){c['push'](b+':\x20every\x20node\x20must\x20have\x20a\x20non-empty\x20string\x20\x27name\x27');continue;}d['has'](f)&&c['push'](b+':\x20duplicate\x20node\x20name\x20\x27'+f+'\x27\x20(R-M1-10)'),d['add'](f),RM1_11_NODE_REGEX['test'](f)&&c['push'](b+':\x20node\x20\x27'+f+'\x27\x20violates\x20R-M1-11\x20—\x20dispute/refund\x20flows\x20must\x20NOT\x20be\x20'+'modeled\x20as\x20Machine\x20nodes.\x20Disputes\x20flow\x20through\x20Service.arbitrations\x20→\x20Arbitration.dispute()\x20'+'independently\x20of\x20the\x20Machine.\x20Use\x20business-state\x20nodes\x20(e.g.\x20\x27cancelled\x27,\x20\x27return_approved\x27)\x20'+'and\x20route\x20fund\x20refunds\x20via\x20Allocator\x20triggered\x20by\x20those\x20states.');}return c;}function modeLevers(a){const b=[];return(a['capabilities_used']['some'](d=>d['startsWith']('reward.'))||a['flywheel']?.['rewardStrategy']&&a['flywheel']['rewardStrategy']!=='User-defined')&&b['push']('reward'),(a['flywheel']?.['discountStrategy']&&a['flywheel']['discountStrategy']!=='User-defined'||a['config_overrides']?.['service']?.['first_order_discount']===!![])&&b['push']('discount'),(a['capabilities_used']['includes']('guard.validate_buy')||a['guards']['some'](c=>c['template_id']['includes']('buy')))&&b['push']('buy_guard'),a['capabilities_used']['includes']('machine.node_topology')&&a['machine_shape']['length']>0x0&&b['push']('machine_design'),b;}function resolveStrategyObjectives(a){const b=typeof a==='string'?[a]:a??[],c=new Set();for(const d of b){const e=resolveObjective(d);if(e)c['add'](e);}return[...c];}export function handleRecommendIndustry(a){const b=(a['intent']??a['project_description']??a['project_name']??'')['trim']();if(!b)throw new Error('recommend_industry\x20requires\x20\x27intent\x27\x20(business\x20description\x20text).\x20'+'Example:\x20intent=\x27I\x20rent\x20cameras\x20to\x20photographers\x20with\x20deposit\x20and\x20damage\x20inspection\x27.');const c=inferTraitsFromDescription(b),d=findSimilarIndustries(c['traits'],0x3),e=resolveStrategyObjectives(a['strategy']),f=e['map'](k=>buildStrategyIntent(k)),g=[...new Set(f['flatMap'](k=>k['levers']))],h=getIndustryModeRegistry(),i=d['map'](k=>{const l=h['getMode'](k['industry']),n=l?modeLevers(l):[],o=g['filter'](q=>n['includes'](q)),p=g['length']>0x0?{'score':o['length']/g['length'],'matched_levers':o,'missing_levers':g['filter'](q=>!n['includes'](q))}:undefined;return{'industry':k['industry'],'similarity':k['similarity'],'matched_traits':k['matched_traits'],'location_sensitivity':l?locationSensitivity(l['traits']):'strict','trust_selling_points':l?l['flywheel']?.['trustSellingPoints']??[]:[],'build_notes':l?.['build_notes']??[],'strategy_alignment':p};});g['length']>0x0&&i['sort']((k,l)=>{const m=k['similarity']*0.7+(k['strategy_alignment']?.['score']??0x0)*0.3,n=l['similarity']*0.7+(l['strategy_alignment']?.['score']??0x0)*0.3;return n-m;});const j=i[0x0];return{'action':'recommend_industry','intent':b,'inferred_traits':c['traits'],'inference_confidence':c['confidence'],'matched_keywords':c['matched_keywords'],'strategy_intents':f,'lever_suggestions':f['flatMap'](k=>suggestLevers(k)),'recommendations':i,'hint':j?'Top\x20match:\x20\x27'+j['industry']+'\x27\x20(similarity\x20'+(j['similarity']*0x64)['toFixed'](0x0)+'%'+(g['length']>0x0?',\x20strategy\x20alignment\x20'+((j['strategy_alignment']?.['score']??0x0)*0x64)['toFixed'](0x0)+'%':'')+').\x20Use\x20it\x20to\x20shape\x20the\x20build\x20—\x20run\x20goal_operation\x20action=\x27merchant_guide\x27\x20(or\x20\x27analyze_intent\x27)\x20with\x20this\x20industry\x20context,\x20'+'or\x20choose\x20another\x20industry\x20from\x20\x27recommendations\x27.':'No\x20similar\x20industry\x20found.\x20Shape\x20the\x20build\x20from\x20scratch\x20via\x20goal_operation\x20action=\x27merchant_guide\x27.'};}export async function handleListModes(){const a=getIndustryModeRegistry(),b=a['listModes']()['filter'](d=>d['source']==='builtin')['map'](d=>({'name':d['name'],'display_name':d['display_name'],'version':d['version'],'key_risk':d['key_risk'],'machine_nodes':d['machine_shape']['map'](e=>e['name']),'buyer_action_nodes':d['machine_shape']['filter'](e=>e['operator']==='order_payer')['map'](e=>e['name']),'similar_industries':d['similar_industries']??[],'location_sensitivity':locationSensitivity(d['traits']),'trust_selling_points':d['flywheel']?.['trustSellingPoints']??[],'build_notes':d['build_notes']??[]})),c=(await a['listUserModes'](LOCAL_MODE_OWNER))['map'](d=>({'name':d['name'],'display_name':d['display_name'],'version':d['version'],'derived_from':d['derived_from']??null,'key_risk':d['key_risk'],'machine_nodes':d['machine_shape']['map'](e=>e['name']),'buyer_action_nodes':d['machine_shape']['filter'](e=>e['operator']==='order_payer')['map'](e=>e['name']),'location_sensitivity':locationSensitivity(d['traits']),'trust_selling_points':d['flywheel']?.['trustSellingPoints']??[],'build_notes':d['build_notes']??[],'evolution_history':(d['evolution_history']??[])['map'](e=>({'version':e['version'],'changed_at':e['changed_at'],'changes':e['changes']}))}));return{'action':'list_modes','builtin_modes':b,'user_modes':c,'owner':LOCAL_MODE_OWNER,'hint':'Use\x20a\x20builtin\x20mode\x20name\x20as\x20the\x20industry/mode\x20context\x20for\x20your\x20build\x20(see\x20recommend_industry\x20/\x20merchant_guide).\x20'+'Use\x20derive_user_mode\x20to\x20customize\x20a\x20builtin\x20mode,\x20or\x20register_user_mode\x20for\x20a\x20fully\x20custom\x20mode.\x20'+'User\x20modes\x20are\x20referenced\x20as\x20\x27<name>\x27\x20in\x20derive/evolve/unregister\x20actions.'};}export async function handleDeriveUserMode(a){const b=requireField(a['mode_source'],'mode_source'),c=requireField(a['mode_name'],'mode_name'),d=a['mode_changes']??{},e=validateMachineShape(d['machine_shape'],'mode_changes.machine_shape');if(e['length']>0x0)throw new Error('derive_user_mode\x20blocked:\x0a'+e['join']('\x0a'));const f=getIndustryModeRegistry(),g=await f['deriveMode'](b,d,LOCAL_MODE_OWNER,c,a['mode_display_name']);if(!g)throw new Error('derive_user_mode\x20failed:\x20source\x20mode\x20\x27'+b+'\x27\x20not\x20found,\x20or\x20name\x20\x27'+c+'\x27\x20conflicts\x20'+'with\x20a\x20builtin/existing\x20user\x20mode.\x20Call\x20list_modes\x20to\x20see\x20available\x20names.');return{'action':'derive_user_mode','mode':summarizeUserMode(g),'hint':'Mode\x20\x27'+c+'\x27\x20derived\x20from\x20\x27'+b+'\x27.\x20Use\x20it\x20as\x20the\x20industry/mode\x20context\x20for\x20your\x20build.\x20'+'Iterate\x20with\x20evolve_user_mode.'};}export async function handleEvolveUserMode(a){const b=requireField(a['mode_name'],'mode_name'),c=requireField(a['mode_change_description'],'mode_change_description'),d=a['mode_changes']??{},e=validateMachineShape(d['machine_shape'],'mode_changes.machine_shape');if(e['length']>0x0)throw new Error('evolve_user_mode\x20blocked:\x0a'+e['join']('\x0a'));const f=getIndustryModeRegistry(),g=await f['evolveMode'](b,d,LOCAL_MODE_OWNER,c,a['mode_bump_version']??!![]);if(!g)throw new Error('evolve_user_mode\x20failed:\x20user\x20mode\x20\x27'+b+'\x27\x20not\x20found\x20for\x20owner\x20\x27'+LOCAL_MODE_OWNER+'\x27.\x20'+'Call\x20list_modes\x20to\x20see\x20your\x20modes.');return{'action':'evolve_user_mode','mode':summarizeUserMode(g),'hint':'Mode\x20\x27'+b+'\x27\x20evolved\x20to\x20'+g['version']+'.\x20Evolution\x20history\x20recorded.'};}export async function handleRegisterUserMode(a){const b=requireField(a['mode_name'],'mode_name'),c=a['mode_changes']??{},d=[];(!Array['isArray'](c['machine_shape'])||c['machine_shape']['length']===0x0)&&d['push']('machine_shape\x20(non-empty\x20array\x20of\x20{name,\x20role})');(typeof c['key_risk']!=='string'||!c['key_risk'])&&d['push']('key_risk\x20(string\x20describing\x20the\x20industry\x27s\x20key\x20risk)');if(d['length']>0x0)throw new Error('register_user_mode\x20requires\x20these\x20fields\x20in\x20mode_changes:\x20'+d['join'](',\x20')+'.\x20'+'Tip:\x20derive_user_mode\x20from\x20a\x20builtin\x20mode\x20is\x20usually\x20easier\x20than\x20registering\x20from\x20scratch.');const e=validateMachineShape(c['machine_shape'],'mode_changes.machine_shape');if(e['length']>0x0)throw new Error('register_user_mode\x20blocked:\x0a'+e['join']('\x0a'));const f=getIndustryModeRegistry(),g=f['getMode']('general');if(!g)throw new Error('Builtin\x20mode\x20\x27general\x27\x20not\x20registered\x20—\x20cannot\x20build\x20custom\x20mode\x20defaults');const h={...g,...c,'name':b,'display_name':a['mode_display_name']??b,'version':'v1','source':'custom','owner':LOCAL_MODE_OWNER,'derived_from':undefined,'evolution_history':[]},i=await f['registerUserMode'](h,LOCAL_MODE_OWNER);if(!i)throw new Error('register_user_mode\x20failed:\x20name\x20\x27'+b+'\x27\x20conflicts\x20with\x20a\x20builtin/existing\x20user\x20mode,\x20'+'or\x20payload\x20is\x20invalid.\x20Call\x20list_modes\x20to\x20see\x20available\x20names.');return{'action':'register_user_mode','mode':summarizeUserMode(h),'hint':'Custom\x20mode\x20\x27'+b+'\x27\x20registered.\x20Use\x20it\x20as\x20the\x20industry/mode\x20context\x20for\x20your\x20build.'};}export async function handleUnregisterUserMode(a){const b=requireField(a['mode_name'],'mode_name'),c=getIndustryModeRegistry(),d=await c['unregisterUserMode'](b,LOCAL_MODE_OWNER);if(!d)throw new Error('unregister_user_mode\x20failed:\x20user\x20mode\x20\x27'+b+'\x27\x20not\x20found\x20for\x20owner\x20\x27'+LOCAL_MODE_OWNER+'\x27.');return{'action':'unregister_user_mode','removed':!![],'mode_name':b};}export async function handleRegisterCustomMetric(a){const b=requireField(a['metric_id'],'metric_id'),c=requireField(a['metric_display_name'],'metric_display_name'),d=requireField(a['metric_description'],'metric_description'),e=requireField(a['metric_type'],'metric_type'),f=requireField(a['metric_scale'],'metric_scale'),g=await getMetricRegistry()['registerCustomMetric'](b,c,d,e,f,LOCAL_MODE_OWNER,a['metric_weight']);if(!g)throw new Error('register_custom_metric\x20failed:\x20metric_id\x20\x27'+b+'\x27\x20already\x20exists\x20or\x20fields\x20are\x20invalid.');return{'action':'register_custom_metric','metric':{'metric_id':b,'display_name':c,'description':d,'type':e,'scale':f,'weight':a['metric_weight']??0x1,'scope':'custom','owner':LOCAL_MODE_OWNER},'hint':'Custom\x20metric\x20\x27'+b+'\x27\x20registered\x20globally\x20and\x20persisted\x20(survives\x20restart)\x20—\x20all\x20modes\x20reference\x20it\x20in\x20evaluation.'};}export async function handleUnregisterCustomMetric(a){const b=requireField(a['metric_id'],'metric_id'),c=await getMetricRegistry()['unregisterMetric'](b,LOCAL_MODE_OWNER);if(!c)throw new Error('unregister_custom_metric\x20failed:\x20custom\x20metric\x20\x27'+b+'\x27\x20not\x20found\x20(builtin\x20metrics\x20cannot\x20be\x20deleted).\x20'+'Call\x20list_metrics_constraints\x20with\x20scope_filter=\x27custom\x27\x20to\x20see\x20deletable\x20metrics.');return{'action':'unregister_custom_metric','removed':!![],'metric_id':b};}export async function handleRegisterCustomConstraint(a){const b=requireField(a['constraint_id'],'constraint_id'),c=requireField(a['constraint_display_name'],'constraint_display_name'),d=requireField(a['constraint_description'],'constraint_description'),e=a['constraint_rule'];if(!e||typeof e!=='object'||!('type'in e))throw new Error('constraint_rule\x20is\x20required\x20and\x20must\x20be\x20one\x20of:\x20'+'{type:\x27capability_required\x27,\x20capability_id}\x20|\x20{type:\x27capability_forbidden\x27,\x20capability_id}\x20|\x20'+'{type:\x27numeric_limit\x27,\x20field,\x20max?,\x20min?}\x20|\x20{type:\x27condition_required\x27,\x20condition,\x20ai_evaluated:true}');const f=await getConstraintRegistry()['registerCustomConstraint'](b,c,d,e,LOCAL_MODE_OWNER,a['constraint_severity']??'soft',a['constraint_on_violation']??'warn');if(!f)throw new Error('register_custom_constraint\x20failed:\x20constraint_id\x20\x27'+b+'\x27\x20already\x20exists\x20or\x20rule\x20is\x20invalid.');return{'action':'register_custom_constraint','constraint':{'constraint_id':b,'display_name':c,'description':d,'rule':e,'severity':a['constraint_severity']??'soft','on_violation':a['constraint_on_violation']??'warn','scope':'custom','owner':LOCAL_MODE_OWNER},'hint':'Custom\x20constraint\x20\x27'+b+'\x27\x20registered\x20and\x20persisted\x20(survives\x20restart).\x20\x27hard\x27\x20constraints\x20mark\x20a\x20mode\x20not\x20applicable\x20on\x20violation;\x20\x27soft\x27\x20only\x20warn.'};}export async function handleUnregisterCustomConstraint(a){const b=requireField(a['constraint_id'],'constraint_id'),c=await getConstraintRegistry()['unregisterConstraint'](b,LOCAL_MODE_OWNER);if(!c)throw new Error('unregister_custom_constraint\x20failed:\x20custom\x20constraint\x20\x27'+b+'\x27\x20not\x20found\x20(builtin\x20constraints\x20cannot\x20be\x20deleted).\x20'+'Call\x20list_metrics_constraints\x20with\x20scope_filter=\x27custom\x27\x20to\x20see\x20deletable\x20constraints.');return{'action':'unregister_custom_constraint','removed':!![],'constraint_id':b};}export async function handleListMetricsConstraints(a){const b=(await getMetricRegistry()['listMetrics']({'type':a['metric_type_filter'],'scope':a['scope_filter']}))['map'](d=>({'metric_id':d['metric_id'],'display_name':d['display_name'],'description':d['description'],'type':d['type'],'scale':d['scale'],'weight':d['weight'],'scope':d['scope']})),c=(await getConstraintRegistry()['listConstraints']({'scope':a['scope_filter']}))['map'](d=>({'constraint_id':d['constraint_id'],'display_name':d['display_name'],'description':d['description'],'rule':d['rule'],'severity':d['severity'],'on_violation':d['on_violation'],'scope':d['scope']}));return{'action':'list_metrics_constraints','metrics':b,'constraints':c,'hint':'Register\x20custom\x20entries\x20via\x20register_custom_metric\x20/\x20register_custom_constraint;\x20'+'delete\x20via\x20unregister_custom_metric\x20/\x20unregister_custom_constraint\x20(custom\x20only).\x20'+'Custom\x20entries\x20are\x20persisted\x20and\x20survive\x20restart.\x20'+'Filter\x20with\x20metric_type_filter\x20(\x27risk\x27|\x27benefit\x27)\x20or\x20scope_filter\x20(\x27builtin\x27|\x27custom\x27).'};}function requireField(a,b){if(a===undefined||a===null||typeof a==='string'&&!a['trim']())throw new Error('\x27'+b+'\x27\x20is\x20required\x20for\x20this\x20action');return a;}function summarizeUserMode(a){return{'name':a['name'],'display_name':a['display_name'],'version':a['version'],'derived_from':a['derived_from']??null,'owner':a['owner'],'key_risk':a['key_risk'],'machine_nodes':a['machine_shape']['map'](b=>b['name']),'buyer_action_nodes':a['machine_shape']['filter'](b=>b['operator']==='order_payer')['map'](b=>b['name']),'location_sensitivity':locationSensitivity(a['traits']),'trust_selling_points':a['flywheel']?.['trustSellingPoints']??[],'build_notes':a['build_notes']??[],'evolution_history':(a['evolution_history']??[])['map'](b=>({'version':b['version'],'changed_at':b['changed_at'],'changes':b['changes']}))};}
1
+ import{getIndustryModeRegistry,getMetricRegistry,getConstraintRegistry}from'../../extensions/index.js';import{inferTraitsFromDescription,findSimilarIndustries,detectDomainPriors,filterConsistentIndustries}from'../../knowledge/industry-generalizer.js';import{resolveObjective,buildStrategyIntent,suggestLevers}from'../../persona/strategy-intent.js';export const LOCAL_MODE_OWNER='local';function locationSensitivity(a){if(a['has_logistics'])return'logistics';if(a['pure_digital'])return'near';return'strict';}const RM1_11_NODE_REGEX=/(^|_)(disputed?|arbitration|arb)(_|$)|^(refund|refunded|deposit_refunded|deposit_deducted|cancel|cancelled)$/i;function validateMachineShape(a,b){const c=[];if(!Array['isArray'](a))return c;const d=new Set();for(const e of a){const f=e?.['name'];if(typeof f!=='string'||!f){c['push'](b+':\x20every\x20node\x20must\x20have\x20a\x20non-empty\x20string\x20\x27name\x27');continue;}d['has'](f)&&c['push'](b+':\x20duplicate\x20node\x20name\x20\x27'+f+'\x27\x20(R-M1-10)'),d['add'](f),RM1_11_NODE_REGEX['test'](f)&&c['push'](b+':\x20node\x20\x27'+f+'\x27\x20violates\x20R-M1-11\x20—\x20dispute/refund\x20flows\x20must\x20NOT\x20be\x20'+'modeled\x20as\x20Machine\x20nodes.\x20Disputes\x20flow\x20through\x20Service.arbitrations\x20→\x20Arbitration.dispute()\x20'+'independently\x20of\x20the\x20Machine.\x20Use\x20business-state\x20nodes\x20(e.g.\x20\x27cancelled\x27,\x20\x27return_approved\x27)\x20'+'and\x20route\x20fund\x20refunds\x20via\x20Allocator\x20triggered\x20by\x20those\x20states.');}return c;}function modeLevers(a){const b=[];return(a['capabilities_used']['some'](d=>d['startsWith']('reward.'))||a['flywheel']?.['rewardStrategy']&&a['flywheel']['rewardStrategy']!=='User-defined')&&b['push']('reward'),(a['flywheel']?.['discountStrategy']&&a['flywheel']['discountStrategy']!=='User-defined'||a['config_overrides']?.['service']?.['first_order_discount']===!![])&&b['push']('discount'),(a['capabilities_used']['includes']('guard.validate_buy')||a['guards']['some'](c=>c['template_id']['includes']('buy')))&&b['push']('buy_guard'),a['capabilities_used']['includes']('machine.node_topology')&&a['machine_shape']['length']>0x0&&b['push']('machine_design'),b;}function resolveStrategyObjectives(a){const b=typeof a==='string'?[a]:a??[],c=new Set();for(const d of b){const e=resolveObjective(d);if(e)c['add'](e);}return[...c];}const TRAIT_OBJECTIVE_PRIORS=[{'when':a=>a['trust_sensitivity']==='high'||a['regulatory_intensity']==='high','objective':'buyer_screening','metrics':['dispute_rate','claim_rate'],'target':'buyer\x20eligibility\x20gate\x20covers\x20every\x20party\x20whose\x20identity\x20the\x20trade\x20depends\x20on'},{'when':a=>a['long_cycle'],'objective':'gross_margin_control','metrics':['acceptance_rate','cycle_days'],'target':'margin\x20held\x20across\x20the\x20full\x20delivery\x20cycle,\x20not\x20per\x20milestone'},{'when':a=>a['consumption_frequency']==='frequent','objective':'sales_priority','metrics':['order_volume','repeat_rate'],'target':'repeat-purchase\x20order\x20volume\x20over\x20the\x20next\x2030\x20days'},{'when':a=>a['avg_ticket_size']==='large'||a['deposit_required'],'objective':'profit_priority','metrics':['gross_margin','escrow_balance'],'target':'per-order\x20margin\x20first;\x20the\x20ticket\x20is\x20large\x20enough\x20that\x20margin\x20dominates\x20volume'},{'when':a=>a['has_logistics'],'objective':'gross_margin_control','metrics':['fulfilment_cost_ratio','on_time_rate'],'target':'fulfilment\x20cost\x20held\x20inside\x20the\x20declared\x20merchant\x20share'}];function traitDerivedObjectives(a,b=0x2){const c=[],d=new Set();for(const e of TRAIT_OBJECTIVE_PRIORS){if(c['length']>=b)break;if(d['has'](e['objective']))continue;if(!e['when'](a))continue;d['add'](e['objective']),c['push']({'objective':e['objective'],'metrics':[...e['metrics']],'target':e['target']});}return c;}export function handleRecommendIndustry(a){const b=(a['intent']??a['project_description']??a['project_name']??'')['trim']();if(!b)throw new Error('recommend_industry\x20requires\x20\x27intent\x27\x20(business\x20description\x20text).\x20'+'Example:\x20intent=\x27I\x20rent\x20cameras\x20to\x20photographers\x20with\x20deposit\x20and\x20damage\x20inspection\x27.');const c=inferTraitsFromDescription(b),d=detectDomainPriors(b),e=new Set(d['flatMap'](y=>y['industries'])),f=new Map();for(const y of d){for(const z of y['industries']){f['set'](z,Math['min'](0.25,(f['get'](z)??0x0)+y['boost']));}}const g=findSimilarIndustries(c['traits'],undefined,{'trait_confidence':c['trait_confidence']}),h=g['map'](A=>{const B=f['get'](A['industry'])??0x0;if(B===0x0)return A;const C=Math['min'](0x1,Number((A['similarity']+B)['toFixed'](0x4)));return{...A,'similarity':C,'trait_distance':Number((0x1-C)['toFixed'](0x4)),'domain_prior':!![]};}),{consistent:i,inconsistent:j}=filterConsistentIndustries(h,c['traits'],c['trait_confidence']),k=j['map'](A=>({'industry':A['industry'],'contradicted_requirements':A['contradictions']['map'](B=>B['trait']+'='+String(B['value'])+'\x20('+B['reason']+')')}));i['sort']((A,B)=>B['similarity']-A['similarity']||A['industry']['localeCompare'](B['industry']));const l=i['slice'](0x0,0x3),m=resolveStrategyObjectives(a['strategy']),n=m['map'](A=>buildStrategyIntent(A)),o=n['length']>0x0||c['confidence']===0x0?[]:traitDerivedObjectives(c['traits'])['map'](A=>buildStrategyIntent(A['objective'],A['target'],A['metrics'])),q=[...n,...o],r=[...new Set(q['flatMap'](A=>A['levers']))],s=getIndustryModeRegistry(),t=l['map'](A=>{const B=s['getMode'](A['industry']),C=B?modeLevers(B):[],D=r['filter'](F=>C['includes'](F)),E=r['length']>0x0?{'score':D['length']/r['length'],'matched_levers':D,'missing_levers':r['filter'](F=>!C['includes'](F))}:undefined;return{'industry':A['industry'],'similarity':A['similarity'],'trait_distance':A['trait_distance'],'matched_traits':A['matched_traits'],'contradicted_traits':A['contradicted_traits']??[],'evidenced_traits':A['evidenced_traits']??[],'domain_prior':e['has'](A['industry'])?!![]:undefined,'requirement_support':A['requirement_support'],'location_sensitivity':B?locationSensitivity(B['traits']):'strict','trust_selling_points':B?B['flywheel']?.['trustSellingPoints']??[]:[],'build_notes':B?.['build_notes']??[],'strategy_alignment':E};});r['length']>0x0&&t['sort']((A,B)=>{const C=A['similarity']*0.7+(A['strategy_alignment']?.['score']??0x0)*0.3,D=B['similarity']*0.7+(B['strategy_alignment']?.['score']??0x0)*0.3;return D-C;});const u=t[0x0],w=d['length']>0x0?'\x20Domain\x20prior\x20applied:\x20'+d['map'](A=>A['domain']+'\x20('+A['matched_keywords']['slice'](0x0,0x6)['join']('/')+')')['join'](';\x20')+'.':'',x=k['length']>0x0?'\x20Excluded\x20'+k['length']+'\x20industry\x20mode(s)\x20whose\x20required\x20traits\x20the\x20inference\x20contradicts:\x20'+k['map'](A=>A['industry']+'\x20['+A['contradicted_requirements']['join'](';\x20')+']')['join']('\x20|\x20')+'.':'';return{'action':'recommend_industry','intent':b,'inferred_traits':c['traits'],'inference_confidence':c['confidence'],'matched_keywords':c['matched_keywords'],'domain_priors':d,'strategy_intents':q,'lever_suggestions':q['flatMap'](A=>suggestLevers(A)),'recommendations':t,'excluded_by_consistency':k,'hint':u?'Top\x20match:\x20\x27'+u['industry']+'\x27\x20(similarity\x20'+(u['similarity']*0x64)['toFixed'](0x0)+'%'+(r['length']>0x0?',\x20strategy\x20alignment\x20'+((u['strategy_alignment']?.['score']??0x0)*0x64)['toFixed'](0x0)+'%':'')+').\x20Use\x20it\x20to\x20shape\x20the\x20build\x20—\x20run\x20goal_operation\x20action=\x27merchant_guide\x27\x20(or\x20\x27analyze_intent\x27)\x20with\x20this\x20industry\x20context,\x20'+'or\x20choose\x20another\x20industry\x20from\x20\x27recommendations\x27.'+w+x:'No\x20similar\x20industry\x20found.\x20Shape\x20the\x20build\x20from\x20scratch\x20via\x20goal_operation\x20action=\x27merchant_guide\x27.'+w};}export async function handleListModes(){const a=getIndustryModeRegistry(),b=a['listModes']()['filter'](d=>d['source']==='builtin')['map'](d=>({'name':d['name'],'display_name':d['display_name'],'version':d['version'],'key_risk':d['key_risk'],'machine_nodes':d['machine_shape']['map'](e=>e['name']),'buyer_action_nodes':d['machine_shape']['filter'](e=>e['operator']==='order_payer')['map'](e=>e['name']),'similar_industries':d['similar_industries']??[],'location_sensitivity':locationSensitivity(d['traits']),'trust_selling_points':d['flywheel']?.['trustSellingPoints']??[],'build_notes':d['build_notes']??[]})),c=(await a['listUserModes'](LOCAL_MODE_OWNER))['map'](d=>({'name':d['name'],'display_name':d['display_name'],'version':d['version'],'derived_from':d['derived_from']??null,'key_risk':d['key_risk'],'machine_nodes':d['machine_shape']['map'](e=>e['name']),'buyer_action_nodes':d['machine_shape']['filter'](e=>e['operator']==='order_payer')['map'](e=>e['name']),'location_sensitivity':locationSensitivity(d['traits']),'trust_selling_points':d['flywheel']?.['trustSellingPoints']??[],'build_notes':d['build_notes']??[],'evolution_history':(d['evolution_history']??[])['map'](e=>({'version':e['version'],'changed_at':e['changed_at'],'changes':e['changes']}))}));return{'action':'list_modes','builtin_modes':b,'user_modes':c,'owner':LOCAL_MODE_OWNER,'hint':'Use\x20a\x20builtin\x20mode\x20name\x20as\x20the\x20industry/mode\x20context\x20for\x20your\x20build\x20(see\x20recommend_industry\x20/\x20merchant_guide).\x20'+'Use\x20derive_user_mode\x20to\x20customize\x20a\x20builtin\x20mode,\x20or\x20register_user_mode\x20for\x20a\x20fully\x20custom\x20mode.\x20'+'User\x20modes\x20are\x20referenced\x20as\x20\x27<name>\x27\x20in\x20derive/evolve/unregister\x20actions.'};}export async function handleDeriveUserMode(a){const b=requireField(a['mode_source'],'mode_source'),c=requireField(a['mode_name'],'mode_name'),d=a['mode_changes']??{},e=validateMachineShape(d['machine_shape'],'mode_changes.machine_shape');if(e['length']>0x0)throw new Error('derive_user_mode\x20blocked:\x0a'+e['join']('\x0a'));const f=getIndustryModeRegistry(),g=await f['deriveMode'](b,d,LOCAL_MODE_OWNER,c,a['mode_display_name']);if(!g)throw new Error('derive_user_mode\x20failed:\x20source\x20mode\x20\x27'+b+'\x27\x20not\x20found,\x20or\x20name\x20\x27'+c+'\x27\x20conflicts\x20'+'with\x20a\x20builtin/existing\x20user\x20mode.\x20Call\x20list_modes\x20to\x20see\x20available\x20names.');return{'action':'derive_user_mode','mode':summarizeUserMode(g),'hint':'Mode\x20\x27'+c+'\x27\x20derived\x20from\x20\x27'+b+'\x27.\x20Use\x20it\x20as\x20the\x20industry/mode\x20context\x20for\x20your\x20build.\x20'+'Iterate\x20with\x20evolve_user_mode.'};}export async function handleEvolveUserMode(a){const b=requireField(a['mode_name'],'mode_name'),c=requireField(a['mode_change_description'],'mode_change_description'),d=a['mode_changes']??{},e=validateMachineShape(d['machine_shape'],'mode_changes.machine_shape');if(e['length']>0x0)throw new Error('evolve_user_mode\x20blocked:\x0a'+e['join']('\x0a'));const f=getIndustryModeRegistry(),g=await f['evolveMode'](b,d,LOCAL_MODE_OWNER,c,a['mode_bump_version']??!![]);if(!g)throw new Error('evolve_user_mode\x20failed:\x20user\x20mode\x20\x27'+b+'\x27\x20not\x20found\x20for\x20owner\x20\x27'+LOCAL_MODE_OWNER+'\x27.\x20'+'Call\x20list_modes\x20to\x20see\x20your\x20modes.');return{'action':'evolve_user_mode','mode':summarizeUserMode(g),'hint':'Mode\x20\x27'+b+'\x27\x20evolved\x20to\x20'+g['version']+'.\x20Evolution\x20history\x20recorded.'};}export async function handleRegisterUserMode(a){const b=requireField(a['mode_name'],'mode_name'),c=a['mode_changes']??{},d=[];(!Array['isArray'](c['machine_shape'])||c['machine_shape']['length']===0x0)&&d['push']('machine_shape\x20(non-empty\x20array\x20of\x20{name,\x20role})');(typeof c['key_risk']!=='string'||!c['key_risk'])&&d['push']('key_risk\x20(string\x20describing\x20the\x20industry\x27s\x20key\x20risk)');if(d['length']>0x0)throw new Error('register_user_mode\x20requires\x20these\x20fields\x20in\x20mode_changes:\x20'+d['join'](',\x20')+'.\x20'+'Tip:\x20derive_user_mode\x20from\x20a\x20builtin\x20mode\x20is\x20usually\x20easier\x20than\x20registering\x20from\x20scratch.');const e=validateMachineShape(c['machine_shape'],'mode_changes.machine_shape');if(e['length']>0x0)throw new Error('register_user_mode\x20blocked:\x0a'+e['join']('\x0a'));const f=getIndustryModeRegistry(),g=f['getMode']('general');if(!g)throw new Error('Builtin\x20mode\x20\x27general\x27\x20not\x20registered\x20—\x20cannot\x20build\x20custom\x20mode\x20defaults');const h={...g,...c,'name':b,'display_name':a['mode_display_name']??b,'version':'v1','source':'custom','owner':LOCAL_MODE_OWNER,'derived_from':undefined,'evolution_history':[]},i=await f['registerUserMode'](h,LOCAL_MODE_OWNER);if(!i)throw new Error('register_user_mode\x20failed:\x20name\x20\x27'+b+'\x27\x20conflicts\x20with\x20a\x20builtin/existing\x20user\x20mode,\x20'+'or\x20payload\x20is\x20invalid.\x20Call\x20list_modes\x20to\x20see\x20available\x20names.');return{'action':'register_user_mode','mode':summarizeUserMode(h),'hint':'Custom\x20mode\x20\x27'+b+'\x27\x20registered.\x20Use\x20it\x20as\x20the\x20industry/mode\x20context\x20for\x20your\x20build.'};}export async function handleUnregisterUserMode(a){const b=requireField(a['mode_name'],'mode_name'),c=getIndustryModeRegistry(),d=await c['unregisterUserMode'](b,LOCAL_MODE_OWNER);if(!d)throw new Error('unregister_user_mode\x20failed:\x20user\x20mode\x20\x27'+b+'\x27\x20not\x20found\x20for\x20owner\x20\x27'+LOCAL_MODE_OWNER+'\x27.');return{'action':'unregister_user_mode','removed':!![],'mode_name':b};}export async function handleRegisterCustomMetric(a){const b=requireField(a['metric_id'],'metric_id'),c=requireField(a['metric_display_name'],'metric_display_name'),d=requireField(a['metric_description'],'metric_description'),e=requireField(a['metric_type'],'metric_type'),f=requireField(a['metric_scale'],'metric_scale'),g=await getMetricRegistry()['registerCustomMetric'](b,c,d,e,f,LOCAL_MODE_OWNER,a['metric_weight']);if(!g)throw new Error('register_custom_metric\x20failed:\x20metric_id\x20\x27'+b+'\x27\x20already\x20exists\x20or\x20fields\x20are\x20invalid.');return{'action':'register_custom_metric','metric':{'metric_id':b,'display_name':c,'description':d,'type':e,'scale':f,'weight':a['metric_weight']??0x1,'scope':'custom','owner':LOCAL_MODE_OWNER},'hint':'Custom\x20metric\x20\x27'+b+'\x27\x20registered\x20globally\x20and\x20persisted\x20(survives\x20restart)\x20—\x20all\x20modes\x20reference\x20it\x20in\x20evaluation.'};}export async function handleUnregisterCustomMetric(a){const b=requireField(a['metric_id'],'metric_id'),c=await getMetricRegistry()['unregisterMetric'](b,LOCAL_MODE_OWNER);if(!c)throw new Error('unregister_custom_metric\x20failed:\x20custom\x20metric\x20\x27'+b+'\x27\x20not\x20found\x20(builtin\x20metrics\x20cannot\x20be\x20deleted).\x20'+'Call\x20list_metrics_constraints\x20with\x20scope_filter=\x27custom\x27\x20to\x20see\x20deletable\x20metrics.');return{'action':'unregister_custom_metric','removed':!![],'metric_id':b};}export async function handleRegisterCustomConstraint(a){const b=requireField(a['constraint_id'],'constraint_id'),c=requireField(a['constraint_display_name'],'constraint_display_name'),d=requireField(a['constraint_description'],'constraint_description'),e=a['constraint_rule'];if(!e||typeof e!=='object'||!('type'in e))throw new Error('constraint_rule\x20is\x20required\x20and\x20must\x20be\x20one\x20of:\x20'+'{type:\x27capability_required\x27,\x20capability_id}\x20|\x20{type:\x27capability_forbidden\x27,\x20capability_id}\x20|\x20'+'{type:\x27numeric_limit\x27,\x20field,\x20max?,\x20min?}\x20|\x20{type:\x27condition_required\x27,\x20condition,\x20ai_evaluated:true}');const f=await getConstraintRegistry()['registerCustomConstraint'](b,c,d,e,LOCAL_MODE_OWNER,a['constraint_severity']??'soft',a['constraint_on_violation']??'warn');if(!f)throw new Error('register_custom_constraint\x20failed:\x20constraint_id\x20\x27'+b+'\x27\x20already\x20exists\x20or\x20rule\x20is\x20invalid.');return{'action':'register_custom_constraint','constraint':{'constraint_id':b,'display_name':c,'description':d,'rule':e,'severity':a['constraint_severity']??'soft','on_violation':a['constraint_on_violation']??'warn','scope':'custom','owner':LOCAL_MODE_OWNER},'hint':'Custom\x20constraint\x20\x27'+b+'\x27\x20registered\x20and\x20persisted\x20(survives\x20restart).\x20\x27hard\x27\x20constraints\x20mark\x20a\x20mode\x20not\x20applicable\x20on\x20violation;\x20\x27soft\x27\x20only\x20warn.'};}export async function handleUnregisterCustomConstraint(a){const b=requireField(a['constraint_id'],'constraint_id'),c=await getConstraintRegistry()['unregisterConstraint'](b,LOCAL_MODE_OWNER);if(!c)throw new Error('unregister_custom_constraint\x20failed:\x20custom\x20constraint\x20\x27'+b+'\x27\x20not\x20found\x20(builtin\x20constraints\x20cannot\x20be\x20deleted).\x20'+'Call\x20list_metrics_constraints\x20with\x20scope_filter=\x27custom\x27\x20to\x20see\x20deletable\x20constraints.');return{'action':'unregister_custom_constraint','removed':!![],'constraint_id':b};}export async function handleListMetricsConstraints(a){const b=(await getMetricRegistry()['listMetrics']({'type':a['metric_type_filter'],'scope':a['scope_filter']}))['map'](d=>({'metric_id':d['metric_id'],'display_name':d['display_name'],'description':d['description'],'type':d['type'],'scale':d['scale'],'weight':d['weight'],'scope':d['scope']})),c=(await getConstraintRegistry()['listConstraints']({'scope':a['scope_filter']}))['map'](d=>({'constraint_id':d['constraint_id'],'display_name':d['display_name'],'description':d['description'],'rule':d['rule'],'severity':d['severity'],'on_violation':d['on_violation'],'scope':d['scope']}));return{'action':'list_metrics_constraints','metrics':b,'constraints':c,'hint':'Register\x20custom\x20entries\x20via\x20register_custom_metric\x20/\x20register_custom_constraint;\x20'+'delete\x20via\x20unregister_custom_metric\x20/\x20unregister_custom_constraint\x20(custom\x20only).\x20'+'Custom\x20entries\x20are\x20persisted\x20and\x20survive\x20restart.\x20'+'Filter\x20with\x20metric_type_filter\x20(\x27risk\x27|\x27benefit\x27)\x20or\x20scope_filter\x20(\x27builtin\x27|\x27custom\x27).'};}function requireField(a,b){if(a===undefined||a===null||typeof a==='string'&&!a['trim']())throw new Error('\x27'+b+'\x27\x20is\x20required\x20for\x20this\x20action');return a;}function summarizeUserMode(a){return{'name':a['name'],'display_name':a['display_name'],'version':a['version'],'derived_from':a['derived_from']??null,'owner':a['owner'],'key_risk':a['key_risk'],'machine_nodes':a['machine_shape']['map'](b=>b['name']),'buyer_action_nodes':a['machine_shape']['filter'](b=>b['operator']==='order_payer')['map'](b=>b['name']),'location_sensitivity':locationSensitivity(a['traits']),'trust_selling_points':a['flywheel']?.['trustSellingPoints']??[],'build_notes':a['build_notes']??[],'evolution_history':(a['evolution_history']??[])['map'](b=>({'version':b['version'],'changed_at':b['changed_at'],'changes':b['changes']}))};}
@@ -1 +1 @@
1
- import{Config,LocalMark,query_objects,query_object_last_updated,objectTypeFromAddress,ObjectType}from'@wowok/wowok';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){let c=a;if(!/^0x[0-9a-fA-F]{32,64}$/['test'](c)){const g=await LocalMark['Instance']()['get_address'](c);if(!g)throw new Error('Cannot\x20resolve\x20\x27'+c+'\x27\x20—\x20not\x20a\x20valid\x20address\x20and\x20no\x20LocalMark\x20entry\x20found.');c=g;}let d=b??undefined,f=null;if(!d)d=await Config['Instance']()['network_get']();try{const h=await query_objects({'objects':[c],'network':d});f=h?.['objects']?.[0x0]??null;if(!f&&b){const i=await Config['Instance']()['network_get']();if(i&&i!==d){const j=await query_objects({'objects':[c],'network':i,'no_cache':!![]}),k=j?.['objects']?.[0x0]??null;k&&(f=k,d=i);}}}catch(l){throw new Error('Failed\x20to\x20query\x20'+c+'\x20on\x20'+d+':\x20'+(l instanceof Error?l['message']:String(l)));}if(!f)throw new Error(c+'\x20not\x20found\x20on\x20'+d+'.\x20It\x20may\x20not\x20exist\x20on\x20this\x20network.');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};throw new Error('object_panorama:\x20unsupported\x20object\x20type\x20\x27'+(k||'unknown')+'\x27\x20for\x20'+g+'.\x20'+'Supported:\x20Progress\x20/\x20Demand\x20/\x20Order\x20/\x20Arb\x20/\x20Arbitration\x20/\x20Repository.');}
1
+ import{Config,LocalMark,query_objects,query_object_last_updated,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{resolveAddress as a308a}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 a308a(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+'.\x20It\x20may\x20not\x20exist\x20on\x20this\x20network.');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};throw new Error('object_panorama:\x20unsupported\x20object\x20type\x20\x27'+(k||'unknown')+'\x27\x20for\x20'+g+'.\x20'+'Supported:\x20Progress\x20/\x20Demand\x20/\x20Order\x20/\x20Arb\x20/\x20Arbitration\x20/\x20Repository.');}
@@ -1 +1 @@
1
- import{LocalMark,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{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){const c=await LocalMark['Instance']()['get_address'](a);if(!c)throw new Error('Cannot\x20resolve\x20'+b+'\x20\x27'+a+'\x27\x20—\x20not\x20a\x20valid\x20address\x20and\x20no\x20LocalMark\x20entry\x20found.\x20'+'Register\x20it\x20via\x20local_mark_operation\x20or\x20pass\x20the\x200x\x20address\x20directly.');return c;}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};}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=[];if(a4&&a6===g){const an=fld(a4,'rewards')??[];for(const ao of an){a7['push']({'address':ao,'description':'Service\x20reward\x20'+ao+'\x20(guard-gated\x20—\x20eligibility\x20verified\x20at\x20claim\x20time)'});}}const a8=isConsequenceNode(a0,'completed'),a9=isConsequenceNode(a0,'refunded');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':a7['length']>0x0?a7:undefined,'pending_compensation':a5,'rating_pending':a8&&a6===g,'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=a8?'completed':a9?'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':a8,'refunded':a9,'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':a8,'refunded':a9};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 a310a}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 a310a(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};}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=[];if(a4&&a6===g){const an=fld(a4,'rewards')??[];for(const ao of an){a7['push']({'address':ao,'description':'Service\x20reward\x20'+ao+'\x20(guard-gated\x20—\x20eligibility\x20verified\x20at\x20claim\x20time)'});}}const a8=isConsequenceNode(a0,'completed'),a9=isConsequenceNode(a0,'refunded');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':a7['length']>0x0?a7:undefined,'pending_compensation':a5,'rating_pending':a8&&a6===g,'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=a8?'completed':a9?'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':a8,'refunded':a9,'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':a8,'refunded':a9};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 +1 @@
1
- import{LocalMark}from'@wowok/wowok';import{Config}from'@wowok/wowok/w/local';import{deriveRelationshipProfile}from'../../relationship/index.js';import{analyzeDemanderInterest}from'../../participation/demander-interest.js';import{GUARD_BINDING_REGISTRY,OWNER_RECEIVE_COGNITION}from'../../knowledge/guard-bindings.js';import{detectBridgesForObjects,summarizeBridge}from'../../knowledge/scenario-topology.js';import{SdkDataPlane,expandTopology,projectRelationshipFacts}from'../../graph/onchain/index.js';export async function resolveAddress(a,b){if(/^0x[0-9a-fA-F]{4,}$/i['test'](a))return a;const c=await LocalMark['Instance']()['get_address'](a);if(!c)throw new Error('Cannot\x20resolve\x20'+b+'\x20\x27'+a+'\x27\x20—\x20not\x20a\x20valid\x20address\x20and\x20no\x20LocalMark\x20entry\x20found.\x20'+'Pass\x20the\x200x\x20address\x20directly\x20or\x20register\x20it\x20via\x20local_mark_operation.');return c;}export async function handleRelationshipProfile(a){if(!a['radar_account'])throw new Error('\x27radar_account\x27\x20is\x20required\x20for\x20relationship_profile');const b=a['context_network']??await Config['Instance']()['network_get'](),c=await resolveAddress(a['radar_account'],'radar_account'),d=new SdkDataPlane(b),e=await expandTopology(d,{'network':b,'seed':c,'budget':{'maxDepth':0x4,'maxNodes':0x384,'maxRpcs':0xa0,'perKindCaps':{'eoa.permission':0x19,'permission.core_binding':0x3c,'permission.tx_binding':0x3c,'eoa.order':0x28,'service.order':0x28,'order.allocation':0x28,'demand.presenter':0x3c,'machine.node':0x78}},'edges':{'tableEdges':['permission.entity','demand.presenter','machine.node']}}),f=[...e['gaps']];for(const z of e['truncations']){f['push']('truncated\x20'+z['schema']+'\x20at\x20'+z['nodeId']+':\x20observed\x20at\x20least\x20'+z['observed']+'\x20edge(s)');}if(e['budgetExhausted']['rpcs'])f['push']('RPC\x20batch\x20budget\x20exhausted\x20—\x20topology\x20is\x20partial\x20(see\x20budget\x20settings).');if(e['budgetExhausted']['nodes'])f['push']('Node\x20budget\x20exhausted\x20—\x20topology\x20is\x20partial.');const g=projectRelationshipFacts(e,c),{machines:h,orders:i,demands:j,allocations:k,contacts:l,arbitrations:m}={'machines':g['machines']??[],'orders':g['orders']??[],'demands':g['demands']??[],'allocations':g['allocations']??[],'contacts':g['contacts']??[],'arbitrations':g['arbitrations']??[]},n=deriveRelationshipProfile(g),o=new Set();if(k['length']>0x0)o['add']('Allocation');if(j['length']>0x0)o['add']('Demand');if(h['some'](A=>(A['forwards']??[])['some'](B=>B['guard'])))o['add']('MachineForward');if(m['length']>0x0)o['add']('Arbitration');for(const A of o){const B=GUARD_BINDING_REGISTRY['filter'](D=>D['object']===A);if(B['length']===0x0)continue;const C=B['map'](D=>{const E=D['preset_kind']==='amount'&&D['object']==='Allocation'?'\x20(Rate\x20is\x20basis\x20points;\x20rates\x20must\x20complete\x2010000\x20unless\x20a\x20Surplus\x20entry\x20exists)':'';return''+D['slot']+E+'\x20['+D['preset_kind']+']\x20—\x20creator:\x20'+D['creator']['split']('\x20—\x20')[0x0]['split']('.\x20')[0x0]+';\x20user:\x20'+D['user'];})['join']('\x20|\x20');n['notes']['push']('Guard-preset\x20deep\x20context\x20on\x20the\x20'+A+'(s)\x20in\x20this\x20topology:\x20'+C+'.');}k['length']>0x0&&n['notes']['push']('Cognition\x20fixed:\x20'+OWNER_RECEIVE_COGNITION);m['some'](D=>D['object_kind']==='service')&&f['push']('Arbitration\x20service\x20voting-guard\x20member\x20resolution\x20is\x20not\x20implemented\x20yet\x20—\x20arbitration\x20services\x20contribute\x20binding\x20presence\x20only\x20(Arb\x20CASE\x20votes\x20ARE\x20parsed\x20into\x20arbitration_delegation/dispute_resolution\x20edges).');const p=['Permission'];if(i['length']>0x0)p['push']('Order');if(h['length']>0x0)p['push']('Machine','Progress');if(k['length']>0x0)p['push']('Allocation','Payment');if(j['length']>0x0)p['push']('Demand');if(m['length']>0x0)p['push']('Arbitration','Arb');if(l['length']>0x0)p['push']('Contact');if(Object['keys'](g['service_owners']??{})['length']>0x0)p['push']('Service','Guard');const q=detectBridgesForObjects(p);if(q['length']>0x0){const D=q['slice'](0x0,0x8)['map'](E=>summarizeBridge(E))['join']('\x0a-\x20');n['notes']['push']('Scenario\x20topology\x20('+q['length']+'\x20bridge(s)\x20implied\x20by\x20the\x20touched\x20objects\x20—\x20capability\x20comes\x20from\x20the\x20'+('\x22integration,\x20not\x20from\x20any\x20single\x20object):\x0a-\x20'+D));}const r=a['relation_kinds']?new Set(a['relation_kinds']):undefined,s=r?n['edges']['filter'](E=>r['has'](E['kind'])):n['edges'],u=s['reduce']((E,F)=>{return E[F['kind']]=(E[F['kind']]??0x0)+0x1,E;},{});let w=c+'\x20holds\x20'+s['length']+'\x20relationship\x20edge(s)\x20across\x20'+Object['keys'](n['by_counterparty'])['length']+'\x20counterparty(ies)'+(Object['keys'](u)['length']>0x0?':\x20'+Object['entries'](u)['map'](([E,F])=>E+'×'+F)['join'](',\x20')+'.':'.');s['length']===0x0&&f['length']>0x0&&(w+='\x20No\x20edges\x20derived\x20—\x20check\x20data_gaps\x20(the\x20account\x20may\x20have\x20no\x20on-chain\x20power\x20carriers\x20on\x20this\x20network).');const x=(E,F)=>E['toLowerCase']()===F['toLowerCase'](),y=j['filter'](E=>E['owner']&&x(E['owner'],c))['map'](E=>({'demand':E['address'],...analyzeDemanderInterest({'account':c,'demand':E['address'],'presenters':E['presenters']??[],'rewards':(E['rewards']??[])['map'](F=>({'address':F})),'guards':E['guards']??[],'open':!(E['presenters']??[])['some'](F=>F['acceptance_score']!==undefined)})}));return y['length']>0x0&&(w+='\x20Anchor\x20demands\x20'+y['length']+'\x20demand(s)\x20—\x20demander-interest\x20analysis\x20attached.'),{'action':'relationship_profile','account':c,'edges':s,'by_counterparty':n['by_counterparty'],'notes':n['notes'],'data_gaps':f,'summary':w,...y['length']>0x0?{'demander_interest':y}:{}};}
1
+ import{Config}from'@wowok/wowok/w/local';import{resolveAddress as a313a}from'../../tools/handlers/name-resolution.js';import{deriveRelationshipProfile}from'../../relationship/index.js';import{analyzeDemanderInterest}from'../../participation/demander-interest.js';import{GUARD_BINDING_REGISTRY,OWNER_RECEIVE_COGNITION}from'../../knowledge/guard-bindings.js';import{detectBridgesForObjects,summarizeBridge}from'../../knowledge/scenario-topology.js';import{SdkDataPlane,expandTopology,projectRelationshipFacts}from'../../graph/onchain/index.js';export async function resolveAddress(a,b){return a313a(a,b);}export async function handleRelationshipProfile(a){if(!a['radar_account'])throw new Error('\x27radar_account\x27\x20is\x20required\x20for\x20relationship_profile');const b=a['context_network']??await Config['Instance']()['network_get'](),c=await resolveAddress(a['radar_account'],'radar_account'),d=new SdkDataPlane(b),e=await expandTopology(d,{'network':b,'seed':c,'budget':{'maxDepth':0x4,'maxNodes':0x384,'maxRpcs':0xa0,'perKindCaps':{'eoa.permission':0x19,'permission.core_binding':0x3c,'permission.tx_binding':0x3c,'eoa.order':0x28,'service.order':0x28,'order.allocation':0x28,'demand.presenter':0x3c,'machine.node':0x78}},'edges':{'tableEdges':['permission.entity','demand.presenter','machine.node']}}),f=[...e['gaps']];for(const z of e['truncations']){f['push']('truncated\x20'+z['schema']+'\x20at\x20'+z['nodeId']+':\x20observed\x20at\x20least\x20'+z['observed']+'\x20edge(s)');}if(e['budgetExhausted']['rpcs'])f['push']('RPC\x20batch\x20budget\x20exhausted\x20—\x20topology\x20is\x20partial\x20(see\x20budget\x20settings).');if(e['budgetExhausted']['nodes'])f['push']('Node\x20budget\x20exhausted\x20—\x20topology\x20is\x20partial.');const g=projectRelationshipFacts(e,c),{machines:h,orders:i,demands:j,allocations:k,contacts:l,arbitrations:m}={'machines':g['machines']??[],'orders':g['orders']??[],'demands':g['demands']??[],'allocations':g['allocations']??[],'contacts':g['contacts']??[],'arbitrations':g['arbitrations']??[]},n=deriveRelationshipProfile(g),o=new Set();if(k['length']>0x0)o['add']('Allocation');if(j['length']>0x0)o['add']('Demand');if(h['some'](A=>(A['forwards']??[])['some'](B=>B['guard'])))o['add']('MachineForward');if(m['length']>0x0)o['add']('Arbitration');for(const A of o){const B=GUARD_BINDING_REGISTRY['filter'](D=>D['object']===A);if(B['length']===0x0)continue;const C=B['map'](D=>{const E=D['preset_kind']==='amount'&&D['object']==='Allocation'?'\x20(Rate\x20is\x20basis\x20points;\x20rates\x20must\x20complete\x2010000\x20unless\x20a\x20Surplus\x20entry\x20exists)':'';return''+D['slot']+E+'\x20['+D['preset_kind']+']\x20—\x20creator:\x20'+D['creator']['split']('\x20—\x20')[0x0]['split']('.\x20')[0x0]+';\x20user:\x20'+D['user'];})['join']('\x20|\x20');n['notes']['push']('Guard-preset\x20deep\x20context\x20on\x20the\x20'+A+'(s)\x20in\x20this\x20topology:\x20'+C+'.');}k['length']>0x0&&n['notes']['push']('Cognition\x20fixed:\x20'+OWNER_RECEIVE_COGNITION);m['some'](D=>D['object_kind']==='service')&&f['push']('Arbitration\x20service\x20voting-guard\x20member\x20resolution\x20is\x20not\x20implemented\x20yet\x20—\x20arbitration\x20services\x20contribute\x20binding\x20presence\x20only\x20(Arb\x20CASE\x20votes\x20ARE\x20parsed\x20into\x20arbitration_delegation/dispute_resolution\x20edges).');const p=['Permission'];if(i['length']>0x0)p['push']('Order');if(h['length']>0x0)p['push']('Machine','Progress');if(k['length']>0x0)p['push']('Allocation','Payment');if(j['length']>0x0)p['push']('Demand');if(m['length']>0x0)p['push']('Arbitration','Arb');if(l['length']>0x0)p['push']('Contact');if(Object['keys'](g['service_owners']??{})['length']>0x0)p['push']('Service','Guard');const q=detectBridgesForObjects(p);if(q['length']>0x0){const D=q['slice'](0x0,0x8)['map'](E=>summarizeBridge(E))['join']('\x0a-\x20');n['notes']['push']('Scenario\x20topology\x20('+q['length']+'\x20bridge(s)\x20implied\x20by\x20the\x20touched\x20objects\x20—\x20capability\x20comes\x20from\x20the\x20'+('\x22integration,\x20not\x20from\x20any\x20single\x20object):\x0a-\x20'+D));}const r=a['relation_kinds']?new Set(a['relation_kinds']):undefined,s=r?n['edges']['filter'](E=>r['has'](E['kind'])):n['edges'],u=s['reduce']((E,F)=>{return E[F['kind']]=(E[F['kind']]??0x0)+0x1,E;},{});let w=c+'\x20holds\x20'+s['length']+'\x20relationship\x20edge(s)\x20across\x20'+Object['keys'](n['by_counterparty'])['length']+'\x20counterparty(ies)'+(Object['keys'](u)['length']>0x0?':\x20'+Object['entries'](u)['map'](([E,F])=>E+'×'+F)['join'](',\x20')+'.':'.');s['length']===0x0&&f['length']>0x0&&(w+='\x20No\x20edges\x20derived\x20—\x20check\x20data_gaps\x20(the\x20account\x20may\x20have\x20no\x20on-chain\x20power\x20carriers\x20on\x20this\x20network).');const x=(E,F)=>E['toLowerCase']()===F['toLowerCase'](),y=j['filter'](E=>E['owner']&&x(E['owner'],c))['map'](E=>({'demand':E['address'],...analyzeDemanderInterest({'account':c,'demand':E['address'],'presenters':E['presenters']??[],'rewards':(E['rewards']??[])['map'](F=>({'address':F})),'guards':E['guards']??[],'open':!(E['presenters']??[])['some'](F=>F['acceptance_score']!==undefined)})}));return y['length']>0x0&&(w+='\x20Anchor\x20demands\x20'+y['length']+'\x20demand(s)\x20—\x20demander-interest\x20analysis\x20attached.'),{'action':'relationship_profile','account':c,'edges':s,'by_counterparty':n['by_counterparty'],'notes':n['notes'],'data_gaps':f,'summary':w,...y['length']>0x0?{'demander_interest':y}:{}};}
@@ -0,0 +1 @@
1
+ import{describe,it,expect}from'vitest';import{generateBusinessReport}from'./reverse-mapping.js';const SERVICE='0x'+'11'['repeat'](0x20),MACHINE='0x'+'22'['repeat'](0x20),ORDER='0x'+'33'['repeat'](0x20),PROPERTY='0x00b64bf4a1be99dd096a03e7dfbbaaae100c6d9660700de19a9ce4be310cf0cc',PLATFORM='0x008656aed73fd829199c2b45a72180f61100de3b9f9838fb05cfaf08112033ce',OTA_NODES=['paid','confirmed','in_stay','completed','reviewed','claim_open','closed_cancel']['map'](a=>({'name':a}));function otaInput(a,b=OTA_NODES){return{'objects':[{'type':'Service','object':SERVICE,'description':'Booking.com\x20merchant-mode\x20accommodation\x20store','bPublished':!![],'bPaused':![],'salesCount':0x3,'arbitrations':[{'object':'0x'+'44'['repeat'](0x20)}],'compensation_fund':'3000000000','order_allocators':a},{'type':'Machine','object':MACHINE,'bPublished':!![],'bPaused':![],'node_count':0x7}],'machine_nodes':b,'order_amount':'189000000'};}const REAL_OTA_ALLOCATORS={'threshold':'0','allocators':[{'guard':'0xsettle','sharing':[{'who':{'GuardIdentifier':0x0},'mode':'rate','value':'0'},{'who':{'Entity':PROPERTY},'mode':'rate','value':'8400'},{'who':{'Entity':PLATFORM},'mode':'rate','value':'1500'},{'who':{'Entity':PLATFORM},'mode':'surplus','value':'0'}]},{'guard':'0xrefund','sharing':[{'who':{'GuardIdentifier':0x0},'mode':'rate','value':'10000'}]},{'guard':'0xnoshow','sharing':[{'who':{'Entity':PROPERTY},'mode':'rate','value':'8400'},{'who':{'Entity':PLATFORM},'mode':'rate','value':'1600'}]},{'guard':'0xarb','sharing':[{'who':{'GuardIdentifier':0x0},'mode':'rate','value':'10000'}]}]},report=a=>generateBusinessReport(a);describe('P0-5\x20reverse_map\x20refund-path\x20detection',()=>{describe('root\x20cause\x201\x20—\x20word-list\x20drift\x20on\x20stop-node\x20names',()=>{it('treats\x20the\x20house-style\x20node\x20name\x20`closed_cancel`\x20as\x20a\x20refund\x20rail',()=>{const a=report(otaInput(undefined));expect(a['merchantProfile']['refundPolicy'])['not']['toContain']('NO\x20refund\x20path');}),it['each'](['closed_cancel','free_cancel','cancelled','canceled','refunded','refund','returned','return_complete','expired','voided','walk_claim','chargeback'])('recognises\x20%s\x20as\x20refund-indicating',a=>{const b=report(otaInput(undefined,[a,'paid']['map'](c=>({'name':c}))));expect(b['merchantProfile']['refundPolicy'])['not']['toContain']('NO\x20refund\x20path');}),it('does\x20NOT\x20treat\x20a\x20charge\x20node\x20(no_show)\x20as\x20a\x20refund\x20rail',()=>{const a=report(otaInput(undefined,['no_show','paid']['map'](b=>({'name':b}))));expect(a['merchantProfile']['refundPolicy'])['toContain']('NO\x20refund\x20path');}),it('still\x20reports\x20NO\x20refund\x20path\x20when\x20there\x20is\x20genuinely\x20nothing',()=>{const a=report(otaInput(undefined,['paid','delivering','delivered']['map'](b=>({'name':b}))));expect(a['merchantProfile']['refundPolicy'])['toContain']('NO\x20refund\x20path');}),it('cites\x20the\x20concrete\x20reversal\x20node\x20in\x20the\x20refund\x20policy',()=>{const a=report(otaInput(undefined));expect(a['merchantProfile']['refundPolicy'])['toContain']('closed_cancel');});}),describe('root\x20cause\x202\x20—\x20the\x20SAFE\x20recipient\x20shape\x20was\x20the\x20one\x20flagged',()=>{it('detects\x20a\x20refund\x20slot\x20routed\x20through\x20GuardIdentifier\x20(the\x20recommended\x20safe\x20form)',()=>{const a=report(otaInput(REAL_OTA_ALLOCATORS,['paid','completed']['map'](b=>({'name':b}))));expect(a['merchantProfile']['refundPolicy'])['not']['toContain']('NO\x20refund\x20path'),expect(a['merchantProfile']['refundPolicy'])['toContain']('routed\x20back\x20to\x20the\x20payer\x20or\x20to\x20the\x20order');}),it('detects\x20the\x20rendered\x20panorama\x20form\x20\x22Guard\x20identifier\x20#0\x22',()=>{const a={'allocators':[{'guard':'0xg','sharing':[{'who':'Guard\x20identifier\x20#0','entity':null,'mode':'rate','value':'10000'}]}]},b=report(otaInput(a,['paid','completed']['map'](c=>({'name':c}))));expect(b['merchantProfile']['refundPolicy'])['not']['toContain']('NO\x20refund\x20path');}),it('still\x20detects\x20the\x20legacy\x20Signer\x20form',()=>{const a={'allocators':[{'guard':'0xg','sharing':[{'who':{'Signer':'signer'},'mode':'rate','value':'10000'}]}]},b=report(otaInput(a,['paid','completed']['map'](c=>({'name':c}))));expect(b['merchantProfile']['refundPolicy'])['not']['toContain']('NO\x20refund\x20path');}),it('does\x20NOT\x20treat\x20a\x20pure\x20Entity\x20split\x20as\x20a\x20refund\x20path',()=>{const a={'allocators':[{'guard':'0xsettle','sharing':[{'who':{'Entity':PROPERTY},'mode':'rate','value':'8400'},{'who':{'Entity':PLATFORM},'mode':'rate','value':'1600'}]}]},b=report(otaInput(a,['paid','completed','reviewed']['map'](c=>({'name':c}))));expect(b['merchantProfile']['refundPolicy'])['toContain']('NO\x20refund\x20path');});}),describe('buyer-facing\x20risk\x20level',()=>{it('does\x20not\x20flag\x20HIGH\x20risk\x20for\x20a\x20store\x20with\x20a\x20working\x20refund\x20rail',()=>{const a=report(otaInput(REAL_OTA_ALLOCATORS)),b=JSON['stringify'](a);expect(b)['not']['toContain']('NO\x20refund\x20path'),expect(a['userRiskAssessment']['keyRisks']['join']('\x20'))['not']['toContain']('No\x20refund\x20path');}),it('keeps\x20flagging\x20a\x20store\x20that\x20genuinely\x20has\x20no\x20refund\x20rail',()=>{const a=report(otaInput(undefined,['paid','delivering','delivered']['map'](b=>({'name':b}))));expect(a['userRiskAssessment']['keyRisks']['join']('\x20'))['toContain']('No\x20refund\x20path');});}),describe('determinism\x20(K3\x2003\x20contract)',()=>{it('produces\x20byte-identical\x20output\x20for\x20identical\x20input',()=>{expect(JSON['stringify'](report(otaInput(REAL_OTA_ALLOCATORS))))['toBe'](JSON['stringify'](report(otaInput(REAL_OTA_ALLOCATORS))));});}),describe('degenerate\x20inputs',()=>{it('does\x20not\x20throw\x20when\x20the\x20Machine\x20is\x20absent',()=>{const a=generateBusinessReport({'objects':[{'type':'Service','object':SERVICE,'order_allocators':REAL_OTA_ALLOCATORS}]});expect(a['merchantProfile']['refundPolicy'])['not']['toContain']('NO\x20refund\x20path');}),it('tolerates\x20a\x20Service\x20with\x20no\x20order_allocators\x20field\x20at\x20all',()=>{const a=report(otaInput(undefined));expect(typeof a['merchantProfile']['refundPolicy'])['toBe']('string');}),it('tolerates\x20an\x20empty\x20allocator\x20list',()=>{const a=report(otaInput({'threshold':'0','allocators':[]}));expect(typeof a['merchantProfile']['refundPolicy'])['toBe']('string');});}),it('keeps\x20ORDER\x20referenced\x20so\x20the\x20escrow\x20mention\x20stays\x20grounded',()=>{expect(ORDER)['toMatch'](/^0x[0-9a-f]{64}$/),expect(report(otaInput(REAL_OTA_ALLOCATORS,[{'name':'closed_cancel'}]))['merchantProfile']['refundPolicy'])['toContain']('closed_cancel');});});
@@ -1 +1 @@
1
- function fld(a,b){return a?.[b]??a?.['data']?.[b];}function detectType(a){const b=fld(a,'type')??fld(a,'type_raw');if(typeof b!=='string'||b['length']===0x0)return'';const c=b['split']('::')['pop']()??b;return c;}function objectsOfType(a,b){return a['filter'](c=>detectType(c)===b);}function identity(a){const b=fld(a,'name');if(typeof b==='string'&&b['trim']())return b['trim']();const c=fld(a,'object')??fld(a,'id');if(typeof c==='string'&&c['trim']())return c['trim']();return'unknown';}function balanceStr(a){if(a==null)return undefined;if(typeof a==='object'&&'balance'in a)return String(a['balance']);return String(a);}function extractService(a){const b=objectsOfType(a,'Service')[0x0];if(!b)return{'found':![],'name':'unavailable','description':'No\x20Service\x20object\x20found','published':![],'paused':![],'salesCount':0x0,'arbitrations':[],'hasBuyGuard':![],'hasUm':![],'rewardsCount':0x0};return{'found':!![],'name':identity(b),'description':fld(b,'description')??'Service\x20(no\x20description)','published':fld(b,'bPublished')??![],'paused':fld(b,'bPaused')??![],'salesCount':Array['isArray'](fld(b,'sales'))?fld(b,'sales')['length']:0x0,'arbitrations':(fld(b,'arbitrations')??[])['filter'](c=>!!c),'compensationFund':balanceStr(fld(b,'compensation_fund')),'hasBuyGuard':fld(b,'buy_guard')!=null,'hasUm':fld(b,'um')!=null,'rewardsCount':(fld(b,'rewards')??[])['length']};}const TERMINAL_SUFFIXES=['complete','completed','done','finish','finished','delivered','accepted','refund','cancelled','canceled'];function extractMachine(a,b){const c=objectsOfType(a,'Machine')[0x0];if(!c)return{'found':![],'nodeCount':0x0,'published':![],'paused':![],'entryNodes':[],'terminalNodeNames':[]};const d=(b??[])['map'](f=>f['name'])['filter'](f=>typeof f==='string'),e=d['filter'](f=>TERMINAL_SUFFIXES['some'](g=>f['toLowerCase']()['includes'](g)));return{'found':!![],'nodeCount':d['length']>0x0?d['length']:(fld(c,'node_count')??0x0)+0x1,'published':fld(c,'bPublished')??![],'paused':fld(c,'bPaused')??![],'entryNodes':[],'terminalNodeNames':e};}function hasRefundPath(a,b){return a['terminalNodeNames']['some'](c=>/refund|return|cancel/i['test'](c))||b;}function detectAllocationRefundSlot(a){const b=objectsOfType(a,'Service')[0x0],c=fld(b,'order_allocators'),d=Array['isArray'](c)?c:Array['isArray'](c?.['allocators'])?c['allocators']:[];for(const e of d){for(const f of e?.['sharing']??[]){const g=f?.['who'];if(g==null)continue;if(typeof g==='object'&&'Signer'in g)return!![];if(typeof g==='object'&&'Entity'in g)continue;}}return![];}export function generateBusinessReport(a){const b=a['objects']??[],c=extractService(b),d=extractMachine(b,a['machine_nodes']),e=detectAllocationRefundSlot(b),f=hasRefundPath(d,e),g=c['arbitrations']['length']>0x0,h=c['compensationFund'],i=h==null||h==='0',j=!c['found']?'unavailable':c['paused']?'published\x20but\x20PAUSED':c['published']?'published\x20and\x20active':'not\x20yet\x20published',k=!c['found']?'No\x20Service\x20object\x20available\x20to\x20describe.':c['description']+'\x20('+j+(c['salesCount']>0x0?',\x20'+c['salesCount']+'\x20sale\x20option(s)':'')+').',l=!d['found']?'Workflow\x20(Machine)\x20unavailable\x20—\x20cannot\x20describe\x20the\x20process.':d['nodeCount']>0x0?d['nodeCount']+'-node\x20workflow\x20('+(d['published']?'published':'draft')+(d['paused']?',\x20paused':'')+').'+(d['terminalNodeNames']['length']>0x0?'\x20Terminal/refund\x20nodes\x20detected:\x20'+d['terminalNodeNames']['join'](',\x20')+'.':'\x20No\x20explicit\x20terminal\x20node\x20detected\x20from\x20names.'):'Workflow\x20node\x20details\x20unavailable\x20(node_count\x20not\x20resolved).',m=f?'A\x20refund\x20path\x20is\x20present\x20(refund\x20terminal\x20node\x20or\x20a\x20payer-routed\x20allocation\x20slot).':'NO\x20refund\x20path\x20detected\x20—\x20funds\x20may\x20be\x20unrecoverable\x20once\x20the\x20workflow\x20advances\x20to\x20completion.',n=g?c['arbitrations']['length']+'\x20arbitration\x20service(s)\x20bound\x20—\x20disputes\x20have\x20a\x20resolution\x20path.':'NO\x20arbitration\x20bound\x20—\x20disputes\x20have\x20no\x20neutral\x20resolution\x20path.',o=[];if(!f)o['push']('No\x20refund\x20path\x20—\x20escrowed\x20funds\x20may\x20be\x20unrecoverable.');if(!g)o['push']('No\x20arbitration\x20bound\x20—\x20no\x20dispute\x20recourse.');if(i)o['push']('Compensation\x20fund\x20is\x20empty\x20—\x20arbitration\x20indemnity\x20would\x20be\x20unenforceable.');const p=[];if(c['published']&&!c['paused'])p['push']('Service\x20is\x20published\x20and\x20active.');if(f)p['push']('Refund\x20path\x20present.');if(g)p['push']('Arbitration\x20bound\x20(neutral\x20dispute\x20resolution).');if(!i)p['push']('Compensation\x20fund\x20funded\x20('+h+'\x20raw\x20units)\x20—\x20indemnity\x20enforceable.');if(c['hasBuyGuard'])p['push']('Buy\x20guard\x20present\x20(purchase\x20is\x20validated\x20by\x20on-chain\x20rules).');const q=[];if(!f)q['push']('Refund\x20path');if(!g)q['push']('Arbitration');if(i)q['push']('Compensation\x20fund');let r='low';if(!f&&!g)r='critical';else{if(!f||!g)r='high';else i&&(r='medium');}const s=[];if(c['found']&&c['paused'])s['push']('Service\x20is\x20currently\x20PAUSED\x20—\x20purchases\x20are\x20rejected\x20until\x20the\x20merchant\x20resumes\x20it.\x20This\x20is\x20a\x20merchant-side\x20availability\x20state,\x20not\x20a\x20trust\x20signal:\x20do\x20not\x20purchase\x20while\x20paused.');else c['found']&&!c['published']&&s['push']('Service\x20is\x20not\x20yet\x20published\x20—\x20purchases\x20are\x20not\x20possible\x20until\x20the\x20merchant\x20publishes\x20it.\x20This\x20is\x20a\x20launch\x20state,\x20not\x20a\x20trust\x20signal.');c['found']&&!c['hasUm']&&s['push']('No\x20contact\x20channel\x20(um)\x20configured\x20—\x20Messenger\x20pre-order\x20negotiation\x20with\x20the\x20merchant\x20is\x20unavailable.');const t=[];t['push']('Escrowed\x20settlement:\x20funds\x20release\x20only\x20when\x20the\x20workflow\x20advances\x20—\x20the\x20merchant\x20is\x20incentivized\x20to\x20deliver.'),t['push']('On-chain\x20reputation\x20(Registrar\x20like/dislike\x20+\x20dispute\x20rate)\x20is\x20a\x20public\x20trust\x20signal\x20for\x20future\x20buyers.');if(c['rewardsCount']>0x0)t['push'](c['rewardsCount']+'\x20reward(s)\x20configured\x20—\x20repeat-buyer\x20incentives\x20lower\x20acquisition\x20cost.');const u=[];u['push']('Escrow\x20safety:\x20money\x20is\x20locked\x20on-chain\x20until\x20completion,\x20not\x20held\x20by\x20the\x20merchant.');if(f)u['push']('Refund\x20path\x20exists\x20—\x20a\x20verified\x20refund\x20returns\x20the\x20escrow.');if(g)u['push']('Arbitration\x20recourse\x20—\x20a\x20neutral\x20third\x20party\x20can\x20rule\x20on\x20disputes.');if(!i)u['push']('Compensation\x20fund\x20backs\x20arbitration\x20indemnity.');const v=[];v['push']('Merchant\x20wants\x20settlement\x20released\x20early;\x20user\x20wants\x20to\x20verify\x20the\x20deliverable\x20first\x20—\x20the\x20workflow\x27s\x20confirm\x20step\x20is\x20the\x20contention\x20point.'),v['push']('Merchant\x20controls\x20the\x20Machine/Guards;\x20user\x20is\x20limited\x20to\x20the\x20confirm/refund\x20forwards\x20the\x20merchant\x20designed.');if(!g)v['push']('No\x20arbitration:\x20a\x20deadlock\x20has\x20no\x20neutral\x20tie-breaker.');const w=[];w['push']('Escrow\x20alignment:\x20funds\x20stay\x20locked\x20until\x20both\x20sides\x20advance\x20the\x20workflow\x20—\x20neither\x20can\x20unilaterally\x20take\x20the\x20money.');if(f)w['push']('Allocation\x20alignment:\x20a\x20refund\x20slot\x20routes\x20the\x20escrow\x20back\x20to\x20the\x20buyer\x20on\x20the\x20refund\x20path.');if(g)w['push']('Arbitration\x20alignment:\x20an\x20independent\x20Permission\x20+\x20public\x20voters\x20provide\x20a\x20neutral\x20dispute\x20authority.');w['push']('Reputation\x20alignment:\x20Registrar\x20like/dislike\x20is\x20framework-enforced\x20and\x20unforgeable\x20—\x20both\x20sides\x20are\x20accountable\x20to\x20public\x20history.');const x=r['toUpperCase'](),y=a['order_amount']!=null?'\x20'+a['order_amount']+'\x20raw\x20units\x20are\x20escrowed.':'',z=c['found']&&c['paused']?'\x20NOTE:\x20the\x20service\x20is\x20PAUSED\x20—\x20purchases\x20are\x20rejected\x20until\x20the\x20merchant\x20resumes\x20it.':c['found']&&!c['published']?'\x20NOTE:\x20the\x20service\x20is\x20not\x20yet\x20published\x20—\x20purchases\x20are\x20not\x20possible.':'',A=!c['found']?'No\x20Service\x20object\x20found\x20—\x20reverse\x20mapping\x20produced\x20a\x20minimal\x20report.':'\x22'+c['name']+'\x22\x20is\x20'+j+'.'+y+'\x20'+('Risk\x20level:\x20'+x+'.\x20'+(f?'Refund\x20path\x20present.':'NO\x20refund\x20path.')+'\x20')+(''+(g?'Arbitration\x20bound.':'NO\x20arbitration.'))+(z+'\x20')+'This\x20report\x20is\x20generated\x20deterministically\x20from\x20on-chain\x20facts\x20—\x20the\x20buyer\x20decides.';return{'summary':A,'merchantProfile':{'serviceDescription':k,'workflowDescription':l,'refundPolicy':m,'arbitrationPolicy':n},'userRiskAssessment':{'riskLevel':r,'keyRisks':o,'protections':p,'missingProtections':q,'notices':s},'gameTheoryAnalysis':{'merchantIncentives':t,'userIncentives':u,'potentialConflicts':v,'wowAlignments':w}};}export function classifyObjectType(a){return detectType(a);}export function extractObjectFields(a){if(!a||typeof a!=='object')return{};const b=a['data']??a;if(!b||typeof b!=='object')return{};return{...b};}
1
+ function fld(a,b){return a?.[b]??a?.['data']?.[b];}function detectType(a){const b=fld(a,'type')??fld(a,'type_raw');if(typeof b!=='string'||b['length']===0x0)return'';const c=b['split']('::')['pop']()??b;return c;}function objectsOfType(a,b){return a['filter'](c=>detectType(c)===b);}function identity(a){const b=fld(a,'name');if(typeof b==='string'&&b['trim']())return b['trim']();const c=fld(a,'object')??fld(a,'id');if(typeof c==='string'&&c['trim']())return c['trim']();return'unknown';}function balanceStr(a){if(a==null)return undefined;if(typeof a==='object'&&'balance'in a)return String(a['balance']);return String(a);}function extractService(a){const b=objectsOfType(a,'Service')[0x0];if(!b)return{'found':![],'name':'unavailable','description':'No\x20Service\x20object\x20found','published':![],'paused':![],'salesCount':0x0,'arbitrations':[],'hasBuyGuard':![],'hasUm':![],'rewardsCount':0x0};return{'found':!![],'name':identity(b),'description':fld(b,'description')??'Service\x20(no\x20description)','published':fld(b,'bPublished')??![],'paused':fld(b,'bPaused')??![],'salesCount':Array['isArray'](fld(b,'sales'))?fld(b,'sales')['length']:0x0,'arbitrations':(fld(b,'arbitrations')??[])['filter'](c=>!!c),'compensationFund':balanceStr(fld(b,'compensation_fund')),'hasBuyGuard':fld(b,'buy_guard')!=null,'hasUm':fld(b,'um')!=null,'rewardsCount':(fld(b,'rewards')??[])['length']};}const REFUND_TERMS=['refund','refunded','return','returned','cancel','cancelled','canceled','reverse','reversal','chargeback','reimburse','compensat','expir','expired','void','voided','reject','rejected','fail','failed','abort','aborted','walk','dispute'],TERMINAL_SUFFIXES=['complete','completed','done','finish','finished','delivered','accepted',...REFUND_TERMS],matchesAny=(a,b)=>{const c=a['toLowerCase']();return b['some'](d=>c['includes'](d));};function extractMachine(a,b){const c=objectsOfType(a,'Machine')[0x0];if(!c)return{'found':![],'nodeCount':0x0,'published':![],'paused':![],'entryNodes':[],'terminalNodeNames':[],'refundNodeNames':[]};const d=(b??[])['map'](g=>g['name'])['filter'](g=>typeof g==='string'),e=d['filter'](g=>matchesAny(g,TERMINAL_SUFFIXES)),f=d['filter'](g=>matchesAny(g,REFUND_TERMS));return{'found':!![],'nodeCount':d['length']>0x0?d['length']:(fld(c,'node_count')??0x0)+0x1,'published':fld(c,'bPublished')??![],'paused':fld(c,'bPaused')??![],'entryNodes':[],'terminalNodeNames':e,'refundNodeNames':f};}function hasRefundPath(a,b){return a['refundNodeNames']['length']>0x0||b;}function detectAllocationRefundSlot(a){const b=objectsOfType(a,'Service')[0x0],c=fld(b,'order_allocators'),d=Array['isArray'](c)?c:Array['isArray'](c?.['allocators'])?c['allocators']:[];for(const e of d){for(const f of e?.['sharing']??[]){const g=f?.['who'];if(g==null)continue;if(typeof g==='object'){if('GuardIdentifier'in g)return!![];if('Signer'in g)return!![];continue;}if(typeof g==='string'){const h=g['toLowerCase']();if(h['includes']('guard\x20identifier')||h==='signer')return!![];}}}return![];}export function generateBusinessReport(a){const b=a['objects']??[],c=extractService(b),d=extractMachine(b,a['machine_nodes']),e=detectAllocationRefundSlot(b),f=hasRefundPath(d,e),g=c['arbitrations']['length']>0x0,h=c['compensationFund'],i=h==null||h==='0',j=!c['found']?'unavailable':c['paused']?'published\x20but\x20PAUSED':c['published']?'published\x20and\x20active':'not\x20yet\x20published',k=!c['found']?'No\x20Service\x20object\x20available\x20to\x20describe.':c['description']+'\x20('+j+(c['salesCount']>0x0?',\x20'+c['salesCount']+'\x20sale\x20option(s)':'')+').',l=!d['found']?'Workflow\x20(Machine)\x20unavailable\x20—\x20cannot\x20describe\x20the\x20process.':d['nodeCount']>0x0?d['nodeCount']+'-node\x20workflow\x20('+(d['published']?'published':'draft')+(d['paused']?',\x20paused':'')+').'+(d['terminalNodeNames']['length']>0x0?'\x20Stop/refund\x20nodes\x20detected:\x20'+d['terminalNodeNames']['join'](',\x20')+'.':'\x20No\x20explicit\x20stop\x20node\x20detected\x20from\x20names.'):'Workflow\x20node\x20details\x20unavailable\x20(node_count\x20not\x20resolved).',m=f?['A\x20refund\x20path\x20is\x20present.',d['refundNodeNames']['length']>0x0?'\x20Reversal\x20rail:\x20workflow\x20node(s)\x20'+d['refundNodeNames']['join'](',\x20')+'.':'',e?'\x20Escrow\x20can\x20be\x20routed\x20back\x20to\x20the\x20payer\x20or\x20to\x20the\x20order\x20by\x20an\x20allocation\x20slot.':'']['filter'](Boolean)['join'](''):'NO\x20refund\x20path\x20detected\x20—\x20funds\x20may\x20be\x20unrecoverable\x20once\x20the\x20workflow\x20advances\x20to\x20completion.',n=g?c['arbitrations']['length']+'\x20arbitration\x20service(s)\x20bound\x20—\x20disputes\x20have\x20a\x20resolution\x20path.':'NO\x20arbitration\x20bound\x20—\x20disputes\x20have\x20no\x20neutral\x20resolution\x20path.',o=[];if(!f)o['push']('No\x20refund\x20path\x20—\x20escrowed\x20funds\x20may\x20be\x20unrecoverable.');if(!g)o['push']('No\x20arbitration\x20bound\x20—\x20no\x20dispute\x20recourse.');if(i)o['push']('Compensation\x20fund\x20is\x20empty\x20—\x20arbitration\x20indemnity\x20would\x20be\x20unenforceable.');const p=[];if(c['published']&&!c['paused'])p['push']('Service\x20is\x20published\x20and\x20active.');if(f)p['push']('Refund\x20path\x20present.');if(g)p['push']('Arbitration\x20bound\x20(neutral\x20dispute\x20resolution).');if(!i)p['push']('Compensation\x20fund\x20funded\x20('+h+'\x20raw\x20units)\x20—\x20indemnity\x20enforceable.');if(c['hasBuyGuard'])p['push']('Buy\x20guard\x20present\x20(purchase\x20is\x20validated\x20by\x20on-chain\x20rules).');const q=[];if(!f)q['push']('Refund\x20path');if(!g)q['push']('Arbitration');if(i)q['push']('Compensation\x20fund');let r='low';if(!f&&!g)r='critical';else{if(!f||!g)r='high';else i&&(r='medium');}const s=[];if(c['found']&&c['paused'])s['push']('Service\x20is\x20currently\x20PAUSED\x20—\x20purchases\x20are\x20rejected\x20until\x20the\x20merchant\x20resumes\x20it.\x20This\x20is\x20a\x20merchant-side\x20availability\x20state,\x20not\x20a\x20trust\x20signal:\x20do\x20not\x20purchase\x20while\x20paused.');else c['found']&&!c['published']&&s['push']('Service\x20is\x20not\x20yet\x20published\x20—\x20purchases\x20are\x20not\x20possible\x20until\x20the\x20merchant\x20publishes\x20it.\x20This\x20is\x20a\x20launch\x20state,\x20not\x20a\x20trust\x20signal.');c['found']&&!c['hasUm']&&s['push']('No\x20contact\x20channel\x20(um)\x20configured\x20—\x20Messenger\x20pre-order\x20negotiation\x20with\x20the\x20merchant\x20is\x20unavailable.');const t=[];t['push']('Escrowed\x20settlement:\x20funds\x20release\x20only\x20when\x20the\x20workflow\x20advances\x20—\x20the\x20merchant\x20is\x20incentivized\x20to\x20deliver.'),t['push']('On-chain\x20reputation\x20(Registrar\x20like/dislike\x20+\x20dispute\x20rate)\x20is\x20a\x20public\x20trust\x20signal\x20for\x20future\x20buyers.');if(c['rewardsCount']>0x0)t['push'](c['rewardsCount']+'\x20reward(s)\x20configured\x20—\x20repeat-buyer\x20incentives\x20lower\x20acquisition\x20cost.');const u=[];u['push']('Escrow\x20safety:\x20money\x20is\x20locked\x20on-chain\x20until\x20completion,\x20not\x20held\x20by\x20the\x20merchant.');if(f)u['push']('Refund\x20path\x20exists\x20—\x20a\x20verified\x20refund\x20returns\x20the\x20escrow.');if(g)u['push']('Arbitration\x20recourse\x20—\x20a\x20neutral\x20third\x20party\x20can\x20rule\x20on\x20disputes.');if(!i)u['push']('Compensation\x20fund\x20backs\x20arbitration\x20indemnity.');const v=[];v['push']('Merchant\x20wants\x20settlement\x20released\x20early;\x20user\x20wants\x20to\x20verify\x20the\x20deliverable\x20first\x20—\x20the\x20workflow\x27s\x20confirm\x20step\x20is\x20the\x20contention\x20point.'),v['push']('Merchant\x20controls\x20the\x20Machine/Guards;\x20user\x20is\x20limited\x20to\x20the\x20confirm/refund\x20forwards\x20the\x20merchant\x20designed.');if(!g)v['push']('No\x20arbitration:\x20a\x20deadlock\x20has\x20no\x20neutral\x20tie-breaker.');const w=[];w['push']('Escrow\x20alignment:\x20funds\x20stay\x20locked\x20until\x20both\x20sides\x20advance\x20the\x20workflow\x20—\x20neither\x20can\x20unilaterally\x20take\x20the\x20money.');if(f)w['push']('Allocation\x20alignment:\x20a\x20refund\x20slot\x20routes\x20the\x20escrow\x20back\x20to\x20the\x20buyer\x20on\x20the\x20refund\x20path.');if(g)w['push']('Arbitration\x20alignment:\x20an\x20independent\x20Permission\x20+\x20public\x20voters\x20provide\x20a\x20neutral\x20dispute\x20authority.');w['push']('Reputation\x20alignment:\x20Registrar\x20like/dislike\x20is\x20framework-enforced\x20and\x20unforgeable\x20—\x20both\x20sides\x20are\x20accountable\x20to\x20public\x20history.');const x=r['toUpperCase'](),y=a['order_amount']!=null?'\x20'+a['order_amount']+'\x20raw\x20units\x20are\x20escrowed.':'',z=c['found']&&c['paused']?'\x20NOTE:\x20the\x20service\x20is\x20PAUSED\x20—\x20purchases\x20are\x20rejected\x20until\x20the\x20merchant\x20resumes\x20it.':c['found']&&!c['published']?'\x20NOTE:\x20the\x20service\x20is\x20not\x20yet\x20published\x20—\x20purchases\x20are\x20not\x20possible.':'',A=!c['found']?'No\x20Service\x20object\x20found\x20—\x20reverse\x20mapping\x20produced\x20a\x20minimal\x20report.':'\x22'+c['name']+'\x22\x20is\x20'+j+'.'+y+'\x20'+('Risk\x20level:\x20'+x+'.\x20'+(f?'Refund\x20path\x20present.':'NO\x20refund\x20path.')+'\x20')+(''+(g?'Arbitration\x20bound.':'NO\x20arbitration.'))+(z+'\x20')+'This\x20report\x20is\x20generated\x20deterministically\x20from\x20on-chain\x20facts\x20—\x20the\x20buyer\x20decides.';return{'summary':A,'merchantProfile':{'serviceDescription':k,'workflowDescription':l,'refundPolicy':m,'arbitrationPolicy':n},'userRiskAssessment':{'riskLevel':r,'keyRisks':o,'protections':p,'missingProtections':q,'notices':s},'gameTheoryAnalysis':{'merchantIncentives':t,'userIncentives':u,'potentialConflicts':v,'wowAlignments':w}};}export function classifyObjectType(a){return detectType(a);}export function extractObjectFields(a){if(!a||typeof a!=='object')return{};const b=a['data']??a;if(!b||typeof b!=='object')return{};return{...b};}