@wowok/agent-mcp 2.7.3 → 2.7.5

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 (76) hide show
  1. package/dist/evaluation/builtins/arbitration-score.d.ts +1 -1
  2. package/dist/evaluation/builtins/arbitration-score.js +1 -1
  3. package/dist/index.js +1 -1
  4. package/dist/knowledge/arbitration-ledger.js +1 -1
  5. package/dist/knowledge/demand-confirm.js +1 -1
  6. package/dist/knowledge/demand-risk.js +1 -1
  7. package/dist/knowledge/demand-translation.js +1 -1
  8. package/dist/knowledge/guard-design-patterns.js +1 -1
  9. package/dist/knowledge/index.d.ts +2 -2
  10. package/dist/knowledge/index.js +1 -1
  11. package/dist/knowledge/onchain-constants.d.ts +2 -2
  12. package/dist/knowledge/onchain-constants.js +1 -1
  13. package/dist/knowledge/payment-risk.js +1 -1
  14. package/dist/knowledge/permission-context.d.ts +11 -0
  15. package/dist/knowledge/permission-context.js +1 -1
  16. package/dist/knowledge/personal-risk.js +1 -1
  17. package/dist/knowledge/progress-ledger.js +1 -1
  18. package/dist/knowledge/progress-risk.js +1 -1
  19. package/dist/knowledge/progress-templates.js +1 -1
  20. package/dist/knowledge/progress-translation.js +1 -1
  21. package/dist/knowledge/registrar-risk.js +1 -1
  22. package/dist/knowledge/registrar-translation.js +1 -1
  23. package/dist/knowledge/reward-ledger.js +1 -1
  24. package/dist/knowledge/reward-translation.js +1 -1
  25. package/dist/knowledge/tools-reference.js +1 -1
  26. package/dist/knowledge/treasury-context.d.ts +1 -1
  27. package/dist/knowledge/treasury-context.js +1 -1
  28. package/dist/knowledge/treasury-ledger.js +1 -1
  29. package/dist/knowledge/treasury-risk.js +1 -1
  30. package/dist/knowledge/util-confirm.js +1 -1
  31. package/dist/knowledge/util-risk.js +1 -1
  32. package/dist/knowledge/util-translation.d.ts +3 -2
  33. package/dist/knowledge/util-translation.js +1 -1
  34. package/dist/knowledge/workflow-guidance.d.ts +64 -0
  35. package/dist/knowledge/workflow-guidance.js +1 -1
  36. package/dist/project/evaluation.js +1 -1
  37. package/dist/project/graph-builder.d.ts +2 -2
  38. package/dist/project/graph-builder.js +1 -1
  39. package/dist/project/semantic-assembler.d.ts +2 -2
  40. package/dist/project/semantic-assembler.js +1 -1
  41. package/dist/schema/evaluation/index.d.ts +1 -1
  42. package/dist/schema/evaluation/index.js +1 -1
  43. package/dist/schema/index.d.ts +2 -0
  44. package/dist/schema/index.js +1 -1
  45. package/dist/schema/operations.d.ts +251 -2
  46. package/dist/schema/operations.js +1 -1
  47. package/dist/schema/permission/index.d.ts +121 -0
  48. package/dist/schema/permission/index.js +1 -0
  49. package/dist/schema/query/index.d.ts +223 -22
  50. package/dist/schema/query/index.js +1 -1
  51. package/dist/schema/schema-version.js +1 -1
  52. package/dist/schema/workflow/index.d.ts +161 -0
  53. package/dist/schema/workflow/index.js +1 -0
  54. package/dist/schema-query-impl/index.js +1 -1
  55. package/dist/schemas/evaluation_operation.schema.json +2 -2
  56. package/dist/schemas/index.json +13 -1
  57. package/dist/schemas/onchain_table_data.output.json +821 -5
  58. package/dist/schemas/onchain_table_data.schema.json +154 -1
  59. package/dist/schemas/permission_operation.output.json +173 -0
  60. package/dist/schemas/permission_operation.schema.json +39 -0
  61. package/dist/schemas/query_toolkit.output.json +15 -15
  62. package/dist/schemas/workflow_operation.output.json +164 -0
  63. package/dist/schemas/workflow_operation.schema.json +116 -0
  64. package/dist/tools/handlers/config.js +1 -1
  65. package/dist/tools/handlers/evaluation.js +1 -1
  66. package/dist/tools/handlers/onchain.js +1 -1
  67. package/dist/tools/handlers/permission.d.ts +2 -0
  68. package/dist/tools/handlers/permission.js +1 -0
  69. package/dist/tools/handlers/query.js +1 -1
  70. package/dist/tools/handlers/workflow.d.ts +2 -0
  71. package/dist/tools/handlers/workflow.js +1 -0
  72. package/dist/tools/handlers/workspace.d.ts +2 -0
  73. package/dist/tools/handlers/workspace.js +1 -1
  74. package/dist/tools/index.js +1 -1
  75. package/dist/tools/shared.js +1 -1
  76. package/package.json +2 -2
@@ -1 +1 @@
1
- import{IndustryModeRegistry}from'../extensions/registry.js';import{collectPermissionIndexes,checkPermissionAuthorization}from'../schema/utils/permission-machine-check.js';import{getEvaluationEngine}from'../evaluation/engine.js';const CRITICAL_BINDINGS=[{'sourceType':'Service','targetType':'Machine','fieldName':'machine','critical':!![]},{'sourceType':'Service','targetType':'Permission','fieldName':'permission','critical':!![]},{'sourceType':'Service','targetType':'Guard','fieldName':'buy_guard','critical':![]},{'sourceType':'Service','targetType':'Allocation','fieldName':'order_allocators','critical':!![]},{'sourceType':'Service','targetType':'Arbitration','fieldName':'arbitrations','critical':![]},{'sourceType':'Machine','targetType':'Permission','fieldName':'permission','critical':!![]}],MERCHANT_REQUIRED_ITEMS=[{'id':'R1','objectType':'Permission','fieldName':'','required':!![],'description':'Governance\x20—\x20who\x20can\x20manage\x20the\x20service'},{'id':'R2','objectType':'Service','fieldName':'','required':!![],'description':'Core\x20offering\x20—\x20the\x20service\x20itself'},{'id':'R3','objectType':'Machine','fieldName':'machine','required':!![],'description':'Workflow\x20—\x20order\x20processing\x20pipeline'},{'id':'R4','objectType':'Guard','fieldName':'','required':!![],'description':'Purchase\x20validation\x20—\x20Guard\x20objects\x20configured\x20(binding\x20to\x20Service.buy_guard\x20is\x20optional)'},{'id':'R5','objectType':'Allocation','fieldName':'order_allocators','required':!![],'description':'Order\x20allocators\x20template\x20—\x20inline\x20Allocators\x20on\x20Service\x20(independent\x20Allocation\x20objects\x20are\x20created\x20per-order)'},{'id':'R6','objectType':'Treasury','fieldName':'','required':!![],'description':'Compensation\x20fund\x20—\x20independent\x20Treasury\x20object\x20for\x20buyer\x20refund\x20protection\x20(industry-aware:\x20optional\x20for\x20freelance)'},{'id':'R7','objectType':'Arbitration','fieldName':'arbitrations','required':!![],'description':'Dispute\x20resolution\x20—\x20arbitration\x20configured\x20(required\x20when\x20compensation_fund\x20>\x200\x20per\x20service.move:494)'},{'id':'R8','objectType':'Contact','fieldName':'','required':!![],'description':'Customer\x20communication\x20—\x20contact\x20info'},{'id':'R9','objectType':'Progress','fieldName':'','required':![],'description':'Order\x20tracking\x20—\x20progress\x20nodes'},{'id':'R10','objectType':'Reward','fieldName':'rewards','required':![],'description':'Customer\x20incentives\x20—\x20reward\x20claims'},{'id':'R11','objectType':'Repository','fieldName':'repositories','required':![],'description':'Documentation\x20—\x20published\x20data'},{'id':'R12','objectType':'Demand','fieldName':'','required':![],'description':'Market\x20discovery\x20—\x20demand\x20signals'}];function resolveRequiredItems(a,b=0x0,c=![]){let d=MERCHANT_REQUIRED_ITEMS;if(a&&a!=='general'){let e;try{e=IndustryModeRegistry['Instance']()['getMode'](a);}catch{}if(e){const f=e['risk_constraints']?.['require_compensation_fund']??!![];!f&&(d=MERCHANT_REQUIRED_ITEMS['map'](g=>{if(g['id']==='R6'||g['id']==='R7')return{...g,'required':![]};return g;}));}}return c&&b===0x0&&(d=d['map'](g=>{if(g['id']==='R6')return{...g,'required':![]};return g;})),b>0x0&&(d=d['map'](g=>g['id']==='R7'?{...g,'required':!![]}:g)),d;}const CONSUMER_DUE_DILIGENCE=[{'id':'E1','check':'Service\x20is\x20published\x20(bPublished=true)','severity':'critical','deduction':-0x1e},{'id':'E2','check':'Service\x20is\x20not\x20paused\x20(bPaused=false)','severity':'warning','deduction':-0x14},{'id':'E3','check':'Machine\x20has\x20workflow\x20nodes','severity':'warning','deduction':-0xf},{'id':'E4','check':'Service\x20has\x20buy_guard\x20(purchase\x20validation)','severity':'info','deduction':0x0},{'id':'E5','check':'Service\x20has\x20compensation_fund\x20(refund\x20protection)','severity':'warning','deduction':-0xf},{'id':'E6','check':'Arbitration\x20is\x20configured\x20(dispute\x20resolution)','severity':'critical','deduction':-0x19},{'id':'E7','check':'Permission\x20is\x20present\x20(governance)','severity':'warning','deduction':-0xa},{'id':'E8','check':'Contact\x20is\x20available\x20(merchant\x20reachable)','severity':'info','deduction':-0x5},{'id':'E9','check':'Repository\x20has\x20published\x20data\x20(transparency)','severity':'info','deduction':-0x5},{'id':'E10','check':'Reward\x20is\x20configured\x20(customer\x20incentives)','severity':'info','deduction':-0x3},{'id':'E11','check':'Service\x20has\x20description\x20(offering\x20clarity)','severity':'info','deduction':-0x5},{'id':'E12','check':'Registrar\x20reputation\x20is\x20positive','severity':'warning','deduction':-0xa}];function clampScore(a){return Math['max'](0x0,Math['min'](0x64,Math['round'](a)));}function shortTypeName(a){if(!a)return'unknown';const b=a['replace'](/<.*>/,'')['trim'](),c=b['split']('::'),d=c[c['length']-0x1]||'unknown';if(d['length']>0x0&&d===d['toLowerCase']())return d['charAt'](0x0)['toUpperCase']()+d['slice'](0x1);return d;}function groupByType(a){const b=new Map();for(const c of a){const d=shortTypeName(c['objectType']);if(!b['has'](d))b['set'](d,[]);b['get'](d)['push'](c);}return b;}function parseCacheData(a){if(!a)return null;try{return JSON['parse'](a['data']);}catch{return null;}}function isAddress(a){return typeof a==='string'&&a['startsWith']('0x')&&a['length']>=0xa;}function countArrayField(a,b){const c=a[b];if(Array['isArray'](c))return c['length'];return 0x0;}export function getNumberField(a,b){if(!a)return 0x0;const c=a[b];if(typeof c==='number'&&Number['isFinite'](c))return c;if(typeof c==='string'){const d=Number(c);if(Number['isFinite'](d))return d;}return 0x0;}export function getMachineNodeCount(a){if(!a)return 0x0;const b=getNumberField(a,'node_count');if(b>0x0)return b;const c=countArrayField(a,'nodes');if(c>0x0)return c;const d=a['nodes'];if(d&&typeof d==='object'){const e=d['fields'];if(e&&typeof e==='object'){const g=getNumberField(e,'size');if(g>0x0)return g;}const f=getNumberField(d,'size');if(f>0x0)return f;}return 0x0;}function extractMachineNodesFromCache(a){if(!a)return[];const b=a['nodes'];if(Array['isArray'](b))return b;const c=a['config'];if(c&&Array['isArray'](c['nodes']))return c['nodes'];const d=a['nodes'];if(d&&typeof d==='object'){const e=d['fields'];if(e&&Array['isArray'](e['contents']))return e['contents'];}return[];}function getBalanceValue(a,b){if(!a)return 0x0;const c=a[b];if(c==null)return 0x0;if(typeof c==='number'&&Number['isFinite'](c))return c;if(typeof c==='string'){const d=Number(c);if(Number['isFinite'](d))return d;}if(typeof c==='object'){const e=c,f=e['value']??e['fields'];if(typeof f==='number'&&Number['isFinite'](f))return f;if(typeof f==='string'){const g=Number(f);if(Number['isFinite'](g))return g;}if(typeof f==='object'&&f!==null){const h=f,i=h['value'];if(typeof i==='number'&&Number['isFinite'](i))return i;if(typeof i==='string'){const j=Number(i);if(Number['isFinite'](j))return j;}}}return 0x0;}function getMaxSalePrice(a){if(!a)return 0x0;const b=a['sales'];if(!Array['isArray'](b)||b['length']===0x0)return 0x0;let c=0x0;for(const d of b){if(typeof d!=='object'||d===null)continue;const e=d['price'];let f=0x0;if(typeof e==='number'&&Number['isFinite'](e))f=e;else{if(typeof e==='string'){const g=Number(e);if(Number['isFinite'](g))f=g;}}if(f>c)c=f;}return c;}function detectCircularRefs(a,b){const c=new Map();for(const i of a){if(i['edgeSource']==='potential')continue;if(!c['has'](i['sourceObject']))c['set'](i['sourceObject'],[]);c['get'](i['sourceObject'])['push'](i['targetObject']);}const d=[],f=new Set(),g=new Set(),h=[];for(const j of c['keys']()){if(f['has'](j))continue;const k=[{'node':j,'nextNeighborIdx':0x0,'neighbors':c['get'](j)??[]}];f['add'](j),g['add'](j),h['push'](j);while(k['length']>0x0){const l=k[k['length']-0x1];if(l['nextNeighborIdx']>=l['neighbors']['length']){k['pop'](),h['pop'](),g['delete'](l['node']);continue;}const m=l['neighbors'][l['nextNeighborIdx']];l['nextNeighborIdx']++;if(!f['has'](m))f['add'](m),g['add'](m),h['push'](m),k['push']({'node':m,'nextNeighborIdx':0x0,'neighbors':c['get'](m)??[]});else{if(g['has'](m)){const n=h['indexOf'](m),o=h['slice'](n)['concat'](m);!isWoWokNormalFundCycle(o,b)&&d['push'](o['join']('→'));}}}}return d;}function isWoWokNormalFundCycle(a,b){if(!b||a['length']<0x3)return![];const c=new Set();for(const f of a){const g=b['get'](f);if(g)c['add'](g);else return![];}if(c['size']===0x2&&c['has']('Order')&&c['has']('Allocation'))return!![];if(c['size']===0x3&&c['has']('Order')&&c['has']('Allocation')&&c['has']('Payment'))return!![];const d=['Service','Machine','Progress','Order'],e=Array['from'](c)['every'](h=>d['includes'](h));if(e&&c['size']>=0x2)return!![];return![];}function adjustWeightsForPerspective(a,b){if(b==='consumer')return a['map'](d=>{if(d['name']==='reputation'||d['name']==='arbitration_coverage'||d['name']==='consumer_diligence')return{...d,'weight':d['weight']*1.4};if(d['name']==='structural_risk'||d['name']==='deployment_readiness')return{...d,'weight':d['weight']*0.7};return d;});if(b==='producer')return a['map'](d=>{if(d['name']==='structural_risk'||d['name']==='deployment_readiness'||d['name']==='binding_completeness')return{...d,'weight':d['weight']*1.3};if(d['name']==='consumer_diligence'||d['name']==='transparency')return{...d,'weight':d['weight']*0.7};return d;});return a;}function normalizeWeights(a){const b=a['reduce']((d,e)=>d+e['weight'],0x0);if(b===0x0)return a;return a['map'](d=>({...d,'weight':d['weight']/b}));}export const RISK_WEIGHTS={'structural_risk':0.25,'fund_safety':0.2,'operational_risk':0.15,'governance_risk':0.1,'graph_coherence':0.2,'mode_registry':0.1};export const TRUST_WEIGHTS={'reputation':0.25,'arbitration_coverage':0.2,'guard_quality':0.2,'transparency':0.15,'consumer_diligence':0.2};export const COMPLETENESS_WEIGHTS={'object_coverage':0.3,'binding_completeness':0.25,'workflow_rationality':0.2,'deployment_readiness':0.25};export const EXTENDED_DIMENSION_WEIGHTS={'escrow_quality':0.15,'proof_integrity':0.1,'arbitration_fairness':0.15,'fee_transparency':0.1,'timeout_protection':0.1,'supplier_visibility':0.1,'content_commitment':0.1,'reputation_verifiability':0.1,'permission_safety':0.1};export function finalizeCriterionScores(a,b){const c=normalizeWeights(adjustWeightsForPerspective(a,b)),d=clampScore(c['reduce']((e,f)=>e+f['score']*f['weight'],0x0));return{'criterionScores':c,'overall':d};}function buildBindingIndex(a){const b=new Map();for(const c of a){if(c['edgeSource']==='potential')continue;if(!c['fieldName'])continue;const d=c['sourceObject']+'#'+c['fieldName'];if(!b['has'](d))b['set'](d,new Set());b['get'](d)['add'](c['targetObject']);}for(const f of a){if(f['edgeSource']!=='potential')continue;if(!f['fieldName'])continue;const g=f['sourceObject']+'#'+f['fieldName'];if(!b['has'](g)||b['get'](g)['size']===0x0){if(!b['has'](g))b['set'](g,new Set());b['get'](g)['add'](f['targetObject']);}}return b;}export function extractProjectEvaluationFacts(a){const {project:b,objects:c,edges:d,objectCache:f,reputation:g}=a,h=groupByType(c),i=buildBindingIndex(d),j=h['get']('Service')??[],k=j[0x0],l=k?parseCacheData(f['get'](k['objectAddress'])):null,m=k?getBalanceValue(l,'compensation_fund'):0x0,n=getMaxSalePrice(l),p=h['get']('Treasury')??[],q=h['get']('Allocation')??[],r=h['get']('Permission')??[],s=h['get']('Machine')??[],t=h['get']('Arbitration')??[],u=h['get']('Repository')??[],v=h['get']('Contact')??[],w=h['get']('Guard')??[],x=h['get']('Proof')??[],y=h['get']('Demand')??[],z=new Set();for(const I of c){if(I['objectAddress'])z['add'](I['objectAddress']);if(I['objectName']){z['add'](I['objectName']);const J=shortTypeName(I['objectType'])['toLowerCase']();z['add'](J+':'+I['objectName']);}}let A=0x0;for(const K of d){if(K['edgeSource']==='potential')continue;if(!z['has'](K['targetObject']))A++;}const B=new Map();for(const L of c){if(L['objectAddress'])B['set'](L['objectAddress'],shortTypeName(L['objectType']));}const C=detectCircularRefs(d,B),D=k?i['get'](k['objectAddress']+'#order_allocators')?.['size']??0x0:0x0,E=q['length']>0x0&&D>0x0;let F=!![],G=0x5;if(b['industry']&&b['industry']!=='general')try{const M=IndustryModeRegistry['Instance']()['getMode'](b['industry']);M&&(F=M['risk_constraints']?.['require_compensation_fund']??!![],M['risk_constraints']?.['compensation_fund_coverage_ratio']&&(G=M['risk_constraints']['compensation_fund_coverage_ratio']));}catch{}const H=new Map();for(const N of r){const O=parseCacheData(f['get'](N['objectAddress']));O&&H['set'](N['objectAddress'],{'address':N['objectAddress'],'entity_count':typeof O['entity_count']==='number'?O['entity_count']:undefined,'perm_remark':Array['isArray'](O['perm_remark'])?O['perm_remark']:undefined,'owner':typeof O['owner']==='string'?O['owner']:typeof O['builder']==='string'?O['builder']:undefined,'admin':Array['isArray'](O['admin'])?O['admin']:undefined});}return{'input':a,'project':b,'objects':c,'edges':d,'byType':h,'bindingIndex':i,'objectCache':f,'reputation':g,'serviceObj':k,'serviceData':l,'compensationBalance':m,'maxSalePrice':n,'treasuries':p,'allocations':q,'permissions':r,'machines':s,'arbitrations':t,'repositories':u,'contacts':v,'guards':w,'proofs':x,'demands':y,'danglingCount':A,'cycles':C,'hasAllocationEscrow':E,'orderAllocatorsBinding':D,'industryRequiresFund':F,'coverageRatio':G,'permDataMap':H};}function evaluateIndustryPattern(a,b,c,d){const e={'strengths':[],'findings':[],'matched':![]},f=a['industry'];if(!f||f==='general')return e;let g;try{g=IndustryModeRegistry['Instance']()['getMode'](f);}catch{return e;}if(!g)return e;const h=groupByType(b),i=buildBindingIndex(d);let j=0x0,k=0x0;const l=g['machine_shape'];if(l['length']>0x0){k++;const q=h['get']('Machine')??[];if(q['length']>0x0){const r=q[0x0],s=parseCacheData(c['get'](r['objectAddress'])),t=getMachineNodeCount(s);if(t>0x0&&t>=l['length'])j++,e['strengths']['push']('Industry\x20pattern\x20match:\x20Machine\x20has\x20'+t+'\x20nodes,\x20covering\x20\x22'+f+'\x22\x20mode\x27s\x20'+l['length']+'\x20expected\x20node(s)');else t>0x0&&e['findings']['push']({'criterion':'industry_pattern','severity':'info','message':'Industry\x20pattern:\x20Machine\x20has\x20'+t+'\x20nodes,\x20but\x20\x22'+f+'\x22\x20mode\x20expects\x20at\x20least\x20'+l['length'],'deduction':0x0});}}const n=g['guards'];if(n['length']>0x0){k++;const u=h['get']('Guard')??[],v=n['length'],w=n['length']*0x2;if(u['length']>=v&&u['length']<=w)j++,e['strengths']['push']('Industry\x20pattern\x20match:\x20'+u['length']+'\x20Guard(s)\x20present,\x20within\x20\x22'+f+'\x22\x20mode\x27s\x20expected\x20range\x20['+v+'-'+w+']');else{if(u['length']>0x0&&u['length']<v)e['findings']['push']({'criterion':'industry_pattern','severity':'info','message':'Industry\x20pattern:\x20'+u['length']+'\x20Guard(s)\x20present,\x20but\x20\x22'+f+'\x22\x20mode\x20expects\x20at\x20least\x20'+v+'\x20(recommended\x20range\x20['+v+'-'+w+'])','deduction':0x0});else u['length']>w&&(j++,e['strengths']['push']('Industry\x20pattern\x20match:\x20'+u['length']+'\x20Guard(s)\x20present,\x20covering\x20\x22'+f+'\x22\x20mode\x27s\x20'+v+'\x20expected\x20guard(s)'),e['findings']['push']({'criterion':'industry_pattern','severity':'info','message':'Industry\x20pattern:\x20'+u['length']+'\x20Guard(s)\x20present,\x20exceeds\x20recommended\x20max\x20'+w+'.\x20Consider\x20consolidating\x20guards\x20if\x20some\x20are\x20redundant.','deduction':0x0}));}}const o=g['allocator'];if(o){k++;const x=h['get']('Allocation')??[],y=h['get']('Service')??[],z=y[0x0],A=z?!!i['get'](z['objectAddress']+'#order_allocators')?.['size']:![],B=g['traits']['multi_tier_allocation'];if(A)j++,x['length']>0x0?e['strengths']['push']('Industry\x20pattern\x20match:\x20Service.order_allocators\x20bound\x20+\x20'+x['length']+'\x20Allocation\x20object(s)\x20present\x20(post-order)\x20—\x20matching\x20\x22'+f+'\x22\x20allocation\x20pattern'):e['strengths']['push']('Industry\x20pattern\x20match:\x20Service.order_allocators\x20template\x20bound\x20—\x20matching\x20\x22'+f+'\x22\x20allocation\x20pattern\x20(Allocation\x20objects\x20created\x20per-order)');else x['length']>0x0?(j++,e['strengths']['push']('Industry\x20pattern\x20match:\x20'+x['length']+'\x20Allocation\x20object(s)\x20present\x20—\x20matching\x20\x22'+f+'\x22\x20allocation\x20pattern')):e['findings']['push']({'criterion':'industry_pattern','severity':'info','message':'Industry\x20pattern:\x20Service.order_allocators\x20not\x20bound\x20and\x20no\x20Allocation\x20objects\x20—\x20\x22'+f+'\x22\x20mode\x20expects\x20'+(B?'multi-tier':'single-tier')+'\x20allocation\x20(Allocation\x20objects\x20are\x20created\x20per-order,\x20so\x20this\x20is\x20only\x20a\x20template-level\x20gap)','deduction':0x0});}const p=g['risk_constraints']?.['require_compensation_fund']??![];if(p||g['traits']['deposit_required']||g['traits']['trust_sensitivity']!=='low'){k++;const C=h['get']('Treasury')??[],D=h['get']('Service')??[],E=D[0x0],F=E?parseCacheData(c['get'](E['objectAddress'])):null,G=E?getBalanceValue(F,'compensation_fund'):0x0;if(C['length']>0x0||G>0x0){j++;const H=[];if(C['length']>0x0)H['push'](C['length']+'\x20Treasury\x20object(s)');if(G>0x0)H['push']('compensation_fund\x20balance\x20'+G);e['strengths']['push']('Industry\x20pattern\x20match:\x20'+H['join']('\x20+\x20')+'\x20—\x20matching\x20\x22'+f+'\x22\x20trust/deposit\x20pattern');}}e['matched']=k>0x0&&j/k>=0.6;if(e['matched'])e['strengths']['push']('Industry\x20pattern:\x20project\x20structure\x20matches\x20\x22'+f+'\x22\x20mode\x20('+j+'/'+k+'\x20checks\x20passed)');else k>0x0&&e['findings']['push']({'criterion':'industry_pattern','severity':'info','message':'Industry\x20pattern:\x20project\x20partially\x20matches\x20\x22'+f+'\x22\x20mode\x20('+j+'/'+k+'\x20checks\x20passed)','deduction':0x0});if(f==='freelance'){const I=h['get']('Machine')??[];for(const J of I){const K=parseCacheData(c['get'](J['objectAddress']));if(!K)continue;const L=getMachineNodeCount(K);if(L>0x0){e['findings']['push']({'criterion':'industry_pattern','severity':'info','message':'ISSUE-P1-4:\x20freelance\x20project\x20has\x20a\x20Machine\x20with\x20'+L+'\x20node(s).\x20'+'If\x20the\x20workflow\x20includes\x20a\x20\x22delivered\x22\x20state,\x2048h\x20auto-accept\x20requires\x20'+'an\x20off-chain\x20keeper\x20(WoWok\x20Guard\x20does\x20not\x20support\x20time-based\x20triggers).\x20'+'Keeper\x20should\x20poll\x20Progress\x20objects\x20in\x20\x22delivered\x22\x20state\x20and\x20call\x20'+'adminUnhold\x20(permission\x20224)\x20after\x2048h\x20timeout.','deduction':0x0});break;}}}return e;}function evaluateRisk(a){const b=[],d=[],e=extractProjectEvaluationFacts(a),{objects:f,edges:g,objectCache:h,project:i}=e,j=e['bindingIndex'];let k=0x64;const l=e['serviceObj'],m=e['compensationBalance'];if(l)for(const O of CRITICAL_BINDINGS){if(O['sourceType']!=='Service')continue;const P=O['fieldName']==='arbitrations'?m>0x0?!![]:O['critical']:O['critical'],Q=l['objectAddress']+'#'+O['fieldName'],R=j['get'](Q);if(!R||R['size']===0x0){const S=P?-0x19:-0xa;k+=S,b['push']({'criterion':'structural_risk','severity':P?'critical':'warning','message':'Service\x20missing\x20'+O['fieldName']+'\x20binding\x20(expected\x20'+O['targetType']+')'+(O['fieldName']==='arbitrations'?m>0x0?'\x20—\x20required\x20by\x20contract\x20when\x20compensation_fund\x20>\x200\x20(service.move:494)':'\x20—\x20optional\x20when\x20compensation_fund\x20is\x200':''),'deduction':S});}else d['push']('Service\x20has\x20'+O['fieldName']+'\x20binding');}else k=0x1e,b['push']({'criterion':'structural_risk','severity':'critical','message':'No\x20Service\x20object\x20in\x20project\x20—\x20project\x20has\x20no\x20core','deduction':-0x46});k=clampScore(k);let n=0x64;const o=e['treasuries'],p=e['allocations'],q=e['serviceData'],r=e['compensationBalance'],s=e['orderAllocatorsBinding'],t=e['hasAllocationEscrow'],w=e['industryRequiresFund'];if(o['length']===0x0&&r===0x0){if(t)n-=0x5,d['push']('Allocation\x20escrow\x20mode\x20active\x20—\x20funds\x20locked\x20in\x20contract,\x20released\x20by\x20Guard\x20verification'),b['push']({'criterion':'fund_safety','severity':'info','message':'Using\x20Allocation\x20escrow\x20('+p['length']+'\x20Allocation\x20object(s)\x20+\x20order_allocators\x20bound)\x20—\x20fund\x20safety\x20via\x20Guard\x20verification,\x20no\x20Treasury/compensation_fund\x20needed','deduction':-0x5});else w?(n-=0x1e,b['push']({'criterion':'fund_safety','severity':'warning','message':'No\x20Treasury\x20object\x20and\x20Service.compensation_fund\x20is\x20empty\x20—\x20no\x20refund\x20fund\x20for\x20buyers','deduction':-0x1e})):(n-=0xa,b['push']({'criterion':'fund_safety','severity':'info','message':'No\x20Treasury/compensation_fund\x20—\x20industry\x20\x22'+i['industry']+'\x22\x20does\x20not\x20require\x20refund\x20fund\x20(optional)','deduction':-0xa}));}else{o['length']>0x0&&d['push'](o['length']+'\x20Treasury\x20object(s)\x20present\x20—\x20independent\x20fund\x20holder');if(r>0x0){d['push']('Service.compensation_fund\x20has\x20'+r+'\x20units\x20—\x20inline\x20refund\x20fund\x20active');const T=e['maxSalePrice'];if(T>0x0){const U=e['coverageRatio'],V=U*T;r<V?(n-=0xa,b['push']({'criterion':'fund_safety','severity':'warning','message':'Service.compensation_fund\x20balance\x20('+r+')\x20is\x20less\x20than\x20'+U+'×\x20the\x20max\x20order\x20amount\x20('+T+'\x20→\x20threshold\x20'+V+').\x20Refund\x20coverage\x20may\x20be\x20insufficient\x20—\x20top\x20up\x20via\x20service.compensation_fund_add\x20to\x20avoid\x20arbitration\x20rulings\x20exceeding\x20the\x20fund.\x20(industry:\x20'+(i['industry']??'general')+',\x20ratio:\x20'+U+'×)','deduction':-0xa})):b['push']({'criterion':'fund_safety','severity':'info','message':'Service.compensation_fund\x20balance\x20('+r+')\x20covers\x20'+U+'×\x20the\x20max\x20order\x20amount\x20('+T+').\x20Fund\x20is\x20sufficient\x20for\x20refund\x20protection.\x20(industry:\x20'+(i['industry']??'general')+',\x20ratio:\x20'+U+'×)','deduction':0x0});}}else b['push']({'criterion':'fund_safety','severity':'info','message':'Treasury\x20present\x20but\x20Service.compensation_fund\x20balance\x20is\x200\x20—\x20consider\x20depositing\x20refund\x20fund','deduction':-0x5});}n=clampScore(n);let x=0x64;if(l){const W=e['serviceData'];if(W){const X=W['bPaused'],Y=W['bPublished'];Y&&X&&(x-=0x19,b['push']({'criterion':'operational_risk','severity':'warning','message':'Service\x20is\x20published\x20but\x20PAUSED\x20—\x20operations\x20halted','deduction':-0x19})),!Y&&(x-=0xf,b['push']({'criterion':'operational_risk','severity':'info','message':'Service\x20not\x20yet\x20published\x20—\x20project\x20not\x20live','deduction':-0xf}));}}const y=e['arbitrations'];y['length']===0x0?(x-=0x14,b['push']({'criterion':'operational_risk','severity':'warning','message':'No\x20Arbitration\x20object\x20—\x20disputes\x20cannot\x20be\x20resolved','deduction':-0x14})):d['push'](y['length']+'\x20Arbitration\x20object(s)\x20configured');x=clampScore(x);let z=0x64;const A=e['permissions'];A['length']===0x0&&(z-=0x28,b['push']({'criterion':'governance_risk','severity':'critical','message':'No\x20Permission\x20object\x20—\x20project\x20is\x20ungoverned','deduction':-0x28}));if(l){const Z=e['serviceData'];Z&&!isAddress(Z['um'])&&(z-=0x5,b['push']({'criterion':'governance_risk','severity':'info','message':'Service\x20has\x20no\x20UM\x20(manager)\x20—\x20UM\x20is\x20optional;\x20set\x20via\x20um_set\x20if\x20management\x20delegation\x20needed','deduction':-0x5}));}const B=e['machines'];for(const a0 of B){const a1=a0['metadata'],a2=a1?.['config'];if(a2?.['entry_node_forward_hint']){const a6=a2['entry_node_forward_hint'],a7=a6['example_forward'];a7?.['namedOperator']===''&&d['push']('Machine\x20entry\x20forward\x20uses\x20namedOperator=\x27\x27\x20(OrderHolder)\x20—\x20'+'correct\x20for\x20customer-operable\x20nodes.\x20namedOperator=\x27\x27\x20represents\x20'+'the\x20order\x20holder,\x20distinct\x20from\x20merchant\x27s\x20permission\x20index.');}const a3=a2?.['guard_objects'];a3&&a3['length']>0x0&&d['push']('Machine\x20has\x20'+a3['length']+'\x20guard\x20object\x20reference(s)\x20—\x20'+'forward-level\x20permission\x20validation\x20configured');const a4=parseCacheData(h['get'](a0['objectAddress'])),a5=getMachineNodeCount(a4);a5>0x0&&!a2&&b['push']({'criterion':'governance_risk','severity':'info','message':'Machine\x20has\x20'+a5+'\x20node(s).\x20Verify\x20each\x20forward\x20has\x20at\x20least\x20one\x20of\x20'+'namedOperator\x20or\x20permissionIndex.\x20Key:\x20namedOperator=\x27\x27\x20means\x20OrderHolder\x20'+'(customer),\x20NOT\x20\x27anyone\x27.\x20Use\x20non-empty\x20namedOperator\x20for\x20specific\x20roles,\x20'+'or\x20permissionIndex\x20for\x20permission-based\x20access.\x20Both\x20set\x20=\x20OR\x20semantic\x20'+'(either\x20can\x20execute).','deduction':0x0});}const C=e['machines'],D=e['permissions'],E=e['permDataMap'];for(const a8 of C){const a9=a8['objectAddress']+'#permission',aa=j['get'](a9);if(!aa||aa['size']===0x0)continue;let ab=null;for(const ah of aa){ab=ah;break;}if(!ab)continue;const ac=E['get'](ab);if(!ac)continue;const ad=parseCacheData(h['get'](a8['objectAddress']));if(!ad)continue;const ae=extractMachineNodesFromCache(ad);if(ae['length']===0x0)continue;const af=collectPermissionIndexes(ae);if(af['requiredIndexes']['length']===0x0)continue;const ag=checkPermissionAuthorization(af['requiredIndexes'],ac);!ag['allAuthorized']?(z-=0x19,b['push']({'criterion':'governance_risk','severity':'critical','message':'Machine\x20'+a8['objectAddress']['slice'](0x0,0x8)+'\x20has\x20forwards\x20referencing\x20'+('un-authorized\x20permission\x20indexes:\x20['+ag['missingIndexes']['join'](',\x20')+'].\x20')+'These\x20forwards\x20can\x20NEVER\x20be\x20executed\x20—\x20Progress\x20will\x20be\x20permanently\x20stuck.\x20'+'Grant\x20entities\x20for\x20these\x20indexes\x20via\x20permission.op=\x22add\x20perm\x20by\x20index\x22\x20'+'before\x20publishing\x20the\x20Machine.','deduction':-0x19})):d['push']('Machine\x20'+a8['objectAddress']['slice'](0x0,0x8)+':\x20all\x20'+af['requiredIndexes']['length']+'\x20'+'permission\x20index(es)\x20are\x20authorized');}if(l&&y['length']>0x0){const ai=l['objectAddress']+'#permission',aj=j['get'](ai),ak=aj&&aj['size']>0x0?Array['from'](aj)[0x0]:null,al=ak?E['get'](ak):null;for(const am of y){const an=am['objectAddress']+'#permission',ao=j['get'](an),ap=ao&&ao['size']>0x0?Array['from'](ao)[0x0]:null;if(!ak||!ap)continue;if(ak===ap){z-=0x1e,b['push']({'criterion':'governance_risk','severity':'critical','message':'Arbitration\x20'+am['objectAddress']['slice'](0x0,0x8)+'\x20and\x20Service\x20share\x20the\x20SAME\x20'+('Permission\x20object\x20('+ak['slice'](0x0,0x8)+').\x20This\x20breaks\x20dispute\x20')+'fairness\x20—\x20the\x20merchant\x20fully\x20controls\x20arbitration\x20operations.\x20'+'Use\x20a\x20separate\x20Permission\x20object\x20for\x20Arbitration\x20to\x20ensure\x20independent\x20'+'dispute\x20resolution.\x20(per\x20arbitration.move:\x20the\x20permission\x20field\x20controls\x20'+'who\x20can\x20vote,\x20confirm,\x20and\x20execute\x20arbitration\x20rulings)','deduction':-0x1e});continue;}const aq=E['get'](ap);if(al&&aq){const ar=al['owner']?.['toLowerCase'](),as=aq['owner']?.['toLowerCase'](),at=new Set((al['admin']??[])['map'](ax=>ax['toLowerCase']())),au=new Set((aq['admin']??[])['map'](ax=>ax['toLowerCase']())),av=ar&&as&&ar===as,aw=[...at]['some'](ax=>au['has'](ax));if(av||aw){const ax=av&&aw?'owner\x20AND\x20admin\x20overlap':av?'same\x20owner':'admin\x20overlap';z-=0x14,b['push']({'criterion':'governance_risk','severity':'warning','message':'Arbitration\x20'+am['objectAddress']['slice'](0x0,0x8)+'\x20and\x20Service\x20have\x20'+('overlapping\x20Permission\x20control\x20('+ax+').\x20Even\x20with\x20separate\x20')+'Permission\x20objects,\x20shared\x20control\x20undermines\x20dispute\x20independence.\x20'+'The\x20contract\x20only\x20enforces\x20different\x20Permission\x20object\x20addresses\x20'+'(E_ARBITRATION_PERMISSION_CONFLICT)\x20—\x20it\x20does\x20NOT\x20check\x20who\x20controls\x20'+'each\x20Permission,\x20so\x20this\x20governance\x20risk\x20exists\x20on\x20ANY\x20network.\x20'+'Use\x20a\x20completely\x20independent\x20third-party\x20Permission\x20(different\x20owner\x20'+'and\x20admin\x20list)\x20for\x20Arbitration.','deduction':-0x14});}else d['push']('Arbitration\x20'+am['objectAddress']['slice'](0x0,0x8)+'\x20has\x20independent\x20'+'Permission\x20(separate\x20owner/admin)\x20—\x20trustworthy\x20dispute\x20resolution');}}}z=clampScore(z);let F=0x64;const G=e['danglingCount'],H=e['cycles'];if(G>0x0){const ay=-Math['min'](0x14,G*0x3);F+=ay,b['push']({'criterion':'graph_coherence','severity':G>=0x3?'warning':'info','message':G+'\x20edge(s)\x20point\x20to\x20objects\x20outside\x20the\x20project\x20—\x20dangling\x20references','deduction':ay});}H['length']>0x0&&(F-=0xf,b['push']({'criterion':'graph_coherence','severity':'warning','message':H['length']+'\x20circular\x20reference(s)\x20detected:\x20'+H['slice'](0x0,0x2)['join'](';\x20')+(H['length']>0x2?'...':''),'deduction':-0xf}));G===0x0&&H['length']===0x0&&d['push']('Graph\x20is\x20coherent\x20—\x20no\x20dangling\x20refs\x20or\x20cycles');F=clampScore(F);let I=0x64,J='no\x20industry\x20declared\x20—\x20check\x20skipped';if(!i['industry'])b['push']({'criterion':'mode_registry','severity':'info','message':'Project\x20has\x20no\x20industry\x20tag\x20—\x20mode\x20registry\x20gates\x20(metrics/constraints)\x20not\x20evaluated.\x20Set\x20project\x20industry\x20to\x20enable.','deduction':0x0});else try{const az=IndustryModeRegistry['Instance']()['evaluateMode'](i['industry'],i['description']??i['name'],{'prefix':i['prefix'],'network':i['network']==='mainnet'?'mainnet':'testnet','business_intent':i['description']??undefined,'industry':i['industry'],'version':i['currentVersion']??undefined}),aA=az['unmet_conditions']['some'](aB=>aB['includes']('not\x20found'));if(aA)I=0x32,J='mode\x20\x27'+i['industry']+'\x27\x20not\x20registered',b['push']({'criterion':'mode_registry','severity':'warning','message':'Industry\x20mode\x20\x27'+i['industry']+'\x27\x20is\x20not\x20registered\x20in\x20the\x20mode\x20registry\x20—\x20cannot\x20verify\x20capability/conflict/constraint\x20gates.\x20Falling\x20back\x20to\x20unverified\x20mode.','deduction':-0x32});else{for(const aB of az['violated_constraints']){I-=0x19,b['push']({'criterion':'mode_registry','severity':'critical','message':'Mode\x20\x27'+i['industry']+'\x27\x20hard\x20constraint\x20violated:\x20'+aB,'deduction':-0x19});}for(const aC of az['capability_conflicts']){I-=0x14,b['push']({'criterion':'mode_registry','severity':'critical','message':'Mode\x20\x27'+i['industry']+'\x27\x20capability\x20conflict:\x20'+aC,'deduction':-0x14});}for(const aD of az['unmet_conditions']){I-=0xa,b['push']({'criterion':'mode_registry','severity':'warning','message':'Mode\x20\x27'+i['industry']+'\x27\x20soft\x20constraint\x20unmet:\x20'+aD,'deduction':-0xa});}I=clampScore(I),J='metric\x20risk\x20'+az['risk_score']+'\x20/\x20benefit\x20'+az['benefit_score']+'\x20'+('(ratio\x20'+az['risk_benefit_ratio']['toFixed'](0x2)+');\x20')+(az['violated_constraints']['length']+'\x20hard\x20+\x20'+az['unmet_conditions']['length']+'\x20soft\x20constraint\x20issue(s),\x20')+(az['capability_conflicts']['length']+'\x20capability\x20conflict(s)'),az['applicable']&&az['violated_constraints']['length']===0x0&&az['capability_conflicts']['length']===0x0&&az['unmet_conditions']['length']===0x0&&d['push']('Mode\x20\x27'+i['industry']+'\x27\x20passes\x20all\x20mode-registry\x20gates\x20—\x20'+('metric\x20risk\x20'+az['risk_score']+'\x20/\x20benefit\x20'+az['benefit_score']+'\x20')+('(risk-benefit\x20ratio\x20'+az['risk_benefit_ratio']['toFixed'](0x2)+')'));}}catch{J='mode\x20registry\x20unavailable\x20—\x20check\x20skipped';}I=clampScore(I);const {criterionScores:K,overall:L}=finalizeCriterionScores([{'name':'structural_risk','score':k,'weight':RISK_WEIGHTS['structural_risk'],'rationale':CRITICAL_BINDINGS['filter'](aE=>aE['sourceType']==='Service')['length']+'\x20expected\x20Service\x20bindings\x20checked'},{'name':'fund_safety','score':n,'weight':RISK_WEIGHTS['fund_safety'],'rationale':'Treasury\x20+\x20compensation_fund\x20coverage'},{'name':'operational_risk','score':x,'weight':RISK_WEIGHTS['operational_risk'],'rationale':'Service\x20state\x20+\x20arbitration\x20coverage'},{'name':'governance_risk','score':z,'weight':RISK_WEIGHTS['governance_risk'],'rationale':'Permission\x20+\x20UM\x20presence'},{'name':'graph_coherence','score':F,'weight':RISK_WEIGHTS['graph_coherence'],'rationale':G+'\x20dangling\x20+\x20'+H['length']+'\x20circular\x20refs'},{'name':'mode_registry','score':I,'weight':RISK_WEIGHTS['mode_registry'],'rationale':J}],i['perspective']),M=b['filter'](aE=>aE['severity']==='critical')['length'],N=M>0x0?'HIGH\x20RISK:\x20'+M+'\x20critical\x20issue(s).\x20'+b['length']+'\x20total\x20findings.':'Moderate\x20risk:\x20'+b['length']+'\x20finding(s),\x20no\x20critical\x20issues.';return{'evaluationType':'risk','score':L,'summary':N,'criterionScores':K,'findings':b,'strengths':d,'needsLlm':![],'evaluatedAt':Date['now']()};}function evaluateTrust(a){const b=[],c=[],{objects:d,edges:e,objectCache:f,reputation:g,project:h}=a,i=groupByType(d),j=i['get']('Service')??[];let k=0x32;if(g&&g['size']>0x0&&j[0x0]){const z=g['get'](j[0x0]['objectAddress']);if(z){const A=z['likes']+z['dislikes'];if(A>0x0){const B=z['likes']/A;k=clampScore(0x32+(B-0.5)*0x64);if(B>=0.8)c['push']('Strong\x20reputation:\x20'+z['likes']+'\x20likes\x20vs\x20'+z['dislikes']+'\x20dislikes');else B<0.4&&b['push']({'criterion':'reputation','severity':'warning','message':'Poor\x20reputation:\x20'+z['dislikes']+'\x20dislikes\x20vs\x20'+z['likes']+'\x20likes','deduction':-0x14});}z['affiliations']>=0x3&&(c['push'](z['affiliations']+'\x20affiliations\x20—\x20trusted\x20by\x20other\x20merchants'),k=clampScore(k+0xa));}}else b['push']({'criterion':'reputation','severity':'info','message':'No\x20Registrar\x20reputation\x20data\x20—\x20unknown\x20merchant\x20standing','deduction':-0xa});k=clampScore(k);let l=0x64;const m=i['get']('Arbitration')??[];m['length']===0x0?(l=0x1e,b['push']({'criterion':'arbitration_coverage','severity':'critical','message':'No\x20Arbitration\x20object\x20—\x20buyers\x20have\x20no\x20dispute\x20resolution\x20path','deduction':-0x46})):c['push'](m['length']+'\x20Arbitration\x20object(s)\x20—\x20dispute\x20resolution\x20available');l=clampScore(l);let n=0x3c;const o=i['get']('Guard')??[];o['length']===0x0?(n-=0x14,b['push']({'criterion':'guard_quality','severity':'warning','message':'No\x20Guard\x20objects\x20—\x20no\x20validation\x20rules','deduction':-0x14})):(n=0x50,c['push'](o['length']+'\x20Guard\x20object(s)\x20—\x20validation\x20rules\x20configured'));if(j[0x0]){const C=buildBindingIndex(e),D=j[0x0]['objectAddress']+'#buy_guard';if(C['get'](D)?.['size'])n=clampScore(n+0xf),c['push']('Service\x20has\x20buy_guard\x20bound\x20—\x20purchase\x20validation\x20active');else o['length']>0x0&&c['push']('Guard\x20objects\x20present\x20(buy_guard\x20binding\x20optional)');}n=clampScore(n);let p=0x3c;if(j[0x0]){const E=parseCacheData(f['get'](j[0x0]['objectAddress']));if(E){const F=E['description'];typeof F==='string'&&F['length']>0x0?(p+=0xf,c['push']('Service\x20has\x20description')):b['push']({'criterion':'transparency','severity':'info','message':'Service\x20has\x20no\x20description\x20—\x20buyers\x20cannot\x20evaluate\x20offering','deduction':-0xa});}}const q=i['get']('Repository')??[];q['length']>0x0&&(p=clampScore(p+0xa),c['push'](q['length']+'\x20Repository\x20object(s)\x20—\x20supporting\x20data\x20published'));const r=i['get']('Contact')??[];r['length']>0x0?(p=clampScore(p+0xa),c['push']('Contact\x20information\x20available')):b['push']({'criterion':'transparency','severity':'info','message':'No\x20Contact\x20object\x20—\x20buyers\x20cannot\x20reach\x20merchant','deduction':-0x5});p=clampScore(p);let s=0x64;const t=[],u=buildBindingIndex(e),v=j[0x0];if(v){const G=parseCacheData(f['get'](v['objectAddress']));for(const I of CONSUMER_DUE_DILIGENCE){let J=![];switch(I['id']){case'E1':J=!!G?.['bPublished'];break;case'E2':J=!!G&&!G['bPaused'];break;case'E3':J=(i['get']('Machine')??[])['some'](K=>{const L=parseCacheData(f['get'](K['objectAddress']));return L&&(getNumberField(L,'node_count')>0x0||countArrayField(L,'nodes')>0x0);});break;case'E4':J=!!u['get'](v['objectAddress']+'#buy_guard')?.['size']||(i['get']('Guard')??[])['length']>0x0;break;case'E5':J=getBalanceValue(G,'compensation_fund')>0x0||(i['get']('Treasury')??[])['length']>0x0;break;case'E6':J=(i['get']('Arbitration')??[])['length']>0x0;break;case'E7':J=(i['get']('Permission')??[])['length']>0x0;break;case'E8':J=(i['get']('Contact')??[])['length']>0x0;break;case'E9':J=(i['get']('Repository')??[])['length']>0x0;break;case'E10':J=!!u['get'](v['objectAddress']+'#rewards')?.['size'];break;case'E11':J=!!(G&&typeof G['description']==='string'&&G['description']['length']>0x0);break;case'E12':if(g&&g['size']>0x0){const K=g['get'](v['objectAddress']);J=!!K&&K['likes']>=K['dislikes'];}break;}if(J)t['push'](I['id']);else{let L=I['deduction'],M=I['severity'];if(I['id']==='E5'&&h['industry']&&h['industry']!=='general')try{const O=IndustryModeRegistry['Instance']()['getMode'](h['industry']);O&&O['risk_constraints']?.['require_compensation_fund']===![]&&(L=-0x3,M='info');}catch{}s+=L;const N=I['id']==='E5'&&L!==I['deduction']?'\x20(industry\x20does\x20not\x20require\x20compensation_fund\x20—\x20reduced\x20deduction)':'';b['push']({'criterion':'consumer_diligence','severity':M,'message':I['id']+':\x20'+I['check']+'\x20—\x20FAIL:\x20condition\x20not\x20met'+N+'\x20[severity:\x20'+M+']','deduction':L});}}const H=t['length']/CONSUMER_DUE_DILIGENCE['length'];H>=0.8&&c['push']('Consumer\x20due\x20diligence:\x20'+t['length']+'/'+CONSUMER_DUE_DILIGENCE['length']+'\x20checks\x20passed');}else s=0x14,b['push']({'criterion':'consumer_diligence','severity':'critical','message':'No\x20Service\x20object\x20—\x20consumer\x20due\x20diligence\x20cannot\x20be\x20performed','deduction':-0x50});s=clampScore(s);const {criterionScores:w,overall:x}=finalizeCriterionScores([{'name':'reputation','score':k,'weight':TRUST_WEIGHTS['reputation'],'rationale':'Registrar\x20likes/dislikes\x20+\x20affiliations'},{'name':'arbitration_coverage','score':l,'weight':TRUST_WEIGHTS['arbitration_coverage'],'rationale':'Dispute\x20resolution\x20availability'},{'name':'guard_quality','score':n,'weight':TRUST_WEIGHTS['guard_quality'],'rationale':'Validation\x20rules\x20+\x20buy_guard\x20binding'},{'name':'transparency','score':p,'weight':TRUST_WEIGHTS['transparency'],'rationale':'Description\x20+\x20Repository\x20+\x20Contact\x20presence'},{'name':'consumer_diligence','score':s,'weight':TRUST_WEIGHTS['consumer_diligence'],'rationale':t['length']+'/'+CONSUMER_DUE_DILIGENCE['length']+'\x20E-checks\x20passed'}],h['perspective']),y=x>=0x46?'Trusted\x20project\x20(score\x20'+x+'/100).\x20'+c['length']+'\x20strength(s).':'Limited\x20trust\x20signals\x20(score\x20'+x+'/100).\x20'+b['length']+'\x20finding(s).';return{'evaluationType':'trust','score':x,'summary':y,'criterionScores':w,'findings':b,'strengths':c,'needsLlm':![],'evaluatedAt':Date['now']()};}function evaluateCompleteness(a){const b=[],c=[],{objects:d,edges:f,objectCache:g,project:h}=a,i=groupByType(d),j=i['get']('Service')??[],k=buildBindingIndex(f),l=j[0x0],n=l?parseCacheData(g['get'](l['objectAddress'])):null,p=getBalanceValue(n,'compensation_fund'),q=i['get']('Allocation')??[],r=l?k['get'](l['objectAddress']+'#order_allocators')?.['size']??0x0:0x0,s=q['length']>0x0&&r>0x0,t=resolveRequiredItems(h['industry']??undefined,p,s),u=t['filter'](O=>O['required'])['length'],v=t['filter'](O=>!O['required']);let w=0x0,x=0x0;const y=[],z=[];for(const O of t){const P=(i['get'](O['objectType'])?.['length']??0x0)>0x0,Q=O['fieldName']?!!k['get']((j[0x0]?.['objectAddress']??'')+'#'+O['fieldName'])?.['size']:P;O['required']?Q||!O['fieldName']&&P?w++:y['push'](O['id']+'('+O['objectType']+')'):Q||!O['fieldName']&&P?x++:z['push'](O['id']+'('+O['objectType']+')');}const A=w/u,B=v['length']>0x0?x/v['length']:0x1;let C=clampScore(A*0x50+B*0x14);y['length']>0x0?b['push']({'criterion':'object_coverage','severity':y['length']>=0x3?'critical':'warning','message':'Missing\x20required\x20items:\x20'+y['join'](',\x20')+'\x20—\x20'+y['length']+'/'+u+'\x20required\x20items\x20absent','deduction':-0xf*y['length']}):c['push']('All\x20'+u+'\x20required\x20items\x20present\x20(R1-R8)');if(z['length']>0x0&&z['length']===v['length'])b['push']({'criterion':'object_coverage','severity':'info','message':'No\x20optional\x20items\x20configured:\x20'+z['join'](',\x20')+'\x20—\x20recommended\x20for\x20enhanced\x20UX','deduction':-0x5});else x>0x0&&c['push'](x+'/'+v['length']+'\x20optional\x20items\x20configured\x20(R9-R12)');C=clampScore(C);let D=0x64;if(j[0x0]){const R=j[0x0]['objectAddress'],S=parseCacheData(g['get'](R)),T=getBalanceValue(S,'compensation_fund');let U=0x0,V=0x0;for(const W of CRITICAL_BINDINGS){if(W['sourceType']!=='Service')continue;V++;const X=W['fieldName']==='arbitrations'?T>0x0?!![]:W['critical']:W['critical'],Y=R+'#'+W['fieldName'];if(k['get'](Y)?.['size'])U++;else{const Z=X?-0x14:-0x8;D+=Z,b['push']({'criterion':'binding_completeness','severity':X?'critical':'warning','message':'Service.'+W['fieldName']+'\x20not\x20bound\x20(expected\x20'+W['targetType']+')'+(W['fieldName']==='arbitrations'?T>0x0?'\x20—\x20required\x20by\x20contract\x20when\x20compensation_fund\x20>\x200':'\x20—\x20optional\x20when\x20compensation_fund\x20is\x200':''),'deduction':Z});}}U===V&&c['push']('All\x20'+V+'\x20Service\x20bindings\x20established');}else D=0x0,b['push']({'criterion':'binding_completeness','severity':'critical','message':'No\x20Service\x20object\x20—\x20cannot\x20evaluate\x20bindings','deduction':-0x64});D=clampScore(D);let E=0x50;const F=i['get']('Machine')??[];if(F['length']===0x0)E-=0x14,b['push']({'criterion':'workflow_rationality','severity':'info','message':'No\x20Machine\x20object\x20—\x20bind\x20one\x20before\x20publishing\x20(deploy-time\x20requirement)','deduction':-0x14});else for(const a0 of F){const a1=parseCacheData(g['get'](a0['objectAddress']));if(a1){const a2=getMachineNodeCount(a1);a2>0x0?c['push']('Machine\x20has\x20'+a2+'\x20node(s)'):(E-=0xa,b['push']({'criterion':'workflow_rationality','severity':'info','message':'Machine\x20'+a0['objectAddress']['slice'](0x0,0x8)+'\x20has\x20no\x20nodes','deduction':-0xa}));}}const G=new Set();for(const a3 of d){if(a3['objectAddress'])G['add'](a3['objectAddress']);if(a3['objectName']){G['add'](a3['objectName']);const a4=shortTypeName(a3['objectType'])['toLowerCase']();G['add'](a4+':'+a3['objectName']);}}let H=0x0;for(const a5 of f){if(a5['edgeSource']==='potential')continue;if(!G['has'](a5['targetObject']))H++;}H>0x0&&(E=clampScore(E-Math['min'](0x14,H*0x2)),b['push']({'criterion':'workflow_rationality','severity':'info','message':H+'\x20edge(s)\x20point\x20to\x20objects\x20not\x20in\x20project\x20—\x20dangling\x20references','deduction':-Math['min'](0x14,H*0x2)}));E=clampScore(E);let I=0x64;if(j[0x0]){const a6=parseCacheData(g['get'](j[0x0]['objectAddress']));if(a6){const a7=a6['bPublished'];if(a7){c['push']('Service\x20already\x20published\x20—\x20deployment\x20complete'),I=0x64;const a8=a6['machine'];if(typeof a8==='string'&&a8['startsWith']('0x')){const a9=parseCacheData(g['get'](a8));a9&&a9['bPublished']===![]&&(I-=0xa,b['push']({'criterion':'deployment_readiness','severity':'info','message':'Bound\x20Machine\x20'+a8['slice'](0x0,0x8)+'\x20is\x20not\x20published\x20—\x20order_progress\x20will\x20fail\x20(machine.move\x20E_NOT_PUBLISHED)','deduction':-0xa}));}}else{const aa=k['get'](j[0x0]['objectAddress']+'#machine')?.['size'],ab=k['get'](j[0x0]['objectAddress']+'#permission')?.['size'],ac=k['get'](j[0x0]['objectAddress']+'#order_allocators')?.['size'],ad=getBalanceValue(a6,'compensation_fund'),ae=k['get'](j[0x0]['objectAddress']+'#arbitrations')?.['size'];!aa&&(I-=0x1e,b['push']({'criterion':'deployment_readiness','severity':'critical','message':'Service\x20has\x20no\x20Machine\x20—\x20cannot\x20publish','deduction':-0x1e}));!ab&&(I-=0x1e,b['push']({'criterion':'deployment_readiness','severity':'critical','message':'Service\x20has\x20no\x20Permission\x20—\x20cannot\x20publish','deduction':-0x1e}));!ac&&(I-=0x1e,b['push']({'criterion':'deployment_readiness','severity':'critical','message':'Service\x20has\x20no\x20order_allocators\x20—\x20cannot\x20publish\x20(service.move:493\x20E_NO_ALLOCATOR)','deduction':-0x1e}));ad>0x0&&!ae&&(I-=0x19,b['push']({'criterion':'deployment_readiness','severity':'critical','message':'Service\x20has\x20compensation_fund\x20('+ad+')\x20but\x20no\x20arbitrations\x20—\x20cannot\x20publish\x20(service.move:495\x20E_ARBITRATION_NOT_SET_WITH_COMPENSATION_FUND)','deduction':-0x19}));if(aa&&ab&&ac){if(ad>0x0&&ae)c['push']('Service\x20ready\x20to\x20publish\x20(Machine\x20+\x20Permission\x20+\x20order_allocators\x20+\x20arbitrations\x20bound)');else ad===0x0&&c['push']('Service\x20ready\x20to\x20publish\x20(Machine\x20+\x20Permission\x20+\x20order_allocators\x20bound;\x20arbitrations\x20optional\x20when\x20compensation_fund\x20is\x200)');}}}}else I=0x0;I=clampScore(I);const {criterionScores:J,overall:K}=finalizeCriterionScores([{'name':'object_coverage','score':C,'weight':COMPLETENESS_WEIGHTS['object_coverage'],'rationale':'R1-R8:\x20'+w+'/'+u+'\x20required,\x20R9-R12:\x20'+x+'/'+v['length']+'\x20optional'},{'name':'binding_completeness','score':D,'weight':COMPLETENESS_WEIGHTS['binding_completeness'],'rationale':'Service\x20critical\x20bindings\x20checked'},{'name':'workflow_rationality','score':E,'weight':COMPLETENESS_WEIGHTS['workflow_rationality'],'rationale':'Machine\x20nodes\x20+\x20dangling\x20edges'},{'name':'deployment_readiness','score':I,'weight':COMPLETENESS_WEIGHTS['deployment_readiness'],'rationale':'Service\x20publishable\x20state'}],h['perspective']),L=b['filter'](af=>af['severity']==='critical')['length'],M=L>0x0?'Incomplete:\x20'+L+'\x20critical\x20gap(s).\x20Not\x20ready\x20for\x20deployment.':K>=0x50?'Complete\x20project\x20(score\x20'+K+'/100).\x20Ready\x20for\x20deployment.':'Partially\x20complete\x20(score\x20'+K+'/100).\x20'+b['length']+'\x20gap(s)\x20to\x20address.',N=evaluateIndustryPattern(h,d,g,f);return c['push'](...N['strengths']),b['push'](...N['findings']),{'evaluationType':'completeness','score':K,'summary':M,'criterionScores':J,'findings':b,'strengths':c,'needsLlm':![],'evaluatedAt':Date['now']()};}function evaluateEscrowQuality(a){const {objects:b,edges:c,objectCache:d}=a,e=groupByType(b),f=e['get']('Service')??[],g=e['get']('Allocation')??[],h=buildBindingIndex(c);let i=0x32;const j=[];if(f['length']===0x0)return{'name':'escrow_quality','score':0x0,'weight':EXTENDED_DIMENSION_WEIGHTS['escrow_quality'],'rationale':'No\x20Service\x20object'};const k=f[0x0],l=parseCacheData(d['get'](k['objectAddress'])),m=h['get'](k['objectAddress']+'#order_allocators')?.['size']??0x0;if(m>0x0&&g['length']>0x0)i=0x5a,j['push']('On-chain\x20escrow\x20active:\x20order_allocators\x20bound\x20+\x20Allocation\x20objects\x20present');else{if(m>0x0)i=0x46,j['push']('order_allocators\x20template\x20bound\x20—\x20escrow\x20will\x20activate\x20per-order');else l&&getBalanceValue(l,'compensation_fund')>0x0?(i=0x3c,j['push']('compensation_fund\x20present\x20but\x20no\x20Allocation\x20escrow\x20—\x20funds\x20held\x20by\x20merchant,\x20not\x20locked\x20in\x20contract')):(i=0x14,j['push']('No\x20escrow\x20mechanism\x20—\x20funds\x20flow\x20directly\x20to\x20merchant\x20(high\x20counterparty\x20risk)'));}return{'name':'escrow_quality','score':clampScore(i),'weight':EXTENDED_DIMENSION_WEIGHTS['escrow_quality'],'rationale':j['join'](';\x20')};}function evaluateProofIntegrity(a){const {objects:b,edges:c}=a,d=groupByType(b),e=d['get']('Repository')??[],f=d['get']('Guard')??[],g=d['get']('Proof')??[];let h=0x32;const i=[];return e['length']>0x0&&(h+=0x14,i['push'](e['length']+'\x20Repository\x20object(s)')),f['length']>0x0&&(h+=0xf,i['push'](f['length']+'\x20Guard\x20object(s)')),g['length']>0x0&&(h+=0xf,i['push'](g['length']+'\x20Proof\x20object(s)')),e['length']===0x0&&f['length']===0x0&&(h=0x14,i['push']('No\x20on-chain\x20proof\x20mechanism\x20—\x20evidence\x20can\x20be\x20tampered')),{'name':'proof_integrity','score':clampScore(h),'weight':EXTENDED_DIMENSION_WEIGHTS['proof_integrity'],'rationale':i['join'](',\x20')||'No\x20proof\x20objects'};}function evaluateArbitrationFairness(a){const {objects:b,edges:c,objectCache:d}=a,e=groupByType(b),f=e['get']('Service')??[],g=e['get']('Arbitration')??[],h=buildBindingIndex(c);if(g['length']===0x0)return{'name':'arbitration_fairness','score':0x0,'weight':EXTENDED_DIMENSION_WEIGHTS['arbitration_fairness'],'rationale':'No\x20Arbitration\x20configured'};let i=0x32;const j=[],k=f[0x0];if(!k)return{'name':'arbitration_fairness','score':0x1e,'weight':EXTENDED_DIMENSION_WEIGHTS['arbitration_fairness'],'rationale':'No\x20Service\x20to\x20compare\x20against'};const l=k['objectAddress']+'#permission',m=h['get'](l)?.['values']()['next']()['value'];for(const n of g){const o=n['objectAddress']+'#permission',p=h['get'](o)?.['values']()['next']()['value'];if(!m||!p){i-=0xa,j['push']('Arbitration\x20'+n['objectAddress']['slice'](0x0,0x8)+'\x20missing\x20permission\x20binding');continue;}m===p?(i=0xa,j['push']('Arbitration\x20'+n['objectAddress']['slice'](0x0,0x8)+'\x20shares\x20SAME\x20Permission\x20as\x20Service\x20—\x20NOT\x20independent')):(i+=0x1e,j['push']('Arbitration\x20'+n['objectAddress']['slice'](0x0,0x8)+'\x20has\x20independent\x20Permission'));}return{'name':'arbitration_fairness','score':clampScore(i),'weight':EXTENDED_DIMENSION_WEIGHTS['arbitration_fairness'],'rationale':j['join'](';\x20')};}function evaluateFeeTransparency(a){const {objects:b,edges:c,objectCache:d}=a,e=groupByType(b),f=e['get']('Allocation')??[],g=e['get']('Service')??[];let h=0x3c;const i=[];f['length']>0x0&&(h+=0x14,i['push'](f['length']+'\x20Allocation\x20object(s)\x20—\x20fee\x20distribution\x20on-chain'));const j=g[0x0];if(j){const k=parseCacheData(d['get'](j['objectAddress']));k?.['sales']&&Array['isArray'](k['sales'])&&(h+=0xa,i['push'](k['sales']['length']+'\x20sale\x20item(s)\x20—\x20pricing\x20visible')),k?.['compensation_fund']&&getBalanceValue(k,'compensation_fund')>0x0&&(h+=0xa,i['push']('compensation_fund\x20visible'));}return{'name':'fee_transparency','score':clampScore(h),'weight':EXTENDED_DIMENSION_WEIGHTS['fee_transparency'],'rationale':i['join'](',\x20')||'Limited\x20fee\x20visibility'};}function evaluateTimeoutProtection(a){const {objects:b,objectCache:c}=a,d=groupByType(b),e=d['get']('Machine')??[];let f=0x32;const g=[];for(const h of e){const i=parseCacheData(c['get'](h['objectAddress'])),j=getMachineNodeCount(i);if(j>0x0){const k=h['metadata'],l=k?.['config'];if(l?.['timeout_guard']||l?.['time_guard'])f+=0x1e,g['push']('Machine\x20has\x20timeout\x20guard\x20configured');else j>=0x2&&(f+=0xa,g['push']('Machine\x20has\x20'+j+'\x20nodes\x20—\x20workflow\x20structure\x20present'));}}return e['length']===0x0&&(f=0x14,g['push']('No\x20Machine\x20—\x20no\x20workflow\x20timeout\x20protection')),{'name':'timeout_protection','score':clampScore(f),'weight':EXTENDED_DIMENSION_WEIGHTS['timeout_protection'],'rationale':g['join'](';\x20')||'No\x20timeout\x20mechanisms\x20detected'};}function evaluateSupplierVisibility(a){const {objects:b}=a,c=groupByType(b),d=c['get']('Demand')??[],e=c['get']('Allocation')??[];let f=0x3c;const g=[];return d['length']>0x0&&(f+=0x14,g['push'](d['length']+'\x20Demand\x20object(s)\x20—\x20supplier\x20discovery\x20on-chain')),e['length']>0x0&&(f+=0x14,g['push'](e['length']+'\x20Allocation\x20object(s)\x20—\x20supplier\x20payments\x20visible')),d['length']===0x0&&e['length']===0x0&&(f=0x1e,g['push']('No\x20Demand\x20or\x20Allocation\x20—\x20supplier\x20relationships\x20opaque')),{'name':'supplier_visibility','score':clampScore(f),'weight':EXTENDED_DIMENSION_WEIGHTS['supplier_visibility'],'rationale':g['join'](',\x20')||'No\x20supplier\x20transparency'};}function evaluateContentCommitment(a){const {objects:b}=a,c=groupByType(b),d=c['get']('Repository')??[],e=c['get']('Guard')??[];let f=0x32;const g=[];return d['length']>0x0&&(f+=0x19,g['push']('Repository\x20present\x20—\x20content\x20hash\x20commitments\x20possible')),e['length']>0x0&&(f+=0x19,g['push']('Guard\x20present\x20—\x20delivery\x20verification\x20possible')),{'name':'content_commitment','score':clampScore(f),'weight':EXTENDED_DIMENSION_WEIGHTS['content_commitment'],'rationale':g['join'](',\x20')||'No\x20content\x20commitment\x20mechanism'};}function evaluateReputationVerifiability(a){const {reputation:b,objects:c}=a,d=groupByType(c)['get']('Service')??[];let e=0x28;const f=[];if(b&&b['size']>0x0&&d[0x0]){const g=b['get'](d[0x0]['objectAddress']);g&&(e+=0x1e,f['push']('Registrar\x20data:\x20'+g['likes']+'\x20likes,\x20'+g['dislikes']+'\x20dislikes,\x20'+g['affiliations']+'\x20affiliations'));}return d['length']>0x0&&(e+=0xa,f['push']('Service\x20object\x20present\x20—\x20reputation\x20can\x20accumulate')),{'name':'reputation_verifiability','score':clampScore(e),'weight':EXTENDED_DIMENSION_WEIGHTS['reputation_verifiability'],'rationale':f['join'](',\x20')||'No\x20reputation\x20data\x20available'};}function evaluatePermissionSafety(a){const {objects:b,edges:c,objectCache:d}=a,e=groupByType(b),f=e['get']('Machine')??[],g=e['get']('Permission')??[],h=buildBindingIndex(c);let i=0x3c;const j=[];if(f['length']===0x0)return{'name':'permission_safety','score':0x32,'weight':EXTENDED_DIMENSION_WEIGHTS['permission_safety'],'rationale':'No\x20Machine\x20to\x20check'};const k=new Map();for(const l of g){const m=parseCacheData(d['get'](l['objectAddress']));m&&k['set'](l['objectAddress'],{'address':l['objectAddress'],'entity_count':typeof m['entity_count']==='number'?m['entity_count']:undefined,'perm_remark':Array['isArray'](m['perm_remark'])?m['perm_remark']:undefined,'owner':typeof m['owner']==='string'?m['owner']:undefined,'admin':Array['isArray'](m['admin'])?m['admin']:undefined});}for(const n of f){const o=h['get'](n['objectAddress']+'#permission');if(!o||o['size']===0x0)continue;const p=o['values']()['next']()['value'],q=p?k['get'](p):null;if(!q)continue;const r=parseCacheData(d['get'](n['objectAddress'])),s=extractMachineNodesFromCache(r);if(s['length']===0x0)continue;const t=collectPermissionIndexes(s);if(t['requiredIndexes']['length']===0x0)continue;const u=checkPermissionAuthorization(t['requiredIndexes'],q);!u['allAuthorized']?(i-=0x1e,j['push']('Machine\x20'+n['objectAddress']['slice'](0x0,0x8)+'\x20has\x20unauthorized\x20permission\x20indexes:\x20['+u['missingIndexes']['join'](',\x20')+']')):(i+=0x14,j['push']('Machine\x20'+n['objectAddress']['slice'](0x0,0x8)+':\x20all\x20'+t['requiredIndexes']['length']+'\x20permission\x20index(es)\x20authorized'));}return{'name':'permission_safety','score':clampScore(i),'weight':EXTENDED_DIMENSION_WEIGHTS['permission_safety'],'rationale':j['join'](';\x20')||'Permission\x20checks\x20passed'};}function evaluateValueStub(a,b){return{'evaluationType':'value','score':0x0,'summary':'Requires\x20LLM\x20evaluation\x20—\x20semantic\x20prompt\x20assembled.\x20Call\x20save_evaluation\x20with\x20the\x20LLM\x20result.','criterionScores':[],'findings':[],'strengths':[],'needsLlm':!![],'llmPrompt':b,'evaluatedAt':Date['now']()};}export function runEvaluationInternal(a,b,c){const d=filterTemplateObjects(a);switch(b){case'risk':return evaluateRisk(d);case'trust':return evaluateTrust(d);case'completeness':return evaluateCompleteness(d);case'value':return evaluateValueStub(d,c);default:throw new Error('Unknown\x20evaluation\x20type:\x20'+b);}}const PROJECT_EVALUATION_TYPES=['risk','trust','completeness','worth_buying','value'];function makeProjectRule(a){return{'id':'project_'+a,'description':'Project-level\x20'+a+'\x20evaluation\x20(rule-based\x20or\x20LLM-assisted)','dimension':a,'weight':0x1,'evaluation_ids':['project_'+a],'evaluate':b=>{const c=b['entities']['projectEvaluation'],d=b['entities']['llmPrompt'],e=runEvaluationInternal(c,a,d);return b['facts']['criterionScores']=e['criterionScores'],b['facts']['findings']=e['findings'],b['facts']['strengths']=e['strengths'],b['facts']['needsLlm']=e['needsLlm'],b['facts']['llmPrompt']=e['llmPrompt'],{'score':e['score'],'weight':0x1,'reason':e['summary'],'red_flag':e['findings']?.['some'](g=>g['severity']==='critical')??![]};}};}const RISK_CRITERIA=['structural_risk','fund_safety','operational_risk','governance_risk','graph_coherence','mode_registry'],TRUST_CRITERIA=['reputation','arbitration_coverage','guard_quality','transparency','consumer_diligence'],COMPLETENESS_CRITERIA=['object_coverage','binding_completeness','workflow_rationality','deployment_readiness'];function registerRuleBasedProjectEvaluation(a,b,c,d){const e='__project_'+b+'_result';a['registerDataSource']({'id':'project_'+b+'_facts','description':'Extract\x20project\x20facts\x20+\x20run\x20the\x20'+b+'\x20criterion\x20computer\x20(perspective\x20via\x20UserInjection)','evaluation_ids':['project_'+b],'extract':f=>{const g=f['entities']['projectEvaluation'],h=f['injection']?.['preferences']?.['perspective'],i=h&&h!==g['project']['perspective']?{...g,'project':{...g['project'],'perspective':h}}:g,j=d(i);return f['facts'][e]=j,f['facts']['criterionScores']=j['criterionScores'],f['facts']['findings']=j['findings'],f['facts']['strengths']=j['strengths'],f['facts']['needsLlm']=j['needsLlm'],{};}});for(const f of c){a['registerRule']({'id':'project_'+b+'_'+f,'description':'Project\x20'+b+'\x20criterion:\x20'+f,'dimension':b,'weight':0x1,'evaluation_ids':['project_'+b],'evaluate':g=>{const h=g['facts'][e];if(!h)return null;const i=h['criterionScores']['find'](j=>j['name']===f);if(!i)return null;return{'score':i['score'],'weight':i['weight'],'reason':i['rationale']};}});}}function registerWorthBuyingEvaluation(a){a['registerDataSource']({'id':'project_worth_buying_facts','description':'Run\x20risk/trust/completeness\x20via\x20the\x20kernel\x20+\x20D16-D24\x20enrichment\x20+\x20build\x20LLM\x20prompt','evaluation_ids':['project_worth_buying'],'extract':async b=>{const c=b['entities']['projectEvaluation'],d=b['entities']['llmPrompt'],e={'projectEvaluation':c},[f,g,h]=await Promise['all']([a['evaluate']('project_risk',e,b['injection']),a['evaluate']('project_trust',e,b['injection']),a['evaluate']('project_completeness',e,b['injection'])]),i=[evaluateEscrowQuality(c),evaluateProofIntegrity(c),evaluateArbitrationFairness(c),evaluateFeeTransparency(c),evaluateTimeoutProtection(c),evaluateSupplierVisibility(c),evaluateContentCommitment(c),evaluateReputationVerifiability(c),evaluatePermissionSafety(c)],j=i['map'](m=>m['name']+':\x20'+m['score']+'/100\x20—\x20'+m['rationale'])['join']('\x0a'),k=['===\x20RULE-BASED\x20EVALUATION\x20SUMMARY\x20(F-08\x20enriched\x20context)\x20===','','Risk:\x20'+f['total']+'/100\x20—\x20'+f['summary'],...(f['findings']??[])['slice'](0x0,0x3)['map'](m=>'\x20\x20-\x20['+m['severity']+']\x20'+m['message']),'','Trust:\x20'+g['total']+'/100\x20—\x20'+g['summary'],...(g['findings']??[])['slice'](0x0,0x3)['map'](m=>'\x20\x20-\x20['+m['severity']+']\x20'+m['message']),'','Completeness:\x20'+h['total']+'/100\x20—\x20'+h['summary'],...(h['findings']??[])['slice'](0x0,0x3)['map'](m=>'\x20\x20-\x20['+m['severity']+']\x20'+m['message']),'','===\x20EXTENDED\x20DIMENSIONS\x20D16-D24\x20(GLM6/93)\x20===',j,'','===\x20END\x20RULE-BASED\x20SUMMARY\x20===',''],l=k['join']('\x0a');return b['facts']['needsLlm']=!![],b['facts']['llmPrompt']=d?d+'\x0a\x0a'+l:l+'\x0aInstruction:\x20Based\x20on\x20the\x20rule-based\x20summary\x20above,\x20evaluate\x20whether\x20this\x20project\x20is\x20worth\x20buying.\x20Return\x20a\x200-100\x20score\x20and\x20a\x20brief\x20rationale.\x20Focus\x20on\x20buyer\x20risk\x20vs.\x20value\x20proposition.',b['facts']['summary']='Requires\x20LLM\x20evaluation\x20—\x20semantic\x20prompt\x20assembled\x20with\x20rule-based\x20context\x20(risk/trust/completeness\x20+\x20D16-D24\x20extended\x20dimensions).\x20Call\x20save_evaluation\x20with\x20the\x20LLM\x20result.',{};}});}export function registerProjectEvaluations(a=getEvaluationEngine()){registerRuleBasedProjectEvaluation(a,'risk',RISK_CRITERIA,evaluateRisk),registerRuleBasedProjectEvaluation(a,'trust',TRUST_CRITERIA,evaluateTrust),registerRuleBasedProjectEvaluation(a,'completeness',COMPLETENESS_CRITERIA,evaluateCompleteness),registerWorthBuyingEvaluation(a);for(const b of PROJECT_EVALUATION_TYPES){if(b==='risk'||b==='trust'||b==='completeness'||b==='worth_buying')continue;a['registerRule'](makeProjectRule(b));}}registerProjectEvaluations();export async function runEvaluation(a,b,c,d){const e=filterTemplateObjects(a),f=getEvaluationEngine(),g=await f['evaluate']('project_'+b,{'projectEvaluation':e,'llmPrompt':c},d);return{'evaluationType':b,'score':g['total'],'summary':g['summary'],'criterionScores':g['criterionScores']??[],'findings':g['findings']??[],'strengths':g['strengths']??[],'needsLlm':g['needsLlm']??![],'llmPrompt':g['llmPrompt'],'evaluatedAt':Date['now']()};}function filterTemplateObjects(a){const b=i=>{if(!i)return!![];return i['startsWith']('draft:');},c=i=>{if(b(i['objectAddress']))return!![];const j=i['metadata'];return!!(j&&j['status']==='draft');},d=[],e=[];for(const i of a['objects']){c(i)?d['push'](i):e['push'](i);}const f=new Set();for(const j of e){if(j['objectAddress'])f['add'](j['objectAddress']);if(j['objectName']){f['add'](j['objectName']);const k=shortTypeName(j['objectType'])['toLowerCase']();f['add'](k+':'+j['objectName']);}}const g=new Set();for(const l of d){if(l['objectAddress'])g['add'](l['objectAddress']);if(l['objectName']){g['add'](l['objectName']);const m=shortTypeName(l['objectType'])['toLowerCase']();g['add'](m+':'+l['objectName']);}}const h=a['edges']['filter'](n=>{const p=n['metadata'];if(p&&p['blueprint']===!![])return![];const q=b(n['sourceObject'])||g['has'](n['sourceObject']),r=b(n['targetObject'])||g['has'](n['targetObject']);return!q&&!r;});return{...a,'objects':e,'edges':h};}export function compareProjects(a,b){const c=[...a]['sort']((d,e)=>{if(d['score']===null&&e['score']===null)return 0x0;if(d['score']===null)return 0x1;if(e['score']===null)return-0x1;return e['score']-d['score'];});return{'evaluationType':b,'entries':a,'ranking':c,'bestProjectId':c[0x0]?.['score']!==null?c[0x0]?.['projectId']??null:null};}
1
+ import{IndustryModeRegistry}from'../extensions/registry.js';import{collectPermissionIndexes,checkPermissionAuthorization}from'../schema/utils/permission-machine-check.js';import{getEvaluationEngine}from'../evaluation/engine.js';const CRITICAL_BINDINGS=[{'sourceType':'Service','targetType':'Machine','fieldName':'machine','critical':!![]},{'sourceType':'Service','targetType':'Permission','fieldName':'permission','critical':!![]},{'sourceType':'Service','targetType':'Guard','fieldName':'buy_guard','critical':![]},{'sourceType':'Service','targetType':'Allocation','fieldName':'order_allocators','critical':!![]},{'sourceType':'Service','targetType':'Arbitration','fieldName':'arbitrations','critical':![]},{'sourceType':'Machine','targetType':'Permission','fieldName':'permission','critical':!![]}],MERCHANT_REQUIRED_ITEMS=[{'id':'R1','objectType':'Permission','fieldName':'','required':!![],'description':'Governance\x20—\x20who\x20can\x20manage\x20the\x20service'},{'id':'R2','objectType':'Service','fieldName':'','required':!![],'description':'Core\x20offering\x20—\x20the\x20service\x20itself'},{'id':'R3','objectType':'Machine','fieldName':'machine','required':!![],'description':'Workflow\x20—\x20order\x20processing\x20pipeline'},{'id':'R4','objectType':'Guard','fieldName':'','required':!![],'description':'Purchase\x20validation\x20—\x20Guard\x20objects\x20configured\x20(binding\x20to\x20Service.buy_guard\x20is\x20optional)'},{'id':'R5','objectType':'Allocation','fieldName':'order_allocators','required':!![],'description':'Order\x20allocators\x20template\x20—\x20inline\x20Allocators\x20on\x20Service\x20(independent\x20Allocation\x20objects\x20are\x20created\x20per-order)'},{'id':'R6','objectType':'Treasury','fieldName':'','required':!![],'description':'Compensation\x20fund\x20—\x20independent\x20Treasury\x20object\x20for\x20buyer\x20refund\x20protection\x20(industry-aware:\x20optional\x20for\x20freelance)'},{'id':'R7','objectType':'Arbitration','fieldName':'arbitrations','required':!![],'description':'Dispute\x20resolution\x20—\x20arbitration\x20configured\x20(required\x20when\x20compensation_fund\x20>\x200\x20per\x20service.move:494)'},{'id':'R8','objectType':'Contact','fieldName':'','required':!![],'description':'Customer\x20communication\x20—\x20contact\x20info'},{'id':'R9','objectType':'Progress','fieldName':'','required':![],'description':'Order\x20tracking\x20—\x20progress\x20nodes'},{'id':'R10','objectType':'Reward','fieldName':'rewards','required':![],'description':'Customer\x20incentives\x20—\x20reward\x20claims'},{'id':'R11','objectType':'Repository','fieldName':'repositories','required':![],'description':'Documentation\x20—\x20published\x20data'},{'id':'R12','objectType':'Demand','fieldName':'','required':![],'description':'Market\x20discovery\x20—\x20demand\x20signals'}];function resolveRequiredItems(a,b=0x0,c=![]){let d=MERCHANT_REQUIRED_ITEMS;if(a&&a!=='general'){let e;try{e=IndustryModeRegistry['Instance']()['getMode'](a);}catch{}if(e){const f=e['risk_constraints']?.['require_compensation_fund']??!![];!f&&(d=MERCHANT_REQUIRED_ITEMS['map'](g=>{if(g['id']==='R6'||g['id']==='R7')return{...g,'required':![]};return g;}));}}return c&&b===0x0&&(d=d['map'](g=>{if(g['id']==='R6')return{...g,'required':![]};return g;})),b>0x0&&(d=d['map'](g=>g['id']==='R7'?{...g,'required':!![]}:g)),d;}const CONSUMER_DUE_DILIGENCE=[{'id':'E1','check':'Service\x20is\x20published\x20(bPublished=true)','severity':'critical','deduction':-0x1e},{'id':'E2','check':'Service\x20is\x20not\x20paused\x20(bPaused=false)','severity':'warning','deduction':-0x14},{'id':'E3','check':'Machine\x20has\x20workflow\x20nodes','severity':'warning','deduction':-0xf},{'id':'E4','check':'Service\x20has\x20buy_guard\x20(purchase\x20validation)','severity':'info','deduction':0x0},{'id':'E5','check':'Service\x20has\x20compensation_fund\x20(refund\x20protection)','severity':'warning','deduction':-0xf},{'id':'E6','check':'Arbitration\x20is\x20configured\x20(dispute\x20resolution)','severity':'critical','deduction':-0x19},{'id':'E7','check':'Permission\x20is\x20present\x20(governance)','severity':'warning','deduction':-0xa},{'id':'E8','check':'Contact\x20is\x20available\x20(merchant\x20reachable)','severity':'info','deduction':-0x5},{'id':'E9','check':'Repository\x20has\x20published\x20data\x20(transparency)','severity':'info','deduction':-0x5},{'id':'E10','check':'Reward\x20is\x20configured\x20(customer\x20incentives)','severity':'info','deduction':-0x3},{'id':'E11','check':'Service\x20has\x20description\x20(offering\x20clarity)','severity':'info','deduction':-0x5},{'id':'E12','check':'Registrar\x20reputation\x20is\x20positive','severity':'warning','deduction':-0xa}];function clampScore(a){return Math['max'](0x0,Math['min'](0x64,Math['round'](a)));}function shortTypeName(a){if(!a)return'unknown';const b=a['replace'](/<.*>/,'')['trim'](),c=b['split']('::'),d=c[c['length']-0x1]||'unknown';if(d['length']>0x0&&d===d['toLowerCase']())return d['charAt'](0x0)['toUpperCase']()+d['slice'](0x1);return d;}function groupByType(a){const b=new Map();for(const c of a){const d=shortTypeName(c['objectType']);if(!b['has'](d))b['set'](d,[]);b['get'](d)['push'](c);}return b;}function parseCacheData(a){if(!a)return null;try{return JSON['parse'](a['data']);}catch{return null;}}function isAddress(a){return typeof a==='string'&&a['startsWith']('0x')&&a['length']>=0xa;}function countArrayField(a,b){const c=a[b];if(Array['isArray'](c))return c['length'];return 0x0;}export function getNumberField(a,b){if(!a)return 0x0;const c=a[b];if(typeof c==='number'&&Number['isFinite'](c))return c;if(typeof c==='string'){const d=Number(c);if(Number['isFinite'](d))return d;}return 0x0;}export function getMachineNodeCount(a){if(!a)return 0x0;const b=getNumberField(a,'node_count');if(b>0x0)return b;const c=countArrayField(a,'nodes');if(c>0x0)return c;const d=a['nodes'];if(d&&typeof d==='object'){const e=d['fields'];if(e&&typeof e==='object'){const g=getNumberField(e,'size');if(g>0x0)return g;}const f=getNumberField(d,'size');if(f>0x0)return f;}return 0x0;}function extractMachineNodesFromCache(a){if(!a)return[];const b=a['nodes'];if(Array['isArray'](b))return b;const c=a['config'];if(c&&Array['isArray'](c['nodes']))return c['nodes'];const d=a['nodes'];if(d&&typeof d==='object'){const e=d['fields'];if(e&&Array['isArray'](e['contents']))return e['contents'];}return[];}function getBalanceValue(a,b){if(!a)return 0x0;const c=a[b];if(c==null)return 0x0;if(typeof c==='number'&&Number['isFinite'](c))return c;if(typeof c==='string'){const d=Number(c);if(Number['isFinite'](d))return d;}if(typeof c==='object'){const e=c,f=e['value']??e['fields'];if(typeof f==='number'&&Number['isFinite'](f))return f;if(typeof f==='string'){const g=Number(f);if(Number['isFinite'](g))return g;}if(typeof f==='object'&&f!==null){const h=f,i=h['value'];if(typeof i==='number'&&Number['isFinite'](i))return i;if(typeof i==='string'){const j=Number(i);if(Number['isFinite'](j))return j;}}}return 0x0;}function getMaxSalePrice(a){if(!a)return 0x0;const b=a['sales'];if(!Array['isArray'](b)||b['length']===0x0)return 0x0;let c=0x0;for(const d of b){if(typeof d!=='object'||d===null)continue;const e=d['price'];let f=0x0;if(typeof e==='number'&&Number['isFinite'](e))f=e;else{if(typeof e==='string'){const g=Number(e);if(Number['isFinite'](g))f=g;}}if(f>c)c=f;}return c;}function detectCircularRefs(a,b){const c=new Map();for(const i of a){if(i['edgeSource']==='potential')continue;if(!c['has'](i['sourceObject']))c['set'](i['sourceObject'],[]);c['get'](i['sourceObject'])['push'](i['targetObject']);}const d=[],f=new Set(),g=new Set(),h=[];for(const j of c['keys']()){if(f['has'](j))continue;const k=[{'node':j,'nextNeighborIdx':0x0,'neighbors':c['get'](j)??[]}];f['add'](j),g['add'](j),h['push'](j);while(k['length']>0x0){const l=k[k['length']-0x1];if(l['nextNeighborIdx']>=l['neighbors']['length']){k['pop'](),h['pop'](),g['delete'](l['node']);continue;}const m=l['neighbors'][l['nextNeighborIdx']];l['nextNeighborIdx']++;if(!f['has'](m))f['add'](m),g['add'](m),h['push'](m),k['push']({'node':m,'nextNeighborIdx':0x0,'neighbors':c['get'](m)??[]});else{if(g['has'](m)){const n=h['indexOf'](m),o=h['slice'](n)['concat'](m);!isWoWokNormalFundCycle(o,b)&&d['push'](o['join']('→'));}}}}return d;}function isWoWokNormalFundCycle(a,b){if(!b||a['length']<0x3)return![];const c=new Set();for(const f of a){const g=b['get'](f);if(g)c['add'](g);else return![];}if(c['size']===0x2&&c['has']('Order')&&c['has']('Allocation'))return!![];if(c['size']===0x3&&c['has']('Order')&&c['has']('Allocation')&&c['has']('Payment'))return!![];const d=['Service','Machine','Progress','Order'],e=Array['from'](c)['every'](h=>d['includes'](h));if(e&&c['size']>=0x2)return!![];return![];}function adjustWeightsForPerspective(a,b){if(b==='consumer')return a['map'](d=>{if(d['name']==='reputation'||d['name']==='arbitration_coverage'||d['name']==='consumer_diligence')return{...d,'weight':d['weight']*1.4};if(d['name']==='structural_risk'||d['name']==='deployment_readiness')return{...d,'weight':d['weight']*0.7};return d;});if(b==='producer')return a['map'](d=>{if(d['name']==='structural_risk'||d['name']==='deployment_readiness'||d['name']==='binding_completeness')return{...d,'weight':d['weight']*1.3};if(d['name']==='consumer_diligence'||d['name']==='transparency')return{...d,'weight':d['weight']*0.7};return d;});return a;}function normalizeWeights(a){const b=a['reduce']((d,e)=>d+e['weight'],0x0);if(b===0x0)return a;return a['map'](d=>({...d,'weight':d['weight']/b}));}export const RISK_WEIGHTS={'structural_risk':0.25,'fund_safety':0.2,'operational_risk':0.15,'governance_risk':0.1,'graph_coherence':0.2,'mode_registry':0.1};export const TRUST_WEIGHTS={'reputation':0.25,'arbitration_coverage':0.2,'guard_quality':0.2,'transparency':0.15,'consumer_diligence':0.2};export const COMPLETENESS_WEIGHTS={'object_coverage':0.3,'binding_completeness':0.25,'workflow_rationality':0.2,'deployment_readiness':0.25};export const EXTENDED_DIMENSION_WEIGHTS={'escrow_quality':0.15,'proof_integrity':0.1,'arbitration_fairness':0.15,'fee_transparency':0.1,'timeout_protection':0.1,'supplier_visibility':0.1,'content_commitment':0.1,'reputation_verifiability':0.1,'permission_safety':0.1};export function finalizeCriterionScores(a,b){const c=normalizeWeights(adjustWeightsForPerspective(a,b)),d=clampScore(c['reduce']((e,f)=>e+f['score']*f['weight'],0x0));return{'criterionScores':c,'overall':d};}function buildBindingIndex(a){const b=new Map();for(const c of a){if(c['edgeSource']==='potential')continue;if(!c['fieldName'])continue;const d=c['sourceObject']+'#'+c['fieldName'];if(!b['has'](d))b['set'](d,new Set());b['get'](d)['add'](c['targetObject']);}for(const f of a){if(f['edgeSource']!=='potential')continue;if(!f['fieldName'])continue;const g=f['sourceObject']+'#'+f['fieldName'];if(!b['has'](g)||b['get'](g)['size']===0x0){if(!b['has'](g))b['set'](g,new Set());b['get'](g)['add'](f['targetObject']);}}return b;}export function extractProjectEvaluationFacts(a){const {project:b,objects:c,edges:d,objectCache:f,reputation:g}=a,h=groupByType(c),i=buildBindingIndex(d),j=h['get']('Service')??[],k=j[0x0],l=k?parseCacheData(f['get'](k['objectAddress'])):null,m=k?getBalanceValue(l,'compensation_fund'):0x0,n=getMaxSalePrice(l),p=h['get']('Treasury')??[],q=h['get']('Allocation')??[],r=h['get']('Permission')??[],s=h['get']('Machine')??[],t=h['get']('Arbitration')??[],u=h['get']('Repository')??[],v=h['get']('Contact')??[],w=h['get']('Guard')??[],x=h['get']('Proof')??[],y=h['get']('Demand')??[],z=new Set();for(const I of c){if(I['objectAddress'])z['add'](I['objectAddress']);if(I['objectName']){z['add'](I['objectName']);const J=shortTypeName(I['objectType'])['toLowerCase']();z['add'](J+':'+I['objectName']);}}let A=0x0;for(const K of d){if(K['edgeSource']==='potential')continue;if(!z['has'](K['targetObject']))A++;}const B=new Map();for(const L of c){if(L['objectAddress'])B['set'](L['objectAddress'],shortTypeName(L['objectType']));}const C=detectCircularRefs(d,B),D=k?i['get'](k['objectAddress']+'#order_allocators')?.['size']??0x0:0x0,E=q['length']>0x0&&D>0x0;let F=!![],G=0x5;if(b['industry']&&b['industry']!=='general')try{const M=IndustryModeRegistry['Instance']()['getMode'](b['industry']);M&&(F=M['risk_constraints']?.['require_compensation_fund']??!![],M['risk_constraints']?.['compensation_fund_coverage_ratio']&&(G=M['risk_constraints']['compensation_fund_coverage_ratio']));}catch{}const H=new Map();for(const N of r){const O=parseCacheData(f['get'](N['objectAddress']));O&&H['set'](N['objectAddress'],{'address':N['objectAddress'],'entity_count':typeof O['entity_count']==='number'?O['entity_count']:undefined,'perm_remark':Array['isArray'](O['perm_remark'])?O['perm_remark']:undefined,'owner':typeof O['owner']==='string'?O['owner']:typeof O['builder']==='string'?O['builder']:undefined,'admin':Array['isArray'](O['admin'])?O['admin']:undefined});}return{'input':a,'project':b,'objects':c,'edges':d,'byType':h,'bindingIndex':i,'objectCache':f,'reputation':g,'serviceObj':k,'serviceData':l,'compensationBalance':m,'maxSalePrice':n,'treasuries':p,'allocations':q,'permissions':r,'machines':s,'arbitrations':t,'repositories':u,'contacts':v,'guards':w,'proofs':x,'demands':y,'danglingCount':A,'cycles':C,'hasAllocationEscrow':E,'orderAllocatorsBinding':D,'industryRequiresFund':F,'coverageRatio':G,'permDataMap':H};}function evaluateIndustryPattern(a,b,c,d){const e={'strengths':[],'findings':[],'matched':![]},f=a['industry'];if(!f||f==='general')return e;let g;try{g=IndustryModeRegistry['Instance']()['getMode'](f);}catch{return e;}if(!g)return e;const h=groupByType(b),i=buildBindingIndex(d);let j=0x0,k=0x0;const l=g['machine_shape'];if(l['length']>0x0){k++;const q=h['get']('Machine')??[];if(q['length']>0x0){const r=q[0x0],s=parseCacheData(c['get'](r['objectAddress'])),t=getMachineNodeCount(s);if(t>0x0&&t>=l['length'])j++,e['strengths']['push']('Industry\x20pattern\x20match:\x20Machine\x20has\x20'+t+'\x20nodes,\x20covering\x20\x22'+f+'\x22\x20mode\x27s\x20'+l['length']+'\x20expected\x20node(s)');else t>0x0&&e['findings']['push']({'criterion':'industry_pattern','severity':'info','message':'Industry\x20pattern:\x20Machine\x20has\x20'+t+'\x20nodes,\x20but\x20\x22'+f+'\x22\x20mode\x20expects\x20at\x20least\x20'+l['length'],'deduction':0x0});}}const n=g['guards'];if(n['length']>0x0){k++;const u=h['get']('Guard')??[],v=n['length'],w=n['length']*0x2;if(u['length']>=v&&u['length']<=w)j++,e['strengths']['push']('Industry\x20pattern\x20match:\x20'+u['length']+'\x20Guard(s)\x20present,\x20within\x20\x22'+f+'\x22\x20mode\x27s\x20expected\x20range\x20['+v+'-'+w+']');else{if(u['length']>0x0&&u['length']<v)e['findings']['push']({'criterion':'industry_pattern','severity':'info','message':'Industry\x20pattern:\x20'+u['length']+'\x20Guard(s)\x20present,\x20but\x20\x22'+f+'\x22\x20mode\x20expects\x20at\x20least\x20'+v+'\x20(recommended\x20range\x20['+v+'-'+w+'])','deduction':0x0});else u['length']>w&&(j++,e['strengths']['push']('Industry\x20pattern\x20match:\x20'+u['length']+'\x20Guard(s)\x20present,\x20covering\x20\x22'+f+'\x22\x20mode\x27s\x20'+v+'\x20expected\x20guard(s)'),e['findings']['push']({'criterion':'industry_pattern','severity':'info','message':'Industry\x20pattern:\x20'+u['length']+'\x20Guard(s)\x20present,\x20exceeds\x20recommended\x20max\x20'+w+'.\x20Consider\x20consolidating\x20guards\x20if\x20some\x20are\x20redundant.','deduction':0x0}));}}const o=g['allocator'];if(o){k++;const x=h['get']('Allocation')??[],y=h['get']('Service')??[],z=y[0x0],A=z?!!i['get'](z['objectAddress']+'#order_allocators')?.['size']:![],B=g['traits']['multi_tier_allocation'];if(A)j++,x['length']>0x0?e['strengths']['push']('Industry\x20pattern\x20match:\x20Service.order_allocators\x20bound\x20+\x20'+x['length']+'\x20Allocation\x20object(s)\x20present\x20(post-order)\x20—\x20matching\x20\x22'+f+'\x22\x20allocation\x20pattern'):e['strengths']['push']('Industry\x20pattern\x20match:\x20Service.order_allocators\x20template\x20bound\x20—\x20matching\x20\x22'+f+'\x22\x20allocation\x20pattern\x20(Allocation\x20objects\x20created\x20per-order)');else x['length']>0x0?(j++,e['strengths']['push']('Industry\x20pattern\x20match:\x20'+x['length']+'\x20Allocation\x20object(s)\x20present\x20—\x20matching\x20\x22'+f+'\x22\x20allocation\x20pattern')):e['findings']['push']({'criterion':'industry_pattern','severity':'info','message':'Industry\x20pattern:\x20Service.order_allocators\x20not\x20bound\x20and\x20no\x20Allocation\x20objects\x20—\x20\x22'+f+'\x22\x20mode\x20expects\x20'+(B?'multi-tier':'single-tier')+'\x20allocation\x20(Allocation\x20objects\x20are\x20created\x20per-order,\x20so\x20this\x20is\x20only\x20a\x20template-level\x20gap)','deduction':0x0});}const p=g['risk_constraints']?.['require_compensation_fund']??![];if(p||g['traits']['deposit_required']||g['traits']['trust_sensitivity']!=='low'){k++;const C=h['get']('Treasury')??[],D=h['get']('Service')??[],E=D[0x0],F=E?parseCacheData(c['get'](E['objectAddress'])):null,G=E?getBalanceValue(F,'compensation_fund'):0x0;if(C['length']>0x0||G>0x0){j++;const H=[];if(C['length']>0x0)H['push'](C['length']+'\x20Treasury\x20object(s)');if(G>0x0)H['push']('compensation_fund\x20balance\x20'+G);e['strengths']['push']('Industry\x20pattern\x20match:\x20'+H['join']('\x20+\x20')+'\x20—\x20matching\x20\x22'+f+'\x22\x20trust/deposit\x20pattern');}}e['matched']=k>0x0&&j/k>=0.6;if(e['matched'])e['strengths']['push']('Industry\x20pattern:\x20project\x20structure\x20matches\x20\x22'+f+'\x22\x20mode\x20('+j+'/'+k+'\x20checks\x20passed)');else k>0x0&&e['findings']['push']({'criterion':'industry_pattern','severity':'info','message':'Industry\x20pattern:\x20project\x20partially\x20matches\x20\x22'+f+'\x22\x20mode\x20('+j+'/'+k+'\x20checks\x20passed)','deduction':0x0});if(f==='freelance'){const I=h['get']('Machine')??[];for(const J of I){const K=parseCacheData(c['get'](J['objectAddress']));if(!K)continue;const L=getMachineNodeCount(K);if(L>0x0){e['findings']['push']({'criterion':'industry_pattern','severity':'info','message':'ISSUE-P1-4:\x20freelance\x20project\x20has\x20a\x20Machine\x20with\x20'+L+'\x20node(s).\x20'+'If\x20the\x20workflow\x20includes\x20a\x20\x22delivered\x22\x20state,\x2048h\x20auto-accept\x20requires\x20'+'an\x20off-chain\x20keeper\x20(WoWok\x20Guard\x20does\x20not\x20support\x20time-based\x20triggers).\x20'+'Keeper\x20should\x20poll\x20Progress\x20objects\x20in\x20\x22delivered\x22\x20state\x20and\x20call\x20'+'adminUnhold\x20(permission\x20224)\x20after\x2048h\x20timeout.','deduction':0x0});break;}}}return e;}function evaluateRisk(a){const b=[],d=[],e=extractProjectEvaluationFacts(a),{objects:f,edges:g,objectCache:h,project:i}=e,j=e['bindingIndex'];let k=0x64;const l=e['serviceObj'],m=e['compensationBalance'];if(l)for(const O of CRITICAL_BINDINGS){if(O['sourceType']!=='Service')continue;const P=O['fieldName']==='arbitrations'?m>0x0?!![]:O['critical']:O['critical'],Q=l['objectAddress']+'#'+O['fieldName'],R=j['get'](Q);if(!R||R['size']===0x0){const S=P?-0x19:-0xa;k+=S,b['push']({'criterion':'structural_risk','severity':P?'critical':'warning','message':'Service\x20missing\x20'+O['fieldName']+'\x20binding\x20(expected\x20'+O['targetType']+')'+(O['fieldName']==='arbitrations'?m>0x0?'\x20—\x20required\x20by\x20contract\x20when\x20compensation_fund\x20>\x200\x20(service.move:494)':'\x20—\x20optional\x20when\x20compensation_fund\x20is\x200':''),'deduction':S});}else d['push']('Service\x20has\x20'+O['fieldName']+'\x20binding');}else k=0x1e,b['push']({'criterion':'structural_risk','severity':'critical','message':'No\x20Service\x20object\x20in\x20project\x20—\x20project\x20has\x20no\x20core','deduction':-0x46});k=clampScore(k);let n=0x64;const o=e['treasuries'],p=e['allocations'],q=e['serviceData'],r=e['compensationBalance'],s=e['orderAllocatorsBinding'],t=e['hasAllocationEscrow'],w=e['industryRequiresFund'];if(o['length']===0x0&&r===0x0){if(t)n-=0x5,d['push']('Allocation\x20escrow\x20mode\x20active\x20—\x20funds\x20locked\x20in\x20contract,\x20released\x20by\x20Guard\x20verification'),b['push']({'criterion':'fund_safety','severity':'info','message':'Using\x20Allocation\x20escrow\x20('+p['length']+'\x20Allocation\x20object(s)\x20+\x20order_allocators\x20bound)\x20—\x20fund\x20safety\x20via\x20Guard\x20verification,\x20no\x20Treasury/compensation_fund\x20needed','deduction':-0x5});else w?(n-=0x1e,b['push']({'criterion':'fund_safety','severity':'warning','message':'No\x20Treasury\x20object\x20and\x20Service.compensation_fund\x20is\x20empty\x20—\x20no\x20refund\x20fund\x20for\x20buyers','deduction':-0x1e})):(n-=0xa,b['push']({'criterion':'fund_safety','severity':'info','message':'No\x20Treasury/compensation_fund\x20—\x20industry\x20\x22'+i['industry']+'\x22\x20does\x20not\x20require\x20refund\x20fund\x20(optional)','deduction':-0xa}));}else{o['length']>0x0&&d['push'](o['length']+'\x20Treasury\x20object(s)\x20present\x20—\x20independent\x20fund\x20holder');if(r>0x0){d['push']('Service.compensation_fund\x20has\x20'+r+'\x20units\x20—\x20inline\x20refund\x20fund\x20active');const T=e['maxSalePrice'];if(T>0x0){const U=e['coverageRatio'],V=U*T;r<V?(n-=0xa,b['push']({'criterion':'fund_safety','severity':'warning','message':'Service.compensation_fund\x20balance\x20('+r+')\x20is\x20less\x20than\x20'+U+'×\x20the\x20max\x20order\x20amount\x20('+T+'\x20→\x20threshold\x20'+V+').\x20Refund\x20coverage\x20may\x20be\x20insufficient\x20—\x20top\x20up\x20via\x20service.compensation_fund_add\x20to\x20avoid\x20arbitration\x20rulings\x20exceeding\x20the\x20fund.\x20(industry:\x20'+(i['industry']??'general')+',\x20ratio:\x20'+U+'×)','deduction':-0xa})):b['push']({'criterion':'fund_safety','severity':'info','message':'Service.compensation_fund\x20balance\x20('+r+')\x20covers\x20'+U+'×\x20the\x20max\x20order\x20amount\x20('+T+').\x20Fund\x20is\x20sufficient\x20for\x20refund\x20protection.\x20(industry:\x20'+(i['industry']??'general')+',\x20ratio:\x20'+U+'×)','deduction':0x0});}}else b['push']({'criterion':'fund_safety','severity':'info','message':'Treasury\x20present\x20but\x20Service.compensation_fund\x20balance\x20is\x200\x20—\x20consider\x20depositing\x20refund\x20fund','deduction':-0x5});}n=clampScore(n);let x=0x64;if(l){const W=e['serviceData'];if(W){const X=W['bPaused'],Y=W['bPublished'];Y&&X&&(x-=0x19,b['push']({'criterion':'operational_risk','severity':'warning','message':'Service\x20is\x20published\x20but\x20PAUSED\x20—\x20operations\x20halted','deduction':-0x19})),!Y&&(x-=0xf,b['push']({'criterion':'operational_risk','severity':'info','message':'Service\x20not\x20yet\x20published\x20—\x20project\x20not\x20live','deduction':-0xf}));}}const y=e['arbitrations'];y['length']===0x0?(x-=0x14,b['push']({'criterion':'operational_risk','severity':'warning','message':'No\x20Arbitration\x20object\x20—\x20disputes\x20cannot\x20be\x20resolved','deduction':-0x14})):d['push'](y['length']+'\x20Arbitration\x20object(s)\x20configured');x=clampScore(x);let z=0x64;const A=e['permissions'];A['length']===0x0&&(z-=0x28,b['push']({'criterion':'governance_risk','severity':'critical','message':'No\x20Permission\x20object\x20—\x20project\x20is\x20ungoverned','deduction':-0x28}));if(l){const Z=e['serviceData'];Z&&!isAddress(Z['um'])&&(z-=0x5,b['push']({'criterion':'governance_risk','severity':'info','message':'Service\x20has\x20no\x20UM\x20(manager)\x20—\x20UM\x20is\x20optional;\x20set\x20via\x20um_set\x20if\x20management\x20delegation\x20needed','deduction':-0x5}));}const B=e['machines'];for(const a0 of B){const a1=a0['metadata'],a2=a1?.['config'];if(a2?.['entry_node_forward_hint']){const a6=a2['entry_node_forward_hint'],a7=a6['example_forward'];a7?.['namedOperator']===''&&d['push']('Machine\x20entry\x20forward\x20uses\x20namedOperator=\x27\x27\x20(OrderHolder)\x20—\x20'+'correct\x20for\x20customer-operable\x20nodes.\x20namedOperator=\x27\x27\x20represents\x20'+'the\x20order\x20holder,\x20distinct\x20from\x20merchant\x27s\x20permission\x20index.');}const a3=a2?.['guard_objects'];a3&&a3['length']>0x0&&d['push']('Machine\x20has\x20'+a3['length']+'\x20guard\x20object\x20reference(s)\x20—\x20'+'forward-level\x20permission\x20validation\x20configured');const a4=parseCacheData(h['get'](a0['objectAddress'])),a5=getMachineNodeCount(a4);a5>0x0&&!a2&&b['push']({'criterion':'governance_risk','severity':'info','message':'Machine\x20has\x20'+a5+'\x20node(s).\x20Verify\x20each\x20forward\x20has\x20at\x20least\x20one\x20of\x20'+'namedOperator\x20or\x20permissionIndex.\x20Key:\x20namedOperator=\x27\x27\x20means\x20OrderHolder\x20'+'(customer),\x20NOT\x20\x27anyone\x27.\x20Use\x20non-empty\x20namedOperator\x20for\x20specific\x20roles,\x20'+'or\x20permissionIndex\x20for\x20permission-based\x20access.\x20Both\x20set\x20=\x20OR\x20semantic\x20'+'(either\x20can\x20execute).','deduction':0x0});}const C=e['machines'],D=e['permissions'],E=e['permDataMap'];for(const a8 of C){const a9=a8['objectAddress']+'#permission',aa=j['get'](a9);if(!aa||aa['size']===0x0)continue;let ab=null;for(const ah of aa){ab=ah;break;}if(!ab)continue;const ac=E['get'](ab);if(!ac)continue;const ad=parseCacheData(h['get'](a8['objectAddress']));if(!ad)continue;const ae=extractMachineNodesFromCache(ad);if(ae['length']===0x0)continue;const af=collectPermissionIndexes(ae);if(af['requiredIndexes']['length']===0x0)continue;const ag=checkPermissionAuthorization(af['requiredIndexes'],ac);!ag['allAuthorized']?(z-=0x19,b['push']({'criterion':'governance_risk','severity':'critical','message':'Machine\x20'+a8['objectAddress']['slice'](0x0,0x8)+'\x20has\x20forwards\x20referencing\x20'+('un-authorized\x20permission\x20indexes:\x20['+ag['missingIndexes']['join'](',\x20')+'].\x20')+'These\x20forwards\x20can\x20NEVER\x20be\x20executed\x20—\x20Progress\x20will\x20be\x20permanently\x20stuck.\x20'+'Grant\x20entities\x20for\x20these\x20indexes\x20via\x20permission.op=\x22add\x20perm\x20by\x20index\x22\x20'+'before\x20publishing\x20the\x20Machine.','deduction':-0x19})):d['push']('Machine\x20'+a8['objectAddress']['slice'](0x0,0x8)+':\x20all\x20'+af['requiredIndexes']['length']+'\x20'+'permission\x20index(es)\x20are\x20authorized');}if(l&&y['length']>0x0){const ai=l['objectAddress']+'#permission',aj=j['get'](ai),ak=aj&&aj['size']>0x0?Array['from'](aj)[0x0]:null,al=ak?E['get'](ak):null;for(const am of y){const an=am['objectAddress']+'#permission',ao=j['get'](an),ap=ao&&ao['size']>0x0?Array['from'](ao)[0x0]:null;if(!ak||!ap)continue;if(ak===ap){z-=0x1e,b['push']({'criterion':'governance_risk','severity':'critical','message':'Arbitration\x20'+am['objectAddress']['slice'](0x0,0x8)+'\x20and\x20Service\x20share\x20the\x20SAME\x20'+('Permission\x20object\x20('+ak['slice'](0x0,0x8)+').\x20This\x20breaks\x20dispute\x20')+'fairness\x20—\x20the\x20merchant\x20fully\x20controls\x20arbitration\x20operations.\x20'+'Use\x20a\x20separate\x20Permission\x20object\x20for\x20Arbitration\x20to\x20ensure\x20independent\x20'+'dispute\x20resolution.\x20(per\x20arbitration.move:\x20the\x20permission\x20field\x20controls\x20'+'who\x20can\x20vote,\x20confirm,\x20and\x20execute\x20arbitration\x20rulings)','deduction':-0x1e});continue;}const aq=E['get'](ap);if(al&&aq){const ar=al['owner']?.['toLowerCase'](),as=aq['owner']?.['toLowerCase'](),at=new Set((al['admin']??[])['map'](ax=>ax['toLowerCase']())),au=new Set((aq['admin']??[])['map'](ax=>ax['toLowerCase']())),av=ar&&as&&ar===as,aw=[...at]['some'](ax=>au['has'](ax));if(av||aw){const ax=av&&aw?'owner\x20AND\x20admin\x20overlap':av?'same\x20owner':'admin\x20overlap';z-=0x14,b['push']({'criterion':'governance_risk','severity':'warning','message':'Arbitration\x20'+am['objectAddress']['slice'](0x0,0x8)+'\x20and\x20Service\x20have\x20'+('overlapping\x20Permission\x20control\x20('+ax+').\x20Even\x20with\x20separate\x20')+'Permission\x20objects,\x20shared\x20control\x20undermines\x20dispute\x20independence.\x20'+'The\x20contract\x20only\x20enforces\x20different\x20Permission\x20object\x20addresses\x20'+'(E_ARBITRATION_PERMISSION_CONFLICT)\x20—\x20it\x20does\x20NOT\x20check\x20who\x20controls\x20'+'each\x20Permission,\x20so\x20this\x20governance\x20risk\x20exists\x20on\x20ANY\x20network.\x20'+'Use\x20a\x20completely\x20independent\x20third-party\x20Permission\x20(different\x20owner\x20'+'and\x20admin\x20list)\x20for\x20Arbitration.','deduction':-0x14});}else d['push']('Arbitration\x20'+am['objectAddress']['slice'](0x0,0x8)+'\x20has\x20independent\x20'+'Permission\x20(separate\x20owner/admin)\x20—\x20trustworthy\x20dispute\x20resolution');}}}z=clampScore(z);let F=0x64;const G=e['danglingCount'],H=e['cycles'];if(G>0x0){const ay=-Math['min'](0x14,G*0x3);F+=ay,b['push']({'criterion':'graph_coherence','severity':G>=0x3?'warning':'info','message':G+'\x20edge(s)\x20point\x20to\x20objects\x20outside\x20the\x20project\x20—\x20dangling\x20references','deduction':ay});}H['length']>0x0&&(F-=0xf,b['push']({'criterion':'graph_coherence','severity':'warning','message':H['length']+'\x20circular\x20reference(s)\x20detected:\x20'+H['slice'](0x0,0x2)['join'](';\x20')+(H['length']>0x2?'...':''),'deduction':-0xf}));G===0x0&&H['length']===0x0&&d['push']('Graph\x20is\x20coherent\x20—\x20no\x20dangling\x20refs\x20or\x20cycles');F=clampScore(F);let I=0x64,J='no\x20industry\x20declared\x20—\x20check\x20skipped';if(!i['industry'])b['push']({'criterion':'mode_registry','severity':'info','message':'Project\x20has\x20no\x20industry\x20tag\x20—\x20mode\x20registry\x20gates\x20(metrics/constraints)\x20not\x20evaluated.\x20Set\x20project\x20industry\x20to\x20enable.','deduction':0x0});else try{const az=IndustryModeRegistry['Instance']()['evaluateMode'](i['industry'],i['description']??i['name'],{'prefix':i['prefix'],'network':i['network']==='mainnet'?'mainnet':'testnet','business_intent':i['description']??undefined,'industry':i['industry'],'version':i['currentVersion']??undefined}),aA=az['unmet_conditions']['some'](aB=>aB['includes']('not\x20found'));if(aA)I=0x32,J='mode\x20\x27'+i['industry']+'\x27\x20not\x20registered',b['push']({'criterion':'mode_registry','severity':'warning','message':'Industry\x20mode\x20\x27'+i['industry']+'\x27\x20is\x20not\x20registered\x20in\x20the\x20mode\x20registry\x20—\x20cannot\x20verify\x20capability/conflict/constraint\x20gates.\x20Falling\x20back\x20to\x20unverified\x20mode.','deduction':-0x32});else{for(const aB of az['violated_constraints']){I-=0x19,b['push']({'criterion':'mode_registry','severity':'critical','message':'Mode\x20\x27'+i['industry']+'\x27\x20hard\x20constraint\x20violated:\x20'+aB,'deduction':-0x19});}for(const aC of az['capability_conflicts']){I-=0x14,b['push']({'criterion':'mode_registry','severity':'critical','message':'Mode\x20\x27'+i['industry']+'\x27\x20capability\x20conflict:\x20'+aC,'deduction':-0x14});}for(const aD of az['unmet_conditions']){I-=0xa,b['push']({'criterion':'mode_registry','severity':'warning','message':'Mode\x20\x27'+i['industry']+'\x27\x20soft\x20constraint\x20unmet:\x20'+aD,'deduction':-0xa});}I=clampScore(I),J='metric\x20risk\x20'+az['risk_score']+'\x20/\x20benefit\x20'+az['benefit_score']+'\x20'+('(ratio\x20'+az['risk_benefit_ratio']['toFixed'](0x2)+');\x20')+(az['violated_constraints']['length']+'\x20hard\x20+\x20'+az['unmet_conditions']['length']+'\x20soft\x20constraint\x20issue(s),\x20')+(az['capability_conflicts']['length']+'\x20capability\x20conflict(s)'),az['applicable']&&az['violated_constraints']['length']===0x0&&az['capability_conflicts']['length']===0x0&&az['unmet_conditions']['length']===0x0&&d['push']('Mode\x20\x27'+i['industry']+'\x27\x20passes\x20all\x20mode-registry\x20gates\x20—\x20'+('metric\x20risk\x20'+az['risk_score']+'\x20/\x20benefit\x20'+az['benefit_score']+'\x20')+('(risk-benefit\x20ratio\x20'+az['risk_benefit_ratio']['toFixed'](0x2)+')'));}}catch{J='mode\x20registry\x20unavailable\x20—\x20check\x20skipped';}I=clampScore(I);const {criterionScores:K,overall:L}=finalizeCriterionScores([{'name':'structural_risk','score':k,'weight':RISK_WEIGHTS['structural_risk'],'rationale':CRITICAL_BINDINGS['filter'](aE=>aE['sourceType']==='Service')['length']+'\x20expected\x20Service\x20bindings\x20checked'},{'name':'fund_safety','score':n,'weight':RISK_WEIGHTS['fund_safety'],'rationale':'Treasury\x20+\x20compensation_fund\x20coverage'},{'name':'operational_risk','score':x,'weight':RISK_WEIGHTS['operational_risk'],'rationale':'Service\x20state\x20+\x20arbitration\x20coverage'},{'name':'governance_risk','score':z,'weight':RISK_WEIGHTS['governance_risk'],'rationale':'Permission\x20+\x20UM\x20presence'},{'name':'graph_coherence','score':F,'weight':RISK_WEIGHTS['graph_coherence'],'rationale':G+'\x20dangling\x20+\x20'+H['length']+'\x20circular\x20refs'},{'name':'mode_registry','score':I,'weight':RISK_WEIGHTS['mode_registry'],'rationale':J}],i['perspective']),M=b['filter'](aE=>aE['severity']==='critical')['length'],N=M>0x0?'HIGH\x20RISK:\x20'+M+'\x20critical\x20issue(s).\x20'+b['length']+'\x20total\x20findings.':'Moderate\x20risk:\x20'+b['length']+'\x20finding(s),\x20no\x20critical\x20issues.';return{'evaluationType':'risk','score':L,'summary':N,'criterionScores':K,'findings':b,'strengths':d,'needsLlm':![],'evaluatedAt':Date['now']()};}function evaluateTrust(a){const b=[],c=[],{objects:d,edges:e,objectCache:f,reputation:g,project:h}=a,i=groupByType(d),j=i['get']('Service')??[];let k=0x32;if(g&&g['size']>0x0&&j[0x0]){const z=g['get'](j[0x0]['objectAddress']);if(z){const A=z['likes']+z['dislikes'];if(A>0x0){const B=z['likes']/A;k=clampScore(0x32+(B-0.5)*0x64);if(B>=0.8)c['push']('Strong\x20reputation:\x20'+z['likes']+'\x20likes\x20vs\x20'+z['dislikes']+'\x20dislikes');else B<0.4&&b['push']({'criterion':'reputation','severity':'warning','message':'Poor\x20reputation:\x20'+z['dislikes']+'\x20dislikes\x20vs\x20'+z['likes']+'\x20likes','deduction':-0x14});}z['favorites']>=0x3&&(c['push'](z['favorites']+'\x20favorites\x20—\x20trusted\x20by\x20other\x20merchants'),k=clampScore(k+0xa));}}else b['push']({'criterion':'reputation','severity':'info','message':'No\x20Registrar\x20reputation\x20data\x20—\x20unknown\x20merchant\x20standing','deduction':-0xa});k=clampScore(k);let l=0x64;const m=i['get']('Arbitration')??[];m['length']===0x0?(l=0x1e,b['push']({'criterion':'arbitration_coverage','severity':'critical','message':'No\x20Arbitration\x20object\x20—\x20buyers\x20have\x20no\x20dispute\x20resolution\x20path','deduction':-0x46})):c['push'](m['length']+'\x20Arbitration\x20object(s)\x20—\x20dispute\x20resolution\x20available');l=clampScore(l);let n=0x3c;const o=i['get']('Guard')??[];o['length']===0x0?(n-=0x14,b['push']({'criterion':'guard_quality','severity':'warning','message':'No\x20Guard\x20objects\x20—\x20no\x20validation\x20rules','deduction':-0x14})):(n=0x50,c['push'](o['length']+'\x20Guard\x20object(s)\x20—\x20validation\x20rules\x20configured'));if(j[0x0]){const C=buildBindingIndex(e),D=j[0x0]['objectAddress']+'#buy_guard';if(C['get'](D)?.['size'])n=clampScore(n+0xf),c['push']('Service\x20has\x20buy_guard\x20bound\x20—\x20purchase\x20validation\x20active');else o['length']>0x0&&c['push']('Guard\x20objects\x20present\x20(buy_guard\x20binding\x20optional)');}n=clampScore(n);let p=0x3c;if(j[0x0]){const E=parseCacheData(f['get'](j[0x0]['objectAddress']));if(E){const F=E['description'];typeof F==='string'&&F['length']>0x0?(p+=0xf,c['push']('Service\x20has\x20description')):b['push']({'criterion':'transparency','severity':'info','message':'Service\x20has\x20no\x20description\x20—\x20buyers\x20cannot\x20evaluate\x20offering','deduction':-0xa});}}const q=i['get']('Repository')??[];q['length']>0x0&&(p=clampScore(p+0xa),c['push'](q['length']+'\x20Repository\x20object(s)\x20—\x20supporting\x20data\x20published'));const r=i['get']('Contact')??[];r['length']>0x0?(p=clampScore(p+0xa),c['push']('Contact\x20information\x20available')):b['push']({'criterion':'transparency','severity':'info','message':'No\x20Contact\x20object\x20—\x20buyers\x20cannot\x20reach\x20merchant','deduction':-0x5});p=clampScore(p);let s=0x64;const t=[],u=buildBindingIndex(e),v=j[0x0];if(v){const G=parseCacheData(f['get'](v['objectAddress']));for(const I of CONSUMER_DUE_DILIGENCE){let J=![];switch(I['id']){case'E1':J=!!G?.['bPublished'];break;case'E2':J=!!G&&!G['bPaused'];break;case'E3':J=(i['get']('Machine')??[])['some'](K=>{const L=parseCacheData(f['get'](K['objectAddress']));return L&&(getNumberField(L,'node_count')>0x0||countArrayField(L,'nodes')>0x0);});break;case'E4':J=!!u['get'](v['objectAddress']+'#buy_guard')?.['size']||(i['get']('Guard')??[])['length']>0x0;break;case'E5':J=getBalanceValue(G,'compensation_fund')>0x0||(i['get']('Treasury')??[])['length']>0x0;break;case'E6':J=(i['get']('Arbitration')??[])['length']>0x0;break;case'E7':J=(i['get']('Permission')??[])['length']>0x0;break;case'E8':J=(i['get']('Contact')??[])['length']>0x0;break;case'E9':J=(i['get']('Repository')??[])['length']>0x0;break;case'E10':J=!!u['get'](v['objectAddress']+'#rewards')?.['size'];break;case'E11':J=!!(G&&typeof G['description']==='string'&&G['description']['length']>0x0);break;case'E12':if(g&&g['size']>0x0){const K=g['get'](v['objectAddress']);J=!!K&&K['likes']>=K['dislikes'];}break;}if(J)t['push'](I['id']);else{let L=I['deduction'],M=I['severity'];if(I['id']==='E5'&&h['industry']&&h['industry']!=='general')try{const O=IndustryModeRegistry['Instance']()['getMode'](h['industry']);O&&O['risk_constraints']?.['require_compensation_fund']===![]&&(L=-0x3,M='info');}catch{}s+=L;const N=I['id']==='E5'&&L!==I['deduction']?'\x20(industry\x20does\x20not\x20require\x20compensation_fund\x20—\x20reduced\x20deduction)':'';b['push']({'criterion':'consumer_diligence','severity':M,'message':I['id']+':\x20'+I['check']+'\x20—\x20FAIL:\x20condition\x20not\x20met'+N+'\x20[severity:\x20'+M+']','deduction':L});}}const H=t['length']/CONSUMER_DUE_DILIGENCE['length'];H>=0.8&&c['push']('Consumer\x20due\x20diligence:\x20'+t['length']+'/'+CONSUMER_DUE_DILIGENCE['length']+'\x20checks\x20passed');}else s=0x14,b['push']({'criterion':'consumer_diligence','severity':'critical','message':'No\x20Service\x20object\x20—\x20consumer\x20due\x20diligence\x20cannot\x20be\x20performed','deduction':-0x50});s=clampScore(s);const {criterionScores:w,overall:x}=finalizeCriterionScores([{'name':'reputation','score':k,'weight':TRUST_WEIGHTS['reputation'],'rationale':'Registrar\x20likes/dislikes\x20+\x20favorites'},{'name':'arbitration_coverage','score':l,'weight':TRUST_WEIGHTS['arbitration_coverage'],'rationale':'Dispute\x20resolution\x20availability'},{'name':'guard_quality','score':n,'weight':TRUST_WEIGHTS['guard_quality'],'rationale':'Validation\x20rules\x20+\x20buy_guard\x20binding'},{'name':'transparency','score':p,'weight':TRUST_WEIGHTS['transparency'],'rationale':'Description\x20+\x20Repository\x20+\x20Contact\x20presence'},{'name':'consumer_diligence','score':s,'weight':TRUST_WEIGHTS['consumer_diligence'],'rationale':t['length']+'/'+CONSUMER_DUE_DILIGENCE['length']+'\x20E-checks\x20passed'}],h['perspective']),y=x>=0x46?'Trusted\x20project\x20(score\x20'+x+'/100).\x20'+c['length']+'\x20strength(s).':'Limited\x20trust\x20signals\x20(score\x20'+x+'/100).\x20'+b['length']+'\x20finding(s).';return{'evaluationType':'trust','score':x,'summary':y,'criterionScores':w,'findings':b,'strengths':c,'needsLlm':![],'evaluatedAt':Date['now']()};}function evaluateCompleteness(a){const b=[],c=[],{objects:d,edges:f,objectCache:g,project:h}=a,i=groupByType(d),j=i['get']('Service')??[],k=buildBindingIndex(f),l=j[0x0],n=l?parseCacheData(g['get'](l['objectAddress'])):null,p=getBalanceValue(n,'compensation_fund'),q=i['get']('Allocation')??[],r=l?k['get'](l['objectAddress']+'#order_allocators')?.['size']??0x0:0x0,s=q['length']>0x0&&r>0x0,t=resolveRequiredItems(h['industry']??undefined,p,s),u=t['filter'](O=>O['required'])['length'],v=t['filter'](O=>!O['required']);let w=0x0,x=0x0;const y=[],z=[];for(const O of t){const P=(i['get'](O['objectType'])?.['length']??0x0)>0x0,Q=O['fieldName']?!!k['get']((j[0x0]?.['objectAddress']??'')+'#'+O['fieldName'])?.['size']:P;O['required']?Q||!O['fieldName']&&P?w++:y['push'](O['id']+'('+O['objectType']+')'):Q||!O['fieldName']&&P?x++:z['push'](O['id']+'('+O['objectType']+')');}const A=w/u,B=v['length']>0x0?x/v['length']:0x1;let C=clampScore(A*0x50+B*0x14);y['length']>0x0?b['push']({'criterion':'object_coverage','severity':y['length']>=0x3?'critical':'warning','message':'Missing\x20required\x20items:\x20'+y['join'](',\x20')+'\x20—\x20'+y['length']+'/'+u+'\x20required\x20items\x20absent','deduction':-0xf*y['length']}):c['push']('All\x20'+u+'\x20required\x20items\x20present\x20(R1-R8)');if(z['length']>0x0&&z['length']===v['length'])b['push']({'criterion':'object_coverage','severity':'info','message':'No\x20optional\x20items\x20configured:\x20'+z['join'](',\x20')+'\x20—\x20recommended\x20for\x20enhanced\x20UX','deduction':-0x5});else x>0x0&&c['push'](x+'/'+v['length']+'\x20optional\x20items\x20configured\x20(R9-R12)');C=clampScore(C);let D=0x64;if(j[0x0]){const R=j[0x0]['objectAddress'],S=parseCacheData(g['get'](R)),T=getBalanceValue(S,'compensation_fund');let U=0x0,V=0x0;for(const W of CRITICAL_BINDINGS){if(W['sourceType']!=='Service')continue;V++;const X=W['fieldName']==='arbitrations'?T>0x0?!![]:W['critical']:W['critical'],Y=R+'#'+W['fieldName'];if(k['get'](Y)?.['size'])U++;else{const Z=X?-0x14:-0x8;D+=Z,b['push']({'criterion':'binding_completeness','severity':X?'critical':'warning','message':'Service.'+W['fieldName']+'\x20not\x20bound\x20(expected\x20'+W['targetType']+')'+(W['fieldName']==='arbitrations'?T>0x0?'\x20—\x20required\x20by\x20contract\x20when\x20compensation_fund\x20>\x200':'\x20—\x20optional\x20when\x20compensation_fund\x20is\x200':''),'deduction':Z});}}U===V&&c['push']('All\x20'+V+'\x20Service\x20bindings\x20established');}else D=0x0,b['push']({'criterion':'binding_completeness','severity':'critical','message':'No\x20Service\x20object\x20—\x20cannot\x20evaluate\x20bindings','deduction':-0x64});D=clampScore(D);let E=0x50;const F=i['get']('Machine')??[];if(F['length']===0x0)E-=0x14,b['push']({'criterion':'workflow_rationality','severity':'info','message':'No\x20Machine\x20object\x20—\x20bind\x20one\x20before\x20publishing\x20(deploy-time\x20requirement)','deduction':-0x14});else for(const a0 of F){const a1=parseCacheData(g['get'](a0['objectAddress']));if(a1){const a2=getMachineNodeCount(a1);a2>0x0?c['push']('Machine\x20has\x20'+a2+'\x20node(s)'):(E-=0xa,b['push']({'criterion':'workflow_rationality','severity':'info','message':'Machine\x20'+a0['objectAddress']['slice'](0x0,0x8)+'\x20has\x20no\x20nodes','deduction':-0xa}));}}const G=new Set();for(const a3 of d){if(a3['objectAddress'])G['add'](a3['objectAddress']);if(a3['objectName']){G['add'](a3['objectName']);const a4=shortTypeName(a3['objectType'])['toLowerCase']();G['add'](a4+':'+a3['objectName']);}}let H=0x0;for(const a5 of f){if(a5['edgeSource']==='potential')continue;if(!G['has'](a5['targetObject']))H++;}H>0x0&&(E=clampScore(E-Math['min'](0x14,H*0x2)),b['push']({'criterion':'workflow_rationality','severity':'info','message':H+'\x20edge(s)\x20point\x20to\x20objects\x20not\x20in\x20project\x20—\x20dangling\x20references','deduction':-Math['min'](0x14,H*0x2)}));E=clampScore(E);let I=0x64;if(j[0x0]){const a6=parseCacheData(g['get'](j[0x0]['objectAddress']));if(a6){const a7=a6['bPublished'];if(a7){c['push']('Service\x20already\x20published\x20—\x20deployment\x20complete'),I=0x64;const a8=a6['machine'];if(typeof a8==='string'&&a8['startsWith']('0x')){const a9=parseCacheData(g['get'](a8));a9&&a9['bPublished']===![]&&(I-=0xa,b['push']({'criterion':'deployment_readiness','severity':'info','message':'Bound\x20Machine\x20'+a8['slice'](0x0,0x8)+'\x20is\x20not\x20published\x20—\x20order_progress\x20will\x20fail\x20(machine.move\x20E_NOT_PUBLISHED)','deduction':-0xa}));}}else{const aa=k['get'](j[0x0]['objectAddress']+'#machine')?.['size'],ab=k['get'](j[0x0]['objectAddress']+'#permission')?.['size'],ac=k['get'](j[0x0]['objectAddress']+'#order_allocators')?.['size'],ad=getBalanceValue(a6,'compensation_fund'),ae=k['get'](j[0x0]['objectAddress']+'#arbitrations')?.['size'];!aa&&(I-=0x1e,b['push']({'criterion':'deployment_readiness','severity':'critical','message':'Service\x20has\x20no\x20Machine\x20—\x20cannot\x20publish','deduction':-0x1e}));!ab&&(I-=0x1e,b['push']({'criterion':'deployment_readiness','severity':'critical','message':'Service\x20has\x20no\x20Permission\x20—\x20cannot\x20publish','deduction':-0x1e}));!ac&&(I-=0x1e,b['push']({'criterion':'deployment_readiness','severity':'critical','message':'Service\x20has\x20no\x20order_allocators\x20—\x20cannot\x20publish\x20(service.move:493\x20E_NO_ALLOCATOR)','deduction':-0x1e}));ad>0x0&&!ae&&(I-=0x19,b['push']({'criterion':'deployment_readiness','severity':'critical','message':'Service\x20has\x20compensation_fund\x20('+ad+')\x20but\x20no\x20arbitrations\x20—\x20cannot\x20publish\x20(service.move:495\x20E_ARBITRATION_NOT_SET_WITH_COMPENSATION_FUND)','deduction':-0x19}));if(aa&&ab&&ac){if(ad>0x0&&ae)c['push']('Service\x20ready\x20to\x20publish\x20(Machine\x20+\x20Permission\x20+\x20order_allocators\x20+\x20arbitrations\x20bound)');else ad===0x0&&c['push']('Service\x20ready\x20to\x20publish\x20(Machine\x20+\x20Permission\x20+\x20order_allocators\x20bound;\x20arbitrations\x20optional\x20when\x20compensation_fund\x20is\x200)');}}}}else I=0x0;I=clampScore(I);const {criterionScores:J,overall:K}=finalizeCriterionScores([{'name':'object_coverage','score':C,'weight':COMPLETENESS_WEIGHTS['object_coverage'],'rationale':'R1-R8:\x20'+w+'/'+u+'\x20required,\x20R9-R12:\x20'+x+'/'+v['length']+'\x20optional'},{'name':'binding_completeness','score':D,'weight':COMPLETENESS_WEIGHTS['binding_completeness'],'rationale':'Service\x20critical\x20bindings\x20checked'},{'name':'workflow_rationality','score':E,'weight':COMPLETENESS_WEIGHTS['workflow_rationality'],'rationale':'Machine\x20nodes\x20+\x20dangling\x20edges'},{'name':'deployment_readiness','score':I,'weight':COMPLETENESS_WEIGHTS['deployment_readiness'],'rationale':'Service\x20publishable\x20state'}],h['perspective']),L=b['filter'](af=>af['severity']==='critical')['length'],M=L>0x0?'Incomplete:\x20'+L+'\x20critical\x20gap(s).\x20Not\x20ready\x20for\x20deployment.':K>=0x50?'Complete\x20project\x20(score\x20'+K+'/100).\x20Ready\x20for\x20deployment.':'Partially\x20complete\x20(score\x20'+K+'/100).\x20'+b['length']+'\x20gap(s)\x20to\x20address.',N=evaluateIndustryPattern(h,d,g,f);return c['push'](...N['strengths']),b['push'](...N['findings']),{'evaluationType':'completeness','score':K,'summary':M,'criterionScores':J,'findings':b,'strengths':c,'needsLlm':![],'evaluatedAt':Date['now']()};}function evaluateEscrowQuality(a){const {objects:b,edges:c,objectCache:d}=a,e=groupByType(b),f=e['get']('Service')??[],g=e['get']('Allocation')??[],h=buildBindingIndex(c);let i=0x32;const j=[];if(f['length']===0x0)return{'name':'escrow_quality','score':0x0,'weight':EXTENDED_DIMENSION_WEIGHTS['escrow_quality'],'rationale':'No\x20Service\x20object'};const k=f[0x0],l=parseCacheData(d['get'](k['objectAddress'])),m=h['get'](k['objectAddress']+'#order_allocators')?.['size']??0x0;if(m>0x0&&g['length']>0x0)i=0x5a,j['push']('On-chain\x20escrow\x20active:\x20order_allocators\x20bound\x20+\x20Allocation\x20objects\x20present');else{if(m>0x0)i=0x46,j['push']('order_allocators\x20template\x20bound\x20—\x20escrow\x20will\x20activate\x20per-order');else l&&getBalanceValue(l,'compensation_fund')>0x0?(i=0x3c,j['push']('compensation_fund\x20present\x20but\x20no\x20Allocation\x20escrow\x20—\x20funds\x20held\x20by\x20merchant,\x20not\x20locked\x20in\x20contract')):(i=0x14,j['push']('No\x20escrow\x20mechanism\x20—\x20funds\x20flow\x20directly\x20to\x20merchant\x20(high\x20counterparty\x20risk)'));}return{'name':'escrow_quality','score':clampScore(i),'weight':EXTENDED_DIMENSION_WEIGHTS['escrow_quality'],'rationale':j['join'](';\x20')};}function evaluateProofIntegrity(a){const {objects:b,edges:c}=a,d=groupByType(b),e=d['get']('Repository')??[],f=d['get']('Guard')??[],g=d['get']('Proof')??[];let h=0x32;const i=[];return e['length']>0x0&&(h+=0x14,i['push'](e['length']+'\x20Repository\x20object(s)')),f['length']>0x0&&(h+=0xf,i['push'](f['length']+'\x20Guard\x20object(s)')),g['length']>0x0&&(h+=0xf,i['push'](g['length']+'\x20Proof\x20object(s)')),e['length']===0x0&&f['length']===0x0&&(h=0x14,i['push']('No\x20on-chain\x20proof\x20mechanism\x20—\x20evidence\x20can\x20be\x20tampered')),{'name':'proof_integrity','score':clampScore(h),'weight':EXTENDED_DIMENSION_WEIGHTS['proof_integrity'],'rationale':i['join'](',\x20')||'No\x20proof\x20objects'};}function evaluateArbitrationFairness(a){const {objects:b,edges:c,objectCache:d}=a,e=groupByType(b),f=e['get']('Service')??[],g=e['get']('Arbitration')??[],h=buildBindingIndex(c);if(g['length']===0x0)return{'name':'arbitration_fairness','score':0x0,'weight':EXTENDED_DIMENSION_WEIGHTS['arbitration_fairness'],'rationale':'No\x20Arbitration\x20configured'};let i=0x32;const j=[],k=f[0x0];if(!k)return{'name':'arbitration_fairness','score':0x1e,'weight':EXTENDED_DIMENSION_WEIGHTS['arbitration_fairness'],'rationale':'No\x20Service\x20to\x20compare\x20against'};const l=k['objectAddress']+'#permission',m=h['get'](l)?.['values']()['next']()['value'];for(const n of g){const o=n['objectAddress']+'#permission',p=h['get'](o)?.['values']()['next']()['value'];if(!m||!p){i-=0xa,j['push']('Arbitration\x20'+n['objectAddress']['slice'](0x0,0x8)+'\x20missing\x20permission\x20binding');continue;}m===p?(i=0xa,j['push']('Arbitration\x20'+n['objectAddress']['slice'](0x0,0x8)+'\x20shares\x20SAME\x20Permission\x20as\x20Service\x20—\x20NOT\x20independent')):(i+=0x1e,j['push']('Arbitration\x20'+n['objectAddress']['slice'](0x0,0x8)+'\x20has\x20independent\x20Permission'));}return{'name':'arbitration_fairness','score':clampScore(i),'weight':EXTENDED_DIMENSION_WEIGHTS['arbitration_fairness'],'rationale':j['join'](';\x20')};}function evaluateFeeTransparency(a){const {objects:b,edges:c,objectCache:d}=a,e=groupByType(b),f=e['get']('Allocation')??[],g=e['get']('Service')??[];let h=0x3c;const i=[];f['length']>0x0&&(h+=0x14,i['push'](f['length']+'\x20Allocation\x20object(s)\x20—\x20fee\x20distribution\x20on-chain'));const j=g[0x0];if(j){const k=parseCacheData(d['get'](j['objectAddress']));k?.['sales']&&Array['isArray'](k['sales'])&&(h+=0xa,i['push'](k['sales']['length']+'\x20sale\x20item(s)\x20—\x20pricing\x20visible')),k?.['compensation_fund']&&getBalanceValue(k,'compensation_fund')>0x0&&(h+=0xa,i['push']('compensation_fund\x20visible'));}return{'name':'fee_transparency','score':clampScore(h),'weight':EXTENDED_DIMENSION_WEIGHTS['fee_transparency'],'rationale':i['join'](',\x20')||'Limited\x20fee\x20visibility'};}function evaluateTimeoutProtection(a){const {objects:b,objectCache:c}=a,d=groupByType(b),e=d['get']('Machine')??[];let f=0x32;const g=[];for(const h of e){const i=parseCacheData(c['get'](h['objectAddress'])),j=getMachineNodeCount(i);if(j>0x0){const k=h['metadata'],l=k?.['config'];if(l?.['timeout_guard']||l?.['time_guard'])f+=0x1e,g['push']('Machine\x20has\x20timeout\x20guard\x20configured');else j>=0x2&&(f+=0xa,g['push']('Machine\x20has\x20'+j+'\x20nodes\x20—\x20workflow\x20structure\x20present'));}}return e['length']===0x0&&(f=0x14,g['push']('No\x20Machine\x20—\x20no\x20workflow\x20timeout\x20protection')),{'name':'timeout_protection','score':clampScore(f),'weight':EXTENDED_DIMENSION_WEIGHTS['timeout_protection'],'rationale':g['join'](';\x20')||'No\x20timeout\x20mechanisms\x20detected'};}function evaluateSupplierVisibility(a){const {objects:b}=a,c=groupByType(b),d=c['get']('Demand')??[],e=c['get']('Allocation')??[];let f=0x3c;const g=[];return d['length']>0x0&&(f+=0x14,g['push'](d['length']+'\x20Demand\x20object(s)\x20—\x20supplier\x20discovery\x20on-chain')),e['length']>0x0&&(f+=0x14,g['push'](e['length']+'\x20Allocation\x20object(s)\x20—\x20supplier\x20payments\x20visible')),d['length']===0x0&&e['length']===0x0&&(f=0x1e,g['push']('No\x20Demand\x20or\x20Allocation\x20—\x20supplier\x20relationships\x20opaque')),{'name':'supplier_visibility','score':clampScore(f),'weight':EXTENDED_DIMENSION_WEIGHTS['supplier_visibility'],'rationale':g['join'](',\x20')||'No\x20supplier\x20transparency'};}function evaluateContentCommitment(a){const {objects:b}=a,c=groupByType(b),d=c['get']('Repository')??[],e=c['get']('Guard')??[];let f=0x32;const g=[];return d['length']>0x0&&(f+=0x19,g['push']('Repository\x20present\x20—\x20content\x20hash\x20commitments\x20possible')),e['length']>0x0&&(f+=0x19,g['push']('Guard\x20present\x20—\x20delivery\x20verification\x20possible')),{'name':'content_commitment','score':clampScore(f),'weight':EXTENDED_DIMENSION_WEIGHTS['content_commitment'],'rationale':g['join'](',\x20')||'No\x20content\x20commitment\x20mechanism'};}function evaluateReputationVerifiability(a){const {reputation:b,objects:c}=a,d=groupByType(c)['get']('Service')??[];let e=0x28;const f=[];if(b&&b['size']>0x0&&d[0x0]){const g=b['get'](d[0x0]['objectAddress']);g&&(e+=0x1e,f['push']('Registrar\x20data:\x20'+g['likes']+'\x20likes,\x20'+g['dislikes']+'\x20dislikes,\x20'+g['favorites']+'\x20favorites'));}return d['length']>0x0&&(e+=0xa,f['push']('Service\x20object\x20present\x20—\x20reputation\x20can\x20accumulate')),{'name':'reputation_verifiability','score':clampScore(e),'weight':EXTENDED_DIMENSION_WEIGHTS['reputation_verifiability'],'rationale':f['join'](',\x20')||'No\x20reputation\x20data\x20available'};}function evaluatePermissionSafety(a){const {objects:b,edges:c,objectCache:d}=a,e=groupByType(b),f=e['get']('Machine')??[],g=e['get']('Permission')??[],h=buildBindingIndex(c);let i=0x3c;const j=[];if(f['length']===0x0)return{'name':'permission_safety','score':0x32,'weight':EXTENDED_DIMENSION_WEIGHTS['permission_safety'],'rationale':'No\x20Machine\x20to\x20check'};const k=new Map();for(const l of g){const m=parseCacheData(d['get'](l['objectAddress']));m&&k['set'](l['objectAddress'],{'address':l['objectAddress'],'entity_count':typeof m['entity_count']==='number'?m['entity_count']:undefined,'perm_remark':Array['isArray'](m['perm_remark'])?m['perm_remark']:undefined,'owner':typeof m['owner']==='string'?m['owner']:undefined,'admin':Array['isArray'](m['admin'])?m['admin']:undefined});}for(const n of f){const o=h['get'](n['objectAddress']+'#permission');if(!o||o['size']===0x0)continue;const p=o['values']()['next']()['value'],q=p?k['get'](p):null;if(!q)continue;const r=parseCacheData(d['get'](n['objectAddress'])),s=extractMachineNodesFromCache(r);if(s['length']===0x0)continue;const t=collectPermissionIndexes(s);if(t['requiredIndexes']['length']===0x0)continue;const u=checkPermissionAuthorization(t['requiredIndexes'],q);!u['allAuthorized']?(i-=0x1e,j['push']('Machine\x20'+n['objectAddress']['slice'](0x0,0x8)+'\x20has\x20unauthorized\x20permission\x20indexes:\x20['+u['missingIndexes']['join'](',\x20')+']')):(i+=0x14,j['push']('Machine\x20'+n['objectAddress']['slice'](0x0,0x8)+':\x20all\x20'+t['requiredIndexes']['length']+'\x20permission\x20index(es)\x20authorized'));}return{'name':'permission_safety','score':clampScore(i),'weight':EXTENDED_DIMENSION_WEIGHTS['permission_safety'],'rationale':j['join'](';\x20')||'Permission\x20checks\x20passed'};}function evaluateValueStub(a,b){return{'evaluationType':'value','score':0x0,'summary':'Requires\x20LLM\x20evaluation\x20—\x20semantic\x20prompt\x20assembled.\x20Call\x20save_evaluation\x20with\x20the\x20LLM\x20result.','criterionScores':[],'findings':[],'strengths':[],'needsLlm':!![],'llmPrompt':b,'evaluatedAt':Date['now']()};}export function runEvaluationInternal(a,b,c){const d=filterTemplateObjects(a);switch(b){case'risk':return evaluateRisk(d);case'trust':return evaluateTrust(d);case'completeness':return evaluateCompleteness(d);case'value':return evaluateValueStub(d,c);default:throw new Error('Unknown\x20evaluation\x20type:\x20'+b);}}const PROJECT_EVALUATION_TYPES=['risk','trust','completeness','worth_buying','value'];function makeProjectRule(a){return{'id':'project_'+a,'description':'Project-level\x20'+a+'\x20evaluation\x20(rule-based\x20or\x20LLM-assisted)','dimension':a,'weight':0x1,'evaluation_ids':['project_'+a],'evaluate':b=>{const c=b['entities']['projectEvaluation'],d=b['entities']['llmPrompt'],e=runEvaluationInternal(c,a,d);return b['facts']['criterionScores']=e['criterionScores'],b['facts']['findings']=e['findings'],b['facts']['strengths']=e['strengths'],b['facts']['needsLlm']=e['needsLlm'],b['facts']['llmPrompt']=e['llmPrompt'],{'score':e['score'],'weight':0x1,'reason':e['summary'],'red_flag':e['findings']?.['some'](g=>g['severity']==='critical')??![]};}};}const RISK_CRITERIA=['structural_risk','fund_safety','operational_risk','governance_risk','graph_coherence','mode_registry'],TRUST_CRITERIA=['reputation','arbitration_coverage','guard_quality','transparency','consumer_diligence'],COMPLETENESS_CRITERIA=['object_coverage','binding_completeness','workflow_rationality','deployment_readiness'];function registerRuleBasedProjectEvaluation(a,b,c,d){const e='__project_'+b+'_result';a['registerDataSource']({'id':'project_'+b+'_facts','description':'Extract\x20project\x20facts\x20+\x20run\x20the\x20'+b+'\x20criterion\x20computer\x20(perspective\x20via\x20UserInjection)','evaluation_ids':['project_'+b],'extract':f=>{const g=f['entities']['projectEvaluation'],h=f['injection']?.['preferences']?.['perspective'],i=h&&h!==g['project']['perspective']?{...g,'project':{...g['project'],'perspective':h}}:g,j=d(i);return f['facts'][e]=j,f['facts']['criterionScores']=j['criterionScores'],f['facts']['findings']=j['findings'],f['facts']['strengths']=j['strengths'],f['facts']['needsLlm']=j['needsLlm'],{};}});for(const f of c){a['registerRule']({'id':'project_'+b+'_'+f,'description':'Project\x20'+b+'\x20criterion:\x20'+f,'dimension':b,'weight':0x1,'evaluation_ids':['project_'+b],'evaluate':g=>{const h=g['facts'][e];if(!h)return null;const i=h['criterionScores']['find'](j=>j['name']===f);if(!i)return null;return{'score':i['score'],'weight':i['weight'],'reason':i['rationale']};}});}}function registerWorthBuyingEvaluation(a){a['registerDataSource']({'id':'project_worth_buying_facts','description':'Run\x20risk/trust/completeness\x20via\x20the\x20kernel\x20+\x20D16-D24\x20enrichment\x20+\x20build\x20LLM\x20prompt','evaluation_ids':['project_worth_buying'],'extract':async b=>{const c=b['entities']['projectEvaluation'],d=b['entities']['llmPrompt'],e={'projectEvaluation':c},[f,g,h]=await Promise['all']([a['evaluate']('project_risk',e,b['injection']),a['evaluate']('project_trust',e,b['injection']),a['evaluate']('project_completeness',e,b['injection'])]),i=[evaluateEscrowQuality(c),evaluateProofIntegrity(c),evaluateArbitrationFairness(c),evaluateFeeTransparency(c),evaluateTimeoutProtection(c),evaluateSupplierVisibility(c),evaluateContentCommitment(c),evaluateReputationVerifiability(c),evaluatePermissionSafety(c)],j=i['map'](m=>m['name']+':\x20'+m['score']+'/100\x20—\x20'+m['rationale'])['join']('\x0a'),k=['===\x20RULE-BASED\x20EVALUATION\x20SUMMARY\x20(F-08\x20enriched\x20context)\x20===','','Risk:\x20'+f['total']+'/100\x20—\x20'+f['summary'],...(f['findings']??[])['slice'](0x0,0x3)['map'](m=>'\x20\x20-\x20['+m['severity']+']\x20'+m['message']),'','Trust:\x20'+g['total']+'/100\x20—\x20'+g['summary'],...(g['findings']??[])['slice'](0x0,0x3)['map'](m=>'\x20\x20-\x20['+m['severity']+']\x20'+m['message']),'','Completeness:\x20'+h['total']+'/100\x20—\x20'+h['summary'],...(h['findings']??[])['slice'](0x0,0x3)['map'](m=>'\x20\x20-\x20['+m['severity']+']\x20'+m['message']),'','===\x20EXTENDED\x20DIMENSIONS\x20D16-D24\x20(GLM6/93)\x20===',j,'','===\x20END\x20RULE-BASED\x20SUMMARY\x20===',''],l=k['join']('\x0a');return b['facts']['needsLlm']=!![],b['facts']['llmPrompt']=d?d+'\x0a\x0a'+l:l+'\x0aInstruction:\x20Based\x20on\x20the\x20rule-based\x20summary\x20above,\x20evaluate\x20whether\x20this\x20project\x20is\x20worth\x20buying.\x20Return\x20a\x200-100\x20score\x20and\x20a\x20brief\x20rationale.\x20Focus\x20on\x20buyer\x20risk\x20vs.\x20value\x20proposition.',b['facts']['summary']='Requires\x20LLM\x20evaluation\x20—\x20semantic\x20prompt\x20assembled\x20with\x20rule-based\x20context\x20(risk/trust/completeness\x20+\x20D16-D24\x20extended\x20dimensions).\x20Call\x20save_evaluation\x20with\x20the\x20LLM\x20result.',{};}});}export function registerProjectEvaluations(a=getEvaluationEngine()){registerRuleBasedProjectEvaluation(a,'risk',RISK_CRITERIA,evaluateRisk),registerRuleBasedProjectEvaluation(a,'trust',TRUST_CRITERIA,evaluateTrust),registerRuleBasedProjectEvaluation(a,'completeness',COMPLETENESS_CRITERIA,evaluateCompleteness),registerWorthBuyingEvaluation(a);for(const b of PROJECT_EVALUATION_TYPES){if(b==='risk'||b==='trust'||b==='completeness'||b==='worth_buying')continue;a['registerRule'](makeProjectRule(b));}}registerProjectEvaluations();export async function runEvaluation(a,b,c,d){const e=filterTemplateObjects(a),f=getEvaluationEngine(),g=await f['evaluate']('project_'+b,{'projectEvaluation':e,'llmPrompt':c},d);return{'evaluationType':b,'score':g['total'],'summary':g['summary'],'criterionScores':g['criterionScores']??[],'findings':g['findings']??[],'strengths':g['strengths']??[],'needsLlm':g['needsLlm']??![],'llmPrompt':g['llmPrompt'],'evaluatedAt':Date['now']()};}function filterTemplateObjects(a){const b=i=>{if(!i)return!![];return i['startsWith']('draft:');},c=i=>{if(b(i['objectAddress']))return!![];const j=i['metadata'];return!!(j&&j['status']==='draft');},d=[],e=[];for(const i of a['objects']){c(i)?d['push'](i):e['push'](i);}const f=new Set();for(const j of e){if(j['objectAddress'])f['add'](j['objectAddress']);if(j['objectName']){f['add'](j['objectName']);const k=shortTypeName(j['objectType'])['toLowerCase']();f['add'](k+':'+j['objectName']);}}const g=new Set();for(const l of d){if(l['objectAddress'])g['add'](l['objectAddress']);if(l['objectName']){g['add'](l['objectName']);const m=shortTypeName(l['objectType'])['toLowerCase']();g['add'](m+':'+l['objectName']);}}const h=a['edges']['filter'](n=>{const p=n['metadata'];if(p&&p['blueprint']===!![])return![];const q=b(n['sourceObject'])||g['has'](n['sourceObject']),r=b(n['targetObject'])||g['has'](n['targetObject']);return!q&&!r;});return{...a,'objects':e,'edges':h};}export function compareProjects(a,b){const c=[...a]['sort']((d,e)=>{if(d['score']===null&&e['score']===null)return 0x0;if(d['score']===null)return 0x1;if(e['score']===null)return-0x1;return e['score']-d['score'];});return{'evaluationType':b,'entries':a,'ranking':c,'bestProjectId':c[0x0]?.['score']!==null?c[0x0]?.['projectId']??null:null};}
@@ -16,12 +16,12 @@ export interface GraphBuildOptions {
16
16
  export interface ReputationData {
17
17
  likes: number;
18
18
  dislikes: number;
19
- affiliations: number;
19
+ favorites: number;
20
20
  voters: Array<{
21
21
  who: string;
22
22
  like: boolean;
23
23
  dislike: boolean;
24
- affiliation: boolean;
24
+ favor: boolean;
25
25
  time: number;
26
26
  }>;
27
27
  }
@@ -1 +1 @@
1
- import{query_objects,queryTableItem_EntityLinker,LocalProject}from'@wowok/wowok';const MAX_OBJECTS_PER_QUERY=0x32;function shortTypeName(a){if(!a)return'unknown';const b=a['replace'](/<.*>/,'')['trim'](),c=b['split']('::');return c[c['length']-0x1]||'unknown';}export function extractAddressFields(a){const b=[],c=a['type'];let d=c;if(c&&c['includes']('::')){const k=c['split']('::');d=k[k['length']-0x1];}const e=l=>typeof l==='string'&&l['startsWith']('0x')&&l['length']>=0xa,f=(l,m,n)=>{e(l)&&l!=='0x0'&&l!==a['object']&&b['push']({'address':l,'field':m,'type':n});},h=(l,m,n)=>{if(Array['isArray'](l))for(const o of l){f(o,m,n);}},i=(l,m,n)=>{l!==null&&l!==undefined&&f(l,m,n);},j=a;switch(d){case'Service':{i(j['machine'],'machine','bind'),i(j['buy_guard'],'buy_guard','validate'),i(j['um'],'um','bind'),f(j['permission'],'permission','validate'),h(j['repositories'],'repositories','consume'),h(j['arbitrations'],'arbitrations','trigger'),h(j['rewards'],'rewards','trigger');if(j['order_allocators']?.['allocators']){for(const m of j['order_allocators']['allocators']){f(m['guard'],'allocator_guard','validate');}const l=j['order_allocators']['allocators'][0x0]?.['guard'];f(l,'order_allocators','create');}break;}case'Machine':{f(j['permission'],'permission','validate'),h(j['consensus_repositories'],'consensus_repositories','consume');break;}case'Order':{f(j['service'],'service','consume'),i(j['machine'],'machine','consume'),i(j['progress'],'progress','trigger'),h(j['dispute'],'dispute','trigger'),i(j['allocation'],'allocation','bind');break;}case'Progress':{f(j['machine'],'machine','bind'),h(j['context_repositories'],'context_repositories','consume');break;}case'Treasury':{f(j['permission'],'permission','validate');if(Array['isArray'](j['external_deposit_guard'])){for(const n of j['external_deposit_guard'])f(n?.['guard'],'external_deposit_guard','validate');}if(Array['isArray'](j['external_withdraw_guard'])){for(const o of j['external_withdraw_guard'])f(o?.['guard'],'external_withdraw_guard','validate');}break;}case'Allocation':{if(Array['isArray'](j['allocators'])){for(const p of j['allocators'])f(p?.['guard'],'allocator_guard','validate');}i(j['payment_info']?.['for_object'],'for_object','bind'),i(j['payment_info']?.['for_guard'],'for_guard','validate'),h(j['payment'],'payment','trigger');break;}case'Arbitration':{f(j['permission'],'permission','validate');if(Array['isArray'](j['voting_guard'])){for(const q of j['voting_guard'])f(q?.['guard'],'voting_guard','validate');}i(j['usage_guard'],'usage_guard','validate');break;}case'Reward':{f(j['permission'],'permission','validate');if(Array['isArray'](j['guards'])){for(const s of j['guards'])f(s?.['guard'],'guard','validate');}break;}case'Repository':{f(j['permission'],'permission','validate'),h(j['rewards'],'rewards','trigger');if(Array['isArray'](j['policies']))for(const t of j['policies']){if(Array['isArray'](t?.['write_guard'])){for(const u of t['write_guard'])f(u?.['guard'],'write_guard','validate');}i(t?.['quote_guard'],'quote_guard','validate');}break;}case'Demand':{f(j['permission'],'permission','validate');if(Array['isArray'](j['guards'])){for(const v of j['guards'])f(v?.['guard'],'guard','validate');}h(j['rewards'],'rewards','trigger');break;}case'Contact':{f(j['permission'],'permission','validate');break;}case'Permission':{break;}case'Payment':{i(j['info']?.['for_object'],'for_object','bind'),i(j['info']?.['for_guard'],'for_guard','validate');if(Array['isArray'](j['record']))for(const w of j['record']){const x=w?.['recipient'];x&&typeof x==='object'&&typeof x['Entity']==='string'&&f(x['Entity'],'recipient_entity','consume');}break;}case'Guard':{break;}default:break;}return b;}class RateLimiter{['maxConcurrency'];['qps'];['queue']=[];['activeCount']=0x0;['lastRequestTime']=0x0;constructor(a,b){this['maxConcurrency']=a,this['qps']=b;}async['acquire'](){if(this['activeCount']<this['maxConcurrency']){this['activeCount']++,await this['enforceRate']();return;}return new Promise(a=>{this['queue']['push'](()=>{this['activeCount']++,this['enforceRate']()['then'](a);});});}['release'](){this['activeCount']--;if(this['queue']['length']>0x0){const a=this['queue']['shift']();a();}}async['enforceRate'](){const a=Date['now'](),b=0x3e8/this['qps'],c=a-this['lastRequestTime'];c<b&&await sleep(b-c),this['lastRequestTime']=Date['now']();}async['run'](a){await this['acquire']();try{return await a();}finally{this['release']();}}}function sleep(a){return new Promise(b=>setTimeout(b,a));}const EXPECTED_RELATIONSHIPS=new Map([['Service',[{'targetType':'Machine','fieldName':'machine','relationshipType':'bind','single':!![]},{'targetType':'Guard','fieldName':'buy_guard','relationshipType':'validate','single':!![]},{'targetType':'Permission','fieldName':'permission','relationshipType':'validate','single':!![]},{'targetType':'Guard','fieldName':'allocator_guard','relationshipType':'validate'},{'targetType':'Contact','fieldName':'um','relationshipType':'bind','single':!![]},{'targetType':'Arbitration','fieldName':'arbitrations','relationshipType':'trigger'},{'targetType':'Reward','fieldName':'rewards','relationshipType':'trigger'},{'targetType':'Repository','fieldName':'repositories','relationshipType':'consume'}]],['Machine',[{'targetType':'Permission','fieldName':'permission','relationshipType':'validate','single':!![]},{'targetType':'Repository','fieldName':'consensus_repositories','relationshipType':'consume'},{'targetType':'Contact','fieldName':'um','relationshipType':'bind','single':!![]}]],['Order',[{'targetType':'Service','fieldName':'service','relationshipType':'consume','single':!![]},{'targetType':'Machine','fieldName':'machine','relationshipType':'consume','single':!![]},{'targetType':'Progress','fieldName':'progress','relationshipType':'trigger','single':!![]},{'targetType':'Arb','fieldName':'dispute','relationshipType':'trigger'},{'targetType':'Allocation','fieldName':'allocation','relationshipType':'bind','single':!![]}]],['Progress',[{'targetType':'Machine','fieldName':'machine','relationshipType':'bind','single':!![]},{'targetType':'Repository','fieldName':'context_repositories','relationshipType':'consume'}]],['Allocation',[{'targetType':'Guard','fieldName':'allocator_guard','relationshipType':'validate'},{'targetType':'Guard','fieldName':'for_guard','relationshipType':'validate','single':!![]},{'targetType':'Payment','fieldName':'payment','relationshipType':'trigger'}]],['Reward',[{'targetType':'Guard','fieldName':'guard','relationshipType':'validate'},{'targetType':'Permission','fieldName':'permission','relationshipType':'validate','single':!![]},{'targetType':'Contact','fieldName':'um','relationshipType':'bind','single':!![]}]],['Repository',[{'targetType':'Guard','fieldName':'write_guard','relationshipType':'validate'},{'targetType':'Guard','fieldName':'quote_guard','relationshipType':'validate','single':!![]},{'targetType':'Permission','fieldName':'permission','relationshipType':'validate','single':!![]},{'targetType':'Reward','fieldName':'rewards','relationshipType':'trigger'},{'targetType':'Contact','fieldName':'um','relationshipType':'bind','single':!![]}]],['Demand',[{'targetType':'Guard','fieldName':'guard','relationshipType':'validate'},{'targetType':'Reward','fieldName':'rewards','relationshipType':'trigger'},{'targetType':'Permission','fieldName':'permission','relationshipType':'validate','single':!![]},{'targetType':'Contact','fieldName':'um','relationshipType':'bind','single':!![]}]],['Treasury',[{'targetType':'Permission','fieldName':'permission','relationshipType':'validate','single':!![]},{'targetType':'Guard','fieldName':'external_deposit_guard','relationshipType':'validate'},{'targetType':'Guard','fieldName':'external_withdraw_guard','relationshipType':'validate'},{'targetType':'Contact','fieldName':'um','relationshipType':'bind','single':!![]}]],['Arbitration',[{'targetType':'Permission','fieldName':'permission','relationshipType':'validate','single':!![]},{'targetType':'Guard','fieldName':'voting_guard','relationshipType':'validate'},{'targetType':'Guard','fieldName':'usage_guard','relationshipType':'validate','single':!![]},{'targetType':'Contact','fieldName':'um','relationshipType':'bind','single':!![]}]],['Payment',[{'targetType':'Guard','fieldName':'for_guard','relationshipType':'validate','single':!![]}]],['Contact',[{'targetType':'Permission','fieldName':'permission','relationshipType':'validate','single':!![]}]],['Permission',[{'targetType':'Contact','fieldName':'um','relationshipType':'bind','single':!![]}]]]);export class GraphBuilder{['localProject'];['rateLimiter'];['options'];constructor(a){const b=Math['min'](Math['max'](a?.['batchSize']??MAX_OBJECTS_PER_QUERY,0x1),MAX_OBJECTS_PER_QUERY);this['options']={'maxDepth':a?.['maxDepth']??0x3,'maxConcurrency':a?.['maxConcurrency']??0x5,'rateLimitQPS':a?.['rateLimitQPS']??0xa,'cacheTTL':a?.['cacheTTL']??0x36ee80,'enableRegistrar':a?.['enableRegistrar']??!![],'enablePotential':a?.['enablePotential']??![],'projectId':a?.['projectId']??null,'network':a?.['network']??'testnet','batchSize':b},this['rateLimiter']=new RateLimiter(this['options']['maxConcurrency'],this['options']['rateLimitQPS']),this['localProject']=LocalProject['Instance']();}async['buildRelationshipGraph'](a){const b=[],c=new Map(),d=new Set(),e=new Map(),f=new Set([a]);await this['buildInternalRefsBatched'](f,d,b,e);if(this['options']['enableRegistrar']){const j=new Set([a]);for(const l of b){j['add'](l['sourceObject']),j['add'](l['targetObject']);}const k=Array['from'](j)['map'](m=>this['buildRegistrarRefs'](m)['then'](n=>{b['push'](...n['edges']),n['reputation']&&c['set'](m,n['reputation']);}));await Promise['all'](k);}if(this['options']['enablePotential']&&this['options']['projectId']){const m=await this['buildPotentialRefs'](this['options']['projectId'],b);b['push'](...m);}const g=this['resolveConflicts'](b),h=this['buildNodes'](g,e,a),i=await this['localProject']['saveGraphEdges'](this['options']['projectId'],g);return{'graph':{'nodes':h,'edges':i,'builtAt':Date['now']()},'reputation':c};}async['buildInternalRefsBatched'](a,b,c,d){const e=this['options']['batchSize'];for(let f=0x0;f<this['options']['maxDepth'];f++){const g=[];for(const j of a){!b['has'](j)&&(b['add'](j),g['push'](j));}a['clear']();if(g['length']===0x0)break;const h=new Set();for(let k=0x0;k<g['length'];k+=e){const l=g['slice'](k,k+e),m=await this['fetchObjectsBatch'](l,d);for(const n of l){const o=m['get'](n);if(!o)continue;const p=extractAddressFields(o);for(const q of p){c['push']({'sourceObject':n,'targetObject':q['address'],'edgeSource':'internal','relationshipType':this['mapRefTypeToRelationship'](q['type']),'fieldName':q['field'],'depth':f,'verified':!![],'weight':0x1,'direction':'outbound','metadata':{'ref_type':q['type']}}),!b['has'](q['address'])&&h['add'](q['address']);}}}for(const r of h){a['add'](r);}}}async['fetchObjectsBatch'](a,b){const c=new Map(),d=[];for(const f of a){const g=b['get'](f);g?c['set'](f,g):d['push'](f);}if(d['length']===0x0)return c;const e=await this['rateLimiter']['run'](async()=>{return await query_objects({'objects':d,'network':this['options']['network']});});for(const h of e['objects']??[]){if(!h||!h['object'])continue;b['set'](h['object'],h),c['set'](h['object'],h),void this['localProject']['cacheObject'](h['object'],h['type']??null,JSON['stringify'](h),this['options']['network'])['catch'](()=>{});}return c;}['mapRefTypeToRelationship'](a){switch(a){case'bind':return'bind';case'validate':return'validate';case'consume':return'consume';case'trigger':return'trigger';case'reference':return'affiliation';default:return'bind';}}async['buildRegistrarRefs'](a){try{const b=await this['rateLimiter']['run'](async()=>{return await queryTableItem_EntityLinker({'address':a,'network':this['options']['network']});});if(!b||!b['votes']||b['votes']['length']===0x0)return{'edges':[]};const c=[],d={'likes':0x0,'dislikes':0x0,'affiliations':0x0,'voters':[]};for(const e of b['votes']){if(e['like'])d['likes']++;if(e['dislike'])d['dislikes']++;if(e['affiliation'])d['affiliations']++;d['voters']['push']({'who':e['address'],'like':e['like']??![],'dislike':e['dislike']??![],'affiliation':e['affiliation']??![],'time':e['time']});if(e['affiliation'])c['push']({'sourceObject':e['address'],'targetObject':a,'edgeSource':'registrar','relationshipType':'affiliation','fieldName':null,'depth':0x0,'verified':!![],'weight':0.9,'direction':'inbound','metadata':{'like':e['like']??![],'dislike':e['dislike']??![],'affiliation':!![],'time':e['time']}});else(e['like']||e['dislike'])&&c['push']({'sourceObject':e['address'],'targetObject':a,'edgeSource':'registrar','relationshipType':'affiliation','fieldName':null,'depth':0x0,'verified':!![],'weight':0.3,'direction':'inbound','metadata':{'like':e['like']??![],'dislike':e['dislike']??![],'affiliation':![],'disaffiliated':!![],'time':e['time']}});}return{'edges':c,'reputation':d};}catch{return{'edges':[]};}}async['buildPotentialRefs'](a,b){const c=[],d=await this['localProject']['listObjects'](a);if(d['length']===0x0)return c;const f=new Set(b['map'](i=>i['sourceObject']+'→'+i['targetObject'])),g=new Map();for(const i of b){if(i['fieldName']){const j=i['sourceObject']+'#'+i['fieldName'];!g['has'](j)&&g['set'](j,new Set()),g['get'](j)['add'](i['targetObject']);}}const h=new Map();for(const k of d){const l=shortTypeName(k['objectType']);if(!h['has'](l))h['set'](l,[]);h['get'](l)['push']({'address':k['objectAddress'],'name':k['objectName']});}for(const [m,n]of EXPECTED_RELATIONSHIPS){const o=h['get'](m);if(!o||o['length']===0x0)continue;for(const p of o){for(const q of n){const r=h['get'](q['targetType']);if(!r||r['length']===0x0)continue;const s=p['address']+'#'+q['fieldName'],t=g['get'](s),u=t!==undefined&&t['size']>0x0;if(u)continue;const v=r['find'](w=>w['address']!==p['address']&&!f['has'](p['address']+'→'+w['address'])&&!t?.['has'](w['address']));if(!v)continue;c['push']({'sourceObject':p['address'],'targetObject':v['address'],'edgeSource':'potential','relationshipType':q['relationshipType'],'fieldName':q['fieldName'],'depth':0x0,'verified':![],'weight':0.6,'direction':'outbound','metadata':{'reason':'expected_relationship_missing','expected_target_type':q['targetType'],'source_object_name':p['name'],'representative':!![],'alternative_target_count':r['length']-0x1}});}}}return c;}['resolveConflicts'](a){const b=new Map();for(const d of a){if(!d['sourceObject']||!d['targetObject'])continue;const e=d['sourceObject']+'→'+d['targetObject']+':'+d['relationshipType'],f=b['get'](e)??[];f['push'](d),b['set'](e,f);}const c=[];for(const g of b['values']()){if(g['length']===0x1){c['push'](g[0x0]);continue;}const h=l=>{let m=0x0;if(l['edgeSource']==='internal')m+=0x64;if(l['edgeSource']==='registrar')m+=0x32;if(l['verified'])m+=0xa;return m+=(l['weight']??0.5)*0xa,m;};g['sort']((l,m)=>h(m)-h(l));const j=g[0x0],k={...j['metadata']??{}};for(let l=0x1;l<g['length'];l++){k['alt_'+g[l]['edgeSource']]=g[l]['metadata']??{};}c['push']({...j,'metadata':k});}return c;}['buildNodes'](a,b,c){const d=new Map(),e=f=>{if(!d['has'](f)){const g=b['get'](f),h=g?.['query_name'],i=h&&h!==f?h:null,j=f['startsWith']('draft:');d['set'](f,{'address':f,'objectType':g?.['type']??null,'objectName':i,'role':null,'isCore':f===c,'isTemplate':j});}return d['get'](f);};for(const f of a){const g=e(f['sourceObject']),h=e(f['targetObject']);f['edgeSource']==='internal'&&f['relationshipType']==='bind'&&(g['isCore']&&(h['role']='dependency')),f['edgeSource']==='potential'&&(h['role']='reference');}return Array['from'](d['values']());}}export async function buildGraph(a,b){const c=new GraphBuilder(b);return c['buildRelationshipGraph'](a);}
1
+ import{query_objects,queryTableItem_EntityLinker,LocalProject}from'@wowok/wowok';import{fetchObjectLinkerCore,fetchObjectLinkerTx}from'../knowledge/index.js';const MAX_OBJECTS_PER_QUERY=0x32;function shortTypeName(a){if(!a)return'unknown';const b=a['replace'](/<.*>/,'')['trim'](),c=b['split']('::');return c[c['length']-0x1]||'unknown';}export function extractAddressFields(a){const b=[],c=a['type'];let d=c;if(c&&c['includes']('::')){const k=c['split']('::');d=k[k['length']-0x1];}const e=l=>typeof l==='string'&&l['startsWith']('0x')&&l['length']>=0xa,f=(l,m,n)=>{e(l)&&l!=='0x0'&&l!==a['object']&&b['push']({'address':l,'field':m,'type':n});},h=(l,m,n)=>{if(Array['isArray'](l))for(const o of l){f(o,m,n);}},i=(l,m,n)=>{l!==null&&l!==undefined&&f(l,m,n);},j=a;switch(d){case'Service':{i(j['machine'],'machine','bind'),i(j['buy_guard'],'buy_guard','validate'),i(j['um'],'um','bind'),f(j['permission'],'permission','validate'),h(j['repositories'],'repositories','consume'),h(j['arbitrations'],'arbitrations','trigger'),h(j['rewards'],'rewards','trigger');if(j['order_allocators']?.['allocators']){for(const m of j['order_allocators']['allocators']){f(m['guard'],'allocator_guard','validate');}const l=j['order_allocators']['allocators'][0x0]?.['guard'];f(l,'order_allocators','create');}break;}case'Machine':{f(j['permission'],'permission','validate'),h(j['consensus_repositories'],'consensus_repositories','consume');break;}case'Order':{f(j['service'],'service','consume'),i(j['machine'],'machine','consume'),i(j['progress'],'progress','trigger'),h(j['dispute'],'dispute','trigger'),i(j['allocation'],'allocation','bind');break;}case'Progress':{f(j['machine'],'machine','bind'),h(j['context_repositories'],'context_repositories','consume');break;}case'Treasury':{f(j['permission'],'permission','validate');if(Array['isArray'](j['external_deposit_guard'])){for(const n of j['external_deposit_guard'])f(n?.['guard'],'external_deposit_guard','validate');}if(Array['isArray'](j['external_withdraw_guard'])){for(const o of j['external_withdraw_guard'])f(o?.['guard'],'external_withdraw_guard','validate');}break;}case'Allocation':{if(Array['isArray'](j['allocators'])){for(const p of j['allocators'])f(p?.['guard'],'allocator_guard','validate');}i(j['payment_info']?.['for_object'],'for_object','bind'),i(j['payment_info']?.['for_guard'],'for_guard','validate'),h(j['payment'],'payment','trigger');break;}case'Arbitration':{f(j['permission'],'permission','validate');if(Array['isArray'](j['voting_guard'])){for(const q of j['voting_guard'])f(q?.['guard'],'voting_guard','validate');}i(j['usage_guard'],'usage_guard','validate');break;}case'Reward':{f(j['permission'],'permission','validate');if(Array['isArray'](j['guards'])){for(const s of j['guards'])f(s?.['guard'],'guard','validate');}break;}case'Repository':{f(j['permission'],'permission','validate'),h(j['rewards'],'rewards','trigger');if(Array['isArray'](j['policies']))for(const t of j['policies']){if(Array['isArray'](t?.['write_guard'])){for(const u of t['write_guard'])f(u?.['guard'],'write_guard','validate');}i(t?.['quote_guard'],'quote_guard','validate');}break;}case'Demand':{f(j['permission'],'permission','validate');if(Array['isArray'](j['guards'])){for(const v of j['guards'])f(v?.['guard'],'guard','validate');}h(j['rewards'],'rewards','trigger');break;}case'Contact':{f(j['permission'],'permission','validate');break;}case'Permission':{break;}case'Payment':{i(j['info']?.['for_object'],'for_object','bind'),i(j['info']?.['for_guard'],'for_guard','validate');if(Array['isArray'](j['record']))for(const w of j['record']){const x=w?.['recipient'];x&&typeof x==='object'&&typeof x['Entity']==='string'&&f(x['Entity'],'recipient_entity','consume');}break;}case'Guard':{break;}default:break;}return b;}class RateLimiter{['maxConcurrency'];['qps'];['queue']=[];['activeCount']=0x0;['lastRequestTime']=0x0;constructor(a,b){this['maxConcurrency']=a,this['qps']=b;}async['acquire'](){if(this['activeCount']<this['maxConcurrency']){this['activeCount']++,await this['enforceRate']();return;}return new Promise(a=>{this['queue']['push'](()=>{this['activeCount']++,this['enforceRate']()['then'](a);});});}['release'](){this['activeCount']--;if(this['queue']['length']>0x0){const a=this['queue']['shift']();a();}}async['enforceRate'](){const a=Date['now'](),b=0x3e8/this['qps'],c=a-this['lastRequestTime'];c<b&&await sleep(b-c),this['lastRequestTime']=Date['now']();}async['run'](a){await this['acquire']();try{return await a();}finally{this['release']();}}}function sleep(a){return new Promise(b=>setTimeout(b,a));}const EXPECTED_RELATIONSHIPS=new Map([['Service',[{'targetType':'Machine','fieldName':'machine','relationshipType':'bind','single':!![]},{'targetType':'Guard','fieldName':'buy_guard','relationshipType':'validate','single':!![]},{'targetType':'Permission','fieldName':'permission','relationshipType':'validate','single':!![]},{'targetType':'Guard','fieldName':'allocator_guard','relationshipType':'validate'},{'targetType':'Contact','fieldName':'um','relationshipType':'bind','single':!![]},{'targetType':'Arbitration','fieldName':'arbitrations','relationshipType':'trigger'},{'targetType':'Reward','fieldName':'rewards','relationshipType':'trigger'},{'targetType':'Repository','fieldName':'repositories','relationshipType':'consume'}]],['Machine',[{'targetType':'Permission','fieldName':'permission','relationshipType':'validate','single':!![]},{'targetType':'Repository','fieldName':'consensus_repositories','relationshipType':'consume'},{'targetType':'Contact','fieldName':'um','relationshipType':'bind','single':!![]}]],['Order',[{'targetType':'Service','fieldName':'service','relationshipType':'consume','single':!![]},{'targetType':'Machine','fieldName':'machine','relationshipType':'consume','single':!![]},{'targetType':'Progress','fieldName':'progress','relationshipType':'trigger','single':!![]},{'targetType':'Arb','fieldName':'dispute','relationshipType':'trigger'},{'targetType':'Allocation','fieldName':'allocation','relationshipType':'bind','single':!![]}]],['Progress',[{'targetType':'Machine','fieldName':'machine','relationshipType':'bind','single':!![]},{'targetType':'Repository','fieldName':'context_repositories','relationshipType':'consume'}]],['Allocation',[{'targetType':'Guard','fieldName':'allocator_guard','relationshipType':'validate'},{'targetType':'Guard','fieldName':'for_guard','relationshipType':'validate','single':!![]},{'targetType':'Payment','fieldName':'payment','relationshipType':'trigger'}]],['Reward',[{'targetType':'Guard','fieldName':'guard','relationshipType':'validate'},{'targetType':'Permission','fieldName':'permission','relationshipType':'validate','single':!![]},{'targetType':'Contact','fieldName':'um','relationshipType':'bind','single':!![]}]],['Repository',[{'targetType':'Guard','fieldName':'write_guard','relationshipType':'validate'},{'targetType':'Guard','fieldName':'quote_guard','relationshipType':'validate','single':!![]},{'targetType':'Permission','fieldName':'permission','relationshipType':'validate','single':!![]},{'targetType':'Reward','fieldName':'rewards','relationshipType':'trigger'},{'targetType':'Contact','fieldName':'um','relationshipType':'bind','single':!![]}]],['Demand',[{'targetType':'Guard','fieldName':'guard','relationshipType':'validate'},{'targetType':'Reward','fieldName':'rewards','relationshipType':'trigger'},{'targetType':'Permission','fieldName':'permission','relationshipType':'validate','single':!![]},{'targetType':'Contact','fieldName':'um','relationshipType':'bind','single':!![]}]],['Treasury',[{'targetType':'Permission','fieldName':'permission','relationshipType':'validate','single':!![]},{'targetType':'Guard','fieldName':'external_deposit_guard','relationshipType':'validate'},{'targetType':'Guard','fieldName':'external_withdraw_guard','relationshipType':'validate'},{'targetType':'Contact','fieldName':'um','relationshipType':'bind','single':!![]}]],['Arbitration',[{'targetType':'Permission','fieldName':'permission','relationshipType':'validate','single':!![]},{'targetType':'Guard','fieldName':'voting_guard','relationshipType':'validate'},{'targetType':'Guard','fieldName':'usage_guard','relationshipType':'validate','single':!![]},{'targetType':'Contact','fieldName':'um','relationshipType':'bind','single':!![]}]],['Payment',[{'targetType':'Guard','fieldName':'for_guard','relationshipType':'validate','single':!![]}]],['Contact',[{'targetType':'Permission','fieldName':'permission','relationshipType':'validate','single':!![]}]],['Permission',[{'targetType':'Contact','fieldName':'um','relationshipType':'bind','single':!![]}]]]);export class GraphBuilder{['localProject'];['rateLimiter'];['options'];constructor(a){const b=Math['min'](Math['max'](a?.['batchSize']??MAX_OBJECTS_PER_QUERY,0x1),MAX_OBJECTS_PER_QUERY);this['options']={'maxDepth':a?.['maxDepth']??0x3,'maxConcurrency':a?.['maxConcurrency']??0x5,'rateLimitQPS':a?.['rateLimitQPS']??0xa,'cacheTTL':a?.['cacheTTL']??0x36ee80,'enableRegistrar':a?.['enableRegistrar']??!![],'enablePotential':a?.['enablePotential']??![],'projectId':a?.['projectId']??null,'network':a?.['network']??'testnet','batchSize':b},this['rateLimiter']=new RateLimiter(this['options']['maxConcurrency'],this['options']['rateLimitQPS']),this['localProject']=LocalProject['Instance']();}async['buildRelationshipGraph'](a){const b=[],c=new Map(),d=new Set(),e=new Map(),f=new Set([a]);await this['buildInternalRefsBatched'](f,d,b,e);if(this['options']['enableRegistrar']){const j=new Set([a]);for(const l of b){j['add'](l['sourceObject']),j['add'](l['targetObject']);}const k=Array['from'](j)['map'](m=>this['buildRegistrarRefs'](m)['then'](n=>{b['push'](...n['edges']),n['reputation']&&c['set'](m,n['reputation']);}));await Promise['all'](k);}if(this['options']['enablePotential']&&this['options']['projectId']){const m=await this['buildPotentialRefs'](this['options']['projectId'],b);b['push'](...m);}const g=this['resolveConflicts'](b),h=this['buildNodes'](g,e,a),i=await this['localProject']['saveGraphEdges'](this['options']['projectId'],g);return{'graph':{'nodes':h,'edges':i,'builtAt':Date['now']()},'reputation':c};}async['buildInternalRefsBatched'](a,b,c,d){const e=this['options']['batchSize'];for(let f=0x0;f<this['options']['maxDepth'];f++){const g=[];for(const j of a){!b['has'](j)&&(b['add'](j),g['push'](j));}a['clear']();if(g['length']===0x0)break;const h=new Set();for(let k=0x0;k<g['length'];k+=e){const l=g['slice'](k,k+e),m=await this['fetchObjectsBatch'](l,d);for(const n of l){const o=m['get'](n);if(!o)continue;const p=extractAddressFields(o);for(const q of p){c['push']({'sourceObject':n,'targetObject':q['address'],'edgeSource':'internal','relationshipType':this['mapRefTypeToRelationship'](q['type']),'fieldName':q['field'],'depth':f,'verified':!![],'weight':0x1,'direction':'outbound','metadata':{'ref_type':q['type']}}),!b['has'](q['address'])&&h['add'](q['address']);}}}for(const r of h){a['add'](r);}}}async['fetchObjectsBatch'](a,b){const c=new Map(),d=[];for(const f of a){const g=b['get'](f);g?c['set'](f,g):d['push'](f);}if(d['length']===0x0)return c;const e=await this['rateLimiter']['run'](async()=>{return await query_objects({'objects':d,'network':this['options']['network']});});for(const h of e['objects']??[]){if(!h||!h['object'])continue;b['set'](h['object'],h),c['set'](h['object'],h),void this['localProject']['cacheObject'](h['object'],h['type']??null,JSON['stringify'](h),this['options']['network'])['catch'](()=>{});}return c;}['mapRefTypeToRelationship'](a){switch(a){case'bind':return'bind';case'validate':return'validate';case'consume':return'consume';case'trigger':return'trigger';case'reference':return'affiliation';default:return'bind';}}async['buildRegistrarRefs'](a){try{const [b,c,d]=await Promise['all']([this['rateLimiter']['run'](async()=>{return await queryTableItem_EntityLinker({'address':a,'network':this['options']['network']});}),fetchObjectLinkerCore(a,this['options']['network']),fetchObjectLinkerTx(a,this['options']['network'])]),e=[],f={'likes':0x0,'dislikes':0x0,'favorites':0x0,'voters':[]};for(const g of b?.['votes']??[]){if(g['like'])f['likes']++;if(g['dislike'])f['dislikes']++;if(g['favor'])f['favorites']++;f['voters']['push']({'who':g['who'],'like':g['like']??![],'dislike':g['dislike']??![],'favor':g['favor']??![],'time':g['time']});}for(const h of c?.['items']??[]){e['push']({'sourceObject':h['who'],'targetObject':a,'edgeSource':'registrar','relationshipType':'affiliation','fieldName':null,'depth':0x0,'verified':!![],'weight':0.9,'direction':'inbound','metadata':{'kind':'core','time':h['time']}});}for(const i of d?.['items']??[]){e['push']({'sourceObject':i['who'],'targetObject':a,'edgeSource':'registrar','relationshipType':'affiliation','fieldName':null,'depth':0x0,'verified':!![],'weight':0.5,'direction':'inbound','metadata':{'kind':'tx','time':i['time']}});}if(e['length']===0x0&&f['voters']['length']===0x0)return{'edges':[]};return{'edges':e,'reputation':f};}catch{return{'edges':[]};}}async['buildPotentialRefs'](a,b){const c=[],d=await this['localProject']['listObjects'](a);if(d['length']===0x0)return c;const f=new Set(b['map'](i=>i['sourceObject']+'→'+i['targetObject'])),g=new Map();for(const i of b){if(i['fieldName']){const j=i['sourceObject']+'#'+i['fieldName'];!g['has'](j)&&g['set'](j,new Set()),g['get'](j)['add'](i['targetObject']);}}const h=new Map();for(const k of d){const l=shortTypeName(k['objectType']);if(!h['has'](l))h['set'](l,[]);h['get'](l)['push']({'address':k['objectAddress'],'name':k['objectName']});}for(const [m,n]of EXPECTED_RELATIONSHIPS){const o=h['get'](m);if(!o||o['length']===0x0)continue;for(const p of o){for(const q of n){const r=h['get'](q['targetType']);if(!r||r['length']===0x0)continue;const s=p['address']+'#'+q['fieldName'],t=g['get'](s),u=t!==undefined&&t['size']>0x0;if(u)continue;const v=r['find'](w=>w['address']!==p['address']&&!f['has'](p['address']+'→'+w['address'])&&!t?.['has'](w['address']));if(!v)continue;c['push']({'sourceObject':p['address'],'targetObject':v['address'],'edgeSource':'potential','relationshipType':q['relationshipType'],'fieldName':q['fieldName'],'depth':0x0,'verified':![],'weight':0.6,'direction':'outbound','metadata':{'reason':'expected_relationship_missing','expected_target_type':q['targetType'],'source_object_name':p['name'],'representative':!![],'alternative_target_count':r['length']-0x1}});}}}return c;}['resolveConflicts'](a){const b=new Map();for(const d of a){if(!d['sourceObject']||!d['targetObject'])continue;const e=d['sourceObject']+'→'+d['targetObject']+':'+d['relationshipType'],f=b['get'](e)??[];f['push'](d),b['set'](e,f);}const c=[];for(const g of b['values']()){if(g['length']===0x1){c['push'](g[0x0]);continue;}const h=l=>{let m=0x0;if(l['edgeSource']==='internal')m+=0x64;if(l['edgeSource']==='registrar')m+=0x32;if(l['verified'])m+=0xa;return m+=(l['weight']??0.5)*0xa,m;};g['sort']((l,m)=>h(m)-h(l));const j=g[0x0],k={...j['metadata']??{}};for(let l=0x1;l<g['length'];l++){k['alt_'+g[l]['edgeSource']]=g[l]['metadata']??{};}c['push']({...j,'metadata':k});}return c;}['buildNodes'](a,b,c){const d=new Map(),e=f=>{if(!d['has'](f)){const g=b['get'](f),h=g?.['query_name'],i=h&&h!==f?h:null,j=f['startsWith']('draft:');d['set'](f,{'address':f,'objectType':g?.['type']??null,'objectName':i,'role':null,'isCore':f===c,'isTemplate':j});}return d['get'](f);};for(const f of a){const g=e(f['sourceObject']),h=e(f['targetObject']);f['edgeSource']==='internal'&&f['relationshipType']==='bind'&&(g['isCore']&&(h['role']='dependency')),f['edgeSource']==='potential'&&(h['role']='reference');}return Array['from'](d['values']());}}export async function buildGraph(a,b){const c=new GraphBuilder(b);return c['buildRelationshipGraph'](a);}
@@ -31,13 +31,13 @@ export interface SemanticReputationContext {
31
31
  address: string;
32
32
  likes: number;
33
33
  dislikes: number;
34
- affiliations: number;
34
+ favorites: number;
35
35
  sentimentScore: number;
36
36
  notableVoters: Array<{
37
37
  who: string;
38
38
  like: boolean;
39
39
  dislike: boolean;
40
- affiliation: boolean;
40
+ favor: boolean;
41
41
  }>;
42
42
  }
43
43
  export interface SemanticProjectContext {