@wowok/agent-mcp 3.0.5 → 3.0.6

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 (125) hide show
  1. package/README.md +25 -20
  2. package/dist/customer/account-events.js +1 -1
  3. package/dist/graph/onchain/dataplane.d.ts +2 -2
  4. package/dist/graph/onchain/edge-schema.js +1 -1
  5. package/dist/graph/onchain/expand.js +1 -1
  6. package/dist/graph/onchain/onchain.spec.js +1 -1
  7. package/dist/graph/onchain/sdk-batch.d.ts +7 -1
  8. package/dist/graph/onchain/sdk-batch.js +1 -1
  9. package/dist/graph/onchain/sdk-dataplane.d.ts +6 -3
  10. package/dist/graph/onchain/sdk-dataplane.js +1 -1
  11. package/dist/graph/onchain/types.d.ts +2 -2
  12. package/dist/knowledge/account-marks.js +1 -1
  13. package/dist/knowledge/allocation-risk.js +1 -1
  14. package/dist/knowledge/allocation-templates.js +1 -1
  15. package/dist/knowledge/goal-completion.d.ts +12 -0
  16. package/dist/knowledge/goal-completion.js +1 -1
  17. package/dist/knowledge/guard-risk.js +1 -1
  18. package/dist/knowledge/index.d.ts +4 -0
  19. package/dist/knowledge/index.js +1 -1
  20. package/dist/knowledge/migration-preflight.js +1 -1
  21. package/dist/knowledge/payment-tracker.d.ts +63 -0
  22. package/dist/knowledge/payment-tracker.js +1 -0
  23. package/dist/knowledge/recipient-constraint.d.ts +160 -0
  24. package/dist/knowledge/recipient-constraint.js +1 -0
  25. package/dist/knowledge/safety-rules.d.ts +1 -1
  26. package/dist/knowledge/safety-rules.js +1 -1
  27. package/dist/knowledge/template-registry.js +1 -1
  28. package/dist/knowledge/tools-reference.js +1 -1
  29. package/dist/knowledge/workflow-guidance.js +1 -1
  30. package/dist/knowledge/workspace-lists.d.ts +4 -0
  31. package/dist/knowledge/workspace-lists.js +1 -1
  32. package/dist/monitor/MonitorLoop.js +1 -1
  33. package/dist/participation/arbitrator-interest.d.ts +2 -0
  34. package/dist/participation/arbitrator-interest.js +1 -1
  35. package/dist/participation/collaborator-interest.d.ts +2 -0
  36. package/dist/participation/collaborator-interest.js +1 -1
  37. package/dist/participation/customer-interest.d.ts +2 -0
  38. package/dist/participation/customer-interest.js +1 -1
  39. package/dist/participation/merchant-interest.d.ts +2 -0
  40. package/dist/participation/merchant-interest.js +1 -1
  41. package/dist/participation/supplier-interest.d.ts +2 -0
  42. package/dist/participation/supplier-interest.js +1 -1
  43. package/dist/playbooks/service-build/business-puzzle.js +1 -1
  44. package/dist/playbooks/service-build/context-assembly.js +1 -1
  45. package/dist/playbooks/service-build/merchant-guide.d.ts +7 -0
  46. package/dist/playbooks/service-build/merchant-guide.js +1 -1
  47. package/dist/playbooks/service-build/participation-radar.js +1 -1
  48. package/dist/playbooks/service-build/pipeline-actions.d.ts +2 -2
  49. package/dist/playbooks/service-build/pipeline-actions.js +1 -1
  50. package/dist/playbooks/service-build/relationship-profile.js +1 -1
  51. package/dist/playbooks/service-build/risk-aggregator.js +1 -1
  52. package/dist/playbooks/service-build/topology-query.js +1 -1
  53. package/dist/relationship/derivation.js +1 -1
  54. package/dist/safety/confirm-gate.js +1 -1
  55. package/dist/schema/call/allocation.js +1 -1
  56. package/dist/schema/call/base.js +1 -1
  57. package/dist/schema/call/semantic.js +1 -1
  58. package/dist/schema/call/service.js +1 -1
  59. package/dist/schema/common/index.js +1 -1
  60. package/dist/schema/evaluation/index.d.ts +4 -4
  61. package/dist/schema/evaluation/index.js +1 -1
  62. package/dist/schema/goal/index.d.ts +21 -21
  63. package/dist/schema/goal/planning.d.ts +6 -6
  64. package/dist/schema/industry-pack/index.d.ts +6 -6
  65. package/dist/schema/industry-pack/modes.d.ts +6 -6
  66. package/dist/schema/intent-radar/index.d.ts +16 -16
  67. package/dist/schema/local/index.js +1 -1
  68. package/dist/schema/messenger/index.d.ts +110 -8
  69. package/dist/schema/messenger/index.js +1 -1
  70. package/dist/schema/operations.d.ts +35 -27
  71. package/dist/schema/operations.js +1 -1
  72. package/dist/schema/persona/index.d.ts +155 -155
  73. package/dist/schema/query/bi.d.ts +26 -26
  74. package/dist/schema/query/bi.js +1 -1
  75. package/dist/schema/query/index.d.ts +5 -2
  76. package/dist/schema/query/index.js +1 -1
  77. package/dist/schema/schema-query/index.d.ts +1 -1
  78. package/dist/schema/schema-version.js +1 -1
  79. package/dist/schema/strategy-review/index.d.ts +1 -1
  80. package/dist/schema-query-impl/index.js +1 -1
  81. package/dist/schemas/bridge_operation.schema.json +10 -10
  82. package/dist/schemas/evaluation_operation.schema.json +7 -7
  83. package/dist/schemas/guard2file.schema.json +2 -2
  84. package/dist/schemas/index.json +1 -1
  85. package/dist/schemas/machineNode2file.schema.json +2 -2
  86. package/dist/schemas/messenger_operation.output.json +266 -38
  87. package/dist/schemas/messenger_operation.schema.json +27 -3
  88. package/dist/schemas/onchain_events.schema.json +1 -1
  89. package/dist/schemas/onchain_operations.schema.json +51 -51
  90. package/dist/schemas/onchain_operations_allocation.schema.json +5 -5
  91. package/dist/schemas/onchain_operations_arbitration.schema.json +2 -2
  92. package/dist/schemas/onchain_operations_contact.schema.json +2 -2
  93. package/dist/schemas/onchain_operations_demand.schema.json +2 -2
  94. package/dist/schemas/onchain_operations_gen_passport.schema.json +2 -2
  95. package/dist/schemas/onchain_operations_gen_proof.schema.json +2 -2
  96. package/dist/schemas/onchain_operations_guard.schema.json +2 -2
  97. package/dist/schemas/onchain_operations_machine.schema.json +8 -8
  98. package/dist/schemas/onchain_operations_order.schema.json +2 -2
  99. package/dist/schemas/onchain_operations_payment.schema.json +3 -3
  100. package/dist/schemas/onchain_operations_permission.schema.json +2 -2
  101. package/dist/schemas/onchain_operations_personal.schema.json +2 -2
  102. package/dist/schemas/onchain_operations_progress.schema.json +2 -2
  103. package/dist/schemas/onchain_operations_proof.schema.json +2 -2
  104. package/dist/schemas/onchain_operations_repository.schema.json +2 -2
  105. package/dist/schemas/onchain_operations_reward.schema.json +2 -2
  106. package/dist/schemas/onchain_operations_service.schema.json +5 -5
  107. package/dist/schemas/onchain_operations_treasury.schema.json +4 -4
  108. package/dist/schemas/onchain_table_data.output.json +14 -14
  109. package/dist/schemas/query_toolkit.output.json +35 -8
  110. package/dist/schemas/query_toolkit.schema.json +39 -11
  111. package/dist/strategy/collectors.js +1 -1
  112. package/dist/tools/handlers/config.js +1 -1
  113. package/dist/tools/handlers/evaluation.js +1 -1
  114. package/dist/tools/handlers/messenger.js +1 -1
  115. package/dist/tools/handlers/onchain.js +1 -1
  116. package/dist/tools/handlers/permission.js +1 -1
  117. package/dist/tools/handlers/query.js +1 -1
  118. package/dist/tools/handlers/strategy-review.js +1 -1
  119. package/dist/tools/handlers/workflow.js +1 -1
  120. package/dist/tools/registry/onchain.js +1 -1
  121. package/dist/tools/registry/query.js +1 -1
  122. package/dist/tools/rules-hook.d.ts +2 -0
  123. package/dist/tools/rules-hook.js +1 -1
  124. package/dist/tools/shared.js +1 -1
  125. 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';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)'),a['nodes']['some'](c=>c['id']==='main_arbitration')&&b['push']('Arbitration.permission\x20!=\x20Service.permission\x20on-chain\x20(E_ARBITRATION_PERMISSION_CONFLICT=33)'),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 buildCreationPlan(a){const b=[],c=new Map(a['nodes']['map'](i=>[i['id'],i])),f=new Map();for(const i of a['nodes'])f['set'](i['id'],new Set());for(const j of a['edges']){j['required']&&f['has'](j['from'])&&c['has'](j['to'])&&f['get'](j['from'])['add'](j['to']);}const g=[],h=new Map(f);while(h['size']>0x0){const k=[...h['entries']()]['filter'](([,l])=>l['size']===0x0)['map'](([l])=>l);if(k['length']===0x0){g['push'](...h['keys']());break;}k['sort']();for(const l of k){g['push'](l),h['delete'](l);for(const m of h['values']())m['delete'](l);}}return g['forEach']((o,p)=>{const q=c['get'](o),r=q['config']['name'];b['push']({'order':p+0x1,'node_id':o,'object_type':q['type'],'suggested_name':r?.['type']==='string'?r['value']:o,'depends_on':[...f['get'](o)??[]],'operation_hint':'Create\x20'+q['type']+'\x20via\x20onchain_operations,\x20then\x20configure.\x20Purpose:\x20'+q['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 s of Object['keys'](d)){if(d[s]===undefined)delete d[s];}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'](t=>getBusinessModule(t))['filter'](t=>!!t):recommendModules(d['confirmed_industry'],d['intent_text'],{'maxModules':0x5}),h=await resolveModePrior(d['confirmed_industry']),i=buildSemanticGraph(f,g,h,{'paymentExplicit':!!(d['payment_override']||d['trust_override'])}),j=validateGraph(i),l=derivePlanSatisfiedConstraints(i,f),m=g['map'](t=>checkModuleConstraints(t,l)),n=deriveDeployTimeChecks(i),o=m['filter'](t=>!t['adopted']),p=checkGameTheoryConstraints(i,f),q=assessWorkflowDesign(i),r=buildCreationPlan(i);return{'action':'merchant_guide','current_step':o['length']>0x0?0x9:0xa,'step_name':o['length']>0x0?'Harness\x20Check\x20(issues\x20found)':'Submission\x20Plan\x20Ready','guide_state':{...d,'adopted_module_ids':g['map'](t=>t['id'])},'intent':{'intent_type':f['intent'],'industry':f['industry'],'roles':f['roles'],'deliverables':f['deliverables'],'payment':f['payment'],'trust':f['trust']},'adopted_modules':g['map'](t=>({'id':t['id'],'name':t['name'],'description':t['description'],'requires_keeper':t['requiresKeeper'],'keeper_hint':t['keeperHint'],'user_protections':t['userProtections'],'merchant_obligations':t['merchantObligations']})),'mode_prior':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'](t=>({'name':t['name'],'role':t['role']})),'guards':h['guards']['map'](t=>({'template_id':t['template_id'],'host':t['host'],'purpose':t['purpose']})),'allocator':h['allocator'],'risk_constraints':h['risk_constraints'],'build_notes':h['build_notes']??[]}:undefined,'blueprint':{'nodes':i['nodes']['map'](t=>({'id':t['id'],'type':t['type'],'purpose':t['purpose']})),'edges':i['edges']['map'](t=>({'from':t['from'],'to':t['to'],'relation':t['relation'],'required':t['required']}))},'evaluation_preview':i['evaluationPreview'],'graph_validation':{'valid':j['valid'],'hard_violations':j['hardViolations']['map'](t=>({'id':t['id'],'description':t['description'],'fix':t['fixSuggestion']})),'soft_notes':j['softViolations']['map'](t=>({'id':t['id'],'description':t['description']}))},'harness_check':{'module_constraints':m['map'](t=>({'module':t['module'],'plan_satisfied':t['adopted'],'missing':t['missingConstraints'],'reason':t['reason'],'estimated_score_boost':t['estimatedScoreBoost']})),'blocking_issues':o['map'](t=>({'module':t['module'],'missing_constraints':t['missingConstraints'],'fix':t['reason']})),'deploy_time_checks':n},'game_theory':{'summary':p['summary'],'coverage':p['coveredCount']+'/'+p['totalCount'],'exposed_scenarios':p['exposedScenarios'],'wow_alignments':p['wowAlignments'],'scenarios':p['results']['map'](t=>({'scenario':t['scenario'],'covered':t['covered'],'conflict':t['conflict'],'user_protection':t['userProtection'],'evaluation_metric':t['evaluationMetric'],'recommendation':t['recommendation']}))},'workflow_design_assessment':{'score':q['score'],'summary':q['summary'],'findings':q['findings']['map'](t=>({'kind':t['kind'],'severity':t['severity'],'message':t['message'],'fix':t['fix']})),'checks':q['checks']['map'](t=>({'id':t['id'],'dimension':t['dimension'],'passed':t['passed'],'severity':t['severity'],'message':t['message'],'fix':t['fix']}))},'creation_plan':r,'warnings':e['warnings'],'next_action':o['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\x20publish\x20the\x20Service\x20(machine\x20binding\x20is\x20immutable\x20after\x20publish).'};}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)'),a['nodes']['some'](c=>c['id']==='main_arbitration')&&b['push']('Arbitration.permission\x20!=\x20Service.permission\x20on-chain\x20(E_ARBITRATION_PERMISSION_CONFLICT=33)'),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 buildCreationPlan(a){const b=[],c=new Map(a['nodes']['map'](i=>[i['id'],i])),f=new Map();for(const i of a['nodes'])f['set'](i['id'],new Set());for(const j of a['edges']){j['required']&&f['has'](j['from'])&&c['has'](j['to'])&&f['get'](j['from'])['add'](j['to']);}const g=[],h=new Map(f);while(h['size']>0x0){const k=[...h['entries']()]['filter'](([,l])=>l['size']===0x0)['map'](([l])=>l);if(k['length']===0x0){g['push'](...h['keys']());break;}k['sort']();for(const l of k){g['push'](l),h['delete'](l);for(const m of h['values']())m['delete'](l);}}return g['forEach']((o,p)=>{const q=c['get'](o),r=q['config']['name'];b['push']({'order':p+0x1,'node_id':o,'object_type':q['type'],'suggested_name':r?.['type']==='string'?r['value']:o,'depends_on':[...f['get'](o)??[]],'operation_hint':'Create\x20'+q['type']+'\x20via\x20onchain_operations,\x20then\x20configure.\x20Purpose:\x20'+q['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 t of Object['keys'](d)){if(d[t]===undefined)delete d[t];}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'](u=>getBusinessModule(u))['filter'](u=>!!u):recommendModules(d['confirmed_industry'],d['intent_text'],{'maxModules':0x5}),h=await resolveModePrior(d['confirmed_industry']),i=buildSemanticGraph(f,g,h,{'paymentExplicit':!!(d['payment_override']||d['trust_override'])}),j=validateGraph(i),l=derivePlanSatisfiedConstraints(i,f),m=g['map'](u=>checkModuleConstraints(u,l)),n=deriveDeployTimeChecks(i),o=i['edges']['some'](u=>u['relation']==='has_order_allocators')?recipientDesignGuidance()['map'](u=>({'id':u['id'],'move_recipient':u['move_recipient'],'semantics':u['semantics'],'required_constraints':u['required_constraints'],'finding_if_unmet':u['finding_if_unmet']})):undefined,p=m['filter'](u=>!u['adopted']),q=checkGameTheoryConstraints(i,f),r=assessWorkflowDesign(i),s=buildCreationPlan(i);return{'action':'merchant_guide','current_step':p['length']>0x0?0x9:0xa,'step_name':p['length']>0x0?'Harness\x20Check\x20(issues\x20found)':'Submission\x20Plan\x20Ready','guide_state':{...d,'adopted_module_ids':g['map'](u=>u['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'](u=>({'id':u['id'],'name':u['name'],'description':u['description'],'requires_keeper':u['requiresKeeper'],'keeper_hint':u['keeperHint'],'user_protections':u['userProtections'],'merchant_obligations':u['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'](u=>({'name':u['name'],'role':u['role']})),'guards':h['guards']['map'](u=>({'template_id':u['template_id'],'host':u['host'],'purpose':u['purpose']})),'allocator':h['allocator'],'risk_constraints':h['risk_constraints'],'build_notes':h['build_notes']??[]}:undefined,'blueprint':{'nodes':i['nodes']['map'](u=>({'id':u['id'],'type':u['type'],'purpose':u['purpose']})),'edges':i['edges']['map'](u=>({'from':u['from'],'to':u['to'],'relation':u['relation'],'required':u['required']}))},'evaluation_preview':i['evaluationPreview'],'graph_validation':{'valid':j['valid'],'hard_violations':j['hardViolations']['map'](u=>({'id':u['id'],'description':u['description'],'fix':u['fixSuggestion']})),'soft_notes':j['softViolations']['map'](u=>({'id':u['id'],'description':u['description']}))},'harness_check':{'module_constraints':m['map'](u=>({'module':u['module'],'plan_satisfied':u['adopted'],'missing':u['missingConstraints'],'reason':u['reason'],'estimated_score_boost':u['estimatedScoreBoost']})),'blocking_issues':p['map'](u=>({'module':u['module'],'missing_constraints':u['missingConstraints'],'fix':u['reason']})),'deploy_time_checks':n,'recipient_design_guidance':o},'game_theory':{'summary':q['summary'],'coverage':q['coveredCount']+'/'+q['totalCount'],'exposed_scenarios':q['exposedScenarios'],'wow_alignments':q['wowAlignments'],'scenarios':q['results']['map'](u=>({'scenario':u['scenario'],'covered':u['covered'],'conflict':u['conflict'],'user_protection':u['userProtection'],'evaluation_metric':u['evaluationMetric'],'recommendation':u['recommendation']}))},'workflow_design_assessment':{'score':r['score'],'summary':r['summary'],'findings':r['findings']['map'](u=>({'kind':u['kind'],'severity':u['severity'],'message':u['message'],'fix':u['fix']})),'checks':r['checks']['map'](u=>({'id':u['id'],'dimension':u['dimension'],'passed':u['passed'],'severity':u['severity'],'message':u['message'],'fix':u['fix']}))},'creation_plan':s,'warnings':e['warnings'],'next_action':p['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\x20publish\x20the\x20Service\x20(machine\x20binding\x20is\x20immutable\x20after\x20publish).'};}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 +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{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{fetchMachineNodes}from'./machine-nodes.js';import{extractGenericTokenType,registryDisplayHint}from'../../knowledge/fund-layer.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=b['toLowerCase']();for(const i of c){for(const j of i?.['sharing']??[]){d++;const k=j?.['who'];if(k==null)continue;if(typeof k==='object'&&'GuardIdentifier'in k)e++;else{if(typeof k==='object'&&'Signer'in k)g++;else{if(typeof k==='object'&&'Entity'in k){const l=k['Entity'],m=typeof l==='string'?l:l?.['name_or_address'];if(typeof m==='string'&&m['toLowerCase']()===h)f++;}else typeof k==='string'&&k['toLowerCase']()===h&&f++;}}}}return{'recipient_slots':d,'guard_gated_slots':e,'direct_to_me_slots':f,'to_payer_slots':g};}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']??'testnet',d=a['radar_include_alerts']??!![],f=[],g=await resolveAddress(a['radar_account'],'radar_account'),h=await Promise['all'](a['radar_targets']['map'](async I=>({'progress':await resolveAddress(I['progress'],'progress'),'order':I['order']?await resolveAddress(I['order'],'order'):undefined}))),i=h['flatMap'](I=>I['order']?[I['progress'],I['order']]:[I['progress']]),j=await batchQueryObjectsByIds(i,b),k=new Map();for(const I of j){const J=fld(I,'object');if(J)k['set'](J,I);}const l=new Map(),m=new Map();for(const K of h){const L=k['get'](K['progress']);if(!L){f['push']('Progress\x20'+K['progress']+'\x20not\x20found\x20on\x20'+b+'\x20—\x20target\x20skipped.');continue;}l['set'](K['progress'],L);if(K['order']){const M=k['get'](K['order']);if(M)m['set'](K['order'],M);else f['push']('Order\x20'+K['order']+'\x20not\x20found\x20on\x20'+b+'\x20—\x20order-holder\x20detection\x20disabled\x20for\x20'+K['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'](N=>fld(N,'machine'))['filter'](N=>!!N))],s=[...new Set([...m['values']()]['map'](N=>fld(N,'service'))['filter'](N=>!!N))],u=[...new Set([...m['values']()]['flatMap'](N=>{const O=fld(N,'dispute');return Array['isArray'](O)?O:[];}))],w=new Map(),x=new Map(),y=new Map(),z=new Map();await Promise['all']([...q['map'](async N=>{try{const [O,P]=await Promise['all']([batchQueryObjectsByIds([N],b),fetchMachineNodes(N,b)]);if(O[0x0])w['set'](N,O[0x0]);x['set'](N,toWorkflowSubgraph(P,N));}catch(Q){f['push']('Machine\x20'+N+'\x20fetch\x20failed:\x20'+Q['message']+'\x20—\x20workflow\x20unknown\x20for\x20its\x20orders.');}}),((async()=>{if(s['length']===0x0)return;try{const N=await batchQueryObjectsByIds(s,b);for(const O of N){const P=fld(O,'object');if(P)y['set'](P,O);}}catch(Q){f['push']('Service\x20query\x20failed:\x20'+Q['message']+'\x20—\x20compensation/reward\x20context\x20degraded.');}})()),((async()=>{if(u['length']===0x0)return;try{const N=await batchQueryObjectsByIds(u,b);for(const O of N){const P=fld(O,'object');if(P)z['set'](P,O);}}catch(Q){f['push']('Arb\x20query\x20failed:\x20'+Q['message']+'\x20—\x20compensation\x20claim\x20detection\x20disabled.');}})())]);const A=new Map(),B=[...new Set(q['map'](N=>fld(w['get'](N),'permission'))['filter'](N=>!!N))],C=new Map();await Promise['all'](B['map'](async N=>{try{const [O,P]=await Promise['all']([batchQueryObjectsByIds([N],b),fetchEntityPermissions(N,b)]),Q=O[0x0];C['set'](N,{'address':N,'entity_count':fld(Q,'entity_count'),'perm_remark':fld(Q,'perm_remark'),'entityPermissions':P,'owner':fld(Q,'builder')});}catch(R){f['push']('Permission\x20'+N+'\x20fetch\x20failed:\x20'+R['message']+'\x20—\x20operator\x20permission\x20matching\x20degraded.');}}));for(const N of q){const O=fld(w['get'](N),'permission');if(O&&C['has'](O))A['set'](N,C['get'](O));}let D=0x0;const E=new Map();try{const P=await watch_conversations({'account':g,'unreadOnly':!![],'previewMessageCount':0x0,'skipAutoMarkViewed':!![]}),Q=Array['isArray'](P)?P:P?.['conversations']??[];for(const R of Q){const S=R?.['peerAddress'],T=typeof R?.['unreadCount']==='number'?R['unreadCount']:0x0;typeof S==='string'&&T>0x0&&(E['set'](S['toLowerCase'](),T),D+=T);}}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 F=[],G=Date['now']();for(const U of h){const V=l['get'](U['progress']);if(!V)continue;const W=U['order']?m['get'](U['order']):undefined,X=fld(V,'machine'),Y=fld(V,'current')??'',Z=fld(V,'namedOperator')??[],a0={};for(const ae of Z){if(ae?.['name'])a0[ae['name']]=Array['isArray'](ae['operators'])?ae['operators']:[];}const a1=W?fld(W,'service'):undefined,a2=a1?y['get'](a1):undefined;let a3;const a4=W?fld(W,'builder'):undefined;if(W&&a4===g){const af=fld(W,'dispute')??[];for(const ag of af){const ah=z['get'](ag);if(!ah)continue;const ai=fld(ah,'indemnity');if(ai){a3={'arbitration':fld(ah,'arbitration')??ag,'note':'Arbitration\x20verdict\x20recorded\x20an\x20indemnity\x20(Arb\x20'+ag+').\x20'+'Claim\x20via\x20service\x20op=\x27compensation_claim\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 a5=[];if(a2&&a4===g){const aj=fld(a2,'rewards')??[];for(const ak of aj){a5['push']({'address':ak,'description':'Service\x20reward\x20'+ak+'\x20(guard-gated\x20—\x20eligibility\x20verified\x20at\x20claim\x20time)'});}}const a6=isConsequenceNode(Y,'completed'),a7=isConsequenceNode(Y,'refunded');let a8=0x0;if(E['size']>0x0){const al=new Set();if(a4)al['add'](a4['toLowerCase']());for(const am of Object['values'](a0)){for(const an of am)al['add'](an['toLowerCase']());}al['delete'](g['toLowerCase']());for(const ao of al){a8+=E['get'](ao)??0x0;}}const a9={'account':g,'progress_address':U['progress'],'order_address':U['order'],'current_node':Y,'order_holder':a4,'workflow':X?x['get'](X):undefined,'permission':X?A['get'](X)??null:null,'named_accounts':a0,'claimable_rewards':a5['length']>0x0?a5:undefined,'pending_compensation':a3,'rating_pending':a6&&a4===g,'unread_messages':a8>0x0?a8:undefined,'last_progress_at':fld(V,'current_time')??undefined,'now':G},aa=analyzeOrderParticipation(a9),ab=(fld(a2,'arbitrations')??[])['length']>0x0,ac=a6?'completed':a7?'refunded':null,ad=a9['last_progress_at']!=null?(G-a9['last_progress_at'])/0x36ee80:undefined;if(aa['perspective']==='merchant')aa['interest_analysis']=analyzeMerchantInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'order_amount':balanceStr(fld(W,'amount')),'token_type':balanceToken(fld(W,'amount')),'allocation':summarizeAllocation(fld(a2,'order_allocators'),g),'compensation_fund':balanceStr(fld(a2,'compensation_fund')),'arbitration_bound':ab,'rewards_count':(fld(a2,'rewards')??[])['length'],'stalled_hours':ad,'terminal':ac,'unread_messages':a8>0x0?a8:undefined});else{if(aa['perspective']==='supplier')aa['interest_analysis']=analyzeSupplierInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'order_amount':balanceStr(fld(W,'amount')),'token_type':balanceToken(fld(W,'amount')),'arbitration_bound':ab,'compensation_fund':balanceStr(fld(a2,'compensation_fund')),'terminal':ac,'stalled_hours':ad,'unread_messages':a8>0x0?a8:undefined});else{if(aa['perspective']==='collaborator')aa['interest_analysis']=analyzeCollaboratorInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'collaborator_kind':aa['collaborator_kind'],'arbitration_bound':ab,'terminal':ac,'stalled_hours':ad,'unread_messages':a8>0x0?a8:undefined});else aa['perspective']==='customer'&&(aa['interest_analysis']=analyzeCustomerInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'order_amount':balanceStr(fld(W,'amount')),'token_type':balanceToken(fld(W,'amount')),'compensation_fund':balanceStr(fld(a2,'compensation_fund')),'arbitration_bound':ab,'terminal':ac,'stalled_hours':ad,'unread_messages':a8>0x0?a8:undefined}));}}if(d&&W){const ap={'order_id':U['order'],'service_id':a1??'','current_node':Y||undefined,'created_at':Number(fld(W,'time')??G)||G,'last_progress_at':fld(V,'current_time')??undefined,'now':G,'order_amount':((()=>{try{return BigInt(fld(W,'amount')??0x0);}catch{return undefined;}})()),'compensation_balance':((()=>{try{const aq=fld(a2,'compensation_fund');return aq!=null?BigInt(aq):undefined;}catch{return undefined;}})()),'token':registryDisplayHint(extractGenericTokenType(fld(a2,'type_raw'))),'has_arbitration':(fld(a2,'arbitrations')??[])['length']>0x0,'pending_user_action':aa['operable']['some'](aq=>aq['execution_path']==='order_holder'),'completed':a6,'refunded':a7};try{const aq=monitorOrder({'current':ap,'thresholds':a['radar_monitor_thresholds']});aq['length']>0x0&&(aa['attached_alerts']=aq);}catch(ar){f['push']('Order\x20monitor\x20failed\x20for\x20'+U['order']+':\x20'+ar['message']+'.');}}F['push'](aa);}const H=aggregateRadar(F,D);return{'action':'participation_radar','account':g,'orders_analyzed':H['orders_analyzed'],'actionable':H['actionable'],'waiting':H['waiting'],'all_pending_claims':H['all_pending_claims'],'unread_messages_total':H['unread_messages_total'],'data_gaps':f,'summary':H['summary']};}
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{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 I=>({'progress':await resolveAddress(I['progress'],'progress'),'order':I['order']?await resolveAddress(I['order'],'order'):undefined}))),i=h['flatMap'](I=>I['order']?[I['progress'],I['order']]:[I['progress']]),j=await batchQueryObjectsByIds(i,b),k=new Map();for(const I of j){const J=fld(I,'object');if(J)k['set'](J,I);}const l=new Map(),m=new Map();for(const K of h){const L=k['get'](K['progress']);if(!L){f['push']('Progress\x20'+K['progress']+'\x20not\x20found\x20on\x20'+b+'\x20—\x20target\x20skipped.');continue;}l['set'](K['progress'],L);if(K['order']){const M=k['get'](K['order']);if(M)m['set'](K['order'],M);else f['push']('Order\x20'+K['order']+'\x20not\x20found\x20on\x20'+b+'\x20—\x20order-holder\x20detection\x20disabled\x20for\x20'+K['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'](N=>fld(N,'machine'))['filter'](N=>!!N))],s=[...new Set([...m['values']()]['map'](N=>fld(N,'service'))['filter'](N=>!!N))],u=[...new Set([...m['values']()]['flatMap'](N=>{const O=fld(N,'dispute');return Array['isArray'](O)?O:[];}))],w=new Map(),x=new Map(),y=new Map(),z=new Map();await Promise['all']([...q['map'](async N=>{try{const [O,P]=await Promise['all']([batchQueryObjectsByIds([N],b),fetchMachineNodes(N,b)]);if(O[0x0])w['set'](N,O[0x0]);x['set'](N,toWorkflowSubgraph(P,N));}catch(Q){f['push']('Machine\x20'+N+'\x20fetch\x20failed:\x20'+Q['message']+'\x20—\x20workflow\x20unknown\x20for\x20its\x20orders.');}}),((async()=>{if(s['length']===0x0)return;try{const N=await batchQueryObjectsByIds(s,b);for(const O of N){const P=fld(O,'object');if(P)y['set'](P,O);}}catch(Q){f['push']('Service\x20query\x20failed:\x20'+Q['message']+'\x20—\x20compensation/reward\x20context\x20degraded.');}})()),((async()=>{if(u['length']===0x0)return;try{const N=await batchQueryObjectsByIds(u,b);for(const O of N){const P=fld(O,'object');if(P)z['set'](P,O);}}catch(Q){f['push']('Arb\x20query\x20failed:\x20'+Q['message']+'\x20—\x20compensation\x20claim\x20detection\x20disabled.');}})())]);const A=new Map(),B=[...new Set(q['map'](N=>fld(w['get'](N),'permission'))['filter'](N=>!!N))],C=new Map();await Promise['all'](B['map'](async N=>{try{const [O,P]=await Promise['all']([batchQueryObjectsByIds([N],b),fetchEntityPermissions(N,b)]),Q=O[0x0];C['set'](N,{'address':N,'entity_count':fld(Q,'entity_count'),'perm_remark':fld(Q,'perm_remark'),'entityPermissions':P,'owner':fld(Q,'builder')});}catch(R){f['push']('Permission\x20'+N+'\x20fetch\x20failed:\x20'+R['message']+'\x20—\x20operator\x20permission\x20matching\x20degraded.');}}));for(const N of q){const O=fld(w['get'](N),'permission');if(O&&C['has'](O))A['set'](N,C['get'](O));}let D=0x0;const E=new Map();try{const P=await watch_conversations({'account':g,'unreadOnly':!![],'previewMessageCount':0x0,'skipAutoMarkViewed':!![]}),Q=Array['isArray'](P)?P:P?.['conversations']??[];for(const R of Q){const S=R?.['peerAddress'],T=typeof R?.['unreadCount']==='number'?R['unreadCount']:0x0;typeof S==='string'&&T>0x0&&(E['set'](S['toLowerCase'](),T),D+=T);}}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 F=[],G=Date['now']();for(const U of h){const V=l['get'](U['progress']);if(!V)continue;const W=U['order']?m['get'](U['order']):undefined,X=fld(V,'machine'),Y=fld(V,'current')??'',Z=fld(V,'namedOperator')??[],a0={};for(const af of Z){if(af?.['name'])a0[af['name']]=Array['isArray'](af['operators'])?af['operators']:[];}const a1=W?fld(W,'service'):undefined,a2=a1?y['get'](a1):undefined;let a3;const a4=W?fld(W,'builder'):undefined;if(W&&a4===g){const ag=fld(W,'dispute')??[];for(const ah of ag){const ai=z['get'](ah);if(!ai)continue;const aj=fld(ai,'indemnity');if(aj){a3={'arbitration':fld(ai,'arbitration')??ah,'note':'Arbitration\x20verdict\x20recorded\x20an\x20indemnity\x20(Arb\x20'+ah+').\x20'+'Claim\x20via\x20service\x20op=\x27compensation_claim\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 a5=[];if(a2&&a4===g){const ak=fld(a2,'rewards')??[];for(const al of ak){a5['push']({'address':al,'description':'Service\x20reward\x20'+al+'\x20(guard-gated\x20—\x20eligibility\x20verified\x20at\x20claim\x20time)'});}}const a6=isConsequenceNode(Y,'completed'),a7=isConsequenceNode(Y,'refunded');let a8=0x0;if(E['size']>0x0){const am=new Set();if(a4)am['add'](a4['toLowerCase']());for(const an of Object['values'](a0)){for(const ao of an)am['add'](ao['toLowerCase']());}am['delete'](g['toLowerCase']());for(const ap of am){a8+=E['get'](ap)??0x0;}}const a9={'account':g,'progress_address':U['progress'],'order_address':U['order'],'current_node':Y,'order_holder':a4,'workflow':X?x['get'](X):undefined,'permission':X?A['get'](X)??null:null,'named_accounts':a0,'claimable_rewards':a5['length']>0x0?a5:undefined,'pending_compensation':a3,'rating_pending':a6&&a4===g,'unread_messages':a8>0x0?a8:undefined,'last_progress_at':fld(V,'current_time')??undefined,'now':G},aa=analyzeOrderParticipation(a9),ab=(fld(a2,'arbitrations')??[])['length']>0x0,ac=a6?'completed':a7?'refunded':null,ad=a9['last_progress_at']!=null?(G-a9['last_progress_at'])/0x36ee80:undefined,ae=summarizeAllocation(fld(a2,'order_allocators'),g);if(aa['perspective']==='merchant')aa['interest_analysis']=analyzeMerchantInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'order_amount':balanceStr(fld(W,'amount')),'token_type':balanceToken(fld(W,'amount')),'allocation':ae,'compensation_fund':balanceStr(fld(a2,'compensation_fund')),'arbitration_bound':ab,'rewards_count':(fld(a2,'rewards')??[])['length'],'stalled_hours':ad,'terminal':ac,'unread_messages':a8>0x0?a8:undefined});else{if(aa['perspective']==='supplier')aa['interest_analysis']=analyzeSupplierInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'order_amount':balanceStr(fld(W,'amount')),'token_type':balanceToken(fld(W,'amount')),'arbitration_bound':ab,'compensation_fund':balanceStr(fld(a2,'compensation_fund')),'allocation_payoff':ae?.['payoffs'],'terminal':ac,'stalled_hours':ad,'unread_messages':a8>0x0?a8:undefined});else{if(aa['perspective']==='collaborator')aa['interest_analysis']=analyzeCollaboratorInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'collaborator_kind':aa['collaborator_kind'],'arbitration_bound':ab,'allocation_payoff':ae?.['payoffs'],'terminal':ac,'stalled_hours':ad,'unread_messages':a8>0x0?a8:undefined});else aa['perspective']==='customer'&&(aa['interest_analysis']=analyzeCustomerInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'order_amount':balanceStr(fld(W,'amount')),'token_type':balanceToken(fld(W,'amount')),'compensation_fund':balanceStr(fld(a2,'compensation_fund')),'arbitration_bound':ab,'allocation_payoff':ae?.['payoffs'],'terminal':ac,'stalled_hours':ad,'unread_messages':a8>0x0?a8:undefined}));}}if(d&&W){const aq={'order_id':U['order'],'service_id':a1??'','current_node':Y||undefined,'created_at':Number(fld(W,'time')??G)||G,'last_progress_at':fld(V,'current_time')??undefined,'now':G,'order_amount':((()=>{try{return BigInt(fld(W,'amount')??0x0);}catch{return undefined;}})()),'compensation_balance':((()=>{try{const ar=fld(a2,'compensation_fund');return ar!=null?BigInt(ar):undefined;}catch{return undefined;}})()),'token':registryDisplayHint(extractGenericTokenType(fld(a2,'type_raw'))),'has_arbitration':(fld(a2,'arbitrations')??[])['length']>0x0,'pending_user_action':aa['operable']['some'](ar=>ar['execution_path']==='order_holder'),'completed':a6,'refunded':a7};try{const ar=monitorOrder({'current':aq,'thresholds':a['radar_monitor_thresholds']});ar['length']>0x0&&(aa['attached_alerts']=ar);}catch(as){f['push']('Order\x20monitor\x20failed\x20for\x20'+U['order']+':\x20'+as['message']+'.');}}F['push'](aa);}const H=aggregateRadar(F,D);return{'action':'participation_radar','account':g,'orders_analyzed':H['orders_analyzed'],'actionable':H['actionable'],'waiting':H['waiting'],'all_pending_claims':H['all_pending_claims'],'unread_messages_total':H['unread_messages_total'],'data_gaps':f,'summary':H['summary']};}
@@ -83,7 +83,7 @@ export interface TraceSubstepsInput {
83
83
  substeps?: SubstepRecord[];
84
84
  substep_edges?: SubstepEdge[];
85
85
  }
86
- export declare function handleTraceSubsteps(v: TraceSubstepsInput): {
86
+ export declare function handleTraceSubsteps(v: TraceSubstepsInput): Promise<{
87
87
  namespace: {
88
88
  prefix: string;
89
89
  version: string;
@@ -98,4 +98,4 @@ export declare function handleTraceSubsteps(v: TraceSubstepsInput): {
98
98
  topological_order: string[];
99
99
  d10_check: import("../../task/substep-trace.js").D10CheckResult;
100
100
  action: "trace_substeps";
101
- };
101
+ }>;
@@ -1 +1 @@
1
- import{analyzeBusinessIntent}from'./business-puzzle.js';import{aggregateProjectRisks}from'./risk-aggregator.js';import{traceSubsteps}from'../../task/substep-trace.js';import{updateStageCache}from'./index.js';import{checkObjectReuseRules,checkImmutabilityRules}from'../../knowledge/safety-rules.js';export function handleAnalyzeIntent(a){const b=(a['intent']??a['project_description']??a['project_name']??'')['trim']();if(!b)throw new Error('analyze_intent\x20requires\x20\x27intent\x27\x20(business\x20description\x20text).\x20'+'Example:\x20intent=\x27I\x20want\x20to\x20open\x20an\x20online\x20toy\x20store\x20with\x20escrow\x20and\x20dispute\x20resolution\x27.');const c=analyzeBusinessIntent({'user_intent':b,'project_name':a['project_name'],'target_objects':a['target_objects'],'industry':a['project_industry']}),d=(a['project']??'')['trim']();return d&&updateStageCache(d,(a['version']??'v1')['trim'](),{'stage':'puzzle','puzzles':c['puzzles'],'business_intent':b,'industry':c['intent_parsed']['industry']}),{'action':'analyze_intent',...c};}export function handleAggregateRisks(a){const b=(a['project']??'')['trim']();if(!b)throw new Error('aggregate_risks\x20requires\x20\x27project\x27\x20(project\x20prefix,\x20e.g.\x20\x27myshop\x27).\x20'+'Use\x20one\x20stable\x20prefix\x20per\x20build\x20so\x20findings\x20map\x20to\x20the\x20service-build\x20stage\x20cache\x20namespace.');const c=(a['version']??'v1')['trim']();let d,e;if(a['puzzles'])d=Object['fromEntries'](Object['entries'](a['puzzles'])['map'](([h,i])=>[h,{'puzzle':i['puzzle'],'completeness':i['completeness'],'missing_dimensions':i['missing_dimensions']}]));else{const h=(a['intent']??a['project_description']??a['project_name']??'')['trim']();if(!h)throw new Error('aggregate_risks\x20requires\x20\x27puzzles\x27\x20(from\x20a\x20prior\x20analyze_intent\x20result)\x20'+'OR\x20\x27intent\x27\x20(business\x20description\x20—\x20analyze_intent\x20runs\x20automatically\x20first).');const i=analyzeBusinessIntent({'user_intent':h,'project_name':a['project_name'],'industry':a['project_industry']});d=i['puzzles'],e={'primary_object':i['intent_parsed']['primary_object'],'industry':i['intent_parsed']['industry'],'overall_completeness':i['overall_completeness']};}const f=aggregateProjectRisks({'project_prefix':b,'version':c,'industry':a['project_industry'],'puzzles':d,'severity_threshold':a['severity_threshold'],'user_confirmed_high_risks':a['user_confirmed_high_risks']}),g=[...a['planned_objects']?checkObjectReuseRules(a['planned_objects']):[],...a['planned_operations']?checkImmutabilityRules(a['planned_operations']):[]];return updateStageCache(b,c,{'stage':'risk','risk_status':f['status'],'risk_can_proceed':f['status']==='RISK_PASSED'}),{'action':'aggregate_risks',...f,...g['length']>0x0?{'safety_findings':g}:{},...e?{'intent_echo':e}:{}};}export function handleTraceSubsteps(a){const b=(a['project']??'')['trim']();if(!b)throw new Error('trace_substeps\x20requires\x20\x27project\x27\x20(project\x20prefix,\x20e.g.\x20\x27myshop\x27).');if(!a['substeps']||a['substeps']['length']===0x0)throw new Error('trace_substeps\x20requires\x20\x27substeps\x27\x20(non-empty\x20array\x20of\x20substep\x20execution\x20records,\x20'+'63-spec\x20§2.1).\x20Construct\x20them\x20from\x20your\x20deployment\x20execution\x20trace:\x20each\x20onchain_operations\x20'+'call\x20=\x20one\x20substep\x20with\x20step_id\x20\x27T<step>.<substep>\x27,\x20input_refs\x20pointing\x20at\x20upstream\x20substeps.');const c=traceSubsteps({'project_prefix':b,'version':(a['version']??'v1')['trim'](),'network':a['network']??'testnet','substeps':a['substeps'],'edges':a['substep_edges']});return updateStageCache(b,(a['version']??'v1')['trim'](),{'stage':'substeps','trace_coherent':c['coherent'],'trace_can_proceed':c['coherent']}),{'action':'trace_substeps',...c};}
1
+ import{analyzeBusinessIntent}from'./business-puzzle.js';import{Config}from'@wowok/wowok/w/local';import{aggregateProjectRisks}from'./risk-aggregator.js';import{traceSubsteps}from'../../task/substep-trace.js';import{updateStageCache}from'./index.js';import{checkObjectReuseRules,checkImmutabilityRules}from'../../knowledge/safety-rules.js';export function handleAnalyzeIntent(a){const b=(a['intent']??a['project_description']??a['project_name']??'')['trim']();if(!b)throw new Error('analyze_intent\x20requires\x20\x27intent\x27\x20(business\x20description\x20text).\x20'+'Example:\x20intent=\x27I\x20want\x20to\x20open\x20an\x20online\x20toy\x20store\x20with\x20escrow\x20and\x20dispute\x20resolution\x27.');const c=analyzeBusinessIntent({'user_intent':b,'project_name':a['project_name'],'target_objects':a['target_objects'],'industry':a['project_industry']}),d=(a['project']??'')['trim']();return d&&updateStageCache(d,(a['version']??'v1')['trim'](),{'stage':'puzzle','puzzles':c['puzzles'],'business_intent':b,'industry':c['intent_parsed']['industry']}),{'action':'analyze_intent',...c};}export function handleAggregateRisks(a){const b=(a['project']??'')['trim']();if(!b)throw new Error('aggregate_risks\x20requires\x20\x27project\x27\x20(project\x20prefix,\x20e.g.\x20\x27myshop\x27).\x20'+'Use\x20one\x20stable\x20prefix\x20per\x20build\x20so\x20findings\x20map\x20to\x20the\x20service-build\x20stage\x20cache\x20namespace.');const c=(a['version']??'v1')['trim']();let d,e;if(a['puzzles'])d=Object['fromEntries'](Object['entries'](a['puzzles'])['map'](([h,i])=>[h,{'puzzle':i['puzzle'],'completeness':i['completeness'],'missing_dimensions':i['missing_dimensions']}]));else{const h=(a['intent']??a['project_description']??a['project_name']??'')['trim']();if(!h)throw new Error('aggregate_risks\x20requires\x20\x27puzzles\x27\x20(from\x20a\x20prior\x20analyze_intent\x20result)\x20'+'OR\x20\x27intent\x27\x20(business\x20description\x20—\x20analyze_intent\x20runs\x20automatically\x20first).');const i=analyzeBusinessIntent({'user_intent':h,'project_name':a['project_name'],'industry':a['project_industry']});d=i['puzzles'],e={'primary_object':i['intent_parsed']['primary_object'],'industry':i['intent_parsed']['industry'],'overall_completeness':i['overall_completeness']};}const f=aggregateProjectRisks({'project_prefix':b,'version':c,'industry':a['project_industry'],'puzzles':d,'severity_threshold':a['severity_threshold'],'user_confirmed_high_risks':a['user_confirmed_high_risks']}),g=[...a['planned_objects']?checkObjectReuseRules(a['planned_objects']):[],...a['planned_operations']?checkImmutabilityRules(a['planned_operations']):[]];return updateStageCache(b,c,{'stage':'risk','risk_status':f['status'],'risk_can_proceed':f['status']==='RISK_PASSED'}),{'action':'aggregate_risks',...f,...g['length']>0x0?{'safety_findings':g}:{},...e?{'intent_echo':e}:{}};}export async function handleTraceSubsteps(a){const b=(a['project']??'')['trim']();if(!b)throw new Error('trace_substeps\x20requires\x20\x27project\x27\x20(project\x20prefix,\x20e.g.\x20\x27myshop\x27).');if(!a['substeps']||a['substeps']['length']===0x0)throw new Error('trace_substeps\x20requires\x20\x27substeps\x27\x20(non-empty\x20array\x20of\x20substep\x20execution\x20records,\x20'+'63-spec\x20§2.1).\x20Construct\x20them\x20from\x20your\x20deployment\x20execution\x20trace:\x20each\x20onchain_operations\x20'+'call\x20=\x20one\x20substep\x20with\x20step_id\x20\x27T<step>.<substep>\x27,\x20input_refs\x20pointing\x20at\x20upstream\x20substeps.');const c=traceSubsteps({'project_prefix':b,'version':(a['version']??'v1')['trim'](),'network':a['network']??await Config['Instance']()['network_get'](),'substeps':a['substeps'],'edges':a['substep_edges']});return updateStageCache(b,(a['version']??'v1')['trim'](),{'stage':'substeps','trace_coherent':c['coherent'],'trace_can_proceed':c['coherent']}),{'action':'trace_substeps',...c};}
@@ -1 +1 @@
1
- import{LocalMark}from'@wowok/wowok';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']??'testnet',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{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 +1 @@
1
- import{assessServiceRisks,assessMachineRisks,assessAllocationRisks,assessTreasuryRisks,assessArbitrationRisks,assessRewardRisks,assessProgressRisks,assessOrderRisks,assessGuardRisks,checkContactRisks,checkResourceRisks,checkPaymentRisks,checkArbRisks,checkPersonalRisks,checkUtilRisks,checkRegistrarRisks,checkBridgeRisks,checkProofRisks,checkRepositoryRisks,checkDemandRisks}from'../../knowledge/index.js';import{assessPermissionRisks}from'../../knowledge/permission-risk.js';const SEVERITY_ORDER={'CRITICAL':0x0,'HIGH':0x1,'MEDIUM':0x2,'LOW':0x3,'INFO':0x4},ALL_SEVERITIES=['CRITICAL','HIGH','MEDIUM','LOW','INFO'];function normalizeSeverity(a){if(typeof a!=='string')return'INFO';const b=a['toUpperCase']();return ALL_SEVERITIES['includes'](b)?b:'INFO';}function extractRiskId(a,b){if(!a||typeof a!=='object')return b;return String(a['id']??a['risk_rule_id']??a['rule_id']??b);}function extractRiskMessage(a){if(!a||typeof a!=='object')return'(no\x20message)';return String(a['title']??a['message']??a['description']??a['trigger']??'(no\x20message)');}function extractFixSuggestion(a){if(!a||typeof a!=='object')return'';return String(a['mitigation']??a['fix_suggestion']??a['suggestion']??'');}function toAggregatedRisk(a,b,c){return{'risk_rule_id':extractRiskId(a,'R-'+b['toUpperCase']()+'-?'),'object_type':b,'entry_id':c,'severity':normalizeSeverity(a?.['level']??a?.['severity']),'message':extractRiskMessage(a),'fix_suggestion':extractFixSuggestion(a),'details':a?.['evidence']?{'field_path':String(a['evidence'])}:undefined};}function isL1L2Object(a){return['service','machine','allocation','treasury','arb','reward','progress','order','permission','guard']['includes'](a);}function buildL1L2Dispatch(){const a=(b,c)=>{try{const d=b??{},e=c(d);if(Array['isArray'](e))return e;if(e&&typeof e==='object'){const f=e['risks'];if(Array['isArray'](f))return f;}return[];}catch{return[];}};return{'service':{'assess':b=>a(b,assessServiceRisks)},'machine':{'assess':b=>a(b,c=>assessMachineRisks(c,{}))},'allocation':{'assess':b=>a(b,assessAllocationRisks)},'treasury':{'assess':b=>a(b,assessTreasuryRisks)},'arb':{'assess':b=>a(b,assessArbitrationRisks)},'reward':{'assess':b=>a(b,c=>assessRewardRisks(c))},'progress':{'assess':b=>a(b,c=>assessProgressRisks(c))},'order':{'assess':b=>a(b,assessOrderRisks)},'permission':{'assess':b=>a(b,assessPermissionRisks)},'guard':{'assess':b=>{try{const c=assessGuardRisks({'table':[],'root':undefined});if(Array['isArray'](c))return c;if(c&&typeof c==='object'){const d=c['risks'];if(Array['isArray'](d))return d;}return[];}catch{return[];}}}};}function buildL3Dispatch(){const a=(b,c)=>{try{const d=b??{},e=c(d);if(Array['isArray'](e))return e;return[];}catch{return[];}};return{'contact':{'check':b=>a(b,checkContactRisks)},'resource':{'check':b=>a(b,checkResourceRisks)},'payment':{'check':b=>a(b,checkPaymentRisks)},'arb':{'check':b=>a(b,checkArbRisks)},'personal':{'check':b=>a(b,checkPersonalRisks)},'util':{'check':b=>a(b,checkUtilRisks)},'registrar':{'check':b=>a(b,checkRegistrarRisks)},'bridge':{'check':b=>a(b,checkBridgeRisks)},'proof':{'check':b=>a(b,checkProofRisks)},'repository':{'check':b=>a(b,checkRepositoryRisks)},'demand':{'check':b=>a(b,checkDemandRisks)}};}export function aggregateProjectRisks(a){const b=[];(!a||!a['project_prefix'])&&b['push']('input.project_prefix\x20is\x20empty');const c=a?.['puzzles']??{},e=[],f=buildL1L2Dispatch(),g=buildL3Dispatch();for(const [m,n]of Object['entries'](c)){const o=m,p=(a['project_prefix']??'project')+'_'+o,q=n?.['puzzle'];if(isL1L2Object(o)){const s=f[o];if(!s){b['push']('No\x20L1/L2\x20risk\x20dispatcher\x20for\x20\x27'+o+'\x27');continue;}const t=s['assess'](q);for(const u of t){e['push'](toAggregatedRisk(u,o,p));}}else{const v=g[o];if(!v){b['push']('No\x20L3\x20risk\x20dispatcher\x20for\x20\x27'+o+'\x27');continue;}const w=v['check'](q);for(const x of w){e['push'](toAggregatedRisk(x,o,p));}}}sortFindings(e);const h=countBySeverity(e),i=a['severity_threshold']??'HIGH',j=determineStatus(h,i,a['user_confirmed_high_risks']??[],e);let k;j==='RISK_PENDING_CONFIRM'&&(k=e['filter'](y=>y['severity']==='HIGH')['filter'](y=>!(a['user_confirmed_high_risks']??[])['includes'](y['risk_rule_id']))['map'](y=>({'risk_rule_id':y['risk_rule_id'],'description':y['message'],'fix_suggestion':y['fix_suggestion'],'object_type':y['object_type'],'entry_id':y['entry_id']})));const l={};for(const y of e){const z=y['object_type'];!l[z]&&(l[z]=[]),l[z]['push']({'risk_rule_id':y['risk_rule_id'],'severity':y['severity'],'message':y['message'],'fix_suggestion':y['fix_suggestion'],'entry_id':y['entry_id']});}return{'namespace':{'prefix':a['project_prefix']??'','version':a['version']??'','industry':a['industry']??'general'},'findings':e,'severity_summary':h,'status':j,'pending_confirmations':k,'calibrated_at':Date['now'](),'fix_suggestions_grouped':l,'warnings':b};}export function sortFindings(a){return a['sort']((c,d)=>{const e=SEVERITY_ORDER[c['severity']]-SEVERITY_ORDER[d['severity']];if(e!==0x0)return e;if(c['object_type']!==d['object_type'])return c['object_type']['localeCompare'](d['object_type']);return c['risk_rule_id']['localeCompare'](d['risk_rule_id']);});}export function countBySeverity(a){const b={'CRITICAL':0x0,'HIGH':0x0,'MEDIUM':0x0,'LOW':0x0,'INFO':0x0};for(const c of a){b[c['severity']]++;}return b;}export function determineStatus(a,b,c,d){if(a['CRITICAL']>0x0)return'RISK_BLOCKED';const e=SEVERITY_ORDER[b];if(a['HIGH']>0x0&&e<=SEVERITY_ORDER['HIGH']){const f=d['filter'](g=>g['severity']==='HIGH'&&!c['includes'](g['risk_rule_id']));if(f['length']>0x0)return'RISK_PENDING_CONFIRM';}if(a['MEDIUM']>0x0&&e<=SEVERITY_ORDER['MEDIUM'])return'RISK_BLOCKED';if(a['LOW']>0x0&&e<=SEVERITY_ORDER['LOW'])return'RISK_BLOCKED';return'RISK_PASSED';}export function getCriticalRisks(a){if(!a?.['findings'])return[];return a['findings']['filter'](b=>b['severity']==='CRITICAL');}export function summarizeRiskReport(a){if(!a)return'(no\x20result)';const b=[];b['push']('#\x20Risk\x20Aggregation\x20Report'),b['push'](''),b['push']('-\x20Project:\x20'+a['namespace']['prefix']+'_'+a['namespace']['version']),b['push']('-\x20Status:\x20'+a['status']),b['push']('-\x20Calibrated\x20at:\x20'+new Date(a['calibrated_at'])['toISOString']()),b['push'](''),b['push']('##\x20Severity\x20Summary'),b['push'](''),b['push']('|\x20Severity\x20|\x20Count\x20|'),b['push']('|----------|-------|');for(const c of ALL_SEVERITIES){b['push']('|\x20'+c+'\x20|\x20'+(a['severity_summary'][c]??0x0)+'\x20|');}b['push']('');if(a['findings']['length']===0x0)return b['push']('No\x20risks\x20found.'),b['join']('\x0a');b['push']('##\x20Findings\x20(sorted\x20by\x20severity)'),b['push']('');for(const d of a['findings']){b['push']('-\x20**['+d['severity']+']\x20'+d['risk_rule_id']+'**\x20('+d['object_type']+'\x20/\x20'+d['entry_id']+')'),b['push']('\x20\x20-\x20'+d['message']),d['fix_suggestion']&&b['push']('\x20\x20-\x20Fix:\x20'+d['fix_suggestion']);}if(a['warnings']['length']>0x0){b['push'](''),b['push']('##\x20Warnings');for(const e of a['warnings'])b['push']('-\x20'+e);}return b['join']('\x0a');}
1
+ import{assessServiceRisks,assessMachineRisks,assessAllocationRisks,assessTreasuryRisks,assessArbitrationRisks,assessRewardRisks,assessProgressRisks,assessOrderRisks,assessGuardRisks,checkContactRisks,checkResourceRisks,checkPaymentRisks,checkArbRisks,checkPersonalRisks,checkUtilRisks,checkRegistrarRisks,checkBridgeRisks,checkProofRisks,checkRepositoryRisks,checkDemandRisks}from'../../knowledge/index.js';import{assessPermissionRisks}from'../../knowledge/permission-risk.js';import{analyzeRecipientConstraints}from'../../knowledge/recipient-constraint.js';const SEVERITY_ORDER={'CRITICAL':0x0,'HIGH':0x1,'MEDIUM':0x2,'LOW':0x3,'INFO':0x4},ALL_SEVERITIES=['CRITICAL','HIGH','MEDIUM','LOW','INFO'];function normalizeSeverity(a){if(typeof a!=='string')return'INFO';const b=a['toUpperCase']();return ALL_SEVERITIES['includes'](b)?b:'INFO';}function extractRiskId(a,b){if(!a||typeof a!=='object')return b;return String(a['id']??a['risk_rule_id']??a['rule_id']??b);}function extractRiskMessage(a){if(!a||typeof a!=='object')return'(no\x20message)';return String(a['title']??a['message']??a['description']??a['trigger']??'(no\x20message)');}function extractFixSuggestion(a){if(!a||typeof a!=='object')return'';return String(a['mitigation']??a['fix_suggestion']??a['suggestion']??'');}function toAggregatedRisk(a,b,c){return{'risk_rule_id':extractRiskId(a,'R-'+b['toUpperCase']()+'-?'),'object_type':b,'entry_id':c,'severity':normalizeSeverity(a?.['level']??a?.['severity']),'message':extractRiskMessage(a),'fix_suggestion':extractFixSuggestion(a),'details':a?.['evidence']?{'field_path':String(a['evidence'])}:undefined};}function safeRecipientAudit(a){try{const b=a??{},c=b['allocators_config'],d=c?.['allocators'];if(!Array['isArray'](d)||d['length']===0x0)return[];const e=analyzeRecipientConstraints({'trigger_source':b['trigger_source']??'service_order_allocators',...typeof b['host_service']==='string'?{'host_service':b['host_service']}:{},...typeof b['allocation']==='string'?{'allocation':b['allocation']}:{},'allocators':d['map'](f=>({'guard':f['guard'],'sharing':f['sharing']??[]})),'guards':b['guards']??{}});return e['findings']['map'](g=>({'id':g['code'],'level':g['severity'],'title':g['title'],'description':g['explanation'],'mitigation':g['mitigation'],'evidence':g['evidence_paths']['join'](',')}));}catch{return[];}}function isL1L2Object(a){return['service','machine','allocation','treasury','arb','reward','progress','order','permission','guard']['includes'](a);}function buildL1L2Dispatch(){const a=(b,c)=>{try{const d=b??{},e=c(d);if(Array['isArray'](e))return e;if(e&&typeof e==='object'){const f=e['risks'];if(Array['isArray'](f))return f;}return[];}catch{return[];}};return{'service':{'assess':b=>a(b,assessServiceRisks)},'machine':{'assess':b=>a(b,c=>assessMachineRisks(c,{}))},'allocation':{'assess':b=>[...a(b,assessAllocationRisks),safeRecipientAudit(b)]['flat']()},'treasury':{'assess':b=>a(b,assessTreasuryRisks)},'arb':{'assess':b=>a(b,assessArbitrationRisks)},'reward':{'assess':b=>a(b,c=>assessRewardRisks(c))},'progress':{'assess':b=>a(b,c=>assessProgressRisks(c))},'order':{'assess':b=>a(b,assessOrderRisks)},'permission':{'assess':b=>a(b,assessPermissionRisks)},'guard':{'assess':b=>{try{const c=assessGuardRisks({'table':[],'root':undefined});if(Array['isArray'](c))return c;if(c&&typeof c==='object'){const d=c['risks'];if(Array['isArray'](d))return d;}return[];}catch{return[];}}}};}function buildL3Dispatch(){const a=(b,c)=>{try{const d=b??{},e=c(d);if(Array['isArray'](e))return e;return[];}catch{return[];}};return{'contact':{'check':b=>a(b,checkContactRisks)},'resource':{'check':b=>a(b,checkResourceRisks)},'payment':{'check':b=>a(b,checkPaymentRisks)},'arb':{'check':b=>a(b,checkArbRisks)},'personal':{'check':b=>a(b,checkPersonalRisks)},'util':{'check':b=>a(b,checkUtilRisks)},'registrar':{'check':b=>a(b,checkRegistrarRisks)},'bridge':{'check':b=>a(b,checkBridgeRisks)},'proof':{'check':b=>a(b,checkProofRisks)},'repository':{'check':b=>a(b,checkRepositoryRisks)},'demand':{'check':b=>a(b,checkDemandRisks)}};}export function aggregateProjectRisks(a){const b=[];(!a||!a['project_prefix'])&&b['push']('input.project_prefix\x20is\x20empty');const c=a?.['puzzles']??{},e=[],f=buildL1L2Dispatch(),g=buildL3Dispatch();for(const [m,n]of Object['entries'](c)){const o=m,p=(a['project_prefix']??'project')+'_'+o,q=n?.['puzzle'];if(isL1L2Object(o)){const s=f[o];if(!s){b['push']('No\x20L1/L2\x20risk\x20dispatcher\x20for\x20\x27'+o+'\x27');continue;}const t=s['assess'](q);for(const u of t){e['push'](toAggregatedRisk(u,o,p));}}else{const v=g[o];if(!v){b['push']('No\x20L3\x20risk\x20dispatcher\x20for\x20\x27'+o+'\x27');continue;}const w=v['check'](q);for(const x of w){e['push'](toAggregatedRisk(x,o,p));}}}sortFindings(e);const h=countBySeverity(e),i=a['severity_threshold']??'HIGH',j=determineStatus(h,i,a['user_confirmed_high_risks']??[],e);let k;j==='RISK_PENDING_CONFIRM'&&(k=e['filter'](y=>y['severity']==='HIGH')['filter'](y=>!(a['user_confirmed_high_risks']??[])['includes'](y['risk_rule_id']))['map'](y=>({'risk_rule_id':y['risk_rule_id'],'description':y['message'],'fix_suggestion':y['fix_suggestion'],'object_type':y['object_type'],'entry_id':y['entry_id']})));const l={};for(const y of e){const z=y['object_type'];!l[z]&&(l[z]=[]),l[z]['push']({'risk_rule_id':y['risk_rule_id'],'severity':y['severity'],'message':y['message'],'fix_suggestion':y['fix_suggestion'],'entry_id':y['entry_id']});}return{'namespace':{'prefix':a['project_prefix']??'','version':a['version']??'','industry':a['industry']??'general'},'findings':e,'severity_summary':h,'status':j,'pending_confirmations':k,'calibrated_at':Date['now'](),'fix_suggestions_grouped':l,'warnings':b};}export function sortFindings(a){return a['sort']((c,d)=>{const e=SEVERITY_ORDER[c['severity']]-SEVERITY_ORDER[d['severity']];if(e!==0x0)return e;if(c['object_type']!==d['object_type'])return c['object_type']['localeCompare'](d['object_type']);return c['risk_rule_id']['localeCompare'](d['risk_rule_id']);});}export function countBySeverity(a){const b={'CRITICAL':0x0,'HIGH':0x0,'MEDIUM':0x0,'LOW':0x0,'INFO':0x0};for(const c of a){b[c['severity']]++;}return b;}export function determineStatus(a,b,c,d){if(a['CRITICAL']>0x0)return'RISK_BLOCKED';const e=SEVERITY_ORDER[b];if(a['HIGH']>0x0&&e<=SEVERITY_ORDER['HIGH']){const f=d['filter'](g=>g['severity']==='HIGH'&&!c['includes'](g['risk_rule_id']));if(f['length']>0x0)return'RISK_PENDING_CONFIRM';}if(a['MEDIUM']>0x0&&e<=SEVERITY_ORDER['MEDIUM'])return'RISK_BLOCKED';if(a['LOW']>0x0&&e<=SEVERITY_ORDER['LOW'])return'RISK_BLOCKED';return'RISK_PASSED';}export function getCriticalRisks(a){if(!a?.['findings'])return[];return a['findings']['filter'](b=>b['severity']==='CRITICAL');}export function summarizeRiskReport(a){if(!a)return'(no\x20result)';const b=[];b['push']('#\x20Risk\x20Aggregation\x20Report'),b['push'](''),b['push']('-\x20Project:\x20'+a['namespace']['prefix']+'_'+a['namespace']['version']),b['push']('-\x20Status:\x20'+a['status']),b['push']('-\x20Calibrated\x20at:\x20'+new Date(a['calibrated_at'])['toISOString']()),b['push'](''),b['push']('##\x20Severity\x20Summary'),b['push'](''),b['push']('|\x20Severity\x20|\x20Count\x20|'),b['push']('|----------|-------|');for(const c of ALL_SEVERITIES){b['push']('|\x20'+c+'\x20|\x20'+(a['severity_summary'][c]??0x0)+'\x20|');}b['push']('');if(a['findings']['length']===0x0)return b['push']('No\x20risks\x20found.'),b['join']('\x0a');b['push']('##\x20Findings\x20(sorted\x20by\x20severity)'),b['push']('');for(const d of a['findings']){b['push']('-\x20**['+d['severity']+']\x20'+d['risk_rule_id']+'**\x20('+d['object_type']+'\x20/\x20'+d['entry_id']+')'),b['push']('\x20\x20-\x20'+d['message']),d['fix_suggestion']&&b['push']('\x20\x20-\x20Fix:\x20'+d['fix_suggestion']);}if(a['warnings']['length']>0x0){b['push'](''),b['push']('##\x20Warnings');for(const e of a['warnings'])b['push']('-\x20'+e);}return b['join']('\x0a');}
@@ -1 +1 @@
1
- import{SdkDataPlane,expandTopology,buildViewport,buildRoleInterest,runAnalyzers,runNodeAnalyzers,listAnalyzers,toCommercialRole,workflowSubgraphFromEdges,orderCompletionInGraph,resolveExpansionStrategy}from'../../graph/onchain/index.js';import{resolveAddress}from'./relationship-profile.js';import{serviceRiskNodeAnalyzer}from'../../knowledge/service-risk-node.js';import{recommendedCallForForwardBinding}from'../../participation/radar-core.js';import{resolveTopologyContext}from'../../persona/topology-focus.js';const NODE_ANALYZERS=[serviceRiskNodeAnalyzer],NODE_MARK='::node::';function tally(a){const b={};for(const c of a){if(!c)continue;b[c]=(b[c]??0x0)+0x1;}return b;}export function buildOnchainTopologyResult(a,b,c={}){const d=b['toLowerCase'](),f=[],g=new Set();for(const s of a['edges']){if(s['schema']!=='wf.transition')continue;for(const u of[s['from'],s['to']]){const v=u['indexOf'](NODE_MARK);if(v<=0x0)continue;const w=u['slice'](0x0,v)['toLowerCase']();!g['has'](w)&&(g['add'](w),f['push'](w));}}f['sort']();const h=f['map'](x=>{const y=workflowSubgraphFromEdges(a['edges'],x);return{'machine':x,'transitions':y['transitions']['map'](z=>({'node':z['node'],'prev_node':z['prevNode'],...z['forward']!==undefined?{'forward':z['forward']}:{},...z['threshold']!==undefined?{'threshold':z['threshold']}:{},'guard':z['guard']??null,'weight':z['weight']??null,'named_operator':z['namedOperator']??null,'permission_index':z['permissionIndex']??null,'recommended_call':recommendedCallForForwardBinding({'permissionIndex':z['permissionIndex']??null,'namedOperator':z['namedOperator']??null,'hasGuard':!!z['guard']})??null})),'terminal_names':[...y['terminalNames']]['sort']()};}),i=[...a['nodes']['values']()]['filter'](x=>x['kind']==='object'&&x['state']==='fetched'&&x['objectType']==='Order')['map'](x=>({'order':x['id'],...orderCompletionInGraph(a,x['id'])})),j=[...a['gaps']];let k=[],l;if(c['analyze']??!![]){const x=buildViewport(a,d,'neutral'),y=c['analyzerKinds'],z=c['onlyAnalyzers']?new Set(c['onlyAnalyzers']):undefined;try{k=runAnalyzers(x,{...y?{'kinds':y}:{},...z?{'only':[...z]}:{}});}catch(A){j['push']('Analyzer\x20suite\x20failed\x20(topology\x20itself\x20is\x20intact):\x20'+(A?.['message']??String(A)));}try{const B=NODE_ANALYZERS['filter'](C=>(!y||y['includes'](C['kind']))&&(!z||z['has'](C['id'])));k['push'](...runNodeAnalyzers(x,B));}catch(C){j['push']('Node\x20analyzer\x20suite\x20failed\x20(topology\x20itself\x20is\x20intact):\x20'+(C?.['message']??String(C)));}if(c['interestRole']&&c['interestObserver'])try{const D=buildRoleInterest(a,c['interestObserver'],toCommercialRole(c['interestRole']),c['interestDrive']);k['push'](D['finding']),l=D['view'];}catch(E){j['push']('Role\x20interest\x20projection\x20failed\x20(topology\x20itself\x20is\x20intact):\x20'+(E?.['message']??String(E)));}}for(const F of a['truncations']){j['push']('truncated\x20'+F['schema']+'\x20at\x20'+F['nodeId']+':\x20observed\x20at\x20least\x20'+F['observed']+'\x20edge(s)\x20(limit\x20'+F['limit']+')');}if(a['budgetExhausted']['rpcs'])j['push']('RPC\x20batch\x20budget\x20exhausted\x20—\x20topology\x20is\x20partial\x20(raise\x20budget.max_rpcs).');if(a['budgetExhausted']['nodes'])j['push']('Node\x20budget\x20exhausted\x20—\x20topology\x20is\x20partial\x20(raise\x20budget.max_nodes).');if(a['budgetExhausted']['depth'])j['push']('Depth\x20budget\x20exhausted\x20—\x20topology\x20is\x20partial\x20(raise\x20budget.max_depth).');if(a['budgetExhausted']['eventPages'])j['push']('Event-page\x20budget\x20exhausted\x20—\x20event-derived\x20edges\x20are\x20partial.');const m=[...a['nodes']['values']()]['map'](G=>({'id':G['id'],'kind':G['kind'],...G['objectType']?{'object_type':G['objectType']}:{},...G['coinType']?{'coin_type':G['coinType']}:{},'state':G['state'],'depth':G['depth'],...G['error']?{'error':G['error']}:{},...c['includeRaw']&&G['raw']!==undefined?{'raw':G['raw']}:{}})),n=a['edges']['map'](G=>({'id':G['id'],'schema':G['schema'],'family':G['family'],'from':G['from'],'to':G['to'],'retention':G['retention'],'evidence':G['evidence'],...G['key']!==undefined?{'key':G['key']}:{},...G['truncated']!==undefined?{'truncated':G['truncated']}:{},...G['payload']!==undefined?{'payload':G['payload']}:{}})),o=tally(i['map'](G=>G['status'])),p=tally(a['edges']['map'](G=>G['family'])),q=Object['entries'](p)['map'](([G,H])=>G+'×'+H)['join'](',\x20');let r='Topology\x20around\x20'+d+'\x20on\x20'+a['network']+':\x20'+a['nodes']['size']+'\x20node(s),\x20'+a['edges']['length']+'\x20edge(s)'+(q?'\x20('+q+')':'')+(',\x20'+h['length']+'\x20workflow\x20graph(s),\x20'+i['length']+'\x20order(s)')+('\x20['+['completed','in_progress','unknown']['map'](G=>G+'='+(o[G]??0x0))['join'](',\x20')+']')+(',\x20'+k['length']+'\x20finding(s).');return j['length']>0x0&&(r+='\x20'+j['length']+'\x20data\x20gap/partial-data\x20marker(s)\x20—\x20see\x20data_gaps/truncations/budget_exhausted\x20before\x20drawing\x20conclusions.'),{'action':'onchain_topology','seed':d,'network':a['network'],'strategy':{'intents':c['strategy']?.['intents']??['full_map'],...c['strategy']?.['edges']['families']?{'families':c['strategy']['edges']['families']}:{},...c['strategy']?.['edges']['schemas']?{'schemas':c['strategy']['edges']['schemas']}:{},'table_edges':c['strategy']?.['edges']['tableEdges']??['machine.node'],...c['strategy']?.['edges']['familyDepths']?{'family_depths':c['strategy']['edges']['familyDepths']}:{},'budget':{...c['strategy']?.['budget']['maxDepth']!==undefined?{'max_depth':c['strategy']['budget']['maxDepth']}:{},...c['strategy']?.['budget']['maxNodes']!==undefined?{'max_nodes':c['strategy']['budget']['maxNodes']}:{},...c['strategy']?.['budget']['maxFanoutPerNode']!==undefined?{'max_fanout':c['strategy']['budget']['maxFanoutPerNode']}:{},...c['strategy']?.['budget']['maxRpcs']!==undefined?{'max_rpcs':c['strategy']['budget']['maxRpcs']}:{}},'trace':c['strategy']?.['trace']??['kernel\x20default:\x20all\x20families,\x20tables\x20[machine.node],\x20depth\x204']},'analyzers':[...listAnalyzers(),...NODE_ANALYZERS['map'](G=>G['id'])],'stats':{'nodes_total':a['nodes']['size'],'nodes_by_kind':tally([...a['nodes']['values']()]['map'](G=>G['kind'])),'nodes_by_object_type':tally([...a['nodes']['values']()]['map'](G=>G['objectType']??'')),'edges_total':a['edges']['length'],'edges_by_family':p,'edges_by_schema':tally(a['edges']['map'](G=>G['schema'])),'rpc':{'batches':a['rpcReport']['batches'],'by_channel':{'objects':a['rpcReport']['byChannel']['objects'],'keyed_fields':a['rpcReport']['byChannel']['keyedFields'],'tables':a['rpcReport']['byChannel']['tables'],'events':a['rpcReport']['byChannel']['events']},'dedup_hits':a['rpcReport']['dedupHits']}},'nodes':m,'edges':n,'workflows':h,'orders_completion':i,'findings':k,...l?{'role_interest':l}:{},'truncations':a['truncations']['map'](G=>({'node_id':G['nodeId'],'schema':G['schema'],'observed':G['observed'],'limit':G['limit']})),'budget_exhausted':{...a['budgetExhausted']['nodes']?{'nodes':!![]}:{},...a['budgetExhausted']['depth']?{'depth':!![]}:{},...a['budgetExhausted']['rpcs']?{'rpcs':!![]}:{},...a['budgetExhausted']['eventPages']?{'event_pages':!![]}:{}},'data_gaps':j,'summary':r};}export async function handleOnchainTopology(a,b){if(!a['focus'])throw new Error('\x27focus\x27\x20is\x20required\x20for\x20onchain_topology\x20—\x20an\x20on-chain\x20address\x20(0x...)\x20or\x20a\x20LocalMark\x20name.');const c=a['context_network']??'testnet',d=await resolveAddress(a['focus'],'focus'),e=b??new SdkDataPlane(c,{'noCache':a['no_cache']});let f={};try{f=await resolveTopologyContext({...a['context_account']?{'account':a['context_account']['toLowerCase']()}:{},...a['industry']?{'industry':a['industry']}:{},...a['role']?{'role':a['role']}:{}});}catch{}const g=resolveExpansionStrategy({...a['intent']?{'intents':[a['intent']]}:{},...f['roleDefault']?{'roleDefault':f['roleDefault']}:{},...f['industryTemplate']?{'industryTemplate':f['industryTemplate']}:{},...f['personaPref']?{'personaPref':{...f['personaPref'],...f['personaPref']['table_edges']?{'tableEdges':f['personaPref']['table_edges']}:{},...f['personaPref']['family_depths']?{'familyDepths':f['personaPref']['family_depths']}:{},...f['personaPref']['max_depth']!==undefined?{'maxDepth':f['personaPref']['max_depth']}:{},...f['personaPref']['max_nodes']!==undefined?{'maxNodes':f['personaPref']['max_nodes']}:{},...f['personaPref']['max_fanout']!==undefined?{'maxFanout':f['personaPref']['max_fanout']}:{}}}:{},'explicitEdges':{...a['table_edges']?{'tableEdges':a['table_edges']}:{},...a['budget']?{'budget':{...a['budget']['max_depth']!==undefined?{'maxDepth':a['budget']['max_depth']}:{},...a['budget']['max_nodes']!==undefined?{'maxNodes':a['budget']['max_nodes']}:{},...a['budget']['max_fanout']!==undefined?{'maxFanoutPerNode':a['budget']['max_fanout']}:{},...a['budget']['max_rpcs']!==undefined?{'maxRpcs':a['budget']['max_rpcs']}:{}}}:{}}}),h=await expandTopology(e,{'network':c,'seed':d,'budget':g['budget'],'edges':g['edges']}),i=a['interest_role']??a['role'];let j=a['context_account']?.['toLowerCase']();if(!j&&d['startsWith']('0x00'))j=d;const k=f['drive'],l=i&&j?toCommercialRole(i):undefined,m=buildOnchainTopologyResult(h,d,{'analyze':a['analyze'],...a['analyzer_kinds']?{'analyzerKinds':a['analyzer_kinds']}:{},...a['only_analyzers']?{'onlyAnalyzers':a['only_analyzers']}:{},'includeRaw':a['include_raw'],'strategy':g,...l&&j?{'interestRole':l,...k?{'interestDrive':k}:{},'interestObserver':j}:{}});return i&&!j&&m['data_gaps']['push']('interest_role\x20given\x20but\x20no\x20observer\x20EOA\x20(pass\x20context_account,\x20or\x20seed\x20an\x20EOA\x20address)\x20—\x20role\x20interest\x20view\x20skipped'),m;}
1
+ import{Config}from'@wowok/wowok/w/local';import{SdkDataPlane,expandTopology,buildViewport,buildRoleInterest,runAnalyzers,runNodeAnalyzers,listAnalyzers,toCommercialRole,workflowSubgraphFromEdges,orderCompletionInGraph,resolveExpansionStrategy}from'../../graph/onchain/index.js';import{resolveAddress}from'./relationship-profile.js';import{serviceRiskNodeAnalyzer}from'../../knowledge/service-risk-node.js';import{recommendedCallForForwardBinding}from'../../participation/radar-core.js';import{resolveTopologyContext}from'../../persona/topology-focus.js';const NODE_ANALYZERS=[serviceRiskNodeAnalyzer],NODE_MARK='::node::';function tally(a){const b={};for(const c of a){if(!c)continue;b[c]=(b[c]??0x0)+0x1;}return b;}export function buildOnchainTopologyResult(a,b,c={}){const d=b['toLowerCase'](),f=[],g=new Set();for(const s of a['edges']){if(s['schema']!=='wf.transition')continue;for(const u of[s['from'],s['to']]){const v=u['indexOf'](NODE_MARK);if(v<=0x0)continue;const w=u['slice'](0x0,v)['toLowerCase']();!g['has'](w)&&(g['add'](w),f['push'](w));}}f['sort']();const h=f['map'](x=>{const y=workflowSubgraphFromEdges(a['edges'],x);return{'machine':x,'transitions':y['transitions']['map'](z=>({'node':z['node'],'prev_node':z['prevNode'],...z['forward']!==undefined?{'forward':z['forward']}:{},...z['threshold']!==undefined?{'threshold':z['threshold']}:{},'guard':z['guard']??null,'weight':z['weight']??null,'named_operator':z['namedOperator']??null,'permission_index':z['permissionIndex']??null,'recommended_call':recommendedCallForForwardBinding({'permissionIndex':z['permissionIndex']??null,'namedOperator':z['namedOperator']??null,'hasGuard':!!z['guard']})??null})),'terminal_names':[...y['terminalNames']]['sort']()};}),i=[...a['nodes']['values']()]['filter'](x=>x['kind']==='object'&&x['state']==='fetched'&&x['objectType']==='Order')['map'](x=>({'order':x['id'],...orderCompletionInGraph(a,x['id'])})),j=[...a['gaps']];let k=[],l;if(c['analyze']??!![]){const x=buildViewport(a,d,'neutral'),y=c['analyzerKinds'],z=c['onlyAnalyzers']?new Set(c['onlyAnalyzers']):undefined;try{k=runAnalyzers(x,{...y?{'kinds':y}:{},...z?{'only':[...z]}:{}});}catch(A){j['push']('Analyzer\x20suite\x20failed\x20(topology\x20itself\x20is\x20intact):\x20'+(A?.['message']??String(A)));}try{const B=NODE_ANALYZERS['filter'](C=>(!y||y['includes'](C['kind']))&&(!z||z['has'](C['id'])));k['push'](...runNodeAnalyzers(x,B));}catch(C){j['push']('Node\x20analyzer\x20suite\x20failed\x20(topology\x20itself\x20is\x20intact):\x20'+(C?.['message']??String(C)));}if(c['interestRole']&&c['interestObserver'])try{const D=buildRoleInterest(a,c['interestObserver'],toCommercialRole(c['interestRole']),c['interestDrive']);k['push'](D['finding']),l=D['view'];}catch(E){j['push']('Role\x20interest\x20projection\x20failed\x20(topology\x20itself\x20is\x20intact):\x20'+(E?.['message']??String(E)));}}for(const F of a['truncations']){j['push']('truncated\x20'+F['schema']+'\x20at\x20'+F['nodeId']+':\x20observed\x20at\x20least\x20'+F['observed']+'\x20edge(s)\x20(limit\x20'+F['limit']+')');}if(a['budgetExhausted']['rpcs'])j['push']('RPC\x20batch\x20budget\x20exhausted\x20—\x20topology\x20is\x20partial\x20(raise\x20budget.max_rpcs).');if(a['budgetExhausted']['nodes'])j['push']('Node\x20budget\x20exhausted\x20—\x20topology\x20is\x20partial\x20(raise\x20budget.max_nodes).');if(a['budgetExhausted']['depth'])j['push']('Depth\x20budget\x20exhausted\x20—\x20topology\x20is\x20partial\x20(raise\x20budget.max_depth).');if(a['budgetExhausted']['eventPages'])j['push']('Event-page\x20budget\x20exhausted\x20—\x20event-derived\x20edges\x20are\x20partial.');const m=[...a['nodes']['values']()]['map'](G=>({'id':G['id'],'kind':G['kind'],...G['objectType']?{'object_type':G['objectType']}:{},...G['coinType']?{'coin_type':G['coinType']}:{},'state':G['state'],'depth':G['depth'],...G['error']?{'error':G['error']}:{},...c['includeRaw']&&G['raw']!==undefined?{'raw':G['raw']}:{}})),n=a['edges']['map'](G=>({'id':G['id'],'schema':G['schema'],'family':G['family'],'from':G['from'],'to':G['to'],'retention':G['retention'],'evidence':G['evidence'],...G['key']!==undefined?{'key':G['key']}:{},...G['truncated']!==undefined?{'truncated':G['truncated']}:{},...G['payload']!==undefined?{'payload':G['payload']}:{}})),o=tally(i['map'](G=>G['status'])),p=tally(a['edges']['map'](G=>G['family'])),q=Object['entries'](p)['map'](([G,H])=>G+'×'+H)['join'](',\x20');let r='Topology\x20around\x20'+d+'\x20on\x20'+a['network']+':\x20'+a['nodes']['size']+'\x20node(s),\x20'+a['edges']['length']+'\x20edge(s)'+(q?'\x20('+q+')':'')+(',\x20'+h['length']+'\x20workflow\x20graph(s),\x20'+i['length']+'\x20order(s)')+('\x20['+['completed','in_progress','unknown']['map'](G=>G+'='+(o[G]??0x0))['join'](',\x20')+']')+(',\x20'+k['length']+'\x20finding(s).');return j['length']>0x0&&(r+='\x20'+j['length']+'\x20data\x20gap/partial-data\x20marker(s)\x20—\x20see\x20data_gaps/truncations/budget_exhausted\x20before\x20drawing\x20conclusions.'),{'action':'onchain_topology','seed':d,'network':a['network'],'strategy':{'intents':c['strategy']?.['intents']??['full_map'],...c['strategy']?.['edges']['families']?{'families':c['strategy']['edges']['families']}:{},...c['strategy']?.['edges']['schemas']?{'schemas':c['strategy']['edges']['schemas']}:{},'table_edges':c['strategy']?.['edges']['tableEdges']??['machine.node'],...c['strategy']?.['edges']['familyDepths']?{'family_depths':c['strategy']['edges']['familyDepths']}:{},'budget':{...c['strategy']?.['budget']['maxDepth']!==undefined?{'max_depth':c['strategy']['budget']['maxDepth']}:{},...c['strategy']?.['budget']['maxNodes']!==undefined?{'max_nodes':c['strategy']['budget']['maxNodes']}:{},...c['strategy']?.['budget']['maxFanoutPerNode']!==undefined?{'max_fanout':c['strategy']['budget']['maxFanoutPerNode']}:{},...c['strategy']?.['budget']['maxRpcs']!==undefined?{'max_rpcs':c['strategy']['budget']['maxRpcs']}:{}},'trace':c['strategy']?.['trace']??['kernel\x20default:\x20all\x20families,\x20tables\x20[machine.node],\x20depth\x204']},'analyzers':[...listAnalyzers(),...NODE_ANALYZERS['map'](G=>G['id'])],'stats':{'nodes_total':a['nodes']['size'],'nodes_by_kind':tally([...a['nodes']['values']()]['map'](G=>G['kind'])),'nodes_by_object_type':tally([...a['nodes']['values']()]['map'](G=>G['objectType']??'')),'edges_total':a['edges']['length'],'edges_by_family':p,'edges_by_schema':tally(a['edges']['map'](G=>G['schema'])),'rpc':{'batches':a['rpcReport']['batches'],'by_channel':{'objects':a['rpcReport']['byChannel']['objects'],'keyed_fields':a['rpcReport']['byChannel']['keyedFields'],'tables':a['rpcReport']['byChannel']['tables'],'events':a['rpcReport']['byChannel']['events']},'dedup_hits':a['rpcReport']['dedupHits']}},'nodes':m,'edges':n,'workflows':h,'orders_completion':i,'findings':k,...l?{'role_interest':l}:{},'truncations':a['truncations']['map'](G=>({'node_id':G['nodeId'],'schema':G['schema'],'observed':G['observed'],'limit':G['limit']})),'budget_exhausted':{...a['budgetExhausted']['nodes']?{'nodes':!![]}:{},...a['budgetExhausted']['depth']?{'depth':!![]}:{},...a['budgetExhausted']['rpcs']?{'rpcs':!![]}:{},...a['budgetExhausted']['eventPages']?{'event_pages':!![]}:{}},'data_gaps':j,'summary':r};}export async function handleOnchainTopology(a,b){if(!a['focus'])throw new Error('\x27focus\x27\x20is\x20required\x20for\x20onchain_topology\x20—\x20an\x20on-chain\x20address\x20(0x...)\x20or\x20a\x20LocalMark\x20name.');const c=a['context_network']??await Config['Instance']()['network_get'](),d=await resolveAddress(a['focus'],'focus'),e=b??new SdkDataPlane(c,{'noCache':a['no_cache']});let f={};try{f=await resolveTopologyContext({...a['context_account']?{'account':a['context_account']['toLowerCase']()}:{},...a['industry']?{'industry':a['industry']}:{},...a['role']?{'role':a['role']}:{}});}catch{}const g=resolveExpansionStrategy({...a['intent']?{'intents':[a['intent']]}:{},...f['roleDefault']?{'roleDefault':f['roleDefault']}:{},...f['industryTemplate']?{'industryTemplate':f['industryTemplate']}:{},...f['personaPref']?{'personaPref':{...f['personaPref'],...f['personaPref']['table_edges']?{'tableEdges':f['personaPref']['table_edges']}:{},...f['personaPref']['family_depths']?{'familyDepths':f['personaPref']['family_depths']}:{},...f['personaPref']['max_depth']!==undefined?{'maxDepth':f['personaPref']['max_depth']}:{},...f['personaPref']['max_nodes']!==undefined?{'maxNodes':f['personaPref']['max_nodes']}:{},...f['personaPref']['max_fanout']!==undefined?{'maxFanout':f['personaPref']['max_fanout']}:{}}}:{},'explicitEdges':{...a['table_edges']?{'tableEdges':a['table_edges']}:{},...a['budget']?{'budget':{...a['budget']['max_depth']!==undefined?{'maxDepth':a['budget']['max_depth']}:{},...a['budget']['max_nodes']!==undefined?{'maxNodes':a['budget']['max_nodes']}:{},...a['budget']['max_fanout']!==undefined?{'maxFanoutPerNode':a['budget']['max_fanout']}:{},...a['budget']['max_rpcs']!==undefined?{'maxRpcs':a['budget']['max_rpcs']}:{}}}:{}}}),h=await expandTopology(e,{'network':c,'seed':d,'budget':g['budget'],'edges':g['edges']}),i=a['interest_role']??a['role'];let j=a['context_account']?.['toLowerCase']();if(!j&&d['startsWith']('0x00'))j=d;const k=f['drive'],l=i&&j?toCommercialRole(i):undefined,m=buildOnchainTopologyResult(h,d,{'analyze':a['analyze'],...a['analyzer_kinds']?{'analyzerKinds':a['analyzer_kinds']}:{},...a['only_analyzers']?{'onlyAnalyzers':a['only_analyzers']}:{},'includeRaw':a['include_raw'],'strategy':g,...l&&j?{'interestRole':l,...k?{'interestDrive':k}:{},'interestObserver':j}:{}});return i&&!j&&m['data_gaps']['push']('interest_role\x20given\x20but\x20no\x20observer\x20EOA\x20(pass\x20context_account,\x20or\x20seed\x20an\x20EOA\x20address)\x20—\x20role\x20interest\x20view\x20skipped'),m;}
@@ -1 +1 @@
1
- import{RELATIONSHIP_KIND_REGISTRY,interestHintsFor}from'./registry.js';function eq(c,d){return c['toLowerCase']()===d['toLowerCase']();}function isAddressLike(a){return/^0x[0-9a-fA-F]{4,}$/i['test'](a);}function edge(a,b,c,d,e,f=[]){return{'anchor':a,'counterparty':b,'kind':c,'power':e,'interest':d,'value_flows':f,'tension':RELATIONSHIP_KIND_REGISTRY[c]['tension']};}function pushEdge(a,b){const c=b['counterparty']['toLowerCase']()+'|'+b['kind'],d=a['get'](c);if(d){d['power']['objects']['push'](...b['power']['objects']),d['value_flows']['push'](...b['value_flows']);b['power']['perm_indices']['length']>0x0&&(d['power']['perm_indices']=[...new Set([...d['power']['perm_indices'],...b['power']['perm_indices']])]);return;}a['set'](c,b);}export function deriveRelationshipProfile(a){const b=a['anchor'],c=new Map(),d=[],f=a['service_owners']??{};for(const i of a['permissions']??[]){const j=eq(i['owner'],b),k=i['admins']['some'](m=>eq(m,b)),l=i['entities']['find'](m=>eq(m['address'],b));if(j||k)for(const m of i['entities']){if(eq(m['address'],b))continue;const n='employment';pushEdge(c,edge(b,m['address'],n,interestHintsFor(n,!![]),{'role_bits':(j?0x1:0x0)|(k?0x2:0x0),'perm_indices':[],'objects':(i['managed_objects']??[])['map'](p=>({'object_type':p['object_type'],'address':p['address'],'capacity':'merchant-side\x20authority'})),'carrier':'permission'}));}else{if(l)for(const o of[i['owner'],...i['admins']]){if(!o||eq(o,b))continue;const p='employment';pushEdge(c,edge(b,o,p,interestHintsFor(p,![]),{'role_bits':0x4,'perm_indices':l['perm_indices'],'objects':(i['managed_objects']??[])['map'](q=>({'object_type':q['object_type'],'address':q['address'],'capacity':'entity\x20(perm\x20indices:\x20'+(l['perm_indices']['join'](',\x20')||'none')+')'})),'carrier':'permission'}));}}}for(const q of a['machines']??[]){for(const r of q['forwards']??[]){const t=r['named_operator'];if(!t||eq(t,b))continue;const u='process_operation';isAddressLike(t)?pushEdge(c,edge(b,t,u,interestHintsFor(u,!![]),{'role_bits':0x0,'perm_indices':[],'objects':[{'object_type':'Machine','address':q['address'],'capacity':r['node']+'\x20→\x20'+r['next_node']+'\x20('+r['forward_name']+')\x20named\x20operator'}],'carrier':'machine_forward'})):d['push']('Machine\x20'+q['address']+'\x20forward\x20\x27'+r['forward_name']+'\x27\x20('+r['node']+'\x20→\x20'+r['next_node']+')\x20has\x20named\x20operator\x20\x27'+t+'\x27\x20—\x20named\x20operators\x20resolve\x20per-order\x20via\x20the\x20Progress\x20namedOperator\x20table,\x20so\x20no\x20static\x20edge\x20is\x20derived.');}}for(const v of a['orders']??[]){const w=eq(v['owner'],b),x=v['agents']['some'](A=>eq(A,b)),y=v['service_owner']??f[v['service']],z='transaction';if((w||x)&&y){const A=[];v['amount']&&v['amount']!=='0'&&A['push']({'from':w?b:v['owner'],'to':y,'carrier_object':v['address'],'carrier_type':v['allocation']?'Order\x20→\x20Allocation':'Order\x20(escrow)','amount':v['amount'],'trigger':'workflow\x20reaches\x20a\x20completion\x20terminal\x20(guard-gated)'});const B=edge(b,y,z,interestHintsFor(z,!![]),{'role_bits':w?0x1:0x2,'perm_indices':[],'objects':[{'object_type':'Order','address':v['address'],'capacity':w?'buyer\x20(owner)':'buyer\x27s\x20agent'}],'carrier':'order'},A);v['dispute_arbitrations']?.['length']&&B['power']['objects']['push']({'object_type':'Arbitration','address':v['dispute_arbitrations']['join'](',\x20'),'capacity':'bound\x20dispute\x20paths'}),pushEdge(c,B);}else y&&eq(y,b)&&pushEdge(c,edge(b,v['owner'],z,interestHintsFor(z,![]),{'role_bits':0x4,'perm_indices':[],'objects':[{'object_type':'Order','address':v['address'],'capacity':'merchant\x20side\x20(service)'}],'carrier':'order'},v['amount']&&v['amount']!=='0'?[{'from':v['owner'],'to':b,'carrier_object':v['address'],'carrier_type':v['allocation']?'Order\x20→\x20Allocation':'Order\x20(escrow)','amount':v['amount'],'trigger':'workflow\x20reaches\x20a\x20completion\x20terminal\x20(guard-gated)'}]:[]));if(w)for(const C of v['agents']){if(eq(C,b))continue;const D='agency';pushEdge(c,edge(b,C,D,interestHintsFor(D,!![]),{'role_bits':0x1,'perm_indices':[],'objects':[{'object_type':'Order','address':v['address'],'capacity':'principal'}],'carrier':'order'}));}else{if(x){const E='agency';pushEdge(c,edge(b,v['owner'],E,interestHintsFor(E,![]),{'role_bits':0x2,'perm_indices':[],'objects':[{'object_type':'Order','address':v['address'],'capacity':'agent'}],'carrier':'order'}));}}}for(const F of a['demands']??[]){const G=eq(F['owner'],b);for(const H of F['presenters']??[]){if(eq(H['address'],b)&&G)continue;if(G&&!eq(H['address'],b)){const I='supply',J=edge(b,H['address'],I,interestHintsFor(I,!![]),{'role_bits':0x1,'perm_indices':[],'objects':[{'object_type':'Demand','address':F['address'],'capacity':'presenter\x20(service\x20'+(H['service']??'?')+',\x20score\x20'+(H['acceptance_score']??'n/a')+')'}],'carrier':'demand_presenter'});pushEdge(c,J);}else{if(!G&&eq(H['address'],b)){const K='supply';pushEdge(c,edge(b,F['owner'],K,interestHintsFor(K,![]),{'role_bits':0x4,'perm_indices':[],'objects':[{'object_type':'Demand','address':F['address'],'capacity':'I\x20presented\x20service\x20'+(H['service']??'?')+'\x20(score\x20'+(H['acceptance_score']??'n/a')+')'}],'carrier':'demand_presenter'}));}}}}for(const L of a['allocations']??[]){const M=!!L['owner']&&eq(L['owner'],b),N=(L['sharing']??[])['some'](O=>typeof O['who']==='object'&&'Entity'in O['who']&&eq(O['who']['Entity'],b));if(M)for(const O of L['sharing']??[]){if(typeof O['who']!=='object'||!('Entity'in O['who']))continue;const P=O['who']['Entity'];if(!P||eq(P,b))continue;const Q='value_distribution';pushEdge(c,edge(b,P,Q,interestHintsFor(Q,!![]),{'role_bits':0x1,'perm_indices':[],'objects':[{'object_type':'Allocation','address':L['address'],'capacity':'payer\x20/\x20allocation\x20owner'}],'carrier':'allocation_sharing'},[{'from':b,'to':P,'carrier_object':L['address'],'carrier_type':'Allocation\x20Sharing\x20('+O['mode']+(O['sharing']?'\x20'+O['sharing']:'')+')','trigger':O['guard']?'guard\x20'+O['guard']+'\x20passes':'allocator\x20guard\x20passes'}]));}else{if(N&&L['owner']&&!eq(L['owner'],b)){const R='value_distribution';pushEdge(c,edge(b,L['owner'],R,interestHintsFor(R,![]),{'role_bits':0x4,'perm_indices':[],'objects':[{'object_type':'Allocation','address':L['address'],'capacity':'declared\x20recipient'}],'carrier':'allocation_sharing'},[{'from':L['owner'],'to':b,'carrier_object':L['address'],'carrier_type':'Allocation\x20Sharing','trigger':'allocator\x20guard\x20passes'}]));}}for(const S of L['sharing']??[]){if(typeof S['who']==='object'&&'Signer'in S['who'])d['push']('Allocation\x20'+L['address']+'\x20has\x20a\x20Signer\x20recipient\x20('+S['mode']+')\x20—\x20value\x20flows\x20to\x20the\x20account\x20that\x20executes\x20the\x20guard-gated\x20alloc\x20call,\x20not\x20to\x20a\x20fixed\x20counterparty.');else typeof S['who']==='object'&&'GuardIdentifier'in S['who']&&d['push']('Allocation\x20'+L['address']+'\x20has\x20a\x20GuardIdentifier\x20recipient\x20('+S['mode']+')\x20—\x20the\x20recipient\x20address\x20is\x20resolved\x20from\x20a\x20guard\x20submission\x20at\x20alloc\x20time,\x20not\x20statically.');}}for(const T of a['arbitrations']??[]){for(const U of T['voters']??[]){if(eq(U['address'],b))continue;if(T['anchor_side']!=='buyer'){const V='arbitration_delegation';pushEdge(c,edge(b,U['address'],V,interestHintsFor(V,!![]),{'role_bits':0x1,'perm_indices':[],'objects':[{'object_type':'Arbitration','address':T['address'],'capacity':'bound\x20arbitration\x20(voter\x20weight\x20'+(U['weight']??'n/a')+')'}],'carrier':'arbitration_binding'}));}if(T['object_kind']==='case'){const W='dispute_resolution',X=[{'object_type':'Arb','address':T['address'],'capacity':'dispute\x20case\x20(vote\x20weight\x20'+(U['weight']??'n/a')+')'}];T['order']&&X['push']({'object_type':'Order','address':T['order'],'capacity':'disputed\x20order'}),pushEdge(c,edge(b,U['address'],W,interestHintsFor(W,![]),{'role_bits':0x4,'perm_indices':[],'objects':X,'carrier':'arbitration_binding'}));}}}for(const Y of a['contacts']??[]){const Z=eq(Y['owner'],b);for(const a0 of Y['ims']){if(eq(a0,b))continue;const a1='contact_membership';pushEdge(c,edge(b,a0,a1,interestHintsFor(a1,Z),{'role_bits':Z?0x1:0x4,'perm_indices':[],'objects':[{'object_type':'Contact','address':Y['address'],'capacity':Z?'contact\x20owner':'IM\x20member'}],'carrier':'contact_im'}));}}const g=[...c['values']()],h={};for(const a2 of g){const a3=a2['counterparty']['toLowerCase']();(h[a3]??=[])['push'](a2['kind']);}for(const a4 of new Set(g['map'](a5=>a5['kind']))){const a5=RELATIONSHIP_KIND_REGISTRY[a4];a5?.['tension']&&d['push'](a4+':\x20anchor('+a5['anchor_role']+')\x20wants\x20\x22'+a5['tension']['anchor_goal']+'\x22;\x20counterparty('+a5['counterparty_role']+')\x20wants\x20\x22'+a5['tension']['counterparty_goal']+'\x22.\x20Divergence:\x20'+a5['tension']['divergence']);}return{'anchor':b,'edges':g,'by_counterparty':h,'notes':d};}
1
+ import{RELATIONSHIP_KIND_REGISTRY,interestHintsFor}from'./registry.js';import{classifyRecipient}from'../knowledge/recipient-constraint.js';function eq(c,d){return c['toLowerCase']()===d['toLowerCase']();}function isAddressLike(a){return/^0x[0-9a-fA-F]{4,}$/i['test'](a);}function edge(a,b,c,d,e,f=[]){return{'anchor':a,'counterparty':b,'kind':c,'power':e,'interest':d,'value_flows':f,'tension':RELATIONSHIP_KIND_REGISTRY[c]['tension']};}function pushEdge(a,b){const c=b['counterparty']['toLowerCase']()+'|'+b['kind'],d=a['get'](c);if(d){d['power']['objects']['push'](...b['power']['objects']),d['value_flows']['push'](...b['value_flows']);b['power']['perm_indices']['length']>0x0&&(d['power']['perm_indices']=[...new Set([...d['power']['perm_indices'],...b['power']['perm_indices']])]);return;}a['set'](c,b);}export function deriveRelationshipProfile(a){const b=a['anchor'],c=new Map(),d=[],f=a['service_owners']??{};for(const i of a['permissions']??[]){const j=eq(i['owner'],b),k=i['admins']['some'](m=>eq(m,b)),l=i['entities']['find'](m=>eq(m['address'],b));if(j||k)for(const m of i['entities']){if(eq(m['address'],b))continue;const n='employment';pushEdge(c,edge(b,m['address'],n,interestHintsFor(n,!![]),{'role_bits':(j?0x1:0x0)|(k?0x2:0x0),'perm_indices':[],'objects':(i['managed_objects']??[])['map'](p=>({'object_type':p['object_type'],'address':p['address'],'capacity':'merchant-side\x20authority'})),'carrier':'permission'}));}else{if(l)for(const o of[i['owner'],...i['admins']]){if(!o||eq(o,b))continue;const p='employment';pushEdge(c,edge(b,o,p,interestHintsFor(p,![]),{'role_bits':0x4,'perm_indices':l['perm_indices'],'objects':(i['managed_objects']??[])['map'](q=>({'object_type':q['object_type'],'address':q['address'],'capacity':'entity\x20(perm\x20indices:\x20'+(l['perm_indices']['join'](',\x20')||'none')+')'})),'carrier':'permission'}));}}}for(const q of a['machines']??[]){for(const r of q['forwards']??[]){const t=r['named_operator'];if(!t||eq(t,b))continue;const u='process_operation';isAddressLike(t)?pushEdge(c,edge(b,t,u,interestHintsFor(u,!![]),{'role_bits':0x0,'perm_indices':[],'objects':[{'object_type':'Machine','address':q['address'],'capacity':r['node']+'\x20→\x20'+r['next_node']+'\x20('+r['forward_name']+')\x20named\x20operator'}],'carrier':'machine_forward'})):d['push']('Machine\x20'+q['address']+'\x20forward\x20\x27'+r['forward_name']+'\x27\x20('+r['node']+'\x20→\x20'+r['next_node']+')\x20has\x20named\x20operator\x20\x27'+t+'\x27\x20—\x20named\x20operators\x20resolve\x20per-order\x20via\x20the\x20Progress\x20namedOperator\x20table,\x20so\x20no\x20static\x20edge\x20is\x20derived.');}}for(const v of a['orders']??[]){const w=eq(v['owner'],b),x=v['agents']['some'](A=>eq(A,b)),y=v['service_owner']??f[v['service']],z='transaction';if((w||x)&&y){const A=[];v['amount']&&v['amount']!=='0'&&A['push']({'from':w?b:v['owner'],'to':y,'carrier_object':v['address'],'carrier_type':v['allocation']?'Order\x20→\x20Allocation':'Order\x20(escrow)','amount':v['amount'],'trigger':'workflow\x20reaches\x20a\x20completion\x20terminal\x20(guard-gated)'});const B=edge(b,y,z,interestHintsFor(z,!![]),{'role_bits':w?0x1:0x2,'perm_indices':[],'objects':[{'object_type':'Order','address':v['address'],'capacity':w?'buyer\x20(owner)':'buyer\x27s\x20agent'}],'carrier':'order'},A);v['dispute_arbitrations']?.['length']&&B['power']['objects']['push']({'object_type':'Arbitration','address':v['dispute_arbitrations']['join'](',\x20'),'capacity':'bound\x20dispute\x20paths'}),pushEdge(c,B);}else y&&eq(y,b)&&pushEdge(c,edge(b,v['owner'],z,interestHintsFor(z,![]),{'role_bits':0x4,'perm_indices':[],'objects':[{'object_type':'Order','address':v['address'],'capacity':'merchant\x20side\x20(service)'}],'carrier':'order'},v['amount']&&v['amount']!=='0'?[{'from':v['owner'],'to':b,'carrier_object':v['address'],'carrier_type':v['allocation']?'Order\x20→\x20Allocation':'Order\x20(escrow)','amount':v['amount'],'trigger':'workflow\x20reaches\x20a\x20completion\x20terminal\x20(guard-gated)'}]:[]));if(w)for(const C of v['agents']){if(eq(C,b))continue;const D='agency';pushEdge(c,edge(b,C,D,interestHintsFor(D,!![]),{'role_bits':0x1,'perm_indices':[],'objects':[{'object_type':'Order','address':v['address'],'capacity':'principal'}],'carrier':'order'}));}else{if(x){const E='agency';pushEdge(c,edge(b,v['owner'],E,interestHintsFor(E,![]),{'role_bits':0x2,'perm_indices':[],'objects':[{'object_type':'Order','address':v['address'],'capacity':'agent'}],'carrier':'order'}));}}}for(const F of a['demands']??[]){const G=eq(F['owner'],b);for(const H of F['presenters']??[]){if(eq(H['address'],b)&&G)continue;if(G&&!eq(H['address'],b)){const I='supply',J=edge(b,H['address'],I,interestHintsFor(I,!![]),{'role_bits':0x1,'perm_indices':[],'objects':[{'object_type':'Demand','address':F['address'],'capacity':'presenter\x20(service\x20'+(H['service']??'?')+',\x20score\x20'+(H['acceptance_score']??'n/a')+')'}],'carrier':'demand_presenter'});pushEdge(c,J);}else{if(!G&&eq(H['address'],b)){const K='supply';pushEdge(c,edge(b,F['owner'],K,interestHintsFor(K,![]),{'role_bits':0x4,'perm_indices':[],'objects':[{'object_type':'Demand','address':F['address'],'capacity':'I\x20presented\x20service\x20'+(H['service']??'?')+'\x20(score\x20'+(H['acceptance_score']??'n/a')+')'}],'carrier':'demand_presenter'}));}}}}for(const L of a['allocations']??[]){const M=!!L['owner']&&eq(L['owner'],b),N=(L['sharing']??[])['some'](O=>typeof O['who']==='object'&&'Entity'in O['who']&&eq(O['who']['Entity'],b));if(M)for(const O of L['sharing']??[]){if(typeof O['who']!=='object'||!('Entity'in O['who']))continue;const P=O['who']['Entity'];if(!P||eq(P,b))continue;const Q='value_distribution';pushEdge(c,edge(b,P,Q,interestHintsFor(Q,!![]),{'role_bits':0x1,'perm_indices':[],'objects':[{'object_type':'Allocation','address':L['address'],'capacity':'payer\x20/\x20allocation\x20owner'}],'carrier':'allocation_sharing'},[{'from':b,'to':P,'carrier_object':L['address'],'carrier_type':'Allocation\x20Sharing\x20('+O['mode']+(O['sharing']?'\x20'+O['sharing']:'')+')','trigger':O['guard']?'guard\x20'+O['guard']+'\x20passes':'allocator\x20guard\x20passes'}]));}else{if(N&&L['owner']&&!eq(L['owner'],b)){const R='value_distribution';pushEdge(c,edge(b,L['owner'],R,interestHintsFor(R,![]),{'role_bits':0x4,'perm_indices':[],'objects':[{'object_type':'Allocation','address':L['address'],'capacity':'declared\x20recipient'}],'carrier':'allocation_sharing'},[{'from':L['owner'],'to':b,'carrier_object':L['address'],'carrier_type':'Allocation\x20Sharing','trigger':'allocator\x20guard\x20passes'}]));}}for(const S of L['sharing']??[]){const T=classifyRecipient(S['who']);if(T?.['kind']==='signer')d['push']('Allocation\x20'+L['address']+'\x20has\x20a\x20Signer\x20recipient\x20('+S['mode']+')\x20—\x20value\x20flows\x20to\x20the\x20caller\x20who\x20executes\x20the\x20guard-gated\x20alloc.\x20If\x20the\x20guard\x20does\x20not\x20constrain\x20the\x20caller\x20identity\x20this\x20is\x20RC-FIND-01\x20(critical\x20theft).');else T?.['kind']==='submission'&&d['push']('Allocation\x20'+L['address']+'\x20has\x20a\x20submission\x20recipient\x20('+S['mode']+')\x20—\x20value\x20flows\x20to\x20the\x20submitted\x20constrained\x20object\x20and\x20is\x20receivable\x20only\x20by\x20that\x20object\x27s\x20owner\x20(object\x20receipt\x20=\x20owner\x20receipt).\x20See\x20RC-FIND-03\x20cross-allocation\x20residual\x20in\x20the\x20recipient\x20constraint\x20audit.');}}for(const U of a['arbitrations']??[]){for(const V of U['voters']??[]){if(eq(V['address'],b))continue;if(U['anchor_side']!=='buyer'){const W='arbitration_delegation';pushEdge(c,edge(b,V['address'],W,interestHintsFor(W,!![]),{'role_bits':0x1,'perm_indices':[],'objects':[{'object_type':'Arbitration','address':U['address'],'capacity':'bound\x20arbitration\x20(voter\x20weight\x20'+(V['weight']??'n/a')+')'}],'carrier':'arbitration_binding'}));}if(U['object_kind']==='case'){const X='dispute_resolution',Y=[{'object_type':'Arb','address':U['address'],'capacity':'dispute\x20case\x20(vote\x20weight\x20'+(V['weight']??'n/a')+')'}];U['order']&&Y['push']({'object_type':'Order','address':U['order'],'capacity':'disputed\x20order'}),pushEdge(c,edge(b,V['address'],X,interestHintsFor(X,![]),{'role_bits':0x4,'perm_indices':[],'objects':Y,'carrier':'arbitration_binding'}));}}}for(const Z of a['contacts']??[]){const a0=eq(Z['owner'],b);for(const a1 of Z['ims']){if(eq(a1,b))continue;const a2='contact_membership';pushEdge(c,edge(b,a1,a2,interestHintsFor(a2,a0),{'role_bits':a0?0x1:0x4,'perm_indices':[],'objects':[{'object_type':'Contact','address':Z['address'],'capacity':a0?'contact\x20owner':'IM\x20member'}],'carrier':'contact_im'}));}}const g=[...c['values']()],h={};for(const a3 of g){const a4=a3['counterparty']['toLowerCase']();(h[a4]??=[])['push'](a3['kind']);}for(const a5 of new Set(g['map'](a6=>a6['kind']))){const a6=RELATIONSHIP_KIND_REGISTRY[a5];a6?.['tension']&&d['push'](a5+':\x20anchor('+a6['anchor_role']+')\x20wants\x20\x22'+a6['tension']['anchor_goal']+'\x22;\x20counterparty('+a6['counterparty_role']+')\x20wants\x20\x22'+a6['tension']['counterparty_goal']+'\x22.\x20Divergence:\x20'+a6['tension']['divergence']);}return{'anchor':b,'edges':g,'by_counterparty':h,'notes':d};}
@@ -1 +1 @@
1
- import{CONFIRMATION_RULES,resolveOverrideId}from'../knowledge/safety-rules.js';import{isEnabled as a283a}from'../config/index.js';import{isPlanPreapproved}from'../goal/plan-approval.js';export function isConfirmGateEnabled(){return a283a('confirm_gate');}const internalErrorCounts={};function logInternalError(a,b){const c=a;internalErrorCounts[c]=(internalErrorCounts[c]??0x0)+0x1;const d=internalErrorCounts[c];console['warn']('[ConfirmGate]\x20internal_error\x20context=\x22'+a+'\x22\x20count='+d+'\x20error='+(b instanceof Error?b['message']:String(b)));}export function getFailMode(a){switch(a){case'irreversible':case'publish':case'amount':return'closed';case'standard':case'none':default:return'open';}}function buildInternalErrorResult(a,b,c){const d=b instanceof Error?b['message']:b!==undefined?String(b):undefined;return{'pass':![],'level':'irreversible','preview':{'level':'irreversible','operation':a,'irreversible':!![],'warnings':[...c?['ConfirmGate\x20rule\x20\x27'+c+'\x27\x20matched\x20but\x20its\x20preview\x20could\x20not\x20be\x20generated.']:['An\x20error\x20occurred\x20while\x20matching\x20confirmation\x20rules.'],...d!==undefined?['Reason:\x20'+d]:[],'The\x20operation\x20was\x20NOT\x20executed.\x20Review\x20the\x20parameters\x20for\x20malformed\x20values\x20(e.g.\x20decimal\x20amounts\x20instead\x20of\x20smallest-unit\x20integers)\x20before\x20confirming.']},'rule_id':'internal_error'};}export function confirmGate(a,b,c,d,f,g){if(!isConfirmGateEnabled())return{'pass':!![]};if(c?.['confirmed']===!![])return{'pass':!![]};let h,i=null;try{h=CONFIRMATION_RULES['find'](n=>{try{return n['when'](a,b,c);}catch(o){logInternalError('rule_when:'+n['id'],o);if(getFailMode(n['level'])==='closed')throw o;return![];}});}catch(n){i=n;}if(i)return logInternalError('rule_search',i),buildInternalErrorResult(a,i);if(!h)return{'pass':!![]};if(getFailMode(h['level'])==='open'&&isPlanPreapproved(c))return{'pass':!![]};const j=resolveOverrideId(h['id'],a),k=j?f?.[j]:undefined;if(k==='auto')return{'pass':!![]};const l=c?.['confirm_mode']==='quiet'||c?.['confirm_mode']==='streamlined'?c['confirm_mode']:'full';if(l!=='full'&&k!=='block'&&getFailMode(h['level'])==='open')return{'pass':!![]};if(k!=='block'&&g?.['intent_bypass']!==![]&&h['bypass_on_explicit_intent']&&d&&d['length']>0x0){const o=d['map'](q=>q['toLowerCase']()),p=h['bypass_on_explicit_intent']['some'](q=>o['some'](r=>r['includes'](q['toLowerCase']())));if(p)return{'pass':!![]};}let m;try{m=h['preview'](a,b,c);}catch(q){logInternalError('rule_preview:'+h['id'],q);if(getFailMode(h['level'])==='closed')return buildInternalErrorResult(a,q,h['id']);return{'pass':!![]};}return{'pass':![],'level':h['level'],'preview':m,'rule_id':h['id']};}export function isExplicitlyConfirmed(a){return a?.['confirmed']===!![];}
1
+ import{CONFIRMATION_RULES,resolveOverrideId}from'../knowledge/safety-rules.js';import{isEnabled as a285a}from'../config/index.js';import{isPlanPreapproved}from'../goal/plan-approval.js';export function isConfirmGateEnabled(){return a285a('confirm_gate');}const internalErrorCounts={};function logInternalError(a,b){const c=a;internalErrorCounts[c]=(internalErrorCounts[c]??0x0)+0x1;const d=internalErrorCounts[c];console['warn']('[ConfirmGate]\x20internal_error\x20context=\x22'+a+'\x22\x20count='+d+'\x20error='+(b instanceof Error?b['message']:String(b)));}export function getFailMode(a){switch(a){case'irreversible':case'publish':case'amount':return'closed';case'standard':case'none':default:return'open';}}function buildInternalErrorResult(a,b,c){const d=b instanceof Error?b['message']:b!==undefined?String(b):undefined;return{'pass':![],'level':'irreversible','preview':{'level':'irreversible','operation':a,'irreversible':!![],'warnings':[...c?['ConfirmGate\x20rule\x20\x27'+c+'\x27\x20matched\x20but\x20its\x20preview\x20could\x20not\x20be\x20generated.']:['An\x20error\x20occurred\x20while\x20matching\x20confirmation\x20rules.'],...d!==undefined?['Reason:\x20'+d]:[],'The\x20operation\x20was\x20NOT\x20executed.\x20Review\x20the\x20parameters\x20for\x20malformed\x20values\x20(e.g.\x20decimal\x20amounts\x20instead\x20of\x20smallest-unit\x20integers)\x20before\x20confirming.']},'rule_id':'internal_error'};}export function confirmGate(a,b,c,d,f,g){if(!isConfirmGateEnabled())return{'pass':!![]};if(c?.['confirmed']===!![])return{'pass':!![]};let h,i=null;try{h=CONFIRMATION_RULES['find'](n=>{try{return n['when'](a,b,c);}catch(o){logInternalError('rule_when:'+n['id'],o);if(getFailMode(n['level'])==='closed')throw o;return![];}});}catch(n){i=n;}if(i)return logInternalError('rule_search',i),buildInternalErrorResult(a,i);if(!h)return{'pass':!![]};if(getFailMode(h['level'])==='open'&&isPlanPreapproved(c))return{'pass':!![]};const j=resolveOverrideId(h['id'],a),k=j?f?.[j]:undefined;if(k==='auto')return{'pass':!![]};const l=c?.['confirm_mode']==='quiet'||c?.['confirm_mode']==='streamlined'?c['confirm_mode']:'full';if(l!=='full'&&k!=='block'&&getFailMode(h['level'])==='open')return{'pass':!![]};if(k!=='block'&&g?.['intent_bypass']!==![]&&h['bypass_on_explicit_intent']&&d&&d['length']>0x0){const o=d['map'](q=>q['toLowerCase']()),p=h['bypass_on_explicit_intent']['some'](q=>o['some'](r=>r['includes'](q['toLowerCase']())));if(p)return{'pass':!![]};}let m;try{m=h['preview'](a,b,c);}catch(q){logInternalError('rule_preview:'+h['id'],q);if(getFailMode(h['level'])==='closed')return buildInternalErrorResult(a,q,h['id']);return{'pass':!![]};}return{'pass':![],'level':h['level'],'preview':m,'rule_id':h['id']};}export function isExplicitlyConfirmed(a){return a?.['confirmed']===!![];}
@@ -1 +1 @@
1
- import{z}from'zod';import{CoinParamSchema,CallEnvSchema,SubmissionCallSchema,TypeNamedObjectSchema}from'./base.js';import{AllocatorsSchema,PaymentInfoSchema}from'../query/index.js';import{NameOrAddressSchema,ReceivedBalanceOrRecentlySchema,RECEIVE_FORMAT_BLOCK_BALANCE}from'../common/index.js';export const CallAllocation_CreateSchema=z['object']({'object':TypeNamedObjectSchema['describe']('REQUIRED\x20for\x20creating\x20new\x20object.\x20Provide\x20{name:\x20\x27yourName\x27,\x20type:\x20\x27Allocation\x27}\x20to\x20create\x20and\x20name\x20the\x20new\x20Allocation\x20object.'),'allocators':AllocatorsSchema,'coin':CoinParamSchema,'payment_info':PaymentInfoSchema})['strict']()['describe']('Create\x20a\x20new\x20Allocation\x20object.\x20Set\x20\x27object\x27\x20field\x20with\x20{name:\x20\x27yourName\x27,\x20type:\x20\x27Allocation\x27}\x20to\x20name\x20the\x20new\x20object.\x20Notice:\x27name\x27\x20goes\x20INSIDE\x20\x27object\x27,\x20NOT\x20at\x20the\x20data\x20root\x20level.');export const CallAllocation_OperateSchema=z['object']({'object':NameOrAddressSchema['describe']('REQUIRED\x20for\x20operating\x20existing\x20object.\x20Provide\x20the\x20Allocation\x20object\x20ID\x20or\x20existing\x20name\x20to\x20reference\x20the\x20target\x20object.'),'received_coins':ReceivedBalanceOrRecentlySchema['optional']()['describe']('Unwrap\x20the\x20CoinWrapper\x20objects\x20received\x20by\x20the\x20Allocation\x20object\x20and\x20deposit\x20them\x20into\x20the\x20pending\x20allocation\x20balance.'+RECEIVE_FORMAT_BLOCK_BALANCE),'alloc_by_guard':NameOrAddressSchema['optional']()['describe']('Verify\x20the\x20specified\x20Guard\x20and\x20execute\x20the\x20corresponding\x20fund\x20allocation.\x20'+'POST-ALLOCATION\x20CLAIM\x20(required\x20step):\x20each\x20recipient\x20receives\x20a\x20CoinWrapper\x20object\x20(NOT\x20spendable\x20coins).\x20'+'Recipient\x20address\x20resolution\x20(allocation.move):\x20Entity\x20recipients\x20receive\x20it\x20at\x20the\x20Entity\x27s\x20address;\x20'+'Signer\x20recipients\x20receive\x20it\x20at\x20the\x20transaction\x20sender\x27s\x20address;\x20'+'GuardIdentifier\x20n\x20recipients\x20receive\x20it\x20at\x20the\x20ADDRESS\x20SUBMITTED\x20for\x20identifier\x20n\x20in\x20this\x20call\x27s\x20submission\x20'+'(resolved\x20via\x20passport::submission_get)\x20—\x20conventionally\x20the\x20Order\x20OBJECT\x20address\x20(escrow\x20pattern),\x20'+'in\x20which\x20case\x20the\x20order\x20owner\x20claims\x20it\x20via\x20operation_type=\x27order\x27\x20{object:\x27<order_id>\x27,\x20receive:\x27recently\x27}.\x20'+'Claim\x20paths\x20by\x20holder:\x20EOA\x20wallet\x20→\x20operation_type=\x27payment\x27\x20RECEIVE\x20mode\x20{object:\x27<coinwrapper_id>\x27,\x20receive:true}\x20(type_parameter\x20optional,\x20auto-derived\x20from\x20the\x20CoinWrapper\x20type);\x20'+'Order\x20object\x20→\x20order\x20receive;\x20Treasury\x20object\x20→\x20treasury\x20receive.\x20'+'Find\x20pending\x20CoinWrappers\x20via\x20query_toolkit\x20query_type=\x27onchain_received\x27.\x20'+'Verify\x20the\x20distribution\x20via\x20the\x20immutable\x20Payment\x20object\x20created\x20by\x20this\x20call\x20(allocation.payment\x20array).')})['strict']()['describe']('Operate\x20on\x20an\x20existing\x20Allocation\x20object.\x20Set\x20\x27object\x27\x20field\x20with\x20the\x20object\x20ID\x20or\x20existing\x20name\x20to\x20specify\x20the\x20target.');export const CallAllocation_DataSchema=z['union']([CallAllocation_CreateSchema,CallAllocation_OperateSchema])['describe']('On-chain\x20Allocation\x20operations.\x20USAGE:\x20(1)\x20CREATE\x20NEW:\x20Use\x20CallAllocation_CreateSchema\x20by\x20setting\x20\x27object\x27\x20with\x20OBJECT\x20format\x20{name,\x20type_parameter,\x20...}.\x20(2)\x20OPERATE\x20EXISTING:\x20Use\x20CallAllocation_OperateSchema\x20by\x20setting\x20\x27object\x27\x20with\x20STRING\x20format\x20(object\x20ID\x20or\x20name).\x20The\x20\x27object\x27\x20field\x20is\x20CRITICAL\x20and\x20REQUIRED\x20in\x20both\x20cases.\x20');export const CallAllocation_InputSchema=z['object']({'data':CallAllocation_DataSchema,'env':CallEnvSchema['optional'](),'submission':SubmissionCallSchema['optional']()})['strict']();
1
+ import{z}from'zod';import{CoinParamSchema,CallEnvSchema,SubmissionCallSchema,TypeNamedObjectSchema}from'./base.js';import{AllocatorsSchema,PaymentInfoSchema}from'../query/index.js';import{NameOrAddressSchema,ReceivedBalanceOrRecentlySchema,RECEIVE_FORMAT_BLOCK_BALANCE}from'../common/index.js';export const CallAllocation_CreateSchema=z['object']({'object':TypeNamedObjectSchema['describe']('REQUIRED\x20for\x20creating\x20new\x20object.\x20Provide\x20{name:\x20\x27yourName\x27,\x20type:\x20\x27Allocation\x27}\x20to\x20create\x20and\x20name\x20the\x20new\x20Allocation\x20object.'),'allocators':AllocatorsSchema,'coin':CoinParamSchema,'payment_info':PaymentInfoSchema})['strict']()['describe']('Create\x20a\x20new\x20Allocation\x20object.\x20Set\x20\x27object\x27\x20field\x20with\x20{name:\x20\x27yourName\x27,\x20type:\x20\x27Allocation\x27}\x20to\x20name\x20the\x20new\x20object.\x20Notice:\x27name\x27\x20goes\x20INSIDE\x20\x27object\x27,\x20NOT\x20at\x20the\x20data\x20root\x20level.');export const CallAllocation_OperateSchema=z['object']({'object':NameOrAddressSchema['describe']('REQUIRED\x20for\x20operating\x20existing\x20object.\x20Provide\x20the\x20Allocation\x20object\x20ID\x20or\x20existing\x20name\x20to\x20reference\x20the\x20target\x20object.'),'received_coins':ReceivedBalanceOrRecentlySchema['optional']()['describe']('Unwrap\x20the\x20CoinWrapper\x20objects\x20received\x20by\x20the\x20Allocation\x20object\x20and\x20deposit\x20them\x20into\x20the\x20pending\x20allocation\x20balance.'+RECEIVE_FORMAT_BLOCK_BALANCE),'alloc_by_guard':NameOrAddressSchema['optional']()['describe']('Verify\x20the\x20specified\x20Guard\x20and\x20execute\x20the\x20corresponding\x20fund\x20distribution.\x20'+'GENERIC\x20SEMANTICS:\x20an\x20Allocation\x20distributes\x20whatever\x20balance\x20it\x20holds\x20—\x20order\x20funds,\x20payroll,\x20dividends,\x20bounties.\x20'+'It\x20defines\x20no\x20scenario-specific\x20rule:\x20eligibility\x20(including\x20issuer\x20identity\x20for\x20standalone\x20use,\x20e.g.\x20an\x20org\x20admin)\x20'+'and\x20differentiation\x20inputs\x20are\x20expressed\x20as\x20Guard\x20constraints,\x20all\x20public\x20and\x20auditable.\x20'+'RECIPIENT\x20RESOLUTION\x20(allocation.move\x20Recipient\x20enum):\x20'+'Entity\x20→\x20fixed\x20address;\x20Signer\x20→\x20transaction\x20sender;\x20GuardIdentifier\x20n\x20→\x20the\x20address\x20submitted\x20for\x20identifier\x20n\x20(passport::submission_get).\x20'+'ORDER\x20PATTERN\x20(canonical):\x20the\x20Guard\x20table\x20needs\x20ONE\x20submitted\x20Order,\x20constrained\x20by\x20the\x20Guard\x20(e.g.\x20order.service\x20==\x20host\x20service,\x20'+'progress\x20at\x20a\x20qualifying\x20node,\x20signer\x20==\x20order.owner);\x20that\x20order\x20submission\x20IS\x20the\x20recipient\x20slot.\x20Whoever\x20calls\x20alloc,\x20funds\x20necessarily\x20'+'land\x20at\x20an\x20Order\x20OBJECT;\x20delivered\x20CoinWrappers\x20are\x20owned\x20by\x20the\x20order\x20and\x20can\x20be\x20extracted\x20only\x20via\x20order::owner_receive\x20(&mut\x20Order\x20input,\x20'+'Sui\x20ownership)\x20—\x20the\x20coins\x20then\x20go\x20to\x20the\x20order\x27s\x20current\x20owner.\x20Object\x20receipt\x20=\x20owner\x20receipt.\x20'+'POST-DISTRIBUTION\x20CLAIM\x20(required\x20step):\x20each\x20recipient\x20gets\x20a\x20CoinWrapper\x20(not\x20spendable\x20coins)\x20—\x20EOA\x20wallet\x20→\x20operation_type=\x27payment\x27\x20RECEIVE\x20mode\x20'+'{object:\x27<coinwrapper_id>\x27,\x20receive:true};\x20Order\x20object\x20→\x20operation_type=\x27order\x27\x20{object:\x27<order_id>\x27,\x20receive:\x27recently\x27};\x20Treasury\x20object\x20→\x20treasury\x20receive.\x20'+'Find\x20pending\x20CoinWrappers\x20via\x20query_toolkit\x20query_type=\x27onchain_received\x27;\x20verify\x20via\x20the\x20immutable\x20Payment\x20object\x20(allocation.payment\x20array).\x20'+'RISK:\x20safety\x20follows\x20from\x20the\x20sufficiency\x20of\x20the\x20Guard\x20constraints,\x20not\x20the\x20recipient\x20form\x20—\x20analyze\x20the\x20recipient\x20constraint\x20audit\x20before\x20publish;\x20'+'structural\x20residuals\x20(unavoidable):\x20permissionless\x20alloc\x20allows\x20forced\x20settlement\x20timing,\x20the\x20submitted\x20order\x20is\x20not\x20bound\x20to\x20the\x20settled\x20allocation,\x20'+'and\x20allocators/guards\x20are\x20immutable\x20after\x20publish.')})['strict']()['describe']('Operate\x20on\x20an\x20existing\x20Allocation\x20object.\x20Set\x20\x27object\x27\x20field\x20with\x20the\x20object\x20ID\x20or\x20existing\x20name\x20to\x20specify\x20the\x20target.');export const CallAllocation_DataSchema=z['union']([CallAllocation_CreateSchema,CallAllocation_OperateSchema])['describe']('On-chain\x20Allocation\x20operations.\x20USAGE:\x20(1)\x20CREATE\x20NEW:\x20Use\x20CallAllocation_CreateSchema\x20by\x20setting\x20\x27object\x27\x20with\x20OBJECT\x20format\x20{name,\x20type_parameter,\x20...}.\x20(2)\x20OPERATE\x20EXISTING:\x20Use\x20CallAllocation_OperateSchema\x20by\x20setting\x20\x27object\x27\x20with\x20STRING\x20format\x20(object\x20ID\x20or\x20name).\x20The\x20\x27object\x27\x20field\x20is\x20CRITICAL\x20and\x20REQUIRED\x20in\x20both\x20cases.\x20');export const CallAllocation_InputSchema=z['object']({'data':CallAllocation_DataSchema,'env':CallEnvSchema['optional'](),'submission':SubmissionCallSchema['optional']()})['strict']();