@wowok/agent-mcp 3.0.5 → 3.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -20
- package/dist/customer/account-events.js +1 -1
- package/dist/graph/onchain/dataplane.d.ts +2 -2
- package/dist/graph/onchain/edge-schema.js +1 -1
- package/dist/graph/onchain/expand.js +1 -1
- package/dist/graph/onchain/onchain.spec.js +1 -1
- package/dist/graph/onchain/sdk-batch.d.ts +7 -1
- package/dist/graph/onchain/sdk-batch.js +1 -1
- package/dist/graph/onchain/sdk-dataplane.d.ts +6 -3
- package/dist/graph/onchain/sdk-dataplane.js +1 -1
- package/dist/graph/onchain/types.d.ts +2 -2
- package/dist/knowledge/account-marks.js +1 -1
- package/dist/knowledge/allocation-risk.js +1 -1
- package/dist/knowledge/allocation-templates.js +1 -1
- package/dist/knowledge/goal-completion.d.ts +12 -0
- package/dist/knowledge/goal-completion.js +1 -1
- package/dist/knowledge/guard-risk.js +1 -1
- package/dist/knowledge/index.d.ts +4 -0
- package/dist/knowledge/index.js +1 -1
- package/dist/knowledge/migration-preflight.js +1 -1
- package/dist/knowledge/payment-tracker.d.ts +63 -0
- package/dist/knowledge/payment-tracker.js +1 -0
- package/dist/knowledge/recipient-constraint.d.ts +160 -0
- package/dist/knowledge/recipient-constraint.js +1 -0
- package/dist/knowledge/safety-rules.d.ts +1 -1
- package/dist/knowledge/safety-rules.js +1 -1
- package/dist/knowledge/template-registry.js +1 -1
- package/dist/knowledge/tools-reference.js +1 -1
- package/dist/knowledge/workflow-guidance.js +1 -1
- package/dist/knowledge/workspace-lists.d.ts +4 -0
- package/dist/knowledge/workspace-lists.js +1 -1
- package/dist/monitor/MonitorLoop.js +1 -1
- package/dist/participation/arbitrator-interest.d.ts +2 -0
- package/dist/participation/arbitrator-interest.js +1 -1
- package/dist/participation/collaborator-interest.d.ts +2 -0
- package/dist/participation/collaborator-interest.js +1 -1
- package/dist/participation/customer-interest.d.ts +2 -0
- package/dist/participation/customer-interest.js +1 -1
- package/dist/participation/merchant-interest.d.ts +2 -0
- package/dist/participation/merchant-interest.js +1 -1
- package/dist/participation/supplier-interest.d.ts +2 -0
- package/dist/participation/supplier-interest.js +1 -1
- package/dist/playbooks/service-build/business-puzzle.js +1 -1
- package/dist/playbooks/service-build/context-assembly.js +1 -1
- package/dist/playbooks/service-build/merchant-guide.d.ts +7 -0
- package/dist/playbooks/service-build/merchant-guide.js +1 -1
- package/dist/playbooks/service-build/participation-radar.js +1 -1
- package/dist/playbooks/service-build/pipeline-actions.d.ts +2 -2
- package/dist/playbooks/service-build/pipeline-actions.js +1 -1
- package/dist/playbooks/service-build/relationship-profile.js +1 -1
- package/dist/playbooks/service-build/risk-aggregator.js +1 -1
- package/dist/playbooks/service-build/topology-query.js +1 -1
- package/dist/relationship/derivation.js +1 -1
- package/dist/safety/confirm-gate.js +1 -1
- package/dist/schema/call/allocation.js +1 -1
- package/dist/schema/call/base.js +1 -1
- package/dist/schema/call/semantic.js +1 -1
- package/dist/schema/call/service.js +1 -1
- package/dist/schema/common/index.js +1 -1
- package/dist/schema/evaluation/index.d.ts +4 -4
- package/dist/schema/evaluation/index.js +1 -1
- package/dist/schema/goal/index.d.ts +21 -21
- package/dist/schema/goal/planning.d.ts +6 -6
- package/dist/schema/industry-pack/index.d.ts +6 -6
- package/dist/schema/industry-pack/modes.d.ts +6 -6
- package/dist/schema/intent-radar/index.d.ts +16 -16
- package/dist/schema/local/index.js +1 -1
- package/dist/schema/messenger/index.d.ts +110 -8
- package/dist/schema/messenger/index.js +1 -1
- package/dist/schema/operations.d.ts +35 -27
- package/dist/schema/operations.js +1 -1
- package/dist/schema/persona/index.d.ts +155 -155
- package/dist/schema/query/bi.d.ts +26 -26
- package/dist/schema/query/bi.js +1 -1
- package/dist/schema/query/index.d.ts +5 -2
- package/dist/schema/query/index.js +1 -1
- package/dist/schema/schema-query/index.d.ts +1 -1
- package/dist/schema/schema-version.js +1 -1
- package/dist/schema/strategy-review/index.d.ts +1 -1
- package/dist/schema-query-impl/index.js +1 -1
- package/dist/schemas/bridge_operation.schema.json +10 -10
- package/dist/schemas/evaluation_operation.schema.json +7 -7
- package/dist/schemas/guard2file.schema.json +2 -2
- package/dist/schemas/index.json +1 -1
- package/dist/schemas/machineNode2file.schema.json +2 -2
- package/dist/schemas/messenger_operation.output.json +266 -38
- package/dist/schemas/messenger_operation.schema.json +27 -3
- package/dist/schemas/onchain_events.schema.json +1 -1
- package/dist/schemas/onchain_operations.schema.json +51 -51
- package/dist/schemas/onchain_operations_allocation.schema.json +5 -5
- package/dist/schemas/onchain_operations_arbitration.schema.json +2 -2
- package/dist/schemas/onchain_operations_contact.schema.json +2 -2
- package/dist/schemas/onchain_operations_demand.schema.json +2 -2
- package/dist/schemas/onchain_operations_gen_passport.schema.json +2 -2
- package/dist/schemas/onchain_operations_gen_proof.schema.json +2 -2
- package/dist/schemas/onchain_operations_guard.schema.json +2 -2
- package/dist/schemas/onchain_operations_machine.schema.json +8 -8
- package/dist/schemas/onchain_operations_order.schema.json +2 -2
- package/dist/schemas/onchain_operations_payment.schema.json +3 -3
- package/dist/schemas/onchain_operations_permission.schema.json +2 -2
- package/dist/schemas/onchain_operations_personal.schema.json +2 -2
- package/dist/schemas/onchain_operations_progress.schema.json +2 -2
- package/dist/schemas/onchain_operations_proof.schema.json +2 -2
- package/dist/schemas/onchain_operations_repository.schema.json +2 -2
- package/dist/schemas/onchain_operations_reward.schema.json +2 -2
- package/dist/schemas/onchain_operations_service.schema.json +5 -5
- package/dist/schemas/onchain_operations_treasury.schema.json +4 -4
- package/dist/schemas/onchain_table_data.output.json +14 -14
- package/dist/schemas/query_toolkit.output.json +35 -8
- package/dist/schemas/query_toolkit.schema.json +39 -11
- package/dist/strategy/collectors.js +1 -1
- package/dist/tools/handlers/config.js +1 -1
- package/dist/tools/handlers/evaluation.js +1 -1
- package/dist/tools/handlers/messenger.js +1 -1
- package/dist/tools/handlers/onchain.js +1 -1
- package/dist/tools/handlers/permission.js +1 -1
- package/dist/tools/handlers/query.js +1 -1
- package/dist/tools/handlers/strategy-review.js +1 -1
- package/dist/tools/handlers/workflow.js +1 -1
- package/dist/tools/registry/onchain.js +1 -1
- package/dist/tools/registry/query.js +1 -1
- package/dist/tools/rules-hook.d.ts +2 -0
- package/dist/tools/rules-hook.js +1 -1
- package/dist/tools/shared.js +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
import{objectTypeFromAddress,query_affiliations,query_local_mark_list,query_table}from'@wowok/wowok';import{ObjectType}from'@wowok/wowok';import{batchFetchEntityLinker,batchFetchEntityRegistrar,batchQueryObjectsByIds,fetchEntityPermission,fetchEntityContact,fetchObjectLinkerCore,fetchObjectLinkerTx}from'../graph/onchain/sdk-batch.js';import{listLocalAccounts,resolveLocalNamesFor}from'./workflow-guidance.js';import{fetchMachineNodes,buildMachineGraph}from'../playbooks/service-build/machine-nodes.js';const AGG_TTL_MS=0x1d4c0,AGG_CACHE_MAX=0x8,aggCache=new Map(),aggInflight=new Map(),CLASSIFIED_TYPES=new Set([ObjectType['Permission'],ObjectType['Service'],ObjectType['Machine'],ObjectType['Treasury'],ObjectType['Repository'],ObjectType['Reward'],ObjectType['Demand'],ObjectType['Arbitration'],ObjectType['Arb'],ObjectType['Contact'],ObjectType['Order'],ObjectType['Progress']]);function sortItems(a){return a['sort']((c,d)=>(d['time']??0x0)-(c['time']??0x0)||c['object']['localeCompare'](d['object']));}export async function buildWorkspaceLists(a){const b=a['network'],c=a['account']?.['trim']()['toLowerCase']()||undefined,d=a['no_cache']===!![],e=(b??'')+'|'+(c??'');if(!d){const g=aggCache['get'](e);if(g&&Date['now']()-g['at']<AGG_TTL_MS)return{...g['value'],'cached':!![]};const h=aggInflight['get'](e);if(h)return h;}const f=((async()=>{const i=c?[{'address':c,'name':undefined}]:await listLocalAccounts(),j={'action':'workspace_lists','network':b,'updated_at_ms':Date['now'](),'cached':![],'treasuries':[],'repositories':[],'contacts':[],'machines':[],'rewards':[],'others':[],'counts':{'treasuries':0x0,'repositories':0x0,'contacts':0x0,'machines':0x0,'rewards':0x0,'others':0x0},'note':i['length']===0x0?'No\x20local\x20accounts\x20found\x20—\x20create\x20or\x20import\x20an\x20account\x20first.':undefined};if(i['length']===0x0)return aggCache['set'](e,{'at':Date['now'](),'value':j}),j;const [k,l,n]=await Promise['all']([Promise['all'](i['map'](S=>fetchEntityPermission(S['address'],b,d))),Promise['all'](i['map'](S=>fetchEntityContact(S['address'],b,d))),Promise['all'](i['map'](S=>fetchObjectLinkerTx(S['address'],b,d)))]),p=[],q=new Set();for(const S of k){for(const T of S?.['items']??[]){!q['has'](T['permission'])&&(q['add'](T['permission']),p['push'](T['permission']));}}const s=await Promise['all'](p['map'](U=>fetchObjectLinkerCore(U,b,d))),u={'treasuries':new Map(),'repositories':new Map(),'contacts':new Map(),'machines':new Map(),'rewards':new Map()},v=(U,V,W)=>{const X=V['toLowerCase'](),Y=U['get'](X);if(Y===undefined||(W??0x0)>Y)U['set'](X,W??0x0);};s['forEach'](U=>{for(const V of U?.['items']??[]){const W=objectTypeFromAddress(V['who']);if(W===ObjectType['Treasury'])v(u['treasuries'],V['who'],V['time']);else{if(W===ObjectType['Repository'])v(u['repositories'],V['who'],V['time']);else{if(W===ObjectType['Machine'])v(u['machines'],V['who'],V['time']);else{if(W===ObjectType['Reward'])v(u['rewards'],V['who'],V['time']);else{if(W===ObjectType['Contact'])v(u['contacts'],V['who'],V['time']);}}}}}});for(const U of l){for(const V of U?.['items']??[])v(u['contacts'],V['contact'],V['time']);}const w=new Map();for(const W of n){for(const X of W?.['items']??[]){const Y=objectTypeFromAddress(X['who']);if(Y&&CLASSIFIED_TYPES['has'](Y))continue;v(w,X['who'],X['time']);}}const x=[...u['treasuries']['keys'](),...u['repositories']['keys'](),...u['contacts']['keys'](),...u['machines']['keys'](),...u['rewards']['keys'](),...w['keys']()],y=Z=>Z['startsWith']('0x00'),z=[],A=[];for(const Z of x){if(y(Z))A['push'](Z);else z['push'](Z);}const B=await resolveLocalNamesFor(x);if(a['light']){const a0=a2=>sortItems([...a2['entries']()]['map'](([a3,a4])=>({'object':a3,'object_type':objectTypeFromAddress(a3)??null,'name':B['byAddress']['get'](a3),'time':a4||undefined}))),a1={'treasuries':u['treasuries']['size'],'repositories':u['repositories']['size'],'contacts':u['contacts']['size'],'machines':u['machines']['size'],'rewards':u['rewards']['size'],'others':w['size']};return{'action':'workspace_lists','network':b,'updated_at_ms':Date['now'](),'cached':![],'treasuries':a0(u['treasuries']),'repositories':a0(u['repositories']),'contacts':a0(u['contacts']),'machines':a0(u['machines']),'rewards':a0(u['rewards']),'others':a0(w),'counts':a1,'note':i['length']===0x0?'No\x20local\x20accounts\x20found\x20—\x20create\x20or\x20import\x20an\x20account\x20first.':undefined};}const C=new Map(),D=new Map(),E=new Map(),F=new Map(),G=new Map(),H=new Map(),I=new Map();let J=![];try{const [a2,a3,a4,a5]=await Promise['all']([z['length']>0x0?batchQueryObjectsByIds(z,b,d)['then'](ab=>({'objects':ab})):Promise['resolve']({'objects':[]}),batchFetchEntityRegistrar(A,b,d),query_local_mark_list(undefined),listLocalAccounts()]),a6=new Set((a5??[])['map'](ab=>String(ab?.['address']??'')['toLowerCase']())),a7=new Set((a2?.['objects']??[])['map'](ab=>String(ab?.['object']??ab?.['address']??'')['toLowerCase']())['filter'](Boolean));for(const [ab,ac]of a3){a7['add'](ab);const ad=ac?.['description']??ac?.['info']?.['description'];if(typeof ad==='string'&&ad['trim']())C['set'](ab,ad['trim']());}if(a7['size']>0x0){const ae=af=>{for(const ag of[...af['keys']()])if(!a7['has'](ag))af['delete'](ag);};ae(u['treasuries']),ae(u['repositories']),ae(u['contacts']),ae(u['machines']),ae(u['rewards']),ae(w);}const a8=new Set([...u['treasuries']['keys'](),...u['repositories']['keys'](),...u['contacts']['keys'](),...u['machines']['keys'](),...u['rewards']['keys'](),...w['keys']()]);try{const af=await batchFetchEntityLinker([...a8],b,d);J=!![];for(const [ag,ah]of af){const ai=Array['isArray'](ah?.['votes'])?ah['votes']:[];I['set'](ag,{'like':ai['filter'](aj=>aj&&aj['like'])['length'],'dislike':ai['filter'](aj=>aj&&aj['dislike'])['length'],'favor':ai['filter'](aj=>aj&&aj['favor'])['length'],...ai['length']>0x0?{'votes':ai['map'](aj=>({'who':aj?.['who']??null,'like':!!aj?.['like'],'dislike':!!aj?.['dislike'],'favor':!!aj?.['favor']}))}:{}});}}catch{}for(const aj of a2?.['objects']??[]){const ak=String(aj?.['object']??aj?.['address']??'')['toLowerCase'](),al=aj?.['description']??aj?.['data']?.['description'];ak&&typeof al==='string'&&al['trim']()&&C['set'](ak,al['trim']());if(ak&&u['contacts']['has'](ak)){const am=Array['isArray'](aj?.['ims'])?aj['ims']:[],an=typeof aj?.['location']==='string'?aj['location']['trim']():'';E['set'](ak,{...an?{'location':an}:{},'members_total':am['length'],'members_mine':am['filter'](ao=>a6['has'](String(ao?.['at']??'')['toLowerCase']()))['length']});}if(ak&&u['rewards']['has'](ak)){const ao=/<([0-9a-zA-Z_:]+)>\s*$/['exec'](String(aj?.['type_raw']??'')),ap=Array['isArray'](aj?.['guards'])?aj['guards']:[],aq=Number(aj?.['record_count']);H['set'](ak,{...ao?{'token':ao[0x1]['split']('::')['pop']()}:{},'guards_total':ap['length'],...Number['isFinite'](aq)?{'claimers':aq}:{},...aj?.['balance']!=null?{'balance_total':String(aj['balance'])}:{},...aj?.['type_raw']!=null?{'type_raw':String(aj['type_raw'])}:{}});}if(ak&&u['treasuries']['has'](ak)){const ar=/<([0-9a-zA-Z_:]+)>\s*$/['exec'](String(aj?.['type_raw']??'')),as=at=>at===null||at===undefined||at===''?undefined:String(at);H['set'](ak,{...ar?{'token':ar[0x1]['split']('::')['pop']()}:{},...aj?.['balance']!=null?{'balance_total':String(aj['balance'])}:{},...aj?.['type_raw']!=null?{'type_raw':String(aj['type_raw'])}:{},...aj?.['inflow']!=null?{'inflow':as(aj['inflow'])}:{},...aj?.['outflow']!=null?{'outflow':as(aj['outflow'])}:{}});}if(ak&&u['repositories']['has'](ak)){const at=Number(aj?.['data_count']),au=Array['isArray'](aj?.['policies'])?aj['policies']:[],av=Array['isArray'](aj?.['rewards'])?aj['rewards']:[];F['set'](ak,{...Number['isFinite'](at)?{'records_total':at}:{},'policies_total':au['length'],'rewards_total':av['length']});}ak&&u['machines']['has'](ak)&&(aj?.['bPublished']!=null||aj?.['bPaused']!=null||aj?.['node_count']!=null)&&G['set'](ak,{'status':aj['bPublished']===!![]?aj['bPaused']===!![]?'PAUSED':'LIVE':'UNPUBLISHED',...Number['isFinite'](Number(aj?.['node_count']))?{'nodes':Number(aj['node_count'])}:{}});}for(const aw of a4??[]){const ax=String(aw?.['address']??'')['toLowerCase']();ax&&Array['isArray'](aw?.['tags'])&&aw['tags']['length']>0x0&&D['set'](ax,aw['tags']['map'](String));}await Promise['all']([...E['keys'](),...F['keys'](),...[...H['keys']()]['filter'](ay=>u['treasuries']['has'](ay)||u['rewards']['has'](ay))]['map'](async ay=>{try{const az=await query_affiliations({'address':ay,'no_cache':d,'network':b}),aA=new Set();let aB=0x0;for(const aD of az?.['entries']??[]){const aE=String(aD?.['who']??'')['toLowerCase']();if(!aE||aE==='0x0')continue;if(objectTypeFromAddress(aE)===undefined)continue;const aF=(aD?.['table']??'')+':'+aE;if(aA['has'](aF))continue;aA['add'](aF),aB++;}const aC=E['get'](ay)??F['get'](ay)??(u['treasuries']['has'](ay)||u['rewards']['has'](ay)?H['get'](ay):undefined);if(aC)aC['related_objects']=aB;}catch{}})),await Promise['all']([...u['machines']['keys']()]['map'](async ay=>{try{const [az,aA]=await Promise['all']([fetchMachineNodes(ay,b)['catch'](()=>undefined),fetchObjectLinkerTx(ay,b,d)]);if(!G['has'](ay))G['set'](ay,{});const aB=G['get'](ay);if(az){const aC=buildMachineGraph(az);!Number['isFinite'](Number(aB['nodes']))&&(aB['nodes']=aC['nodes']['filter'](aD=>!aD['is_start']&&aD['name']!=='')['length']),aB['edges']=aC['edges']['length'];}else Number(aB['nodes'])===0x0&&(aB['edges']=0x0);if(aA){const aD=new Set();let aE=0x0,aF=0x0;for(const aG of aA['items']??[]){const aH=String(aG?.['who']??'')['toLowerCase']();if(!aH||aH==='0x0'||aD['has'](aH))continue;aD['add'](aH);if(objectTypeFromAddress(aH)===undefined)continue;aE++;if(objectTypeFromAddress(aH)===ObjectType['Progress'])aF++;}aB['related_objects']=aE,aB['progresses']=aF;}}catch{}}));const a9=0x12c,aa=0xc8;await Promise['all']([...F['keys']()]['map'](async ay=>{try{let az=undefined,aA=0x0;for(;;){const aC=await query_table({'parent':ay,'cursor':az,'limit':aa,'no_cache':d,'network':b});aA+=Array['isArray'](aC?.['items'])?aC['items']['length']:0x0;if(!aC?.['hasNextPage']||!aC?.['nextCursor']||aA>=a9)break;az=String(aC['nextCursor']);}const aB=F['get'](ay);if(aB)aB['records_total']=Math['min'](aA,a9);}catch(aD){if(/query\.parent/i['test'](String(aD?.['message']??aD))){const aE=F['get'](ay);if(aE)aE['records_total']=0x0;}}}));}catch{}const K=ay=>sortItems([...ay['entries']()]['map'](([az,aA])=>({'object':az,'object_type':objectTypeFromAddress(az)??null,'name':B['byAddress']['get'](az),'time':aA||undefined,'description':C['get'](az),'tags':D['get'](az)}))),L=ay=>sortItems([...ay['entries']()]['map'](([az,aA])=>({'object':az,'object_type':objectTypeFromAddress(az)??null,'name':B['byAddress']['get'](az),'time':aA||undefined,'description':C['get'](az),'tags':D['get'](az),...E['get'](az)??{}}))),M=ay=>sortItems([...ay['entries']()]['map'](([az,aA])=>({'object':az,'object_type':objectTypeFromAddress(az)??null,'name':B['byAddress']['get'](az),'time':aA||undefined,'description':C['get'](az),'tags':D['get'](az),...H['get'](az)??{}}))),N=ay=>sortItems([...ay['entries']()]['map'](([az,aA])=>({'object':az,'object_type':objectTypeFromAddress(az)??null,'name':B['byAddress']['get'](az),'time':aA||undefined,'description':C['get'](az),'tags':D['get'](az),...H['get'](az)??{}}))),O=ay=>sortItems([...ay['entries']()]['map'](([az,aA])=>({'object':az,'object_type':objectTypeFromAddress(az)??null,'name':B['byAddress']['get'](az),'time':aA||undefined,'description':C['get'](az),'tags':D['get'](az),...F['get'](az)??{}}))),P=ay=>sortItems([...ay['entries']()]['map'](([az,aA])=>({'object':az,'object_type':objectTypeFromAddress(az)??null,'name':B['byAddress']['get'](az),'time':aA||undefined,'description':C['get'](az),'tags':D['get'](az),...G['get'](az)??{}}))),Q={'action':'workspace_lists','network':b,'updated_at_ms':Date['now'](),'cached':![],'treasuries':N(u['treasuries']),'repositories':O(u['repositories']),'contacts':L(u['contacts']),'machines':P(u['machines']),'rewards':M(u['rewards']),'others':K(w),'counts':{'treasuries':u['treasuries']['size'],'repositories':u['repositories']['size'],'contacts':u['contacts']['size'],'machines':u['machines']['size'],'rewards':u['rewards']['size'],'others':w['size']}},R={'like':0x0,'dislike':0x0,'favor':0x0};for(const ay of[Q['treasuries'],Q['repositories'],Q['contacts'],Q['machines'],Q['rewards'],Q['others']]){for(const az of ay){const aA=I['get'](az['object']);if(aA)az['rep']=aA;else{if(J)az['rep']=R;}}}aggCache['set'](e,{'at':Date['now'](),'value':Q});if(aggCache['size']>AGG_CACHE_MAX){const aB=aggCache['keys']()['next']()['value'];if(aB!==undefined)aggCache['delete'](aB);}return Q;})());if(!d)aggInflight['set'](e,f);try{return await f;}finally{if(!d)aggInflight['delete'](e);}}
|
|
1
|
+
import{objectTypeFromAddress,query_local_mark_list,query_table}from'@wowok/wowok';import{ObjectType}from'@wowok/wowok';import{batchFetchEntityLinker,batchFetchEntityRegistrar,batchFetchEntityContact,batchFetchEntityPermission,batchFetchObjectLinkerCore,batchFetchObjectLinkerTx,batchQueryObjectsByIds}from'../graph/onchain/sdk-batch.js';import{listLocalAccounts,resolveLocalNamesFor}from'./workflow-guidance.js';import{fetchMachineNodes,buildMachineGraph}from'../playbooks/service-build/machine-nodes.js';const AGG_TTL_MS=0x1d4c0,AGG_CACHE_MAX=0x8,aggCache=new Map(),aggInflight=new Map(),CLASSIFIED_TYPES=new Set([ObjectType['Permission'],ObjectType['Service'],ObjectType['Machine'],ObjectType['Treasury'],ObjectType['Repository'],ObjectType['Reward'],ObjectType['Demand'],ObjectType['Arbitration'],ObjectType['Arb'],ObjectType['Contact'],ObjectType['Order'],ObjectType['Progress']]);function sortItems(a){return a['sort']((c,d)=>(d['time']??0x0)-(c['time']??0x0)||c['object']['localeCompare'](d['object']));}export async function buildWorkspaceLists(a){const b=a['network'],c=a['account']?.['trim']()['toLowerCase']()||undefined,d=a['no_cache']===!![],e=(b??'')+'|'+(c??'');if(!d){const g=aggCache['get'](e);if(g&&Date['now']()-g['at']<AGG_TTL_MS)return{...g['value'],'cached':!![]};const h=aggInflight['get'](e);if(h)return h;}const f=((async()=>{const i=c?[{'address':c,'name':undefined}]:await listLocalAccounts(),j={'action':'workspace_lists','network':b,'updated_at_ms':Date['now'](),'cached':![],'treasuries':[],'repositories':[],'contacts':[],'machines':[],'rewards':[],'payments':[],'others':[],'counts':{'treasuries':0x0,'repositories':0x0,'contacts':0x0,'machines':0x0,'rewards':0x0,'payments':0x0,'others':0x0},'note':i['length']===0x0?'No\x20local\x20accounts\x20found\x20—\x20create\x20or\x20import\x20an\x20account\x20first.':undefined};if(i['length']===0x0)return aggCache['set'](e,{'at':Date['now'](),'value':j}),j;const l=i['map'](a1=>String(a1['address'])['toLowerCase']()),[p,q,s]=await Promise['all']([batchFetchEntityPermission(l,b,d)['catch'](()=>undefined),batchFetchEntityContact(l,b,d)['catch'](()=>undefined),batchFetchObjectLinkerTx(l,b,d)['catch'](()=>undefined)]),u=l['map'](a1=>p?.['get'](a1)),v=l['map'](a1=>q?.['get'](a1)),w=l['map'](a1=>s?.['get'](a1)),x=[],y=new Set();for(const a1 of u){for(const a2 of a1?.['items']??[]){!y['has'](a2['permission'])&&(y['add'](a2['permission']),x['push'](a2['permission']));}}const z=await batchFetchObjectLinkerCore(x,b,d)['catch'](()=>undefined),A=x['map'](a3=>z?.['get'](a3)),B={'treasuries':new Map(),'repositories':new Map(),'contacts':new Map(),'machines':new Map(),'rewards':new Map(),'payments':new Map()},C=(a3,a4,a5)=>{const a6=a4['toLowerCase'](),a7=a3['get'](a6);if(a7===undefined||(a5??0x0)>a7)a3['set'](a6,a5??0x0);};A['forEach'](a3=>{for(const a4 of a3?.['items']??[]){const a5=objectTypeFromAddress(a4['who']);if(a5===ObjectType['Treasury'])C(B['treasuries'],a4['who'],a4['time']);else{if(a5===ObjectType['Repository'])C(B['repositories'],a4['who'],a4['time']);else{if(a5===ObjectType['Machine'])C(B['machines'],a4['who'],a4['time']);else{if(a5===ObjectType['Reward'])C(B['rewards'],a4['who'],a4['time']);else{if(a5===ObjectType['Contact'])C(B['contacts'],a4['who'],a4['time']);}}}}}});for(const a3 of v){for(const a4 of a3?.['items']??[])C(B['contacts'],a4['contact'],a4['time']);}const D=new Map();for(const a5 of w){for(const a6 of a5?.['items']??[]){const a7=objectTypeFromAddress(a6['who']);if(a7&&CLASSIFIED_TYPES['has'](a7))continue;if(a7===ObjectType['Payment']){C(B['payments'],a6['who'],a6['time']);continue;}C(D,a6['who'],a6['time']);}}const E=[...B['treasuries']['keys'](),...B['repositories']['keys'](),...B['contacts']['keys'](),...B['machines']['keys'](),...B['rewards']['keys'](),...B['payments']['keys'](),...D['keys']()],F=a8=>a8['startsWith']('0x00'),G=[],H=[];for(const a8 of E){if(F(a8))H['push'](a8);else G['push'](a8);}const I=await resolveLocalNamesFor(E);if(a['light']){const a9=ab=>sortItems([...ab['entries']()]['map'](([ac,ad])=>({'object':ac,'object_type':objectTypeFromAddress(ac)??null,'name':I['byAddress']['get'](ac),'time':ad||undefined}))),aa={'treasuries':B['treasuries']['size'],'repositories':B['repositories']['size'],'contacts':B['contacts']['size'],'machines':B['machines']['size'],'rewards':B['rewards']['size'],'payments':B['payments']['size'],'others':D['size']};return{'action':'workspace_lists','network':b,'updated_at_ms':Date['now'](),'cached':![],'treasuries':a9(B['treasuries']),'repositories':a9(B['repositories']),'contacts':a9(B['contacts']),'machines':a9(B['machines']),'rewards':a9(B['rewards']),'payments':a9(B['payments']),'others':a9(D),'counts':aa,'note':i['length']===0x0?'No\x20local\x20accounts\x20found\x20—\x20create\x20or\x20import\x20an\x20account\x20first.':undefined};}const J=new Map(),K=new Map(),L=new Map(),M=new Map(),N=new Map(),O=new Map(),P=new Map(),Q=new Map();let R=![];try{const [ab,ac,ad,ae]=await Promise['all']([G['length']>0x0?batchQueryObjectsByIds(G,b,d)['then'](as=>({'objects':as})):Promise['resolve']({'objects':[]}),batchFetchEntityRegistrar(H,b,d),query_local_mark_list(undefined),listLocalAccounts()]),af=new Set((ae??[])['map'](as=>String(as?.['address']??'')['toLowerCase']())),ag=new Set((ab?.['objects']??[])['map'](as=>String(as?.['object']??as?.['address']??'')['toLowerCase']())['filter'](Boolean));for(const [as,at]of ac){ag['add'](as);const au=at?.['description']??at?.['info']?.['description'];if(typeof au==='string'&&au['trim']())J['set'](as,au['trim']());}if(ag['size']>0x0){const av=aw=>{for(const ax of[...aw['keys']()])if(!ag['has'](ax))aw['delete'](ax);};av(B['treasuries']),av(B['repositories']),av(B['contacts']),av(B['machines']),av(B['rewards']),av(B['payments']),av(D);}const ah=new Set([...B['treasuries']['keys'](),...B['repositories']['keys'](),...B['contacts']['keys'](),...B['machines']['keys'](),...B['rewards']['keys'](),...B['payments']['keys'](),...D['keys']()]),ai=((async()=>{try{const aw=await batchFetchEntityLinker([...ah],b,d);R=!![];for(const [ax,ay]of aw){const az=Array['isArray'](ay?.['votes'])?ay['votes']:[];Q['set'](ax,{'like':az['filter'](aA=>aA&&aA['like'])['length'],'dislike':az['filter'](aA=>aA&&aA['dislike'])['length'],'favor':az['filter'](aA=>aA&&aA['favor'])['length'],...az['length']>0x0?{'votes':az['map'](aA=>({'who':aA?.['who']??null,'like':!!aA?.['like'],'dislike':!!aA?.['dislike'],'favor':!!aA?.['favor']}))}:{}});}}catch{}})());for(const aw of ab?.['objects']??[]){const ax=String(aw?.['object']??aw?.['address']??'')['toLowerCase'](),ay=aw?.['description']??aw?.['data']?.['description'];ax&&typeof ay==='string'&&ay['trim']()&&J['set'](ax,ay['trim']());if(ax&&B['contacts']['has'](ax)){const az=Array['isArray'](aw?.['ims'])?aw['ims']:[],aA=typeof aw?.['location']==='string'?aw['location']['trim']():'';L['set'](ax,{...aA?{'location':aA}:{},'members_total':az['length'],'members_mine':az['filter'](aB=>af['has'](String(aB?.['at']??'')['toLowerCase']()))['length']});}if(ax&&B['rewards']['has'](ax)){const aB=/<([0-9a-zA-Z_:]+)>\s*$/['exec'](String(aw?.['type_raw']??'')),aC=Array['isArray'](aw?.['guards'])?aw['guards']:[],aD=Number(aw?.['record_count']);O['set'](ax,{...aB?{'token':aB[0x1]['split']('::')['pop']()}:{},'guards_total':aC['length'],...Number['isFinite'](aD)?{'claimers':aD}:{},...aw?.['balance']!=null?{'balance_total':String(aw['balance'])}:{},...aw?.['type_raw']!=null?{'type_raw':String(aw['type_raw'])}:{}});}if(ax&&B['treasuries']['has'](ax)){const aE=/<([0-9a-zA-Z_:]+)>\s*$/['exec'](String(aw?.['type_raw']??'')),aF=aG=>aG===null||aG===undefined||aG===''?undefined:String(aG);O['set'](ax,{...aE?{'token':aE[0x1]['split']('::')['pop']()}:{},...aw?.['balance']!=null?{'balance_total':String(aw['balance'])}:{},...aw?.['type_raw']!=null?{'type_raw':String(aw['type_raw'])}:{},...aw?.['inflow']!=null?{'inflow':aF(aw['inflow'])}:{},...aw?.['outflow']!=null?{'outflow':aF(aw['outflow'])}:{}});}if(ax&&B['repositories']['has'](ax)){const aG=Number(aw?.['data_count']),aH=Array['isArray'](aw?.['policies'])?aw['policies']:[],aI=Array['isArray'](aw?.['rewards'])?aw['rewards']:[];M['set'](ax,{...Number['isFinite'](aG)?{'records_total':aG}:{},'policies_total':aH['length'],'rewards_total':aI['length']});}ax&&B['machines']['has'](ax)&&(aw?.['bPublished']!=null||aw?.['bPaused']!=null||aw?.['node_count']!=null)&&N['set'](ax,{'status':aw['bPublished']===!![]?aw['bPaused']===!![]?'PAUSED':'LIVE':'UNPUBLISHED',...Number['isFinite'](Number(aw?.['node_count']))?{'nodes':Number(aw['node_count'])}:{}});if(ax&&B['payments']['has'](ax)){const aJ=Array['isArray'](aw?.['record'])?aw['record']:[];let aK=BigInt(0x0);if(c)for(const aN of aJ){if(String(aN['recipient']??'')['toLowerCase']()===c)aK+=BigInt(aN['amount']??0x0);}const aL=!!c&&String(aw?.['signer']??'')['toLowerCase']()===c,aM=/<([0-9a-zA-Z_:]+)>\s*$/['exec'](String(aw?.['type_raw']??''));P['set'](ax,{'payment_amount':String(aw?.['amount']??'0'),...c&&aK>0x0?{'payment_incoming':String(aK)}:{},...c?{'direction':aK>0x0?'INCOMING':aL?'OUTGOING':'RELATED'}:{},...aM?{'token':aM[0x1]['split']('::')['pop']()}:{}});}}for(const aO of ad??[]){const aP=String(aO?.['address']??'')['toLowerCase']();aP&&Array['isArray'](aO?.['tags'])&&aO['tags']['length']>0x0&&K['set'](aP,aO['tags']['map'](String));}const aj=[...L['keys'](),...M['keys'](),...[...O['keys']()]['filter'](aQ=>B['treasuries']['has'](aQ)||B['rewards']['has'](aQ))],[ak,al]=await Promise['all']([batchFetchObjectLinkerCore(aj,b,d)['catch'](()=>undefined),batchFetchObjectLinkerTx(aj,b,d)['catch'](()=>undefined)]);for(const aQ of aj){const aR=ak?.['get'](aQ),aS=al?.['get'](aQ);if(!aR||!aS)continue;const aT=new Set();let aU=0x0;for(const [aW,aX]of[['object_linker_core',aR['items']],['object_linker_tx',aS['items']]]){for(const aY of aX){const aZ=String(aY?.['who']??'')['toLowerCase']();if(!aZ||aZ==='0x0')continue;if(objectTypeFromAddress(aZ)===undefined)continue;const b0=aW+':'+aZ;if(aT['has'](b0))continue;aT['add'](b0),aU++;}}const aV=L['get'](aQ)??M['get'](aQ)??(B['treasuries']['has'](aQ)||B['rewards']['has'](aQ)?O['get'](aQ):undefined);if(aV)aV['related_objects']=aU;}const am=[...B['machines']['keys']()],an=await batchFetchObjectLinkerTx(am,b,d)['catch'](()=>undefined),ao=Promise['all'](am['map'](async b1=>{try{const [b2,b3]=await Promise['all']([fetchMachineNodes(b1,b)['catch'](()=>undefined),Promise['resolve'](an?.['get'](b1))]);if(!N['has'](b1))N['set'](b1,{});const b4=N['get'](b1);if(b2&&b2['length']>0x0){const b5=buildMachineGraph(b2);!Number['isFinite'](Number(b4['nodes']))&&(b4['nodes']=b5['nodes']['filter'](b6=>!b6['is_start']&&b6['name']!=='')['length']),b4['edges']=b5['edges']['length'];}else Number(b4['nodes'])===0x0&&(b4['edges']=0x0);if(b3){const b6=new Set();let b7=0x0,b8=0x0;for(const b9 of b3['items']??[]){const ba=String(b9?.['who']??'')['toLowerCase']();if(!ba||ba==='0x0'||b6['has'](ba))continue;b6['add'](ba);if(objectTypeFromAddress(ba)===undefined)continue;b7++;if(objectTypeFromAddress(ba)===ObjectType['Progress'])b8++;}b4['related_objects']=b7,b4['progresses']=b8;}}catch{}})),ap=0x12c,aq=0xc8,ar=Promise['all']([...M['keys']()]['map'](async b1=>{try{if(M['get'](b1)?.['records_total']!==undefined)return;let b2=undefined,b3=0x0;for(;;){const b5=await query_table({'parent':b1,'cursor':b2,'limit':aq,'no_cache':d,'network':b});b3+=Array['isArray'](b5?.['items'])?b5['items']['length']:0x0;if(!b5?.['hasNextPage']||!b5?.['nextCursor']||b3>=ap)break;b2=String(b5['nextCursor']);}const b4=M['get'](b1);if(b4)b4['records_total']=Math['min'](b3,ap);}catch(b6){if(/query\.parent/i['test'](String(b6?.['message']??b6))){const b7=M['get'](b1);if(b7)b7['records_total']=0x0;}}}));await Promise['all']([ai,ao,ar]);}catch{}const S=b1=>sortItems([...b1['entries']()]['map'](([b2,b3])=>({'object':b2,'object_type':objectTypeFromAddress(b2)??null,'name':I['byAddress']['get'](b2),'time':b3||undefined,'description':J['get'](b2),'tags':K['get'](b2)}))),T=b1=>sortItems([...b1['entries']()]['map'](([b2,b3])=>({'object':b2,'object_type':objectTypeFromAddress(b2)??null,'name':I['byAddress']['get'](b2),'time':b3||undefined,'description':J['get'](b2),'tags':K['get'](b2),...L['get'](b2)??{}}))),U=b1=>sortItems([...b1['entries']()]['map'](([b2,b3])=>({'object':b2,'object_type':objectTypeFromAddress(b2)??null,'name':I['byAddress']['get'](b2),'time':b3||undefined,'description':J['get'](b2),'tags':K['get'](b2),...O['get'](b2)??{}}))),V=b1=>sortItems([...b1['entries']()]['map'](([b2,b3])=>({'object':b2,'object_type':objectTypeFromAddress(b2)??null,'name':I['byAddress']['get'](b2),'time':b3||undefined,'description':J['get'](b2),'tags':K['get'](b2),...O['get'](b2)??{}}))),W=b1=>sortItems([...b1['entries']()]['map'](([b2,b3])=>({'object':b2,'object_type':objectTypeFromAddress(b2)??null,'name':I['byAddress']['get'](b2),'time':b3||undefined,'description':J['get'](b2),'tags':K['get'](b2),...M['get'](b2)??{}}))),X=b1=>sortItems([...b1['entries']()]['map'](([b2,b3])=>({'object':b2,'object_type':objectTypeFromAddress(b2)??null,'name':I['byAddress']['get'](b2),'time':b3||undefined,'description':J['get'](b2),'tags':K['get'](b2),...N['get'](b2)??{}}))),Y=b1=>sortItems([...b1['entries']()]['map'](([b2,b3])=>({'object':b2,'object_type':objectTypeFromAddress(b2)??null,'name':I['byAddress']['get'](b2),'time':b3||undefined,'description':J['get'](b2),'tags':K['get'](b2),...P['get'](b2)??{}}))),Z={'action':'workspace_lists','network':b,'updated_at_ms':Date['now'](),'cached':![],'treasuries':V(B['treasuries']),'repositories':W(B['repositories']),'contacts':T(B['contacts']),'machines':X(B['machines']),'rewards':U(B['rewards']),'payments':Y(B['payments']),'others':S(D),'counts':{'treasuries':B['treasuries']['size'],'repositories':B['repositories']['size'],'contacts':B['contacts']['size'],'machines':B['machines']['size'],'rewards':B['rewards']['size'],'payments':B['payments']['size'],'others':D['size']}},a0={'like':0x0,'dislike':0x0,'favor':0x0};for(const b1 of[Z['treasuries'],Z['repositories'],Z['contacts'],Z['machines'],Z['rewards'],Z['payments'],Z['others']]){for(const b2 of b1){const b3=Q['get'](b2['object']);if(b3)b2['rep']=b3;else{if(R)b2['rep']=a0;}}}aggCache['set'](e,{'at':Date['now'](),'value':Z});if(aggCache['size']>AGG_CACHE_MAX){const b4=aggCache['keys']()['next']()['value'];if(b4!==undefined)aggCache['delete'](b4);}return Z;})());if(!d)aggInflight['set'](e,f);try{return await f;}finally{if(!d)aggInflight['delete'](e);}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{randomUUID}from'node:crypto';import{Config,SQLiteStorage}from'@wowok/wowok/w/local';import{query_events}from'@wowok/wowok';import{monitorEventStore}from'./EventStore.js';import{subscriptionStore}from'./SubscriptionStore.js';import{loadScopeSnapshot,resolveScope}from'./ScopeResolver.js';import{annotateBatch,backfillAnnotations}from'./EventRouter.js';import{bridgeMonitorProblems}from'./ProblemBridge.js';import{bridgeMonitorSuggestions}from'./SuggestionBridge.js';import{EVENT_MODULE_OF,MONITOR_CAPTURE_TYPES,PAYMENT_EVENT_TYPE,normalizeMonitorEvent}from'./normalize.js';import{LOOP_DEFAULTS}from'./types.js';import{goalStore}from'../goal/GoalStore.js';import{runKeeperScan as a205a,realKeeperScanDeps}from'../keeper/KeeperScan.js';import{addProblem,addSuggestion,listProblems,listSuggestions}from'../task/ProcessStore.js';const LEASE_PREFIX='mon_lease:v4:',SEED_PAGE=0x64,SEED_MAX=0x7d0,POLL_BATCH=0x32,MAX_BACKOFF_MS=0x493e0;function netKey(a){return(a||'default')['replace'](/[^a-zA-Z0-9_-]/g,'_');}function leaseKey(a){return''+LEASE_PREFIX+netKey(a);}function realDeps(){return{'store':monitorEventStore,'configStore':subscriptionStore,'storage':new SQLiteStorage(),'resolveScope':(a,b)=>resolveScope(a,b),'loadScope':a=>loadScopeSnapshot(a),'router':{'annotateBatch':annotateBatch,'backfillAnnotations':backfillAnnotations},'queryEvents':a=>query_events({'type':a['type'],'cursor':a['cursor'],'limit':a['limit'],'order':a['order'],'network':a['network']}),'defaultNetwork':()=>Config['Instance']()['network_get'](),'now':()=>Date['now'](),'pid':process['pid'],'bootId':randomUUID(),'logger':a=>console['error']('[monitor]\x20'+a),'openProblems':a=>bridgeMonitorProblems(a,{'getGoal':(b,c)=>goalStore['get'](b,c),'addProblem':addProblem,'listProblems':listProblems,'logger':b=>console['error']('[monitor]\x20'+b)}),'openSuggestions':a=>bridgeMonitorSuggestions(a,{'getGoal':(b,c)=>goalStore['get'](b,c),'addSuggestion':addSuggestion,'listSuggestions':listSuggestions,'logger':b=>console['error']('[monitor]\x20'+b)}),'runKeeperScan':(a,b)=>a205a(a,b,realKeeperScanDeps()),'setTimer':(a,b)=>setTimeout(a,b),'clearTimer':a=>clearTimeout(a)};}function newRuntime(a){return{'network':a,'started':![],'holdsLease':![],'leaseHolder':null,'timer':undefined,'ticking':![],'scope':undefined,'lastScopeRefreshAt':0x0,'pollIntervalMs':LOOP_DEFAULTS['poll_interval_ms'],'lastTickAt':0x0,'lastNewCount':0x0,'lastSummary':undefined,'consecutiveErrors':0x0,'backoffMs':0x0};}export class MonitorLoop{['deps'];['runtimes']=new Map();constructor(a){this['deps']={...realDeps(),...a??{}};}async['start'](a){let b=a&&a['length']>0x0?a:undefined;if(!b)b=[await this['deps']['defaultNetwork']()];for(const c of b){const d=netKey(c);if(this['runtimes']['has'](d)){const f=this['runtimes']['get'](d);if(f['started'])continue;f['started']=!![],this['schedule'](f,0x0);continue;}const e=newRuntime(c);e['started']=!![],this['runtimes']['set'](d,e);try{const g=await this['deps']['loadScope'](c);g&&(e['scope']=g,e['lastScopeRefreshAt']=Number(g['resolved_at'])||0x0);}catch{}this['schedule'](e,0x0);}return b;}async['stop'](a){const b=a?[netKey(a)]:[...this['runtimes']['keys']()];for(const c of b){const d=this['runtimes']['get'](c);if(!d)continue;d['started']=![];d['timer']!==undefined&&(this['deps']['clearTimer'](d['timer']),d['timer']=undefined);if(d['holdsLease']){d['holdsLease']=![];try{await this['deps']['storage']['del'](leaseKey(d['network']));}catch{}}this['runtimes']['delete'](c);}}['status'](a){const b=a?this['runtimes']['get'](netKey(a)):[...this['runtimes']['values']()][0x0];if(!b)return{'running':![],'lease_holder':null,'last_tick_at':0x0,'last_new_count':0x0,'scope_version':0x0,'backoff_ms':0x0};return{'running':b['started']&&b['holdsLease'],'lease_holder':b['leaseHolder']?b['leaseHolder']['pid']+':'+b['leaseHolder']['boot_id']:null,'last_tick_at':b['lastTickAt'],'last_new_count':b['lastNewCount'],'scope_version':b['scope']?.['version']??0x0,'backoff_ms':b['backoffMs'],...b['lastSummary']?{'last_tick':b['lastSummary']}:{}};}['kick'](a){const b=this['runtimes']['get'](netKey(a));if(!b||!b['started']||!b['holdsLease']||b['ticking'])return;if(this['deps']['now']()-b['lastTickAt']<b['pollIntervalMs'])return;void this['tick'](b['network']);}['invalidateScope'](a){const b=this['runtimes']['get'](netKey(a));if(!b)return;b['scope']=undefined,b['lastScopeRefreshAt']=0x0;}async['tick'](a){const b=netKey(a);let c=this['runtimes']['get'](b);!c&&(c=newRuntime(a),this['runtimes']['set'](b,c));if(c['ticking'])return undefined;c['ticking']=!![];const d=this['deps']['now']();try{const f=await this['deps']['configStore']['getConfig'](a),g=Number(f['loop']?.['poll_interval_ms'])||LOOP_DEFAULTS['poll_interval_ms'];c['pollIntervalMs']=g;const h=await this['acquireLease'](c,g);if(!h)return undefined;const {newCount:i,events:j}=await this['capture'](c,f),k=await this['getScope'](c,f);let l=0x0,m=[];if(i>0x0&&j['length']>0x0){const p=this['deps']['router']['annotateBatch'](j,k,f)['filter'](q=>q['rules']['length']>0x0||q['focus_hit']||q['matched_filters']['length']>0x0);p['length']>0x0&&(await this['deps']['store']['saveAnnotations'](a,p),l=p['length'],m=p);}if(m['length']>0x0&&this['deps']['openProblems'])try{await this['deps']['openProblems']({'network':a,'events':j,'annotations':m,'scope':k});}catch(q){this['deps']['logger']('monitor\x20loop:\x20problem\x20bridge\x20error\x20on\x20'+a+':\x20'+String(q?.['message']??q));}if(m['length']>0x0&&this['deps']['openSuggestions'])try{await this['deps']['openSuggestions']({'network':a,'events':j,'annotations':m,'scope':k});}catch(s){this['deps']['logger']('monitor\x20loop:\x20suggestion\x20bridge\x20error\x20on\x20'+a+':\x20'+String(s?.['message']??s));}if(this['deps']['runKeeperScan'])try{await this['deps']['runKeeperScan'](a,k);}catch(t){this['deps']['logger']('monitor\x20loop:\x20keeper\x20scan\x20error\x20on\x20'+a+':\x20'+String(t?.['message']??t));}const n=Number(f['loop']?.['scope_refresh_ms'])||LOOP_DEFAULTS['scope_refresh_ms'];if(this['deps']['now']()-c['lastScopeRefreshAt']>=n){c['lastScopeRefreshAt']=this['deps']['now']();const {snapshot:u,changed:v}=await this['deps']['resolveScope'](a,f);c['scope']=u;if(v){const w=Number(f['loop']?.['backfill_days']??LOOP_DEFAULTS['backfill_days']),x=await this['deps']['router']['backfillAnnotations'](a,this['deps']['store'],u,w,f);this['deps']['logger']('monitor\x20loop:\x20scope\x20v'+u['version']+'\x20on\x20'+a+'\x20changed\x20—\x20backfill\x20rescanned\x20'+x['rescanned']+',\x20updated\x20'+x['updated']);}}c['lastTickAt']=this['deps']['now'](),c['lastNewCount']=i,c['consecutiveErrors']=0x0,c['backoffMs']=0x0;const o={'captured':j['length'],'annotated':l,'duration_ms':this['deps']['now']()-d};return c['lastSummary']=o,o;}catch(y){const z=String(y?.['message']??y);return this['deps']['logger']('monitor\x20loop:\x20tick\x20error\x20on\x20'+a+':\x20'+z),c['consecutiveErrors']+=0x1,c['backoffMs']=Math['min'](c['pollIntervalMs']*0x2**c['consecutiveErrors'],MAX_BACKOFF_MS),undefined;}finally{c['ticking']=![],c['started']&&this['schedule'](c,c['backoffMs']>0x0?c['backoffMs']:c['pollIntervalMs']);}}['schedule'](a,b){if(a['timer']!==undefined)this['deps']['clearTimer'](a['timer']);const c=this['deps']['setTimer'](()=>{a['timer']=undefined,void this['tick'](a['network']);},Math['max'](0x0,b));c?.['unref']?.(),a['timer']=c;}async['acquireLease'](a,b){const c=leaseKey(a['network']),d=this['deps']['now']();let e;try{const i=await this['deps']['storage']['get'](c);e=i?JSON['parse'](i):undefined;}catch{e=undefined;}const f={'pid':this['deps']['pid'],'boot_id':this['deps']['bootId']},g=!!e&&e['boot_id']===f['boot_id']&&e['pid']===f['pid'],h=!e||d-Number(e['heartbeat_at']??0x0)>0x2*b;if(g||h)return await this['deps']['storage']['put'](c,JSON['stringify']({...f,'heartbeat_at':d})),a['holdsLease']=!![],a['leaseHolder']=f,!![];return a['holdsLease']=![],a['leaseHolder']={'pid':e['pid'],'boot_id':e['boot_id']},![];}async['getScope'](a,b){if(!a['scope'])try{const c=await this['deps']['loadScope'](a['network']);c&&(a['scope']=c,a['lastScopeRefreshAt']=Number(c['resolved_at'])||0x0);}catch{}if(!a['scope']){a['lastScopeRefreshAt']=this['deps']['now']();const {snapshot:d,changed:e}=await this['deps']['resolveScope'](a['network'],b);a['scope']=d;if(e){const f=Number(b['loop']?.['backfill_days']??LOOP_DEFAULTS['backfill_days']);await this['deps']['router']['backfillAnnotations'](a['network'],this['deps']['store'],d,f,b);}}return a['scope'];}async['capture'](a,b){const c=a['network'],d=await this['deps']['store']['getCursors'](c);let f=0x0;const g=[],h=[...MONITOR_CAPTURE_TYPES];if(b['events']?.[PAYMENT_EVENT_TYPE]===!![])h['push'](PAYMENT_EVENT_TYPE);for(const i of h){const j=EVENT_MODULE_OF[i];if(!j)continue;try{const k=d['cursors'][i];let l=null;if(!k){let m=null,n=0x0;while(n<SEED_MAX){const o=await this['deps']['queryEvents']({'type':i,'cursor':m,'limit':Math['min'](SEED_PAGE,SEED_MAX-n),'order':'descending','network':c}),p=(o?.['data']??[])['map'](q=>normalizeMonitorEvent(q));if(p['length']===0x0)break;if(l===null)l=p[0x0];n+=p['length'],f+=await this['deps']['store']['insert'](c,j,p),g['push'](...p);if(!o?.['hasNextPage']||!o?.['nextCursor'])break;m=o['nextCursor'];}}else{const q=await this['deps']['queryEvents']({'type':i,'cursor':k,'limit':POLL_BATCH,'order':'ascending','network':c}),r=(q?.['data']??[])['map'](s=>normalizeMonitorEvent(s));f+=await this['deps']['store']['insert'](c,j,r),g['push'](...r);if(r['length']>0x0)l=r[r['length']-0x1];}if(l?.['id']){const s=d['cursors'][i];(!s||BigInt(l['id']['eventSeq'])>BigInt(s['eventSeq']||'0'))&&(d['cursors'][i]={'eventSeq':String(l['id']['eventSeq']),'txDigest':String(l['id']['txDigest'])});}}catch(t){const u=String(t?.['message']??t);this['deps']['logger']('monitor\x20loop:\x20type\x20'+i+'\x20poll\x20error:\x20'+u),/referenced transaction/i['test'](u)&&(delete d['cursors'][i],this['deps']['logger']('monitor\x20loop:\x20type\x20'+i+'\x20cursor\x20invalid\x20—\x20dropped,\x20will\x20re-seed\x20next\x20cycle'));}}return await this['deps']['store']['saveCursors'](c,d['cursors'],this['deps']['now']()),{'newCount':f,'events':g};}}export const monitorLoop=new MonitorLoop();
|
|
1
|
+
import{randomUUID}from'node:crypto';import{Config,SQLiteStorage}from'@wowok/wowok/w/local';import{query_events}from'@wowok/wowok';import{monitorEventStore}from'./EventStore.js';import{subscriptionStore}from'./SubscriptionStore.js';import{loadScopeSnapshot,resolveScope}from'./ScopeResolver.js';import{annotateBatch,backfillAnnotations}from'./EventRouter.js';import{bridgeMonitorProblems}from'./ProblemBridge.js';import{bridgeMonitorSuggestions}from'./SuggestionBridge.js';import{EVENT_MODULE_OF,MONITOR_CAPTURE_TYPES,PAYMENT_EVENT_TYPE,normalizeMonitorEvent}from'./normalize.js';import{LOOP_DEFAULTS}from'./types.js';import{goalStore}from'../goal/GoalStore.js';import{runKeeperScan as a207a,realKeeperScanDeps}from'../keeper/KeeperScan.js';import{addProblem,addSuggestion,listProblems,listSuggestions}from'../task/ProcessStore.js';const LEASE_PREFIX='mon_lease:v4:',SEED_PAGE=0x64,SEED_MAX=0x7d0,POLL_BATCH=0x32,MAX_BACKOFF_MS=0x493e0;function netKey(a){return(a||'default')['replace'](/[^a-zA-Z0-9_-]/g,'_');}function leaseKey(a){return''+LEASE_PREFIX+netKey(a);}function realDeps(){return{'store':monitorEventStore,'configStore':subscriptionStore,'storage':new SQLiteStorage(),'resolveScope':(a,b)=>resolveScope(a,b),'loadScope':a=>loadScopeSnapshot(a),'router':{'annotateBatch':annotateBatch,'backfillAnnotations':backfillAnnotations},'queryEvents':a=>query_events({'type':a['type'],'cursor':a['cursor'],'limit':a['limit'],'order':a['order'],'network':a['network']}),'defaultNetwork':()=>Config['Instance']()['network_get'](),'now':()=>Date['now'](),'pid':process['pid'],'bootId':randomUUID(),'logger':a=>console['error']('[monitor]\x20'+a),'openProblems':a=>bridgeMonitorProblems(a,{'getGoal':(b,c)=>goalStore['get'](b,c),'addProblem':addProblem,'listProblems':listProblems,'logger':b=>console['error']('[monitor]\x20'+b)}),'openSuggestions':a=>bridgeMonitorSuggestions(a,{'getGoal':(b,c)=>goalStore['get'](b,c),'addSuggestion':addSuggestion,'listSuggestions':listSuggestions,'logger':b=>console['error']('[monitor]\x20'+b)}),'runKeeperScan':(a,b)=>a207a(a,b,realKeeperScanDeps()),'setTimer':(a,b)=>setTimeout(a,b),'clearTimer':a=>clearTimeout(a)};}function newRuntime(a){return{'network':a,'started':![],'holdsLease':![],'leaseHolder':null,'timer':undefined,'ticking':![],'scope':undefined,'lastScopeRefreshAt':0x0,'pollIntervalMs':LOOP_DEFAULTS['poll_interval_ms'],'lastTickAt':0x0,'lastNewCount':0x0,'lastSummary':undefined,'consecutiveErrors':0x0,'backoffMs':0x0};}export class MonitorLoop{['deps'];['runtimes']=new Map();constructor(a){this['deps']={...realDeps(),...a??{}};}async['start'](a){let b=a&&a['length']>0x0?a:undefined;if(!b)b=[await this['deps']['defaultNetwork']()];for(const c of b){const d=netKey(c);if(this['runtimes']['has'](d)){const f=this['runtimes']['get'](d);if(f['started'])continue;f['started']=!![],this['schedule'](f,0x0);continue;}const e=newRuntime(c);e['started']=!![],this['runtimes']['set'](d,e);try{const g=await this['deps']['loadScope'](c);g&&(e['scope']=g,e['lastScopeRefreshAt']=Number(g['resolved_at'])||0x0);}catch{}this['schedule'](e,0x0);}return b;}async['stop'](a){const b=a?[netKey(a)]:[...this['runtimes']['keys']()];for(const c of b){const d=this['runtimes']['get'](c);if(!d)continue;d['started']=![];d['timer']!==undefined&&(this['deps']['clearTimer'](d['timer']),d['timer']=undefined);if(d['holdsLease']){d['holdsLease']=![];try{await this['deps']['storage']['del'](leaseKey(d['network']));}catch{}}this['runtimes']['delete'](c);}}['status'](a){const b=a?this['runtimes']['get'](netKey(a)):[...this['runtimes']['values']()][0x0];if(!b)return{'running':![],'lease_holder':null,'last_tick_at':0x0,'last_new_count':0x0,'scope_version':0x0,'backoff_ms':0x0};return{'running':b['started']&&b['holdsLease'],'lease_holder':b['leaseHolder']?b['leaseHolder']['pid']+':'+b['leaseHolder']['boot_id']:null,'last_tick_at':b['lastTickAt'],'last_new_count':b['lastNewCount'],'scope_version':b['scope']?.['version']??0x0,'backoff_ms':b['backoffMs'],...b['lastSummary']?{'last_tick':b['lastSummary']}:{}};}['kick'](a){const b=this['runtimes']['get'](netKey(a));if(!b||!b['started']||!b['holdsLease']||b['ticking'])return;if(this['deps']['now']()-b['lastTickAt']<b['pollIntervalMs'])return;void this['tick'](b['network']);}['invalidateScope'](a){const b=this['runtimes']['get'](netKey(a));if(!b)return;b['scope']=undefined,b['lastScopeRefreshAt']=0x0;}async['tick'](a){const b=netKey(a);let c=this['runtimes']['get'](b);!c&&(c=newRuntime(a),this['runtimes']['set'](b,c));if(c['ticking'])return undefined;c['ticking']=!![];const d=this['deps']['now']();try{const f=await this['deps']['configStore']['getConfig'](a),g=Number(f['loop']?.['poll_interval_ms'])||LOOP_DEFAULTS['poll_interval_ms'];c['pollIntervalMs']=g;const h=await this['acquireLease'](c,g);if(!h)return undefined;const {newCount:i,events:j}=await this['capture'](c,f),k=await this['getScope'](c,f);let l=0x0,m=[];if(i>0x0&&j['length']>0x0){const p=this['deps']['router']['annotateBatch'](j,k,f)['filter'](q=>q['rules']['length']>0x0||q['focus_hit']||q['matched_filters']['length']>0x0);p['length']>0x0&&(await this['deps']['store']['saveAnnotations'](a,p),l=p['length'],m=p);}if(m['length']>0x0&&this['deps']['openProblems'])try{await this['deps']['openProblems']({'network':a,'events':j,'annotations':m,'scope':k});}catch(q){this['deps']['logger']('monitor\x20loop:\x20problem\x20bridge\x20error\x20on\x20'+a+':\x20'+String(q?.['message']??q));}if(m['length']>0x0&&this['deps']['openSuggestions'])try{await this['deps']['openSuggestions']({'network':a,'events':j,'annotations':m,'scope':k});}catch(s){this['deps']['logger']('monitor\x20loop:\x20suggestion\x20bridge\x20error\x20on\x20'+a+':\x20'+String(s?.['message']??s));}if(this['deps']['runKeeperScan'])try{await this['deps']['runKeeperScan'](a,k);}catch(t){this['deps']['logger']('monitor\x20loop:\x20keeper\x20scan\x20error\x20on\x20'+a+':\x20'+String(t?.['message']??t));}const n=Number(f['loop']?.['scope_refresh_ms'])||LOOP_DEFAULTS['scope_refresh_ms'];if(this['deps']['now']()-c['lastScopeRefreshAt']>=n){c['lastScopeRefreshAt']=this['deps']['now']();const {snapshot:u,changed:v}=await this['deps']['resolveScope'](a,f);c['scope']=u;if(v){const w=Number(f['loop']?.['backfill_days']??LOOP_DEFAULTS['backfill_days']),x=await this['deps']['router']['backfillAnnotations'](a,this['deps']['store'],u,w,f);this['deps']['logger']('monitor\x20loop:\x20scope\x20v'+u['version']+'\x20on\x20'+a+'\x20changed\x20—\x20backfill\x20rescanned\x20'+x['rescanned']+',\x20updated\x20'+x['updated']);}}c['lastTickAt']=this['deps']['now'](),c['lastNewCount']=i,c['consecutiveErrors']=0x0,c['backoffMs']=0x0;const o={'captured':j['length'],'annotated':l,'duration_ms':this['deps']['now']()-d};return c['lastSummary']=o,o;}catch(y){const z=String(y?.['message']??y);return this['deps']['logger']('monitor\x20loop:\x20tick\x20error\x20on\x20'+a+':\x20'+z),c['consecutiveErrors']+=0x1,c['backoffMs']=Math['min'](c['pollIntervalMs']*0x2**c['consecutiveErrors'],MAX_BACKOFF_MS),undefined;}finally{c['ticking']=![],c['started']&&this['schedule'](c,c['backoffMs']>0x0?c['backoffMs']:c['pollIntervalMs']);}}['schedule'](a,b){if(a['timer']!==undefined)this['deps']['clearTimer'](a['timer']);const c=this['deps']['setTimer'](()=>{a['timer']=undefined,void this['tick'](a['network']);},Math['max'](0x0,b));c?.['unref']?.(),a['timer']=c;}async['acquireLease'](a,b){const c=leaseKey(a['network']),d=this['deps']['now']();let e;try{const i=await this['deps']['storage']['get'](c);e=i?JSON['parse'](i):undefined;}catch{e=undefined;}const f={'pid':this['deps']['pid'],'boot_id':this['deps']['bootId']},g=!!e&&e['boot_id']===f['boot_id']&&e['pid']===f['pid'],h=!e||d-Number(e['heartbeat_at']??0x0)>0x2*b;if(g||h)return await this['deps']['storage']['put'](c,JSON['stringify']({...f,'heartbeat_at':d})),a['holdsLease']=!![],a['leaseHolder']=f,!![];return a['holdsLease']=![],a['leaseHolder']={'pid':e['pid'],'boot_id':e['boot_id']},![];}async['getScope'](a,b){if(!a['scope'])try{const c=await this['deps']['loadScope'](a['network']);c&&(a['scope']=c,a['lastScopeRefreshAt']=Number(c['resolved_at'])||0x0);}catch{}if(!a['scope']){a['lastScopeRefreshAt']=this['deps']['now']();const {snapshot:d,changed:e}=await this['deps']['resolveScope'](a['network'],b);a['scope']=d;if(e){const f=Number(b['loop']?.['backfill_days']??LOOP_DEFAULTS['backfill_days']);await this['deps']['router']['backfillAnnotations'](a['network'],this['deps']['store'],d,f,b);}}return a['scope'];}async['capture'](a,b){const c=a['network'],d=await this['deps']['store']['getCursors'](c);let f=0x0;const g=[],h=[...MONITOR_CAPTURE_TYPES];if(b['events']?.[PAYMENT_EVENT_TYPE]===!![])h['push'](PAYMENT_EVENT_TYPE);for(const i of h){const j=EVENT_MODULE_OF[i];if(!j)continue;try{const k=d['cursors'][i];let l=null;if(!k){let m=null,n=0x0;while(n<SEED_MAX){const o=await this['deps']['queryEvents']({'type':i,'cursor':m,'limit':Math['min'](SEED_PAGE,SEED_MAX-n),'order':'descending','network':c}),p=(o?.['data']??[])['map'](q=>normalizeMonitorEvent(q));if(p['length']===0x0)break;if(l===null)l=p[0x0];n+=p['length'],f+=await this['deps']['store']['insert'](c,j,p),g['push'](...p);if(!o?.['hasNextPage']||!o?.['nextCursor'])break;m=o['nextCursor'];}}else{const q=await this['deps']['queryEvents']({'type':i,'cursor':k,'limit':POLL_BATCH,'order':'ascending','network':c}),r=(q?.['data']??[])['map'](s=>normalizeMonitorEvent(s));f+=await this['deps']['store']['insert'](c,j,r),g['push'](...r);if(r['length']>0x0)l=r[r['length']-0x1];}if(l?.['id']){const s=d['cursors'][i];(!s||BigInt(l['id']['eventSeq'])>BigInt(s['eventSeq']||'0'))&&(d['cursors'][i]={'eventSeq':String(l['id']['eventSeq']),'txDigest':String(l['id']['txDigest'])});}}catch(t){const u=String(t?.['message']??t);this['deps']['logger']('monitor\x20loop:\x20type\x20'+i+'\x20poll\x20error:\x20'+u),/referenced transaction/i['test'](u)&&(delete d['cursors'][i],this['deps']['logger']('monitor\x20loop:\x20type\x20'+i+'\x20cursor\x20invalid\x20—\x20dropped,\x20will\x20re-seed\x20next\x20cycle'));}}return await this['deps']['store']['saveCursors'](c,d['cursors'],this['deps']['now']()),{'newCount':f,'events':g};}}export const monitorLoop=new MonitorLoop();
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { AllocatorPayoff } from "../knowledge/recipient-constraint.js";
|
|
1
2
|
export interface ArbitratorInterestInput {
|
|
2
3
|
account: string;
|
|
3
4
|
arbitration: string;
|
|
@@ -9,6 +10,7 @@ export interface ArbitratorInterestInput {
|
|
|
9
10
|
current_time?: number;
|
|
10
11
|
}>;
|
|
11
12
|
resolved_indemnities?: string[];
|
|
13
|
+
fee_payoff?: AllocatorPayoff[];
|
|
12
14
|
}
|
|
13
15
|
export interface ArbitratorInterestAnalysis {
|
|
14
16
|
fund_flow: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export function analyzeArbitratorInterest(a){const b=[],c=[],e=[],f=[];b['push']('Arbitration\x20fee\x20is\x20escrowed\x20per\x20dispute\x20(arb.move)\x20—\x20collected\x20when\x20the\x20verdict\x20lands,\x20forfeited\x20if\x20you\x20never\x20vote.');a['vote_weight']!==undefined&&b['push']('Your\x20vote\x20carries\x20weight\x20'+a['vote_weight']+'\x20—\x20weighted\x20voting,\x20not\x20majority\x20count:\x20a\x20high-weight\x20vote\x20can\x20decide\x20a\x20case\x20alone.');if(a['open_disputes']['length']>0x0){c['push'](a['open_disputes']['length']+'\x20open\x20dispute(s)\x20await\x20your\x20proposition/vote\x20—\x20you\x20hold\x20arbitration\x20power\x20over\x20funds\x20that\x20are\x20already\x20escrowed.');for(const
|
|
1
|
+
export function analyzeArbitratorInterest(a){const b=[],c=[],e=[],f=[];b['push']('Arbitration\x20fee\x20is\x20escrowed\x20per\x20dispute\x20(arb.move)\x20—\x20collected\x20when\x20the\x20verdict\x20lands,\x20forfeited\x20if\x20you\x20never\x20vote.');a['vote_weight']!==undefined&&b['push']('Your\x20vote\x20carries\x20weight\x20'+a['vote_weight']+'\x20—\x20weighted\x20voting,\x20not\x20majority\x20count:\x20a\x20high-weight\x20vote\x20can\x20decide\x20a\x20case\x20alone.');if(a['fee_payoff']?.['length']){const h=a['fee_payoff']['map'](i=>i['beneficial_recipient'])['filter'](Boolean);b['push']('Fee\x20allocation\x20payoff\x20resolves\x20to:\x20'+([...new Set(h)]['join'](';\x20')||'(unresolved)')+'\x20—\x20'+'check\x20the\x20allocation\x20guard\x27s\x20Signer/scope\x20constraints\x20before\x20relying\x20on\x20collection.');}if(a['open_disputes']['length']>0x0){c['push'](a['open_disputes']['length']+'\x20open\x20dispute(s)\x20await\x20your\x20proposition/vote\x20—\x20you\x20hold\x20arbitration\x20power\x20over\x20funds\x20that\x20are\x20already\x20escrowed.');for(const i of a['open_disputes']){if(i['voting_deadline']!==undefined&&i['current_time']!==undefined){const j=Math['round']((i['voting_deadline']-i['current_time'])/0x36ee80);c['push']('Arb\x20'+i['arb']+':\x20'+(j>=0x0?j+'h\x20left\x20to\x20the\x20voting\x20deadline':'voting\x20deadline\x20PASSED')+(i['order']?'\x20(order\x20'+i['order']+')':'')+'.');}}}c['push']('Verdicts\x20must\x20be\x20defensible\x20from\x20on-chain\x20evidence\x20(progress\x20records,\x20WIP\x20hashes,\x20Messenger\x20records)\x20—\x20every\x20Voted\x20entry\x20is\x20permanent\x20and\x20queryable.'),e['push']('Pull\x20the\x20order\x27s\x20full\x20record\x20before\x20voting:\x20Progress\x20holders\x20show\x20WHO\x20advanced\x20WHAT\x20and\x20WHEN\x20—\x20the\x20liability\x20question\x20usually\x20answers\x20itself\x20from\x20the\x20timestamps.');a['open_disputes']['length']>0x0&&e['push']('Request\x20missing\x20evidence\x20via\x20Messenger\x20—\x20the\x20conversation\x20record\x20becomes\x20part\x20of\x20the\x20dispute\x20record.');f['push']('Deadline\x20miss:\x20a\x20case\x20you\x20hold\x20weight\x20in\x20resolves\x20without\x20you\x20—\x20fee\x20forfeited\x20and\x20your\x20arbitration\x20reputation\x20degrades\x20(registrar\x20votes\x20are\x20queryable\x20by\x20future\x20disputants).');a['resolved_indemnities']?.['length']&&f['push']('You\x20resolved\x20'+a['resolved_indemnities']['length']+'\x20case(s)\x20recently\x20—\x20a\x20verdict\x20overturned\x20by\x20evidence\x20later\x20discovered\x20is\x20a\x20permanent\x20reputation\x20mark.');f['push']('Separation\x20of\x20powers:\x20you\x20must\x20NOT\x20hold\x20power\x20in\x20the\x20disputing\x20service\x27s\x20own\x20permission\x20(service.move\x20rejects\x20such\x20bindings)\x20—\x20avoid\x20any\x20position\x20that\x20re-creates\x20that\x20conflict.');const g='As\x20an\x20arbitrator\x20of\x20'+a['arbitration']+(a['vote_weight']!==undefined?'\x20(weight\x20'+a['vote_weight']+')':'')+(',\x20'+a['open_disputes']['length']+'\x20open\x20dispute(s)')+(a['open_disputes']['length']>0x0?'\x20await\x20your\x20vote':'\x20are\x20pending')+'.\x20Your\x20income\x20is\x20the\x20fee;\x20your\x20asset\x20is\x20a\x20defensible\x20verdict\x20record;\x20your\x20exposure\x20is\x20the\x20deadline.';return{'fund_flow':b,'responsibility':c,'leverage':e,'stakes':f,'summary':g};}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { RadarForward } from "./radar-core.js";
|
|
2
|
+
import type { AllocatorPayoff } from "../knowledge/recipient-constraint.js";
|
|
2
3
|
export interface CollaboratorInterestInput {
|
|
3
4
|
account: string;
|
|
4
5
|
current_node: string;
|
|
@@ -12,6 +13,7 @@ export interface CollaboratorInterestInput {
|
|
|
12
13
|
terminal?: "completed" | "refunded" | null;
|
|
13
14
|
stalled_hours?: number;
|
|
14
15
|
unread_messages?: number;
|
|
16
|
+
allocation_payoff?: AllocatorPayoff[];
|
|
15
17
|
}
|
|
16
18
|
export interface CollaboratorInterestAnalysis {
|
|
17
19
|
fund_flow: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export function analyzeCollaboratorInterest(a){const b=[],c=[],d=[],e=[],f=a['collaborator_kind']==='named_operator'?'external\x20named\x20operator':'permission\x20entity\x20(internal\x20staff)';b['push']('As\x20a\x20'+f+',\x20you\x20carry\x20no\x20direct\x20settlement\x20stake\x20in\x20this\x20order\x20—\x20'+'your\x20compensation\x20is\x20typically\x20outside\x20the\x20on-chain\x20order\x20(salary/contract)\x20'+'unless\x20the\x20allocation\x20waterfall\x20explicitly\x20routes\x20a\x20slot\x20to\x20your\x20address.');const g=a['operable']['filter'](j=>j['guard']);a['operable']['length']>0x0&&c['push'](a['operable']['length']+'\x20forward(s)\x20are\x20executable\x20by\x20YOUR\x20role\x20right\x20now\x20'+('('+a['operable']['map'](j=>'\x27'+j['name']+'\x27')['join'](',\x20')+'):\x20your\x20inaction\x20stalls\x20the\x20workflow,\x20')+'and\x20the\x20stall\x20is\x20publicly\x20visible\x20on-chain\x20(flow\x20statistics\x20+\x20stall\x20metrics).');g['length']>0x0&&c['push']('Forward(s)\x20'+g['map'](j=>'\x27'+j['name']+'\x27')['join'](',\x20')+'\x20are\x20guard-gated:\x20YOU\x20must\x20satisfy\x20the\x20guard\x20conditions\x20'+'(evidence,\x20verification,\x20timing)\x20before\x20execution\x20—\x20prepare\x20submissions\x20(proof/repository\x20data)\x20in\x20advance.');a['terminal']==null&&a['operable']['length']===0x0&&a['waiting_on']['length']>0x0&&c['push']('No\x20forward\x20is\x20yours\x20at\x20this\x20node\x20—\x20you\x20carry\x20no\x20execution\x20responsibility\x20here;\x20'+'avoid\x20interfering\x20outside\x20your\x20permission/named-operator\x20scope\x20(creates\x20semantic\x20responsibility\x20without\x20authority).');a['operable']['length']>0x0&&a['terminal']==null&&d['push']('Advancing\x20NOW\x20keeps\x20the\x20workflow\x20flowing\x20and\x20protects\x20your\x20professional\x20reputation\x20'+'(stall\x20metrics\x20and\x20dispute\x20rate\x20are\x20public\x20and\x20read\x20by\x20future\x20counterparties).');g['length']>0x0&&d['push']('Uploading\x20evidence\x20(Repository/proof)\x20BEFORE\x20executing\x20guard-gated\x20forwards\x20reduces\x20dispute\x20probability\x20'+'and\x20pre-builds\x20the\x20merchant\x27s\x20arbitration\x20defense\x20—\x20your\x20diligence\x20is\x20visible\x20on-chain.');(a['unread_messages']??0x0)>0x0&&d['push'](a['unread_messages']+'\x20unread\x20message(s)\x20from\x20this\x20order\x27s\x20counterparties\x20—\x20timely\x20replies\x20protect\x20your\x20position\x20(WTS\x20record).');a['stalled_hours']!=null&&a['stalled_hours']>0x48&&a['terminal']==null&&e['push']('Order\x20stalled\x20'+Math['round'](a['stalled_hours'])+'h:\x20prolonged\x20stalls\x20degrade\x20flow\x20statistics\x20'+'and\x20can\x20trigger\x20timeout\x20penalties\x20or\x20disputes\x20recorded\x20permanently\x20on-chain\x20—\x20the\x20two\x20cheapest\x20reputation\x20losses\x20to\x20avoid.');a['arbitration_bound']&&a['terminal']==null&&g['length']>0x0&&e['push']('A\x20dispute\x20path\x20exists\x20and\x20you\x20hold\x20guard-gated\x20forwards:\x20if\x20the\x20guard\x20fails\x20or\x20you\x20execute\x20out-of-order,\x20'+'the\x20dispute\x20record\x20lands\x20permanently\x20on-chain\x20and\x20names\x20this\x20workflow\x27s\x20operators.');a['terminal']==='refunded'&&e['push']('Refund\x20executed:\x20the\x20order\x20is\x20closed.\x20Your\x20residual\x20exposure\x20is\x20reputational\x20—\x20'+'a\x20clean\x20close-out\x20(evidence\x20archived,\x20no\x20loose\x20ends)\x20protects\x20your\x20professional\x20standing.');const h=a['terminal']==='completed'?'order\x20completed\x20—\x20workflow\x20closed':a['terminal']==='refunded'?'order\x20refunded\x20—\x20workflow\x20closed':a['operable']['length']>0x0?'YOU\x20can\x20advance\x20'+a['operable']['length']+'\x20forward(s)\x20—\x20workflow\x20momentum\x20is\x20in\x20your\x20hands':'waiting\x20on\x20'+(a['waiting_on']['map'](j=>j['role'])['join'](',\x20')||'others')+'\x20—\x20monitor\x20only',i='Collaborator\x20interest\x20('+f+')\x20at\x20node\x20\x27'+(a['current_node']||'(entry)')+'\x27:\x20'+h+'.\x20'+'All\x20options\x20above\x20are\x20informational\x20—\x20the\x20decision\x20is\x20yours.';return{'fund_flow':b,'responsibility':c,'leverage':d,'stakes':e,'summary':i};}
|
|
1
|
+
export function analyzeCollaboratorInterest(a){const b=[],c=[],d=[],e=[],f=a['collaborator_kind']==='named_operator'?'external\x20named\x20operator':'permission\x20entity\x20(internal\x20staff)';b['push']('As\x20a\x20'+f+',\x20you\x20carry\x20no\x20direct\x20settlement\x20stake\x20in\x20this\x20order\x20—\x20'+'your\x20compensation\x20is\x20typically\x20outside\x20the\x20on-chain\x20order\x20(salary/contract)\x20'+'unless\x20the\x20allocation\x20waterfall\x20explicitly\x20routes\x20a\x20slot\x20to\x20your\x20address.');const g=a['operable']['filter'](j=>j['guard']);a['operable']['length']>0x0&&c['push'](a['operable']['length']+'\x20forward(s)\x20are\x20executable\x20by\x20YOUR\x20role\x20right\x20now\x20'+('('+a['operable']['map'](j=>'\x27'+j['name']+'\x27')['join'](',\x20')+'):\x20your\x20inaction\x20stalls\x20the\x20workflow,\x20')+'and\x20the\x20stall\x20is\x20publicly\x20visible\x20on-chain\x20(flow\x20statistics\x20+\x20stall\x20metrics).');g['length']>0x0&&c['push']('Forward(s)\x20'+g['map'](j=>'\x27'+j['name']+'\x27')['join'](',\x20')+'\x20are\x20guard-gated:\x20YOU\x20must\x20satisfy\x20the\x20guard\x20conditions\x20'+'(evidence,\x20verification,\x20timing)\x20before\x20execution\x20—\x20prepare\x20submissions\x20(proof/repository\x20data)\x20in\x20advance.');a['terminal']==null&&a['operable']['length']===0x0&&a['waiting_on']['length']>0x0&&c['push']('No\x20forward\x20is\x20yours\x20at\x20this\x20node\x20—\x20you\x20carry\x20no\x20execution\x20responsibility\x20here;\x20'+'avoid\x20interfering\x20outside\x20your\x20permission/named-operator\x20scope\x20(creates\x20semantic\x20responsibility\x20without\x20authority).');a['operable']['length']>0x0&&a['terminal']==null&&d['push']('Advancing\x20NOW\x20keeps\x20the\x20workflow\x20flowing\x20and\x20protects\x20your\x20professional\x20reputation\x20'+'(stall\x20metrics\x20and\x20dispute\x20rate\x20are\x20public\x20and\x20read\x20by\x20future\x20counterparties).');g['length']>0x0&&d['push']('Uploading\x20evidence\x20(Repository/proof)\x20BEFORE\x20executing\x20guard-gated\x20forwards\x20reduces\x20dispute\x20probability\x20'+'and\x20pre-builds\x20the\x20merchant\x27s\x20arbitration\x20defense\x20—\x20your\x20diligence\x20is\x20visible\x20on-chain.');(a['unread_messages']??0x0)>0x0&&d['push'](a['unread_messages']+'\x20unread\x20message(s)\x20from\x20this\x20order\x27s\x20counterparties\x20—\x20timely\x20replies\x20protect\x20your\x20position\x20(WTS\x20record).');a['allocation_payoff']?.['some'](j=>j['positions']['caller']==='gains')&&e['push']('An\x20allocator\x20entry\x20has\x20an\x20unbound\x20Signer\x20recipient\x20(conservative\x20payoff:\x20caller\x20gains\x20—\x20RC-FIND-01).\x20'+'Do\x20not\x20execute\x20related\x20forwards\x20under\x20assumption\x20that\x20funds\x20reach\x20a\x20legitimate\x20slot\x20until\x20the\x20guard\x27s\x20Signer\x20binding\x20is\x20verified.');a['stalled_hours']!=null&&a['stalled_hours']>0x48&&a['terminal']==null&&e['push']('Order\x20stalled\x20'+Math['round'](a['stalled_hours'])+'h:\x20prolonged\x20stalls\x20degrade\x20flow\x20statistics\x20'+'and\x20can\x20trigger\x20timeout\x20penalties\x20or\x20disputes\x20recorded\x20permanently\x20on-chain\x20—\x20the\x20two\x20cheapest\x20reputation\x20losses\x20to\x20avoid.');a['arbitration_bound']&&a['terminal']==null&&g['length']>0x0&&e['push']('A\x20dispute\x20path\x20exists\x20and\x20you\x20hold\x20guard-gated\x20forwards:\x20if\x20the\x20guard\x20fails\x20or\x20you\x20execute\x20out-of-order,\x20'+'the\x20dispute\x20record\x20lands\x20permanently\x20on-chain\x20and\x20names\x20this\x20workflow\x27s\x20operators.');a['terminal']==='refunded'&&e['push']('Refund\x20executed:\x20the\x20order\x20is\x20closed.\x20Your\x20residual\x20exposure\x20is\x20reputational\x20—\x20'+'a\x20clean\x20close-out\x20(evidence\x20archived,\x20no\x20loose\x20ends)\x20protects\x20your\x20professional\x20standing.');const h=a['terminal']==='completed'?'order\x20completed\x20—\x20workflow\x20closed':a['terminal']==='refunded'?'order\x20refunded\x20—\x20workflow\x20closed':a['operable']['length']>0x0?'YOU\x20can\x20advance\x20'+a['operable']['length']+'\x20forward(s)\x20—\x20workflow\x20momentum\x20is\x20in\x20your\x20hands':'waiting\x20on\x20'+(a['waiting_on']['map'](j=>j['role'])['join'](',\x20')||'others')+'\x20—\x20monitor\x20only',i='Collaborator\x20interest\x20('+f+')\x20at\x20node\x20\x27'+(a['current_node']||'(entry)')+'\x27:\x20'+h+'.\x20'+'All\x20options\x20above\x20are\x20informational\x20—\x20the\x20decision\x20is\x20yours.';return{'fund_flow':b,'responsibility':c,'leverage':d,'stakes':e,'summary':i};}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { RadarForward } from "./radar-core.js";
|
|
2
|
+
import type { AllocatorPayoff } from "../knowledge/recipient-constraint.js";
|
|
2
3
|
export interface CustomerInterestInput {
|
|
3
4
|
account: string;
|
|
4
5
|
current_node: string;
|
|
@@ -14,6 +15,7 @@ export interface CustomerInterestInput {
|
|
|
14
15
|
terminal?: "completed" | "refunded" | null;
|
|
15
16
|
stalled_hours?: number;
|
|
16
17
|
unread_messages?: number;
|
|
18
|
+
allocation_payoff?: AllocatorPayoff[];
|
|
17
19
|
}
|
|
18
20
|
export interface CustomerInterestAnalysis {
|
|
19
21
|
fund_flow: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export function analyzeCustomerInterest(a){const b=[],c=[],d=[],e=[],f=a['token_type']?'\x20('+a['token_type']+')':'';if(a['terminal']==='completed')b['push']('Order\x20reached\x20a\x20completion\x20terminal:\x20escrowed\x20funds\x20were\x20released\x20to\x20the\x20merchant.\x20'+'Verify\x20the\x20deliverable\x20matched\x20the\x20agreement\x20BEFORE\x20confirming\x20—\x20after\x20release,\x20refunds\x20are\x20harder.');else{if(a['terminal']==='refunded')b['push']('Order\x20reached\x20a\x20refund\x20terminal:\x20escrowed\x20funds\x20return\x20to\x20you\x20per\x20the\x20Allocation\x20configuration.');else a['order_amount']!=null&&b['push'](a['order_amount']+'\x20raw\x20units'+f+'\x20of\x20YOUR\x20money\x20sit\x20escrowed\x20in\x20the\x20Order\x20—\x20'+'released\x20to\x20the\x20merchant\x20ONLY\x20when\x20the\x20workflow\x20advances\x20to\x20completion;\x20returned\x20to\x20you\x20ONLY\x20via\x20a\x20refund\x20path.');}a['compensation_fund']!=null&&a['compensation_fund']!=='0'?b['push']('Merchant\x20compensation_fund\x20holds\x20'+a['compensation_fund']+'\x20raw\x20units'+f+'\x20—\x20your\x20recourse\x20if\x20arbitration\x20awards\x20indemnity\x20(paid\x20FROM\x20it).'):b['push']('Merchant\x20compensation_fund\x20is\x20EMPTY\x20—\x20arbitration\x20indemnity\x20is\x20unenforceable;\x20your\x20protection\x20is\x20the\x20refund\x20path\x20+\x20on-chain\x20reputation\x20only.');a['operable']['length']>0x0&&c['push']('YOU\x20can\x20execute\x20'+a['operable']['map'](j=>'\x27'+j['name']+'\x27')['join'](',\x20')+'\x20right\x20now\x20—\x20'+'your\x20confirmation\x20is\x20the\x20fund-release\x20trigger:\x20only\x20confirm\x20when\x20the\x20deliverable\x20matches\x20the\x20agreement.');a['terminal']==null&&a['operable']['length']===0x0&&a['waiting_on']['length']>0x0&&c['push']('No\x20forward\x20is\x20yours\x20at\x20this\x20node\x20—\x20you\x20carry\x20no\x20execution\x20responsibility\x20here;\x20'+'delivery\x20depends\x20on\x20the\x20merchant-side\x20roles\x20in\x20waiting_on.');a['operable']['length']>0x0&&a['terminal']==null&&d['push']('Your\x20confirmation\x20is\x20your\x20LEVERAGE:\x20escrowed\x20money\x20stays\x20locked\x20until\x20YOU\x20act\x20—\x20'+'do\x20not\x20confirm\x20before\x20verifying\x20the\x20deliverable\x20(WIP\x20hash\x20/\x20receipt).');const g=a['waiting_on']['some'](j=>j['role']!=='OrderHolder\x20(customer)');g&&a['terminal']==null&&d['push']('The\x20workflow\x20waits\x20on\x20merchant-side\x20roles:\x20a\x20Messenger\x20nudge\x20accelerates\x20delivery\x20'+'and\x20the\x20conversation\x20is\x20recorded\x20as\x20WTS\x20evidence\x20protecting\x20you\x20in\x20a\x20dispute.');a['arbitration_bound']&&a['terminal']==null&&d['push']('A\x20dispute\x20path\x20exists:\x20if\x20the\x20merchant\x20stalls\x20or\x20under-delivers,\x20open\x20arbitration\x20—\x20'+'your\x20evidence\x20(WTS\x20+\x20WIP\x20hash)\x20decides\x20the\x20outcome.');(a['unread_messages']??0x0)>0x0&&d['push'](a['unread_messages']+'\x20unread\x20Messenger\x20message(s)\x20—\x20timely\x20replies\x20protect\x20your\x20position\x20(WTS\x20record).');a['order_amount']!=null&&a['terminal']==null&&e['push'](a['order_amount']+'\x20raw\x20units'+f+'\x20are\x20at\x20risk\x20while\x20escrowed\x20—\x20if\x20the\x20merchant\x20stalls\x20beyond\x20the\x20timeout,\x20'+'pursue\x20refund/arbitration\x20rather\x20than\x20letting\x20the\x20order\x20stall\x20indefinitely.');a['stalled_hours']!=null&&a['stalled_hours']>0x18&&a['terminal']==null&&e['push']('Order\x20stalled\x20'+Math['round'](a['stalled_hours'])+'h:\x20your\x20leverage\x20is\x20compensation_fund\x20(if\x20any)\x20+\x20arbitration\x20+\x20on-chain\x20reputation\x20(dislike)\x20—\x20in\x20that\x20order.');a['terminal']==='refunded'&&e['push']('Refund\x20executed:\x20funds\x20returned.\x20Remaining\x20stakes\x20are\x20reputational\x20—\x20a\x20dislike\x20vote\x20is\x20your\x20residual\x20recourse\x20if\x20the\x20merchant\x20behaved\x20unfairly.');const h=a['terminal']==='completed'?'order\x20completed\x20—\x20funds\x20released\x20(verify\x20deliverable\x20matched\x20before\x20confirming\x20next\x20time)':a['terminal']==='refunded'?'order\x20refunded\x20—\x20funds\x20returned':a['operable']['length']>0x0?'YOU\x20can\x20act\x20('+a['operable']['length']+'\x20forward(s))\x20—\x20your\x20confirmation\x20releases\x20funds,\x20verify\x20first':'waiting\x20on\x20'+(a['waiting_on']['map'](j=>j['role'])['join'](',\x20')||'others')+'\x20—\x20monitor\x20and\x20nudge',i='Customer\x20interest\x20at\x20node\x20\x27'+(a['current_node']||'(entry)')+'\x27:\x20'+h+'.\x20'+'All\x20options\x20above\x20are\x20informational\x20—\x20the\x20decision\x20is\x20yours.';return{'fund_flow':b,'responsibility':c,'leverage':d,'stakes':e,'summary':i};}
|
|
1
|
+
export function analyzeCustomerInterest(a){const b=[],c=[],d=[],e=[],f=a['token_type']?'\x20('+a['token_type']+')':'';if(a['terminal']==='completed')b['push']('Order\x20reached\x20a\x20completion\x20terminal:\x20escrowed\x20funds\x20were\x20released\x20to\x20the\x20merchant.\x20'+'Verify\x20the\x20deliverable\x20matched\x20the\x20agreement\x20BEFORE\x20confirming\x20—\x20after\x20release,\x20refunds\x20are\x20harder.');else{if(a['terminal']==='refunded')b['push']('Order\x20reached\x20a\x20refund\x20terminal:\x20escrowed\x20funds\x20return\x20to\x20you\x20per\x20the\x20Allocation\x20configuration.');else a['order_amount']!=null&&b['push'](a['order_amount']+'\x20raw\x20units'+f+'\x20of\x20YOUR\x20money\x20sit\x20escrowed\x20in\x20the\x20Order\x20—\x20'+'released\x20to\x20the\x20merchant\x20ONLY\x20when\x20the\x20workflow\x20advances\x20to\x20completion;\x20returned\x20to\x20you\x20ONLY\x20via\x20a\x20refund\x20path.');}a['compensation_fund']!=null&&a['compensation_fund']!=='0'?b['push']('Merchant\x20compensation_fund\x20holds\x20'+a['compensation_fund']+'\x20raw\x20units'+f+'\x20—\x20your\x20recourse\x20if\x20arbitration\x20awards\x20indemnity\x20(paid\x20FROM\x20it).'):b['push']('Merchant\x20compensation_fund\x20is\x20EMPTY\x20—\x20arbitration\x20indemnity\x20is\x20unenforceable;\x20your\x20protection\x20is\x20the\x20refund\x20path\x20+\x20on-chain\x20reputation\x20only.');a['operable']['length']>0x0&&c['push']('YOU\x20can\x20execute\x20'+a['operable']['map'](j=>'\x27'+j['name']+'\x27')['join'](',\x20')+'\x20right\x20now\x20—\x20'+'your\x20confirmation\x20is\x20the\x20fund-release\x20trigger:\x20only\x20confirm\x20when\x20the\x20deliverable\x20matches\x20the\x20agreement.');a['terminal']==null&&a['operable']['length']===0x0&&a['waiting_on']['length']>0x0&&c['push']('No\x20forward\x20is\x20yours\x20at\x20this\x20node\x20—\x20you\x20carry\x20no\x20execution\x20responsibility\x20here;\x20'+'delivery\x20depends\x20on\x20the\x20merchant-side\x20roles\x20in\x20waiting_on.');a['operable']['length']>0x0&&a['terminal']==null&&d['push']('Your\x20confirmation\x20is\x20your\x20LEVERAGE:\x20escrowed\x20money\x20stays\x20locked\x20until\x20YOU\x20act\x20—\x20'+'do\x20not\x20confirm\x20before\x20verifying\x20the\x20deliverable\x20(WIP\x20hash\x20/\x20receipt).');const g=a['waiting_on']['some'](j=>j['role']!=='OrderHolder\x20(customer)');g&&a['terminal']==null&&d['push']('The\x20workflow\x20waits\x20on\x20merchant-side\x20roles:\x20a\x20Messenger\x20nudge\x20accelerates\x20delivery\x20'+'and\x20the\x20conversation\x20is\x20recorded\x20as\x20WTS\x20evidence\x20protecting\x20you\x20in\x20a\x20dispute.');a['arbitration_bound']&&a['terminal']==null&&d['push']('A\x20dispute\x20path\x20exists:\x20if\x20the\x20merchant\x20stalls\x20or\x20under-delivers,\x20open\x20arbitration\x20—\x20'+'your\x20evidence\x20(WTS\x20+\x20WIP\x20hash)\x20decides\x20the\x20outcome.');(a['unread_messages']??0x0)>0x0&&d['push'](a['unread_messages']+'\x20unread\x20Messenger\x20message(s)\x20—\x20timely\x20replies\x20protect\x20your\x20position\x20(WTS\x20record).');a['allocation_payoff']?.['some'](j=>j['positions']['caller']==='gains')&&e['push']('An\x20allocator\x20entry\x20has\x20an\x20unbound\x20Signer\x20recipient\x20(conservative\x20payoff:\x20caller\x20gains\x20—\x20RC-FIND-01):\x20'+'a\x20third\x20party\x20passing\x20that\x20guard\x20could\x20receive\x20settlement\x20funds.\x20Verify\x20whether\x20the\x20guard\x20binds\x20the\x20Signer.');a['allocation_payoff']?.['some'](j=>j['positions']['customer']==='conditional')&&b['push']('Object-address\x20slots\x20settle\x20to\x20the\x20submitted\x20order\x20itself:\x20you\x20receive\x20them\x20as\x20the\x20order\x20owner\x20'+'(object\x20receipt\x20=\x20owner\x20receipt).');a['order_amount']!=null&&a['terminal']==null&&e['push'](a['order_amount']+'\x20raw\x20units'+f+'\x20are\x20at\x20risk\x20while\x20escrowed\x20—\x20if\x20the\x20merchant\x20stalls\x20beyond\x20the\x20timeout,\x20'+'pursue\x20refund/arbitration\x20rather\x20than\x20letting\x20the\x20order\x20stall\x20indefinitely.');a['stalled_hours']!=null&&a['stalled_hours']>0x18&&a['terminal']==null&&e['push']('Order\x20stalled\x20'+Math['round'](a['stalled_hours'])+'h:\x20your\x20leverage\x20is\x20compensation_fund\x20(if\x20any)\x20+\x20arbitration\x20+\x20on-chain\x20reputation\x20(dislike)\x20—\x20in\x20that\x20order.');a['terminal']==='refunded'&&e['push']('Refund\x20executed:\x20funds\x20returned.\x20Remaining\x20stakes\x20are\x20reputational\x20—\x20a\x20dislike\x20vote\x20is\x20your\x20residual\x20recourse\x20if\x20the\x20merchant\x20behaved\x20unfairly.');const h=a['terminal']==='completed'?'order\x20completed\x20—\x20funds\x20released\x20(verify\x20deliverable\x20matched\x20before\x20confirming\x20next\x20time)':a['terminal']==='refunded'?'order\x20refunded\x20—\x20funds\x20returned':a['operable']['length']>0x0?'YOU\x20can\x20act\x20('+a['operable']['length']+'\x20forward(s))\x20—\x20your\x20confirmation\x20releases\x20funds,\x20verify\x20first':'waiting\x20on\x20'+(a['waiting_on']['map'](j=>j['role'])['join'](',\x20')||'others')+'\x20—\x20monitor\x20and\x20nudge',i='Customer\x20interest\x20at\x20node\x20\x27'+(a['current_node']||'(entry)')+'\x27:\x20'+h+'.\x20'+'All\x20options\x20above\x20are\x20informational\x20—\x20the\x20decision\x20is\x20yours.';return{'fund_flow':b,'responsibility':c,'leverage':d,'stakes':e,'summary':i};}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { RadarForward } from "./radar-core.js";
|
|
2
|
+
import type { AllocatorPayoff } from "../knowledge/recipient-constraint.js";
|
|
2
3
|
export interface MerchantInterestInput {
|
|
3
4
|
account: string;
|
|
4
5
|
current_node: string;
|
|
@@ -14,6 +15,7 @@ export interface MerchantInterestInput {
|
|
|
14
15
|
guard_gated_slots: number;
|
|
15
16
|
direct_to_me_slots: number;
|
|
16
17
|
to_payer_slots: number;
|
|
18
|
+
payoffs: AllocatorPayoff[];
|
|
17
19
|
};
|
|
18
20
|
compensation_fund?: string;
|
|
19
21
|
arbitration_bound: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export function analyzeMerchantInterest(b){const c=[],d=[],e=[],f=[],g=b['token_type']?'\x20('+b['token_type']+')':'';if(b['terminal']==='completed')c['push']('Order\x20reached\x20a\x20completion\x20terminal:\x20escrowed\x20funds\x20are\x20released\x20through\x20the\x20Allocation\x20waterfall.\x20'+'Verify\x20your\x20expected\x20share\x20arrived\x20(query\x20the\x20Allocation/Treasury\x20objects).');else{if(b['terminal']==='refunded')c['push']('Order\x20reached\x20a\x20refund\x20terminal:\x20escrowed\x20funds\x20returned\x20to\x20the\x20buyer\x20per\x20the\x20Allocation\x20configuration.\x20'+'No\x20settlement\x20remains\x20for\x20this\x20order.');else{b['order_amount']!=null&&c['push'](b['order_amount']+'\x20raw\x20units'+g+'\x20sit\x20escrowed\x20in\x20the\x20Order\x20object\x20—\x20'+'released\x20ONLY\x20by\x20workflow\x20advancement\x20to\x20a\x20completion\x20path\x20(not\x20by\x20time,\x20not\x20by\x20platform\x20decision).');if(b['allocation']){const
|
|
1
|
+
export function analyzeMerchantInterest(b){const c=[],d=[],e=[],f=[],g=b['token_type']?'\x20('+b['token_type']+')':'';if(b['terminal']==='completed')c['push']('Order\x20reached\x20a\x20completion\x20terminal:\x20escrowed\x20funds\x20are\x20released\x20through\x20the\x20Allocation\x20waterfall.\x20'+'Verify\x20your\x20expected\x20share\x20arrived\x20(query\x20the\x20Allocation/Treasury\x20objects).');else{if(b['terminal']==='refunded')c['push']('Order\x20reached\x20a\x20refund\x20terminal:\x20escrowed\x20funds\x20returned\x20to\x20the\x20buyer\x20per\x20the\x20Allocation\x20configuration.\x20'+'No\x20settlement\x20remains\x20for\x20this\x20order.');else{b['order_amount']!=null&&c['push'](b['order_amount']+'\x20raw\x20units'+g+'\x20sit\x20escrowed\x20in\x20the\x20Order\x20object\x20—\x20'+'released\x20ONLY\x20by\x20workflow\x20advancement\x20to\x20a\x20completion\x20path\x20(not\x20by\x20time,\x20not\x20by\x20platform\x20decision).');if(b['allocation']){const n=b['allocation'],o=['settlement\x20splits\x20across\x20'+n['recipient_slots']+'\x20recipient\x20slot(s)'];if(n['direct_to_me_slots']>0x0)o['push'](n['direct_to_me_slots']+'\x20pay\x20directly\x20to\x20you');if(n['guard_gated_slots']>0x0)o['push'](n['guard_gated_slots']+'\x20pay\x20the\x20submitted\x20constrained\x20object\x20(receivable\x20only\x20by\x20its\x20owner\x20—\x20object\x20receipt)');if(n['to_payer_slots']>0x0)o['push'](n['to_payer_slots']+'\x20route\x20to\x20the\x20caller\x20who\x20passes\x20the\x20guard');c['push']('Allocation\x20waterfall:\x20'+o['join'](';\x20')+'.');}else c['push']('Allocation\x20waterfall\x20not\x20configured\x20or\x20unresolved\x20—\x20settlement\x20recipients\x20unknown;\x20'+'funds\x20may\x20sit\x20in\x20the\x20Order\x20until\x20an\x20allocation\x20is\x20set\x20or\x20refund\x20path\x20triggers.');}}b['compensation_fund']!=null&&b['compensation_fund']!=='0'&&c['push']('Service\x20compensation_fund\x20holds\x20'+b['compensation_fund']+'\x20raw\x20units'+g+'\x20—\x20merchant-funded\x20skin-in-the-game:\x20'+'arbitration\x20indemnity\x20is\x20paid\x20FROM\x20it,\x20but\x20it\x20also\x20converts\x20directly\x20into\x20buyer\x20trust\x20(higher\x20preorder\x20confidence).');const h=b['operable']['filter'](p=>p['guard']);b['operable']['length']>0x0&&d['push'](b['operable']['length']+'\x20forward(s)\x20are\x20executable\x20by\x20YOUR\x20role\x20right\x20now\x20'+('('+b['operable']['map'](p=>'\x27'+p['name']+'\x27')['join'](',\x20')+'):\x20inaction\x20keeps\x20settlement\x20locked\x20and\x20the\x20stall\x20is\x20publicly\x20visible\x20on-chain.'));h['length']>0x0&&d['push']('Forward(s)\x20'+h['map'](p=>'\x27'+p['name']+'\x27')['join'](',\x20')+'\x20are\x20guard-gated:\x20YOU\x20must\x20satisfy\x20the\x20guard\x20conditions\x20'+'(evidence,\x20verification,\x20timing)\x20before\x20execution\x20—\x20prepare\x20submissions\x20(proof/repository\x20data)\x20in\x20advance.');b['terminal']==null&&b['operable']['length']===0x0&&b['waiting_on']['length']>0x0&&d['push']('No\x20forward\x20is\x20yours\x20at\x20this\x20node\x20—\x20you\x20carry\x20no\x20execution\x20responsibility\x20here;\x20'+'avoid\x20interfering\x20outside\x20your\x20permission\x20scope\x20(creates\x20semantic\x20responsibility\x20without\x20authority).');b['operable']['length']>0x0&&b['terminal']==null&&e['push']('Advancing\x20NOW\x20shortens\x20your\x20fund-settlement\x20cycle\x20and\x20improves\x20your\x20publicly-visible\x20flow\x20statistics\x20'+'(future\x20buyers\x27\x20trust\x20evaluation\x20reads\x20stall/dispute\x20metrics).');const i=b['waiting_on']['some'](p=>p['role']['includes']('OrderHolder'));i&&b['terminal']==null&&e['push']('The\x20workflow\x20waits\x20on\x20the\x20customer\x20(OrderHolder):\x20a\x20Messenger\x20nudge\x20accelerates\x20fund\x20release\x20'+'without\x20creating\x20semantic\x20responsibility\x20—\x20and\x20the\x20conversation\x20is\x20recorded\x20as\x20WTS\x20evidence\x20protecting\x20YOU\x20in\x20a\x20dispute.');h['length']>0x0&&e['push']('Uploading\x20delivery\x20evidence\x20(Repository/proof)\x20BEFORE\x20executing\x20guard-gated\x20forwards\x20reduces\x20dispute\x20probability\x20'+'and\x20pre-builds\x20your\x20arbitration\x20defense.');(b['unread_messages']??0x0)>0x0&&e['push'](b['unread_messages']+'\x20unread\x20message(s)\x20from\x20this\x20order\x27s\x20counterparties\x20—\x20timely\x20replies\x20protect\x20your\x20position\x20(WTS\x20record).');b['rewards_count']>0x0&&e['push'](b['rewards_count']+'\x20reward(s)\x20configured\x20on\x20the\x20Service\x20—\x20honoring\x20them\x20(discounts/bonuses)\x20builds\x20repeat-buyer\x20rate\x20and\x20like/dislike\x20reputation.');const j=b['allocation']?.['payoffs']??[];j['some'](q=>q['positions']['caller']==='gains')&&f['push']('An\x20allocator\x20entry\x20has\x20an\x20unbound\x20Signer\x20recipient\x20(conservative\x20payoff:\x20caller\x20gains\x20—\x20RC-FIND-01).\x20'+'Anyone\x20who\x20satisfies\x20that\x20guard\x20receives\x20funds\x20directly;\x20verify\x20the\x20guard\x20binds\x20the\x20Signer\x20before\x20publish\x20(allocators\x20are\x20immutable\x20after).');if(b['arbitration_bound']&&b['terminal']==null){const p=b['compensation_fund']!=null&&b['compensation_fund']!=='0'?'indemnity\x20would\x20be\x20paid\x20from\x20the\x20compensation_fund\x20('+b['compensation_fund']+'\x20raw\x20units)':'the\x20compensation_fund\x20is\x20empty\x20(indemnity\x20unenforceable\x20—\x20but\x20the\x20arb-loss\x20record\x20still\x20lands)';f['push']('A\x20dispute\x20path\x20exists:\x20if\x20the\x20customer\x20opens\x20arbitration\x20and\x20you\x20lose,\x20'+p+',\x20'+'and\x20the\x20loss\x20is\x20permanently\x20recorded\x20(arb-loss\x20rate\x20is\x20a\x20public\x20metric\x20in\x20future\x20buyers\x27\x20trust\x20evaluation).');}b['stalled_hours']!=null&&b['stalled_hours']>0x48&&b['terminal']==null&&f['push']('Order\x20stalled\x20'+Math['round'](b['stalled_hours'])+'h:\x20prolonged\x20stalls\x20degrade\x20merchant\x20flow\x20statistics\x20'+'and\x20invite\x20dispute/dislike\x20—\x20the\x20two\x20cheapest\x20reputation\x20losses\x20to\x20avoid.');b['terminal']==='refunded'&&f['push']('Refund\x20executed:\x20settlement\x20lost.\x20Remaining\x20stakes\x20are\x20reputational\x20—\x20a\x20dislike\x20vote\x20is\x20the\x20customer\x27s\x20residual\x20leverage;\x20'+'a\x20professional\x20post-refund\x20Messenger\x20close-out\x20is\x20your\x20residual\x20protection.');const k=b['terminal']==='completed'?'order\x20completed\x20—\x20settlement\x20released':b['terminal']==='refunded'?'order\x20refunded\x20—\x20settlement\x20lost':b['operable']['length']>0x0?'YOU\x20can\x20advance\x20'+b['operable']['length']+'\x20forward(s)\x20—\x20settlement\x20speed\x20is\x20in\x20your\x20hands':'waiting\x20on\x20'+(b['waiting_on']['map'](q=>q['role'])['join'](',\x20')||'others')+'\x20—\x20monitor\x20and\x20nudge',l=b['compensation_fund']!=null&&b['compensation_fund']!=='0'?'\x20Compensation\x20fund\x20at\x20risk:\x20'+b['compensation_fund']+'\x20raw\x20units.':'',m='Merchant\x20interest\x20at\x20node\x20\x27'+(b['current_node']||'(entry)')+'\x27:\x20'+k+'.'+l+'\x20'+'All\x20options\x20above\x20are\x20informational\x20—\x20the\x20decision\x20is\x20yours.';return{'fund_flow':c,'responsibility':d,'leverage':e,'stakes':f,'summary':m};}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { RadarForward } from "./radar-core.js";
|
|
2
|
+
import type { AllocatorPayoff } from "../knowledge/recipient-constraint.js";
|
|
2
3
|
export interface SupplierInterestInput {
|
|
3
4
|
account: string;
|
|
4
5
|
current_node: string;
|
|
@@ -14,6 +15,7 @@ export interface SupplierInterestInput {
|
|
|
14
15
|
terminal?: "completed" | "refunded" | null;
|
|
15
16
|
stalled_hours?: number;
|
|
16
17
|
unread_messages?: number;
|
|
18
|
+
allocation_payoff?: AllocatorPayoff[];
|
|
17
19
|
}
|
|
18
20
|
export interface SupplierInterestAnalysis {
|
|
19
21
|
fund_flow: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export function analyzeSupplierInterest(a){const b=[],c=[],d=[],e=[],f=a['token_type']?'\x20('+a['token_type']+')':'';if(a['terminal']==='completed')b['push']('Sub-order\x20reached\x20a\x20completion\x20terminal:\x20your\x20settlement\x20is\x20released\x20through\x20the\x20allocation\x20waterfall.\x20'+'Verify\x20your\x20share\x20arrived\x20(query\x20your\x20sub-order\x27s\x20Allocation/Treasury\x20objects)\x20—\x20the\x20upstream\x20hop\x20must\x20pay\x20out\x20too.');else{if(a['terminal']==='refunded')b['push']('Sub-order\x20reached\x20a\x20refund\x20terminal:\x20the\x20sub-order\x27s\x20escrow\x20is\x20returned,\x20not\x20settled.\x20'+'No\x20settlement\x20remains\x20for\x20this\x20sub-order;\x20any\x20completed\x20work\x20may\x20be\x20unrecoverable\x20absent\x20a\x20dispute.');else a['order_amount']!=null&&b['push'](a['order_amount']+'\x20raw\x20units'+f+'\x20are\x20owed\x20to\x20YOU\x20for\x20this\x20sub-order\x20—\x20'+'released\x20ONLY\x20when\x20the\x20sub-order\x20advances\x20to\x20completion;\x20your\x20claim\x20is\x20against\x20the\x20upstream\x20merchant\x27s\x20settlement,\x20not\x20a\x20platform.');}a['compensation_fund']!=null&&a['compensation_fund']!=='0'?b['push']('The\x20upstream\x20merchant\x27s\x20compensation_fund\x20holds\x20'+a['compensation_fund']+'\x20raw\x20units'+f+'\x20—\x20'+'your\x20recourse\x20if\x20the\x20merchant\x20withholds\x20your\x20share\x20and\x20arbitration\x20awards\x20indemnity\x20(paid\x20FROM\x20it).'):b['push']('The\x20upstream\x20merchant\x27s\x20compensation_fund\x20is\x20EMPTY\x20—\x20your\x20only\x20recourse\x20for\x20unpaid\x20work\x20is\x20the\x20refund\x20path\x20+\x20on-chain\x20reputation.');a['operable']['length']>0x0&&c['push']('YOU\x20can\x20execute\x20'+a['operable']['map'](j=>'\x27'+j['name']+'\x27')['join'](',\x20')+'\x20on\x20your\x20sub-order\x20right\x20now\x20—\x20'+'your\x20delivery\x20is\x20what\x20unlocks\x20your\x20settlement;\x20only\x20advance\x20when\x20the\x20deliverable\x20is\x20actually\x20ready.');a['terminal']==null&&a['operable']['length']===0x0&&a['waiting_on']['length']>0x0&&c['push']('No\x20forward\x20is\x20yours\x20on\x20this\x20sub-order\x20at\x20this\x20node\x20—\x20you\x20carry\x20no\x20execution\x20responsibility\x20here;\x20'+'your\x20settlement\x20depends\x20on\x20the\x20roles\x20in\x20waiting_on.');a['operable']['length']>0x0&&a['terminal']==null&&d['push']('Uploading\x20delivery\x20evidence\x20(Repository/proof)\x20BEFORE\x20advancing\x20your\x20sub-order\x20protects\x20your\x20payment\x20claim\x20'+'and\x20pre-builds\x20your\x20arbitration\x20defense\x20if\x20the\x20upstream\x20merchant\x20disputes.');const g=a['waiting_on']['some'](j=>j['role']!=='OrderHolder\x20(customer)');g&&a['terminal']==null&&d['push']('Your\x20settlement\x20waits\x20on\x20upstream\x20roles:\x20a\x20Messenger\x20nudge\x20accelerates\x20collection,\x20'+'and\x20the\x20conversation\x20is\x20recorded\x20as\x20WTS\x20evidence\x20protecting\x20your\x20claim.');a['arbitration_bound']&&a['terminal']==null&&d['push']('A\x20dispute\x20path\x20exists:\x20if\x20the\x20upstream\x20merchant\x20withholds\x20your\x20share,\x20open\x20arbitration\x20—\x20'+'your\x20evidence\x20(WTS\x20+\x20WIP\x20hash)\x20decides\x20the\x20outcome.');(a['unread_messages']??0x0)>0x0&&d['push'](a['unread_messages']+'\x20unread\x20Messenger\x20message(s)\x20—\x20timely\x20replies\x20protect\x20your\x20position\x20(WTS\x20record).');a['order_amount']!=null&&a['terminal']==null&&e['push'](a['order_amount']+'\x20raw\x20units'+f+'\x20of\x20your\x20settlement\x20are\x20at\x20risk:\x20'+'if\x20you\x20under-deliver\x20you\x20lose\x20the\x20claim;\x20if\x20the\x20upstream\x20merchant\x20stalls\x20you\x20are\x20left\x20waiting\x20—\x20'+'pursue\x20evidence\x20+\x20Messenger\x20+\x20arbitration\x20rather\x20than\x20letting\x20the\x20sub-order\x20stall\x20indefinitely.');a['stalled_hours']!=null&&a['stalled_hours']>0x30&&a['terminal']==null&&e['push']('Sub-order\x20stalled\x20'+Math['round'](a['stalled_hours'])+'h:\x20prolonged\x20stall\x20erodes\x20your\x20claim\x20and\x20'+'invites\x20dispute\x20—\x20evidence\x20+\x20a\x20Messenger\x20nudge\x20are\x20your\x20two\x20cheapest\x20protections.');a['terminal']==='refunded'&&e['push']('Refund\x20executed:\x20settlement\x20lost\x20for\x20this\x20sub-order.\x20Completed\x20work\x20may\x20be\x20unrecoverable\x20—\x20'+'a\x20professional\x20Messenger\x20close-out\x20+\x20evidence\x20archive\x20is\x20your\x20residual\x20protection\x20for\x20any\x20dispute.');const h=a['terminal']==='completed'?'sub-order\x20completed\x20—\x20settlement\x20released\x20(verify\x20your\x20share\x20arrived)':a['terminal']==='refunded'?'sub-order\x20refunded\x20—\x20settlement\x20lost':a['operable']['length']>0x0?'YOU\x20can\x20advance\x20'+a['operable']['length']+'\x20forward(s)\x20—\x20delivery\x20unlocks\x20your\x20settlement':'waiting\x20on\x20'+(a['waiting_on']['map'](j=>j['role'])['join'](',\x20')||'others')+'\x20—\x20monitor\x20and\x20nudge',i='Supplier\x20interest\x20at\x20node\x20\x27'+(a['current_node']||'(entry)')+'\x27:\x20'+h+'.\x20'+'All\x20options\x20above\x20are\x20informational\x20—\x20the\x20decision\x20is\x20yours.';return{'fund_flow':b,'responsibility':c,'leverage':d,'stakes':e,'summary':i};}
|
|
1
|
+
export function analyzeSupplierInterest(a){const b=[],c=[],d=[],e=[],f=a['token_type']?'\x20('+a['token_type']+')':'';if(a['terminal']==='completed')b['push']('Sub-order\x20reached\x20a\x20completion\x20terminal:\x20your\x20settlement\x20is\x20released\x20through\x20the\x20allocation\x20waterfall.\x20'+'Verify\x20your\x20share\x20arrived\x20(query\x20your\x20sub-order\x27s\x20Allocation/Treasury\x20objects)\x20—\x20the\x20upstream\x20hop\x20must\x20pay\x20out\x20too.');else{if(a['terminal']==='refunded')b['push']('Sub-order\x20reached\x20a\x20refund\x20terminal:\x20the\x20sub-order\x27s\x20escrow\x20is\x20returned,\x20not\x20settled.\x20'+'No\x20settlement\x20remains\x20for\x20this\x20sub-order;\x20any\x20completed\x20work\x20may\x20be\x20unrecoverable\x20absent\x20a\x20dispute.');else a['order_amount']!=null&&b['push'](a['order_amount']+'\x20raw\x20units'+f+'\x20are\x20owed\x20to\x20YOU\x20for\x20this\x20sub-order\x20—\x20'+'released\x20ONLY\x20when\x20the\x20sub-order\x20advances\x20to\x20completion;\x20your\x20claim\x20is\x20against\x20the\x20upstream\x20merchant\x27s\x20settlement,\x20not\x20a\x20platform.');}a['compensation_fund']!=null&&a['compensation_fund']!=='0'?b['push']('The\x20upstream\x20merchant\x27s\x20compensation_fund\x20holds\x20'+a['compensation_fund']+'\x20raw\x20units'+f+'\x20—\x20'+'your\x20recourse\x20if\x20the\x20merchant\x20withholds\x20your\x20share\x20and\x20arbitration\x20awards\x20indemnity\x20(paid\x20FROM\x20it).'):b['push']('The\x20upstream\x20merchant\x27s\x20compensation_fund\x20is\x20EMPTY\x20—\x20your\x20only\x20recourse\x20for\x20unpaid\x20work\x20is\x20the\x20refund\x20path\x20+\x20on-chain\x20reputation.');a['operable']['length']>0x0&&c['push']('YOU\x20can\x20execute\x20'+a['operable']['map'](j=>'\x27'+j['name']+'\x27')['join'](',\x20')+'\x20on\x20your\x20sub-order\x20right\x20now\x20—\x20'+'your\x20delivery\x20is\x20what\x20unlocks\x20your\x20settlement;\x20only\x20advance\x20when\x20the\x20deliverable\x20is\x20actually\x20ready.');a['terminal']==null&&a['operable']['length']===0x0&&a['waiting_on']['length']>0x0&&c['push']('No\x20forward\x20is\x20yours\x20on\x20this\x20sub-order\x20at\x20this\x20node\x20—\x20you\x20carry\x20no\x20execution\x20responsibility\x20here;\x20'+'your\x20settlement\x20depends\x20on\x20the\x20roles\x20in\x20waiting_on.');a['operable']['length']>0x0&&a['terminal']==null&&d['push']('Uploading\x20delivery\x20evidence\x20(Repository/proof)\x20BEFORE\x20advancing\x20your\x20sub-order\x20protects\x20your\x20payment\x20claim\x20'+'and\x20pre-builds\x20your\x20arbitration\x20defense\x20if\x20the\x20upstream\x20merchant\x20disputes.');const g=a['waiting_on']['some'](j=>j['role']!=='OrderHolder\x20(customer)');g&&a['terminal']==null&&d['push']('Your\x20settlement\x20waits\x20on\x20upstream\x20roles:\x20a\x20Messenger\x20nudge\x20accelerates\x20collection,\x20'+'and\x20the\x20conversation\x20is\x20recorded\x20as\x20WTS\x20evidence\x20protecting\x20your\x20claim.');a['arbitration_bound']&&a['terminal']==null&&d['push']('A\x20dispute\x20path\x20exists:\x20if\x20the\x20upstream\x20merchant\x20withholds\x20your\x20share,\x20open\x20arbitration\x20—\x20'+'your\x20evidence\x20(WTS\x20+\x20WIP\x20hash)\x20decides\x20the\x20outcome.');(a['unread_messages']??0x0)>0x0&&d['push'](a['unread_messages']+'\x20unread\x20Messenger\x20message(s)\x20—\x20timely\x20replies\x20protect\x20your\x20position\x20(WTS\x20record).');a['allocation_payoff']?.['some'](j=>j['positions']['caller']==='gains')&&e['push']('An\x20upstream\x20allocator\x20entry\x20has\x20an\x20unbound\x20Signer\x20recipient\x20(conservative\x20payoff:\x20caller\x20gains\x20—\x20RC-FIND-01):\x20'+'a\x20third\x20party\x20passing\x20that\x20guard\x20could\x20divert\x20settlement\x20funds\x20intended\x20for\x20the\x20supply\x20chain.');a['allocation_payoff']?.['some'](j=>j['positions']['customer']==='conditional')&&b['push']('Upstream\x20object-address\x20slots\x20pay\x20the\x20submitted\x20object\x20itself\x20(e.g.\x20your\x20sub-order):\x20'+'the\x20object\x27s\x20owner\x20receives\x20it\x20(object\x20receipt\x20=\x20owner\x20receipt).');a['order_amount']!=null&&a['terminal']==null&&e['push'](a['order_amount']+'\x20raw\x20units'+f+'\x20of\x20your\x20settlement\x20are\x20at\x20risk:\x20'+'if\x20you\x20under-deliver\x20you\x20lose\x20the\x20claim;\x20if\x20the\x20upstream\x20merchant\x20stalls\x20you\x20are\x20left\x20waiting\x20—\x20'+'pursue\x20evidence\x20+\x20Messenger\x20+\x20arbitration\x20rather\x20than\x20letting\x20the\x20sub-order\x20stall\x20indefinitely.');a['stalled_hours']!=null&&a['stalled_hours']>0x30&&a['terminal']==null&&e['push']('Sub-order\x20stalled\x20'+Math['round'](a['stalled_hours'])+'h:\x20prolonged\x20stall\x20erodes\x20your\x20claim\x20and\x20'+'invites\x20dispute\x20—\x20evidence\x20+\x20a\x20Messenger\x20nudge\x20are\x20your\x20two\x20cheapest\x20protections.');a['terminal']==='refunded'&&e['push']('Refund\x20executed:\x20settlement\x20lost\x20for\x20this\x20sub-order.\x20Completed\x20work\x20may\x20be\x20unrecoverable\x20—\x20'+'a\x20professional\x20Messenger\x20close-out\x20+\x20evidence\x20archive\x20is\x20your\x20residual\x20protection\x20for\x20any\x20dispute.');const h=a['terminal']==='completed'?'sub-order\x20completed\x20—\x20settlement\x20released\x20(verify\x20your\x20share\x20arrived)':a['terminal']==='refunded'?'sub-order\x20refunded\x20—\x20settlement\x20lost':a['operable']['length']>0x0?'YOU\x20can\x20advance\x20'+a['operable']['length']+'\x20forward(s)\x20—\x20delivery\x20unlocks\x20your\x20settlement':'waiting\x20on\x20'+(a['waiting_on']['map'](j=>j['role'])['join'](',\x20')||'others')+'\x20—\x20monitor\x20and\x20nudge',i='Supplier\x20interest\x20at\x20node\x20\x27'+(a['current_node']||'(entry)')+'\x27:\x20'+h+'.\x20'+'All\x20options\x20above\x20are\x20informational\x20—\x20the\x20decision\x20is\x20yours.';return{'fund_flow':b,'responsibility':c,'leverage':d,'stakes':e,'summary':i};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{initServicePuzzleFromIntent,initMachinePuzzleFromIntent,initAllocationPuzzleFromIntent,initTreasuryPuzzleFromIntent,initArbitrationPuzzleFromIntent,initRewardPuzzleFromIntent,initProgressPuzzleFromIntent,initOrderPuzzleFromIntent,initPuzzleFromIntent as
|
|
1
|
+
import{initServicePuzzleFromIntent,initMachinePuzzleFromIntent,initAllocationPuzzleFromIntent,initTreasuryPuzzleFromIntent,initArbitrationPuzzleFromIntent,initRewardPuzzleFromIntent,initProgressPuzzleFromIntent,initOrderPuzzleFromIntent,initPuzzleFromIntent as a241a,checkServicePuzzleCompleteness,checkMachinePuzzleCompleteness,checkAllocationPuzzleCompleteness,checkTreasuryPuzzleCompleteness,checkArbitrationPuzzleCompleteness,checkRewardPuzzleCompleteness,checkProgressPuzzleCompleteness,checkOrderPuzzleCompleteness,checkPuzzleCompleteness as a241b}from'../../knowledge/index.js';import{initPuzzleFromIntent as a241c,checkPuzzleCompleteness as a241d}from'../../knowledge/permission-puzzle.js';const KEYWORD_TABLE=[{'category':'Product/Service','keywords_zh':['product','selling','sell','sales','store','open\x20shop'],'keywords_en':['sell','product','sale','shop','store'],'objects':['service','order','progress'],'required_level':'R','scene_id':'retail'},{'category':'Subscription','keywords_zh':['subscription','cycle','renewal'],'keywords_en':['subscribe','recurring','subscription'],'objects':['service','machine','reward'],'required_level':'C','scene_id':'subscription'},{'category':'Rental','keywords_zh':['rent','lease','return'],'keywords_en':['rent','lease','return'],'objects':['service','machine','arb'],'required_level':'C','scene_id':'rental_return'},{'category':'Trust','keywords_zh':['deposit','pledge','verify','trust'],'keywords_en':['deposit','trust','verify'],'objects':['guard','permission','treasury'],'required_level':'R','scene_id':'trust_deposit'},{'category':'Funds','keywords_zh':['split','collect','share\x20profit','income','incentive'],'keywords_en':['split','revenue','reward'],'objects':['allocation','treasury','reward'],'required_level':'R','scene_id':'revenue_split'},{'category':'Workflow','keywords_zh':['node','stage','process','workflow'],'keywords_en':['workflow','stage','node'],'objects':['machine','progress'],'required_level':'R','scene_id':'workflow'},{'category':'Dispute','keywords_zh':['arbitration','refund','conflict','rights\x20protection'],'keywords_en':['arbitration','refund','dispute'],'objects':['arb','proof'],'required_level':'C','scene_id':'arbitration_dispute'},{'category':'Contact','keywords_zh':['customer\x20service','contact','communication'],'keywords_en':['contact','support','im'],'objects':['contact'],'required_level':'C','scene_id':'contact_im'},{'category':'Data','keywords_zh':['evidence','record','data'],'keywords_en':['evidence','record','data'],'objects':['repository','proof'],'required_level':'C','scene_id':'evidence_record'},{'category':'User\x20Profile','keywords_zh':['personal\x20info','preference','privacy'],'keywords_en':['personal','profile','privacy'],'objects':['personal','contact'],'required_level':'OPTIONAL','scene_id':'user_profile'},{'category':'Demand\x20Submission','keywords_zh':['demand','publish','inquiry'],'keywords_en':['demand','request','inquiry'],'objects':['demand'],'required_level':'OPTIONAL','scene_id':'demand_inquiry'}],INDUSTRY_KEYWORDS=[{'industry':'freelance','words':['freelance','outsourcing','freelance','gig']},{'industry':'rental','words':['rental','lease','rental','rent']},{'industry':'education','words':['education','course','training','education','course']},{'industry':'travel','words':['travel','tour','itinerary','travel','trip']},{'industry':'subscription','words':['subscription','cycle','subscription','recurring']}];function buildPuzzleDispatch(){const a=(c,d)=>{try{return c(d);}catch{return undefined;}},b=(c,d)=>{if(!c)return{'missing':[],'complete':![],'next_step':'init\x20failed'};try{return d(c);}catch{return{'missing':[],'complete':![],'next_step':'check\x20failed'};}};return{'service':{'init':c=>a(initServicePuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkServicePuzzleCompleteness)},'machine':{'init':c=>a(initMachinePuzzleFromIntent,c),'check':c=>b(c,checkMachinePuzzleCompleteness)},'allocation':{'init':c=>a(initAllocationPuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkAllocationPuzzleCompleteness)},'treasury':{'init':c=>a(initTreasuryPuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkTreasuryPuzzleCompleteness)},'arb':{'init':c=>a(initArbitrationPuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkArbitrationPuzzleCompleteness)},'reward':{'init':c=>a(initRewardPuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkRewardPuzzleCompleteness)},'progress':{'init':c=>a(initProgressPuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkProgressPuzzleCompleteness)},'order':{'init':c=>a(initOrderPuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkOrderPuzzleCompleteness)},'permission':{'init':c=>a(a241c,{'primary_goal':c}),'check':c=>b(c,a241d)},'guard':{'init':c=>a(a241a,{'primary_goal':c}),'check':c=>b(c,a241b)}};}export function extractKeywords(a){if(!a||typeof a!=='string')return[];const b=[];for(const c of KEYWORD_TABLE){const d=[...c['keywords_zh'],...c['keywords_en']];for(const e of d){try{const f=new RegExp(escapeRegex(e),'gi'),g=(a['match'](f)||[])['length'];g>0x0&&b['push']({'keyword':e,'category':c['category'],'matched_objects':[...c['objects']],'required_level':c['required_level'],'match_count':g});}catch{}}}return b['sort']((h,i)=>i['match_count']-h['match_count']),b;}function escapeRegex(a){return a['replace'](/[.*+?^${}()|[\]\\]/g,'\x5c$&');}export function resolveIndustry(a,b){const c=((a??'')+'\x20'+(b??''))['toLowerCase']();for(const d of INDUSTRY_KEYWORDS){for(const e of d['words']){if(c['includes'](e['toLowerCase']()))return d['industry'];}}return'general';}export function identifyObjects(a,b){if(b['length']===0x0)return{'primary':'service','secondary':['permission','machine','progress'],'scenes':[{'object':'service','scene_id':'general'}]};const c=b['find'](i=>i['required_level']==='R'),d=(c??b[0x0])['matched_objects'][0x0],e=new Set([d]),f=[];for(const i of b){for(const j of i['matched_objects']){!e['has'](j)&&(e['add'](j),f['push'](j));}}const g=[],h=new Set();for(const k of KEYWORD_TABLE){const l=b['find'](n=>n['category']===k['category']);if(!l)continue;if(h['has'](k['scene_id']))continue;h['add'](k['scene_id']),g['push']({'object':k['objects'][0x0],'scene_id':k['scene_id']});}return{'primary':d,'secondary':f,'scenes':g};}export function analyzeBusinessIntent(a){const b=[];if(!a||!a['user_intent']||typeof a['user_intent']!=='string')return{'intent_parsed':{'primary_object':'service','secondary_objects':[],'detected_scenes':[],'industry':'general','keyword_matches':[]},'puzzles':{},'overall_completeness':'empty','next_step':'Please\x20provide\x20a\x20non-empty\x20business\x20intent.','recommended_creation_order':[],'warnings':['input.user_intent\x20is\x20empty']};const c=a['user_intent'],e=extractKeywords(c),f=resolveIndustry(c,a['industry']),{primary:g,secondary:h,scenes:i}=identifyObjects(c,e);let j=[g,...h];if(a['target_objects']&&a['target_objects']['length']>0x0){const p=a['target_objects']['filter'](q=>['service','machine','guard','permission','reward','arb','progress','treasury','demand','repository','contact','order','allocation','personal','payment','proof']['includes'](q));if(p['length']>0x0)j=p;}const k=buildPuzzleDispatch(),l={};for(const q of j){const r=k[q];if(!r){b['push']('No\x20puzzle\x20module\x20for\x20\x27'+q+'\x27\x20—\x20skipped\x20(L3\x20object)');continue;}const s=r['init'](c),t=s?r['check'](s):undefined,u=extractMissingDimensions(t);l[q]={'puzzle':s,'completeness':t,'missing_dimensions':u},!s&&b['push']('Puzzle\x20init\x20failed\x20for\x20\x27'+q+'\x27');}const m=aggregatePuzzleCompleteness(l),n=suggestNextPuzzleStep({'intent_parsed':{'primary_object':g,'secondary_objects':h,'detected_scenes':i,'industry':f,'keyword_matches':e},'puzzles':l,'overall_completeness':m,'next_step':'','recommended_creation_order':[],'warnings':b}),o=['permission','progress','machine','guard','allocation','service'];return{'intent_parsed':{'primary_object':g,'secondary_objects':h,'detected_scenes':i,'industry':f,'keyword_matches':e},'puzzles':l,'overall_completeness':m,'next_step':n,'recommended_creation_order':o,'warnings':b};}function extractMissingDimensions(a){if(!a||typeof a!=='object')return[];const b=a,d=b['missing'];if(Array['isArray'](d))return d['map'](f=>String(f));const e=b['missing_details'];if(Array['isArray'](e))return e['map'](f=>String(f?.['dimension']??f));return[];}export function aggregatePuzzleCompleteness(a){const b=Object['values'](a??{});if(b['length']===0x0)return'empty';const c=b['filter'](f=>!f['puzzle'])['length'];if(c===b['length'])return'empty';const d=b['reduce']((f,g)=>f+(g['missing_dimensions']?.['length']??0x0),0x0);if(d===0x0)return'complete';return'partial';}export function suggestNextPuzzleStep(a){if(!a)return'No\x20result\x20to\x20suggest\x20from.';if(a['overall_completeness']==='complete')return'All\x20puzzle\x20dimensions\x20are\x20complete\x20—\x20ready\x20for\x20risk\x20calibration\x20(stage\x203).';if(a['overall_completeness']==='empty')return'No\x20puzzle\x20has\x20been\x20initialized.\x20Provide\x20more\x20concrete\x20business\x20intent\x20so\x20the\x20primary\x20object\x20can\x20be\x20identified.';const b=['permission','treasury','allocation','guard','machine','service','order','progress','arb','reward','proof','repository','demand','contact','personal','payment'],d=a['puzzles']??{},e=b['filter'](f=>d[f]);for(const f of e){const g=d[f];if(!g)continue;const h=g['missing_dimensions']??[];if(h['length']===0x0)continue;const i=g['completeness'],j=i&&typeof i==='object'?i['next_step']:undefined;if(typeof j==='string'&&j['trim']())return'['+f+']\x20'+j;return'['+f+']\x20Complete\x20dimension'+(h['length']>0x1?'s':'')+'\x20'+h['join'](',\x20')+'\x20to\x20advance\x20the\x20puzzle.';}return'Continue\x20dialog\x20to\x20fill\x20remaining\x20pending\x20fields.';}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createHash}from'crypto';import{query_events}from'@wowok/wowok';import{annotateEventsMonetaryFields}from'../../knowledge/fund-layer.js';import{batchQueryObjectsByIds}from'../../graph/onchain/sdk-batch.js';import{buildDataSemantic}from'../../schema/call/semantic.js';import{recordSignature}from'../../experience/index.js';const STATE_TRANSITION_EVENTS=['NewOrderEvent','ProgressEvent','ArbEvent','DemandPresentEvent','DemandFeedbackEvent','NewEntityEvent'];export async function assembleContext(a){const b=a['context_objects'];if(!b||b['length']===0x0)throw new Error('assemble_context\x20requires\x20\x27context_objects\x27\x20—\x20an\x20array\x20of\x20object\x20IDs\x20or\x20LocalMark\x20names.');const c=a['context_network']??'
|
|
1
|
+
import{createHash}from'crypto';import{query_events}from'@wowok/wowok';import{annotateEventsMonetaryFields}from'../../knowledge/fund-layer.js';import{batchQueryObjectsByIds}from'../../graph/onchain/sdk-batch.js';import{Config}from'@wowok/wowok/w/local';import{buildDataSemantic}from'../../schema/call/semantic.js';import{recordSignature}from'../../experience/index.js';const STATE_TRANSITION_EVENTS=['NewOrderEvent','ProgressEvent','ArbEvent','DemandPresentEvent','DemandFeedbackEvent','NewEntityEvent'];export async function assembleContext(a){const b=a['context_objects'];if(!b||b['length']===0x0)throw new Error('assemble_context\x20requires\x20\x27context_objects\x27\x20—\x20an\x20array\x20of\x20object\x20IDs\x20or\x20LocalMark\x20names.');const c=a['context_network']??await Config['Instance']()['network_get'](),d=a['include_events']??![],e=Math['max'](0x0,Math['min'](0x5,a['context_depth']??0x0)),g=a['context_include']?.['length']?new Set(a['context_include']):null,h=await batchQueryObjectsByIds(b,c,![]),i=[],j=[];if(e>0x0){const x=new Set();for(const z of h){const A=z?.['object'];if(typeof A==='string')x['add'](A);}let y=[];for(const B of h){const C=safeExtractAddressFields(B);for(const D of C){if(g&&!g['has'](D['field']))continue;if(x['has'](D['address']))continue;y['push']({'id':D['address'],'parent':B?.['object']??'','viaField':D['field'],'viaType':D['type'],'depth':0x1});}}for(let E=0x1;E<=e&&y['length']>0x0;E++){const F=new Set(),G=[];for(const K of y){if(x['has'](K['id'])||F['has'](K['id']))continue;F['add'](K['id']),x['add'](K['id']),G['push'](K);}if(G['length']===0x0)break;const H=[],I=await batchQueryObjectsByIds(G['map'](L=>L['id']),c,![]),J=new Map();for(const L of I){const M=L?.['object'];if(typeof M==='string')J['set'](M['toLowerCase'](),L);}for(const N of G){const O=J['get'](N['id']['toLowerCase']());if(!O)continue;i['push']({'object':N['id'],'depth':N['depth'],'via_field':N['viaField'],'via_type':N['viaType'],'parent':N['parent']}),j['push'](O);if(E<e){const P=safeExtractAddressFields(O);for(const Q of P){if(g&&!g['has'](Q['field']))continue;if(x['has'](Q['address']))continue;H['push']({'id':Q['address'],'parent':N['id'],'viaField':Q['field'],'viaType':Q['type'],'depth':E+0x1});}}}y=H;}}const k=[...h,...j],l=extractEmbeddedHistory(k),m=Object['keys'](l)['length']>0x0;let n;if(d){n=[];for(const R of STATE_TRANSITION_EVENTS){try{const S=await query_events({'type':R,'limit':0x5,'order':'descending','network':c});S?.['data']&&S['data']['length']>0x0&&n['push'](...S['data']);}catch{}}if(n['length']===0x0)n=undefined;else try{await annotateEventsMonetaryFields(n,c);}catch{}}const p={'operation_type':'assemble_context','data':{'context_objects':h,'embedded_history':l,'events':n}},q=buildDataSemantic({'objects':h,'embedded_history':l,'events':n},p),s=h['map'](T=>(T?.['object']??T?.['data']?.['object']??'?')+':'+(T?.['version']??T?.['data']?.['version']??'?'));j['length']>0x0&&s['push']('deps:'+j['map'](T=>(T?.['object']??'?')+':'+(T?.['version']??'?'))['join'](','));s['push']('ts:'+Date['now']());const t=createHash('sha256')['update'](s['join']('|'))['digest']('hex')['substring'](0x0,0x10),u=i['length']>0x0,v=u?'Context\x20assembled\x20with\x20'+i['length']+'\x20dependency\x20object(s)\x20across\x20'+e+'\x20level(s).\x20'+'Use\x20onchain_transaction\x20with\x20a\x20specific\x20digest\x20to\x20verify\x20a\x20past\x20operation,\x20'+'or\x20proceed\x20with\x20onchain_operations\x20(consider\x20dry_run=true\x20first\x20to\x20validate).':m?'Context\x20assembled\x20with\x20embedded\x20operation\x20history.\x20Use\x20onchain_transaction\x20with\x20a\x20specific\x20digest\x20to\x20verify\x20a\x20past\x20operation,\x20or\x20proceed\x20with\x20onchain_operations\x20(consider\x20dry_run=true\x20first\x20to\x20validate).':n&&n['length']>0x0?'Context\x20assembled\x20with\x20recent\x20events.\x20Use\x20onchain_transaction\x20with\x20a\x20specific\x20digest\x20to\x20verify\x20any\x20event\x27s\x20tx,\x20or\x20proceed\x20with\x20onchain_operations.':'Context\x20assembled\x20(current\x20state\x20only).\x20Proceed\x20with\x20onchain_operations\x20(consider\x20dry_run=true\x20first\x20to\x20validate).';let w;try{w=collectContextExperience({'action':'assemble_context','objects':h,'events':n,'embedded_history':m?l:undefined,'semantic_summary':q,'context_digest':t,'next_action':v},c);}catch{}return{'action':'assemble_context','objects':h,'events':n,'embedded_history':m?l:undefined,'dependencies':u?i:undefined,'dependency_objects':u?j:undefined,'semantic_summary':q,'context_digest':t,'next_action':v,'flywheel_collected':w};}function collectContextExperience(a,b){const c=extractObjectTypes(a['objects']),d={'intent':'assemble_context','signals':{'object_types':c,'object_count':a['objects']['length'],'has_embedded_history':!!a['embedded_history'],'has_events':!!a['events']&&a['events']['length']>0x0,'context_digest':a['context_digest'],'network':b},'timestamp':Date['now'](),'outcome':'success'};let e=![];try{recordSignature(d),e=!![];}catch{}return{'signature_recorded':e};}function extractObjectTypes(a){const b=new Set();for(const c of a){const d=c?.['data']??c,e=d?.['type'];if(typeof e==='string'){const f=e['match'](/::(\w+)$/);f&&b['add'](f[0x1]);}}return Array['from'](b);}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;}function safeExtractAddressFields(a){if(!a||typeof a!=='object')return[];try{return extractAddressFields(a);}catch{return[];}}function extractEmbeddedHistory(a){const b={};for(const c of a){const d=c?.['data']??c,e=c?.['object']??d?.['object'];if(!e)continue;const f=d?.['type']??'',g={};f['includes']('Progress')&&d?.['session']?.['forwards']&&(g['operation_history']=d['session']['forwards']['map'](h=>({'operation':h['forward'],'operator':h['who'],'accomplished':h['accomplished'],'time':h['time'],'message':h['msg']})),g['next_node']=d['session']?.['next_node'],g['threshold']=d['session']?.['threshold']),f['includes']('Order')&&(d?.['dispute']&&Array['isArray'](d['dispute'])&&d['dispute']['length']>0x0&&(g['disputes']=d['dispute']),d?.['claimed_by']&&(g['claimed_by']=d['claimed_by']),d?.['progress']&&(g['progress_object']=d['progress'])),f['includes']('Service')&&d?.['sales']&&(g['sale_count']=Array['isArray'](d['sales'])?d['sales']['length']:0x0),Object['keys'](g)['length']>0x0&&(b[e]=g);}return b;}
|
|
@@ -154,6 +154,13 @@ export declare function handleMerchantGuide(v: MerchantGuideInput): Promise<{
|
|
|
154
154
|
fix: string | undefined;
|
|
155
155
|
}[];
|
|
156
156
|
deploy_time_checks: string[];
|
|
157
|
+
recipient_design_guidance: {
|
|
158
|
+
id: "entity" | "signer" | "submitted_object" | "constrained_submission";
|
|
159
|
+
move_recipient: string;
|
|
160
|
+
semantics: string;
|
|
161
|
+
required_constraints: string[];
|
|
162
|
+
finding_if_unmet: string | undefined;
|
|
163
|
+
}[] | undefined;
|
|
157
164
|
};
|
|
158
165
|
game_theory: {
|
|
159
166
|
summary: string;
|