@wowok/agent-mcp 3.2.6 → 3.2.7

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 (222) hide show
  1. package/dist/chain-semantics/field-capability.js +1 -1
  2. package/dist/chain-semantics/freeze-map.js +1 -1
  3. package/dist/chain-semantics/object-graph.js +1 -1
  4. package/dist/communication/wts-attestation.js +1 -1
  5. package/dist/composition/audit.js +1 -1
  6. package/dist/composition/compile.d.ts +3 -2
  7. package/dist/composition/compile.js +1 -1
  8. package/dist/composition/inflight.d.ts +17 -0
  9. package/dist/composition/inflight.js +1 -0
  10. package/dist/config/config-audit.spec.js +1 -1
  11. package/dist/customer/account-events.js +1 -1
  12. package/dist/customer/order-monitor.js +1 -1
  13. package/dist/evaluation/builtins/graph-service.spec.js +1 -1
  14. package/dist/evaluation/engine.js +1 -1
  15. package/dist/experience/realtime-feedback.js +1 -1
  16. package/dist/extensions/constraint-registry.d.ts +6 -1
  17. package/dist/extensions/constraint-registry.js +1 -1
  18. package/dist/extensions/index.d.ts +1 -1
  19. package/dist/extensions/index.js +1 -1
  20. package/dist/extensions/industry-pack.d.ts +5 -0
  21. package/dist/extensions/industry-pack.js +1 -1
  22. package/dist/extensions/mode-evaluator.d.ts +3 -2
  23. package/dist/extensions/mode-evaluator.js +1 -1
  24. package/dist/extensions/modes.js +1 -1
  25. package/dist/graph/onchain/analyze.js +1 -1
  26. package/dist/graph/onchain/analyze.spec.js +1 -1
  27. package/dist/graph/onchain/anti-cheat.d.ts +32 -2
  28. package/dist/graph/onchain/anti-cheat.js +1 -1
  29. package/dist/graph/onchain/anti-cheat.spec.js +1 -1
  30. package/dist/graph/onchain/expand.js +1 -1
  31. package/dist/graph/onchain/exposure.js +1 -1
  32. package/dist/graph/onchain/extract.js +1 -1
  33. package/dist/graph/onchain/graph-policy.spec.js +1 -1
  34. package/dist/graph/onchain/index.d.ts +2 -2
  35. package/dist/graph/onchain/index.js +1 -1
  36. package/dist/graph/onchain/project-relationship.js +1 -1
  37. package/dist/graph/onchain/table-ledger.spec.js +1 -1
  38. package/dist/graph/onchain/types.d.ts +3 -0
  39. package/dist/harness/recover.js +1 -1
  40. package/dist/index.js +1 -1
  41. package/dist/knowledge/arbitration-venue-order.d.ts +25 -0
  42. package/dist/knowledge/arbitration-venue-order.js +1 -0
  43. package/dist/knowledge/audit-rules.d.ts +10 -0
  44. package/dist/knowledge/audit-rules.js +1 -1
  45. package/dist/knowledge/baselines/risk-baselines.spec.js +1 -1
  46. package/dist/knowledge/baselines/rules/graph.json +81 -0
  47. package/dist/knowledge/baselines/rules/machine.json +3 -3
  48. package/dist/knowledge/baselines/rules/plan.json +80 -2
  49. package/dist/knowledge/builtin-templates.d.ts +17 -2
  50. package/dist/knowledge/builtin-templates.js +1 -1
  51. package/dist/knowledge/discount-threshold.js +1 -1
  52. package/dist/knowledge/event-semantics.js +1 -1
  53. package/dist/knowledge/getting-started.js +1 -1
  54. package/dist/knowledge/guard-bindings.js +1 -1
  55. package/dist/knowledge/guard-design-patterns.js +1 -1
  56. package/dist/knowledge/guard-field-cognition.js +1 -1
  57. package/dist/knowledge/guard-ledger.js +1 -1
  58. package/dist/knowledge/guard-lint.d.ts +1 -0
  59. package/dist/knowledge/guard-lint.js +1 -1
  60. package/dist/knowledge/guard-node-gates.d.ts +4 -0
  61. package/dist/knowledge/guard-node-gates.js +1 -0
  62. package/dist/knowledge/guard-puzzle.js +1 -1
  63. package/dist/knowledge/guard-risk.js +1 -1
  64. package/dist/knowledge/guard-submission-prompt.d.ts +1 -0
  65. package/dist/knowledge/guard-submission-prompt.js +1 -1
  66. package/dist/knowledge/guard-templates.d.ts +2 -1
  67. package/dist/knowledge/guard-templates.js +1 -1
  68. package/dist/knowledge/guard-translation.js +1 -1
  69. package/dist/knowledge/index.d.ts +2 -2
  70. package/dist/knowledge/index.js +1 -1
  71. package/dist/knowledge/industry-registry.js +1 -1
  72. package/dist/knowledge/jsonrpc-enum.js +1 -1
  73. package/dist/knowledge/machine-topology.d.ts +6 -0
  74. package/dist/knowledge/machine-topology.js +1 -1
  75. package/dist/knowledge/reputation-rules.d.ts +3 -9
  76. package/dist/knowledge/reputation-rules.js +1 -1
  77. package/dist/knowledge/safety-rules.d.ts +10 -1
  78. package/dist/knowledge/safety-rules.js +1 -1
  79. package/dist/knowledge/scenario-modes.js +1 -1
  80. package/dist/knowledge/settlement-semantics.d.ts +1 -0
  81. package/dist/knowledge/settlement-semantics.js +1 -0
  82. package/dist/knowledge/template-loader.d.ts +22 -0
  83. package/dist/knowledge/template-loader.js +1 -1
  84. package/dist/knowledge/template-registry.js +1 -1
  85. package/dist/knowledge/template-scanner.d.ts +14 -0
  86. package/dist/knowledge/template-scanner.js +1 -1
  87. package/dist/knowledge/tools-reference.js +1 -1
  88. package/dist/knowledge/workflow-guidance.d.ts +1 -0
  89. package/dist/knowledge/workflow-guidance.js +1 -1
  90. package/dist/monitor/MonitorLoop.js +1 -1
  91. package/dist/participation/allocation-advice.js +1 -1
  92. package/dist/participation/customer-interest.js +1 -1
  93. package/dist/participation/radar-core.d.ts +6 -1
  94. package/dist/participation/radar-core.js +1 -1
  95. package/dist/playbooks/service-build/business-puzzle.js +1 -1
  96. package/dist/playbooks/service-build/machine-panorama.js +1 -1
  97. package/dist/playbooks/service-build/merchant-guide.d.ts +38 -15
  98. package/dist/playbooks/service-build/merchant-guide.js +1 -1
  99. package/dist/playbooks/service-build/migration-planner.d.ts +7 -0
  100. package/dist/playbooks/service-build/migration-planner.js +1 -1
  101. package/dist/playbooks/service-build/object-panorama.js +1 -1
  102. package/dist/playbooks/service-build/participation-radar.js +1 -1
  103. package/dist/playbooks/service-build/pipeline-actions.d.ts +1 -1
  104. package/dist/playbooks/service-build/pipeline-actions.js +1 -1
  105. package/dist/playbooks/service-build/relationship-profile.js +1 -1
  106. package/dist/playbooks/service-build/risk-aggregator.d.ts +1 -1
  107. package/dist/playbooks/service-build/risk-aggregator.js +1 -1
  108. package/dist/playbooks/service-build/service-panorama.js +1 -1
  109. package/dist/playbooks/service-build/service-quote.js +1 -1
  110. package/dist/playbooks/service-build/service-quote.spec.js +1 -1
  111. package/dist/relationship/derivation.d.ts +1 -0
  112. package/dist/review/index.js +1 -1
  113. package/dist/runtime/instance-registry.d.ts +8 -0
  114. package/dist/runtime/instance-registry.js +1 -0
  115. package/dist/safety/confirm-gate.js +1 -1
  116. package/dist/schema/benchmark-migration/index.d.ts +14 -0
  117. package/dist/schema/benchmark-migration/index.js +1 -1
  118. package/dist/schema/call/arbitration.js +1 -1
  119. package/dist/schema/call/base.d.ts +109 -0
  120. package/dist/schema/call/base.js +1 -1
  121. package/dist/schema/call/bridge.d.ts +14 -0
  122. package/dist/schema/call/contact.js +1 -1
  123. package/dist/schema/call/error-codes.d.ts +1 -1
  124. package/dist/schema/call/error-codes.js +1 -1
  125. package/dist/schema/call/guard.d.ts +7 -0
  126. package/dist/schema/call/guard.js +1 -1
  127. package/dist/schema/call/handler.js +1 -1
  128. package/dist/schema/call/machine.d.ts +7 -0
  129. package/dist/schema/call/machine.js +1 -1
  130. package/dist/schema/call/payment.js +1 -1
  131. package/dist/schema/call/permission-handler.js +1 -1
  132. package/dist/schema/call/progress.d.ts +46 -0
  133. package/dist/schema/call/progress.js +1 -1
  134. package/dist/schema/call/semantic.js +1 -1
  135. package/dist/schema/call/service.d.ts +8 -8
  136. package/dist/schema/call/service.js +1 -1
  137. package/dist/schema/common/index.js +1 -1
  138. package/dist/schema/goal/index.d.ts +11 -0
  139. package/dist/schema/goal/planning.d.ts +32 -1
  140. package/dist/schema/goal/planning.js +1 -1
  141. package/dist/schema/industry-pack/index.d.ts +40 -0
  142. package/dist/schema/industry-pack/index.js +1 -1
  143. package/dist/schema/keeper/index.d.ts +13 -0
  144. package/dist/schema/local/index.d.ts +75 -0
  145. package/dist/schema/local/index.js +1 -1
  146. package/dist/schema/messenger/index.d.ts +17 -0
  147. package/dist/schema/messenger/index.js +1 -1
  148. package/dist/schema/operations.d.ts +39 -2
  149. package/dist/schema/operations.js +1 -1
  150. package/dist/schema/query/bi.d.ts +64 -0
  151. package/dist/schema/query/bi.js +1 -1
  152. package/dist/schema/query/index.d.ts +94 -0
  153. package/dist/schema/query/index.js +1 -1
  154. package/dist/schema/schema-version.d.ts +1 -1
  155. package/dist/schema/schema-version.js +1 -1
  156. package/dist/schema/utils/permission-machine-check.js +1 -1
  157. package/dist/schema/workspace/index.d.ts +1 -1
  158. package/dist/schema-query-impl/index.js +1 -1
  159. package/dist/schemas/account_operation.output.json +45 -0
  160. package/dist/schemas/benchmark_migration_operation.output.json +24 -4
  161. package/dist/schemas/benchmark_migration_operation.schema.json +70 -0
  162. package/dist/schemas/bridge_operation.output.json +45 -0
  163. package/dist/schemas/goal_operation.schema.json +78 -0
  164. package/dist/schemas/guard2file.output.json +6 -1
  165. package/dist/schemas/guard2file.schema.json +9 -0
  166. package/dist/schemas/index.json +1 -1
  167. package/dist/schemas/industry_pack_operation.output.json +91 -0
  168. package/dist/schemas/industry_pack_operation.schema.json +19 -1
  169. package/dist/schemas/keeper_operation.output.json +44 -0
  170. package/dist/schemas/local_cache_operation.output.json +45 -0
  171. package/dist/schemas/local_history_operation.output.json +45 -0
  172. package/dist/schemas/local_info_operation.output.json +45 -0
  173. package/dist/schemas/local_mark_operation.output.json +45 -0
  174. package/dist/schemas/machineNode2file.output.json +6 -1
  175. package/dist/schemas/machineNode2file.schema.json +9 -0
  176. package/dist/schemas/messenger_operation.output.json +52 -0
  177. package/dist/schemas/monitor_events.output.json +44 -0
  178. package/dist/schemas/monitor_subscription.output.json +44 -0
  179. package/dist/schemas/onchain_events.output.json +44 -0
  180. package/dist/schemas/onchain_operations.output.json +133 -0
  181. package/dist/schemas/onchain_operations.schema.json +73 -16
  182. package/dist/schemas/onchain_operations_arbitration.schema.json +2 -1
  183. package/dist/schemas/onchain_operations_contact.schema.json +2 -2
  184. package/dist/schemas/onchain_operations_guard.schema.json +2 -2
  185. package/dist/schemas/onchain_operations_machine.schema.json +2 -2
  186. package/dist/schemas/onchain_operations_payment.schema.json +1 -1
  187. package/dist/schemas/onchain_operations_progress.schema.json +57 -0
  188. package/dist/schemas/onchain_operations_service.schema.json +7 -8
  189. package/dist/schemas/onchain_table_data.output.json +81 -13
  190. package/dist/schemas/onchain_table_data.schema.json +21 -21
  191. package/dist/schemas/query_toolkit.output.json +218 -9
  192. package/dist/schemas/query_toolkit.schema.json +50 -26
  193. package/dist/schemas/wowok_buildin_info.output.json +80 -1
  194. package/dist/schemas/wowok_buildin_info.schema.json +1 -1
  195. package/dist/tools/handlers/benchmark-migration.d.ts +1 -0
  196. package/dist/tools/handlers/benchmark-migration.js +1 -1
  197. package/dist/tools/handlers/config.js +1 -1
  198. package/dist/tools/handlers/file-export.js +1 -1
  199. package/dist/tools/handlers/industry-pack.js +1 -1
  200. package/dist/tools/handlers/messenger.js +1 -1
  201. package/dist/tools/handlers/onchain.js +1 -1
  202. package/dist/tools/handlers/review-chain.d.ts +22 -0
  203. package/dist/tools/handlers/review-chain.js +1 -0
  204. package/dist/tools/registry/agent.js +1 -1
  205. package/dist/tools/registry/business.js +1 -1
  206. package/dist/tools/registry/config.js +1 -1
  207. package/dist/tools/registry/evaluation.js +1 -1
  208. package/dist/tools/registry/files.js +1 -1
  209. package/dist/tools/registry/identity.js +1 -1
  210. package/dist/tools/registry/local.js +1 -1
  211. package/dist/tools/registry/messenger.js +1 -1
  212. package/dist/tools/registry/monitor.js +1 -1
  213. package/dist/tools/registry/onchain.js +1 -1
  214. package/dist/tools/registry/query.js +1 -1
  215. package/dist/tools/rules-hook.js +1 -1
  216. package/dist/tools/runtime-health.d.ts +10 -0
  217. package/dist/tools/runtime-health.js +1 -0
  218. package/dist/tools/upgrade-check.d.ts +10 -1
  219. package/dist/tools/upgrade-check.js +1 -1
  220. package/dist/tools/wrap.d.ts +3 -0
  221. package/dist/tools/wrap.js +1 -1
  222. package/package.json +2 -2
@@ -1 +1 @@
1
- import{Config,LocalMark,query_objects,query_object_last_updated,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{createHash}from'node:crypto';import{checkWtsProofAnchor,readWtsDocument}from'../../communication/wts-attestation.js';import{resolveAddress as a326a}from'../../tools/handlers/name-resolution.js';import{batchReadAddressKeyedFields,batchQueryObjectsByIds,fetchObjectLinkerTx,ringWindowSaturated}from'../../graph/onchain/sdk-batch.js';import{formatMoneyAnnotation}from'./facet-money.js';const js=a=>{if(typeof a==='bigint')return a['toString']();if(a&&typeof a==='object'&&!Array['isArray'](a)){const b={};for(const [c,d]of Object['entries'](a)){b[c]=js(d);}return b;}if(Array['isArray'](a))return a['map'](js);return a;},str=a=>a===null||a===undefined?null:String(a),ownerAddr=a=>{if(typeof a==='string')return a;const b=a;if(b&&typeof b==='object'){if(typeof b['AddressOwner']==='string')return b['AddressOwner'];if(typeof b['ObjectOwner']==='string')return b['ObjectOwner'];const c=Object['values'](b)['find'](d=>typeof d==='string'&&d['length']>0x14);if(typeof c==='string')return c;}return null;},num=a=>{if(typeof a==='bigint')return Number(a);if(typeof a==='number')return Number['isFinite'](a)?a:null;if(typeof a==='string'&&a['trim']()!==''){const b=Number(a);return Number['isFinite'](b)?b:null;}return null;},arr=a=>Array['isArray'](a)?a:[];export function coinOfTypeRaw(a){if(typeof a!=='string'||!a)return null;const b=a['match'](/<(.+)>$/),c=b?.[0x1]?.['trim']();return c&&c['includes']('::')?c:null;}const RELATED_PREVIEW_CAP=0x32;async function buildRelatedList(a,b,c,d,e){const f={'key':a,'items':[],'count':0x0,'window_saturated':![],'preview_truncated':![]};if(!a)return f;try{const g=await fetchObjectLinkerTx(a,c,!![]),h=g?.['items']??[];f['window_saturated']=ringWindowSaturated(h['length']);const j=[];for(const k of h){const l=typeof k?.['who']==='string'?k['who']:'';if(!l||l['toLowerCase']()===b['toLowerCase']())continue;let m;try{m=objectTypeFromAddress(l);}catch{}if(!m)continue;j['push']({'address':l,'object_type':m,'time':typeof k?.['time']==='number'?k['time']:null});}f['count']=j['length'],f['items']=j['slice'](-RELATED_PREVIEW_CAP)['reverse'](),f['preview_truncated']=j['length']>f['items']['length'];}catch{d['push']('related:\x20ObjectLinkerTx('+e+')\x20lookup\x20failed');}return f;}const ARB_STATUS_NAMES={0x0:'Principal_confirming',0x1:'Arbitrator_confirming',0x2:'Voting',0x3:'Arbitrated',0x4:'Objectionable',0x5:'Finished',0x6:'Withdrawn'};async function resolveObject(a,b){const c=await a326a(a,'object_address');let d=b??undefined,f=null;if(!d)d=await Config['Instance']()['network_get']();try{const g=await query_objects({'objects':[c],'network':d});f=g?.['objects']?.[0x0]??null;if(!f&&b){const h=await Config['Instance']()['network_get']();if(h&&h!==d){const i=await query_objects({'objects':[c],'network':h,'no_cache':!![]}),j=i?.['objects']?.[0x0]??null;j&&(f=j,d=h);}}}catch(k){throw new Error('Failed\x20to\x20query\x20'+c+'\x20on\x20'+d+':\x20'+(k instanceof Error?k['message']:String(k)));}if(!f)throw new Error(c+'\x20not\x20found\x20on\x20'+d+'.\x20It\x20may\x20not\x20exist\x20on\x20this\x20network.');return f['object']=f['object']??c,{'network':String(d),'obj':f};}async function resolveHead(a,b,c){let d=null,e=[];try{const f=await LocalMark['Instance']()['list']({'address':a});f['length']>0x0&&(d=f[0x0]['name']??null,e=(f[0x0]['tags']??[])['map'](g=>String(g)));}catch{c['push']('head:\x20LocalMark\x20lookup\x20failed');}return{'name':d,'tags':e,'description':str(b['description'])};}async function buildPresenters(a,b,c){const d=[];let e=0x0,f=![];try{const g=await fetchObjectLinkerTx(a,b,!![]),h=Array['isArray'](g?.['items'])?g['items']:[];f=ringWindowSaturated(h['length']);const i=h['map'](l=>({'service':String(l?.['who']??''),'time':typeof l?.['time']==='number'?l['time']:null}))['filter'](l=>objectTypeFromAddress(l['service'])===ObjectType['Service']);e=i['length'];const j=i['slice'](-0x32)['reverse'](),k=await batchReadAddressKeyedFields(a,j['map'](l=>l['service']),b,!![]);for(const l of j){const m=k['get'](l['service']['toLowerCase']());d['push']({'service':l['service'],'recommend':str(m?.['recommend']),'acceptance_score':num(m?.['acceptance_score']),'feedback':str(m?.['feedback']),'feedback_time':num(m?.['feedback_time']),'update_time':num(m?.['update_time'])??l['time']});}}catch{c['push']('presenters:\x20global-table\x20lookup\x20failed\x20(non-blocking)');}return{'count':e,'window_saturated':f,'preview_truncated':e>d['length'],'items':d};}async function buildRepositoryData(a,b,c){return void a,void b,c['push']('data:\x20per-key\x20enumeration\x20requires\x20the\x20{entity,name}\x20pair\x20—\x20showing\x20count\x20only'),{'count':null,'items':[]};}export async function handleObjectPanorama(b){const c=b['object_address']??b['filter'];if(!c)throw new Error('\x27object_address\x27\x20is\x20required\x20for\x20object_panorama\x20(a\x20LocalMark\x20NAME\x20is\x20also\x20accepted).\x20Example:\x20{\x22query_type\x22:\x20\x22object_panorama\x22,\x20\x22object_address\x22:\x20\x220x...\x22}');const {network:e,obj:f}=await resolveObject(c,b['context_network']),g=String(f['object']),h=[],j=await resolveHead(g,f,h),k=String(f['type']??'');if(k==='Progress'){const l=arr(f['session'])[0x0],m=l?{'next_node':str(l['next_node']),'weights':num(l['weights']),'threshold':num(l['threshold']),'forwards':arr(l['forwards'])['map'](q=>{const r=q;return{'forward':str(r['forward'])??'','who':str(r['who']),'accomplished':r['accomplished']===!![],'msg':str(r['msg']),'time':num(r['time'])};})}:null,n=await buildRelatedList(typeof f['machine']==='string'?f['machine']:null,g,e,h,'machine');return{'action':'object_panorama','object':g,'object_type':'Progress','network':e,'head':j,'fields':{'machine':str(f['machine']),'current':str(f['current']),'task':str(f['task']),'history_count':num(f['history_count']),'current_time':num(f['current_time'])},'context_repositories':arr(f['context_repositories'])['map'](q=>String(q)),'operators':arr(f['namedOperator'])['map'](q=>{const r=q;return{'name':str(r['name'])??'','operators':arr(r['operators'])['map'](t=>String(t))};}),'session':m,'related':n,'data_gaps':h};}if(k==='Demand')return{'action':'object_panorama','object':g,'object_type':'Demand','network':e,'head':j,'fields':{'location':str(f['location']),'um':str(f['um']),'permission':str(f['permission']),'presenters_count':num(f['presenters_count'])},'rewards':arr(f['rewards'])['map'](q=>String(q)),'guards':arr(f['guards'])['map'](q=>({'guard':str(q['guard'])??''})),'presenters':await buildPresenters(g,e,h),'data_gaps':h};if(k==='Order'){let q=null;try{const F=await query_object_last_updated({'object':g,'network':e,'previous_transaction':str(f['previousTransaction'])});q=F?.['timestamp_ms']?Number(F['timestamp_ms'])||null:null;}catch{}let r='none',t=null,u=null;const w=str(f['allocation']),x=str(f['progress']),y=str(f['service']),z=[w,x,y]['filter'](G=>!!G);let A=null;if(z['length']>0x0)try{const G=await query_objects({'objects':z,'network':e}),H=G?.['objects']??[];if(w){r='pending';const I=H['find'](K=>K?.['object']===w),J=Number(I?.['balance']??NaN);if(Number['isFinite'](J)&&J===0x0)r='allocated';}if(x){const K=H['find'](L=>L?.['object']===x);t=str(K?.['current']),u=num(K?.['current_time']);}if(y){const L=H['find'](M=>M?.['object']===y);A=coinOfTypeRaw(L?.['type_raw']??L?.['type']);}}catch{}const B=await buildRelatedList(g,g,e,h,'order'),C=str(f['amount']),D=await formatMoneyAnnotation(C,A,e),E=await Promise['all'](arr(f['items'])['map'](async M=>{const N=M,O=str(N['price']),P=await formatMoneyAnnotation(O,A,e);return{'name':str(N['name']),'price':O,'price_display':P['display'],'price_tip':P['tip'],'quantity':str(N['quantity']),'wip_hash':str(N['wip_hash'])};}));return{'action':'object_panorama','object':g,'object_type':'Order','network':e,'head':j,'coin_type':A,'fields':{'service':y,'machine':str(f['machine']),'progress':x,'allocation':w,'discount':str(f['discount']),'amount':C,'amount_display':D['display'],'amount_tip':D['tip'],'owner':ownerAddr(f['builder']??f['owner']),'claimed_by':str(f['claimed_by']),'required_info':str(f['required_info']),'time':num(f['time'])},'updated_ms':q,'related':B,'allocation_state':r,'progress_next':t,'progress_since':u,'items':E,'disputes':arr(f['dispute'])['map'](M=>String(M)),'agents':arr(f['agent'])['map'](M=>String(M)),'data_gaps':h};}if(k==='Arb'){const M=f['indemnity'];let N=null;try{const W=await query_object_last_updated({'object':g,'network':e,'previous_transaction':str(f['previousTransaction'])});N=W?.['timestamp_ms']?Number(W['timestamp_ms'])||null:null;}catch{}const O=str(f['order']);let P=null;if(O)try{const X=await query_objects({'objects':[O],'network':e}),Y=X?.['objects']?.[0x0];P=str(Y?.['service']);}catch{}const Q=await buildRelatedList(g,g,e,h,'arb'),R=coinOfTypeRaw(f['type_raw']),S=str(f['fee']),T=await formatMoneyAnnotation(S,R,e),U=M?str(M['amount']):null,V=await formatMoneyAnnotation(U,R,e);return{'action':'object_panorama','object':g,'object_type':'Arb','network':e,'head':j,'coin_type':R,'fields':{'arbitration':str(f['arbitration']),'order':str(f['order']),'service':P,'fee':S,'fee_display':T['display'],'fee_tip':T['tip'],'feedback':str(f['feedback']),'indemnity':M?{'amount':U,'amount_display':V['display'],'amount_tip':V['tip'],'time':num(M['time'])}:null,'voting_deadline':num(f['voting_deadline']),'objection':str(f['objection']),'status':ARB_STATUS_NAMES[num(f['status'])??-0x1]??str(f['status']),'compensation_time':num(f['compensation_time']),'time':num(f['time']),'type_raw':str(f['type_raw'])},'voted':arr(f['voted'])['map'](Z=>{const a0=Z;return{'voter':str(a0['voter'])??'','agrees':arr(a0['agrees'])['map'](a1=>Number(a1)),'weight':num(a0['weight'])??0x0,'time':num(a0['time'])??0x0};}),'proposition':arr(f['proposition'])['map'](Z=>{const a0=Z;return{'name':str(a0['name'])??'','votes':num(a0['votes'])??0x0};}),'related':Q,'updated_ms':N,'data_gaps':h};}if(k==='Arbitration'){const Z=coinOfTypeRaw(f['type_raw']??f['type']),a0=str(f['fee']),a1=await formatMoneyAnnotation(a0,Z,e),a2=str(f['balance']),a3=await formatMoneyAnnotation(a2,Z,e),a4=a7=>{if(a7&&typeof a7==='object'){const a8=a7;if(a8['GuardIdentifier']!==undefined)return'guard\x20identifier\x20#'+String(a8['GuardIdentifier']);if(a8['FixedValue']!==undefined)return'fixed\x20weight\x20'+String(a8['FixedValue']);}return typeof a7==='number'||typeof a7==='string'?String(a7):null;},a5=arr(f['voting_guard'])['map'](a7=>{const a8=a7;return{'guard':str(a8['guard'])??'','vote_weight':a4(a8['vote_weight'])};}),a6={'count':0x0,'window_saturated':![],'preview_truncated':![],'stats':{'first_created_ms':null,'last_created_ms':null},'items':[]};try{const a7=await fetchObjectLinkerTx(g,e,!![]),a8=a7?.['items']??[];a6['window_saturated']=ringWindowSaturated(a8['length']);const a9=a8['filter'](ac=>objectTypeFromAddress(typeof ac?.['who']==='string'?ac['who']:'')===ObjectType['Arb']);a6['count']=a9['length'];for(const ac of a9){if(typeof ac?.['time']==='number'){if(a6['stats']['first_created_ms']===null||ac['time']<a6['stats']['first_created_ms'])a6['stats']['first_created_ms']=ac['time'];if(a6['stats']['last_created_ms']===null||ac['time']>a6['stats']['last_created_ms'])a6['stats']['last_created_ms']=ac['time'];}}const aa=a9['slice'](-0x3)['reverse'](),ab=new Map();if(aa['length']>0x0)try{const ad=await batchQueryObjectsByIds(aa['map'](ae=>String(ae['who'])),e,!![]);for(const ae of ad){if(ae?.['object'])ab['set'](ae['object'],ae);}}catch{h['push']('cases:\x20detail\x20fetch\x20failed\x20(non-blocking)');}for(const af of aa){const ag=typeof af?.['who']==='string'?af['who']:'';if(!ag)continue;const ah=ab['get'](ag);a6['items']['push']({'arb':ag,'order':ah?str(ah['order']):null,'status':ah?ARB_STATUS_NAMES[num(ah['status'])??-0x1]??str(ah['status']):null,'time':typeof af?.['time']==='number'?af['time']:null});}a6['preview_truncated']=a6['count']>a6['items']['length'],a6['preview_truncated']&&(a6['drilldown']={'total_count':a6['count'],'analyzed_count':a6['items']['length'],'prompt':'Analyze\x20ALL\x20dispute\x20cases\x20of\x20Arbitration\x20'+g+'\x20('+e+')\x20one\x20by\x20one,\x20newest\x20first.\x20'+('The\x20cases\x20live\x20in\x20the\x20arbitration\x27s\x20FIFO\x20tx-linker\x20window\x20holding\x20at\x20most\x205200\x20newest\x20entries\x20—\x20the\x20retained\x20count\x20is\x20a\x20lower\x20bound\x20when\x20the\x20window\x20is\x20saturated\x20(currently\x20'+a6['count']+(a6['window_saturated']?',\x20saturated':'')+').\x20')+'For\x20each\x20case\x20call\x20object_panorama\x20with\x20the\x20Arb\x20case\x27s\x20FULL\x200x\x20address\x20(collect\x20the\x20addresses\x20from\x20the\x20same\x20reverse-index\x20source;\x20work\x20newest-first)\x20and\x20render\x20ONE\x20table\x20row\x20per\x20case:\x20'+'case\x20address\x20chip\x20(first\x20column)\x20|\x20disputed\x20order\x20address\x20chip\x20ON\x20THE\x20SAME\x20ROW\x20(the\x20order\x20is\x20the\x20case\x27s\x20child\x20plane)\x20|\x20status\x20|\x20created\x20(local\x20date)\x20|\x20indemnity\x20(the\x20display\x20value\x20with\x20its\x20token\x20symbol\x20—\x20never\x20reconvert\x20from\x20raw)\x20|\x20arbitrator\x20feedback.\x20'+'Close\x20with\x20the\x203\x20most\x20valuable\x20patterns\x20across\x20the\x20rows\x20(outcomes,\x20indemnity\x20distribution,\x20case\x20age).\x20Cases\x20only\x20—\x20do\x20not\x20re-analyze\x20the\x20Arbitration\x20itself.'});}catch{h['push']('cases:\x20affiliation-window\x20lookup\x20failed\x20(non-blocking)');}return{'action':'object_panorama','object':g,'object_type':'Arbitration','network':e,'head':j,'coin_type':Z,'fields':{'location':str(f['location']),'um':str(f['um']),'permission':str(f['permission']),'fee':a0,'fee_display':a1['display'],'fee_tip':a1['tip'],'balance':a2,'balance_display':a3['display'],'balance_tip':a3['tip'],'paused':typeof f['bPaused']==='boolean'?f['bPaused']:null,'usage_guard':str(f['usage_guard'])},'voting_guards':a5,'cases':a6,'data_gaps':h};}if(k==='Repository')return{'action':'object_panorama','object':g,'object_type':'Repository','network':e,'head':j,'fields':{'um':str(f['um']),'permission':str(f['permission']),'data_count':num(f['data_count'])},'policies':arr(f['policies'])['map'](ai=>{const aj=ai;return{'name':str(aj['name'])??'','description':str(aj['description']),'id_from':str(aj['id_from']),'value_type':str(aj['value_type']),'write_guards':arr(aj['write_guard'])['length'],'quote_guard':str(aj['quote_guard'])};}),'rewards':arr(f['rewards'])['map'](ai=>String(ai)),'data_entries':await buildRepositoryData(g,e,h),'data_gaps':h};if(k==='Proof'){const ai=aq=>typeof aq==='string'&&aq?createHash('sha256')['update'](aq)['digest']('hex')['slice'](0x0,0x10):null,aj=str(f['server_pubkey']),ak=str(f['server_signature']),al=num(f['time']),am=num(f['proof_type']),an=str(f['proof']),ao={'action':'object_panorama','object':g,'object_type':'Proof','network':e,'head':j,'fields':{'description':str(f['description']),'anchored_root':an,'item_count':num(f['item_count']),'proof_type':am,'proof_type_label':am===0x1?'1\x20=\x20WTS\x20message\x20proof\x20(WOWOK_WTS_PROOF_TYPE,\x20proof.move:11)\x20—\x20convention,\x20not\x20chain-validated':(am??'unset')+'\x20—\x20unvalidated\x20by\x20the\x20contract\x20(proof.move\x20checks\x20lengths,\x20not\x20type)','about':ownerAddr(f['about']),'signer':ownerAddr(f['signer'])??str(f['signer']),'time_ms':al,'time_iso':al!==null?new Date(al)['toISOString']():null},'server_pubkey':{'present':!!aj,'length':aj?aj['length']:null,'fingerprint':ai(f['server_pubkey'])},'server_signature':{'present':!!ak,'length':ak?ak['length']:null,'fingerprint':ai(f['server_signature'])},'data_gaps':[...h,'server_pubkey\x20/\x20server_signature\x20are\x20shown\x20as\x20sha256\x20fingerprints\x20+\x20length\x20only\x20(a\x20signature\x20is\x20up\x20to\x2040,480\x20bytes)\x20—\x20pass\x20wts_file_path\x20to\x20have\x20this\x20Proof\x20compared\x20against\x20the\x20packet\x20instead\x20of\x20copying\x20the\x20material\x20out']},ap=b['wts_file_path'];if(ap){const aq=await readWtsDocument(ap);aq===undefined?ao['wts_anchor_check']={'root_matched':![],'matched_leaf_indices':[],'key_matched':![],'anchored_before_packet':null,'verdict':'wts_file_path\x20\x22'+ap+'\x22\x20could\x20not\x20be\x20read\x20as\x20a\x20local\x20JSON\x20WTS\x20packet\x20—\x20no\x20cross-check\x20performed.'}:ao['wts_anchor_check']=checkWtsProofAnchor(aq,{'proof':an,'server_pubkey':aj,'time':al,'signer':ao['fields']['signer'],'address':g});}return ao;}throw new Error('object_panorama:\x20unsupported\x20object\x20type\x20\x27'+(k||'unknown')+'\x27\x20for\x20'+g+'.\x20'+'Supported:\x20Progress\x20/\x20Demand\x20/\x20Order\x20/\x20Arb\x20/\x20Arbitration\x20/\x20Repository\x20/\x20Proof.');}
1
+ import{Config,LocalMark,query_objects,query_object_last_updated,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{createHash}from'node:crypto';import{checkWtsProofAnchor,readWtsDocument}from'../../communication/wts-attestation.js';import{resolveAddress as a330a}from'../../tools/handlers/name-resolution.js';import{batchReadAddressKeyedFields,batchQueryObjectsByIds,fetchObjectLinkerTx,ringWindowSaturated}from'../../graph/onchain/sdk-batch.js';import{formatMoneyAnnotation}from'./facet-money.js';const js=a=>{if(typeof a==='bigint')return a['toString']();if(a&&typeof a==='object'&&!Array['isArray'](a)){const b={};for(const [c,d]of Object['entries'](a)){b[c]=js(d);}return b;}if(Array['isArray'](a))return a['map'](js);return a;},str=a=>a===null||a===undefined?null:String(a),ownerAddr=a=>{if(typeof a==='string')return a;const b=a;if(b&&typeof b==='object'){if(typeof b['AddressOwner']==='string')return b['AddressOwner'];if(typeof b['ObjectOwner']==='string')return b['ObjectOwner'];const c=Object['values'](b)['find'](d=>typeof d==='string'&&d['length']>0x14);if(typeof c==='string')return c;}return null;},num=a=>{if(typeof a==='bigint')return Number(a);if(typeof a==='number')return Number['isFinite'](a)?a:null;if(typeof a==='string'&&a['trim']()!==''){const b=Number(a);return Number['isFinite'](b)?b:null;}return null;},arr=a=>Array['isArray'](a)?a:[];export function coinOfTypeRaw(a){if(typeof a!=='string'||!a)return null;const b=a['match'](/<(.+)>$/),c=b?.[0x1]?.['trim']();return c&&c['includes']('::')?c:null;}const RELATED_PREVIEW_CAP=0x32;async function buildRelatedList(a,b,c,d,e){const f={'key':a,'items':[],'count':0x0,'window_saturated':![],'preview_truncated':![]};if(!a)return f;try{const g=await fetchObjectLinkerTx(a,c,!![]),h=g?.['items']??[];f['window_saturated']=ringWindowSaturated(h['length']);const j=[];for(const k of h){const l=typeof k?.['who']==='string'?k['who']:'';if(!l||l['toLowerCase']()===b['toLowerCase']())continue;let m;try{m=objectTypeFromAddress(l);}catch{}if(!m)continue;j['push']({'address':l,'object_type':m,'time':typeof k?.['time']==='number'?k['time']:null});}f['count']=j['length'],f['items']=j['slice'](-RELATED_PREVIEW_CAP)['reverse'](),f['preview_truncated']=j['length']>f['items']['length'];}catch{d['push']('related:\x20ObjectLinkerTx('+e+')\x20lookup\x20failed');}return f;}const ARB_STATUS_NAMES={0x0:'Principal_confirming',0x1:'Arbitrator_confirming',0x2:'Voting',0x3:'Arbitrated',0x4:'Objectionable',0x5:'Finished',0x6:'Withdrawn'};async function resolveObject(a,b){const c=await a330a(a,'object_address');let d=b??undefined,f=null;if(!d)d=await Config['Instance']()['network_get']();try{const g=await query_objects({'objects':[c],'network':d});f=g?.['objects']?.[0x0]??null;if(!f&&b){const h=await Config['Instance']()['network_get']();if(h&&h!==d){const i=await query_objects({'objects':[c],'network':h,'no_cache':!![]}),j=i?.['objects']?.[0x0]??null;j&&(f=j,d=h);}}}catch(k){throw new Error('Failed\x20to\x20query\x20'+c+'\x20on\x20'+d+':\x20'+(k instanceof Error?k['message']:String(k)));}if(!f)throw new Error(c+'\x20not\x20found\x20on\x20'+d+'.\x20It\x20may\x20not\x20exist\x20on\x20this\x20network.');return f['object']=f['object']??c,{'network':String(d),'obj':f};}async function resolveHead(a,b,c){let d=null,e=[];try{const f=await LocalMark['Instance']()['list']({'address':a});f['length']>0x0&&(d=f[0x0]['name']??null,e=(f[0x0]['tags']??[])['map'](g=>String(g)));}catch{c['push']('head:\x20LocalMark\x20lookup\x20failed');}return{'name':d,'tags':e,'description':str(b['description'])};}async function buildPresenters(a,b,c){const d=[];let e=0x0,f=![];try{const g=await fetchObjectLinkerTx(a,b,!![]),h=Array['isArray'](g?.['items'])?g['items']:[];f=ringWindowSaturated(h['length']);const i=h['map'](l=>({'service':String(l?.['who']??''),'time':typeof l?.['time']==='number'?l['time']:null}))['filter'](l=>objectTypeFromAddress(l['service'])===ObjectType['Service']);e=i['length'];const j=i['slice'](-0x32)['reverse'](),k=await batchReadAddressKeyedFields(a,j['map'](l=>l['service']),b,!![]);for(const l of j){const m=k['get'](l['service']['toLowerCase']());d['push']({'service':l['service'],'recommend':str(m?.['recommend']),'acceptance_score':num(m?.['acceptance_score']),'feedback':str(m?.['feedback']),'feedback_time':num(m?.['feedback_time']),'update_time':num(m?.['update_time'])??l['time']});}}catch{c['push']('presenters:\x20global-table\x20lookup\x20failed\x20(non-blocking)');}return{'count':e,'window_saturated':f,'preview_truncated':e>d['length'],'items':d};}async function buildRepositoryData(a,b,c){return void a,void b,c['push']('data:\x20per-key\x20enumeration\x20requires\x20the\x20{entity,name}\x20pair\x20—\x20showing\x20count\x20only'),{'count':null,'items':[]};}export async function handleObjectPanorama(b){const c=b['object_address']??b['filter'];if(!c)throw new Error('\x27object_address\x27\x20is\x20required\x20for\x20object_panorama\x20(a\x20LocalMark\x20NAME\x20is\x20also\x20accepted).\x20Example:\x20{\x22query_type\x22:\x20\x22object_panorama\x22,\x20\x22object_address\x22:\x20\x220x...\x22}');const {network:e,obj:f}=await resolveObject(c,b['context_network']),g=String(f['object']),h=[],j=await resolveHead(g,f,h),k=String(f['type']??'');if(k==='Progress'){const l=arr(f['session'])[0x0],m=l?{'next_node':str(l['next_node']),'weights':num(l['weights']),'threshold':num(l['threshold']),'forwards':arr(l['forwards'])['map'](q=>{const r=q;return{'forward':str(r['forward'])??'','who':str(r['who']),'accomplished':r['accomplished']===!![],'msg':str(r['msg']),'time':num(r['time'])};})}:null,n=await buildRelatedList(typeof f['machine']==='string'?f['machine']:null,g,e,h,'machine');return{'action':'object_panorama','object':g,'object_type':'Progress','network':e,'head':j,'fields':{'machine':str(f['machine']),'current':str(f['current']),'task':str(f['task']),'history_count':num(f['history_count']),'current_time':num(f['current_time'])},'context_repositories':arr(f['context_repositories'])['map'](q=>String(q)),'operators':arr(f['namedOperator'])['map'](q=>{const r=q;return{'name':str(r['name'])??'','operators':arr(r['operators'])['map'](t=>String(t))};}),'session':m,'related':n,'data_gaps':h};}if(k==='Demand')return{'action':'object_panorama','object':g,'object_type':'Demand','network':e,'head':j,'fields':{'location':str(f['location']),'um':str(f['um']),'permission':str(f['permission']),'presenters_count':num(f['presenters_count'])},'rewards':arr(f['rewards'])['map'](q=>String(q)),'guards':arr(f['guards'])['map'](q=>({'guard':str(q['guard'])??''})),'presenters':await buildPresenters(g,e,h),'data_gaps':h};if(k==='Order'){let q=null;try{const F=await query_object_last_updated({'object':g,'network':e,'previous_transaction':str(f['previousTransaction'])});q=F?.['timestamp_ms']?Number(F['timestamp_ms'])||null:null;}catch{}let r='none',t=null,u=null;const w=str(f['allocation']),x=str(f['progress']),y=str(f['service']),z=[w,x,y]['filter'](G=>!!G);let A=null;if(z['length']>0x0)try{const G=await query_objects({'objects':z,'network':e}),H=G?.['objects']??[];if(w){r='pending';const I=H['find'](K=>K?.['object']===w),J=Number(I?.['balance']??NaN);if(Number['isFinite'](J)&&J===0x0)r='allocated';}if(x){const K=H['find'](L=>L?.['object']===x);t=str(K?.['current']),u=num(K?.['current_time']);}if(y){const L=H['find'](M=>M?.['object']===y);A=coinOfTypeRaw(L?.['type_raw']??L?.['type']);}}catch{}const B=await buildRelatedList(g,g,e,h,'order'),C=str(f['amount']),D=await formatMoneyAnnotation(C,A,e),E=await Promise['all'](arr(f['items'])['map'](async M=>{const N=M,O=str(N['price']),P=await formatMoneyAnnotation(O,A,e);return{'name':str(N['name']),'price':O,'price_display':P['display'],'price_tip':P['tip'],'quantity':str(N['quantity']),'wip_hash':str(N['wip_hash'])};}));return{'action':'object_panorama','object':g,'object_type':'Order','network':e,'head':j,'coin_type':A,'fields':{'service':y,'machine':str(f['machine']),'progress':x,'allocation':w,'discount':str(f['discount']),'amount':C,'amount_display':D['display'],'amount_tip':D['tip'],'owner':ownerAddr(f['builder']??f['owner']),'claimed_by':str(f['claimed_by']),'required_info':str(f['required_info']),'time':num(f['time'])},'updated_ms':q,'related':B,'allocation_state':r,'progress_next':t,'progress_since':u,'items':E,'disputes':arr(f['dispute'])['map'](M=>String(M)),'agents':arr(f['agent'])['map'](M=>String(M)),'data_gaps':h};}if(k==='Arb'){const M=f['indemnity'];let N=null;try{const W=await query_object_last_updated({'object':g,'network':e,'previous_transaction':str(f['previousTransaction'])});N=W?.['timestamp_ms']?Number(W['timestamp_ms'])||null:null;}catch{}const O=str(f['order']);let P=null;if(O)try{const X=await query_objects({'objects':[O],'network':e}),Y=X?.['objects']?.[0x0];P=str(Y?.['service']);}catch{}const Q=await buildRelatedList(g,g,e,h,'arb'),R=coinOfTypeRaw(f['type_raw']),S=str(f['fee']),T=await formatMoneyAnnotation(S,R,e),U=M?str(M['amount']):null,V=await formatMoneyAnnotation(U,R,e);return{'action':'object_panorama','object':g,'object_type':'Arb','network':e,'head':j,'coin_type':R,'fields':{'arbitration':str(f['arbitration']),'order':str(f['order']),'service':P,'fee':S,'fee_display':T['display'],'fee_tip':T['tip'],'feedback':str(f['feedback']),'indemnity':M?{'amount':U,'amount_display':V['display'],'amount_tip':V['tip'],'time':num(M['time'])}:null,'voting_deadline':num(f['voting_deadline']),'objection':str(f['objection']),'status':ARB_STATUS_NAMES[num(f['status'])??-0x1]??str(f['status']),'compensation_time':num(f['compensation_time']),'time':num(f['time']),'type_raw':str(f['type_raw'])},'voted':arr(f['voted'])['map'](Z=>{const a0=Z;return{'voter':str(a0['voter'])??'','agrees':arr(a0['agrees'])['map'](a1=>Number(a1)),'weight':num(a0['weight'])??0x0,'time':num(a0['time'])??0x0};}),'proposition':arr(f['proposition'])['map'](Z=>{const a0=Z;return{'name':str(a0['name'])??'','votes':num(a0['votes'])??0x0};}),'related':Q,'updated_ms':N,'data_gaps':h};}if(k==='Arbitration'){const Z=coinOfTypeRaw(f['type_raw']??f['type']),a0=str(f['fee']),a1=await formatMoneyAnnotation(a0,Z,e),a2=str(f['balance']),a3=await formatMoneyAnnotation(a2,Z,e),a4=a7=>{if(a7&&typeof a7==='object'){const a8=a7;if(a8['GuardIdentifier']!==undefined)return'guard\x20identifier\x20#'+String(a8['GuardIdentifier']);if(a8['FixedValue']!==undefined)return'fixed\x20weight\x20'+String(a8['FixedValue']);}return typeof a7==='number'||typeof a7==='string'?String(a7):null;},a5=arr(f['voting_guard'])['map'](a7=>{const a8=a7;return{'guard':str(a8['guard'])??'','vote_weight':a4(a8['vote_weight'])};}),a6={'count':0x0,'window_saturated':![],'preview_truncated':![],'stats':{'first_created_ms':null,'last_created_ms':null},'items':[]};try{const a7=await fetchObjectLinkerTx(g,e,!![]),a8=a7?.['items']??[];a6['window_saturated']=ringWindowSaturated(a8['length']);const a9=a8['filter'](ac=>objectTypeFromAddress(typeof ac?.['who']==='string'?ac['who']:'')===ObjectType['Arb']);a6['count']=a9['length'];for(const ac of a9){if(typeof ac?.['time']==='number'){if(a6['stats']['first_created_ms']===null||ac['time']<a6['stats']['first_created_ms'])a6['stats']['first_created_ms']=ac['time'];if(a6['stats']['last_created_ms']===null||ac['time']>a6['stats']['last_created_ms'])a6['stats']['last_created_ms']=ac['time'];}}const aa=a9['slice'](-0x3)['reverse'](),ab=new Map();if(aa['length']>0x0)try{const ad=await batchQueryObjectsByIds(aa['map'](ae=>String(ae['who'])),e,!![]);for(const ae of ad){if(ae?.['object'])ab['set'](ae['object'],ae);}}catch{h['push']('cases:\x20detail\x20fetch\x20failed\x20(non-blocking)');}for(const af of aa){const ag=typeof af?.['who']==='string'?af['who']:'';if(!ag)continue;const ah=ab['get'](ag);a6['items']['push']({'arb':ag,'order':ah?str(ah['order']):null,'status':ah?ARB_STATUS_NAMES[num(ah['status'])??-0x1]??str(ah['status']):null,'time':typeof af?.['time']==='number'?af['time']:null});}a6['preview_truncated']=a6['count']>a6['items']['length'],a6['preview_truncated']&&(a6['drilldown']={'total_count':a6['count'],'analyzed_count':a6['items']['length'],'prompt':'Analyze\x20ALL\x20dispute\x20cases\x20of\x20Arbitration\x20'+g+'\x20('+e+')\x20one\x20by\x20one,\x20newest\x20first.\x20'+('The\x20cases\x20live\x20in\x20the\x20arbitration\x27s\x20FIFO\x20tx-linker\x20window\x20holding\x20at\x20most\x205200\x20newest\x20entries\x20—\x20the\x20retained\x20count\x20is\x20a\x20lower\x20bound\x20when\x20the\x20window\x20is\x20saturated\x20(currently\x20'+a6['count']+(a6['window_saturated']?',\x20saturated':'')+').\x20')+'For\x20each\x20case\x20call\x20object_panorama\x20with\x20the\x20Arb\x20case\x27s\x20FULL\x200x\x20address\x20(collect\x20the\x20addresses\x20from\x20the\x20same\x20reverse-index\x20source;\x20work\x20newest-first)\x20and\x20render\x20ONE\x20table\x20row\x20per\x20case:\x20'+'case\x20address\x20chip\x20(first\x20column)\x20|\x20disputed\x20order\x20address\x20chip\x20ON\x20THE\x20SAME\x20ROW\x20(the\x20order\x20is\x20the\x20case\x27s\x20child\x20plane)\x20|\x20status\x20|\x20created\x20(local\x20date)\x20|\x20indemnity\x20(the\x20display\x20value\x20with\x20its\x20token\x20symbol\x20—\x20never\x20reconvert\x20from\x20raw)\x20|\x20arbitrator\x20feedback.\x20'+'Close\x20with\x20the\x203\x20most\x20valuable\x20patterns\x20across\x20the\x20rows\x20(outcomes,\x20indemnity\x20distribution,\x20case\x20age).\x20Cases\x20only\x20—\x20do\x20not\x20re-analyze\x20the\x20Arbitration\x20itself.'});}catch{h['push']('cases:\x20affiliation-window\x20lookup\x20failed\x20(non-blocking)');}return{'action':'object_panorama','object':g,'object_type':'Arbitration','network':e,'head':j,'coin_type':Z,'fields':{'location':str(f['location']),'um':str(f['um']),'permission':str(f['permission']),'fee':a0,'fee_display':a1['display'],'fee_tip':a1['tip'],'balance':a2,'balance_display':a3['display'],'balance_tip':a3['tip'],'paused':typeof f['bPaused']==='boolean'?f['bPaused']:null,'usage_guard':str(f['usage_guard'])},'voting_guards':a5,'cases':a6,'data_gaps':h};}if(k==='Repository')return{'action':'object_panorama','object':g,'object_type':'Repository','network':e,'head':j,'fields':{'um':str(f['um']),'permission':str(f['permission']),'data_count':num(f['data_count'])},'policies':arr(f['policies'])['map'](ai=>{const aj=ai;return{'name':str(aj['name'])??'','description':str(aj['description']),'id_from':str(aj['id_from']),'value_type':str(aj['value_type']),'write_guards':arr(aj['write_guard'])['length'],'quote_guard':str(aj['quote_guard'])};}),'rewards':arr(f['rewards'])['map'](ai=>String(ai)),'data_entries':await buildRepositoryData(g,e,h),'data_gaps':h};if(k==='Proof'){const ai=aq=>typeof aq==='string'&&aq?createHash('sha256')['update'](aq)['digest']('hex')['slice'](0x0,0x10):null,aj=str(f['server_pubkey']),ak=str(f['server_signature']),al=num(f['time']),am=num(f['proof_type']),an=str(f['proof']),ao={'action':'object_panorama','object':g,'object_type':'Proof','network':e,'head':j,'fields':{'description':str(f['description']),'anchored_root':an,'item_count':num(f['item_count']),'proof_type':am,'proof_type_label':am===0x1?'1\x20=\x20WTS\x20message\x20proof\x20(WOWOK_WTS_PROOF_TYPE,\x20proof.move:11)\x20—\x20convention,\x20not\x20chain-validated':(am??'unset')+'\x20—\x20unvalidated\x20by\x20the\x20contract\x20(proof.move\x20checks\x20lengths,\x20not\x20type)','about':ownerAddr(f['about']),'signer':ownerAddr(f['signer'])??str(f['signer']),'time_ms':al,'time_iso':al!==null?new Date(al)['toISOString']():null},'server_pubkey':{'present':!!aj,'length':aj?aj['length']:null,'fingerprint':ai(f['server_pubkey'])},'server_signature':{'present':!!ak,'length':ak?ak['length']:null,'fingerprint':ai(f['server_signature'])},'data_gaps':[...h,'server_pubkey\x20/\x20server_signature\x20are\x20shown\x20as\x20sha256\x20fingerprints\x20+\x20length\x20only\x20(a\x20signature\x20is\x20up\x20to\x2040,480\x20bytes)\x20—\x20pass\x20wts_file_path\x20to\x20have\x20this\x20Proof\x20compared\x20against\x20the\x20packet\x20instead\x20of\x20copying\x20the\x20material\x20out']},ap=b['wts_file_path'];if(ap){const aq=await readWtsDocument(ap);aq===undefined?ao['wts_anchor_check']={'root_matched':![],'matched_leaf_indices':[],'key_matched':![],'anchored_before_packet':null,'verdict':'wts_file_path\x20\x22'+ap+'\x22\x20could\x20not\x20be\x20read\x20as\x20a\x20local\x20JSON\x20WTS\x20packet\x20—\x20no\x20cross-check\x20performed.'}:ao['wts_anchor_check']=checkWtsProofAnchor(aq,{'proof':an,'server_pubkey':aj,'time':al,'signer':ao['fields']['signer'],'address':g});}return ao;}throw new Error('object_panorama:\x20unsupported\x20object\x20type\x20\x27'+(k||'unknown')+'\x27\x20for\x20'+g+'.\x20'+'Supported:\x20Progress\x20/\x20Demand\x20/\x20Order\x20/\x20Arb\x20/\x20Arbitration\x20/\x20Repository\x20/\x20Proof.');}
@@ -1 +1 @@
1
- import{watch_conversations}from'@wowok/wowok';import{analyzeOrderParticipation,aggregateRadar,isConsequenceNode}from'../../participation/radar-core.js';import{workflowSubgraphFromRows}from'../../graph/onchain/index.js';import{Config}from'@wowok/wowok/w/local';import{resolveAddress as a328a}from'../../tools/handlers/name-resolution.js';import{monitorOrder}from'../../customer/order-monitor.js';import{analyzeMerchantInterest}from'../../participation/merchant-interest.js';import{analyzeCustomerInterest}from'../../participation/customer-interest.js';import{analyzeSupplierInterest}from'../../participation/supplier-interest.js';import{analyzeCollaboratorInterest}from'../../participation/collaborator-interest.js';import{buildAllocationAdvice}from'../../participation/allocation-advice.js';import{fetchMachineNodes}from'./machine-nodes.js';import{extractGenericTokenType,registryDisplayHint}from'../../knowledge/fund-layer.js';import{classifyRecipient,derivePayoffFromSharing}from'../../knowledge/recipient-constraint.js';import{batchQueryObjectsByIds,batchQueryTableItems}from'../../graph/onchain/sdk-batch.js';function fld(a,b){return a?.[b]??a?.['data']?.[b];}async function resolveAddress(a,b){return a328a(a,b);}function balanceStr(a){if(a==null)return undefined;if(typeof a==='object'&&'balance'in a)return String(a['balance']);return String(a);}function balanceToken(a){if(a!=null&&typeof a==='object'&&typeof a['token_type']==='string')return a['token_type'];return undefined;}function summarizeAllocation(a,b){const c=Array['isArray'](a)?a:Array['isArray'](a?.['allocators'])?a['allocators']:[];if(c['length']===0x0)return undefined;let d=0x0,e=0x0,f=0x0,g=0x0;const h=[],i=b['toLowerCase']();for(const j of c){const k=j?.['sharing']??[];for(const l of k){d++;const m=classifyRecipient(l['who']);if(!m)continue;if(m['kind']==='submission')e++;else{if(m['kind']==='signer')g++;else{if(m['kind']==='entity'&&m['address']['toLowerCase']()===i)f++;}}}h['push'](derivePayoffFromSharing(k,'service_order_allocators'));}return{'recipient_slots':d,'guard_gated_slots':e,'direct_to_me_slots':f,'to_payer_slots':g,'payoffs':h};}async function fetchEntityPermissions(a,b){const c=new Map(),{items:d}=await batchQueryTableItems(a,{'network':b});for(const e of d){const f=e['object'];if(f?.['type']!=='TableItem_PermissionPerm')continue;const g=fld(f,'address'),h=fld(f,'perm')??[],i=h['map'](j=>typeof j==='number'?j:typeof j?.['index']==='number'?j['index']:null)['filter'](j=>j!==null);if(g)c['set'](g,i);}return c;}function toWorkflowSubgraph(a,b){return workflowSubgraphFromRows(a,b);}export async function handleParticipationRadar(a){if(!a['radar_account'])throw new Error('\x27radar_account\x27\x20is\x20required\x20for\x20participation_radar');if(!a['radar_targets']||a['radar_targets']['length']===0x0)throw new Error('\x27radar_targets\x27\x20(1-20\x20in-flight\x20orders)\x20is\x20required\x20for\x20participation_radar');const b=a['context_network']??await Config['Instance']()['network_get'](),d=a['radar_include_alerts']??!![],f=[],g=await resolveAddress(a['radar_account'],'radar_account'),h=await Promise['all'](a['radar_targets']['map'](async K=>({'progress':await resolveAddress(K['progress'],'progress'),'order':K['order']?await resolveAddress(K['order'],'order'):undefined}))),i=h['flatMap'](K=>K['order']?[K['progress'],K['order']]:[K['progress']]),j=await batchQueryObjectsByIds(i,b),k=new Map();for(const K of j){const L=fld(K,'object');if(L)k['set'](L,K);}const l=new Map(),m=new Map();for(const M of h){const N=k['get'](M['progress']);if(!N){f['push']('Progress\x20'+M['progress']+'\x20not\x20found\x20on\x20'+b+'\x20—\x20target\x20skipped.');continue;}l['set'](M['progress'],N);if(M['order']){const O=k['get'](M['order']);if(O)m['set'](M['order'],O);else f['push']('Order\x20'+M['order']+'\x20not\x20found\x20on\x20'+b+'\x20—\x20order-holder\x20detection\x20disabled\x20for\x20'+M['progress']+'.');}}h['length']>0x0&&l['size']===0x0&&f['push']('NETWORK\x20MISMATCH\x20SUSPECTED:\x200/'+h['length']+'\x20radar\x20targets\x20exist\x20on\x20network=\x27'+b+'\x27.\x20'+'These\x20objects\x20most\x20likely\x20live\x20on\x20a\x20different\x20network\x20—\x20re-run\x20with\x20the\x20matching\x20\x27network\x27\x20parameter.');const q=[...new Set([...l['values']()]['map'](P=>fld(P,'machine'))['filter'](P=>!!P))],s=[...new Set([...m['values']()]['map'](P=>fld(P,'service'))['filter'](P=>!!P))],u=[...new Set([...m['values']()]['flatMap'](P=>{const Q=fld(P,'dispute');return Array['isArray'](Q)?Q:[];}))],w=[...new Set([...m['values']()]['map'](P=>fld(P,'allocation'))['filter'](P=>!!P&&P['startsWith']('0x')))],x=new Map(),y=new Map(),z=new Map(),A=new Map(),B=new Map();await Promise['all']([...q['map'](async P=>{try{const [Q,R]=await Promise['all']([batchQueryObjectsByIds([P],b),fetchMachineNodes(P,b,!![])]);if(Q[0x0])x['set'](P,Q[0x0]);y['set'](P,toWorkflowSubgraph(R,P));}catch(S){f['push']('Machine\x20'+P+'\x20fetch\x20failed:\x20'+S['message']+'\x20—\x20workflow\x20unknown\x20for\x20its\x20orders.');}}),((async()=>{if(s['length']===0x0)return;try{const P=await batchQueryObjectsByIds(s,b);for(const Q of P){const R=fld(Q,'object');if(R)z['set'](R,Q);}}catch(S){f['push']('Service\x20query\x20failed:\x20'+S['message']+'\x20—\x20compensation/reward\x20context\x20degraded.');}})()),((async()=>{if(u['length']===0x0)return;try{const P=await batchQueryObjectsByIds(u,b);for(const Q of P){const R=fld(Q,'object');if(R)A['set'](R,Q);}}catch(S){f['push']('Arb\x20query\x20failed:\x20'+S['message']+'\x20—\x20compensation\x20claim\x20detection\x20disabled.');}})()),((async()=>{if(w['length']===0x0)return;try{const P=await batchQueryObjectsByIds(w,b);for(const Q of P){const R=fld(Q,'object');if(R)B['set'](R,Q);}}catch(S){f['push']('Allocation\x20pool\x20query\x20failed:\x20'+S['message']+'\x20—\x20fund-state\x20advice\x20degraded\x20to\x20template\x20level.');}})())]);const C=new Map(),D=[...new Set(q['map'](P=>fld(x['get'](P),'permission'))['filter'](P=>!!P))],E=new Map();await Promise['all'](D['map'](async P=>{try{const [Q,R]=await Promise['all']([batchQueryObjectsByIds([P],b),fetchEntityPermissions(P,b)]),S=Q[0x0];E['set'](P,{'address':P,'entity_count':fld(S,'entity_count'),'perm_remark':fld(S,'perm_remark'),'entityPermissions':R,'owner':fld(S,'builder')});}catch(T){f['push']('Permission\x20'+P+'\x20fetch\x20failed:\x20'+T['message']+'\x20—\x20operator\x20permission\x20matching\x20degraded.');}}));for(const P of q){const Q=fld(x['get'](P),'permission');if(Q&&E['has'](Q))C['set'](P,E['get'](Q));}let F=0x0;const G=new Map();try{const R=await watch_conversations({'account':g,'unreadOnly':!![],'previewMessageCount':0x0,'skipAutoMarkViewed':!![]}),S=Array['isArray'](R)?R:R?.['conversations']??[];for(const T of S){const U=T?.['peerAddress'],V=typeof T?.['unreadCount']==='number'?T['unreadCount']:0x0;typeof U==='string'&&V>0x0&&(G['set'](U['toLowerCase'](),V),F+=V);}}catch{f['push']('Messenger\x20unread\x20unavailable\x20(radar\x20account\x20is\x20not\x20a\x20local\x20messenger\x20account,\x20or\x20messenger\x20storage\x20offline)\x20'+'—\x20unread_messages_total\x20reported\x20as\x200.');}const H=[],I=Date['now']();for(const W of h){const X=l['get'](W['progress']);if(!X)continue;const Y=W['order']?m['get'](W['order']):undefined,Z=fld(X,'machine'),a0=fld(X,'current')??'',a1=fld(X,'namedOperator')??[],a2={};for(const ai of a1){if(ai?.['name'])a2[ai['name']]=Array['isArray'](ai['operators'])?ai['operators']:[];}const a3=Y?fld(Y,'service'):undefined,a4=a3?z['get'](a3):undefined;let a5;const a6=Y?fld(Y,'builder'):undefined;if(Y&&a6===g){const aj=fld(Y,'dispute')??[];for(const ak of aj){const al=A['get'](ak);if(!al)continue;const am=fld(al,'indemnity');if(am){a5={'arbitration':fld(al,'arbitration')??ak,'note':'Arbitration\x20verdict\x20recorded\x20an\x20indemnity\x20(Arb\x20'+ak+').\x20'+'Claim\x20via\x20order\x20op=\x27arb_claim_compensation\x27\x20—\x20paid\x20directly\x20from\x20the\x20Service\x20compensation_fund.\x20'+'(Claimed-status\x20is\x20not\x20readable\x20from\x20the\x20Arb\x20object;\x20the\x20contract\x20rejects\x20double-claims.)'};break;}}}const a7=[];if(a4&&a6===g){const an=fld(a4,'rewards')??[];for(const ao of an){a7['push']({'address':ao,'description':'Service\x20reward\x20'+ao+'\x20(guard-gated\x20—\x20eligibility\x20verified\x20at\x20claim\x20time)'});}}const a8=isConsequenceNode(a0,'completed'),a9=isConsequenceNode(a0,'refunded');let aa=0x0;if(G['size']>0x0){const ap=new Set();if(a6)ap['add'](a6['toLowerCase']());for(const aq of Object['values'](a2)){for(const ar of aq)ap['add'](ar['toLowerCase']());}ap['delete'](g['toLowerCase']());for(const as of ap){aa+=G['get'](as)??0x0;}}const ab={'account':g,'progress_address':W['progress'],'order_address':W['order'],'current_node':a0,'order_holder':a6,'workflow':Z?y['get'](Z):undefined,'permission':Z?C['get'](Z)??null:null,'named_accounts':a2,'claimable_rewards':a7['length']>0x0?a7:undefined,'pending_compensation':a5,'rating_pending':a8&&a6===g,'unread_messages':aa>0x0?aa:undefined,'last_progress_at':fld(X,'current_time')??undefined,'now':I},ac=analyzeOrderParticipation(ab),ad=(fld(a4,'arbitrations')??[])['length']>0x0,ae=a8?'completed':a9?'refunded':null,af=ab['last_progress_at']!=null?(I-ab['last_progress_at'])/0x36ee80:undefined,ag=summarizeAllocation(fld(a4,'order_allocators'),g);if(ac['perspective']==='merchant')ac['interest_analysis']=analyzeMerchantInterest({'account':g,'current_node':a0,'operable':ac['operable'],'waiting_on':ac['waiting_on'],'order_amount':balanceStr(fld(Y,'amount')),'token_type':balanceToken(fld(Y,'amount')),'allocation':ag,'compensation_fund':balanceStr(fld(a4,'compensation_fund')),'arbitration_bound':ad,'rewards_count':(fld(a4,'rewards')??[])['length'],'stalled_hours':af,'terminal':ae,'unread_messages':aa>0x0?aa:undefined});else{if(ac['perspective']==='supplier')ac['interest_analysis']=analyzeSupplierInterest({'account':g,'current_node':a0,'operable':ac['operable'],'waiting_on':ac['waiting_on'],'order_amount':balanceStr(fld(Y,'amount')),'token_type':balanceToken(fld(Y,'amount')),'arbitration_bound':ad,'compensation_fund':balanceStr(fld(a4,'compensation_fund')),'allocation_payoff':ag?.['payoffs'],'terminal':ae,'stalled_hours':af,'unread_messages':aa>0x0?aa:undefined});else{if(ac['perspective']==='collaborator')ac['interest_analysis']=analyzeCollaboratorInterest({'account':g,'current_node':a0,'operable':ac['operable'],'waiting_on':ac['waiting_on'],'collaborator_kind':ac['collaborator_kind'],'arbitration_bound':ad,'allocation_payoff':ag?.['payoffs'],'terminal':ae,'stalled_hours':af,'unread_messages':aa>0x0?aa:undefined});else ac['perspective']==='customer'&&(ac['interest_analysis']=analyzeCustomerInterest({'account':g,'current_node':a0,'operable':ac['operable'],'waiting_on':ac['waiting_on'],'order_amount':balanceStr(fld(Y,'amount')),'token_type':balanceToken(fld(Y,'amount')),'compensation_fund':balanceStr(fld(a4,'compensation_fund')),'arbitration_bound':ad,'allocation_payoff':ag?.['payoffs'],'terminal':ae,'stalled_hours':af,'unread_messages':aa>0x0?aa:undefined}));}}const ah=Y?fld(Y,'allocation'):undefined;if(Y&&ah){const at=B['get'](ah['toLowerCase']()),au=fld(Y,'dispute')??[];if(at)try{ac['fund_advice']=buildAllocationAdvice({'pool':{'address':ah,'balance':fld(at,'balance'),'allocators':fld(at,'allocators'),'threshold':fld(at,'threshold'),'payment':fld(at,'payment'),'for_object':fld(at,'payment_info')!==undefined?fld(at,'payment_info')?.['for_object']:fld(at,'for_object')},'order_amount':fld(Y,'amount'),'perspective':ac['perspective'],'is_order_holder':a6===g,'completed':a8,'refunded':a9,'can_act_now':ac['operable']['length']>0x0,'compensation_fund':fld(a4,'compensation_fund'),'has_dispute':au['length']>0x0});}catch(av){f['push']('Fund\x20advice\x20failed\x20for\x20'+ah+':\x20'+av['message']+'.');}else f['push']('Allocation\x20pool\x20'+ah+'\x20not\x20found\x20—\x20fund-state\x20advice\x20unavailable\x20for\x20'+W['progress']+'.');}if(d&&Y){const aw={'order_id':W['order'],'service_id':a3??'','current_node':a0||undefined,'created_at':Number(fld(Y,'time')??I)||I,'last_progress_at':fld(X,'current_time')??undefined,'now':I,'order_amount':((()=>{try{return BigInt(fld(Y,'amount')??0x0);}catch{return undefined;}})()),'compensation_balance':((()=>{try{const ax=fld(a4,'compensation_fund');return ax!=null?BigInt(ax):undefined;}catch{return undefined;}})()),'token':registryDisplayHint(extractGenericTokenType(fld(a4,'type_raw'))),'has_arbitration':(fld(a4,'arbitrations')??[])['length']>0x0,'pending_user_action':ac['operable']['some'](ax=>ax['execution_path']==='order_holder'),'completed':a8,'refunded':a9};try{const ax=monitorOrder({'current':aw,'thresholds':a['radar_monitor_thresholds']});ax['length']>0x0&&(ac['attached_alerts']=ax);}catch(ay){f['push']('Order\x20monitor\x20failed\x20for\x20'+W['order']+':\x20'+ay['message']+'.');}}H['push'](ac);}const J=aggregateRadar(H,F);return{'action':'participation_radar','account':g,'orders_analyzed':J['orders_analyzed'],'actionable':J['actionable'],'waiting':J['waiting'],'all_pending_claims':J['all_pending_claims'],'unread_messages_total':J['unread_messages_total'],'data_gaps':f,'summary':J['summary']};}
1
+ import{watch_conversations}from'@wowok/wowok';import{analyzeOrderParticipation,aggregateRadar,isConsequenceNode}from'../../participation/radar-core.js';import{workflowSubgraphFromRows}from'../../graph/onchain/index.js';import{Config}from'@wowok/wowok/w/local';import{resolveAddress as a332a}from'../../tools/handlers/name-resolution.js';import{monitorOrder}from'../../customer/order-monitor.js';import{analyzeMerchantInterest}from'../../participation/merchant-interest.js';import{analyzeCustomerInterest}from'../../participation/customer-interest.js';import{analyzeSupplierInterest}from'../../participation/supplier-interest.js';import{analyzeCollaboratorInterest}from'../../participation/collaborator-interest.js';import{buildAllocationAdvice}from'../../participation/allocation-advice.js';import{fetchMachineNodes}from'./machine-nodes.js';import{extractGenericTokenType,registryDisplayHint}from'../../knowledge/fund-layer.js';import{classifyRecipient,derivePayoffFromSharing}from'../../knowledge/recipient-constraint.js';import{batchQueryObjectsByIds,batchQueryTableItems}from'../../graph/onchain/sdk-batch.js';function fld(a,b){return a?.[b]??a?.['data']?.[b];}async function resolveAddress(a,b){return a332a(a,b);}function balanceStr(a){if(a==null)return undefined;if(typeof a==='object'&&'balance'in a)return String(a['balance']);return String(a);}function balanceToken(a){if(a!=null&&typeof a==='object'&&typeof a['token_type']==='string')return a['token_type'];return undefined;}function summarizeAllocation(a,b){const c=Array['isArray'](a)?a:Array['isArray'](a?.['allocators'])?a['allocators']:[];if(c['length']===0x0)return undefined;let d=0x0,e=0x0,f=0x0,g=0x0;const h=[],i=b['toLowerCase']();for(const j of c){const k=j?.['sharing']??[];for(const l of k){d++;const m=classifyRecipient(l['who']);if(!m)continue;if(m['kind']==='submission')e++;else{if(m['kind']==='signer')g++;else{if(m['kind']==='entity'&&m['address']['toLowerCase']()===i)f++;}}}h['push'](derivePayoffFromSharing(k,'service_order_allocators'));}return{'recipient_slots':d,'guard_gated_slots':e,'direct_to_me_slots':f,'to_payer_slots':g,'payoffs':h};}async function fetchEntityPermissions(a,b){const c=new Map(),{items:d}=await batchQueryTableItems(a,{'network':b});for(const e of d){const f=e['object'];if(f?.['type']!=='TableItem_PermissionPerm')continue;const g=fld(f,'address'),h=fld(f,'perm')??[],i=h['map'](j=>typeof j==='number'?j:typeof j?.['index']==='number'?j['index']:null)['filter'](j=>j!==null);if(g)c['set'](g,i);}return c;}function toWorkflowSubgraph(a,b){return workflowSubgraphFromRows(a,b);}export async function handleParticipationRadar(a){if(!a['radar_account'])throw new Error('\x27radar_account\x27\x20is\x20required\x20for\x20participation_radar');if(!a['radar_targets']||a['radar_targets']['length']===0x0)throw new Error('\x27radar_targets\x27\x20(1-20\x20in-flight\x20orders)\x20is\x20required\x20for\x20participation_radar');const b=a['context_network']??await Config['Instance']()['network_get'](),d=a['radar_include_alerts']??!![],f=[],g=await resolveAddress(a['radar_account'],'radar_account'),h=await Promise['all'](a['radar_targets']['map'](async K=>({'progress':await resolveAddress(K['progress'],'progress'),'order':K['order']?await resolveAddress(K['order'],'order'):undefined}))),i=h['flatMap'](K=>K['order']?[K['progress'],K['order']]:[K['progress']]),j=await batchQueryObjectsByIds(i,b),k=new Map();for(const K of j){const L=fld(K,'object');if(L)k['set'](L,K);}const l=new Map(),m=new Map();for(const M of h){const N=k['get'](M['progress']);if(!N){f['push']('Progress\x20'+M['progress']+'\x20not\x20found\x20on\x20'+b+'\x20—\x20target\x20skipped.');continue;}l['set'](M['progress'],N);if(M['order']){const O=k['get'](M['order']);if(O)m['set'](M['order'],O);else f['push']('Order\x20'+M['order']+'\x20not\x20found\x20on\x20'+b+'\x20—\x20order-holder\x20detection\x20disabled\x20for\x20'+M['progress']+'.');}}h['length']>0x0&&l['size']===0x0&&f['push']('NETWORK\x20MISMATCH\x20SUSPECTED:\x200/'+h['length']+'\x20radar\x20targets\x20exist\x20on\x20network=\x27'+b+'\x27.\x20'+'These\x20objects\x20most\x20likely\x20live\x20on\x20a\x20different\x20network\x20—\x20re-run\x20with\x20the\x20matching\x20\x27network\x27\x20parameter.');const q=[...new Set([...l['values']()]['map'](P=>fld(P,'machine'))['filter'](P=>!!P))],s=[...new Set([...m['values']()]['map'](P=>fld(P,'service'))['filter'](P=>!!P))],u=[...new Set([...m['values']()]['flatMap'](P=>{const Q=fld(P,'dispute');return Array['isArray'](Q)?Q:[];}))],w=[...new Set([...m['values']()]['map'](P=>fld(P,'allocation'))['filter'](P=>!!P&&P['startsWith']('0x')))],x=new Map(),y=new Map(),z=new Map(),A=new Map(),B=new Map();await Promise['all']([...q['map'](async P=>{try{const [Q,R]=await Promise['all']([batchQueryObjectsByIds([P],b),fetchMachineNodes(P,b,!![])]);if(Q[0x0])x['set'](P,Q[0x0]);y['set'](P,toWorkflowSubgraph(R,P));}catch(S){f['push']('Machine\x20'+P+'\x20fetch\x20failed:\x20'+S['message']+'\x20—\x20workflow\x20unknown\x20for\x20its\x20orders.');}}),((async()=>{if(s['length']===0x0)return;try{const P=await batchQueryObjectsByIds(s,b);for(const Q of P){const R=fld(Q,'object');if(R)z['set'](R,Q);}}catch(S){f['push']('Service\x20query\x20failed:\x20'+S['message']+'\x20—\x20compensation/reward\x20context\x20degraded.');}})()),((async()=>{if(u['length']===0x0)return;try{const P=await batchQueryObjectsByIds(u,b);for(const Q of P){const R=fld(Q,'object');if(R)A['set'](R,Q);}}catch(S){f['push']('Arb\x20query\x20failed:\x20'+S['message']+'\x20—\x20compensation\x20claim\x20detection\x20disabled.');}})()),((async()=>{if(w['length']===0x0)return;try{const P=await batchQueryObjectsByIds(w,b);for(const Q of P){const R=fld(Q,'object');if(R)B['set'](R,Q);}}catch(S){f['push']('Allocation\x20pool\x20query\x20failed:\x20'+S['message']+'\x20—\x20fund-state\x20advice\x20degraded\x20to\x20template\x20level.');}})())]);const C=new Map(),D=[...new Set(q['map'](P=>fld(x['get'](P),'permission'))['filter'](P=>!!P))],E=new Map();await Promise['all'](D['map'](async P=>{try{const [Q,R]=await Promise['all']([batchQueryObjectsByIds([P],b),fetchEntityPermissions(P,b)]),S=Q[0x0];E['set'](P,{'address':P,'entity_count':fld(S,'entity_count'),'perm_remark':fld(S,'perm_remark'),'entityPermissions':R,'owner':fld(S,'builder')});}catch(T){f['push']('Permission\x20'+P+'\x20fetch\x20failed:\x20'+T['message']+'\x20—\x20operator\x20permission\x20matching\x20degraded.');}}));for(const P of q){const Q=fld(x['get'](P),'permission');if(Q&&E['has'](Q))C['set'](P,E['get'](Q));}let F=0x0;const G=new Map();try{const R=await watch_conversations({'account':g,'unreadOnly':!![],'previewMessageCount':0x0,'skipAutoMarkViewed':!![]}),S=Array['isArray'](R)?R:R?.['conversations']??[];for(const T of S){const U=T?.['peerAddress'],V=typeof T?.['unreadCount']==='number'?T['unreadCount']:0x0;typeof U==='string'&&V>0x0&&(G['set'](U['toLowerCase'](),V),F+=V);}}catch{f['push']('Messenger\x20unread\x20unavailable\x20(radar\x20account\x20is\x20not\x20a\x20local\x20messenger\x20account,\x20or\x20messenger\x20storage\x20offline)\x20'+'—\x20unread_messages_total\x20reported\x20as\x200.');}const H=[],I=Date['now']();for(const W of h){const X=l['get'](W['progress']);if(!X)continue;const Y=W['order']?m['get'](W['order']):undefined,Z=fld(X,'machine'),a0=fld(X,'current')??'',a1=fld(X,'namedOperator')??[],a2={};for(const ai of a1){if(ai?.['name'])a2[ai['name']]=Array['isArray'](ai['operators'])?ai['operators']:[];}const a3=Y?fld(Y,'service'):undefined,a4=a3?z['get'](a3):undefined;let a5;const a6=Y?fld(Y,'builder'):undefined;if(Y&&a6===g){const aj=fld(Y,'dispute')??[];for(const ak of aj){const al=A['get'](ak);if(!al)continue;const am=fld(al,'indemnity');if(am){a5={'arbitration':fld(al,'arbitration')??ak,'note':'Arbitration\x20verdict\x20recorded\x20an\x20indemnity\x20(Arb\x20'+ak+').\x20'+'Claim\x20via\x20order\x20op=\x27arb_claim_compensation\x27\x20—\x20paid\x20directly\x20from\x20the\x20Service\x20compensation_fund.\x20'+'(Claimed-status\x20is\x20not\x20readable\x20from\x20the\x20Arb\x20object;\x20the\x20contract\x20rejects\x20double-claims.)'};break;}}}const a7=isConsequenceNode(a0,'completed'),a8=isConsequenceNode(a0,'refunded'),a9=[];if(a4&&a6===g){if(a8)f['push']('Rewards\x20suppressed\x20for\x20order\x20'+(W['order']??W['progress'])+':\x20the\x20order\x20sits\x20on\x20a\x20refund/exception\x20'+('terminal\x20node\x20('+(a0||'unknown')+'),\x20so\x20Service\x20rewards\x20are\x20not\x20advertised\x20as\x20claimable\x20against\x20it.'));else{const an=fld(a4,'rewards')??[];for(const ao of an){a9['push']({'address':ao,'description':'Service\x20reward\x20'+ao+'\x20(guard-gated\x20—\x20eligibility\x20verified\x20at\x20claim\x20time)'});}}}let aa=0x0;if(G['size']>0x0){const ap=new Set();if(a6)ap['add'](a6['toLowerCase']());for(const aq of Object['values'](a2)){for(const ar of aq)ap['add'](ar['toLowerCase']());}ap['delete'](g['toLowerCase']());for(const as of ap){aa+=G['get'](as)??0x0;}}const ab={'account':g,'progress_address':W['progress'],'order_address':W['order'],'current_node':a0,'order_holder':a6,'workflow':Z?y['get'](Z):undefined,'permission':Z?C['get'](Z)??null:null,'named_accounts':a2,'claimable_rewards':a9['length']>0x0?a9:undefined,'pending_compensation':a5,'rating_pending':a7&&a6===g,'review_summary':a['radar_review_summary'],'unread_messages':aa>0x0?aa:undefined,'last_progress_at':fld(X,'current_time')??undefined,'now':I},ac=analyzeOrderParticipation(ab),ad=(fld(a4,'arbitrations')??[])['length']>0x0,ae=a7?'completed':a8?'refunded':null,af=ab['last_progress_at']!=null?(I-ab['last_progress_at'])/0x36ee80:undefined,ag=summarizeAllocation(fld(a4,'order_allocators'),g);if(ac['perspective']==='merchant')ac['interest_analysis']=analyzeMerchantInterest({'account':g,'current_node':a0,'operable':ac['operable'],'waiting_on':ac['waiting_on'],'order_amount':balanceStr(fld(Y,'amount')),'token_type':balanceToken(fld(Y,'amount')),'allocation':ag,'compensation_fund':balanceStr(fld(a4,'compensation_fund')),'arbitration_bound':ad,'rewards_count':(fld(a4,'rewards')??[])['length'],'stalled_hours':af,'terminal':ae,'unread_messages':aa>0x0?aa:undefined});else{if(ac['perspective']==='supplier')ac['interest_analysis']=analyzeSupplierInterest({'account':g,'current_node':a0,'operable':ac['operable'],'waiting_on':ac['waiting_on'],'order_amount':balanceStr(fld(Y,'amount')),'token_type':balanceToken(fld(Y,'amount')),'arbitration_bound':ad,'compensation_fund':balanceStr(fld(a4,'compensation_fund')),'allocation_payoff':ag?.['payoffs'],'terminal':ae,'stalled_hours':af,'unread_messages':aa>0x0?aa:undefined});else{if(ac['perspective']==='collaborator')ac['interest_analysis']=analyzeCollaboratorInterest({'account':g,'current_node':a0,'operable':ac['operable'],'waiting_on':ac['waiting_on'],'collaborator_kind':ac['collaborator_kind'],'arbitration_bound':ad,'allocation_payoff':ag?.['payoffs'],'terminal':ae,'stalled_hours':af,'unread_messages':aa>0x0?aa:undefined});else ac['perspective']==='customer'&&(ac['interest_analysis']=analyzeCustomerInterest({'account':g,'current_node':a0,'operable':ac['operable'],'waiting_on':ac['waiting_on'],'order_amount':balanceStr(fld(Y,'amount')),'token_type':balanceToken(fld(Y,'amount')),'compensation_fund':balanceStr(fld(a4,'compensation_fund')),'arbitration_bound':ad,'allocation_payoff':ag?.['payoffs'],'terminal':ae,'stalled_hours':af,'unread_messages':aa>0x0?aa:undefined}));}}const ah=Y?fld(Y,'allocation'):undefined;if(Y&&ah){const at=B['get'](ah['toLowerCase']()),au=fld(Y,'dispute')??[];if(at)try{ac['fund_advice']=buildAllocationAdvice({'pool':{'address':ah,'balance':fld(at,'balance'),'allocators':fld(at,'allocators'),'threshold':fld(at,'threshold'),'payment':fld(at,'payment'),'for_object':fld(at,'payment_info')!==undefined?fld(at,'payment_info')?.['for_object']:fld(at,'for_object')},'order_amount':fld(Y,'amount'),'perspective':ac['perspective'],'is_order_holder':a6===g,'completed':a7,'refunded':a8,'can_act_now':ac['operable']['length']>0x0,'compensation_fund':fld(a4,'compensation_fund'),'has_dispute':au['length']>0x0});}catch(av){f['push']('Fund\x20advice\x20failed\x20for\x20'+ah+':\x20'+av['message']+'.');}else f['push']('Allocation\x20pool\x20'+ah+'\x20not\x20found\x20—\x20fund-state\x20advice\x20unavailable\x20for\x20'+W['progress']+'.');}if(d&&Y){const aw={'order_id':W['order'],'service_id':a3??'','current_node':a0||undefined,'created_at':Number(fld(Y,'time')??I)||I,'last_progress_at':fld(X,'current_time')??undefined,'now':I,'order_amount':((()=>{try{return BigInt(fld(Y,'amount')??0x0);}catch{return undefined;}})()),'compensation_balance':((()=>{try{const ax=fld(a4,'compensation_fund');return ax!=null?BigInt(ax):undefined;}catch{return undefined;}})()),'token':registryDisplayHint(extractGenericTokenType(fld(a4,'type_raw'))),'has_arbitration':(fld(a4,'arbitrations')??[])['length']>0x0,'pending_user_action':ac['operable']['some'](ax=>ax['execution_path']==='order_holder'),'completed':a7,'refunded':a8};try{const ax=monitorOrder({'current':aw,'thresholds':a['radar_monitor_thresholds']});ax['length']>0x0&&(ac['attached_alerts']=ax);}catch(ay){f['push']('Order\x20monitor\x20failed\x20for\x20'+W['order']+':\x20'+ay['message']+'.');}}H['push'](ac);}const J=aggregateRadar(H,F);return{'action':'participation_radar','account':g,'orders_analyzed':J['orders_analyzed'],'actionable':J['actionable'],'waiting':J['waiting'],'all_pending_claims':J['all_pending_claims'],'unread_messages_total':J['unread_messages_total'],'data_gaps':f,'summary':J['summary']};}
@@ -62,7 +62,7 @@ export declare function handleAggregateRisks(v: AggregateRisksInput): Promise<{
62
62
  };
63
63
  findings: import("./risk-aggregator.js").AggregatedRisk[];
64
64
  severity_summary: Record<import("./risk-aggregator.js").RiskSeverity, number>;
65
- status: "RISK_PASSED" | "RISK_BLOCKED" | "RISK_PENDING_CONFIRM" | "RISK_CANCELLED";
65
+ status: "STATIC_ANALYZERS_CLEAN" | "RISK_BLOCKED" | "RISK_PENDING_CONFIRM" | "RISK_CANCELLED";
66
66
  pending_confirmations?: Array<{
67
67
  risk_rule_id: string;
68
68
  description: string;
@@ -1 +1 @@
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};}const RISK_EVIDENCE_SCOPE='puzzle_snapshots_only';export async 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=await 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','risk_evidence_scope':RISK_EVIDENCE_SCOPE}),{'action':'aggregate_risks',...f,'evidence_scope':RISK_EVIDENCE_SCOPE,'object_grounded':![],'publish_authorized':![],'publish_authorized_reason':'This\x20aggregation\x20is\x20a\x20pure\x20transformation\x20over\x20puzzle\x20snapshots\x20and\x20planned\x20objects/operations.\x20It\x20never\x20reads\x20a\x20live\x20Service,\x20'+'Machine,\x20Guard,\x20Allocation\x20or\x20Order,\x20so\x20`status:\x20RISK_PASSED`\x20means\x20\x27no\x20finding\x20in\x20the\x20static\x20analyzers\x27,\x20NOT\x20\x27the\x20on-chain\x20'+'configuration\x20is\x20verified\x27.\x20Object-grounded\x20checks:\x20template_scan\x20(pre-deploy),\x20query_toolkit\x20service_panorama\x20/\x20onchain_objects\x20'+'(post-deploy),\x20and\x20the\x20publish-time\x20gates\x20in\x20onchain_operations.','warnings':['SCOPE:\x20'+RISK_EVIDENCE_SCOPE+'\x20—\x20nothing\x20on-chain\x20was\x20inspected.\x20Do\x20NOT\x20read\x20`status:\x20\x22'+f['status']+'\x22`\x20as\x20clearance\x20to\x20'+'publish:\x20it\x20summarises\x20static\x20analyzers\x20only.\x20Run\x20template_scan\x20before\x20deploying\x20and\x20service_panorama\x20/\x20onchain_objects\x20after,\x20'+'and\x20rely\x20on\x20the\x20publish-time\x20gates\x20in\x20onchain_operations\x20for\x20the\x20on-chain\x20configuration.',...f['warnings']],...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
+ 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};}const RISK_EVIDENCE_SCOPE='puzzle_snapshots_only';export async 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=await 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']==='STATIC_ANALYZERS_CLEAN','risk_evidence_scope':RISK_EVIDENCE_SCOPE}),{'action':'aggregate_risks',...f,'evidence_scope':RISK_EVIDENCE_SCOPE,'object_grounded':![],'publish_authorized':![],'publish_authorized_reason':'This\x20aggregation\x20is\x20a\x20pure\x20transformation\x20over\x20puzzle\x20snapshots\x20and\x20planned\x20objects/operations.\x20It\x20never\x20reads\x20a\x20live\x20Service,\x20'+'Machine,\x20Guard,\x20Allocation\x20or\x20Order,\x20so\x20`status:\x20STATIC_ANALYZERS_CLEAN`\x20means\x20\x27no\x20finding\x20in\x20the\x20static\x20analyzers\x27,\x20NOT\x20\x27the\x20on-chain\x20'+'configuration\x20is\x20verified\x27.\x20Object-grounded\x20checks:\x20template_scan\x20(pre-deploy),\x20query_toolkit\x20service_panorama\x20/\x20onchain_objects\x20'+'(post-deploy),\x20and\x20the\x20publish-time\x20gates\x20in\x20onchain_operations.','warnings':['SCOPE:\x20'+RISK_EVIDENCE_SCOPE+'\x20—\x20nothing\x20on-chain\x20was\x20inspected.\x20Do\x20NOT\x20read\x20`status:\x20\x22'+f['status']+'\x22`\x20as\x20clearance\x20to\x20'+'publish:\x20it\x20summarises\x20static\x20analyzers\x20only.\x20Run\x20template_scan\x20before\x20deploying\x20and\x20service_panorama\x20/\x20onchain_objects\x20after,\x20'+'and\x20rely\x20on\x20the\x20publish-time\x20gates\x20in\x20onchain_operations\x20for\x20the\x20on-chain\x20configuration.',...f['warnings']],...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{Config}from'@wowok/wowok/w/local';import{resolveAddress as a331a}from'../../tools/handlers/name-resolution.js';import{deriveRelationshipProfile}from'../../relationship/index.js';import{analyzeDemanderInterest}from'../../participation/demander-interest.js';import{GUARD_BINDING_REGISTRY,OWNER_RECEIVE_COGNITION}from'../../knowledge/guard-bindings.js';import{detectBridgesForObjects,summarizeBridge}from'../../knowledge/scenario-topology.js';import{SdkDataPlane,expandTopology,projectRelationshipFacts}from'../../graph/onchain/index.js';export async function resolveAddress(a,b){return a331a(a,b);}export async function handleRelationshipProfile(a){if(!a['radar_account'])throw new Error('\x27radar_account\x27\x20is\x20required\x20for\x20relationship_profile');const b=a['context_network']??await Config['Instance']()['network_get'](),c=await resolveAddress(a['radar_account'],'radar_account'),d=new SdkDataPlane(b),e=await expandTopology(d,{'network':b,'seed':c,'budget':{'maxDepth':0x4,'maxNodes':0x384,'maxRpcs':0xa0,'perKindCaps':{'eoa.permission':0x19,'permission.core_binding':0x3c,'permission.tx_binding':0x3c,'eoa.order':0x28,'service.order':0x28,'order.allocation':0x28,'demand.presenter':0x3c,'machine.node':0x78}},'edges':{'tableEdges':['permission.entity','demand.presenter','machine.node']}}),f=[...e['gaps']];for(const z of e['truncations']){f['push']('truncated\x20'+z['schema']+'\x20at\x20'+z['nodeId']+':\x20observed\x20at\x20least\x20'+z['observed']+'\x20edge(s)');}if(e['budgetExhausted']['rpcs'])f['push']('RPC\x20batch\x20budget\x20exhausted\x20—\x20topology\x20is\x20partial\x20(see\x20budget\x20settings).');if(e['budgetExhausted']['nodes'])f['push']('Node\x20budget\x20exhausted\x20—\x20topology\x20is\x20partial.');const g=projectRelationshipFacts(e,c),{machines:h,orders:i,demands:j,allocations:k,contacts:l,arbitrations:m}={'machines':g['machines']??[],'orders':g['orders']??[],'demands':g['demands']??[],'allocations':g['allocations']??[],'contacts':g['contacts']??[],'arbitrations':g['arbitrations']??[]},n=deriveRelationshipProfile(g),o=new Set();if(k['length']>0x0)o['add']('Allocation');if(j['length']>0x0)o['add']('Demand');if(h['some'](A=>(A['forwards']??[])['some'](B=>B['guard'])))o['add']('MachineForward');if(m['length']>0x0)o['add']('Arbitration');for(const A of o){const B=GUARD_BINDING_REGISTRY['filter'](D=>D['object']===A);if(B['length']===0x0)continue;const C=B['map'](D=>{const E=D['preset_kind']==='amount'&&D['object']==='Allocation'?'\x20(Rate\x20is\x20basis\x20points;\x20rates\x20must\x20complete\x2010000\x20unless\x20a\x20Surplus\x20entry\x20exists)':'';return''+D['slot']+E+'\x20['+D['preset_kind']+']\x20—\x20creator:\x20'+D['creator']['split']('\x20—\x20')[0x0]['split']('.\x20')[0x0]+';\x20user:\x20'+D['user'];})['join']('\x20|\x20');n['notes']['push']('Guard-preset\x20deep\x20context\x20on\x20the\x20'+A+'(s)\x20in\x20this\x20topology:\x20'+C+'.');}k['length']>0x0&&n['notes']['push']('Cognition\x20fixed:\x20'+OWNER_RECEIVE_COGNITION);m['some'](D=>D['object_kind']==='service')&&f['push']('Arbitration\x20service\x20voting-guard\x20member\x20resolution\x20is\x20not\x20implemented\x20yet\x20—\x20arbitration\x20services\x20contribute\x20binding\x20presence\x20only\x20(Arb\x20CASE\x20votes\x20ARE\x20parsed\x20into\x20arbitration_delegation/dispute_resolution\x20edges).');const p=['Permission'];if(i['length']>0x0)p['push']('Order');if(h['length']>0x0)p['push']('Machine','Progress');if(k['length']>0x0)p['push']('Allocation','Payment');if(j['length']>0x0)p['push']('Demand');if(m['length']>0x0)p['push']('Arbitration','Arb');if(l['length']>0x0)p['push']('Contact');if(Object['keys'](g['service_owners']??{})['length']>0x0)p['push']('Service','Guard');const q=detectBridgesForObjects(p);if(q['length']>0x0){const D=q['slice'](0x0,0x8)['map'](E=>summarizeBridge(E))['join']('\x0a-\x20');n['notes']['push']('Scenario\x20topology\x20('+q['length']+'\x20bridge(s)\x20implied\x20by\x20the\x20touched\x20objects\x20—\x20capability\x20comes\x20from\x20the\x20'+('\x22integration,\x20not\x20from\x20any\x20single\x20object):\x0a-\x20'+D));}const r=a['relation_kinds']?new Set(a['relation_kinds']):undefined,s=r?n['edges']['filter'](E=>r['has'](E['kind'])):n['edges'],u=s['reduce']((E,F)=>{return E[F['kind']]=(E[F['kind']]??0x0)+0x1,E;},{});let w=c+'\x20holds\x20'+s['length']+'\x20relationship\x20edge(s)\x20across\x20'+Object['keys'](n['by_counterparty'])['length']+'\x20counterparty(ies)'+(Object['keys'](u)['length']>0x0?':\x20'+Object['entries'](u)['map'](([E,F])=>E+'×'+F)['join'](',\x20')+'.':'.');s['length']===0x0&&f['length']>0x0&&(w+='\x20No\x20edges\x20derived\x20—\x20check\x20data_gaps\x20(the\x20account\x20may\x20have\x20no\x20on-chain\x20power\x20carriers\x20on\x20this\x20network).');const x=(E,F)=>E['toLowerCase']()===F['toLowerCase'](),y=j['filter'](E=>E['owner']&&x(E['owner'],c))['map'](E=>({'demand':E['address'],...analyzeDemanderInterest({'account':c,'demand':E['address'],'presenters':E['presenters']??[],'rewards':(E['rewards']??[])['map'](F=>({'address':F})),'guards':E['guards']??[],'open':!(E['presenters']??[])['some'](F=>F['acceptance_score']!==undefined)})}));return y['length']>0x0&&(w+='\x20Anchor\x20demands\x20'+y['length']+'\x20demand(s)\x20—\x20demander-interest\x20analysis\x20attached.'),{'action':'relationship_profile','account':c,'edges':s,'by_counterparty':n['by_counterparty'],'notes':n['notes'],'data_gaps':f,'summary':w,...y['length']>0x0?{'demander_interest':y}:{}};}
1
+ import{Config}from'@wowok/wowok/w/local';import{resolveAddress as a335a}from'../../tools/handlers/name-resolution.js';import{deriveRelationshipProfile}from'../../relationship/index.js';import{analyzeDemanderInterest}from'../../participation/demander-interest.js';import{GUARD_BINDING_REGISTRY,OWNER_RECEIVE_COGNITION}from'../../knowledge/guard-bindings.js';import{detectBridgesForObjects,summarizeBridge}from'../../knowledge/scenario-topology.js';import{SdkDataPlane,expandTopology,projectRelationshipFacts}from'../../graph/onchain/index.js';export async function resolveAddress(a,b){return a335a(a,b);}export async function handleRelationshipProfile(a){if(!a['radar_account'])throw new Error('\x27radar_account\x27\x20is\x20required\x20for\x20relationship_profile');const b=a['context_network']??await Config['Instance']()['network_get'](),c=await resolveAddress(a['radar_account'],'radar_account'),d=new SdkDataPlane(b),e=await expandTopology(d,{'network':b,'seed':c,'budget':{'maxDepth':0x4,'maxNodes':0x384,'maxRpcs':0xa0,'perKindCaps':{'eoa.permission':0x19,'permission.core_binding':0x3c,'permission.tx_binding':0x3c,'eoa.order':0x28,'service.order':0x28,'order.allocation':0x28,'demand.presenter':0x3c,'machine.node':0x78}},'edges':{'tableEdges':['permission.entity','demand.presenter','machine.node']}}),f=[...e['gaps']];for(const z of e['truncations']){f['push']('truncated\x20'+z['schema']+'\x20at\x20'+z['nodeId']+':\x20observed\x20at\x20least\x20'+z['observed']+'\x20edge(s)');}if(e['budgetExhausted']['rpcs'])f['push']('RPC\x20batch\x20budget\x20exhausted\x20—\x20topology\x20is\x20partial\x20(see\x20budget\x20settings).');if(e['budgetExhausted']['nodes'])f['push']('Node\x20budget\x20exhausted\x20—\x20topology\x20is\x20partial.');const g=projectRelationshipFacts(e,c),{machines:h,orders:i,demands:j,allocations:k,contacts:l,arbitrations:m}={'machines':g['machines']??[],'orders':g['orders']??[],'demands':g['demands']??[],'allocations':g['allocations']??[],'contacts':g['contacts']??[],'arbitrations':g['arbitrations']??[]},n=deriveRelationshipProfile(g),o=new Set();if(k['length']>0x0)o['add']('Allocation');if(j['length']>0x0)o['add']('Demand');if(h['some'](A=>(A['forwards']??[])['some'](B=>B['guard'])))o['add']('MachineForward');if(m['length']>0x0)o['add']('Arbitration');for(const A of o){const B=GUARD_BINDING_REGISTRY['filter'](D=>D['object']===A);if(B['length']===0x0)continue;const C=B['map'](D=>{const E=D['preset_kind']==='amount'&&D['object']==='Allocation'?'\x20(Rate\x20is\x20basis\x20points;\x20rates\x20must\x20complete\x2010000\x20unless\x20a\x20Surplus\x20entry\x20exists)':'';return''+D['slot']+E+'\x20['+D['preset_kind']+']\x20—\x20creator:\x20'+D['creator']['split']('\x20—\x20')[0x0]['split']('.\x20')[0x0]+';\x20user:\x20'+D['user'];})['join']('\x20|\x20');n['notes']['push']('Guard-preset\x20deep\x20context\x20on\x20the\x20'+A+'(s)\x20in\x20this\x20topology:\x20'+C+'.');}k['length']>0x0&&n['notes']['push']('Cognition\x20fixed:\x20'+OWNER_RECEIVE_COGNITION);m['some'](D=>D['object_kind']==='service')&&f['push']('Arbitration\x20service\x20voting-guard\x20member\x20resolution\x20is\x20not\x20implemented\x20yet\x20—\x20arbitration\x20services\x20contribute\x20binding\x20presence\x20only\x20(Arb\x20CASE\x20votes\x20ARE\x20parsed\x20into\x20arbitration_delegation/dispute_resolution\x20edges).');const p=['Permission'];if(i['length']>0x0)p['push']('Order');if(h['length']>0x0)p['push']('Machine','Progress');if(k['length']>0x0)p['push']('Allocation','Payment');if(j['length']>0x0)p['push']('Demand');if(m['length']>0x0)p['push']('Arbitration','Arb');if(l['length']>0x0)p['push']('Contact');if(Object['keys'](g['service_owners']??{})['length']>0x0)p['push']('Service','Guard');const q=detectBridgesForObjects(p);if(q['length']>0x0){const D=q['slice'](0x0,0x8)['map'](E=>summarizeBridge(E))['join']('\x0a-\x20');n['notes']['push']('Scenario\x20topology\x20('+q['length']+'\x20bridge(s)\x20implied\x20by\x20the\x20touched\x20objects\x20—\x20capability\x20comes\x20from\x20the\x20'+('\x22integration,\x20not\x20from\x20any\x20single\x20object):\x0a-\x20'+D));}const r=a['relation_kinds']?new Set(a['relation_kinds']):undefined,s=r?n['edges']['filter'](E=>r['has'](E['kind'])):n['edges'],u=s['reduce']((E,F)=>{return E[F['kind']]=(E[F['kind']]??0x0)+0x1,E;},{});let w=c+'\x20holds\x20'+s['length']+'\x20relationship\x20edge(s)\x20across\x20'+Object['keys'](n['by_counterparty'])['length']+'\x20counterparty(ies)'+(Object['keys'](u)['length']>0x0?':\x20'+Object['entries'](u)['map'](([E,F])=>E+'×'+F)['join'](',\x20')+'.':'.');s['length']===0x0&&f['length']>0x0&&(w+='\x20No\x20edges\x20derived\x20—\x20check\x20data_gaps\x20(the\x20account\x20may\x20have\x20no\x20on-chain\x20power\x20carriers\x20on\x20this\x20network).');const x=(E,F)=>E['toLowerCase']()===F['toLowerCase'](),y=j['filter'](E=>E['owner']&&x(E['owner'],c))['map'](E=>({'demand':E['address'],...analyzeDemanderInterest({'account':c,'demand':E['address'],'presenters':E['presenters']??[],'rewards':(E['rewards']??[])['map'](F=>({'address':F})),'guards':E['guards']??[],'open':!(E['presenters']??[])['some'](F=>F['acceptance_score']!==undefined)})}));return y['length']>0x0&&(w+='\x20Anchor\x20demands\x20'+y['length']+'\x20demand(s)\x20—\x20demander-interest\x20analysis\x20attached.'),{'action':'relationship_profile','account':c,'edges':s,'by_counterparty':n['by_counterparty'],'notes':n['notes'],'data_gaps':f,'summary':w,...y['length']>0x0?{'demander_interest':y}:{}};}
@@ -33,7 +33,7 @@ export interface RiskAggregationResult {
33
33
  };
34
34
  findings: AggregatedRisk[];
35
35
  severity_summary: Record<RiskSeverity, number>;
36
- status: "RISK_PASSED" | "RISK_BLOCKED" | "RISK_PENDING_CONFIRM" | "RISK_CANCELLED";
36
+ status: "STATIC_ANALYZERS_CLEAN" | "RISK_BLOCKED" | "RISK_PENDING_CONFIRM" | "RISK_CANCELLED";
37
37
  pending_confirmations?: Array<{
38
38
  risk_rule_id: string;
39
39
  description: string;
@@ -1 +1 @@
1
- import{ENTRYPOINT}from'@wowok/wowok';import{buildProposalGraph,buildViewport,runNodeAnalyzers}from'../../graph/onchain/index.js';import{RULE_NODE_ANALYZERS}from'../../knowledge/rule-node-analyzers.js';import{normalizeSeverity}from'../../config/severity.js';const SEVERITY_ORDER={'critical':0x0,'high':0x1,'medium':0x2,'low':0x3,'info':0x4},ALL_SEVERITIES=['critical','high','medium','low','info'];function findingToAggregatedRisk(a,b,c){const d=a['ruleId']??'?',e='\x20('+d+')',g=a['title']['endsWith'](e)?a['title']['slice'](0x0,a['title']['length']-e['length']):a['title'];return{'risk_rule_id':d,'object_type':b,'entry_id':c,'severity':normalizeSeverity(a['severity']),'message':g,'fix_suggestion':a['suggestion']??'','details':{...a['evidence']?{'field_path':a['evidence']}:{},'rule_source':a['id']['slice'](0x0,a['id']['indexOf'](':')),'proposal_node':a['path'][0x0]}};}export async function aggregateProjectRisks(a){const b=[];(!a||!a['project_prefix'])&&b['push']('input.project_prefix\x20is\x20empty');const c=a?.['puzzles']??{},d=await buildProposalGraph(c,{'network':ENTRYPOINT['Testnet']});for(const o of d['nodes']['values']()){o['proposal']&&!o['objectType']&&b['push']('No\x20analyzer\x20vocabulary\x20for\x20puzzle\x20key\x20\x27'+o['proposal']['sourceKey']+'\x27\x20—\x20key\x20skipped');}const e=buildViewport(d,d['seed'],'neutral'),g=runNodeAnalyzers(e,RULE_NODE_ANALYZERS),h=[];for(const p of g){if(p['ruleId']==null)continue;const q=p['path'][0x0]??'',r=d['nodes']['get'](q),s=r?.['proposal']?.['sourceKey']??q['replace'](/^proposal::/,'');h['push'](findingToAggregatedRisk(p,s,(a['project_prefix']??'project')+'_'+s));}sortFindings(h);const i=countBySeverity(h),j=a['severity_threshold']??'high',k=determineStatus(i,j,a['user_confirmed_high_risks']??[],h);let l;k==='RISK_PENDING_CONFIRM'&&(l=h['filter'](t=>t['severity']==='high')['filter'](t=>!(a['user_confirmed_high_risks']??[])['includes'](t['risk_rule_id']))['map'](t=>({'risk_rule_id':t['risk_rule_id'],'description':t['message'],'fix_suggestion':t['fix_suggestion'],'object_type':t['object_type'],'entry_id':t['entry_id']})));const m={};for(const t of h){const u=t['object_type'];!m[u]&&(m[u]=[]),m[u]['push']({'risk_rule_id':t['risk_rule_id'],'severity':t['severity'],'message':t['message'],'fix_suggestion':t['fix_suggestion'],'entry_id':t['entry_id']});}return{'namespace':{'prefix':a['project_prefix']??'','version':a['version']??'','industry':a['industry']??'general'},'findings':h,'severity_summary':i,'status':k,'pending_confirmations':l,'calibrated_at':Date['now'](),'fix_suggestions_grouped':m,'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],f=g=>SEVERITY_ORDER[g]<=e;if(a['high']>0x0&&f('high')){const g=d['filter'](h=>h['severity']==='high'&&!c['includes'](h['risk_rule_id']));if(g['length']>0x0)return'RISK_PENDING_CONFIRM';}if(a['medium']>0x0&&f('medium'))return'RISK_BLOCKED';if(a['low']>0x0&&f('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']),d['details']?.['proposal_node']&&b['push']('\x20\x20-\x20Evaluated\x20on\x20'+d['details']['proposal_node']+'\x20via\x20'+(d['details']['rule_source']??'unknown\x20analyzer'));}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{ENTRYPOINT}from'@wowok/wowok';import{buildProposalGraph,buildViewport,runNodeAnalyzers}from'../../graph/onchain/index.js';import{RULE_NODE_ANALYZERS}from'../../knowledge/rule-node-analyzers.js';import{normalizeSeverity}from'../../config/severity.js';const SEVERITY_ORDER={'critical':0x0,'high':0x1,'medium':0x2,'low':0x3,'info':0x4},ALL_SEVERITIES=['critical','high','medium','low','info'];function findingToAggregatedRisk(a,b,c){const d=a['ruleId']??'?',e='\x20('+d+')',g=a['title']['endsWith'](e)?a['title']['slice'](0x0,a['title']['length']-e['length']):a['title'];return{'risk_rule_id':d,'object_type':b,'entry_id':c,'severity':normalizeSeverity(a['severity']),'message':g,'fix_suggestion':a['suggestion']??'','details':{...a['evidence']?{'field_path':a['evidence']}:{},'rule_source':a['id']['slice'](0x0,a['id']['indexOf'](':')),'proposal_node':a['path'][0x0]}};}export async function aggregateProjectRisks(a){const b=[];(!a||!a['project_prefix'])&&b['push']('input.project_prefix\x20is\x20empty');const c=a?.['puzzles']??{},d=await buildProposalGraph(c,{'network':ENTRYPOINT['Testnet']});for(const o of d['nodes']['values']()){o['proposal']&&!o['objectType']&&b['push']('No\x20analyzer\x20vocabulary\x20for\x20puzzle\x20key\x20\x27'+o['proposal']['sourceKey']+'\x27\x20—\x20key\x20skipped');}const e=buildViewport(d,d['seed'],'neutral'),g=runNodeAnalyzers(e,RULE_NODE_ANALYZERS),h=[];for(const p of g){if(p['ruleId']==null)continue;const q=p['path'][0x0]??'',r=d['nodes']['get'](q),s=r?.['proposal']?.['sourceKey']??q['replace'](/^proposal::/,'');h['push'](findingToAggregatedRisk(p,s,(a['project_prefix']??'project')+'_'+s));}sortFindings(h);const i=countBySeverity(h),j=a['severity_threshold']??'high',k=determineStatus(i,j,a['user_confirmed_high_risks']??[],h);let l;k==='RISK_PENDING_CONFIRM'&&(l=h['filter'](t=>t['severity']==='high')['filter'](t=>!(a['user_confirmed_high_risks']??[])['includes'](t['risk_rule_id']))['map'](t=>({'risk_rule_id':t['risk_rule_id'],'description':t['message'],'fix_suggestion':t['fix_suggestion'],'object_type':t['object_type'],'entry_id':t['entry_id']})));const m={};for(const t of h){const u=t['object_type'];!m[u]&&(m[u]=[]),m[u]['push']({'risk_rule_id':t['risk_rule_id'],'severity':t['severity'],'message':t['message'],'fix_suggestion':t['fix_suggestion'],'entry_id':t['entry_id']});}return{'namespace':{'prefix':a['project_prefix']??'','version':a['version']??'','industry':a['industry']??'general'},'findings':h,'severity_summary':i,'status':k,'pending_confirmations':l,'calibrated_at':Date['now'](),'fix_suggestions_grouped':m,'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],f=g=>SEVERITY_ORDER[g]<=e;if(a['high']>0x0&&f('high')){const g=d['filter'](h=>h['severity']==='high'&&!c['includes'](h['risk_rule_id']));if(g['length']>0x0)return'RISK_PENDING_CONFIRM';}if(a['medium']>0x0&&f('medium'))return'RISK_BLOCKED';if(a['low']>0x0&&f('low'))return'RISK_BLOCKED';return'STATIC_ANALYZERS_CLEAN';}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']),d['details']?.['proposal_node']&&b['push']('\x20\x20-\x20Evaluated\x20on\x20'+d['details']['proposal_node']+'\x20via\x20'+(d['details']['rule_source']??'unknown\x20analyzer'));}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{Config,LocalMark,query_serviceContext,query_object_last_updated,query_affiliations,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{resolveAddress as a336a}from'../../tools/handlers/name-resolution.js';import{generateBusinessReport}from'./reverse-mapping.js';import{resolveSupplyChainGraph}from'../../knowledge/supply-chain.js';import{batchQueryObjectsByIds,fetchServiceOrders,ringWindowSaturated}from'../../graph/onchain/sdk-batch.js';import{projectExploration}from'../../graph/onchain/exploration.js';import{buildMachineGraph}from'./machine-nodes.js';import{formatMoneyAnnotation}from'./facet-money.js';function balanceStr(a){if(a===null||a===undefined)return null;if(typeof a==='bigint')return a['toString']();return String(a);}function ownerAddr(a){if(typeof a==='string')return a;const b=a;if(b&&typeof b==='object'){if(typeof b['AddressOwner']==='string')return b['AddressOwner'];if(typeof b['ObjectOwner']==='string')return b['ObjectOwner'];}return null;}function requireField(a,b){if(a===undefined||a===null)throw new Error('\x27'+b+'\x27\x20is\x20required\x20for\x20this\x20action');return a;}function summarizeGuard(a){if(!a)return null;const b=a,c=Array['isArray'](b['table'])?b['table']:[],d=c['filter'](e=>e?.['b_submission']===!![])['length'];return{'address':b['object']??'','description':b['description']??null,'rep':typeof b['rep']==='boolean'?b['rep']:null,'table_entry_count':c['length'],'submission_slot_count':d,'relies':Array['isArray'](b['relies'])?b['relies']['filter'](e=>typeof e==='string'):[],'relies_logic_and':typeof b['relies_logic_and']==='boolean'?b['relies_logic_and']:null};}function summarizePermission(a,b){if(!a)return null;const c=a,d=Array['isArray'](c['admin'])?c['admin']:[],e=d[0x0],f=typeof e==='string'?e:typeof e?.['account']==='string'?e['account']:c['builder']??null;return{'address':c['object']??'','description':c['description']??null,'builder':c['builder']??null,'owner':f,'owner_name':b?.['name']??null,'admin_count':d['length'],'entity_count':typeof c['entity_count']==='number'?c['entity_count']:null,'perm_remark':Array['isArray'](c['perm_remark'])?c['perm_remark']['map'](g=>({'index':String(g?.['index']??''),'remark':typeof g?.['remark']==='string'?g['remark']:''})):[],'um':c['um']??null,'tags':b?.['tags']??[],'updated_timestamp_ms':b?.['updated_at_ms']!=null?String(b['updated_at_ms']):null};}async function markOf(a){if(!a)return{'name':null,'tags':[],'updated_at_ms':null};try{const b=await LocalMark['Instance']()['get'](a);if(b)return{'name':b['name']??null,'tags':Array['isArray'](b['tags'])?b['tags']:[],'updated_at_ms':typeof b['updatedAt']==='number'?b['updatedAt']:null};}catch{}try{const c=await LocalMark['Instance']()['list']({'address':a}),d=c?.[0x0];if(d)return{'name':d['name']??null,'tags':Array['isArray'](d['tags'])?d['tags']:[],'updated_at_ms':typeof d['updatedAt']==='number'?d['updatedAt']:null};}catch{}return{'name':null,'tags':[],'updated_at_ms':null};}async function markOfMany(a){const b=[...new Set(a['filter'](e=>!!e))],c=await Promise['all'](b['map'](e=>markOf(e))),d=new Map();for(let e=0x0;e<b['length'];e++)d['set'](b[e],c[e]);return d;}export async function handleServicePanorama(b){const c=requireField(b['service_address'],'service_address'),d=b['context_network']??undefined;let h=d??await Config['Instance']()['network_get']();const j=[];let k=await a336a(c,'service'),l=await query_serviceContext({'service':k,'include_machine_nodes':!![],'network':h});if(!l?.['service']&&d){const a6=await Config['Instance']()['network_get']();a6&&a6!==h&&(h=a6,l=await query_serviceContext({'service':k,'include_machine_nodes':!![],'network':h}));}const m=l['service'];k=m['object']??k;const q=new Set(),w=a7=>{if(a7)q['add'](a7);};w(k),w(m['machine']),w(m['permission']),w(m['um']);for(const a7 of m['arbitrations']??[])w(a7);for(const a8 of m['rewards']??[])w(a8);for(const a9 of m['repositories']??[])w(a9);const x=l['permission'];if(x){const aa=Array['isArray'](x['admin'])?x['admin']:[];aa[0x0]&&w(typeof aa[0x0]==='string'?aa[0x0]:aa[0x0]?.['account']);if(x['builder'])w(x['builder']);}const y=await markOfMany([...q]),z=y['get'](k)??{'name':null,'tags':[],'updated_at_ms':null},A=z['name'],B=ab=>ab?y['get'](ab)??{'name':null,'tags':[],'updated_at_ms':null}:{'name':null,'tags':[],'updated_at_ms':null};let C=null;const D=l['machine'],E=l['machine_nodes']??[];if(D||E['length']>0x0){const {nodes:ab,edges:ac}=buildMachineGraph(E);C={'address':D?.['object']??m['machine']??'','name':B(D?.['object']??m['machine'])['name'],'description':D?.['description']??null,'published':typeof D?.['bPublished']==='boolean'?D['bPublished']:null,'paused':typeof D?.['bPaused']==='boolean'?D['bPaused']:null,'node_count':typeof D?.['node_count']==='number'?D['node_count']:null,'consensus_repositories':Array['isArray'](D?.['consensus_repositories'])?D['consensus_repositories']:[],'nodes':ab,'edges':ac};}let F=null;try{const ad=await query_object_last_updated({'object':k,'network':h});ad?.['timestamp_ms']&&(F={'timestamp_ms':ad['timestamp_ms'],'digest':ad['digest']??null,'sender':ad['sender']??null});}catch{j['push']('onchain_last_updated:\x20query\x20failed\x20(non-blocking)');}let G=null;try{G=await resolveSupplyChainGraph(k,h);}catch{j['push']('supply_chain:\x20resolution\x20failed\x20(non-blocking)');}let H=null,I=[];const J=m?.['type_raw']??m?.['type']??'',K=J['match'](/<(.+)>$/),L=K?K[0x1]:null,M=(ae,af)=>{const ag=[];return ae?ag['push']('Pricing\x20&\x20settlement\x20coin:\x20'+ae+'\x20—\x20the\x20Service\x27s\x20generic\x20T,\x20FIXED\x20at\x20creation\x20(immutable).\x20Sales\x20prices\x20and\x20order\x20amounts\x20are\x20denominated\x20in\x20this\x20exact\x20token;\x20buyers\x20must\x20hold\x20it\x20to\x20order.'):ag['push']('Pricing\x20&\x20settlement\x20coin:\x20unavailable\x20from\x20the\x20Service\x20type\x20(no\x20generic\x20found)\x20—\x20treat\x20amounts\x20as\x20raw\x20smallest\x20units.'),ag['push']('To\x20price\x20in\x20a\x20different\x20token,\x20publish\x20a\x20NEW\x20Service\x20with\x20type_parameter\x20set\x20to\x20that\x20token\x27s\x20full\x20type\x20—\x20this\x20one\x20keeps\x20settling\x20in\x20its\x20coin.'),/testnet/i['test'](af)?ag['push']('Testnet\x20has\x20ONLY\x20WOW\x20(no\x20stablecoins\x20are\x20bridged)\x20—\x20testnet\x20services\x20stay\x20WOW-denominated;\x20multi-token\x20pricing\x20is\x20a\x20mainnet\x20capability.'):ag['push']('Mainnet\x20accepts\x20bridged\x20tokens\x20(USDT\x20/\x20USDC\x20/\x20ETH\x20/\x20WBTC\x20/\x20WOW):\x20buyers\x20bridge\x20them\x20from\x20Ethereum\x20via\x20the\x20cross-chain\x20bridge.\x20Query\x20wowok_buildin_info\x20info=\x27mainnet\x20bridge\x20tokens\x27\x20for\x20each\x20token\x27s\x20exact\x20type\x20tag\x20(wowTypeTag)\x20to\x20use\x20in\x20type_parameter\x20when\x20publishing.'),ag['join']('\x20');},N=ae=>formatMoneyAnnotation(ae,L,h),O=0x3,P=0x32;let Q=null;try{const ae=await fetchServiceOrders(k,h,!![]),af=Array['isArray'](ae?.['items'])?ae['items']:[],ag=af['slice'](-P),ah=af['slice'](-O),ai=ag['map'](aG=>typeof aG?.['who']==='string'?aG['who']:'')['filter'](aG=>aG!==''),aj=ah['map'](aG=>typeof aG?.['who']==='string'?aG['who']:'')['filter'](aG=>aG!==''),ak=new Map();try{if(ai['length']>0x0){const aG=await batchQueryObjectsByIds(ai,h,!![]);for(const aH of aG){aH&&aH['type']===ObjectType['Order']&&ak['set'](aH['object'],aH);}}}catch{j['push']('recent_orders:\x20order\x20details\x20unavailable\x20(non-blocking)');}const al=new Map();try{const aI=new Set();for(const aJ of ak['values']()){if(aJ?.['allocation'])aI['add'](aJ['allocation']);}if(aI['size']>0x0){const aK=await batchQueryObjectsByIds(Array['from'](aI),h,!![]);for(const aL of aK){if(!aL?.['object'])continue;if(aL['type']===ObjectType['Allocation']){const aM=Number(aL?.['balance']??0x0);al['set'](aL['object'],Number['isFinite'](aM)&&aM===0x0?'allocated':'pending');}}}}catch{j['push']('recent_orders:\x20allocation\x20details\x20unavailable\x20(non-blocking)');}const am=new Map(),an=new Map();try{const aN=new Set();for(const aO of aj){const aP=ak['get'](aO);if(aP?.['progress'])aN['add'](aP['progress']);}if(aN['size']>0x0){const aQ=await batchQueryObjectsByIds(Array['from'](aN),h,!![]);for(const aR of aQ){if(!aR?.['object'])continue;if(aR['type']===ObjectType['Progress']){const aS=aR?.['current'];am['set'](aR['object'],typeof aS==='string'&&aS!==''?aS:null),an['set'](aR['object'],Number(aR?.['current_time'])||null);}}}}catch{j['push']('recent_orders:\x20progress\x20details\x20unavailable\x20(non-blocking)');}I=Array['from'](ak['values']())['map'](aT=>({'id':aT['object'],'created_at_ms':Number(aT['time'])||undefined,'claimed_by':aT['claimed_by']??null,'current_node':aT['progress']?am['get'](aT['progress'])??null:null}));const ao=new Map();try{const aT=aj,aU=await Promise['allSettled'](aT['map'](aV=>query_object_last_updated({'object':aV,'network':h})));for(let aV=0x0;aV<aT['length'];aV++){const aW=aU[aV];ao['set'](aT[aV],aW['status']==='fulfilled'&&aW['value']?.['timestamp_ms']?Number(aW['value']['timestamp_ms'])||null:null);}}catch{j['push']('recent_orders:\x20order\x20updated\x20times\x20unavailable\x20(non-blocking)');}const ap=await Promise['all'](ah['map'](async aX=>{const aY=typeof aX?.['who']==='string'?aX['who']:'',aZ=ak['get'](aY),b0=aZ?.['amount']!==null&&aZ?.['amount']!==undefined?String(aZ['amount']):'',b1=await N(b0);return{'order':aY,'time':typeof aX?.['time']==='number'?aX['time']:0x0,'updated_ms':ao['get'](aY)??null,'amount':b0,'amount_display':b1['display'],'amount_tip':b1['tip'],'progress':aZ?.['progress']??null,'allocation':aZ?.['allocation']??null,'disputes':Array['isArray'](aZ?.['dispute'])?aZ['dispute']:[],'agent':Array['isArray'](aZ?.['agent'])?aZ['agent']:[],'owner':ownerAddr(aZ?.['builder']??aZ?.['owner']),'claimed_by':aZ?.['claimed_by']??null,'required_info':aZ?.['required_info']??null,'progress_next':aZ?.['progress']?am['get'](aZ['progress'])??null:null,'progress_since':aZ?.['progress']?an['get'](aZ['progress'])??null:null,'allocation_state':aZ?.['allocation']?al['get'](aZ['allocation'])??'pending':'none','bought':await Promise['all']((Array['isArray'](aZ?.['items'])?aZ['items']:[])['map'](async b2=>({'name':String(b2?.['name']??''),'price_display':(await N(b2?.['price']!==null&&b2?.['price']!==undefined?String(b2['price']):null))['display'],'quantity':String(b2?.['quantity']??'0'),'wip_hash':String(b2?.['wip_hash']??'')})))};})),aq=ap['filter'](aX=>aX['order']!==''),ar=ai['map'](aX=>ak['get'](aX))['filter'](aX=>!!aX);let as=0x0n,at=0x0,au=0x0,av=0x0,aw=0x0,ax=0x0,ay=null,az=null;for(const aX of ar){const aY=aX?.['amount']!==null&&aX?.['amount']!==undefined?String(aX['amount']):'';/^\d+$/['test'](aY)&&(as+=BigInt(aY),at++);if(Array['isArray'](aX?.['dispute'])&&aX['dispute']['length']>0x0)au++;const aZ=aX?.['allocation']?al['get'](aX['allocation'])??'pending':'none';if(aZ==='pending')av++;else{if(aZ==='allocated')aw++;else ax++;}}for(const b0 of ag){if(typeof b0?.['time']==='number'){if(ay===null||b0['time']<ay)ay=b0['time'];if(az===null||b0['time']>az)az=b0['time'];}}const aA=at>0x0?as['toString']():null,aB=aA!==null?await N(aA):null,aC=af['length'],aD=ae?.['ring_saturated']??ringWindowSaturated(aC),aE=aq['length'],aF='Analyze\x20ALL\x20orders\x20of\x20Service\x20'+k+'\x20('+h+')\x20one\x20by\x20one,\x20newest\x20first.\x20'+('The\x20orders\x20live\x20in\x20the\x20Service\x27s\x20FIFO\x20tx-linker\x20window\x20holding\x20at\x20most\x205200\x20newest\x20entries\x20—\x20the\x20retained\x20count\x20is\x20a\x20lower\x20bound\x20when\x20the\x20window\x20is\x20saturated\x20(currently\x20'+aC+(aD?',\x20saturated':'')+').\x20')+'For\x20each\x20order\x20call\x20object_panorama\x20with\x20the\x20order\x27s\x20FULL\x200x\x20address\x20(collect\x20the\x20addresses\x20from\x20the\x20same\x20reverse-index\x20source;\x20work\x20newest-first)\x20and\x20render\x20ONE\x20table\x20row\x20per\x20order:\x20'+'order\x20address\x20chip\x20(first\x20column)\x20|\x20created\x20+\x20last-updated\x20(local\x20dates)\x20|\x20amount\x20(the\x20display\x20value\x20with\x20its\x20token\x20symbol\x20—\x20never\x20reconvert\x20from\x20raw)\x20|\x20fund\x20state\x20(none\x20/\x20pending\x20/\x20allocated)\x20|\x20current\x20machine\x20node\x20|\x20disputes\x20(each\x20dispute\x20case\x20as\x20its\x20own\x20address\x20chip\x20ON\x20THE\x20SAME\x20ROW\x20—\x20an\x20order\x27s\x20progress,\x20allocation\x20and\x20arb\x20cases\x20are\x20its\x20children\x20and\x20are\x20never\x20split\x20into\x20a\x20separate\x20flat\x20list)\x20|\x20buyer\x20address\x20chip.\x20'+'Close\x20with\x20the\x203\x20most\x20valuable\x20patterns\x20across\x20the\x20rows\x20(amount\x20distribution,\x20stuck\x20or\x20paused\x20orders,\x20dispute\x20rate).\x20Orders\x20only\x20—\x20do\x20not\x20re-analyze\x20the\x20Service\x20itself.';Q={'count':aC,'window_saturated':aD,'preview_truncated':aC>aE,'stats':{'scope_count':ar['length'],'scoped':ar['length']<aC,'amount_sum_raw':aA,'amount_sum_display':aB?.['display']??null,'amount_sum_tip':aB?.['tip']??null,'amount_known_count':at,'disputed_order_count':au,'allocation_pending_count':av,'allocation_allocated_count':aw,'allocation_none_count':ax,'first_created_ms':ay,'last_created_ms':az},...aC>aE?{'drilldown':{'total_count':aC,'analyzed_count':aE,'stats_scope_count':ar['length'],'prompt':aF}}:{},'items':aq};}catch{j['push']('recent_orders:\x20reverse-index\x20query\x20failed\x20(non-blocking)');}try{const b1=[m,l['machine'],l['buy_guard'],...l['allocator_guards']??[]]['filter'](Boolean);H=generateBusinessReport({'objects':b1,'machine_nodes':E['map'](b2=>({'name':b2['name']})),'machine_edges':C?.['edges']?C['edges']['map'](b2=>({'from':b2['from'],'to':b2['to']})):undefined,'orders':I['length']>0x0?I:undefined,'now_ms':Date['now']()});}catch{j['push']('business_report:\x20generation\x20failed\x20(non-blocking)');}const R=[];try{const b2=await query_affiliations({'address':k,'no_cache':!![],'network':h}),b3=new Set(),b4=new Map();for(const b6 of b2?.['entries']??[]){const b7=typeof b6?.['who']==='string'?b6['who']:'';if(!b7||b3['has'](b7))continue;b3['add'](b7);const b8=objectTypeFromAddress(b7);if(!b8)continue;if(b8===ObjectType['Order'])continue;const b9=String(b8);let ba=b4['get'](b9);!ba&&(ba=[],b4['set'](b9,ba)),ba['push']({'address':b7,'type_label':b9,'name':B(b7)['name'],'time':typeof b6?.['time']==='number'?b6['time']:null,'via':typeof b6?.['table']==='string'?b6['table']:null});}const b5=['Progress','Allocation','Payment','Guard'];for(const bb of b5){const bc=b4['get'](bb);bc&&bc['length']>0x0&&(R['push']({'type_label':bb,'items':bc}),b4['delete'](bb));}for(const [bd,be]of b4){if(be['length']>0x0)R['push']({'type_label':bd,'items':be});}}catch{j['push']('related:\x20global-table\x20lookup\x20failed\x20(non-blocking)');}const S=new Set(),T=bf=>{typeof bf==='string'&&/^0x[0-9a-fA-F]{40,64}$/['test'](bf)&&S['add'](bf['toLowerCase']());};T(m['buy_guard']);for(const bf of E){for(const bg of bf?.['pairs']??[]){for(const bh of bg?.['forwards']??[])T(bh?.['guard']);}}for(const bi of m['order_allocators']?.['allocators']??[])T(bi?.['guard']);for(const bj of l['allocator_guards']??[])T(bj?.['object']);for(const bk of Object['values'](l['referenced']??{})){const bl=bk;if(!bl||typeof bl!=='object')continue;if(bl['type']===ObjectType['Reward']){for(const bm of bl['guards']??[])T(bm?.['guard']);}if(bl['type']===ObjectType['Treasury']){for(const bn of bl['external_withdraw_guard']??[])T(bn?.['guard']);for(const bo of bl['external_deposit_guard']??[])T(bo?.['guard']);}(bl['type']===ObjectType['Arbitration']||bl['type']===ObjectType['Arb'])&&T(bl['voting_guard']);}const U=R['find'](bp=>bp['type_label']===String(ObjectType['Guard']));if(U){U['items']=U['items']['filter'](bp=>!S['has'](bp['address']['toLowerCase']()));if(U['items']['length']===0x0)R['splice'](R['indexOf'](U),0x1);else{const bp=U['items'];try{const bq=await batchQueryObjectsByIds(bp['map'](bs=>bs['address']),h,!![]),br=new Map();for(const bs of bq){if(bs?.['object'])br['set'](String(bs['object'])['toLowerCase'](),bs);}for(const bt of bp){const bu=br['get'](bt['address']['toLowerCase']());if(!bu){bt['explanation']=null;continue;}const bv=Array['isArray'](bu['table'])?bu['table']:[],bw=[];let bx=0x0;for(const bz of bv){if(bz?.['b_submission']===!![]){bx++;continue;}bz?.['value_type']==='Address'&&typeof bz?.['value']==='string'&&bz['value']['startsWith']('0x')&&bw['push'](bz['value']);}const by=bw['some'](bA=>bA['toLowerCase']()===k['toLowerCase']());bt['explanation']={'description':typeof bu['description']==='string'?bu['description']:null,'table_refs':bw,'references_this_service':by,'submission_slots':bx,'note':by?'One-off\x20verification\x20guard:\x20NOT\x20mounted\x20on\x20any\x20host\x20field;\x20its\x20table\x20carries\x20this\x20Service\x20as\x20an\x20on-chain\x20constant\x20(the\x20affiliation\x20is\x20written\x20at\x20creation).\x20It\x20acts\x20only\x20when\x20submitted\x20inside\x20a\x20passport\x20at\x20runtime.':'Guard\x20surfaced\x20by\x20the\x20affiliation\x20window\x20only;\x20not\x20mounted\x20on\x20any\x20host\x20field\x20reachable\x20from\x20this\x20panorama.\x20It\x20acts\x20only\x20when\x20referenced\x20at\x20runtime\x20(passport\x20submission\x20or\x20a\x20host\x20outside\x20this\x20view).'};}}catch{j['push']('related:\x20unbound-guard\x20explanation\x20unavailable\x20(non-blocking)');}}}const V=new Map();for(const bA of l['allocator_guards']??[]){const bB=bA;if(bB?.['object'])V['set'](String(bB['object'])['toLowerCase'](),bB);}const W=[];for(const bC of Array['isArray'](m['sales'])?m['sales']:[]){const bD=balanceStr(bC?.['price']),bE=await N(bD);W['push']({'name':typeof bC?.['name']==='string'?bC['name']:'','price':bD,'price_display':bE['display'],'price_tip':bE['tip'],'stock':balanceStr(bC?.['stock']),'suspension':bC?.['suspension']===!![],'wip':typeof bC?.['wip']==='string'?bC['wip']:'','wip_hash':typeof bC?.['wip_hash']==='string'?bC['wip_hash']:''});}const X=bF=>bF===0x0?'amount':bF===0x2?'surplus':'rate',Y=bF=>{const bG=bF?.['who'];if(bG&&typeof bG==='object'&&'Entity'in bG){const bH=bG['Entity'],bI=typeof bH==='string'?bH:typeof bH?.['name_or_address']==='string'?bH['name_or_address']:null;return{'who':bI?'Entity\x20'+bI:'Entity','entity':bI&&/^0x[0-9a-fA-F]{6,64}$/['test'](bI)?bI:null,'mode':X(bF?.['mode']),'value':balanceStr(bF?.['sharing'])};}if(bG&&typeof bG==='object'&&'GuardIdentifier'in bG)return{'who':'Guard\x20identifier\x20#'+bG['GuardIdentifier'],'entity':null,'mode':X(bF?.['mode']),'value':balanceStr(bF?.['sharing'])};return{'who':'Signer','entity':null,'mode':X(bF?.['mode']),'value':balanceStr(bF?.['sharing'])};},Z=m['order_allocators']?{'description':m['order_allocators']['description']??'','threshold':balanceStr(m['order_allocators']['threshold']),'allocators':(m['order_allocators']['allocators']??[])['map'](bF=>({'guard':bF['guard'],'sharing_count':Array['isArray'](bF['sharing'])?bF['sharing']['length']:0x0,'sharing':(Array['isArray'](bF['sharing'])?bF['sharing']:[])['map'](Y),'max':balanceStr(bF['max']??null),'guard_summary':summarizeGuard(V['get'](String(bF['guard']??'')['toLowerCase']()))}))}:null,a0=[];{const bF=new Map();for(const bG of m['order_allocators']?.['allocators']??[]){for(const bH of Array['isArray'](bG['sharing'])?bG['sharing']:[]){const bI=Y(bH);if(bI['entity']){const bJ=bI['entity']['toLowerCase'](),bK=bF['get'](bJ)??{'raw':bI['entity'],'guards':[]};bK['guards']['push'](bG['guard']??''),bF['set'](bJ,bK);}}}if(bF['size']>0x0)try{const bL=await batchQueryObjectsByIds([...bF['keys']()],h,!![]),bM=new Map();for(const bN of bL){if(bN?.['object'])bM['set'](String(bN['object'])['toLowerCase'](),bN);}for(const [bO,bP]of bF){const bQ=bM['get'](bO),bR='order_allocators\x20sharing\x20of\x20allocator\x20guard\x20'+bP['guards'][0x0];if(bQ&&bQ['permission']!==undefined){const bS=balanceStr(bQ['balance']),bT=await N(bS);a0['push']({'address':String(bQ['object']),'kind':'treasury','description':typeof bQ['description']==='string'?bQ['description']:null,'permission':typeof bQ['permission']==='string'?bQ['permission']:null,'balance':bS,'balance_display':bT['display'],'balance_tip':bT['tip'],'external_deposit_guard_count':Array['isArray'](bQ['external_deposit_guard'])?bQ['external_deposit_guard']['length']:null,'external_withdraw_guard_count':Array['isArray'](bQ['external_withdraw_guard'])?bQ['external_withdraw_guard']['length']:null,'via':bR});}else a0['push']({'address':bP['raw'],'kind':'account','description':null,'permission':null,'balance':null,'balance_display':null,'balance_tip':null,'external_deposit_guard_count':null,'external_withdraw_guard_count':null,'via':bR});}}catch{j['push']('income_recipients:\x20Sharing\x20entity\x20read\x20failed\x20(non-blocking)');}}const a1=summarizePermission(l['permission'],B(m['permission'])),a2=a1?.['owner']??F?.['sender']??null,a3=a2?await markOf(a2):null,a4=await N(balanceStr(m['compensation_fund'])),a5=projectExploration([],{'truncations':[],'budgetExhausted':{},'dataGaps':j});return{'action':'service_panorama','network':h,'service':{'address':k,'name':A,'description':m['description']??'','location':m['location']??'','published':m['bPublished']===!![],'paused':m['bPaused']===!![],'paused_time':typeof m['paused_time']==='number'?m['paused_time']:typeof m['paused_time']==='string'&&/^\d+$/['test'](m['paused_time'])?Number(m['paused_time']):null,'setting_lock_duration':balanceStr(m['setting_lock_duration']),'customer_required':Array['isArray'](m['customer_required'])?m['customer_required']:[],'compensation_fund':balanceStr(m['compensation_fund']),'compensation_fund_display':a4['display'],'compensation_fund_tip':a4['tip'],'sales':W,'machine':m['machine']??null,'buy_guard':m['buy_guard']??null,'permission':m['permission']??'','um':m['um']??null,'arbitrations':Array['isArray'](m['arbitrations'])?m['arbitrations']:[],'rewards':Array['isArray'](m['rewards'])?m['rewards']:[],'repositories':Array['isArray'](m['repositories'])?m['repositories']:[],'order_allocators':Z,'income_recipients':a0,'payment_token':{'coin_type':L,'guidance':M(L,h)},'onchain_last_updated':F,'tags':z['tags']??[],'owner':a2,'owner_name':a3?.['name']??null},'machine_graph':C,'buy_guard':summarizeGuard(l['buy_guard']),'permission':a1,'related':{'groups':R},'supply_chain':G,'business_report':H,'recent_orders':Q,'data_gaps':j,...a5['open_questions']['length']>0x0?{'exploration':a5}:{}};}
1
+ import{Config,LocalMark,query_serviceContext,query_object_last_updated,query_affiliations,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{resolveAddress as a340a}from'../../tools/handlers/name-resolution.js';import{generateBusinessReport}from'./reverse-mapping.js';import{resolveSupplyChainGraph}from'../../knowledge/supply-chain.js';import{batchQueryObjectsByIds,fetchServiceOrders,ringWindowSaturated}from'../../graph/onchain/sdk-batch.js';import{projectExploration}from'../../graph/onchain/exploration.js';import{buildMachineGraph}from'./machine-nodes.js';import{formatMoneyAnnotation}from'./facet-money.js';function balanceStr(a){if(a===null||a===undefined)return null;if(typeof a==='bigint')return a['toString']();return String(a);}function ownerAddr(a){if(typeof a==='string')return a;const b=a;if(b&&typeof b==='object'){if(typeof b['AddressOwner']==='string')return b['AddressOwner'];if(typeof b['ObjectOwner']==='string')return b['ObjectOwner'];}return null;}function requireField(a,b){if(a===undefined||a===null)throw new Error('\x27'+b+'\x27\x20is\x20required\x20for\x20this\x20action');return a;}function summarizeGuard(a){if(!a)return null;const b=a,c=Array['isArray'](b['table'])?b['table']:[],d=c['filter'](e=>e?.['b_submission']===!![])['length'];return{'address':b['object']??'','description':b['description']??null,'rep':typeof b['rep']==='boolean'?b['rep']:null,'table_entry_count':c['length'],'submission_slot_count':d,'relies':Array['isArray'](b['relies'])?b['relies']['filter'](e=>typeof e==='string'):[],'relies_logic_and':typeof b['relies_logic_and']==='boolean'?b['relies_logic_and']:null};}function summarizePermission(a,b){if(!a)return null;const c=a,d=Array['isArray'](c['admin'])?c['admin']:[],e=d[0x0],f=typeof e==='string'?e:typeof e?.['account']==='string'?e['account']:c['builder']??null;return{'address':c['object']??'','description':c['description']??null,'builder':c['builder']??null,'owner':f,'owner_name':b?.['name']??null,'admin_count':d['length'],'entity_count':typeof c['entity_count']==='number'?c['entity_count']:null,'perm_remark':Array['isArray'](c['perm_remark'])?c['perm_remark']['map'](g=>({'index':String(g?.['index']??''),'remark':typeof g?.['remark']==='string'?g['remark']:''})):[],'um':c['um']??null,'tags':b?.['tags']??[],'updated_timestamp_ms':b?.['updated_at_ms']!=null?String(b['updated_at_ms']):null};}async function markOf(a){if(!a)return{'name':null,'tags':[],'updated_at_ms':null};try{const b=await LocalMark['Instance']()['get'](a);if(b)return{'name':b['name']??null,'tags':Array['isArray'](b['tags'])?b['tags']:[],'updated_at_ms':typeof b['updatedAt']==='number'?b['updatedAt']:null};}catch{}try{const c=await LocalMark['Instance']()['list']({'address':a}),d=c?.[0x0];if(d)return{'name':d['name']??null,'tags':Array['isArray'](d['tags'])?d['tags']:[],'updated_at_ms':typeof d['updatedAt']==='number'?d['updatedAt']:null};}catch{}return{'name':null,'tags':[],'updated_at_ms':null};}async function markOfMany(a){const b=[...new Set(a['filter'](e=>!!e))],c=await Promise['all'](b['map'](e=>markOf(e))),d=new Map();for(let e=0x0;e<b['length'];e++)d['set'](b[e],c[e]);return d;}export async function handleServicePanorama(b){const c=requireField(b['service_address'],'service_address'),d=b['context_network']??undefined;let h=d??await Config['Instance']()['network_get']();const j=[];let k=await a340a(c,'service'),l=await query_serviceContext({'service':k,'include_machine_nodes':!![],'network':h});if(!l?.['service']&&d){const a6=await Config['Instance']()['network_get']();a6&&a6!==h&&(h=a6,l=await query_serviceContext({'service':k,'include_machine_nodes':!![],'network':h}));}const m=l['service'];k=m['object']??k;const q=new Set(),w=a7=>{if(a7)q['add'](a7);};w(k),w(m['machine']),w(m['permission']),w(m['um']);for(const a7 of m['arbitrations']??[])w(a7);for(const a8 of m['rewards']??[])w(a8);for(const a9 of m['repositories']??[])w(a9);const x=l['permission'];if(x){const aa=Array['isArray'](x['admin'])?x['admin']:[];aa[0x0]&&w(typeof aa[0x0]==='string'?aa[0x0]:aa[0x0]?.['account']);if(x['builder'])w(x['builder']);}const y=await markOfMany([...q]),z=y['get'](k)??{'name':null,'tags':[],'updated_at_ms':null},A=z['name'],B=ab=>ab?y['get'](ab)??{'name':null,'tags':[],'updated_at_ms':null}:{'name':null,'tags':[],'updated_at_ms':null};let C=null;const D=l['machine'],E=l['machine_nodes']??[];if(D||E['length']>0x0){const {nodes:ab,edges:ac}=buildMachineGraph(E);C={'address':D?.['object']??m['machine']??'','name':B(D?.['object']??m['machine'])['name'],'description':D?.['description']??null,'published':typeof D?.['bPublished']==='boolean'?D['bPublished']:null,'paused':typeof D?.['bPaused']==='boolean'?D['bPaused']:null,'node_count':typeof D?.['node_count']==='number'?D['node_count']:null,'consensus_repositories':Array['isArray'](D?.['consensus_repositories'])?D['consensus_repositories']:[],'nodes':ab,'edges':ac};}let F=null;try{const ad=await query_object_last_updated({'object':k,'network':h});ad?.['timestamp_ms']&&(F={'timestamp_ms':ad['timestamp_ms'],'digest':ad['digest']??null,'sender':ad['sender']??null});}catch{j['push']('onchain_last_updated:\x20query\x20failed\x20(non-blocking)');}let G=null;try{G=await resolveSupplyChainGraph(k,h);}catch{j['push']('supply_chain:\x20resolution\x20failed\x20(non-blocking)');}let H=null,I=[];const J=m?.['type_raw']??m?.['type']??'',K=J['match'](/<(.+)>$/),L=K?K[0x1]:null,M=(ae,af)=>{const ag=[];return ae?ag['push']('Pricing\x20&\x20settlement\x20coin:\x20'+ae+'\x20—\x20the\x20Service\x27s\x20generic\x20T,\x20FIXED\x20at\x20creation\x20(immutable).\x20Sales\x20prices\x20and\x20order\x20amounts\x20are\x20denominated\x20in\x20this\x20exact\x20token;\x20buyers\x20must\x20hold\x20it\x20to\x20order.'):ag['push']('Pricing\x20&\x20settlement\x20coin:\x20unavailable\x20from\x20the\x20Service\x20type\x20(no\x20generic\x20found)\x20—\x20treat\x20amounts\x20as\x20raw\x20smallest\x20units.'),ag['push']('To\x20price\x20in\x20a\x20different\x20token,\x20publish\x20a\x20NEW\x20Service\x20with\x20type_parameter\x20set\x20to\x20that\x20token\x27s\x20full\x20type\x20—\x20this\x20one\x20keeps\x20settling\x20in\x20its\x20coin.'),/testnet/i['test'](af)?ag['push']('Testnet\x20has\x20ONLY\x20WOW\x20(no\x20stablecoins\x20are\x20bridged)\x20—\x20testnet\x20services\x20stay\x20WOW-denominated;\x20multi-token\x20pricing\x20is\x20a\x20mainnet\x20capability.'):ag['push']('Mainnet\x20accepts\x20bridged\x20tokens\x20(USDT\x20/\x20USDC\x20/\x20ETH\x20/\x20WBTC\x20/\x20WOW):\x20buyers\x20bridge\x20them\x20from\x20Ethereum\x20via\x20the\x20cross-chain\x20bridge.\x20Query\x20wowok_buildin_info\x20info=\x27mainnet\x20bridge\x20tokens\x27\x20for\x20each\x20token\x27s\x20exact\x20type\x20tag\x20(wowTypeTag)\x20to\x20use\x20in\x20type_parameter\x20when\x20publishing.'),ag['join']('\x20');},N=ae=>formatMoneyAnnotation(ae,L,h),O=0x3,P=0x32;let Q=null;try{const ae=await fetchServiceOrders(k,h,!![]),af=Array['isArray'](ae?.['items'])?ae['items']:[],ag=af['slice'](-P),ah=af['slice'](-O),ai=ag['map'](aG=>typeof aG?.['who']==='string'?aG['who']:'')['filter'](aG=>aG!==''),aj=ah['map'](aG=>typeof aG?.['who']==='string'?aG['who']:'')['filter'](aG=>aG!==''),ak=new Map();try{if(ai['length']>0x0){const aG=await batchQueryObjectsByIds(ai,h,!![]);for(const aH of aG){aH&&aH['type']===ObjectType['Order']&&ak['set'](aH['object'],aH);}}}catch{j['push']('recent_orders:\x20order\x20details\x20unavailable\x20(non-blocking)');}const al=new Map();try{const aI=new Set();for(const aJ of ak['values']()){if(aJ?.['allocation'])aI['add'](aJ['allocation']);}if(aI['size']>0x0){const aK=await batchQueryObjectsByIds(Array['from'](aI),h,!![]);for(const aL of aK){if(!aL?.['object'])continue;if(aL['type']===ObjectType['Allocation']){const aM=Number(aL?.['balance']??0x0);al['set'](aL['object'],Number['isFinite'](aM)&&aM===0x0?'allocated':'pending');}}}}catch{j['push']('recent_orders:\x20allocation\x20details\x20unavailable\x20(non-blocking)');}const am=new Map(),an=new Map();try{const aN=new Set();for(const aO of aj){const aP=ak['get'](aO);if(aP?.['progress'])aN['add'](aP['progress']);}if(aN['size']>0x0){const aQ=await batchQueryObjectsByIds(Array['from'](aN),h,!![]);for(const aR of aQ){if(!aR?.['object'])continue;if(aR['type']===ObjectType['Progress']){const aS=aR?.['current'];am['set'](aR['object'],typeof aS==='string'&&aS!==''?aS:null),an['set'](aR['object'],Number(aR?.['current_time'])||null);}}}}catch{j['push']('recent_orders:\x20progress\x20details\x20unavailable\x20(non-blocking)');}I=Array['from'](ak['values']())['map'](aT=>({'id':aT['object'],'created_at_ms':Number(aT['time'])||undefined,'claimed_by':aT['claimed_by']??null,'current_node':aT['progress']?am['get'](aT['progress'])??null:null}));const ao=new Map();try{const aT=aj,aU=await Promise['allSettled'](aT['map'](aV=>query_object_last_updated({'object':aV,'network':h})));for(let aV=0x0;aV<aT['length'];aV++){const aW=aU[aV];ao['set'](aT[aV],aW['status']==='fulfilled'&&aW['value']?.['timestamp_ms']?Number(aW['value']['timestamp_ms'])||null:null);}}catch{j['push']('recent_orders:\x20order\x20updated\x20times\x20unavailable\x20(non-blocking)');}const ap=await Promise['all'](ah['map'](async aX=>{const aY=typeof aX?.['who']==='string'?aX['who']:'',aZ=ak['get'](aY),b0=aZ?.['amount']!==null&&aZ?.['amount']!==undefined?String(aZ['amount']):'',b1=await N(b0);return{'order':aY,'time':typeof aX?.['time']==='number'?aX['time']:0x0,'updated_ms':ao['get'](aY)??null,'amount':b0,'amount_display':b1['display'],'amount_tip':b1['tip'],'progress':aZ?.['progress']??null,'allocation':aZ?.['allocation']??null,'disputes':Array['isArray'](aZ?.['dispute'])?aZ['dispute']:[],'agent':Array['isArray'](aZ?.['agent'])?aZ['agent']:[],'owner':ownerAddr(aZ?.['builder']??aZ?.['owner']),'claimed_by':aZ?.['claimed_by']??null,'required_info':aZ?.['required_info']??null,'progress_next':aZ?.['progress']?am['get'](aZ['progress'])??null:null,'progress_since':aZ?.['progress']?an['get'](aZ['progress'])??null:null,'allocation_state':aZ?.['allocation']?al['get'](aZ['allocation'])??'pending':'none','bought':await Promise['all']((Array['isArray'](aZ?.['items'])?aZ['items']:[])['map'](async b2=>({'name':String(b2?.['name']??''),'price_display':(await N(b2?.['price']!==null&&b2?.['price']!==undefined?String(b2['price']):null))['display'],'quantity':String(b2?.['quantity']??'0'),'wip_hash':String(b2?.['wip_hash']??'')})))};})),aq=ap['filter'](aX=>aX['order']!==''),ar=ai['map'](aX=>ak['get'](aX))['filter'](aX=>!!aX);let as=0x0n,at=0x0,au=0x0,av=0x0,aw=0x0,ax=0x0,ay=null,az=null;for(const aX of ar){const aY=aX?.['amount']!==null&&aX?.['amount']!==undefined?String(aX['amount']):'';/^\d+$/['test'](aY)&&(as+=BigInt(aY),at++);if(Array['isArray'](aX?.['dispute'])&&aX['dispute']['length']>0x0)au++;const aZ=aX?.['allocation']?al['get'](aX['allocation'])??'pending':'none';if(aZ==='pending')av++;else{if(aZ==='allocated')aw++;else ax++;}}for(const b0 of ag){if(typeof b0?.['time']==='number'){if(ay===null||b0['time']<ay)ay=b0['time'];if(az===null||b0['time']>az)az=b0['time'];}}const aA=at>0x0?as['toString']():null,aB=aA!==null?await N(aA):null,aC=af['length'],aD=ae?.['ring_saturated']??ringWindowSaturated(aC),aE=aq['length'],aF='Analyze\x20ALL\x20orders\x20of\x20Service\x20'+k+'\x20('+h+')\x20one\x20by\x20one,\x20newest\x20first.\x20'+('The\x20orders\x20live\x20in\x20the\x20Service\x27s\x20FIFO\x20tx-linker\x20window\x20holding\x20at\x20most\x205200\x20newest\x20entries\x20—\x20the\x20retained\x20count\x20is\x20a\x20lower\x20bound\x20when\x20the\x20window\x20is\x20saturated\x20(currently\x20'+aC+(aD?',\x20saturated':'')+').\x20')+'For\x20each\x20order\x20call\x20object_panorama\x20with\x20the\x20order\x27s\x20FULL\x200x\x20address\x20(collect\x20the\x20addresses\x20from\x20the\x20same\x20reverse-index\x20source;\x20work\x20newest-first)\x20and\x20render\x20ONE\x20table\x20row\x20per\x20order:\x20'+'order\x20address\x20chip\x20(first\x20column)\x20|\x20created\x20+\x20last-updated\x20(local\x20dates)\x20|\x20amount\x20(the\x20display\x20value\x20with\x20its\x20token\x20symbol\x20—\x20never\x20reconvert\x20from\x20raw)\x20|\x20fund\x20state\x20(none\x20/\x20pending\x20/\x20allocated)\x20|\x20current\x20machine\x20node\x20|\x20disputes\x20(each\x20dispute\x20case\x20as\x20its\x20own\x20address\x20chip\x20ON\x20THE\x20SAME\x20ROW\x20—\x20an\x20order\x27s\x20progress,\x20allocation\x20and\x20arb\x20cases\x20are\x20its\x20children\x20and\x20are\x20never\x20split\x20into\x20a\x20separate\x20flat\x20list)\x20|\x20buyer\x20address\x20chip.\x20'+'Close\x20with\x20the\x203\x20most\x20valuable\x20patterns\x20across\x20the\x20rows\x20(amount\x20distribution,\x20stuck\x20or\x20paused\x20orders,\x20dispute\x20rate).\x20Orders\x20only\x20—\x20do\x20not\x20re-analyze\x20the\x20Service\x20itself.';Q={'count':aC,'window_saturated':aD,'preview_truncated':aC>aE,'stats':{'scope_count':ar['length'],'scoped':ar['length']<aC,'amount_sum_raw':aA,'amount_sum_display':aB?.['display']??null,'amount_sum_tip':aB?.['tip']??null,'amount_known_count':at,'disputed_order_count':au,'allocation_pending_count':av,'allocation_allocated_count':aw,'allocation_none_count':ax,'first_created_ms':ay,'last_created_ms':az},...aC>aE?{'drilldown':{'total_count':aC,'analyzed_count':aE,'stats_scope_count':ar['length'],'prompt':aF}}:{},'items':aq};}catch{j['push']('recent_orders:\x20reverse-index\x20query\x20failed\x20(non-blocking)');}try{const b1=[m,l['machine'],l['buy_guard'],...l['allocator_guards']??[]]['filter'](Boolean);H=generateBusinessReport({'objects':b1,'machine_nodes':E['map'](b2=>({'name':b2['name']})),'machine_edges':C?.['edges']?C['edges']['map'](b2=>({'from':b2['from'],'to':b2['to']})):undefined,'orders':I['length']>0x0?I:undefined,'now_ms':Date['now']()});}catch{j['push']('business_report:\x20generation\x20failed\x20(non-blocking)');}const R=[];try{const b2=await query_affiliations({'address':k,'no_cache':!![],'network':h}),b3=new Set(),b4=new Map();for(const b6 of b2?.['entries']??[]){const b7=typeof b6?.['who']==='string'?b6['who']:'';if(!b7||b3['has'](b7))continue;b3['add'](b7);const b8=objectTypeFromAddress(b7);if(!b8)continue;if(b8===ObjectType['Order'])continue;const b9=String(b8);let ba=b4['get'](b9);!ba&&(ba=[],b4['set'](b9,ba)),ba['push']({'address':b7,'type_label':b9,'name':B(b7)['name'],'time':typeof b6?.['time']==='number'?b6['time']:null,'via':typeof b6?.['table']==='string'?b6['table']:null});}const b5=['Progress','Allocation','Payment','Guard'];for(const bb of b5){const bc=b4['get'](bb);bc&&bc['length']>0x0&&(R['push']({'type_label':bb,'items':bc}),b4['delete'](bb));}for(const [bd,be]of b4){if(be['length']>0x0)R['push']({'type_label':bd,'items':be});}}catch{j['push']('related:\x20global-table\x20lookup\x20failed\x20(non-blocking)');}const S=new Set(),T=bf=>{typeof bf==='string'&&/^0x[0-9a-fA-F]{40,64}$/['test'](bf)&&S['add'](bf['toLowerCase']());};T(m['buy_guard']);for(const bf of E){for(const bg of bf?.['pairs']??[]){for(const bh of bg?.['forwards']??[])T(bh?.['guard']);}}for(const bi of m['order_allocators']?.['allocators']??[])T(bi?.['guard']);for(const bj of l['allocator_guards']??[])T(bj?.['object']);for(const bk of Object['values'](l['referenced']??{})){const bl=bk;if(!bl||typeof bl!=='object')continue;if(bl['type']===ObjectType['Reward']){for(const bm of bl['guards']??[])T(bm?.['guard']);}if(bl['type']===ObjectType['Treasury']){for(const bn of bl['external_withdraw_guard']??[])T(bn?.['guard']);for(const bo of bl['external_deposit_guard']??[])T(bo?.['guard']);}(bl['type']===ObjectType['Arbitration']||bl['type']===ObjectType['Arb'])&&T(bl['voting_guard']);}const U=R['find'](bp=>bp['type_label']===String(ObjectType['Guard']));if(U){U['items']=U['items']['filter'](bp=>!S['has'](bp['address']['toLowerCase']()));if(U['items']['length']===0x0)R['splice'](R['indexOf'](U),0x1);else{const bp=U['items'];try{const bq=await batchQueryObjectsByIds(bp['map'](bs=>bs['address']),h,!![]),br=new Map();for(const bs of bq){if(bs?.['object'])br['set'](String(bs['object'])['toLowerCase'](),bs);}for(const bt of bp){const bu=br['get'](bt['address']['toLowerCase']());if(!bu){bt['explanation']=null;continue;}const bv=Array['isArray'](bu['table'])?bu['table']:[],bw=[];let bx=0x0;for(const bz of bv){if(bz?.['b_submission']===!![]){bx++;continue;}bz?.['value_type']==='Address'&&typeof bz?.['value']==='string'&&bz['value']['startsWith']('0x')&&bw['push'](bz['value']);}const by=bw['some'](bA=>bA['toLowerCase']()===k['toLowerCase']());bt['explanation']={'description':typeof bu['description']==='string'?bu['description']:null,'table_refs':bw,'references_this_service':by,'submission_slots':bx,'note':by?'One-off\x20verification\x20guard:\x20NOT\x20mounted\x20on\x20any\x20host\x20field;\x20its\x20table\x20carries\x20this\x20Service\x20as\x20an\x20on-chain\x20constant\x20(the\x20affiliation\x20is\x20written\x20at\x20creation).\x20It\x20acts\x20only\x20when\x20submitted\x20inside\x20a\x20passport\x20at\x20runtime.':'Guard\x20surfaced\x20by\x20the\x20affiliation\x20window\x20only;\x20not\x20mounted\x20on\x20any\x20host\x20field\x20reachable\x20from\x20this\x20panorama.\x20It\x20acts\x20only\x20when\x20referenced\x20at\x20runtime\x20(passport\x20submission\x20or\x20a\x20host\x20outside\x20this\x20view).'};}}catch{j['push']('related:\x20unbound-guard\x20explanation\x20unavailable\x20(non-blocking)');}}}const V=new Map();for(const bA of l['allocator_guards']??[]){const bB=bA;if(bB?.['object'])V['set'](String(bB['object'])['toLowerCase'](),bB);}const W=[];for(const bC of Array['isArray'](m['sales'])?m['sales']:[]){const bD=balanceStr(bC?.['price']),bE=await N(bD);W['push']({'name':typeof bC?.['name']==='string'?bC['name']:'','price':bD,'price_display':bE['display'],'price_tip':bE['tip'],'stock':balanceStr(bC?.['stock']),'suspension':bC?.['suspension']===!![],'wip':typeof bC?.['wip']==='string'?bC['wip']:'','wip_hash':typeof bC?.['wip_hash']==='string'?bC['wip_hash']:''});}const X=bF=>bF===0x0?'amount':bF===0x2?'surplus':'rate',Y=bF=>{const bG=bF?.['who'];if(bG&&typeof bG==='object'&&'Entity'in bG){const bH=bG['Entity'],bI=typeof bH==='string'?bH:typeof bH?.['name_or_address']==='string'?bH['name_or_address']:null;return{'who':bI?'Entity\x20'+bI:'Entity','entity':bI&&/^0x[0-9a-fA-F]{6,64}$/['test'](bI)?bI:null,'mode':X(bF?.['mode']),'value':balanceStr(bF?.['sharing'])};}if(bG&&typeof bG==='object'&&'GuardIdentifier'in bG)return{'who':'Guard\x20identifier\x20#'+bG['GuardIdentifier'],'entity':null,'mode':X(bF?.['mode']),'value':balanceStr(bF?.['sharing'])};return{'who':'Signer','entity':null,'mode':X(bF?.['mode']),'value':balanceStr(bF?.['sharing'])};},Z=m['order_allocators']?{'description':m['order_allocators']['description']??'','threshold':balanceStr(m['order_allocators']['threshold']),'allocators':(m['order_allocators']['allocators']??[])['map'](bF=>({'guard':bF['guard'],'sharing_count':Array['isArray'](bF['sharing'])?bF['sharing']['length']:0x0,'sharing':(Array['isArray'](bF['sharing'])?bF['sharing']:[])['map'](Y),'max':balanceStr(bF['max']??null),'guard_summary':summarizeGuard(V['get'](String(bF['guard']??'')['toLowerCase']()))}))}:null,a0=[];{const bF=new Map();for(const bG of m['order_allocators']?.['allocators']??[]){for(const bH of Array['isArray'](bG['sharing'])?bG['sharing']:[]){const bI=Y(bH);if(bI['entity']){const bJ=bI['entity']['toLowerCase'](),bK=bF['get'](bJ)??{'raw':bI['entity'],'guards':[]};bK['guards']['push'](bG['guard']??''),bF['set'](bJ,bK);}}}if(bF['size']>0x0)try{const bL=await batchQueryObjectsByIds([...bF['keys']()],h,!![]),bM=new Map();for(const bN of bL){if(bN?.['object'])bM['set'](String(bN['object'])['toLowerCase'](),bN);}for(const [bO,bP]of bF){const bQ=bM['get'](bO),bR='order_allocators\x20sharing\x20of\x20allocator\x20guard\x20'+bP['guards'][0x0];if(bQ&&bQ['permission']!==undefined){const bS=balanceStr(bQ['balance']),bT=await N(bS);a0['push']({'address':String(bQ['object']),'kind':'treasury','description':typeof bQ['description']==='string'?bQ['description']:null,'permission':typeof bQ['permission']==='string'?bQ['permission']:null,'balance':bS,'balance_display':bT['display'],'balance_tip':bT['tip'],'external_deposit_guard_count':Array['isArray'](bQ['external_deposit_guard'])?bQ['external_deposit_guard']['length']:null,'external_withdraw_guard_count':Array['isArray'](bQ['external_withdraw_guard'])?bQ['external_withdraw_guard']['length']:null,'via':bR});}else a0['push']({'address':bP['raw'],'kind':'account','description':null,'permission':null,'balance':null,'balance_display':null,'balance_tip':null,'external_deposit_guard_count':null,'external_withdraw_guard_count':null,'via':bR});}}catch{j['push']('income_recipients:\x20Sharing\x20entity\x20read\x20failed\x20(non-blocking)');}}const a1=summarizePermission(l['permission'],B(m['permission'])),a2=a1?.['owner']??F?.['sender']??null,a3=a2?await markOf(a2):null,a4=await N(balanceStr(m['compensation_fund'])),a5=projectExploration([],{'truncations':[],'budgetExhausted':{},'dataGaps':j});return{'action':'service_panorama','network':h,'service':{'address':k,'name':A,'description':m['description']??'','location':m['location']??'','published':m['bPublished']===!![],'paused':m['bPaused']===!![],'paused_time':typeof m['paused_time']==='number'?m['paused_time']:typeof m['paused_time']==='string'&&/^\d+$/['test'](m['paused_time'])?Number(m['paused_time']):null,'setting_lock_duration':balanceStr(m['setting_lock_duration']),'customer_required':Array['isArray'](m['customer_required'])?m['customer_required']:[],'compensation_fund':balanceStr(m['compensation_fund']),'compensation_fund_display':a4['display'],'compensation_fund_tip':a4['tip'],'sales':W,'machine':m['machine']??null,'buy_guard':m['buy_guard']??null,'permission':m['permission']??'','um':m['um']??null,'arbitrations':Array['isArray'](m['arbitrations'])?m['arbitrations']:[],'rewards':Array['isArray'](m['rewards'])?m['rewards']:[],'repositories':Array['isArray'](m['repositories'])?m['repositories']:[],'order_allocators':Z,'income_recipients':a0,'payment_token':{'coin_type':L,'guidance':M(L,h)},'onchain_last_updated':F,'tags':z['tags']??[],'owner':a2,'owner_name':a3?.['name']??null},'machine_graph':C,'buy_guard':summarizeGuard(l['buy_guard']),'permission':a1,'related':{'groups':R},'supply_chain':G,'business_report':H,'recent_orders':Q,'data_gaps':j,...a5['open_questions']['length']>0x0?{'exploration':a5}:{}};}
@@ -1 +1 @@
1
- import{Config,LocalMark,query_objects,query_serviceContext}from'@wowok/wowok';import{resolveAddress as a337a}from'../../tools/handlers/name-resolution.js';import{formatMoneyAnnotation}from'./facet-money.js';const balanceStr=a=>a===null||a===undefined?'0':typeof a==='bigint'?a['toString']():String(a);async function displayOf(a,b,c){try{return(await formatMoneyAnnotation(a,b,c))['display'];}catch{return a;}}function describeRecipient(a){if(typeof a==='string')return a;if(a&&typeof a==='object'){const b=a;if('GuardIdentifier'in b)return'submission\x20slot\x20'+String(b['GuardIdentifier']);if('Entity'in b){const c=b['Entity'],d=c&&typeof c==='object'?c['name_or_address']:c;return d===''?'Entity(\x22\x22)\x20—\x20MCP\x20default\x20local\x20account':'Entity:'+String(d);}return JSON['stringify'](a);}return'unknown';}export async function handleServiceQuote(a){const b=a['context_network']??undefined??await Config['Instance']()['network_get'](),c=await a337a(a['service_address'],'service_address'),d=await query_serviceContext({'service':c,'network':b}),e=d['service'];if(!e)throw new Error('Service\x20\x27'+a['service_address']+'\x27\x20not\x20found\x20on\x20network\x20'+b+'.');const f=e?.['type_raw']??e?.['type']??'',g=f['match'](/<(.+)>$/),h=g?g[0x1]:null,i=Array['isArray'](e['sales'])?e['sales']:[],j=new Map();for(const z of i){if(!z||typeof z['name']!=='string')continue;j['set'](z['name'],{'price':balanceStr(z['price']?.['balance']??z['price']??0x0),'suspended':z['suspension']===!![]});}const k=a['items']??[...j['keys']()]['map'](A=>({'name':A,'quantity':0x1})),l=k['filter'](A=>!j['has'](A['name']));if(l['length']>0x0)throw new Error('Sale(s)\x20not\x20found\x20on\x20this\x20Service:\x20'+l['map'](A=>'\x27'+A['name']+'\x27')['join'](',\x20')+'.\x20'+('Available\x20sales:\x20'+([...j['keys']()]['map'](A=>'\x27'+A+'\x27')['join'](',\x20')||'<none>')+'.'));if(k['length']===0x0)throw new Error('This\x20Service\x20has\x20NO\x20configured\x20sales\x20—\x20nothing\x20to\x20quote.');const m=[];let n=0x0n;for(const A of k){const B=j['get'](A['name']),C=BigInt(B['price']||'0'),D=C*BigInt(A['quantity']);n+=D,m['push']({'name':A['name'],'quantity':A['quantity'],'unit_price':B['price'],'unit_price_display':await displayOf(B['price'],h,b),'line_total':D['toString'](),'suspended':B['suspended']});}let o=n,p=null;if(typeof a['discount']==='string'&&a['discount']['trim']()!==''){const E=await a337a(a['discount'],'discount');let F=null;try{const Q=await query_objects({'objects':[E],'network':b});F=Q?.['objects']?.[0x0]??null;}catch{F=null;}if(!F)throw new Error('Discount\x20\x27'+E+'\x27\x20not\x20found\x20on\x20network\x20'+b+'.');const G=String(F['service']??'');if(G['toLowerCase']()!==c['toLowerCase']())throw new Error('E_SERVICE_DISCOUNT_NOT_MATCH:\x20coupon\x20\x27'+E+'\x27\x20is\x20bound\x20to\x20service\x20'+((G||'<unparseable>')+',\x20not\x20to\x20'+c+'.\x20A\x20buy\x20with\x20this\x20coupon\x20aborts.'));const H=R=>{const S=balanceStr(R)['trim']();return/^\d+$/['test'](S)?BigInt(S):0x0n;},I=BigInt(Date['now']()),J=H(F['time_start']),K=H(F['time_end']);if(I<J||I>K)throw new Error('E_DISCOUNT_TIME_INVALID:\x20coupon\x20\x27'+E+'\x27\x20is\x20valid\x20'+(J+'–'+K+'\x20(ms\x20epoch),\x20now\x20is\x20'+I+'.\x20A\x20buy\x20with\x20this\x20coupon\x20aborts.'));const L=Number(F['discount_type'])===0x0,M=H(F['off']),N=F['benchmark']===null||F['benchmark']===undefined?null:H(F['benchmark']),O=N===null?!![]:n>=N;let P=![];O&&(P=!![],o=L?n-n*M/0x2710n:n>M?n-M:0x0n),p={'coupon':E,'name':typeof F['name']==='string'?F['name']:null,'type':L?'rates':'minus','off':M['toString'](),'benchmark':N===null?null:N['toString'](),'benchmark_met':O,'applied':P,'list_total':n['toString'](),'final_total':o['toString'](),'final_total_display':await displayOf(o['toString'](),h,b),'note':P?'Discounted\x20total\x20shown\x20—\x20order_new.buy.total_pay.balance\x20must\x20equal\x20final_total.':'⚠\x20Benchmark\x20NOT\x20met\x20(list\x20total\x20'+n+'\x20<\x20'+N+'):\x20this\x20buy\x20completes\x20at\x20FULL\x20price\x20and\x20the\x20coupon\x20is\x20STILL\x20consumed\x20and\x20destroyed\x20on\x20chain.\x20Raise\x20the\x20basket\x20to\x20>=\x20'+N+',\x20or\x20order\x20without\x20the\x20coupon\x20and\x20keep\x20it.'};}const q=await displayOf(o['toString'](),h,b),t=e['order_allocators'],u=Array['isArray'](t?.['allocators'])?t['allocators']:[],w=u['length']>0x0?u[0x0]:undefined,x=w?{'allocator_index':0x0,'note':'Sharing\x20rows\x20of\x20the\x20FIRST\x20order_allocator\x20(the\x20intended\x20normal\x20payout\x20path).\x20'+'Guards\x20select\x20per-case\x20allocators\x20(refund\x20/\x20damage\x20/\x20late-cancel),\x20so\x20the\x20LIVE\x20'+'split\x20depends\x20on\x20which\x20guard\x20passes\x20—\x20review\x20the\x20full\x20allocator\x20table\x20via\x20'+'service_panorama\x20before\x20ordering.','sharing':(Array['isArray'](w['sharing'])?w['sharing']:[])['map'](R=>({'recipient':describeRecipient(R?.['who']),'mode':typeof R?.['mode']==='string'?R['mode']:null,'value':balanceStr(R?.['sharing']?.['balance']??R?.['sharing']??0x0)}))}:null;let y=null;try{const R=await LocalMark['Instance']()['list']({'address':c});y=R?.[0x0]?.['name']??null;}catch{y=null;}return{'action':'service_quote','network':String(b),'service':{'address':c,'name':y},'payment_token':{'coin_type':h,'display_note':h?'Prices\x20and\x20the\x20order\x20total\x20are\x20denominated\x20in\x20this\x20token\x27s\x20smallest\x20units;\x20displays\x20convert\x20with\x20the\x20token\x27s\x20on-chain\x20precision.':'Payment\x20token\x20could\x20not\x20be\x20parsed\x20from\x20the\x20Service\x20type\x20—\x20raw\x20smallest\x20units\x20only,\x20precision\x20NOT\x20guessed.'},'items':m,'total_pay':{'balance':o['toString'](),'display':q,'note':p?.['applied']?'Discounted\x20total\x20—\x20order_new.buy.total_pay.balance\x20must\x20equal\x20this\x20exactly\x20(the\x20on-chain\x20buy\x20aborts\x20on\x20any\x20drift;\x20the\x20coupon\x20is\x20consumed\x20at\x20buy).':'order_new.buy.total_pay.balance\x20must\x20equal\x20this\x20exactly\x20—\x20the\x20on-chain\x20buy\x20aborts\x20on\x20any\x20drift.'},'discount':p,'allocation_preview':x};}
1
+ import{Config,LocalMark,query_objects,query_serviceContext}from'@wowok/wowok';import{resolveAddress as a341a}from'../../tools/handlers/name-resolution.js';import{formatMoneyAnnotation}from'./facet-money.js';const balanceStr=a=>a===null||a===undefined?'0':typeof a==='bigint'?a['toString']():String(a);async function displayOf(a,b,c){try{return(await formatMoneyAnnotation(a,b,c))['display'];}catch{return a;}}function describeRecipient(a){if(typeof a==='string')return a;if(a&&typeof a==='object'){const b=a;if('GuardIdentifier'in b)return'submission\x20slot\x20'+String(b['GuardIdentifier']);if('Entity'in b){const c=b['Entity'],d=c&&typeof c==='object'?c['name_or_address']:c;return d===''?'Entity(\x22\x22)\x20—\x20MCP\x20default\x20local\x20account':'Entity:'+String(d);}return JSON['stringify'](a);}return'unknown';}export async function handleServiceQuote(a){const b=a['context_network']??undefined??await Config['Instance']()['network_get'](),c=await a341a(a['service_address'],'service_address'),d=await query_serviceContext({'service':c,'network':b}),f=d['service'];if(!f)throw new Error('Service\x20\x27'+a['service_address']+'\x27\x20not\x20found\x20on\x20network\x20'+b+'.');const h=f?.['type_raw']??f?.['type']??'',i=h['match'](/<(.+)>$/),j=i?i[0x1]:null,k=Array['isArray'](f['sales'])?f['sales']:[],l=new Map();for(const D of k){if(!D||typeof D['name']!=='string')continue;l['set'](D['name'],{'price':balanceStr(D['price']?.['balance']??D['price']??0x0),'suspended':D['suspension']===!![]});}const m=a['items']??[...l['keys']()]['map'](E=>({'name':E,'quantity':0x1})),n=m['filter'](E=>!l['has'](E['name']));if(n['length']>0x0)throw new Error('Sale(s)\x20not\x20found\x20on\x20this\x20Service:\x20'+n['map'](E=>'\x27'+E['name']+'\x27')['join'](',\x20')+'.\x20'+('Available\x20sales:\x20'+([...l['keys']()]['map'](E=>'\x27'+E+'\x27')['join'](',\x20')||'<none>')+'.'));if(m['length']===0x0)throw new Error('This\x20Service\x20has\x20NO\x20configured\x20sales\x20—\x20nothing\x20to\x20quote.');const o=[];let p=0x0n;for(const E of m){const F=l['get'](E['name']),G=BigInt(F['price']||'0'),H=G*BigInt(E['quantity']);p+=H,o['push']({'name':E['name'],'quantity':E['quantity'],'unit_price':F['price'],'unit_price_display':await displayOf(F['price'],j,b),'line_total':H['toString'](),'suspended':F['suspended']});}let q=p,t=null;if(typeof a['discount']==='string'&&a['discount']['trim']()!==''){const I=await a341a(a['discount'],'discount');let J=null;try{const U=await query_objects({'objects':[I],'network':b});J=U?.['objects']?.[0x0]??null;}catch{J=null;}if(!J)throw new Error('E_DISCOUNT_NOT_FOUND:\x20coupon\x20\x27'+I+'\x27\x20not\x20found\x20—\x20it\x20was\x20already\x20burned\x20on\x20a\x20'+'previous\x20buy\x20(a\x20burned\x20coupon\x20is\x20destroyed\x20on\x20chain\x20and\x20cannot\x20be\x20quoted\x20again)\x20'+'or\x20the\x20address\x20is\x20wrong.\x20Re-quote\x20without\x20the\x20coupon.');const K=String(J['service']??'');if(K['toLowerCase']()!==c['toLowerCase']())throw new Error('E_SERVICE_DISCOUNT_NOT_MATCH:\x20coupon\x20\x27'+I+'\x27\x20is\x20bound\x20to\x20service\x20'+((K||'<unparseable>')+',\x20not\x20to\x20'+c+'.\x20A\x20buy\x20with\x20this\x20coupon\x20aborts.'));const L=V=>{const W=balanceStr(V)['trim']();return/^\d+$/['test'](W)?BigInt(W):0x0n;},M=BigInt(Date['now']()),N=L(J['time_start']),O=L(J['time_end']);if(M<N||M>O)throw new Error('E_DISCOUNT_TIME_INVALID:\x20coupon\x20\x27'+I+'\x27\x20is\x20valid\x20'+(N+'–'+O+'\x20(ms\x20epoch),\x20now\x20is\x20'+M+'.\x20A\x20buy\x20with\x20this\x20coupon\x20aborts.'));const P=Number(J['discount_type'])===0x0,Q=L(J['off']),R=J['benchmark']===null||J['benchmark']===undefined?null:L(J['benchmark']),S=R===null?!![]:p>=R;let T=![];S&&(T=!![],q=P?p-p*Q/0x2710n:p>Q?p-Q:0x0n),t={'coupon':I,'name':typeof J['name']==='string'?J['name']:null,'type':P?'rates':'minus','off':Q['toString'](),'benchmark':R===null?null:R['toString'](),'benchmark_met':S,'applied':T,'list_total':p['toString'](),'final_total':q['toString'](),'final_total_display':await displayOf(q['toString'](),j,b),'note':T?'Discounted\x20total\x20shown\x20—\x20order_new.buy.total_pay.balance\x20must\x20equal\x20final_total.':'⚠\x20Benchmark\x20NOT\x20met\x20(list\x20total\x20'+p+'\x20<\x20'+R+'):\x20the\x20chain\x20REJECTS\x20this\x20buy\x20when\x20the\x20coupon\x20is\x20attached\x20(error\x2038\x20—\x20full\x20rollback,\x20nothing\x20paid,\x20coupon\x20preserved).\x20Raise\x20the\x20basket\x20to\x20>=\x20'+R+',\x20or\x20order\x20without\x20the\x20coupon\x20and\x20keep\x20it.'};}const u=await displayOf(q['toString'](),j,b),w=f['order_allocators'],x=Array['isArray'](w?.['allocators'])?w['allocators']:[],y=x['length']>0x0?x[0x0]:undefined,z=y?{'allocator_index':0x0,'note':'Sharing\x20rows\x20of\x20the\x20FIRST\x20order_allocator\x20(the\x20intended\x20normal\x20payout\x20path).\x20'+'Guards\x20select\x20per-case\x20allocators\x20(refund\x20/\x20damage\x20/\x20late-cancel),\x20so\x20the\x20LIVE\x20'+'split\x20depends\x20on\x20which\x20guard\x20passes\x20—\x20review\x20the\x20full\x20allocator\x20table\x20via\x20'+'service_panorama\x20before\x20ordering.','sharing':(Array['isArray'](y['sharing'])?y['sharing']:[])['map'](V=>({'recipient':describeRecipient(V?.['who']),'mode':typeof V?.['mode']==='string'?V['mode']:null,'value':balanceStr(V?.['sharing']?.['balance']??V?.['sharing']??0x0)}))}:null,A=Array['isArray'](f['rewards'])?f['rewards']['filter'](V=>typeof V==='string'&&V!==''):[];let B=null;if(A['length']>0x0){const V=[],W=[];let X=[];try{const Y=await query_objects({'objects':A,'network':b});X=Array['isArray'](Y?.['objects'])?Y['objects']:[];}catch(Z){V['push']('Reward\x20lookup\x20failed\x20('+(Z instanceof Error?Z['message']:String(Z))+')\x20—\x20reward\x20terms\x20NOT\x20verified;\x20do\x20not\x20rely\x20on\x20them.');}for(const a0 of A){const a1=X['find'](a8=>typeof a8?.['object']==='string'&&a8['object']['toLowerCase']()===a0['toLowerCase']());if(!a1){V['push']('Reward\x20\x27'+a0+'\x27\x20could\x20not\x20be\x20read\x20—\x20its\x20terms\x20are\x20unknown;\x20do\x20not\x20rely\x20on\x20it.');continue;}const a2=balanceStr(a1['balance']??0x0),a3=/^\d+$/['test'](a2)?BigInt(a2):0x0n,a4=[];let a5=0x0n,a6=![];for(const a8 of Array['isArray'](a1['guards'])?a1['guards']:[]){const a9=a8?.['amount'],aa=a9!=null&&(a9['type']===0x1||a9['type']==='Fixed'),ab=a8?.['expiration_time'],ac=ab==null?null:Number(ab),ad=ac!=null&&Number['isFinite'](ac)?ac:null;if(aa){const ae=balanceStr(a9['value']??0x0),af=/^\d+$/['test'](ae)?BigInt(ae):0x0n;if(af>a5)a5=af;a4['push']({'guard':String(a8?.['guard']??''),'amount_type':'fixed','amount':ae,'amount_display':await displayOf(ae,j,b),'expiration_time':ad,'expiration_display':ad!=null?new Date(ad)['toISOString']():null,'expired':ad!=null?Date['now']()>ad:null});}else a6=!![],a4['push']({'guard':String(a8?.['guard']??''),'amount_type':'guard_submission','amount':'submission\x20identifier\x20'+String(a9?.['value']??'?'),'amount_display':null,'expiration_time':ad,'expiration_display':ad!=null?new Date(ad)['toISOString']():null,'expired':ad!=null?Date['now']()>ad:null});}const a7=a3===0x0n?'Pool\x20is\x20EMPTY\x20—\x20any\x20claim\x20aborts\x20on-chain\x20(E_INSUFFICIENT_BALANCE);\x20do\x20not\x20budget\x20on\x20this\x20reward.':a6||a5===0x0n?null:'Pool\x20covers\x20~'+(a3/a5)['toString']()+'\x20further\x20claim(s)\x20at\x20the\x20largest\x20configured\x20per-claim\x20amount.';W['push']({'reward':a0,'description':typeof a1['description']==='string'?a1['description']:null,'pool_balance':a3['toString'](),'pool_balance_display':await displayOf(a3['toString'](),j,b),'record_count':Number['isFinite'](Number(a1['record_count']))?Number(a1['record_count']):0x0,'claims':a4,'coverage':a7});}B={'note':'Pre-order\x20reward\x20terms\x20for\x20every\x20Reward\x20hung\x20on\x20this\x20Service\x20(bound\x20at\x20build\x20time):\x20pool\x20balance,\x20'+'per-claim\x20amount\x20and\x20claim\x20windows.\x20A\x20claim\x20aborts\x20after\x20its\x20window\x20(E_GUARD_EXPIRED)\x20or\x20'+'against\x20an\x20empty\x20pool\x20(E_INSUFFICIENT_BALANCE)\x20—\x20never\x20budget\x20on\x20an\x20expired\x20or\x20empty\x20'+'reward.\x20Claiming\x20requires\x20passing\x20the\x20claim\x20guard\x27s\x20conditions.','rewards':W,'data_gaps':V};}let C=null;try{const ag=await LocalMark['Instance']()['list']({'address':c});C=ag?.[0x0]?.['name']??null;}catch{C=null;}return{'action':'service_quote','network':String(b),'service':{'address':c,'name':C},'payment_token':{'coin_type':j,'display_note':j?'Prices\x20and\x20the\x20order\x20total\x20are\x20denominated\x20in\x20this\x20token\x27s\x20smallest\x20units;\x20displays\x20convert\x20with\x20the\x20token\x27s\x20on-chain\x20precision.':'Payment\x20token\x20could\x20not\x20be\x20parsed\x20from\x20the\x20Service\x20type\x20—\x20raw\x20smallest\x20units\x20only,\x20precision\x20NOT\x20guessed.'},'items':o,'total_pay':{'balance':q['toString'](),'display':u,'note':t?.['applied']?'Discounted\x20total\x20—\x20order_new.buy.total_pay.balance\x20must\x20equal\x20this\x20exactly\x20(the\x20on-chain\x20buy\x20aborts\x20on\x20any\x20drift;\x20the\x20coupon\x20is\x20consumed\x20at\x20buy).':'order_new.buy.total_pay.balance\x20must\x20equal\x20this\x20exactly\x20when\x20passed\x20explicitly\x20—\x20the\x20on-chain\x20buy\x20aborts\x20on\x20any\x20drift.\x20WITHOUT\x20a\x20discount\x20you\x20may\x20also\x20omit\x20total_pay\x20entirely:\x20the\x20buy\x20auto-derives\x20this\x20exact\x20total\x20(M-K17).'},'discount':t,'allocation_preview':z,'reward_terms':B};}