@wowok/agent-mcp 3.3.0 → 3.3.2
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/dist/chain-semantics/field-capability.js +1 -1
- package/dist/chain-semantics/freeze-map.js +1 -1
- package/dist/chain-semantics/fund-flow.js +1 -1
- package/dist/chain-semantics/guard-verbs.js +1 -1
- package/dist/chain-semantics/object-graph.js +1 -1
- package/dist/composition/audit.d.ts +5 -0
- package/dist/composition/audit.js +1 -1
- package/dist/composition/blueprint-view.d.ts +0 -1
- package/dist/composition/blueprint-view.js +1 -1
- package/dist/composition/compile.d.ts +4 -2
- package/dist/composition/compile.js +1 -1
- package/dist/composition/inflight.d.ts +8 -4
- package/dist/composition/inflight.js +1 -1
- package/dist/customer/industry-risks.js +1 -1
- package/dist/customer/user-preferences.js +1 -1
- package/dist/extensions/business-modules.d.ts +7 -2
- package/dist/extensions/business-modules.js +1 -1
- package/dist/extensions/industry-audit.spec.js +1 -1
- package/dist/extensions/industry-pack.d.ts +3 -2
- package/dist/extensions/industry-pack.js +1 -1
- package/dist/extensions/modes.js +1 -1
- package/dist/graph/onchain/project-relationship.js +1 -1
- package/dist/knowledge/acquisition-flywheel.js +1 -1
- package/dist/knowledge/allocation-ledger.d.ts +4 -1
- package/dist/knowledge/allocation-ledger.js +1 -1
- package/dist/knowledge/allocation-puzzle.d.ts +1 -0
- package/dist/knowledge/allocation-puzzle.js +1 -1
- package/dist/knowledge/allocation-risk.d.ts +1 -1
- package/dist/knowledge/allocation-risk.js +1 -1
- package/dist/knowledge/arb-fund-facts.d.ts +5 -0
- package/dist/knowledge/arb-fund-facts.js +1 -1
- package/dist/knowledge/audit-rules.d.ts +4 -3
- package/dist/knowledge/audit-rules.js +1 -1
- package/dist/knowledge/baselines/rules/plan.json +48 -2
- package/dist/knowledge/baselines/rules/reward.json +1 -1
- package/dist/knowledge/builtin-templates.d.ts +9 -1
- package/dist/knowledge/builtin-templates.js +1 -1
- package/dist/knowledge/discount-threshold.js +1 -1
- package/dist/knowledge/guard-bindings.js +1 -1
- package/dist/knowledge/guard-design-patterns.js +1 -1
- package/dist/knowledge/guard-field-cognition.js +1 -1
- package/dist/knowledge/guard-lint.js +1 -1
- package/dist/knowledge/guard-submission-brief.d.ts +5 -0
- package/dist/knowledge/guard-submission-brief.js +1 -1
- package/dist/knowledge/guard-submission-prompt.d.ts +2 -1
- package/dist/knowledge/guard-submission-prompt.js +1 -1
- package/dist/knowledge/guard-templates.d.ts +1 -1
- package/dist/knowledge/guard-templates.js +1 -1
- package/dist/knowledge/industry-generalizer.js +1 -1
- package/dist/knowledge/industry-registry.js +1 -1
- package/dist/knowledge/industry-strategy.js +1 -1
- package/dist/knowledge/reward-ledger.js +1 -1
- package/dist/knowledge/reward-puzzle.d.ts +1 -1
- package/dist/knowledge/reward-risk.d.ts +1 -1
- package/dist/knowledge/scenario-modes.d.ts +2 -2
- package/dist/knowledge/scenario-modes.js +1 -1
- package/dist/knowledge/scenario-topology.js +1 -1
- package/dist/knowledge/strategy-manuals.js +1 -1
- package/dist/knowledge/template-index.d.ts +19 -0
- package/dist/knowledge/template-index.js +1 -0
- package/dist/knowledge/template-loader.d.ts +36 -0
- package/dist/knowledge/template-loader.js +1 -1
- package/dist/knowledge/template-registry.js +1 -1
- package/dist/knowledge/template-scanner.d.ts +7 -0
- package/dist/knowledge/template-scanner.js +1 -1
- package/dist/knowledge/tool-constraints.js +1 -1
- package/dist/knowledge/workflow-guidance.js +1 -1
- package/dist/monitor/MonitorLoop.js +1 -1
- package/dist/participation/radar-core.d.ts +1 -0
- package/dist/participation/radar-core.js +1 -1
- package/dist/persona/defaults.js +1 -1
- package/dist/persona/topology-focus.js +1 -1
- package/dist/playbooks/service-build/business-puzzle.js +1 -1
- package/dist/playbooks/service-build/game-theory.d.ts +4 -1
- package/dist/playbooks/service-build/game-theory.js +1 -1
- package/dist/playbooks/service-build/machine-panorama.js +1 -1
- package/dist/playbooks/service-build/merchant-guide.d.ts +25 -1
- package/dist/playbooks/service-build/merchant-guide.js +1 -1
- package/dist/playbooks/service-build/migration-planner.js +1 -1
- package/dist/playbooks/service-build/object-panorama.js +1 -1
- package/dist/playbooks/service-build/participation-radar.js +1 -1
- package/dist/playbooks/service-build/pipeline-actions.d.ts +4 -1
- 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/service-panorama.d.ts +4 -0
- package/dist/playbooks/service-build/service-panorama.js +1 -1
- package/dist/playbooks/service-build/service-quote.js +1 -1
- package/dist/relationship/derivation.d.ts +1 -1
- package/dist/review/index.js +1 -1
- package/dist/rules.js +1 -1
- package/dist/safety/confirm-gate.js +1 -1
- package/dist/schema/benchmark-migration/index.d.ts +35 -0
- package/dist/schema/benchmark-migration/index.js +1 -1
- package/dist/schema/call/allocation.d.ts +46 -3
- package/dist/schema/call/allocation.js +1 -1
- package/dist/schema/call/contact.js +1 -1
- package/dist/schema/call/guard.js +1 -1
- package/dist/schema/call/handler.js +1 -1
- package/dist/schema/call/order.js +1 -1
- package/dist/schema/call/progress.d.ts +6 -3
- package/dist/schema/call/progress.js +1 -1
- package/dist/schema/call/repository.js +1 -1
- package/dist/schema/call/reward.d.ts +2 -2
- package/dist/schema/call/reward.js +1 -1
- package/dist/schema/call/semantic.js +1 -1
- package/dist/schema/call/service.d.ts +8 -4
- package/dist/schema/call/service.js +1 -1
- package/dist/schema/common/index.js +1 -1
- package/dist/schema/goal/index.d.ts +54 -0
- package/dist/schema/goal/planning.d.ts +86 -0
- package/dist/schema/goal/planning.js +1 -1
- package/dist/schema/local/index.d.ts +39 -0
- package/dist/schema/local/index.js +1 -1
- package/dist/schema/operations.d.ts +20 -5
- package/dist/schema/operations.js +1 -1
- package/dist/schema/query/bi.d.ts +2 -0
- package/dist/schema/query/bi.js +1 -1
- package/dist/schema/query/index.d.ts +24 -12
- package/dist/schema/query/index.js +1 -1
- package/dist/schema/schema-version.d.ts +1 -1
- package/dist/schema/schema-version.js +1 -1
- package/dist/schema/workspace/index.d.ts +9 -0
- package/dist/schema/workspace/index.js +1 -1
- package/dist/schema-query-impl/index.js +1 -1
- package/dist/schemas/account_operation.output.json +28 -3
- package/dist/schemas/benchmark_migration_operation.schema.json +87 -0
- package/dist/schemas/goal_operation.schema.json +94 -0
- package/dist/schemas/index.json +1 -1
- package/dist/schemas/onchain_operations.output.json +1 -1
- package/dist/schemas/onchain_operations.schema.json +409 -119
- package/dist/schemas/onchain_operations_allocation.schema.json +290 -6
- 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 +3 -3
- package/dist/schemas/onchain_operations_gen_passport.schema.json +1 -1
- package/dist/schemas/onchain_operations_guard.schema.json +63 -63
- package/dist/schemas/onchain_operations_machine.schema.json +1 -1
- package/dist/schemas/onchain_operations_order.schema.json +2 -2
- package/dist/schemas/onchain_operations_progress.schema.json +7 -3
- package/dist/schemas/onchain_operations_proof.schema.json +1 -1
- package/dist/schemas/onchain_operations_repository.schema.json +2 -2
- package/dist/schemas/onchain_operations_reward.schema.json +8 -8
- package/dist/schemas/onchain_operations_service.schema.json +20 -18
- package/dist/schemas/onchain_operations_treasury.schema.json +7 -7
- package/dist/schemas/query_toolkit.output.json +67 -53
- package/dist/schemas/workflow_operation.schema.json +1 -1
- package/dist/schemas/workspace_operation.output.json +23 -3
- package/dist/schemas/workspace_operation.schema.json +3 -3
- package/dist/tools/handlers/benchmark-migration.js +1 -1
- package/dist/tools/handlers/config.js +1 -1
- package/dist/tools/handlers/file-export.js +1 -1
- package/dist/tools/handlers/industry-pack.d.ts +1 -0
- package/dist/tools/handlers/industry-pack.js +1 -1
- package/dist/tools/handlers/local.js +1 -1
- package/dist/tools/handlers/onchain.d.ts +24 -0
- package/dist/tools/handlers/onchain.js +1 -1
- package/dist/tools/handlers/query.js +1 -1
- package/dist/tools/handlers/review-chain.d.ts +1 -1
- package/dist/tools/handlers/review-chain.js +1 -1
- package/dist/tools/handlers/schema-query.js +1 -1
- package/dist/tools/handlers/workflow.js +1 -1
- package/dist/tools/handlers/workspace.js +1 -1
- package/dist/tools/registry/agent.js +1 -1
- package/dist/tools/registry/local.js +1 -1
- package/dist/tools/wip-deploy-assist.js +1 -1
- package/dist/tools/wrap.js +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
import{strictParse,WatchQueryOperationsSchema,OnchainTableDataSchema,OnchainEventsInputSchema,ProtocolInfoQuerySchema}from'../../schema/index.js';import{checkUpgrade}from'../upgrade-check.js';import{getUniversalTemplate}from'../../knowledge/universal-template.js';import{getGettingStarted}from'../../knowledge/getting-started.js';import{query_local_mark_list,query_account_list,query_local_info_list,query_local_token_list,query_account,GetLocalNamesByAddresses,query_personal,query_table,query_tableItem,queryTableItem_RepositoryData,queryTableItem_PermissionPerm,queryTableItem_RewardRecord,queryTableItem_DemandPresenter,queryTableItem_TreasuryHistory,queryTableItem_MachineNode,queryTableItem_ProgressHistory,queryTableItem_AddressMark,queryTableItem_EntityRegistrar,queryTableItem_EntityLinker,queryTableItem_EntityContact,queryTableItem_ObjectLinkerCore,queryTableItem_ObjectLinkerTx,queryTableItem_EntityOrder,queryOrdersByUser,query_affiliations,query_address_profile,query_address_profiles,objectTypeFromAddress,ObjectType,query_received,queryProtocolInfo,query_events,query_transaction,query_object_history,query_address_activity,query_checkpoint,generateNodeComments,query_object_last_updated,Config,LocalMark}from'@wowok/wowok';import{resolveSupplyChainGraph}from'../../knowledge/supply-chain.js';import{SCENARIO_CHAINS,SCENARIO_BRIDGE_REGISTRY,SCENARIO_TOPOLOGY_VERSION}from'../../knowledge/scenario-topology.js';import{assembleContext}from'../../playbooks/service-build/context-assembly.js';import{buildMachineGraph,fetchMachineNodes}from'../../playbooks/service-build/machine-nodes.js';import{generateBusinessReport}from'../../playbooks/service-build/reverse-mapping.js';import{handleServicePanorama}from'../../playbooks/service-build/service-panorama.js';import{handleServiceQuote}from'../../playbooks/service-build/service-quote.js';import{handleMachinePanorama}from'../../playbooks/service-build/machine-panorama.js';import{handleObjectPanorama}from'../../playbooks/service-build/object-panorama.js';import{handleParticipationRadar}from'../../playbooks/service-build/participation-radar.js';import{handleRelationshipProfile}from'../../playbooks/service-build/relationship-profile.js';import{handleOnchainTopology}from'../../playbooks/service-build/topology-query.js';import{buildUserInjection}from'../../evaluation/injection.js';import{handleReviewPack}from'../../review/index.js';import{buildWorkspaceLists}from'../../knowledge/workspace-lists.js';import{buildAccountMarks}from'../../knowledge/account-marks.js';import{migrationPreflight}from'../../knowledge/migration-preflight.js';import{buildDataSemantic}from'../../schema/call/semantic.js';import{enrichWorkflowGuidance}from'../../knowledge/workflow-guidance.js';import{buildOrderFundFacts}from'../../knowledge/arb-fund-facts.js';import{batchQueryObjectsByIds,fetchServiceOrders,lastUnresolvedInputs,LINKER_RING_LIMIT}from'../../graph/onchain/sdk-batch.js';import{formatChainValue,annotateObjectMonetaryFields,annotateTableItemMonetaryFields,annotateEventsMonetaryFields,annotateBalanceChanges,resolveParentObjectTokenType,convertTokenValue}from'../../knowledge/fund-layer.js';import{normalizeAccountOrMark}from'./messenger.js';function ownerAddrOf(a){if(typeof a==='string')return a;const b=a;if(b&&typeof b==='object'){if(typeof b['AddressOwner']==='string')return b['AddressOwner'];if(typeof b['ObjectOwner']==='string')return b['ObjectOwner'];const c=Object['values'](b)['find'](d=>typeof d==='string'&&d['length']>0x14);if(typeof c==='string')return c;}return null;}const serviceCoinTypeCache=new Map();async function coinTypesOfServices(a,b){const c=new Map();if(!a||a['length']===0x0)return c;const d=[];for(const e of a){const f=(b??'')+'|'+e['toLowerCase'](),h=serviceCoinTypeCache['get'](f);if(h!==undefined)c['set'](e,h);else d['push'](e);}if(d['length']===0x0)return c;try{const i=await batchQueryObjectsByIds(d,b);for(const j of i){if(!j?.['object'])continue;const k=j?.['type_raw']??j?.['type']??'',l=k['match'](/<(.+)>$/);if(!l)continue;serviceCoinTypeCache['set']((b??'')+'|'+String(j['object'])['toLowerCase'](),l[0x1]),c['set'](j['object'],l[0x1]);}}catch{}return c;}async function mergeServiceAnalysis(a,b){const c=a?.['object'],d=a?.['kind']==='Service'||c&&(c['type']==='Service'||(c['type_raw']??'')['includes']('::service::'));if(!d||!a)return;let e=null;try{const s=await query_object_last_updated({'object':a['address'],'network':b['network']});s?.['timestamp_ms']&&(e={'timestamp_ms':s['timestamp_ms'],'digest':s['digest'],'sender':s['sender']});}catch{}const f=a?.['reverse_core'],g=a?.['reverse_tx'],h=Array['isArray'](f?.['items'])?f['items']['length']:0x0,i=Array['isArray'](g?.['items'])?g['items']['length']:0x0,j=(i>0x0?g['items']:[])['filter'](t=>objectTypeFromAddress(t?.['who'])===ObjectType['Order']),k=j['length'],l=k>=LINKER_RING_LIMIT,m=Array['isArray'](a?.['reputation']?.['votes'])?a['reputation']['votes']:[],n=c?.['type_raw']??c?.['type']??'',o=n['match'](/<(.+)>$/),p=o?o[0x1]:null,q=p?(p['split']('::')['pop']()??p)['toUpperCase']():null,r=Array['isArray'](c?.['sales'])?c['sales']:[];a['service_analysis']={'description':c?.['description']??null,'sales_count':r['length'],'live_sales_count':r['filter'](t=>t&&!t['suspension'])['length'],'paused_sales_count':r['filter'](t=>t&&t['suspension'])['length'],'orders_count':k,'orders_count_truncated':l,'like_count':m['filter'](t=>t&&t['like'])['length'],'dislike_count':m['filter'](t=>t&&t['dislike'])['length'],'favor_count':m['filter'](t=>t&&t['favor'])['length'],'votes':m['map'](t=>({'who':t?.['who']??null,'like':!!t?.['like'],'dislike':!!t?.['dislike'],'favor':!!t?.['favor'],'time':t?.['time']??null})),'coin_type':p,'token_symbol':q,'location':c?.['location']??null,'bPublished':c?.['bPublished']??null,'bPaused':c?.['bPaused']??null,'related_core_count':h,'related_tx_count':i,'related_object_count':h+i,'onchain_last_updated':e};}export function buildProfileFollowUps(a){if(!a||typeof a!=='object')return[];const b=typeof a['address']==='string'?a['address']:undefined;if(!b)return[];const c=a['kind']==='user'||!a['is_system_singleton']&&!a['object'],d=[];if(c){const e=Array['isArray'](a['permission_membership']?.['items'])?a['permission_membership']['items']:[],f=Array['isArray'](a['order_membership']?.['items'])?a['order_membership']['items']:[];e['length']>0x0&&d['push']({'label':'Permission\x20organizations\x20('+e['length']+')','detail':'Expand\x20each\x20Permission\x20the\x20address\x20belongs\x20to\x20—\x20owner/admin/entity\x20standing\x20and\x20what\x20the\x20org\x20governs.','call':{'query_type':'onchain_objects','objects':e['map'](g=>g['who'])['filter'](Boolean)}}),f['length']>0x0&&d['push']({'label':'Order\x20footprint\x20('+f['length']+')','detail':'The\x20orders\x20this\x20address\x20participates\x20in\x20(buyer\x20vs\x20operator\x20roles).','call':{'query_type':'onchain_table_item_entity_order','address':b}}),d['push']({'label':'Public\x20personal\x20profile','detail':'Social/IM\x20links,\x20public\x20info\x20records,\x20voting\x20history,\x20referrer.','call':{'query_type':'onchain_personal_profile','address':b}}),d['push']({'label':'Reverse\x20map','detail':'Related\x20objects\x20and\x20the\x20deterministic\x20business\x20report\x20for\x20this\x20address.','call':{'query_type':'reverse_map','context_objects':[b]}});}else a['object']&&d['push']({'label':'Full\x20object\x20body','detail':'The\x20complete\x20on-chain\x20object\x20fields\x20(one\x20targeted\x20read).','call':{'query_type':'onchain_objects','objects':[b]}}),d['push']({'label':'Reverse\x20map','detail':'Related\x20objects\x20and\x20the\x20deterministic\x20business\x20report.','call':{'query_type':'reverse_map','context_objects':[b]}});return d['push']({'label':'Recent\x20on-chain\x20activity','detail':'Newest\x20transactions\x20touching\x20this\x20address.','call':{'query_type':'onchain_address_activity','address':b}}),d['slice'](0x0,0x3);}async function annotateAccountBalance(a,b){if(!a||typeof a!=='object')return;const e={},f=(j,k)=>{if(j===null||j===undefined)return undefined;if(typeof j!=='string'&&typeof j!=='number'&&typeof j!=='bigint')return undefined;if(typeof k!=='string'||!k)return undefined;return formatChainValue(j,k,b);},g=a['balance'];if(g&&typeof g==='object'){const j=g['coinType'],k=await f(g['totalBalance'],j);if(k)e['balance.totalBalance']=k;if(g['lockedBalance']!==undefined){const l=await f(g['lockedBalance'],j);if(l)e['balance.lockedBalance']=l;}}const h=a['coin']?.['data'];if(Array['isArray'](h))for(let m=0x0;m<h['length'];m++){const n=h[m],o=await f(n?.['balance'],n?.['coinType']);if(o)e['coin.data['+m+'].balance']=o;}if(Object['keys'](e)['length']>0x0){if(b)for(const p of Object['keys'](e)){const q=e[p];e[p]={...q,'text':q['text']+'\x20—\x20network:\x20'+b};}a['_money_display']=e;}}export function balanceScopeNote(a){return a?'The\x20balance\x20figure\x20reflects\x20the\x20aggregated\x20total\x20only;\x20the\x20coin\x20list\x20below\x20is\x20just\x20the\x20FIRST\x20PAGE\x20(top\x205)\x20'+'of\x20independently\x20owned\x20Coin\x20objects\x20—\x20a\x20refund\x20can\x20land\x20as\x20its\x20own\x20Coin\x20object\x20beyond\x20this\x20page.\x20'+'Verify\x20fund\x20arrival\x20via\x20the\x20transaction\x20digest\x20(onchain_transaction)\x20or\x20the\x20full\x20coin-object\x20listing\x20'+'(coin={cursor,limit})\x20before\x20drawing\x20conclusions.':'The\x20balance\x20figure\x20reflects\x20the\x20aggregated\x20total\x20only;\x20independently\x20owned\x20Coin\x20objects\x20are\x20not\x20'+'enumerated\x20here\x20—\x20verify\x20fund\x20arrival\x20via\x20the\x20transaction\x20digest\x20or\x20a\x20coin-objects\x20query\x20before\x20'+'drawing\x20conclusions.';}const NETWORK_FIELD_BY_QUERY={'account_balance':'network','onchain_personal_profile':'network','onchain_objects':'network','onchain_received':'network','onchain_transaction':'network','onchain_block':'network','onchain_object_history':'network','onchain_last_updated':'network','onchain_address_activity':'network','token_value_convert':'network','address_profile':'network','address_profiles':'network','service_supply_chain':'network','assemble_context':'context_network','reverse_map':'context_network','service_panorama':'context_network','service_quote':'context_network','machine_panorama':'context_network','object_panorama':'context_network','review_pack':'context_network','participation_radar':'context_network','relationship_profile':'context_network','onchain_topology':'context_network','workspace_lists':'context_network','marks_of_account':'context_network'};function requestedNetworkForQuery(a,b){const c=NETWORK_FIELD_BY_QUERY[b];if(!c)return undefined;const d=a[c];return typeof d==='string'&&d['length']>0x0?d:undefined;}function normalizeNetworkFieldAlias(a){const b=a['query_type'];if(typeof b!=='string')return;const c=NETWORK_FIELD_BY_QUERY[b];if(!c)return;const d=c==='network'?'context_network':'network';a[c]===undefined&&a[d]!==undefined&&(a[c]=a[d],delete a[d]);}export async function handleWatchQueryOperations(a){let c=a;if(a!==null&&typeof a==='object'&&!Array['isArray'](a)){const h={...a};normalizeNetworkFieldAlias(h),c=h;}const d=strictParse(WatchQueryOperationsSchema,c,'watch_and_query\x20input');let e;switch(d['query_type']){case'local_mark_list':{const j=await query_local_mark_list(d['filter']||{});e={'query_type':'local_mark_list','result':j};break;}case'account_list':{const k=await query_account_list(d['filter']);e={'query_type':'account_list','result':k};break;}case'local_info_list':{const l=await query_local_info_list(d['filter']);e={'query_type':'local_info_list','result':l};break;}case'token_list':{const m=await query_local_token_list(d['filter']||{});e={'query_type':'token_list','result':m};break;}case'account_balance':{const n=await query_account({'name_or_address':d['name_or_address'],'token_type':d['token_type'],'balance':d['balance'],'coin':d['coin'],'network':d['network']}),o=d['network']??await Config['Instance']()['network_get']();await annotateAccountBalance(n,o);let p=![];if(n['balance']&&!d['coin']&&!n['object']&&!n['hint'])try{const q=await query_account({'name_or_address':d['name_or_address'],'coin':{'cursor':null,'limit':0x5},'token_type':d['token_type'],'network':d['network']});q['coin']&&(n['coin']=q['coin'],p=!![]);}catch{}n['_balance_scope_note']=balanceScopeNote(p),e={'query_type':'account_balance','result':n};break;}case'local_names':{const r=await GetLocalNamesByAddresses(d['addresses']);e={'query_type':'local_names','result':r};break;}case'onchain_personal_profile':{const s=await query_personal({'account':d['account'],'no_cache':d['no_cache'],'network':d['network']});e={'query_type':'onchain_personal_profile','result':s};break;}case'onchain_objects':{const t=d['no_cache']??!![],u=await batchQueryObjectsByIds(d['objects'],d['network'],t),v=lastUnresolvedInputs(),w={'objects':u,'_read_freshness':{'source':t?'live':'session_cache','no_cache':t,'fetched_at':new Date()['toISOString'](),'note':t?'Forced-fresh\x20read.\x20This\x20is\x20the\x20DEFAULT\x20because\x20a\x20stale\x20value\x20here\x20can\x20invert\x20a\x20fund-movement\x20conclusion.':'Session\x20cache\x20was\x20used\x20(no_cache:false).\x20Pass\x20no_cache:true\x20before\x20concluding\x20that\x20money\x20did\x20or\x20did\x20not\x20move.'},...u['length']===0x0&&v['length']>0x0?{'_empty_reason':{'kind':'unresolved_inputs','unresolved':v,'note':'These\x20inputs\x20resolved\x20to\x20neither\x20a\x20registered\x20LocalMark\x20nor\x20a\x20valid\x20address\x20on\x20network\x20\x27'+(d['network']??'current')+'\x27.\x20LocalMark\x20names\x20are\x20NETWORK-SCOPED\x20—\x20an\x20object\x20created\x20on\x20testnet\x20is\x20invisible\x20on\x20localnet/mainnet.\x20Either\x20register\x20the\x20mark\x20here\x20(local_mark_operation)\x20or\x20pass\x20the\x20full\x200x\x20address.\x20This\x20is\x20NOT\x20evidence\x20that\x20the\x20objects\x20are\x20absent\x20on\x20chain.'}}:{}};if(w&&w['objects']&&Array['isArray'](w['objects'])){w['objects']=w['objects']['map'](x=>{if(x&&x['data']&&x['data']['type']==='Guard'&&x['data']['root'])try{const y=generateNodeComments(x['data']['root']);return{...x,'_guard_node_comments':y};}catch(z){return x;}return x;}),w['objects']=w['objects']['map'](x=>{if(x&&x['data']&&x['data']['type']==='Progress'&&x['data']['current']===''){const y=x['data']['machine'],z=x['data']['task'];return{...x,'_diagnostic':{'issue':'Progress.current\x20is\x20empty\x20—\x20order\x20workflow\x20is\x20stuck\x20at\x20the\x20initial\x20state','cause':'The\x20Machine\x27s\x20entry\x20node\x20(prev_node=\x27\x27)\x20likely\x20has\x20no\x20forwards\x20defined.\x20'+'When\x20Progress\x20starts,\x20it\x20looks\x20up\x20the\x20entry\x20node\x27s\x20forwards\x20to\x20determine\x20'+'the\x20next\x20node.\x20Without\x20forwards,\x20Progress\x20cannot\x20advance\x20and\x20the\x20order\x20'+'is\x20permanently\x20stuck.','machine_object_id':y??null,'bound_order_id':z??null,'fix':['1.\x20Query\x20the\x20Machine\x20object\x20(use\x20query_toolkit\x20with\x20query_type=\x27onchain_objects\x27\x20and\x20objects=['+JSON['stringify'](y)+']).','2.\x20Inspect\x20node.pairs\x20for\x20the\x20entry\x20node\x20(prev_node=\x27\x27).','3.\x20If\x20forwards\x20is\x20empty:\x20this\x20is\x20the\x20root\x20cause.\x20The\x20Machine\x20must\x20be\x20republished\x20with\x20at\x20least\x20one\x20forward\x20on\x20the\x20entry\x20node.','4.\x20To\x20republish:\x20clone\x20the\x20Machine\x20nodes,\x20add\x20a\x20forward\x20to\x20the\x20entry\x20node\x27s\x20pairs,\x20then\x20create\x20a\x20new\x20Machine\x20(Machine\x20nodes\x20are\x20immutable\x20after\x20publish\x20—\x20see\x20P0-2\x20schema\x20validation\x20that\x20now\x20blocks\x20this).','5.\x20Rebind\x20the\x20new\x20Machine\x20to\x20the\x20Service\x20(service.machine\x20field)\x20and\x20create\x20a\x20new\x20Order\x20to\x20test.'],'reference':'P0-2\x20schema\x20refinement\x20in\x20MachineNodePairSchema\x20ensures\x20new\x20Machines\x20cannot\x20be\x20published\x20with\x20empty\x20entry-node\x20forwards.\x20This\x20diagnostic\x20catches\x20legacy\x20Machines\x20that\x20predate\x20the\x20fix.'}};}return x;});for(const x of w['objects']){const y=x?.['data']??x;if((x?.['type']??y?.['type'])!=='Progress')continue;const z=x?.['object']??y?.['object'];if(!z)continue;try{const A=await enrichWorkflowGuidance({'progressRef':z,'network':d['network'],'noCache':d['no_cache']});if(A?.['guidance']){x['_workflow_guidance']=A['guidance'];if(A['text'])x['_workflow_guidance_text']=A['text'];}}catch{}}for(const B of w['objects']){const C=B?.['data']??B;if((B?.['type']??C?.['type'])!=='Arb')continue;const D=B?.['object']??C?.['object'];if(!D)continue;try{const E=await buildOrderFundFacts({'arbRef':D,'network':d['network'],'noCache':t});E&&(B['_order_fund_facts']=E['structured'],B['_order_fund_facts_text']=E['text']);}catch{}}for(const F of w['objects']){try{await annotateObjectMonetaryFields(F,d['network']);}catch{}}}e={'query_type':'onchain_objects','result':w};break;}case'onchain_received':{const G=await query_received({'name_or_address':normalizeAccountOrMark(d['name_or_address']),'type':d['type'],'cursor':d['cursor'],'limit':d['limit'],'no_cache':d['no_cache'],'network':d['network']}),H=G;if(H&&typeof H==='object'&&typeof H['balance']==='bigint'){const I=H['token_type'];H['balance']=H['balance']['toString']();if(Array['isArray'](H['received']))for(const J of H['received']){J&&typeof J['balance']==='bigint'&&(J['balance']=J['balance']['toString']());}if(I)try{const K={'balance':await formatChainValue(H['balance'],I,d['network'])};if(Array['isArray'](H['received']))for(let L=0x0;L<H['received']['length'];L++){const M=H['received'][L]?.['balance'];M!==undefined&&M!==null&&(K['received['+L+'].balance']=await formatChainValue(M,I,d['network']));}H['_money_display']=K;}catch{}}e={'query_type':'onchain_received','result':H};break;}case'onchain_transaction':{const N=await query_transaction({'digest':d['digest'],'no_cache':d['no_cache'],'network':d['network']});try{await annotateBalanceChanges(N?.['balance_changes'],d['network']);}catch{}e={'query_type':'onchain_transaction','result':N};break;}case'onchain_block':{const O=await query_checkpoint({'block':d['block'],'network':d['network']});e={'query_type':'onchain_block','result':O};break;}case'onchain_object_history':{const P=await query_object_history({'object':d['object'],'cursor':d['cursor'],'limit':d['limit'],'order':d['order'],'no_cache':d['no_cache'],'network':d['network']});e={'query_type':'onchain_object_history','result':P};break;}case'onchain_last_updated':{const Q=d['objects']??[],R=await Promise['allSettled'](Q['map'](T=>query_object_last_updated({'object':T,'network':d['network']}))),S=Q['map']((T,U)=>{const V=R[U],W=V['status']==='fulfilled'?V['value']:null;return{'object':T,'timestamp_ms':W?.['timestamp_ms']?String(W['timestamp_ms']):null,'digest':W?.['digest']??null,'sender':W?.['sender']??null};});e={'query_type':'onchain_last_updated','result':{'items':S}};break;}case'onchain_address_activity':{const T=typeof d['name_or_address']==='string'?d['name_or_address']:d['name_or_address']['name_or_address'],U=await query_address_activity({'name_or_address':T,'direction':d['direction'],'cursor':d['cursor'],'limit':d['limit'],'order':d['order'],'no_cache':d['no_cache'],'network':d['network']});e={'query_type':'onchain_address_activity','result':U};break;}case'token_value_convert':{const V=d['raw']!==undefined,W=d['unit']!==undefined;if(V===W)throw new Error('token_value_convert:\x20provide\x20EXACTLY\x20ONE\x20of\x20\x27raw\x27\x20(u64\x20smallest\x20units\x20→\x20unit\x20value)\x20'+('or\x20\x27unit\x27\x20(unit\x20value\x20→\x20u64\x20raw).\x20Received\x20raw='+JSON['stringify'](d['raw'])+',\x20')+('unit='+JSON['stringify'](d['unit'])+'.'));const X=await convertTokenValue(d['token_type'],V?{'raw':d['raw']}:{'unit':d['unit']},d['network']);e={'query_type':'token_value_convert','result':X};break;}case'address_profile':{const Y=await query_address_profile({'address':d['address'],'no_cache':d['no_cache'],'network':d['network']});await mergeServiceAnalysis(Y,{'no_cache':d['no_cache'],'network':d['network']});Y&&typeof Y==='object'&&(Y['follow_ups']=buildProfileFollowUps(Y));e={'query_type':'address_profile','result':Y};break;}case'address_profiles':{const Z=await query_address_profiles({'addresses':d['addresses'],'no_cache':d['no_cache'],'network':d['network']});await Promise['all'](Z['map'](a0=>mergeServiceAnalysis(a0,{'no_cache':d['no_cache'],'network':d['network']})));for(const a0 of Z??[]){a0&&typeof a0==='object'&&(a0['follow_ups']=buildProfileFollowUps(a0));}e={'query_type':'address_profiles','result':Z};break;}case'service_supply_chain':{const a1=await resolveSupplyChainGraph(typeof d['address']==='string'?d['address']:d['address']?.['name_or_address']??String(d['address']),d['network']);e={'query_type':'service_supply_chain','result':a1};break;}case'assemble_context':{e={'query_type':'assemble_context','result':await assembleContext(d)};break;}case'reverse_map':{if(!d['context_objects']||d['context_objects']['length']===0x0)throw new Error('reverse_map\x20requires\x20\x27context_objects\x27\x20—\x20an\x20array\x20of\x20object\x20IDs\x20or\x20LocalMark\x20names\x20(include\x20the\x20Service;\x20add\x20Machine/Allocation\x20for\x20refund-path\x20detection).');const a2=d['context_network']??await Config['Instance']()['network_get'](),a3=await batchQueryObjectsByIds(d['context_objects'],a2,!![]);let a4,a5,a6=null;{const a8=a3['find'](aa=>{const ab=aa?.['machine']??aa?.['data']?.['machine'];return typeof ab==='string'&&/^0x[0-9a-fA-F]/['test'](ab);});if(a8)try{a6=String(a8['object']??a8['id']??'');const aa=await LocalMark['Instance']()['list']({'address':a6});if(aa[0x0]?.['name'])a8['name']=aa[0x0]['name'];}catch{}const a9=a8?String(a8['machine']??a8['data']?.['machine']):null;if(a9)try{const ab=a3['some'](ad=>String(ad?.['object']??ad?.['id']??'')['toLowerCase']()===a9['toLowerCase']());!ab&&a3['push'](...await batchQueryObjectsByIds([a9],a2,!![]));const ac=await fetchMachineNodes(a9,a2);a4=ac['map'](ad=>({'name':String(ad?.['name']??'')}))['filter'](ad=>ad['name']['length']>0x0),a5=buildMachineGraph(ac)['edges']['map'](ad=>({'from':ad['from'],'to':ad['to']}));}catch{}}let a7;if(a6)try{const ad=await fetchServiceOrders(a6,a2),ae=(ad?.['items']??[])['slice'](0x0,0xa)['map'](af=>typeof af?.['who']==='string'?af['who']:'')['filter'](af=>af!=='');if(ae['length']>0x0){const af=await batchQueryObjectsByIds(ae,a2,!![]);a7=af['filter'](ag=>ag?.['type']===ObjectType['Order'])['map'](ag=>({'id':ag['object'],'created_at_ms':Number(ag?.['time'])||undefined,'claimed_by':ag?.['claimed_by']??null}));}}catch{}e={'query_type':'reverse_map','result':{'action':'reverse_map','objects_queried':a3['length'],'report':generateBusinessReport({'objects':a3,'machine_nodes':a4,'machine_edges':a5,'orders':a7,'now_ms':Date['now'](),'order_amount':d['reverse_order_amount']})}};break;}case'service_panorama':e={'query_type':'service_panorama','result':await handleServicePanorama(d)};break;case'service_quote':e={'query_type':'service_quote','result':await handleServiceQuote(d)};break;case'machine_panorama':e={'query_type':'machine_panorama','result':await handleMachinePanorama(d)};break;case'object_panorama':e={'query_type':'object_panorama','result':await handleObjectPanorama(d)};break;case'review_pack':e={'query_type':'review_pack','result':await handleReviewPack(d)};break;case'participation_radar':e={'query_type':'participation_radar','result':await handleParticipationRadar(d)};break;case'relationship_profile':e={'query_type':'relationship_profile','result':await handleRelationshipProfile(d)};break;case'onchain_topology':e={'query_type':'onchain_topology','result':await handleOnchainTopology(d,undefined,await buildUserInjection(d['context_account']?.['toLowerCase']()))};break;case'workspace_lists':e={'query_type':'workspace_lists','result':await buildWorkspaceLists({'network':d['context_network'],'no_cache':d['no_cache'],'account':d['account'],'light':d['light']})};break;case'marks_of_account':e={'query_type':'marks_of_account','result':await buildAccountMarks({'network':d['context_network'],'no_cache':d['no_cache'],'account':d['account'],'light':d['light']})};break;case'migration_preflight':e={'query_type':'migration_preflight','result':await migrationPreflight({'account':d['account'],'source_network':d['source_network'],'target_network':d['target_network'],'no_cache':d['no_cache']})};break;case'scenario_topology':{const ag=d['chain_id'];e={'query_type':'scenario_topology','result':{'version':SCENARIO_TOPOLOGY_VERSION,'chains':ag?SCENARIO_CHAINS['filter'](ah=>ah['id']===ag):SCENARIO_CHAINS,'bridges':SCENARIO_BRIDGE_REGISTRY}};break;}default:throw new Error('Unknown\x20query\x20type.\x20Valid\x20query_types\x20are:\x20\x22local_mark_list\x22,\x20\x22account_list\x22,\x20\x22local_info_list\x22,\x20\x22token_list\x22,\x20\x22account_balance\x22,\x20\x22local_names\x22,\x20\x22onchain_personal_profile\x22,\x20\x22onchain_objects\x22,\x20\x22onchain_received\x22,\x20\x22onchain_transaction\x22,\x20\x22onchain_object_history\x22,\x20\x22onchain_last_updated\x22,\x20\x22onchain_address_activity\x22,\x20\x22token_value_convert\x22,\x20\x22address_profile\x22,\x20\x22address_profiles\x22,\x20\x22service_supply_chain\x22,\x20\x22relationship_profile\x22,\x20\x22onchain_topology\x22,\x20\x22workspace_lists\x22,\x20\x22marks_of_account\x22,\x20\x22migration_preflight\x22.\x20For\x20table\x20queries,\x20use\x20the\x20\x22onchain_table_data\x22\x20tool.');}const f=requestedNetworkForQuery(d,e['query_type']);let g;if(NETWORK_FIELD_BY_QUERY[e['query_type']]){const ah=f??await Config['Instance']()['network_get']();g={'network':ah,'network_source':f?'explicit':'default'};}return{'content':[{'type':'text','text':JSON['stringify']({...g,'result':e})}],'structuredContent':{'result':e,...queryPayloadAliases(e),...g??{},'semantic':buildDataSemantic(e,{'operation_type':'query_toolkit','data':d})}};}export function queryPayloadAliases(a){const b=a?.['result'];if(!b||typeof b!=='object')return{};const c={};if(Array['isArray'](b['objects']))c['objects']=b['objects'];if(Array['isArray'](b['received']))c['received']=b['received'];if(b['balance']&&typeof b['balance']==='object')c['balance']=b['balance'];if(Object['keys'](c)['length']===0x0)return{};const d=Object['keys'](c)['filter'](e=>!e['startsWith']('_'));return c['_read_hint']='The\x20\x27result\x27\x20key\x20appears\x20twice\x20by\x20design:\x20structuredContent.result\x20is\x20the\x20per-query_type\x20envelope,\x20'+'so\x20the\x20authoritative\x20path\x20for\x20each\x20field\x20is\x20'+(d['map'](e=>'structuredContent.result.result.'+e)['join']('\x20and\x20')+'.\x20')+('The\x20top-level\x20'+d['join'](',\x20')+'\x20above\x20are\x20additive\x20copies\x20of\x20the\x20same\x20data.'),c;}export async function handleOnchainTableData(a){const b=strictParse(OnchainTableDataSchema,a,'onchain_table_data\x20input');let c;switch(b['query_type']){case'onchain_table':{const d=await query_table({'parent':b['parent'],'cursor':b['cursor'],'limit':b['limit'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table','result':d};break;}case'onchain_table_item_repository_data':{const f=await queryTableItem_RepositoryData({'parent':b['parent'],'name':b['name'],'entity':b['entity'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_repository_data','result':f};break;}case'onchain_table_item_permission_perm':{const g=await queryTableItem_PermissionPerm({'parent':b['parent'],'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_permission_perm','result':g};break;}case'onchain_table_item_reward_record':{const h=await queryTableItem_RewardRecord({'parent':b['parent'],'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});if(h)try{const j=await resolveParentObjectTokenType(b['parent'],b['network']);await annotateTableItemMonetaryFields(h,j,b['network']);}catch{}c={'query_type':'onchain_table_item_reward_record','result':h};break;}case'onchain_table_item_demand_presenter':{const k=await queryTableItem_DemandPresenter({'parent':b['parent'],'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_demand_presenter','result':k};break;}case'onchain_table_item_treasury_history':{const l=await queryTableItem_TreasuryHistory({'parent':b['parent'],'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});if(l)try{const m=await resolveParentObjectTokenType(b['parent'],b['network']);await annotateTableItemMonetaryFields(l,m,b['network']);}catch{}c={'query_type':'onchain_table_item_treasury_history','result':l};break;}case'onchain_table_item_machine_node':{const n=await queryTableItem_MachineNode({'parent':b['parent'],'key':b['key'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_machine_node','result':n};break;}case'onchain_table_item_progress_history':{const p=await queryTableItem_ProgressHistory({'parent':b['parent'],'u64':b['u64'],'no_cache':![],'network':b['network']});c={'query_type':'onchain_table_item_progress_history','result':p};break;}case'onchain_table_item_address_mark':{const q=await queryTableItem_AddressMark({'parent':b['parent'],'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_address_mark','result':q};break;}case'onchain_table_item_entity_registrar':{const s=await queryTableItem_EntityRegistrar({'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_entity_registrar','result':s};break;}case'onchain_table_item_entity_linker':{const t=await queryTableItem_EntityLinker({'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_entity_linker','result':t};break;}case'onchain_table_item_entity_contact':{const u=await queryTableItem_EntityContact({'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_entity_contact','result':u};break;}case'onchain_table_item_entity_order':{const v=await queryTableItem_EntityOrder({'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_entity_order','result':v};break;}case'onchain_orders_of_user':{let w;try{w=await queryOrdersByUser({'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});}catch(x){const y=x instanceof Error?x['message']:String(x);if(/dynamicFieldNotFound/i['test'](y))w=[];else throw x;}c={'query_type':'onchain_orders_of_user','result':w};break;}case'onchain_orders_of_users':{const z=b['addresses']??[],A=[],B=await Promise['allSettled'](z['map'](async M=>{try{const N=await queryOrdersByUser({'address':M,'no_cache':b['no_cache'],'network':b['network']});return{'account':String(M?.['name_or_address']??''),'views':Array['isArray'](N)?N:[]};}catch(O){const P=O instanceof Error?O['message']:String(O);if(/dynamicFieldNotFound/i['test'](P))return{'account':String(M?.['name_or_address']??''),'views':[]};throw O;}})),C=[];for(let M=0x0;M<z['length'];M++){const N=B[M];if(N['status']==='fulfilled')C['push'](N['value']);else{const O=N['reason']instanceof Error?N['reason']['message']:String(N['reason']);A['push'](String(z[M]?.['name_or_address']??'?')+':\x20'+O);}}const D=Array['from'](new Set(C['flatMap'](P=>P['views']['map'](Q=>typeof Q?.['order']?.['object']==='string'?Q['order']['object']:typeof Q?.['order']==='string'?Q['order']:'')['filter'](Boolean)))),E=new Map();try{if(D['length']>0x0){const P=await batchQueryObjectsByIds(D,b['network']);for(const Q of P){if(Q&&Q['type']===ObjectType['Order'])E['set'](Q['object'],Q);}}}catch{A['push']('order\x20details\x20unavailable\x20(non-blocking)');}const F=new Map(),G=new Map(),H=new Map();try{const R=new Set();for(const S of E['values']()){if(S?.['progress'])R['add'](S['progress']);if(S?.['allocation'])R['add'](S['allocation']);}if(R['size']>0x0){const T=await batchQueryObjectsByIds(Array['from'](R),b['network']);for(const U of T){if(!U?.['object'])continue;if(U['type']===ObjectType['Progress']){const V=U?.['current'];F['set'](U['object'],typeof V==='string'&&V!==''?V:null),G['set'](U['object'],Number(U?.['current_time'])||null);}else{if(U['type']===ObjectType['Allocation']){const W=Number(U?.['balance']??0x0);H['set'](U['object'],Number['isFinite'](W)&&W===0x0?'allocated':'pending');}}}}}catch{A['push']('progress/allocation\x20details\x20unavailable\x20(non-blocking)');}const I=new Map();try{const X=await Promise['allSettled'](D['map'](Y=>query_object_last_updated({'object':Y,'network':b['network'],'previous_transaction':E['get'](Y)?.['previousTransaction']??null})));for(let Y=0x0;Y<D['length'];Y++){const Z=X[Y];I['set'](D[Y],Z['status']==='fulfilled'&&Z['value']?.['timestamp_ms']?Number(Z['value']['timestamp_ms'])||null:null);}}catch{A['push']('order\x20updated\x20times\x20unavailable\x20(non-blocking)');}const J=await coinTypesOfServices(Array['from'](new Set(Array['from'](E['values']())['map'](a0=>typeof a0?.['service']==='string'?a0['service']:'')['filter'](Boolean))),b['network']),K=async(a0,a1)=>{if(a1===null||a1===undefined||a1==='')return{'display':'','tip':''};if(!a0)return{'display':a1,'tip':''};try{const a2=await formatChainValue(a1,a0,b['network']);if(a2['precision_known'])return{'display':a2['symbol']?a2['display']+'\x20'+a2['symbol']:a2['display'],'tip':a2['text']};return{'display':a1,'tip':''};}catch{return{'display':a1,'tip':''};}},L=[];for(const a0 of D){const a1=E['get'](a0),a2=C['filter'](a6=>a6['views']['some'](a7=>(typeof a7?.['order']?.['object']==='string'?a7['order']['object']:a7?.['order'])===a0))['map'](a6=>{const a7=a6['views']['find'](a8=>(typeof a8?.['order']?.['object']==='string'?a8['order']['object']:a8?.['order'])===a0);return{'account':a6['account'],'is_owner':!!a7?.['is_owner'],'is_agent':!!a7?.['is_agent'],'time':a7?.['time']};}),a3=J['get'](String(a1?.['service']??''))??null,a4=a1?.['amount']!==null&&a1?.['amount']!==undefined?String(a1['amount']):'',a5=await K(a3,a4);L['push']({'order':a0,'roles':a2,'time':a1?Number(a1['time'])||0x0:0x0,'updated_ms':I['get'](a0)??null,'amount':a4,'amount_display':a5['display'],'amount_tip':a5['tip'],'service':a1?.['service']??null,'machine':a1?.['machine']??null,'progress':a1?.['progress']??null,'allocation':a1?.['allocation']??null,'owner':ownerAddrOf(a1?.['builder']??a1?.['owner']),'claimed_by':a1?.['claimed_by']??null,'required_info':a1?.['required_info']??null,'progress_next':a1?.['progress']?F['get'](a1['progress'])??null:null,'progress_since':a1?.['progress']?G['get'](a1['progress'])??null:null,'allocation_state':a1?.['allocation']?H['get'](a1['allocation'])??'pending':'none','disputes':Array['isArray'](a1?.['dispute'])?a1['dispute']:[],'agents':Array['isArray'](a1?.['agent'])?a1['agent']:[],'items':await Promise['all']((Array['isArray'](a1?.['items'])?a1['items']:[])['map'](async a6=>{const a7=a6?.['price']!==null&&a6?.['price']!==undefined?String(a6['price']):'0';return{'name':String(a6?.['name']??''),'price':a7,'price_display':(await K(a3,a7))['display'],'quantity':String(a6?.['quantity']??'0'),'wip_hash':String(a6?.['wip_hash']??'')};}))});}c={'query_type':'onchain_orders_of_users','result':L,...A['length']>0x0?{'account_errors':A}:{}};break;}case'onchain_table_item_object_linker_core':{const a6=await queryTableItem_ObjectLinkerCore({'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_object_linker_core','result':a6};break;}case'onchain_table_item_object_linker_tx':{const a7=await queryTableItem_ObjectLinkerTx({'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_object_linker_tx','result':a7};break;}case'onchain_affiliations_of_object':{const a8=await query_affiliations({'address':b['address'],'no_cache':b['no_cache'],'network':b['network']}),a9=a8?.['entries'];Array['isArray'](a9)&&(a8['entries']=a9['filter'](aa=>{const ab=typeof aa?.['who']==='string'?aa['who']:'';return!!ab&&objectTypeFromAddress(ab)!==undefined;}));c={'query_type':'onchain_affiliations_of_object','result':a8};break;}case'address_profile':{const aa=await query_address_profile({'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});await mergeServiceAnalysis(aa,{'no_cache':b['no_cache'],'network':b['network']});aa&&typeof aa==='object'&&(aa['follow_ups']=buildProfileFollowUps(aa));c={'query_type':'address_profile','result':aa};break;}case'service_supply_chain':{const ab=await resolveSupplyChainGraph(typeof b['address']==='string'?b['address']:b['address']?.['name_or_address']??String(b['address']),b['network']);c={'query_type':'service_supply_chain','result':ab};break;}case'onchain_table_item_generic':{const ac=await query_tableItem({'parent':b['parent'],'key':{'type':b['key_type'],'value':b['key_value']},'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_generic','result':ac};break;}default:{const ad=['onchain_table','onchain_table_item_repository_data','onchain_table_item_permission_perm','onchain_table_item_reward_record','onchain_table_item_demand_presenter','onchain_table_item_treasury_history','onchain_table_item_machine_node','onchain_table_item_progress_history','onchain_table_item_address_mark','onchain_table_item_entity_registrar','onchain_table_item_entity_linker','onchain_table_item_entity_contact','onchain_table_item_entity_order','onchain_orders_of_user','onchain_orders_of_users','onchain_table_item_object_linker_core','onchain_table_item_object_linker_tx','onchain_table_item_generic','onchain_affiliations_of_object','address_profile','service_supply_chain'];throw new Error('Unknown\x20table\x20query_type\x20\x22'+b['query_type']+'\x22.\x20Valid\x20query_types\x20are:\x20'+ad['map'](ae=>'\x22'+ae+'\x22')['join'](',\x20')+'.');}}return{'content':[{'type':'text','text':JSON['stringify']({'result':c})}],'structuredContent':{'result':c,'semantic':buildDataSemantic(c,{'operation_type':'onchain_table_data','data':b})}};}export async function handleOnchainEvents(a){const b=strictParse(OnchainEventsInputSchema,a,'onchain_events\x20input'),c=await query_events({'type':b['type'],'cursor':b['cursor']?{'eventSeq':String(b['cursor']['eventSeq']),'txDigest':b['cursor']['txDigest']}:null,'limit':b['limit']??null,'order':b['order']??null,'no_cache':b['no_cache'],'network':b['network']});try{await annotateEventsMonetaryFields(c?.['data'],b['network']);}catch{}return{'content':[{'type':'text','text':JSON['stringify']({'result':c})}],'structuredContent':{'result':c,'semantic':buildDataSemantic(c,{'operation_type':'onchain_events','data':b})}};}function mcpLayerInfoResponse(a){return{'content':[{'type':'text','text':JSON['stringify']({'result':a})}],'structuredContent':{'result':a}};}export async function handleWowokInfo(a){const b=strictParse(ProtocolInfoQuerySchema,a,'wowok_buildin_info\x20input'),c=b['info'];if(c==='upgrade_check')return mcpLayerInfoResponse({'info':'upgrade_check','result':await checkUpgrade()});if(c==='universal_template')return mcpLayerInfoResponse({'info':'universal_template','result':getUniversalTemplate()});if(c==='getting\x20started')return mcpLayerInfoResponse({'info':'getting\x20started','result':getGettingStarted()});const d=await queryProtocolInfo(b);return{'content':[{'type':'text','text':JSON['stringify']({'result':d})}],'structuredContent':{'result':d}};}
|
|
1
|
+
import{strictParse,WatchQueryOperationsSchema,OnchainTableDataSchema,OnchainEventsInputSchema,ProtocolInfoQuerySchema}from'../../schema/index.js';import{checkUpgrade}from'../upgrade-check.js';import{getUniversalTemplate}from'../../knowledge/universal-template.js';import{getGettingStarted}from'../../knowledge/getting-started.js';import{query_local_mark_list,query_account_list,query_local_info_list,query_local_token_list,query_account,GetLocalNamesByAddresses,query_personal,query_table,query_tableItem,queryTableItem_RepositoryData,queryTableItem_PermissionPerm,queryTableItem_RewardRecord,queryTableItem_DemandPresenter,queryTableItem_TreasuryHistory,queryTableItem_MachineNode,queryTableItem_ProgressHistory,queryTableItem_AddressMark,queryTableItem_EntityRegistrar,queryTableItem_EntityLinker,queryTableItem_EntityContact,queryTableItem_ObjectLinkerCore,queryTableItem_ObjectLinkerTx,queryTableItem_EntityOrder,queryOrdersByUser,query_affiliations,query_address_profile,query_address_profiles,objectTypeFromAddress,ObjectType,query_received,queryProtocolInfo,query_events,query_transaction,query_object_history,query_address_activity,query_checkpoint,generateNodeComments,query_object_last_updated,Config,LocalMark}from'@wowok/wowok';import{resolveSupplyChainGraph}from'../../knowledge/supply-chain.js';import{SCENARIO_CHAINS,SCENARIO_BRIDGE_REGISTRY,SCENARIO_TOPOLOGY_VERSION}from'../../knowledge/scenario-topology.js';import{assembleContext}from'../../playbooks/service-build/context-assembly.js';import{buildMachineGraph,fetchMachineNodes}from'../../playbooks/service-build/machine-nodes.js';import{generateBusinessReport}from'../../playbooks/service-build/reverse-mapping.js';import{handleServicePanorama}from'../../playbooks/service-build/service-panorama.js';import{handleServiceQuote}from'../../playbooks/service-build/service-quote.js';import{handleMachinePanorama}from'../../playbooks/service-build/machine-panorama.js';import{handleObjectPanorama}from'../../playbooks/service-build/object-panorama.js';import{handleParticipationRadar}from'../../playbooks/service-build/participation-radar.js';import{handleRelationshipProfile}from'../../playbooks/service-build/relationship-profile.js';import{handleOnchainTopology}from'../../playbooks/service-build/topology-query.js';import{buildUserInjection}from'../../evaluation/injection.js';import{handleReviewPack}from'../../review/index.js';import{buildWorkspaceLists}from'../../knowledge/workspace-lists.js';import{buildAccountMarks}from'../../knowledge/account-marks.js';import{migrationPreflight}from'../../knowledge/migration-preflight.js';import{buildDataSemantic}from'../../schema/call/semantic.js';import{enrichWorkflowGuidance}from'../../knowledge/workflow-guidance.js';import{buildOrderFundFacts}from'../../knowledge/arb-fund-facts.js';import{batchQueryObjectsByIds,fetchServiceOrders,lastUnresolvedInputs,LINKER_RING_LIMIT}from'../../graph/onchain/sdk-batch.js';import{formatChainValue,annotateObjectMonetaryFields,annotateTableItemMonetaryFields,annotateEventsMonetaryFields,annotateBalanceChanges,resolveParentObjectTokenType,convertTokenValue}from'../../knowledge/fund-layer.js';import{normalizeAccountOrMark}from'./messenger.js';function ownerAddrOf(a){if(typeof a==='string')return a;const b=a;if(b&&typeof b==='object'){if(typeof b['AddressOwner']==='string')return b['AddressOwner'];if(typeof b['ObjectOwner']==='string')return b['ObjectOwner'];const c=Object['values'](b)['find'](d=>typeof d==='string'&&d['length']>0x14);if(typeof c==='string')return c;}return null;}const serviceCoinTypeCache=new Map();async function coinTypesOfServices(a,b){const c=new Map();if(!a||a['length']===0x0)return c;const d=[];for(const e of a){const f=(b??'')+'|'+e['toLowerCase'](),h=serviceCoinTypeCache['get'](f);if(h!==undefined)c['set'](e,h);else d['push'](e);}if(d['length']===0x0)return c;try{const i=await batchQueryObjectsByIds(d,b);for(const j of i){if(!j?.['object'])continue;const k=j?.['type_raw']??j?.['type']??'',l=k['match'](/<(.+)>$/);if(!l)continue;serviceCoinTypeCache['set']((b??'')+'|'+String(j['object'])['toLowerCase'](),l[0x1]),c['set'](j['object'],l[0x1]);}}catch{}return c;}async function mergeServiceAnalysis(a,b){const c=a?.['object'],d=a?.['kind']==='Service'||c&&(c['type']==='Service'||(c['type_raw']??'')['includes']('::service::'));if(!d||!a)return;let e=null;try{const s=await query_object_last_updated({'object':a['address'],'network':b['network']});s?.['timestamp_ms']&&(e={'timestamp_ms':s['timestamp_ms'],'digest':s['digest'],'sender':s['sender']});}catch{}const f=a?.['reverse_core'],g=a?.['reverse_tx'],h=Array['isArray'](f?.['items'])?f['items']['length']:0x0,i=Array['isArray'](g?.['items'])?g['items']['length']:0x0,j=(i>0x0?g['items']:[])['filter'](t=>objectTypeFromAddress(t?.['who'])===ObjectType['Order']),k=j['length'],l=k>=LINKER_RING_LIMIT,m=Array['isArray'](a?.['reputation']?.['votes'])?a['reputation']['votes']:[],n=c?.['type_raw']??c?.['type']??'',o=n['match'](/<(.+)>$/),p=o?o[0x1]:null,q=p?(p['split']('::')['pop']()??p)['toUpperCase']():null,r=Array['isArray'](c?.['sales'])?c['sales']:[];a['service_analysis']={'description':c?.['description']??null,'sales_count':r['length'],'live_sales_count':r['filter'](t=>t&&!t['suspension'])['length'],'paused_sales_count':r['filter'](t=>t&&t['suspension'])['length'],'orders_count':k,'orders_count_truncated':l,'like_count':m['filter'](t=>t&&t['like'])['length'],'dislike_count':m['filter'](t=>t&&t['dislike'])['length'],'favor_count':m['filter'](t=>t&&t['favor'])['length'],'votes':m['map'](t=>({'who':t?.['who']??null,'like':!!t?.['like'],'dislike':!!t?.['dislike'],'favor':!!t?.['favor'],'time':t?.['time']??null})),'coin_type':p,'token_symbol':q,'location':c?.['location']??null,'bPublished':c?.['bPublished']??null,'bPaused':c?.['bPaused']??null,'related_core_count':h,'related_tx_count':i,'related_object_count':h+i,'onchain_last_updated':e};}export function buildProfileFollowUps(a){if(!a||typeof a!=='object')return[];const b=typeof a['address']==='string'?a['address']:undefined;if(!b)return[];const c=a['kind']==='user'||!a['is_system_singleton']&&!a['object'],d=[];if(c){const e=Array['isArray'](a['permission_membership']?.['items'])?a['permission_membership']['items']:[],f=Array['isArray'](a['order_membership']?.['items'])?a['order_membership']['items']:[];e['length']>0x0&&d['push']({'label':'Permission\x20organizations\x20('+e['length']+')','detail':'Expand\x20each\x20Permission\x20the\x20address\x20belongs\x20to\x20—\x20owner/admin/entity\x20standing\x20and\x20what\x20the\x20org\x20governs.','call':{'query_type':'onchain_objects','objects':e['map'](g=>g['who'])['filter'](Boolean)}}),f['length']>0x0&&d['push']({'label':'Order\x20footprint\x20('+f['length']+')','detail':'The\x20orders\x20this\x20address\x20participates\x20in\x20(buyer\x20vs\x20operator\x20roles).','call':{'query_type':'onchain_table_item_entity_order','address':b}}),d['push']({'label':'Public\x20personal\x20profile','detail':'Social/IM\x20links,\x20public\x20info\x20records,\x20voting\x20history,\x20referrer.','call':{'query_type':'onchain_personal_profile','address':b}}),d['push']({'label':'Reverse\x20map','detail':'Related\x20objects\x20and\x20the\x20deterministic\x20business\x20report\x20for\x20this\x20address.','call':{'query_type':'reverse_map','context_objects':[b]}});}else a['object']&&d['push']({'label':'Full\x20object\x20body','detail':'The\x20complete\x20on-chain\x20object\x20fields\x20(one\x20targeted\x20read).','call':{'query_type':'onchain_objects','objects':[b]}}),d['push']({'label':'Reverse\x20map','detail':'Related\x20objects\x20and\x20the\x20deterministic\x20business\x20report.','call':{'query_type':'reverse_map','context_objects':[b]}});return d['push']({'label':'Recent\x20on-chain\x20activity','detail':'Newest\x20transactions\x20touching\x20this\x20address.','call':{'query_type':'onchain_address_activity','address':b}}),d['slice'](0x0,0x3);}async function annotateAccountBalance(a,b){if(!a||typeof a!=='object')return;const e={},f=(j,k)=>{if(j===null||j===undefined)return undefined;if(typeof j!=='string'&&typeof j!=='number'&&typeof j!=='bigint')return undefined;if(typeof k!=='string'||!k)return undefined;return formatChainValue(j,k,b);},g=a['balance'];if(g&&typeof g==='object'){const j=g['coinType'],k=await f(g['totalBalance'],j);if(k)e['balance.totalBalance']=k;if(g['lockedBalance']!==undefined){const l=await f(g['lockedBalance'],j);if(l)e['balance.lockedBalance']=l;}}const h=a['coin']?.['data'];if(Array['isArray'](h))for(let m=0x0;m<h['length'];m++){const n=h[m],o=await f(n?.['balance'],n?.['coinType']);if(o)e['coin.data['+m+'].balance']=o;}if(Object['keys'](e)['length']>0x0){if(b)for(const p of Object['keys'](e)){const q=e[p];e[p]={...q,'text':q['text']+'\x20—\x20network:\x20'+b};}a['_money_display']=e;}}export function balanceScopeNote(a){return a?'The\x20balance\x20figure\x20reflects\x20the\x20aggregated\x20total\x20only;\x20the\x20coin\x20list\x20below\x20is\x20just\x20the\x20FIRST\x20PAGE\x20(top\x205)\x20'+'of\x20independently\x20owned\x20Coin\x20objects\x20—\x20a\x20refund\x20can\x20land\x20as\x20its\x20own\x20Coin\x20object\x20beyond\x20this\x20page.\x20'+'Verify\x20fund\x20arrival\x20via\x20the\x20transaction\x20digest\x20(onchain_transaction)\x20or\x20the\x20full\x20coin-object\x20listing\x20'+'(coin={cursor,limit})\x20before\x20drawing\x20conclusions.':'The\x20balance\x20figure\x20reflects\x20the\x20aggregated\x20total\x20only;\x20independently\x20owned\x20Coin\x20objects\x20are\x20not\x20'+'enumerated\x20here\x20—\x20verify\x20fund\x20arrival\x20via\x20the\x20transaction\x20digest\x20or\x20a\x20coin-objects\x20query\x20before\x20'+'drawing\x20conclusions.';}const NETWORK_FIELD_BY_QUERY={'account_balance':'network','onchain_personal_profile':'network','onchain_objects':'network','onchain_received':'network','onchain_transaction':'network','onchain_block':'network','onchain_object_history':'network','onchain_last_updated':'network','onchain_address_activity':'network','token_value_convert':'network','address_profile':'network','address_profiles':'network','service_supply_chain':'network','assemble_context':'context_network','reverse_map':'context_network','service_panorama':'context_network','service_quote':'context_network','machine_panorama':'context_network','object_panorama':'context_network','review_pack':'context_network','participation_radar':'context_network','relationship_profile':'context_network','onchain_topology':'context_network','workspace_lists':'context_network','marks_of_account':'context_network'};function requestedNetworkForQuery(a,b){const c=NETWORK_FIELD_BY_QUERY[b];if(!c)return undefined;const d=a[c];return typeof d==='string'&&d['length']>0x0?d:undefined;}function normalizeNetworkFieldAlias(a){const b=a['query_type'];if(typeof b!=='string')return;const c=NETWORK_FIELD_BY_QUERY[b];if(!c)return;const d=c==='network'?'context_network':'network';a[c]===undefined&&a[d]!==undefined&&(a[c]=a[d],delete a[d]);}export async function handleWatchQueryOperations(a){let c=a;if(a!==null&&typeof a==='object'&&!Array['isArray'](a)){const h={...a};normalizeNetworkFieldAlias(h),c=h;}const d=strictParse(WatchQueryOperationsSchema,c,'watch_and_query\x20input');let e;switch(d['query_type']){case'local_mark_list':{const j=await query_local_mark_list(d['filter']||{});e={'query_type':'local_mark_list','result':j};break;}case'account_list':{const k=await query_account_list(d['filter']);e={'query_type':'account_list','result':k};break;}case'local_info_list':{const l=await query_local_info_list(d['filter']);e={'query_type':'local_info_list','result':l};break;}case'token_list':{const m=await query_local_token_list(d['filter']||{});e={'query_type':'token_list','result':m};break;}case'account_balance':{const n=await query_account({'name_or_address':d['name_or_address'],'token_type':d['token_type'],'balance':d['balance'],'coin':d['coin'],'network':d['network']}),o=d['network']??await Config['Instance']()['network_get']();await annotateAccountBalance(n,o);let p=![];if(n['balance']&&!d['coin']&&!n['object']&&!n['hint'])try{const q=await query_account({'name_or_address':d['name_or_address'],'coin':{'cursor':null,'limit':0x5},'token_type':d['token_type'],'network':d['network']});q['coin']&&(n['coin']=q['coin'],p=!![]);}catch{}n['_balance_scope_note']=balanceScopeNote(p),e={'query_type':'account_balance','result':n};break;}case'local_names':{const r=await GetLocalNamesByAddresses(d['addresses']);e={'query_type':'local_names','result':r};break;}case'onchain_personal_profile':{const s=await query_personal({'account':d['account'],'no_cache':d['no_cache'],'network':d['network']});e={'query_type':'onchain_personal_profile','result':s};break;}case'onchain_objects':{const t=d['no_cache']??!![],u=await batchQueryObjectsByIds(d['objects'],d['network'],t),v=lastUnresolvedInputs(),w={'objects':u,'_read_freshness':{'source':t?'live':'session_cache','no_cache':t,'fetched_at':new Date()['toISOString'](),'note':t?'Forced-fresh\x20read.\x20This\x20is\x20the\x20DEFAULT\x20because\x20a\x20stale\x20value\x20here\x20can\x20invert\x20a\x20fund-movement\x20conclusion.':'Session\x20cache\x20was\x20used\x20(no_cache:false).\x20Pass\x20no_cache:true\x20before\x20concluding\x20that\x20money\x20did\x20or\x20did\x20not\x20move.'},...u['length']===0x0&&v['length']>0x0?{'_empty_reason':{'kind':'unresolved_inputs','unresolved':v,'note':'These\x20inputs\x20resolved\x20to\x20neither\x20a\x20registered\x20LocalMark\x20nor\x20a\x20valid\x20address\x20on\x20network\x20\x27'+(d['network']??'current')+'\x27.\x20LocalMark\x20names\x20are\x20NETWORK-SCOPED\x20—\x20an\x20object\x20created\x20on\x20testnet\x20is\x20invisible\x20on\x20localnet/mainnet.\x20Either\x20register\x20the\x20mark\x20here\x20(local_mark_operation)\x20or\x20pass\x20the\x20full\x200x\x20address.\x20This\x20is\x20NOT\x20evidence\x20that\x20the\x20objects\x20are\x20absent\x20on\x20chain.'}}:{},...u['length']<d['objects']['length']?{'_unreturned':{'requested':d['objects']['length'],'returned':u['length'],'missing':d['objects']['map'](x=>typeof x==='string'?x:x?.['name_or_address']??x?.['object']??x?.['address'])['filter'](x=>typeof x==='string'&&x!=='')['filter'](x=>!u['some'](y=>typeof y?.['object']==='string'&&y['object']['toLowerCase']()===x['toLowerCase']())),'note':'These\x20requested\x20ids\x20were\x20NOT\x20returned\x20—\x20either\x20absent\x20on\x20chain,\x20filtered\x20by\x20the\x20reader\x27s\x20type\x20support,\x20or\x20unparseable.\x20This\x20is\x20NOT\x20proof\x20of\x20nonexistence:\x20verify\x20via\x20an\x20alternative\x20read\x20(object_panorama\x20/\x20a\x20direct\x20address\x20query)\x20before\x20concluding\x20an\x20object\x20is\x20gone.'}}:{}};if(w&&w['objects']&&Array['isArray'](w['objects'])){w['objects']=w['objects']['map'](x=>{if(x&&x['data']&&x['data']['type']==='Guard'&&x['data']['root'])try{const y=generateNodeComments(x['data']['root']);return{...x,'_guard_node_comments':y};}catch(z){return x;}return x;}),w['objects']=w['objects']['map'](x=>{if(x&&x['data']&&x['data']['type']==='Progress'&&x['data']['current']===''){const y=x['data']['machine'],z=x['data']['task'];return{...x,'_diagnostic':{'issue':'Progress.current\x20is\x20empty\x20—\x20order\x20workflow\x20is\x20stuck\x20at\x20the\x20initial\x20state','cause':'The\x20Machine\x27s\x20entry\x20node\x20(prev_node=\x27\x27)\x20likely\x20has\x20no\x20forwards\x20defined.\x20'+'When\x20Progress\x20starts,\x20it\x20looks\x20up\x20the\x20entry\x20node\x27s\x20forwards\x20to\x20determine\x20'+'the\x20next\x20node.\x20Without\x20forwards,\x20Progress\x20cannot\x20advance\x20and\x20the\x20order\x20'+'is\x20permanently\x20stuck.','machine_object_id':y??null,'bound_order_id':z??null,'fix':['1.\x20Query\x20the\x20Machine\x20object\x20(use\x20query_toolkit\x20with\x20query_type=\x27onchain_objects\x27\x20and\x20objects=['+JSON['stringify'](y)+']).','2.\x20Inspect\x20node.pairs\x20for\x20the\x20entry\x20node\x20(prev_node=\x27\x27).','3.\x20If\x20forwards\x20is\x20empty:\x20this\x20is\x20the\x20root\x20cause.\x20The\x20Machine\x20must\x20be\x20republished\x20with\x20at\x20least\x20one\x20forward\x20on\x20the\x20entry\x20node.','4.\x20To\x20republish:\x20clone\x20the\x20Machine\x20nodes,\x20add\x20a\x20forward\x20to\x20the\x20entry\x20node\x27s\x20pairs,\x20then\x20create\x20a\x20new\x20Machine\x20(Machine\x20nodes\x20are\x20immutable\x20after\x20publish\x20—\x20see\x20P0-2\x20schema\x20validation\x20that\x20now\x20blocks\x20this).','5.\x20Rebind\x20the\x20new\x20Machine\x20to\x20the\x20Service\x20(service.machine\x20field)\x20and\x20create\x20a\x20new\x20Order\x20to\x20test.'],'reference':'P0-2\x20schema\x20refinement\x20in\x20MachineNodePairSchema\x20ensures\x20new\x20Machines\x20cannot\x20be\x20published\x20with\x20empty\x20entry-node\x20forwards.\x20This\x20diagnostic\x20catches\x20legacy\x20Machines\x20that\x20predate\x20the\x20fix.'}};}return x;});for(const x of w['objects']){const y=x?.['data']??x;if((x?.['type']??y?.['type'])!=='Progress')continue;const z=x?.['object']??y?.['object'];if(!z)continue;try{const A=await enrichWorkflowGuidance({'progressRef':z,'network':d['network'],'noCache':d['no_cache']});if(A?.['guidance']){x['_workflow_guidance']=A['guidance'];if(A['text'])x['_workflow_guidance_text']=A['text'];}}catch{}}for(const B of w['objects']){const C=B?.['data']??B;if((B?.['type']??C?.['type'])!=='Arb')continue;const D=B?.['object']??C?.['object'];if(!D)continue;try{const E=await buildOrderFundFacts({'arbRef':D,'network':d['network'],'noCache':t});E&&(B['_order_fund_facts']=E['structured'],B['_order_fund_facts_text']=E['text']);}catch{}}for(const F of w['objects']){try{await annotateObjectMonetaryFields(F,d['network']);}catch{}}}e={'query_type':'onchain_objects','result':w};break;}case'onchain_received':{const G=await query_received({'name_or_address':normalizeAccountOrMark(d['name_or_address']),'type':d['type'],'cursor':d['cursor'],'limit':d['limit'],'no_cache':d['no_cache'],'network':d['network']}),H=G;if(H&&typeof H==='object'&&typeof H['balance']==='bigint'){const I=H['token_type'];H['balance']=H['balance']['toString']();if(Array['isArray'](H['received']))for(const J of H['received']){J&&typeof J['balance']==='bigint'&&(J['balance']=J['balance']['toString']());}if(I)try{const K={'balance':await formatChainValue(H['balance'],I,d['network'])};if(Array['isArray'](H['received']))for(let L=0x0;L<H['received']['length'];L++){const M=H['received'][L]?.['balance'];M!==undefined&&M!==null&&(K['received['+L+'].balance']=await formatChainValue(M,I,d['network']));}H['_money_display']=K;}catch{}}e={'query_type':'onchain_received','result':H};break;}case'onchain_transaction':{const N=await query_transaction({'digest':d['digest'],'no_cache':d['no_cache'],'network':d['network']});try{await annotateBalanceChanges(N?.['balance_changes'],d['network']);}catch{}e={'query_type':'onchain_transaction','result':N};break;}case'onchain_block':{const O=await query_checkpoint({'block':d['block'],'network':d['network']});e={'query_type':'onchain_block','result':O};break;}case'onchain_object_history':{const P=await query_object_history({'object':d['object'],'cursor':d['cursor'],'limit':d['limit'],'order':d['order'],'no_cache':d['no_cache'],'network':d['network']});e={'query_type':'onchain_object_history','result':P};break;}case'onchain_last_updated':{const Q=d['objects']??[],R=await Promise['allSettled'](Q['map'](T=>query_object_last_updated({'object':T,'network':d['network']}))),S=Q['map']((T,U)=>{const V=R[U],W=V['status']==='fulfilled'?V['value']:null;return{'object':T,'timestamp_ms':W?.['timestamp_ms']?String(W['timestamp_ms']):null,'digest':W?.['digest']??null,'sender':W?.['sender']??null};});e={'query_type':'onchain_last_updated','result':{'items':S}};break;}case'onchain_address_activity':{const T=typeof d['name_or_address']==='string'?d['name_or_address']:d['name_or_address']['name_or_address'],U=await query_address_activity({'name_or_address':T,'direction':d['direction'],'cursor':d['cursor'],'limit':d['limit'],'order':d['order'],'no_cache':d['no_cache'],'network':d['network']});e={'query_type':'onchain_address_activity','result':U};break;}case'token_value_convert':{const V=d['raw']!==undefined,W=d['unit']!==undefined;if(V===W)throw new Error('token_value_convert:\x20provide\x20EXACTLY\x20ONE\x20of\x20\x27raw\x27\x20(u64\x20smallest\x20units\x20→\x20unit\x20value)\x20'+('or\x20\x27unit\x27\x20(unit\x20value\x20→\x20u64\x20raw).\x20Received\x20raw='+JSON['stringify'](d['raw'])+',\x20')+('unit='+JSON['stringify'](d['unit'])+'.'));const X=await convertTokenValue(d['token_type'],V?{'raw':d['raw']}:{'unit':d['unit']},d['network']);e={'query_type':'token_value_convert','result':X};break;}case'address_profile':{const Y=await query_address_profile({'address':d['address'],'no_cache':d['no_cache'],'network':d['network']});await mergeServiceAnalysis(Y,{'no_cache':d['no_cache'],'network':d['network']});Y&&typeof Y==='object'&&(Y['follow_ups']=buildProfileFollowUps(Y));e={'query_type':'address_profile','result':Y};break;}case'address_profiles':{const Z=await query_address_profiles({'addresses':d['addresses'],'no_cache':d['no_cache'],'network':d['network']});await Promise['all'](Z['map'](a0=>mergeServiceAnalysis(a0,{'no_cache':d['no_cache'],'network':d['network']})));for(const a0 of Z??[]){a0&&typeof a0==='object'&&(a0['follow_ups']=buildProfileFollowUps(a0));}e={'query_type':'address_profiles','result':Z};break;}case'service_supply_chain':{const a1=await resolveSupplyChainGraph(typeof d['address']==='string'?d['address']:d['address']?.['name_or_address']??String(d['address']),d['network']);e={'query_type':'service_supply_chain','result':a1};break;}case'assemble_context':{e={'query_type':'assemble_context','result':await assembleContext(d)};break;}case'reverse_map':{if(!d['context_objects']||d['context_objects']['length']===0x0)throw new Error('reverse_map\x20requires\x20\x27context_objects\x27\x20—\x20an\x20array\x20of\x20object\x20IDs\x20or\x20LocalMark\x20names\x20(include\x20the\x20Service;\x20add\x20Machine/Allocation\x20for\x20refund-path\x20detection).');const a2=d['context_network']??await Config['Instance']()['network_get'](),a3=await batchQueryObjectsByIds(d['context_objects'],a2,!![]);let a4,a5,a6=null;{const a8=a3['find'](aa=>{const ab=aa?.['machine']??aa?.['data']?.['machine'];return typeof ab==='string'&&/^0x[0-9a-fA-F]/['test'](ab);});if(a8)try{a6=String(a8['object']??a8['id']??'');const aa=await LocalMark['Instance']()['list']({'address':a6});if(aa[0x0]?.['name'])a8['name']=aa[0x0]['name'];}catch{}const a9=a8?String(a8['machine']??a8['data']?.['machine']):null;if(a9)try{const ab=a3['some'](ad=>String(ad?.['object']??ad?.['id']??'')['toLowerCase']()===a9['toLowerCase']());!ab&&a3['push'](...await batchQueryObjectsByIds([a9],a2,!![]));const ac=await fetchMachineNodes(a9,a2);a4=ac['map'](ad=>({'name':String(ad?.['name']??'')}))['filter'](ad=>ad['name']['length']>0x0),a5=buildMachineGraph(ac)['edges']['map'](ad=>({'from':ad['from'],'to':ad['to']}));}catch{}}let a7;if(a6)try{const ad=await fetchServiceOrders(a6,a2),ae=(ad?.['items']??[])['slice'](0x0,0xa)['map'](af=>typeof af?.['who']==='string'?af['who']:'')['filter'](af=>af!=='');if(ae['length']>0x0){const af=await batchQueryObjectsByIds(ae,a2,!![]);a7=af['filter'](ag=>ag?.['type']===ObjectType['Order'])['map'](ag=>({'id':ag['object'],'created_at_ms':Number(ag?.['time'])||undefined,'claimed_by':ag?.['claimed_by']??null}));}}catch{}e={'query_type':'reverse_map','result':{'action':'reverse_map','objects_queried':a3['length'],'report':generateBusinessReport({'objects':a3,'machine_nodes':a4,'machine_edges':a5,'orders':a7,'now_ms':Date['now'](),'order_amount':d['reverse_order_amount']})}};break;}case'service_panorama':e={'query_type':'service_panorama','result':await handleServicePanorama(d)};break;case'service_quote':e={'query_type':'service_quote','result':await handleServiceQuote(d)};break;case'machine_panorama':e={'query_type':'machine_panorama','result':await handleMachinePanorama(d)};break;case'object_panorama':e={'query_type':'object_panorama','result':await handleObjectPanorama(d)};break;case'review_pack':e={'query_type':'review_pack','result':await handleReviewPack(d)};break;case'participation_radar':e={'query_type':'participation_radar','result':await handleParticipationRadar(d)};break;case'relationship_profile':e={'query_type':'relationship_profile','result':await handleRelationshipProfile(d)};break;case'onchain_topology':e={'query_type':'onchain_topology','result':await handleOnchainTopology(d,undefined,await buildUserInjection(d['context_account']?.['toLowerCase']()))};break;case'workspace_lists':e={'query_type':'workspace_lists','result':await buildWorkspaceLists({'network':d['context_network'],'no_cache':d['no_cache'],'account':d['account'],'light':d['light']})};break;case'marks_of_account':e={'query_type':'marks_of_account','result':await buildAccountMarks({'network':d['context_network'],'no_cache':d['no_cache'],'account':d['account'],'light':d['light']})};break;case'migration_preflight':e={'query_type':'migration_preflight','result':await migrationPreflight({'account':d['account'],'source_network':d['source_network'],'target_network':d['target_network'],'no_cache':d['no_cache']})};break;case'scenario_topology':{const ag=d['chain_id'];e={'query_type':'scenario_topology','result':{'version':SCENARIO_TOPOLOGY_VERSION,'chains':ag?SCENARIO_CHAINS['filter'](ah=>ah['id']===ag):SCENARIO_CHAINS,'bridges':SCENARIO_BRIDGE_REGISTRY}};break;}default:throw new Error('Unknown\x20query\x20type.\x20Valid\x20query_types\x20are:\x20\x22local_mark_list\x22,\x20\x22account_list\x22,\x20\x22local_info_list\x22,\x20\x22token_list\x22,\x20\x22account_balance\x22,\x20\x22local_names\x22,\x20\x22onchain_personal_profile\x22,\x20\x22onchain_objects\x22,\x20\x22onchain_received\x22,\x20\x22onchain_transaction\x22,\x20\x22onchain_object_history\x22,\x20\x22onchain_last_updated\x22,\x20\x22onchain_address_activity\x22,\x20\x22token_value_convert\x22,\x20\x22address_profile\x22,\x20\x22address_profiles\x22,\x20\x22service_supply_chain\x22,\x20\x22relationship_profile\x22,\x20\x22onchain_topology\x22,\x20\x22workspace_lists\x22,\x20\x22marks_of_account\x22,\x20\x22migration_preflight\x22.\x20For\x20table\x20queries,\x20use\x20the\x20\x22onchain_table_data\x22\x20tool.');}const f=requestedNetworkForQuery(d,e['query_type']);let g;if(NETWORK_FIELD_BY_QUERY[e['query_type']]){const ah=f??await Config['Instance']()['network_get']();g={'network':ah,'network_source':f?'explicit':'default'};}return{'content':[{'type':'text','text':JSON['stringify']({...g,'result':e})}],'structuredContent':{'result':e,...queryPayloadAliases(e),...g??{},'semantic':buildDataSemantic(e,{'operation_type':'query_toolkit','data':d})}};}export function queryPayloadAliases(a){const b=a?.['result'];if(!b||typeof b!=='object')return{};const c={};if(Array['isArray'](b['objects']))c['objects']=b['objects'];if(Array['isArray'](b['received']))c['received']=b['received'];if(b['balance']&&typeof b['balance']==='object')c['balance']=b['balance'];if(Object['keys'](c)['length']===0x0)return{};const d=Object['keys'](c)['filter'](e=>!e['startsWith']('_'));return c['_read_hint']='The\x20\x27result\x27\x20key\x20appears\x20twice\x20by\x20design:\x20structuredContent.result\x20is\x20the\x20per-query_type\x20envelope,\x20'+'so\x20the\x20authoritative\x20path\x20for\x20each\x20field\x20is\x20'+(d['map'](e=>'structuredContent.result.result.'+e)['join']('\x20and\x20')+'.\x20')+('The\x20top-level\x20'+d['join'](',\x20')+'\x20above\x20are\x20additive\x20copies\x20of\x20the\x20same\x20data.'),c;}export async function handleOnchainTableData(a){const b=strictParse(OnchainTableDataSchema,a,'onchain_table_data\x20input');let c;switch(b['query_type']){case'onchain_table':{const d=await query_table({'parent':b['parent'],'cursor':b['cursor'],'limit':b['limit'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table','result':d};break;}case'onchain_table_item_repository_data':{const f=await queryTableItem_RepositoryData({'parent':b['parent'],'name':b['name'],'entity':b['entity'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_repository_data','result':f};break;}case'onchain_table_item_permission_perm':{const g=await queryTableItem_PermissionPerm({'parent':b['parent'],'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_permission_perm','result':g};break;}case'onchain_table_item_reward_record':{const h=await queryTableItem_RewardRecord({'parent':b['parent'],'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});if(h)try{const j=await resolveParentObjectTokenType(b['parent'],b['network']);await annotateTableItemMonetaryFields(h,j,b['network']);}catch{}c={'query_type':'onchain_table_item_reward_record','result':h};break;}case'onchain_table_item_demand_presenter':{const k=await queryTableItem_DemandPresenter({'parent':b['parent'],'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_demand_presenter','result':k};break;}case'onchain_table_item_treasury_history':{const l=await queryTableItem_TreasuryHistory({'parent':b['parent'],'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});if(l)try{const m=await resolveParentObjectTokenType(b['parent'],b['network']);await annotateTableItemMonetaryFields(l,m,b['network']);}catch{}c={'query_type':'onchain_table_item_treasury_history','result':l};break;}case'onchain_table_item_machine_node':{const n=await queryTableItem_MachineNode({'parent':b['parent'],'key':b['key'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_machine_node','result':n};break;}case'onchain_table_item_progress_history':{const p=await queryTableItem_ProgressHistory({'parent':b['parent'],'u64':b['u64'],'no_cache':![],'network':b['network']});c={'query_type':'onchain_table_item_progress_history','result':p};break;}case'onchain_table_item_address_mark':{const q=await queryTableItem_AddressMark({'parent':b['parent'],'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_address_mark','result':q};break;}case'onchain_table_item_entity_registrar':{const s=await queryTableItem_EntityRegistrar({'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_entity_registrar','result':s};break;}case'onchain_table_item_entity_linker':{const t=await queryTableItem_EntityLinker({'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_entity_linker','result':t};break;}case'onchain_table_item_entity_contact':{const u=await queryTableItem_EntityContact({'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_entity_contact','result':u};break;}case'onchain_table_item_entity_order':{const v=await queryTableItem_EntityOrder({'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_entity_order','result':v};break;}case'onchain_orders_of_user':{let w;try{w=await queryOrdersByUser({'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});}catch(x){const y=x instanceof Error?x['message']:String(x);if(/dynamicFieldNotFound/i['test'](y))w=[];else throw x;}c={'query_type':'onchain_orders_of_user','result':w};break;}case'onchain_orders_of_users':{const z=b['addresses']??[],A=[],B=await Promise['allSettled'](z['map'](async M=>{try{const N=await queryOrdersByUser({'address':M,'no_cache':b['no_cache'],'network':b['network']});return{'account':String(M?.['name_or_address']??''),'views':Array['isArray'](N)?N:[]};}catch(O){const P=O instanceof Error?O['message']:String(O);if(/dynamicFieldNotFound/i['test'](P))return{'account':String(M?.['name_or_address']??''),'views':[]};throw O;}})),C=[];for(let M=0x0;M<z['length'];M++){const N=B[M];if(N['status']==='fulfilled')C['push'](N['value']);else{const O=N['reason']instanceof Error?N['reason']['message']:String(N['reason']);A['push'](String(z[M]?.['name_or_address']??'?')+':\x20'+O);}}const D=Array['from'](new Set(C['flatMap'](P=>P['views']['map'](Q=>typeof Q?.['order']?.['object']==='string'?Q['order']['object']:typeof Q?.['order']==='string'?Q['order']:'')['filter'](Boolean)))),E=new Map();try{if(D['length']>0x0){const P=await batchQueryObjectsByIds(D,b['network']);for(const Q of P){if(Q&&Q['type']===ObjectType['Order'])E['set'](Q['object'],Q);}}}catch{A['push']('order\x20details\x20unavailable\x20(non-blocking)');}const F=new Map(),G=new Map(),H=new Map();try{const R=new Set();for(const S of E['values']()){if(S?.['progress'])R['add'](S['progress']);if(S?.['allocation'])R['add'](S['allocation']);}if(R['size']>0x0){const T=await batchQueryObjectsByIds(Array['from'](R),b['network']);for(const U of T){if(!U?.['object'])continue;if(U['type']===ObjectType['Progress']){const V=U?.['current'];F['set'](U['object'],typeof V==='string'&&V!==''?V:null),G['set'](U['object'],Number(U?.['current_time'])||null);}else{if(U['type']===ObjectType['Allocation']){const W=Number(U?.['balance']??0x0);H['set'](U['object'],Number['isFinite'](W)&&W===0x0?'allocated':'pending');}}}}}catch{A['push']('progress/allocation\x20details\x20unavailable\x20(non-blocking)');}const I=new Map();try{const X=await Promise['allSettled'](D['map'](Y=>query_object_last_updated({'object':Y,'network':b['network'],'previous_transaction':E['get'](Y)?.['previousTransaction']??null})));for(let Y=0x0;Y<D['length'];Y++){const Z=X[Y];I['set'](D[Y],Z['status']==='fulfilled'&&Z['value']?.['timestamp_ms']?Number(Z['value']['timestamp_ms'])||null:null);}}catch{A['push']('order\x20updated\x20times\x20unavailable\x20(non-blocking)');}const J=await coinTypesOfServices(Array['from'](new Set(Array['from'](E['values']())['map'](a0=>typeof a0?.['service']==='string'?a0['service']:'')['filter'](Boolean))),b['network']),K=async(a0,a1)=>{if(a1===null||a1===undefined||a1==='')return{'display':'','tip':''};if(!a0)return{'display':a1,'tip':''};try{const a2=await formatChainValue(a1,a0,b['network']);if(a2['precision_known'])return{'display':a2['symbol']?a2['display']+'\x20'+a2['symbol']:a2['display'],'tip':a2['text']};return{'display':a1,'tip':''};}catch{return{'display':a1,'tip':''};}},L=[];for(const a0 of D){const a1=E['get'](a0),a2=C['filter'](a6=>a6['views']['some'](a7=>(typeof a7?.['order']?.['object']==='string'?a7['order']['object']:a7?.['order'])===a0))['map'](a6=>{const a7=a6['views']['find'](a8=>(typeof a8?.['order']?.['object']==='string'?a8['order']['object']:a8?.['order'])===a0);return{'account':a6['account'],'is_owner':!!a7?.['is_owner'],'is_agent':!!a7?.['is_agent'],'time':a7?.['time']};}),a3=J['get'](String(a1?.['service']??''))??null,a4=a1?.['amount']!==null&&a1?.['amount']!==undefined?String(a1['amount']):'',a5=await K(a3,a4);L['push']({'order':a0,'roles':a2,'time':a1?Number(a1['time'])||0x0:0x0,'updated_ms':I['get'](a0)??null,'amount':a4,'amount_display':a5['display'],'amount_tip':a5['tip'],'service':a1?.['service']??null,'machine':a1?.['machine']??null,'progress':a1?.['progress']??null,'allocation':a1?.['allocation']??null,'owner':ownerAddrOf(a1?.['builder']??a1?.['owner']),'claimed_by':a1?.['claimed_by']??null,'required_info':a1?.['required_info']??null,'progress_next':a1?.['progress']?F['get'](a1['progress'])??null:null,'progress_since':a1?.['progress']?G['get'](a1['progress'])??null:null,'allocation_state':a1?.['allocation']?H['get'](a1['allocation'])??'pending':'none','disputes':Array['isArray'](a1?.['dispute'])?a1['dispute']:[],'agents':Array['isArray'](a1?.['agent'])?a1['agent']:[],'items':await Promise['all']((Array['isArray'](a1?.['items'])?a1['items']:[])['map'](async a6=>{const a7=a6?.['price']!==null&&a6?.['price']!==undefined?String(a6['price']):'0';return{'name':String(a6?.['name']??''),'price':a7,'price_display':(await K(a3,a7))['display'],'quantity':String(a6?.['quantity']??'0'),'wip_hash':String(a6?.['wip_hash']??'')};}))});}c={'query_type':'onchain_orders_of_users','result':L,...A['length']>0x0?{'account_errors':A}:{}};break;}case'onchain_table_item_object_linker_core':{const a6=await queryTableItem_ObjectLinkerCore({'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_object_linker_core','result':a6};break;}case'onchain_table_item_object_linker_tx':{const a7=await queryTableItem_ObjectLinkerTx({'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_object_linker_tx','result':a7};break;}case'onchain_affiliations_of_object':{const a8=await query_affiliations({'address':b['address'],'no_cache':b['no_cache'],'network':b['network']}),a9=a8?.['entries'];Array['isArray'](a9)&&(a8['entries']=a9['filter'](aa=>{const ab=typeof aa?.['who']==='string'?aa['who']:'';return!!ab&&objectTypeFromAddress(ab)!==undefined;}));c={'query_type':'onchain_affiliations_of_object','result':a8};break;}case'address_profile':{const aa=await query_address_profile({'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});await mergeServiceAnalysis(aa,{'no_cache':b['no_cache'],'network':b['network']});aa&&typeof aa==='object'&&(aa['follow_ups']=buildProfileFollowUps(aa));c={'query_type':'address_profile','result':aa};break;}case'service_supply_chain':{const ab=await resolveSupplyChainGraph(typeof b['address']==='string'?b['address']:b['address']?.['name_or_address']??String(b['address']),b['network']);c={'query_type':'service_supply_chain','result':ab};break;}case'onchain_table_item_generic':{const ac=await query_tableItem({'parent':b['parent'],'key':{'type':b['key_type'],'value':b['key_value']},'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_generic','result':ac};break;}default:{const ad=['onchain_table','onchain_table_item_repository_data','onchain_table_item_permission_perm','onchain_table_item_reward_record','onchain_table_item_demand_presenter','onchain_table_item_treasury_history','onchain_table_item_machine_node','onchain_table_item_progress_history','onchain_table_item_address_mark','onchain_table_item_entity_registrar','onchain_table_item_entity_linker','onchain_table_item_entity_contact','onchain_table_item_entity_order','onchain_orders_of_user','onchain_orders_of_users','onchain_table_item_object_linker_core','onchain_table_item_object_linker_tx','onchain_table_item_generic','onchain_affiliations_of_object','address_profile','service_supply_chain'];throw new Error('Unknown\x20table\x20query_type\x20\x22'+b['query_type']+'\x22.\x20Valid\x20query_types\x20are:\x20'+ad['map'](ae=>'\x22'+ae+'\x22')['join'](',\x20')+'.');}}return{'content':[{'type':'text','text':JSON['stringify']({'result':c})}],'structuredContent':{'result':c,'semantic':buildDataSemantic(c,{'operation_type':'onchain_table_data','data':b})}};}export async function handleOnchainEvents(a){const b=strictParse(OnchainEventsInputSchema,a,'onchain_events\x20input'),c=await query_events({'type':b['type'],'cursor':b['cursor']?{'eventSeq':String(b['cursor']['eventSeq']),'txDigest':b['cursor']['txDigest']}:null,'limit':b['limit']??null,'order':b['order']??null,'no_cache':b['no_cache'],'network':b['network']});try{await annotateEventsMonetaryFields(c?.['data'],b['network']);}catch{}return{'content':[{'type':'text','text':JSON['stringify']({'result':c})}],'structuredContent':{'result':c,'semantic':buildDataSemantic(c,{'operation_type':'onchain_events','data':b})}};}function mcpLayerInfoResponse(a){return{'content':[{'type':'text','text':JSON['stringify']({'result':a})}],'structuredContent':{'result':a}};}export async function handleWowokInfo(a){const b=strictParse(ProtocolInfoQuerySchema,a,'wowok_buildin_info\x20input'),c=b['info'];if(c==='upgrade_check')return mcpLayerInfoResponse({'info':'upgrade_check','result':await checkUpgrade()});if(c==='universal_template')return mcpLayerInfoResponse({'info':'universal_template','result':getUniversalTemplate()});if(c==='getting\x20started')return mcpLayerInfoResponse({'info':'getting\x20started','result':getGettingStarted()});const d=await queryProtocolInfo(b);return{'content':[{'type':'text','text':JSON['stringify']({'result':d})}],'structuredContent':{'result':d}};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{CallRepository,CallReward}from'@wowok/wowok';import{transformSubmission}from'../../schema/index.js';function digestOf(a){const b=a?.['digest']??a?.['effects']?.['digest'];return typeof b==='string'?b:undefined;}export async function runReviewChain(a){const b=[],c=a['review'];if(!c)return b;if(!c['repository'])b['push']({'step':'repository_write','status':'failed','detail':'repository\x20data_add\x20was\x20requested\x20via\x20data.review\x20but\x20no\x20repository\x20was\x20named','error':'data.review.repository\x20is\x20missing/empty\x20—\x20nothing\x20was\x20written.\x20Re-run\x20with\x20repository=<address>\x20(the\x20structured\x20reputation\x20record\x20is\x20NOT\x20recoverable\x20from\x20this\x20forward).'});else try{const d=a['submission']?await transformSubmission(a['submission']):undefined,e=c['write_guard']??d?.['guard']?.[0x0]?.['object'],f={'rating':c['rating']};if(c['tags']!==undefined&&c['tags']['length']>0x0)f['tags']=c['tags'];if(a['orderRef'])f['orderRef']=a['orderRef'];const g={'name':c['
|
|
1
|
+
import{CallRepository,CallReward}from'@wowok/wowok';import{transformSubmission}from'../../schema/index.js';function digestOf(a){const b=a?.['digest']??a?.['effects']?.['digest'];return typeof b==='string'?b:undefined;}export async function runReviewChain(a){const b=[],c=a['review'];if(!c)return b;if(!c['repository'])b['push']({'step':'repository_write','status':'failed','detail':'repository\x20data_add\x20was\x20requested\x20via\x20data.review\x20but\x20no\x20repository\x20was\x20named','error':'data.review.repository\x20is\x20missing/empty\x20—\x20nothing\x20was\x20written.\x20Re-run\x20with\x20repository=<address>\x20(the\x20structured\x20reputation\x20record\x20is\x20NOT\x20recoverable\x20from\x20this\x20forward).'});else try{const d=a['submission']?await transformSubmission(a['submission']):undefined,e=c['write_guard']??d?.['guard']?.[0x0]?.['object'],f={'rating':c['rating']};if(c['tags']!==undefined&&c['tags']['length']>0x0)f['tags']=c['tags'];if(a['orderRef'])f['orderRef']=a['orderRef'];const g={'name':c['policy']??'review','data':JSON['stringify'](f)};if(e)g['write_guard']=e;const h=new CallRepository({'object':c['repository'],'data_add':g}),i=d?await h['call_with_submission'](a['env'],d):await h['call'](a['env']);b['push']({'step':'repository_write','status':'success','detail':'wrote\x20'+JSON['stringify'](f)+'\x20under\x20policy\x20\x27'+(c['policy']??'review')+'\x27\x20of\x20repository\x20'+c['repository'],'digest':digestOf(i)});}catch(j){b['push']({'step':'repository_write','status':'failed','detail':'repository\x20data_add\x20on\x20'+c['repository']+'\x20(policy\x20\x27'+(c['policy']??'review')+'\x27)\x20failed','error':String(j?.['message']??j)});}if(c['reward_claim']){const {reward:k,guard:l}=c['reward_claim'];try{const m=a['submission']?await transformSubmission(a['submission']):undefined,n=new CallReward({'object':k,'claim':l}),o=m?await n['call_with_submission'](a['env'],m):await n['call'](a['env']);b['push']({'step':'reward_claim','status':'success','detail':'claimed\x20reward\x20'+k+'\x20via\x20guard\x20'+l,'digest':digestOf(o)});}catch(p){b['push']({'step':'reward_claim','status':'failed','detail':'reward\x20claim\x20on\x20'+k+'\x20via\x20guard\x20'+l+'\x20failed','error':String(p?.['message']??p)});}}return b;}export function mergeReviewStepsIntoOutput(a,b){try{const c=a?.['structuredContent'];if(c&&typeof c==='object'){if(!c['semantic']||typeof c['semantic']!=='object')c['semantic']={};c['semantic']['review_steps']=b;}const d=b['filter'](g=>g['status']==='failed'),e=d['map'](g=>g['step']+':\x20'+(g['error']??g['detail']))['join']('\x20|\x20'),f=d['length']===0x0?'Review\x20chain:\x20'+b['length']+'\x20chained\x20step(s)\x20completed.':'Review\x20chain:\x20'+d['length']+'/'+b['length']+'\x20chained\x20step(s)\x20failed\x20—\x20the\x20forward\x20itself\x20succeeded\x20(no\x20rollback);\x20retry\x20the\x20failed\x20step(s)\x20with\x20the\x20dedicated\x20repository/reward\x20tools.\x20Reason(s):\x20'+e;Array['isArray'](a?.['content'])&&a['content'][0x0]?.['text']!==undefined&&(a['content'][0x0]['text']=f+'\x0a'+a['content'][0x0]['text']);}catch{}return a;}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{processSchemaQuery,analyzeGuardSemantics,formatLintResult}from'../../schema-query-impl/index.js';import{strictParse}from'../../schema/index.js';import{SchemaQueryInputSchema}from'../../schema/schema-query/index.js';import{GUARD_BINDING_SEMANTICS,loadGuardJsonFromChain,diffGuardSpecVsChain}from'../../knowledge/guard-submission-brief.js';export async function handleSchemaQuery(a){const b=strictParse(SchemaQueryInputSchema,a,'schema_query\x20input');if(b['action']==='analyze_guard_semantics')return handleAnalyzeGuardSemantics(b['guard'],b['binding'],b['network'],b['compare_with']);const c={'action':b['action'],'name':b['name'],'query':b['query'],'field_path':b['field_path'],'template':b['template'],'object_type':b['object_type'],'params':b['params'],'output_file':b['output_file']},d=processSchemaQuery(c);let e=d['message'];d['output_file_path']&&(e+='\x0a\x0a📄\x20Full\x20data\x20written\x20to:\x20'+d['output_file_path'],e+='\x0a\x20\x20\x20Use\x20the\x20Read\x20tool\x20to\x20access\x20the\x20file\x20content.',d['inline_summary']&&(e+='\x0a\x0a##\x20Inline\x20summary\x20(no\x20file\x20access\x20needed)\x0a\x0a'+d['inline_summary']));const f=d['data'];if(d['success']&&f)switch(c['action']){case'list':if(Array['isArray'](f)&&f['length']>0x0){e+='\x0a\x0aAll\x20available\x20schemas:\x0a';for(const g of f){e+='\x0a\x20\x20•\x20'+(g['name']??''),g['title']&&(e+='\x20-\x20'+g['title']),g['description']&&(e+='\x0a\x20\x20\x20\x20'+g['description']['slice'](0x0,0x64)+'...'),e+='\x0a';}}break;case'list_operations':if(Array['isArray'](f)&&f['length']>0x0){e+='\x0a\x0aOn-chain\x20operation\x20schemas:\x0a';for(const h of f){e+='\x0a\x20\x20•\x20'+(h['name']??''),h['title']&&(e+='\x20-\x20'+h['title']),h['description']&&(e+='\x0a\x20\x20\x20\x20'+h['description']['slice'](0x0,0x64)+'...'),e+='\x0a';}}break;case'get':e+='\x0a\x0a##\x20JSON\x20Schema\x0a\x0a',e+='```json\x0a',e+=JSON['stringify'](f,null,0x2),e+='\x0a```\x0a';break;case'get_output':e+='\x0a\x0a##\x20Output\x20JSON\x20Schema\x0a\x0a',e+='```json\x0a',e+=JSON['stringify'](f,null,0x2),e+='\x0a```\x0a';break;case'get_guard_templates':e+='\x0a\x0a##\x20Guard\x20Templates\x0a\x0a',e+='```json\x0a',e+=JSON['stringify'](f,null,0x2),e+='\x0a```\x0a';break;case'get_field':e+='\x0a\x0a##\x20Field\x20Schema\x0a\x0a',e+='```json\x0a',e+=JSON['stringify'](f,null,0x2),e+='\x0a```\x0a';break;case'search':if(Array['isArray'](f)&&f['length']>0x0){e+='\x0a\x0aFound\x20'+f['length']+'\x20schemas\x20matching\x20\x27'+(c['query']??'')+'\x27:\x0a';for(const i of f){e+='\x0a\x20\x20•\x20'+(i['name']??''),i['title']&&(e+='\x20-\x20'+i['title']),i['description']&&(e+='\x0a\x20\x20\x20\x20'+i['description']['slice'](0x0,0x64)+'...'),e+='\x0a';}}else e+='\x0a\x0aNo\x20schemas\x20found.\x20Try\x20\x27list\x27\x20to\x20browse\x20all\x20available\x20schemas,\x20or\x20use\x20a\x20broader\x20search\x20term.';break;case'get_tool_reference':{e+='\x0a\x0a##\x20MCP\x20Tool\x20Reference\x0a\x0a',e+='```json\x0a',e+=JSON['stringify'](f,null,0x2),e+='\x0a```\x0a';break;}case'get_guard_design_patterns':{e+='\x0a\x0a##\x20Guard\x20Design\x20Patterns\x0a\x0a',e+='```json\x0a',e+=JSON['stringify'](f,null,0x2),e+='\x0a```\x0a';break;}case'get_safety_rules':{e+='\x0a\x0a##\x20Safety\x20Rules\x20(sunk\x20from\x20wowok-safety\x20skill)\x0a\x0a',e+='```json\x0a',e+=JSON['stringify'](f,null,0x2),e+='\x0a```\x0a';break;}case'get_guard_queries':{if(Array['isArray'](f)&&f['length']>0x0){const j=new Map();for(const k of f){const l=k['objectType']??'?';j['set'](l,(j['get'](l)??0x0)+0x1);}e+='\x0a\x0aGUARDQUERY\x20catalog:\x20'+f['length']+'\x20entries\x20across\x20'+j['size']+'\x20object\x20types.\x0a';for(const [m,n]of[...j['entries']()]['sort']((o,p)=>p[0x1]-o[0x1])){e+='\x0a\x20\x20•\x20'+m+':\x20'+n+'\x20entries';}e+='\x0a\x0aFull\x20rows\x20(id,\x20name'+(f[0x0]['description']!==undefined?',\x20description':'')+',\x20returnType)\x20are\x20in\x20the\x20structured\x20content.\x20',f[0x0]['description']===undefined&&(e+='Add\x20query=\x27<keyword>\x27\x20for\x20descriptions,\x20or\x20output_file\x20to\x20dump\x20all\x20details.\x20'),e+='Prefer\x20NAME\x20references\x20in\x20Guard\x20trees\x20—\x20a\x20numeric\x20id\x20is\x20resolved\x20verbatim,\x20and\x20a\x20wrong-but-existing\x20id\x20silently\x20checks\x20a\x20different\x20field\x20(rndb58d8d\x20A2).';}break;}case'get_templates':{e+='\x0a\x0a##\x20Unified\x20Template\x20Registry\x20(92-review\x20D.2)\x0a\x0a';const o=f;if(Array['isArray'](o['templates'])&&!c['template']){e+='\x0a'+(o['total']??o['templates']['length'])+'\x20template(s).\x20',e+='Call\x20with\x20\x27template\x27=<id>\x20for\x20detail;\x20add\x20\x27params\x27\x20(JSON\x20string)\x20to\x20instantiate.\x0a';for(const p of o['templates']){e+='\x0a\x20\x20•\x20'+p['id']+'\x20['+p['object_type']+(p['instantiable']?'':',\x20guidance-only')+']\x20—\x20'+p['name']+'\x20('+(p['parameters']?.['length']??0x0)+'\x20params)';}e+='\x0a';}else e+='```json\x0a',e+=JSON['stringify'](f,null,0x2),e+='\x0a```\x0a';break;}default:throw new Error('Unknown\x20schema_query\x20action:\x20'+String(c['action']));}if(d['suggestions']&&d['suggestions']['length']>0x0){e+='\x0a\x0a💡\x20Suggestions:\x0a';for(const q of d['suggestions']){e+='\x20\x20•\x20'+q+'\x0a';}}return{'content':[{'type':'text','text':e}],'structuredContent':d};}function guardFetchGuidance(a,b){return'Fetch\x20the\x20live\x20Guard\x20definition\x20FIRST,\x20then\x20analyze\x20it\x20as\x20local\x20JSON:\x20call\x20query_toolkit\x20with\x20'+('query_type=\x27onchain_objects\x27,\x20objects=[\x22'+a+'\x22]\x20(add\x20no_cache:true\x20for\x20a\x20forced-fresh\x20read')+((b?',\x20network:\x27'+b+'\x27':'')+'),\x20then\x20pass\x20objects[0].table\x20+\x20objects[0].root\x20')+'as\x20the\x20\x27guard\x27\x20parameter\x20of\x20this\x20action.';}async function handleAnalyzeGuardSemantics(a,b,c,f){if(a===undefined||a===null)throw new Error('schema_query\x20action=\x27analyze_guard_semantics\x27\x20requires\x20the\x20\x27guard\x27\x20parameter\x20'+'(Guard\x20JSON\x20object,\x20JSON-encoded\x20string,\x20or\x20an\x20on-chain\x20Guard\x20address/LocalMark\x20name).');let g,h;if(typeof a==='string'){const v=a['trim'](),x=v['startsWith']('{')||v['startsWith']('[');if(x)try{g=JSON['parse'](v);}catch(y){throw new Error('analyze_guard_semantics:\x20\x27guard\x27\x20string\x20looks\x20like\x20JSON\x20but\x20failed\x20to\x20parse:\x20'+y['message']);}else h=v;}else g=a;let i,j;if(!g){if(!h)throw new Error('analyze_guard_semantics:\x20Guard\x20JSON\x20must\x20contain\x20at\x20least\x20\x27table\x27\x20(array)\x20and\x20\x27root\x27\x20(logic\x20tree\x20object).');const z=await loadGuardJsonFromChain(h,c);if(!z)throw new Error('analyze_guard_semantics:\x20could\x20not\x20load\x20a\x20Guard\x20definition\x20for\x20\x22'+h+'\x22\x20'+('(not\x20found,\x20not\x20a\x20Guard\x20object,\x20or\x20LocalMark\x20name\x20unresolvable\x20on\x20network\x20\x27'+(c??'current')+'\x27\x20—\x20')+'this\x20tool\x20could\x20not\x20resolve\x20it,\x20which\x20is\x20not\x20necessarily\x20a\x20wrong\x20address).\x20'+guardFetchGuidance(h,c));g=z['json'],i=z['guard'],j=z['name'];}if(!Array['isArray'](g['table'])||!g['root']||typeof g['root']!=='object')throw new Error(h?'analyze_guard_semantics:\x20the\x20object\x20at\x20\x22'+h+'\x22\x20does\x20not\x20expose\x20a\x20Guard\x20definition\x20shape\x20'+'(needs\x20\x27table\x27\x20(array)\x20+\x20\x27root\x27\x20(logic\x20tree\x20object)).\x20'+guardFetchGuidance(h,c):'analyze_guard_semantics:\x20Guard\x20JSON\x20must\x20contain\x20at\x20least\x20\x27table\x27\x20(array)\x20and\x20\x27root\x27\x20(logic\x20tree\x20object).');const k=b;k==='allocate'&&g&&!g['binding_hint']&&(g={...g,'binding_hint':{'host_object':'Service','binding_field':'order_allocators'}});let l;try{l=await analyzeGuardSemantics(g);}catch(A){throw new Error('analyze_guard_semantics:\x20failed\x20to\x20interpret\x20the\x20guard\x20payload\x20('+A['message']+').\x20'+(h?guardFetchGuidance(h,c):'If\x20this\x20payload\x20came\x20from\x20an\x20on-chain\x20object\x20rather\x20than\x20a\x20guard2file\x20export,\x20'+'call\x20query_toolkit\x20with\x20query_type=\x27onchain_objects\x27\x20on\x20the\x20object\x20ID,\x20then\x20pass\x20'+'objects[0].table\x20+\x20objects[0].root\x20as\x20the\x20\x27guard\x27\x20parameter.'));}const {lint:m,party_evaluation:n}=l;let o;if(f&&h===undefined){const B=await loadGuardJsonFromChain(f,c);if(!B)throw new Error('analyze_guard_semantics:\x20could\x20not\x20load\x20the\x20compare_with\x20Guard\x20\x22'+f+'\x22\x20'+('(not\x20found,\x20not\x20a\x20Guard\x20object,\x20or\x20LocalMark\x20name\x20unresolvable\x20on\x20network\x20\x27'+(c??'current')+'\x27).\x20')+guardFetchGuidance(f,c));o=diffGuardSpecVsChain(g,B['json']),!o['match']&&(m['diagnostics']['push']({'code':'RT-01','message':'ROUND-TRIP\x20MISMATCH\x20vs\x20'+f+':\x20the\x20on-chain\x20Guard\x20DIFFERS\x20from\x20this\x20spec\x20—\x20'+o['diffs']['join'](';\x20')+'.\x20The\x20lint\x20verdict\x20above\x20describes\x20a\x20Guard\x20that\x20does\x20NOT\x20exist\x20on-chain.\x20'+'Guards\x20are\x20create-frozen:\x20export\x20(guard2file),\x20inspect,\x20create\x20a\x20NEW\x20Guard\x20and\x20rebind.','severity':'error','source':'lint','location':{'path':'/'},'fix':{'description':'Align\x20the\x20local\x20spec\x20with\x20the\x20chain\x20copy\x20(guard2file\x20export),\x20or\x20create\x20a\x20corrected\x20Guard\x20and\x20rebind\x20its\x20hosts.','auto_fixable':![]}}),m['summary']['errors']+=0x1,m['summary']['ready']=![],m['summary']['next_step']='Resolve\x20the\x20ROUND-TRIP\x20MISMATCH\x20first\x20—\x20the\x20analyzed\x20spec\x20is\x20NOT\x20what\x20the\x20chain\x20stores.');}const p=k?GUARD_BINDING_SEMANTICS[k]:undefined,q=[];for(const C of n['data_sources']){C['is_mutable_onchain']&&q['push']('Table\x20['+C['identifier']+']'+(C['name']?'\x20\x22'+C['name']+'\x22':'')+'\x20reads\x20a\x20Repository\x20—\x20MUTABLE\x20on-chain;\x20verify\x20the\x20current\x20entry\x20before\x20relying\x20on\x20the\x20check');}n['has_time_conditions']&&q['push']('The\x20tree\x20contains\x20Clock\x20(time)\x20conditions\x20—\x20results\x20may\x20change\x20over\x20time');n['has_rely_composition']&&q['push']('This\x20Guard\x20composes\x20other\x20Guards\x20via\x20rely\x20—\x20each\x20relied\x20Guard\x27s\x20semantics\x20apply\x20too');let r='Guard\x20semantics\x20analysis\x20(evaluate\x20BEFORE\x20relying\x20on\x20this\x20Guard):\x0a';i&&(r+='\x0a**On-chain\x20Guard**:\x20'+(j??'')+'\x20'+i+'\x0a');p&&(r+='\x0a##\x20Business\x20slot\x0a\x0a'+p['role']+'\x20('+p['host']+'.'+p['binding_field']+')\x0a',r+='\x0a-\x20Your\x20submission\x20means:\x20'+p['submission_meaning']+'\x0a',r+='-\x20If\x20it\x20PASSES:\x20'+p['on_pass']+'\x0a',r+='-\x20If\x20it\x20FAILS:\x20'+p['on_fail']+'\x0a',r+='-\x20Stakes:\x20'+p['stakes']+'\x0a');r+='\x0a##\x20Logic\x20tree\x0a\x0a```\x0a'+l['render']['tree_indented']+'\x0a```\x0a',r+='\x0a##\x20Lint\x20+\x20risk\x20assessment\x0a\x0a```\x0a'+formatLintResult(m)+'\x0a```\x0a';o&&(r+='\x0a##\x20Round-trip\x20verification\x20(vs\x20'+f+')\x0a\x0a'+o['summary']+'\x0a');const t=n;r+='\x0a##\x20Party\x20evaluation\x20(facts)\x0a',r+='\x0a\x20\x20•\x20Submission\x20requirements\x20(evidence\x20the\x20caller\x20must\x20submit):\x20'+t['submission_requirements']['length'];for(const D of t['submission_requirements']){r+='\x0a\x20\x20\x20\x20-\x20['+D['identifier']+']\x20'+(D['name']??'')+'\x20('+(D['object_type']??D['value_type']??'unknown')+')';}r+='\x0a\x20\x20•\x20On-chain\x20data\x20sources\x20read:\x20'+t['data_sources']['length'];for(const E of t['data_sources']){const F=E['is_mutable_onchain']?'\x20[MUTABLE\x20on-chain\x20—\x20who\x20controls\x20writes?]':'';r+='\x0a\x20\x20\x20\x20-\x20['+E['identifier']+']\x20'+(E['name']??'')+'\x20('+(E['object_type']??E['value_type']??E['kind'])+')'+F;}r+='\x0a\x20\x20•\x20Query\x20dependencies:\x20'+(t['query_dependencies']['length']>0x0?t['query_dependencies']['join'](',\x20'):'none');t['unresolved_queries']['length']>0x0&&(r+='\x0a\x20\x20•\x20UNRESOLVED\x20query\x20references\x20(not\x20in\x20the\x20GUARDQUERY\x20catalog):\x20'+t['unresolved_queries']['join'](',\x20'));r+='\x0a\x20\x20•\x20Time\x20conditions\x20(Clock):\x20'+(t['has_time_conditions']?'present':'none'),r+='\x0a\x20\x20•\x20Caller\x20identity\x20constraints\x20(Signer):\x20'+(t['has_signer_constraints']?'present':'none'),r+='\x0a\x20\x20•\x20Rely\x20composition\x20(other\x20Guards):\x20'+(t['has_rely_composition']?'present':'none'),r+='\x0a\x20\x20•\x20Lint:\x20'+m['summary']['errors']+'\x20error(s),\x20'+m['summary']['warnings']+'\x20warning(s),\x20ready='+m['summary']['ready'];if(q['length']>0x0){r+='\x0a\x0a##\x20Data-source\x20warnings\x0a';for(const G of q)r+='\x0a\x20\x20⚠\x20'+G+'\x0a';}const u={'action':'analyze_guard_semantics',...i?{'guard':i}:{},...j?{'guard_name':j}:{},...p?{'binding_semantics':{'action':k,'host':p['host'],'binding_field':p['binding_field'],'role':p['role'],'submission_meaning':p['submission_meaning'],'on_pass':p['on_pass'],'on_fail':p['on_fail'],'stakes':p['stakes']}}:{},'render':l['render'],'lint':m,...o?{'round_trip_diff':{'compare_with':f,'match':o['match'],'diffs':o['diffs'],'summary':o['summary']}}:{},'party_evaluation':n,...q['length']>0x0?{'data_source_warnings':q}:{}};return{'content':[{'type':'text','text':r}],'structuredContent':{'success':!![],'action':'analyze_guard_semantics','data':u,'message':'Guard\x20semantics\x20analysis\x20complete.'}};}
|
|
1
|
+
import{processSchemaQuery,analyzeGuardSemantics,formatLintResult}from'../../schema-query-impl/index.js';import{strictParse}from'../../schema/index.js';import{SchemaQueryInputSchema}from'../../schema/schema-query/index.js';import{GUARD_BINDING_SEMANTICS,loadGuardJsonFromChain,diffGuardSpecVsChain,requiredSubmissionSlots}from'../../knowledge/guard-submission-brief.js';export async function handleSchemaQuery(a){const b=strictParse(SchemaQueryInputSchema,a,'schema_query\x20input');if(b['action']==='analyze_guard_semantics')return handleAnalyzeGuardSemantics(b['guard'],b['binding'],b['network'],b['compare_with']);const c={'action':b['action'],'name':b['name'],'query':b['query'],'field_path':b['field_path'],'template':b['template'],'object_type':b['object_type'],'params':b['params'],'output_file':b['output_file']},d=processSchemaQuery(c);let e=d['message'];d['output_file_path']&&(e+='\x0a\x0a📄\x20Full\x20data\x20written\x20to:\x20'+d['output_file_path'],e+='\x0a\x20\x20\x20Use\x20the\x20Read\x20tool\x20to\x20access\x20the\x20file\x20content.',d['inline_summary']&&(e+='\x0a\x0a##\x20Inline\x20summary\x20(no\x20file\x20access\x20needed)\x0a\x0a'+d['inline_summary']));const f=d['data'];if(d['success']&&f)switch(c['action']){case'list':if(Array['isArray'](f)&&f['length']>0x0){e+='\x0a\x0aAll\x20available\x20schemas:\x0a';for(const g of f){e+='\x0a\x20\x20•\x20'+(g['name']??''),g['title']&&(e+='\x20-\x20'+g['title']),g['description']&&(e+='\x0a\x20\x20\x20\x20'+g['description']['slice'](0x0,0x64)+'...'),e+='\x0a';}}break;case'list_operations':if(Array['isArray'](f)&&f['length']>0x0){e+='\x0a\x0aOn-chain\x20operation\x20schemas:\x0a';for(const h of f){e+='\x0a\x20\x20•\x20'+(h['name']??''),h['title']&&(e+='\x20-\x20'+h['title']),h['description']&&(e+='\x0a\x20\x20\x20\x20'+h['description']['slice'](0x0,0x64)+'...'),e+='\x0a';}}break;case'get':e+='\x0a\x0a##\x20JSON\x20Schema\x0a\x0a',e+='```json\x0a',e+=JSON['stringify'](f,null,0x2),e+='\x0a```\x0a';break;case'get_output':e+='\x0a\x0a##\x20Output\x20JSON\x20Schema\x0a\x0a',e+='```json\x0a',e+=JSON['stringify'](f,null,0x2),e+='\x0a```\x0a';break;case'get_guard_templates':e+='\x0a\x0a##\x20Guard\x20Templates\x0a\x0a',e+='```json\x0a',e+=JSON['stringify'](f,null,0x2),e+='\x0a```\x0a';break;case'get_field':e+='\x0a\x0a##\x20Field\x20Schema\x0a\x0a',e+='```json\x0a',e+=JSON['stringify'](f,null,0x2),e+='\x0a```\x0a';break;case'search':if(Array['isArray'](f)&&f['length']>0x0){e+='\x0a\x0aFound\x20'+f['length']+'\x20schemas\x20matching\x20\x27'+(c['query']??'')+'\x27:\x0a';for(const i of f){e+='\x0a\x20\x20•\x20'+(i['name']??''),i['title']&&(e+='\x20-\x20'+i['title']),i['description']&&(e+='\x0a\x20\x20\x20\x20'+i['description']['slice'](0x0,0x64)+'...'),e+='\x0a';}}else e+='\x0a\x0aNo\x20schemas\x20found.\x20Try\x20\x27list\x27\x20to\x20browse\x20all\x20available\x20schemas,\x20or\x20use\x20a\x20broader\x20search\x20term.';break;case'get_tool_reference':{e+='\x0a\x0a##\x20MCP\x20Tool\x20Reference\x0a\x0a',e+='```json\x0a',e+=JSON['stringify'](f,null,0x2),e+='\x0a```\x0a';break;}case'get_guard_design_patterns':{e+='\x0a\x0a##\x20Guard\x20Design\x20Patterns\x0a\x0a',e+='```json\x0a',e+=JSON['stringify'](f,null,0x2),e+='\x0a```\x0a';break;}case'get_safety_rules':{e+='\x0a\x0a##\x20Safety\x20Rules\x20(sunk\x20from\x20wowok-safety\x20skill)\x0a\x0a',e+='```json\x0a',e+=JSON['stringify'](f,null,0x2),e+='\x0a```\x0a';break;}case'get_guard_queries':{if(Array['isArray'](f)&&f['length']>0x0){const j=new Map();for(const k of f){const l=k['objectType']??'?';j['set'](l,(j['get'](l)??0x0)+0x1);}e+='\x0a\x0aGUARDQUERY\x20catalog:\x20'+f['length']+'\x20entries\x20across\x20'+j['size']+'\x20object\x20types.\x0a';for(const [m,n]of[...j['entries']()]['sort']((o,p)=>p[0x1]-o[0x1])){e+='\x0a\x20\x20•\x20'+m+':\x20'+n+'\x20entries';}e+='\x0a\x0aFull\x20rows\x20(id,\x20name'+(f[0x0]['description']!==undefined?',\x20description':'')+',\x20returnType)\x20are\x20in\x20the\x20structured\x20content.\x20',f[0x0]['description']===undefined&&(e+='Add\x20query=\x27<keyword>\x27\x20for\x20descriptions,\x20or\x20output_file\x20to\x20dump\x20all\x20details.\x20'),e+='Prefer\x20NAME\x20references\x20in\x20Guard\x20trees\x20—\x20a\x20numeric\x20id\x20is\x20resolved\x20verbatim,\x20and\x20a\x20wrong-but-existing\x20id\x20silently\x20checks\x20a\x20different\x20field\x20(rndb58d8d\x20A2).';}break;}case'get_templates':{e+='\x0a\x0a##\x20Unified\x20Template\x20Registry\x20(92-review\x20D.2)\x0a\x0a';const o=f;if(Array['isArray'](o['templates'])&&!c['template']){e+='\x0a'+(o['total']??o['templates']['length'])+'\x20template(s).\x20',e+='Call\x20with\x20\x27template\x27=<id>\x20for\x20detail;\x20add\x20\x27params\x27\x20(JSON\x20string)\x20to\x20instantiate.\x0a';for(const p of o['templates']){e+='\x0a\x20\x20•\x20'+p['id']+'\x20['+p['object_type']+(p['instantiable']?'':',\x20guidance-only')+']\x20—\x20'+p['name']+'\x20('+(p['parameters']?.['length']??0x0)+'\x20params)';}e+='\x0a';}else e+='```json\x0a',e+=JSON['stringify'](f,null,0x2),e+='\x0a```\x0a';break;}default:throw new Error('Unknown\x20schema_query\x20action:\x20'+String(c['action']));}if(d['suggestions']&&d['suggestions']['length']>0x0){e+='\x0a\x0a💡\x20Suggestions:\x0a';for(const q of d['suggestions']){e+='\x20\x20•\x20'+q+'\x0a';}}return{'content':[{'type':'text','text':e}],'structuredContent':d};}function guardFetchGuidance(a,b){return'Fetch\x20the\x20live\x20Guard\x20definition\x20FIRST,\x20then\x20analyze\x20it\x20as\x20local\x20JSON:\x20call\x20query_toolkit\x20with\x20'+('query_type=\x27onchain_objects\x27,\x20objects=[\x22'+a+'\x22]\x20(add\x20no_cache:true\x20for\x20a\x20forced-fresh\x20read')+((b?',\x20network:\x27'+b+'\x27':'')+'),\x20then\x20pass\x20objects[0].table\x20+\x20objects[0].root\x20')+'as\x20the\x20\x27guard\x27\x20parameter\x20of\x20this\x20action.';}async function handleAnalyzeGuardSemantics(a,b,c,f){if(a===undefined||a===null)throw new Error('schema_query\x20action=\x27analyze_guard_semantics\x27\x20requires\x20the\x20\x27guard\x27\x20parameter\x20'+'(Guard\x20JSON\x20object,\x20JSON-encoded\x20string,\x20or\x20an\x20on-chain\x20Guard\x20address/LocalMark\x20name).');let g,h;if(typeof a==='string'){const v=a['trim'](),x=v['startsWith']('{')||v['startsWith']('[');if(x)try{g=JSON['parse'](v);}catch(y){throw new Error('analyze_guard_semantics:\x20\x27guard\x27\x20string\x20looks\x20like\x20JSON\x20but\x20failed\x20to\x20parse:\x20'+y['message']);}else h=v;}else g=a;let i,j;if(!g){if(!h)throw new Error('analyze_guard_semantics:\x20Guard\x20JSON\x20must\x20contain\x20at\x20least\x20\x27table\x27\x20(array)\x20and\x20\x27root\x27\x20(logic\x20tree\x20object).');const z=await loadGuardJsonFromChain(h,c);if(!z)throw new Error('analyze_guard_semantics:\x20could\x20not\x20load\x20a\x20Guard\x20definition\x20for\x20\x22'+h+'\x22\x20'+('(not\x20found,\x20not\x20a\x20Guard\x20object,\x20or\x20LocalMark\x20name\x20unresolvable\x20on\x20network\x20\x27'+(c??'current')+'\x27\x20—\x20')+'this\x20tool\x20could\x20not\x20resolve\x20it,\x20which\x20is\x20not\x20necessarily\x20a\x20wrong\x20address).\x20'+guardFetchGuidance(h,c));g=z['json'],i=z['guard'],j=z['name'];}if(!Array['isArray'](g['table'])||!g['root']||typeof g['root']!=='object')throw new Error(h?'analyze_guard_semantics:\x20the\x20object\x20at\x20\x22'+h+'\x22\x20does\x20not\x20expose\x20a\x20Guard\x20definition\x20shape\x20'+'(needs\x20\x27table\x27\x20(array)\x20+\x20\x27root\x27\x20(logic\x20tree\x20object)).\x20'+guardFetchGuidance(h,c):'analyze_guard_semantics:\x20Guard\x20JSON\x20must\x20contain\x20at\x20least\x20\x27table\x27\x20(array)\x20and\x20\x27root\x27\x20(logic\x20tree\x20object).');const k=b;k==='allocate'&&g&&!g['binding_hint']&&(g={...g,'binding_hint':{'host_object':'Service','binding_field':'order_allocators'}});let l;try{l=await analyzeGuardSemantics(g);}catch(A){throw new Error('analyze_guard_semantics:\x20failed\x20to\x20interpret\x20the\x20guard\x20payload\x20('+A['message']+').\x20'+(h?guardFetchGuidance(h,c):'If\x20this\x20payload\x20came\x20from\x20an\x20on-chain\x20object\x20rather\x20than\x20a\x20guard2file\x20export,\x20'+'call\x20query_toolkit\x20with\x20query_type=\x27onchain_objects\x27\x20on\x20the\x20object\x20ID,\x20then\x20pass\x20'+'objects[0].table\x20+\x20objects[0].root\x20as\x20the\x20\x27guard\x27\x20parameter.'));}const {lint:m,party_evaluation:n}=l;let o;if(f&&h===undefined){const B=await loadGuardJsonFromChain(f,c);if(!B)throw new Error('analyze_guard_semantics:\x20could\x20not\x20load\x20the\x20compare_with\x20Guard\x20\x22'+f+'\x22\x20'+('(not\x20found,\x20not\x20a\x20Guard\x20object,\x20or\x20LocalMark\x20name\x20unresolvable\x20on\x20network\x20\x27'+(c??'current')+'\x27).\x20')+guardFetchGuidance(f,c));o=diffGuardSpecVsChain(g,B['json']),!o['match']&&(m['diagnostics']['push']({'code':'RT-01','message':'ROUND-TRIP\x20MISMATCH\x20vs\x20'+f+':\x20the\x20on-chain\x20Guard\x20DIFFERS\x20from\x20this\x20spec\x20—\x20'+o['diffs']['join'](';\x20')+'.\x20The\x20lint\x20verdict\x20above\x20describes\x20a\x20Guard\x20that\x20does\x20NOT\x20exist\x20on-chain.\x20'+'Guards\x20are\x20create-frozen:\x20export\x20(guard2file),\x20inspect,\x20create\x20a\x20NEW\x20Guard\x20and\x20rebind.','severity':'error','source':'lint','location':{'path':'/'},'fix':{'description':'Align\x20the\x20local\x20spec\x20with\x20the\x20chain\x20copy\x20(guard2file\x20export),\x20or\x20create\x20a\x20corrected\x20Guard\x20and\x20rebind\x20its\x20hosts.','auto_fixable':![]}}),m['summary']['errors']+=0x1,m['summary']['ready']=![],m['summary']['next_step']='Resolve\x20the\x20ROUND-TRIP\x20MISMATCH\x20first\x20—\x20the\x20analyzed\x20spec\x20is\x20NOT\x20what\x20the\x20chain\x20stores.');}const p=k?GUARD_BINDING_SEMANTICS[k]:undefined,q=[];for(const C of n['data_sources']){C['is_mutable_onchain']&&q['push']('Table\x20['+C['identifier']+']'+(C['name']?'\x20\x22'+C['name']+'\x22':'')+'\x20reads\x20a\x20Repository\x20—\x20MUTABLE\x20on-chain;\x20verify\x20the\x20current\x20entry\x20before\x20relying\x20on\x20the\x20check');}n['has_time_conditions']&&q['push']('The\x20tree\x20contains\x20Clock\x20(time)\x20conditions\x20—\x20results\x20may\x20change\x20over\x20time');n['has_rely_composition']&&q['push']('This\x20Guard\x20composes\x20other\x20Guards\x20via\x20rely\x20—\x20each\x20relied\x20Guard\x27s\x20semantics\x20apply\x20too');let r='Guard\x20semantics\x20analysis\x20(evaluate\x20BEFORE\x20relying\x20on\x20this\x20Guard):\x0a';i&&(r+='\x0a**On-chain\x20Guard**:\x20'+(j??'')+'\x20'+i+'\x0a');p&&(r+='\x0a##\x20Business\x20slot\x0a\x0a'+p['role']+'\x20('+p['host']+'.'+p['binding_field']+')\x0a',r+='\x0a-\x20Your\x20submission\x20means:\x20'+p['submission_meaning']+'\x0a',r+='-\x20If\x20it\x20PASSES:\x20'+p['on_pass']+'\x0a',r+='-\x20If\x20it\x20FAILS:\x20'+p['on_fail']+'\x0a',r+='-\x20Stakes:\x20'+p['stakes']+'\x0a');r+='\x0a##\x20Logic\x20tree\x0a\x0a```\x0a'+l['render']['tree_indented']+'\x0a```\x0a',r+='\x0a##\x20Lint\x20+\x20risk\x20assessment\x0a\x0a```\x0a'+formatLintResult(m)+'\x0a```\x0a';o&&(r+='\x0a##\x20Round-trip\x20verification\x20(vs\x20'+f+')\x0a\x0a'+o['summary']+'\x0a');const t=n;r+='\x0a##\x20Party\x20evaluation\x20(facts)\x0a',r+='\x0a\x20\x20•\x20Submission\x20requirements\x20(evidence\x20the\x20caller\x20must\x20submit):\x20'+t['submission_requirements']['length'];for(const D of t['submission_requirements']){r+='\x0a\x20\x20\x20\x20-\x20['+D['identifier']+']\x20'+(D['name']??'')+'\x20('+(D['object_type']??D['value_type']??'unknown')+')';}r+='\x0a\x20\x20•\x20On-chain\x20data\x20sources\x20read:\x20'+t['data_sources']['length'];for(const E of t['data_sources']){const F=E['is_mutable_onchain']?'\x20[MUTABLE\x20on-chain\x20—\x20who\x20controls\x20writes?]':'';r+='\x0a\x20\x20\x20\x20-\x20['+E['identifier']+']\x20'+(E['name']??'')+'\x20('+(E['object_type']??E['value_type']??E['kind'])+')'+F;}r+='\x0a\x20\x20•\x20Query\x20dependencies:\x20'+(t['query_dependencies']['length']>0x0?t['query_dependencies']['join'](',\x20'):'none');t['unresolved_queries']['length']>0x0&&(r+='\x0a\x20\x20•\x20UNRESOLVED\x20query\x20references\x20(not\x20in\x20the\x20GUARDQUERY\x20catalog):\x20'+t['unresolved_queries']['join'](',\x20'));r+='\x0a\x20\x20•\x20Time\x20conditions\x20(Clock):\x20'+(t['has_time_conditions']?'present':'none'),r+='\x0a\x20\x20•\x20Caller\x20identity\x20constraints\x20(Signer):\x20'+(t['has_signer_constraints']?'present':'none'),r+='\x0a\x20\x20•\x20Rely\x20composition\x20(other\x20Guards):\x20'+(t['has_rely_composition']?'present':'none'),r+='\x0a\x20\x20•\x20Lint:\x20'+m['summary']['errors']+'\x20error(s),\x20'+m['summary']['warnings']+'\x20warning(s),\x20ready='+m['summary']['ready'];if(q['length']>0x0){r+='\x0a\x0a##\x20Data-source\x20warnings\x0a';for(const G of q)r+='\x0a\x20\x20⚠\x20'+G+'\x0a';}const u={'action':'analyze_guard_semantics',...i?{'guard':i}:{},...j?{'guard_name':j}:{},...requiredSubmissionSlots(g['table'])?{'required_submission_slots':requiredSubmissionSlots(g['table'])}:{},...p?{'binding_semantics':{'action':k,'host':p['host'],'binding_field':p['binding_field'],'role':p['role'],'submission_meaning':p['submission_meaning'],'on_pass':p['on_pass'],'on_fail':p['on_fail'],'stakes':p['stakes']}}:{},'render':l['render'],'lint':m,...o?{'round_trip_diff':{'compare_with':f,'match':o['match'],'diffs':o['diffs'],'summary':o['summary']}}:{},'party_evaluation':n,...q['length']>0x0?{'data_source_warnings':q}:{}};return{'content':[{'type':'text','text':r}],'structuredContent':{'success':!![],'action':'analyze_guard_semantics','data':u,'message':'Guard\x20semantics\x20analysis\x20complete.'}};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{query_events}from'@wowok/wowok';import{Cache}from'@wowok/wowok/w/local/cache';import{strictParse,WorkflowOperationInputSchema}from'../../schema/index.js';import{fetchMachineNodes,fetchPermissionContext,batchFetchEntityOrder,batchQueryObjectsByIds,batchReadU64KeyedFields}from'../../graph/onchain/sdk-batch.js';import{resolveLocalNamesFor,listLocalAccounts,enumerateActionableForwards}from'../../knowledge/index.js';import{handleOnchainOperations}from'./onchain.js';import{resolveNetwork}from'./network.js';async function mapWithConcurrency(a,b,c){const d=new Array(a['length']);let e=0x0;const f=Array['from']({'length':Math['max'](0x1,Math['min'](b,a['length']))},async()=>{while(e<a['length']){const g=e++;try{d[g]=await c(a[g]);}catch{}}});return await Promise['all'](f),d;}function progressRelatedToLocalAccount(a,b,c,d){const e=new Set(d['map'](f=>f['address']['toLowerCase']()));if(b?.['builder']&&e['has'](String(b['builder'])['toLowerCase']()))return!![];if(b?.['agent']&&[...b['agent']]['some'](f=>e['has'](f)))return!![];for(const f of c){if(f['operators']['some'](g=>e['has'](String(g)['toLowerCase']())))return!![];}for(const g of Array['isArray'](a['session'])?a['session']:[]){for(const h of Array['isArray'](g?.['forwards'])?g['forwards']:[]){if(h?.['who']&&e['has'](String(h['who'])['toLowerCase']()))return!![];}}return![];}function buildWorkflowTaskFromData(a,b,c,d){const e=b['current']??'',f=b['machine'],g=b['task']??null,h=(Array['isArray'](b['namedOperator'])?b['namedOperator']:[])['map'](s=>({'name':String(s?.['name']??''),'operators':(s?.['operators']??[])['map'](t=>String(t))}));if(!f)return undefined;const i=String(f)['toLowerCase'](),j=c['machineNodes']['get'](i)??[],k=c['permAddrByMachine']['get'](i),l=k?c['permCtxByPermission']['get'](String(k)['toLowerCase']()):undefined,m=g?c['orderCtxByOrder']['get'](String(g)['toLowerCase']()):undefined,n=g?c['serviceByOrder']['get'](String(g)['toLowerCase']()):undefined,o=new Map(d['map'](s=>[s['address']['toLowerCase'](),s['name']])),p=enumerateActionableForwards(b,j,d['map'](s=>s['address']),h,m,l)['map'](s=>({'next_node':s['next_node'],'forward':s['forward'],'weight':s['weight'],'threshold':s['threshold'],'guard':s['guard'],'guard_submissions':s['guard']?c['guardSubsByAddr']['get'](String(s['guard'])['toLowerCase']()):undefined,'operator_kind':s['operator_kind'],'permission_index':s['permission_index'],'named_operator':s['named_operator'],'executable_accounts':s['executable_accounts']['map'](t=>({'address':t,'name':o['get'](t)}))})),q=p['some'](s=>s['executable_accounts']['length']>0x0),r=progressRelatedToLocalAccount(b,m,h,d);if(!q&&!r)return undefined;return{'progress':a,'progress_name':c['localNames']['get'](a['toLowerCase']()),'current':e,'machine':f,'machine_name':c['localNames']['get'](String(f)['toLowerCase']()),'task':g,'task_name':g?c['localNames']['get'](String(g)['toLowerCase']()):undefined,'service':n,'service_name':n?c['localNames']['get'](String(n)['toLowerCase']()):undefined,'context_repositories':(Array['isArray'](b['context_repositories'])?b['context_repositories']:[])['filter'](s=>typeof s==='string'&&s['startsWith']('0x'))['map'](s=>({'address':s,'name':c['localNames']['get'](s['toLowerCase']())})),'options':p,'terminal':p['length']===0x0,'actionable':q,'history_count':Number(b['history_count']??0x0),'current_time':Number(b['current_time']??0x0)||undefined};}async function handleList(a){const b=a['limit']??0x32,c=a['network'],e=a['no_cache'],f=await listLocalAccounts();if(f['length']===0x0){const J={'action':'list','tasks':[],'note':'No\x20local\x20accounts\x20found\x20—\x20create\x20or\x20import\x20an\x20account\x20first.'};return{'content':[{'type':'text','text':JSON['stringify']({'result':J})}],'structuredContent':{'result':J}};}const g=await query_events({'type':'ProgressEvent','order':'descending','limit':b*0x3,'no_cache':e,'network':c}),h=new Set((g?.['data']??[])['map'](K=>K?.['progress'])['filter'](K=>typeof K==='string'&&K['startsWith']('0x'))['map'](K=>K['toLowerCase']())),i=await batchFetchEntityOrder(f['map'](K=>String(K['address'])['toLowerCase']()),c,e)['catch'](()=>undefined),j=[...new Set((i?[...i['values']()]:[])['flatMap'](K=>K['items']['map'](L=>L['order'])))],k=j['length']>0x0?await batchQueryObjectsByIds(j,c,e):[];for(const K of k??[]){const L=K?.['data']??K,M=L?.['progress'];K?.['type']==='Order'&&typeof M==='string'&&M['startsWith']('0x')&&h['add'](M['toLowerCase']());}if(h['size']===0x0){const N={'action':'list','tasks':[]};return{'content':[{'type':'text','text':JSON['stringify']({'result':N})}],'structuredContent':{'result':N}};}const l=[...h],m=await batchQueryObjectsByIds(l,c,!![]),n=new Map();for(const O of m??[]){const P=O?.['data']??O;O?.['type']==='Progress'&&typeof P?.['machine']==='string'&&n['set'](String(O?.['query_name']??O?.['object']??'')['toLowerCase'](),P);}const q=[...new Set([...n['values']()]['map'](Q=>Q['machine'])['filter'](Q=>typeof Q==='string'))],r=[...new Set([...n['values']()]['map'](Q=>Q['task'])['filter'](Q=>typeof Q==='string'&&Q['startsWith']('0x')))],s=await batchQueryObjectsByIds(q,c,e),t=new Map(),u=new Set();for(const Q of s??[]){const R=Q?.['data']??Q,S=String(Q?.['query_name']??Q?.['object']??'')['toLowerCase'](),T=typeof R?.['permission']==='string'?R['permission']:undefined;t['set'](S,T);if(T)u['add'](String(T)['toLowerCase']());}const v=new Map();await mapWithConcurrency(q,0x8,async U=>{v['set'](String(U)['toLowerCase'](),await fetchMachineNodes(U,c,![]));});const w=[...new Set([...v['values']()]['flatMap'](U=>U['flatMap'](V=>V['pairs']['flatMap'](W=>W['forwards']['map'](X=>X['guard'])['filter'](X=>typeof X==='string'&&X['startsWith']('0x'))))))],x=new Map();if(w['length']>0x0){const U=await batchQueryObjectsByIds(w,c,e);for(const V of U??[]){const W=V?.['data']??V;if(V?.['type']==='Guard'&&Array['isArray'](W?.['table'])){const X=String(V?.['query_name']??V?.['object']??'')['toLowerCase'](),Y=W['table']['filter'](Z=>Z?.['b_submission'])['map'](Z=>({'identifier':Number(Z?.['identifier']??0x0),'name':String(Z?.['name']??'field\x20'+Z?.['identifier']),'value_type':String(Z?.['value_type']??''),'object_type':Z?.['object_type']?String(Z['object_type']):undefined}));if(Y['length']>0x0)x['set'](X,Y);}}}const y=new Map();await mapWithConcurrency([...u],0x8,async Z=>{y['set'](Z,await fetchPermissionContext(Z,c,e));});const z=new Map(),A=new Map(),B=await batchQueryObjectsByIds(r,c,e);for(const Z of B??[]){const a0=Z?.['data']??Z;if(Z?.['type']==='Order'){const a1=String(Z?.['query_name']??Z?.['object']??'')['toLowerCase']();z['set'](a1,{'builder':String(a0?.['builder']??a0?.['owner']??''),'agent':new Set((a0?.['agent']??[])['map'](a2=>String(a2)['toLowerCase']()))});if(typeof a0?.['service']==='string')A['set'](a1,a0['service']);}}const C=[...n['values']()]['flatMap'](a2=>Array['isArray'](a2?.['context_repositories'])?a2['context_repositories']:[]),D=[...l,...q,...r,...[...A['values']()]['filter'](a2=>typeof a2==='string'),...C['filter'](a2=>typeof a2==='string')],{byAddress:E}=await resolveLocalNamesFor(D),F={'machineNodes':v,'permAddrByMachine':t,'permCtxByPermission':y,'orderCtxByOrder':z,'serviceByOrder':A,'localNames':E,'guardSubsByAddr':x},G=await mapWithConcurrency(l,0x8,async a2=>{try{const a3=n['get'](String(a2)['toLowerCase']());return a3?buildWorkflowTaskFromData(a2,a3,F,f):undefined;}catch{return undefined;}}),H=G['filter'](a2=>a2!==undefined)['sort']((a2,a3)=>Number(a3['actionable'])-Number(a2['actionable'])),I={'action':'list','tasks':H['slice'](0x0,b)};return{'content':[{'type':'text','text':JSON['stringify']({'result':I})}],'structuredContent':{'result':I}};}async function handleTask(a){const b=a['network'],c=a['no_cache'],e=a['progress'],f=await listLocalAccounts(),g=await batchQueryObjectsByIds([e],b,!![]),h=(g??[])['find'](y=>y?.['type']==='Progress'),i=h?h?.['data']??h:undefined;if(!h||!i||typeof i?.['machine']!=='string'){const y={'action':'task','note':'Progress\x20'+e+'\x20not\x20found\x20on\x20'+(b??'the\x20current\x20network')+'.'};return{'content':[{'type':'text','text':JSON['stringify']({'result':y})}],'structuredContent':{'result':y}};}const j=i['machine'],k=String(j)['toLowerCase'](),l=await batchQueryObjectsByIds([j],b,c),m=(l??[])['find'](z=>z?.['type']==='Machine'),n=m?m?.['data']??m:undefined,p=n&&typeof n?.['permission']==='string'?n['permission']:undefined,q=await fetchMachineNodes(j,b,![]),r={'machineNodes':new Map([[k,q]]),'permAddrByMachine':new Map([[k,p]]),'permCtxByPermission':new Map(),'orderCtxByOrder':new Map(),'serviceByOrder':new Map(),'localNames':new Map(),'guardSubsByAddr':new Map()},s=[...new Set(q['flatMap'](z=>z['pairs']['flatMap'](A=>A['forwards']['map'](B=>B['guard'])['filter'](B=>typeof B==='string'&&B['startsWith']('0x')))))];if(s['length']>0x0){const z=await batchQueryObjectsByIds(s,b,c);for(const A of z??[]){const B=A?.['data']??A;if(A?.['type']==='Guard'&&Array['isArray'](B?.['table'])){const C=String(A?.['query_name']??A?.['object']??'')['toLowerCase'](),D=B['table']['filter'](E=>E?.['b_submission'])['map'](E=>({'identifier':Number(E?.['identifier']??0x0),'name':String(E?.['name']??'field\x20'+E?.['identifier']),'value_type':String(E?.['value_type']??''),'object_type':E?.['object_type']?String(E['object_type']):undefined}));if(D['length']>0x0)r['guardSubsByAddr']['set'](C,D);}}}p&&r['permCtxByPermission']['set'](String(p)['toLowerCase'](),await fetchPermissionContext(p,b,c));if(typeof i?.['task']==='string'&&i['task']['startsWith']('0x')){const E=await batchQueryObjectsByIds([i['task']],b,c);for(const F of E??[]){if(F?.['type']==='Order'){const G=F?.['data']??F,H=String(F?.['query_name']??F?.['object']??'')['toLowerCase']();r['orderCtxByOrder']['set'](H,{'builder':String(G?.['builder']??G?.['owner']??''),'agent':new Set((G?.['agent']??[])['map'](I=>String(I)['toLowerCase']()))}),typeof G?.['service']==='string'&&r['serviceByOrder']['set'](H,G['service']);}}}const t=Array['isArray'](i?.['context_repositories'])?i['context_repositories']:[],u=[String(h?.['object']??e),i?.['task'],j,...t]['filter'](I=>typeof I==='string'&&I['startsWith']('0x')),{byAddress:v}=await resolveLocalNamesFor(u);r['localNames']=v;const w=buildWorkflowTaskFromData(String(h?.['query_name']??h?.['object']??e),i,r,f),x=w?{'action':'task','tasks':[w]}:{'action':'task','note':'Progress\x20snapshot\x20could\x20not\x20be\x20built.'};return{'content':[{'type':'text','text':JSON['stringify']({'result':x})}],'structuredContent':{'result':x}};}const WORKFLOW_HISTORY_PREFIX='__workflow_history',WORKFLOW_HISTORY_RETENTION_MS=0x5a*0x18*0xe10*0x3e8;async function readHistoryStore(a){const b=await Cache['read']([WORKFLOW_HISTORY_PREFIX,a],async()=>({'expire':'INFINITE','data':{}}));return b?.['data']??{};}async function writeHistoryStore(a,b){await Cache['read']([WORKFLOW_HISTORY_PREFIX,a],async()=>({'expire':'INFINITE','data':b}),!![]);}async function handleHistory(a){const b=await resolveNetwork(a['network']),c=a['limit']??0x32,d=a['prune']??!![],g=a['progress'],h=await batchQueryObjectsByIds([g],b,!![]),i=(h??[])[0x0],j=i?.['object']??(typeof g==='string'&&g['startsWith']('0x')?g:undefined),k=i?.['data']??i;if(!j||i?.['type']!=='Progress'){const E={'action':'history','note':'Not\x20a\x20Progress\x20object\x20or\x20not\x20found.'};return{'content':[{'type':'text','text':JSON['stringify']({'result':E})}],'structuredContent':{'result':E}};}const l=Number(k?.['history_count']??0x0),m=await readHistoryStore(b),n=m[j]??{'cursor':-0x1,'lastActivity':0x0,'records':[]},o=[],p=n['cursor']+0x1;if(p<l){const F=[];for(let H=p;H<l;H++)F['push'](H);const G=await batchReadU64KeyedFields(j,F,b,![]);for(let I=p;I<l;I++){const J=G['get'](String(I));if(!J)break;o['push']({'index':I,'node':J['node'],'next_node':J['next_node'],'time':J['time'],'session':J['session']});}}const q=o['length']>0x0?p+o['length']-0x1:n['cursor'],t=[...n['records'],...o],u=o['length']>0x0?Math['max'](n['lastActivity'],...o['map'](K=>K['time'])):n['lastActivity'];m[j]={'cursor':q,'lastActivity':u,'records':t};let v=0x0;if(d){const K=Date['now']()-WORKFLOW_HISTORY_RETENTION_MS;for(const L of Object['keys'](m)){const M=m[L];M['lastActivity']>0x0&&M['lastActivity']<K&&(delete m[L],v++);}}await writeHistoryStore(b,m);const w=typeof k?.['machine']==='string'?k['machine']:undefined,x=new Map();if(w)try{const N=await fetchMachineNodes(w,b,![]);for(const O of N??[]){for(const P of O?.['pairs']??[]){for(const Q of P?.['forwards']??[]){if(Q?.['name'])x['set'](O['name']+'|'+Q['name'],Number(Q?.['weight']??0x0));}}}}catch{}const y=[],z=R=>{for(const S of R??[]){const T=String(S?.['value_type']??'')['toLowerCase'](),U=S?.['value'];if(!T['includes']('address'))continue;if(Array['isArray'](U)){for(const V of U)if(typeof V==='string'&&V['startsWith']('0x'))y['push'](V);}else typeof U==='string'&&U['startsWith']('0x')&&y['push'](U);}};for(const R of t){for(const S of Array['isArray'](R?.['session'])?R['session']:[]){for(const T of Array['isArray'](S?.['forwards'])?S['forwards']:[]){if(T?.['who'])y['push'](String(T['who']));z(T?.['retained_submission']);}}}const {byAddress:A}=await resolveLocalNamesFor([...new Set(y)]),B=U=>{const V=String(U?.['value_type']??'')['toLowerCase'](),W=U?.['value'];if(!V['includes']('address'))return U;const X=Array['isArray'](W)?typeof W[0x0]==='string'?W[0x0]:undefined:typeof W==='string'?W:undefined;return{...U,'display_name':X?A['get'](String(X)['toLowerCase']()):undefined};},C=t['map'](U=>({...U,'session':(Array['isArray'](U?.['session'])?U['session']:[])['map'](V=>({...V,'forwards':(Array['isArray'](V?.['forwards'])?V['forwards']:[])['map'](W=>({...W,'weight':x['get'](V?.['next_node']+'|'+W?.['forward'])??undefined,'who_name':W?.['who']?A['get'](String(W['who'])['toLowerCase']()):undefined,'retained_submission':(Array['isArray'](W?.['retained_submission'])?W['retained_submission']:[])['map'](B)}))}))})),D={'action':'history','history':{'progress':j,'current':k?.['current'],'records':[...C]['sort']((U,V)=>V['index']-U['index'])['slice'](0x0,c),'synced':o['length'],'cursor':q,'pruned':v}};return{'content':[{'type':'text','text':JSON['stringify']({'result':D})}],'structuredContent':{'result':D}};}async function handleOperate(a){const b={'operation_type':'progress','data':{'object':a['progress'],'operate':a['operate']},'env':{'account':a['account']??undefined,'network':a['network'],'no_cache':a['no_cache'],'confirmed':a['confirmed'],'dry_run':a['dry_run']}};return a['submission']!==undefined&&(b['submission']=a['submission']),await handleOnchainOperations(b);}export async function handleWorkflowOperation(a){const b=strictParse(WorkflowOperationInputSchema,a,'workflow_operation\x20input');if(b['action']==='list')return await handleList(b);if(b['action']==='task')return await handleTask(b);if(b['action']==='history')return await handleHistory(b);return await handleOperate(b);}
|
|
1
|
+
import{query_events}from'@wowok/wowok';import{Cache}from'@wowok/wowok/w/local/cache';import{strictParse,WorkflowOperationInputSchema}from'../../schema/index.js';import{fetchMachineNodes,fetchPermissionContext,batchFetchEntityOrder,batchQueryObjectsByIds,batchReadU64KeyedFields}from'../../graph/onchain/sdk-batch.js';import{resolveLocalNamesFor,listLocalAccounts,enumerateActionableForwards}from'../../knowledge/index.js';import{handleOnchainOperations}from'./onchain.js';import{resolveNetwork}from'./network.js';async function mapWithConcurrency(a,b,c){const d=new Array(a['length']);let e=0x0;const f=Array['from']({'length':Math['max'](0x1,Math['min'](b,a['length']))},async()=>{while(e<a['length']){const g=e++;try{d[g]=await c(a[g]);}catch{}}});return await Promise['all'](f),d;}function progressRelatedToLocalAccount(a,b,c,d){const e=new Set(d['map'](f=>f['address']['toLowerCase']()));if(b?.['builder']&&e['has'](String(b['builder'])['toLowerCase']()))return!![];if(b?.['agent']&&[...b['agent']]['some'](f=>e['has'](f)))return!![];for(const f of c){if(f['operators']['some'](g=>e['has'](String(g)['toLowerCase']())))return!![];}for(const g of Array['isArray'](a['session'])?a['session']:[]){for(const h of Array['isArray'](g?.['forwards'])?g['forwards']:[]){if(h?.['who']&&e['has'](String(h['who'])['toLowerCase']()))return!![];}}return![];}function buildWorkflowTaskFromData(a,b,c,d){const e=b['current']??'',f=b['machine'],g=b['task']??null,h=(Array['isArray'](b['namedOperator'])?b['namedOperator']:[])['map'](s=>({'name':String(s?.['name']??''),'operators':(s?.['operators']??[])['map'](t=>String(t))}));if(!f)return undefined;const i=String(f)['toLowerCase'](),j=c['machineNodes']['get'](i)??[],k=c['permAddrByMachine']['get'](i),l=k?c['permCtxByPermission']['get'](String(k)['toLowerCase']()):undefined,m=g?c['orderCtxByOrder']['get'](String(g)['toLowerCase']()):undefined,n=g?c['serviceByOrder']['get'](String(g)['toLowerCase']()):undefined,o=new Map(d['map'](s=>[s['address']['toLowerCase'](),s['name']])),p=enumerateActionableForwards(b,j,d['map'](s=>s['address']),h,m,l)['map'](s=>({'next_node':s['next_node'],'forward':s['forward'],'weight':s['weight'],'threshold':s['threshold'],'guard':s['guard'],'guard_submissions':s['guard']?c['guardSubsByAddr']['get'](String(s['guard'])['toLowerCase']()):undefined,'operator_kind':s['operator_kind'],'permission_index':s['permission_index'],'named_operator':s['named_operator'],'executable_accounts':s['executable_accounts']['map'](t=>({'address':t,'name':o['get'](t)}))})),q=p['some'](s=>s['executable_accounts']['length']>0x0),r=progressRelatedToLocalAccount(b,m,h,d);if(!q&&!r)return undefined;return{'progress':a,'progress_name':c['localNames']['get'](a['toLowerCase']()),'current':e,'machine':f,'machine_name':c['localNames']['get'](String(f)['toLowerCase']()),'task':g,'task_name':g?c['localNames']['get'](String(g)['toLowerCase']()):undefined,'service':n,'service_name':n?c['localNames']['get'](String(n)['toLowerCase']()):undefined,'context_repositories':(Array['isArray'](b['context_repositories'])?b['context_repositories']:[])['filter'](s=>typeof s==='string'&&s['startsWith']('0x'))['map'](s=>({'address':s,'name':c['localNames']['get'](s['toLowerCase']())})),'options':p,'terminal':p['length']===0x0,'actionable':q,'history_count':Number(b['history_count']??0x0),'current_time':Number(b['current_time']??0x0)||undefined};}async function handleList(a){const b=a['limit']??0x32,c=a['network'],e=a['no_cache'],f=await listLocalAccounts();if(f['length']===0x0){const J={'action':'list','tasks':[],'note':'No\x20local\x20accounts\x20found\x20—\x20create\x20or\x20import\x20an\x20account\x20first.'};return{'content':[{'type':'text','text':JSON['stringify']({'result':J})}],'structuredContent':{'result':J}};}const g=await query_events({'type':'ProgressEvent','order':'descending','limit':b*0x3,'no_cache':e,'network':c}),h=new Set((g?.['data']??[])['map'](K=>K?.['progress'])['filter'](K=>typeof K==='string'&&K['startsWith']('0x'))['map'](K=>K['toLowerCase']())),i=await batchFetchEntityOrder(f['map'](K=>String(K['address'])['toLowerCase']()),c,e)['catch'](()=>undefined),j=[...new Set((i?[...i['values']()]:[])['flatMap'](K=>K['items']['map'](L=>L['order'])))],k=j['length']>0x0?await batchQueryObjectsByIds(j,c,e):[];for(const K of k??[]){const L=K?.['data']??K,M=L?.['progress'];K?.['type']==='Order'&&typeof M==='string'&&M['startsWith']('0x')&&h['add'](M['toLowerCase']());}if(h['size']===0x0){const N={'action':'list','tasks':[]};return{'content':[{'type':'text','text':JSON['stringify']({'result':N})}],'structuredContent':{'result':N}};}const l=[...h],m=await batchQueryObjectsByIds(l,c,!![]),n=new Map();for(const O of m??[]){const P=O?.['data']??O;O?.['type']==='Progress'&&typeof P?.['machine']==='string'&&n['set'](String(O?.['query_name']??O?.['object']??'')['toLowerCase'](),P);}const q=[...new Set([...n['values']()]['map'](Q=>Q['machine'])['filter'](Q=>typeof Q==='string'))],r=[...new Set([...n['values']()]['map'](Q=>Q['task'])['filter'](Q=>typeof Q==='string'&&Q['startsWith']('0x')))],s=await batchQueryObjectsByIds(q,c,e),t=new Map(),u=new Set();for(const Q of s??[]){const R=Q?.['data']??Q,S=String(Q?.['query_name']??Q?.['object']??'')['toLowerCase'](),T=typeof R?.['permission']==='string'?R['permission']:undefined;t['set'](S,T);if(T)u['add'](String(T)['toLowerCase']());}const v=new Map();await mapWithConcurrency(q,0x8,async U=>{v['set'](String(U)['toLowerCase'](),await fetchMachineNodes(U,c,![]));});const w=[...new Set([...v['values']()]['flatMap'](U=>U['flatMap'](V=>V['pairs']['flatMap'](W=>W['forwards']['map'](X=>X['guard'])['filter'](X=>typeof X==='string'&&X['startsWith']('0x'))))))],x=new Map();if(w['length']>0x0){const U=await batchQueryObjectsByIds(w,c,e);for(const V of U??[]){const W=V?.['data']??V;if(V?.['type']==='Guard'&&Array['isArray'](W?.['table'])){const X=String(V?.['query_name']??V?.['object']??'')['toLowerCase'](),Y=W['table']['filter'](Z=>Z?.['b_submission'])['map'](Z=>({'identifier':Number(Z?.['identifier']??0x0),'name':String(Z?.['name']??'field\x20'+Z?.['identifier']),'value_type':String(Z?.['value_type']??''),'object_type':Z?.['object_type']?String(Z['object_type']):undefined}));if(Y['length']>0x0)x['set'](X,Y);}}}const y=new Map();await mapWithConcurrency([...u],0x8,async Z=>{y['set'](Z,await fetchPermissionContext(Z,c,e));});const z=new Map(),A=new Map(),B=await batchQueryObjectsByIds(r,c,e);for(const Z of B??[]){const a0=Z?.['data']??Z;if(Z?.['type']==='Order'){const a1=String(Z?.['query_name']??Z?.['object']??'')['toLowerCase']();z['set'](a1,{'builder':String(a0?.['builder']??a0?.['owner']??''),'agent':new Set((a0?.['agent']??[])['map'](a2=>String(a2)['toLowerCase']()))});if(typeof a0?.['service']==='string')A['set'](a1,a0['service']);}}const C=[...n['values']()]['flatMap'](a2=>Array['isArray'](a2?.['context_repositories'])?a2['context_repositories']:[]),D=[...l,...q,...r,...[...A['values']()]['filter'](a2=>typeof a2==='string'),...C['filter'](a2=>typeof a2==='string')],{byAddress:E}=await resolveLocalNamesFor(D),F={'machineNodes':v,'permAddrByMachine':t,'permCtxByPermission':y,'orderCtxByOrder':z,'serviceByOrder':A,'localNames':E,'guardSubsByAddr':x},G=await mapWithConcurrency(l,0x8,async a2=>{try{const a3=n['get'](String(a2)['toLowerCase']());return a3?buildWorkflowTaskFromData(a2,a3,F,f):undefined;}catch{return undefined;}}),H=G['filter'](a2=>a2!==undefined)['sort']((a2,a3)=>Number(a3['actionable'])-Number(a2['actionable'])),I={'action':'list','tasks':H['slice'](0x0,b)};return{'content':[{'type':'text','text':JSON['stringify']({'result':I})}],'structuredContent':{'result':I}};}async function handleTask(a){const b=a['network'],c=a['no_cache'],e=a['progress'],f=await listLocalAccounts(),g=await batchQueryObjectsByIds([e],b,!![]),h=(g??[])['find'](y=>y?.['type']==='Progress'),i=h?h?.['data']??h:undefined;if(!h||!i||typeof i?.['machine']!=='string'){const y={'action':'task','note':'Progress\x20'+e+'\x20not\x20found\x20on\x20'+(b??'the\x20current\x20network')+'.'};return{'content':[{'type':'text','text':JSON['stringify']({'result':y})}],'structuredContent':{'result':y}};}const j=i['machine'],k=String(j)['toLowerCase'](),l=await batchQueryObjectsByIds([j],b,c),m=(l??[])['find'](z=>z?.['type']==='Machine'),n=m?m?.['data']??m:undefined,p=n&&typeof n?.['permission']==='string'?n['permission']:undefined,q=await fetchMachineNodes(j,b,![]),r={'machineNodes':new Map([[k,q]]),'permAddrByMachine':new Map([[k,p]]),'permCtxByPermission':new Map(),'orderCtxByOrder':new Map(),'serviceByOrder':new Map(),'localNames':new Map(),'guardSubsByAddr':new Map()},s=[...new Set(q['flatMap'](z=>z['pairs']['flatMap'](A=>A['forwards']['map'](B=>B['guard'])['filter'](B=>typeof B==='string'&&B['startsWith']('0x')))))];if(s['length']>0x0){const z=await batchQueryObjectsByIds(s,b,c);for(const A of z??[]){const B=A?.['data']??A;if(A?.['type']==='Guard'&&Array['isArray'](B?.['table'])){const C=String(A?.['query_name']??A?.['object']??'')['toLowerCase'](),D=B['table']['filter'](E=>E?.['b_submission'])['map'](E=>({'identifier':Number(E?.['identifier']??0x0),'name':String(E?.['name']??'field\x20'+E?.['identifier']),'value_type':String(E?.['value_type']??''),'object_type':E?.['object_type']?String(E['object_type']):undefined}));if(D['length']>0x0)r['guardSubsByAddr']['set'](C,D);}}}p&&r['permCtxByPermission']['set'](String(p)['toLowerCase'](),await fetchPermissionContext(p,b,c));if(typeof i?.['task']==='string'&&i['task']['startsWith']('0x')){const E=await batchQueryObjectsByIds([i['task']],b,c);for(const F of E??[]){if(F?.['type']==='Order'){const G=F?.['data']??F,H=String(F?.['query_name']??F?.['object']??'')['toLowerCase']();r['orderCtxByOrder']['set'](H,{'builder':String(G?.['builder']??G?.['owner']??''),'agent':new Set((G?.['agent']??[])['map'](I=>String(I)['toLowerCase']()))}),typeof G?.['service']==='string'&&r['serviceByOrder']['set'](H,G['service']);}}}const t=Array['isArray'](i?.['context_repositories'])?i['context_repositories']:[],u=[String(h?.['object']??e),i?.['task'],j,...t]['filter'](I=>typeof I==='string'&&I['startsWith']('0x')),{byAddress:v}=await resolveLocalNamesFor(u);r['localNames']=v;const w=buildWorkflowTaskFromData(String(h?.['query_name']??h?.['object']??e),i,r,f),x=w?{'action':'task','tasks':[w]}:{'action':'task','note':'Progress\x20snapshot\x20could\x20not\x20be\x20built.'};return{'content':[{'type':'text','text':JSON['stringify']({'result':x})}],'structuredContent':{'result':x}};}const WORKFLOW_HISTORY_PREFIX='__workflow_history',WORKFLOW_HISTORY_RETENTION_MS=0x5a*0x18*0xe10*0x3e8;async function readHistoryStore(a){const b=await Cache['read']([WORKFLOW_HISTORY_PREFIX,a],async()=>({'expire':'INFINITE','data':{}}));return b?.['data']??{};}async function writeHistoryStore(a,b){await Cache['read']([WORKFLOW_HISTORY_PREFIX,a],async()=>({'expire':'INFINITE','data':b}),!![]);}async function handleHistory(a){const b=await resolveNetwork(a['network']),c=a['limit']??0x32,d=a['prune']??!![],g=a['progress'],h=await batchQueryObjectsByIds([g],b,!![]),i=(h??[])[0x0],j=i?.['object']??(typeof g==='string'&&g['startsWith']('0x')?g:undefined),k=i?.['data']??i;if(!j||i?.['type']!=='Progress'){const E={'action':'history','note':'Not\x20a\x20Progress\x20object\x20or\x20not\x20found.'};return{'content':[{'type':'text','text':JSON['stringify']({'result':E})}],'structuredContent':{'result':E}};}const l=Number(k?.['history_count']??0x0),m=await readHistoryStore(b),n=m[j]??{'cursor':-0x1,'lastActivity':0x0,'records':[]},o=[],p=n['cursor']+0x1;if(p<l){const F=[];for(let H=p;H<l;H++)F['push'](H);const G=await batchReadU64KeyedFields(j,F,b,![]);for(let I=p;I<l;I++){const J=G['get'](String(I));if(!J)break;o['push']({'index':I,'node':J['node'],'next_node':J['next_node'],'time':J['time'],'session':J['session']});}}const q=o['length']>0x0?p+o['length']-0x1:n['cursor'],t=[...n['records'],...o],u=o['length']>0x0?Math['max'](n['lastActivity'],...o['map'](K=>K['time'])):n['lastActivity'];m[j]={'cursor':q,'lastActivity':u,'records':t};let v=0x0;if(d){const K=Date['now']()-WORKFLOW_HISTORY_RETENTION_MS;for(const L of Object['keys'](m)){const M=m[L];M['lastActivity']>0x0&&M['lastActivity']<K&&(delete m[L],v++);}}await writeHistoryStore(b,m);const w=typeof k?.['machine']==='string'?k['machine']:undefined,x=new Map();if(w)try{const N=await fetchMachineNodes(w,b,![]);for(const O of N??[]){for(const P of O?.['pairs']??[]){for(const Q of P?.['forwards']??[]){if(Q?.['name'])x['set'](O['name']+'|'+Q['name'],Number(Q?.['weight']??0x0));}}}}catch{}const y=[],z=R=>{for(const S of R??[]){const T=String(S?.['value_type']??'')['toLowerCase'](),U=S?.['value'];if(!T['includes']('address'))continue;if(Array['isArray'](U)){for(const V of U)if(typeof V==='string'&&V['startsWith']('0x'))y['push'](V);}else typeof U==='string'&&U['startsWith']('0x')&&y['push'](U);}};for(const R of t){for(const S of Array['isArray'](R?.['session'])?R['session']:[]){for(const T of Array['isArray'](S?.['forwards'])?S['forwards']:[]){if(T?.['who'])y['push'](String(T['who']));z(T?.['retained_submission']);}}}const {byAddress:A}=await resolveLocalNamesFor([...new Set(y)]),B=U=>{const V=String(U?.['value_type']??'')['toLowerCase'](),W=U?.['value'];if(!V['includes']('address'))return U;const X=Array['isArray'](W)?typeof W[0x0]==='string'?W[0x0]:undefined:typeof W==='string'?W:undefined;return{...U,'display_name':X?A['get'](String(X)['toLowerCase']()):undefined};},C=t['map'](U=>({...U,'session':(Array['isArray'](U?.['session'])?U['session']:[])['map'](V=>({...V,'forwards':(Array['isArray'](V?.['forwards'])?V['forwards']:[])['map'](W=>({...W,'weight':x['get'](V?.['next_node']+'|'+W?.['forward'])??undefined,'who_name':W?.['who']?A['get'](String(W['who'])['toLowerCase']()):undefined,'retained_submission':(Array['isArray'](W?.['retained_submission'])?W['retained_submission']:[])['map'](B)}))}))})),D={'action':'history','history':{'progress':j,'current':k?.['current'],'records':[...C]['sort']((U,V)=>V['index']-U['index'])['slice'](0x0,c),'synced':o['length'],'cursor':q,'pruned':v}};return{'content':[{'type':'text','text':JSON['stringify']({'result':D})}],'structuredContent':{'result':D}};}async function handleOperate(a){const b={'operation_type':'progress','data':{'object':a['progress'],'operate':a['operate']},'env':{'account':a['account']?a['account']:undefined,'network':a['network'],'no_cache':a['no_cache'],'confirmed':a['confirmed'],'dry_run':a['dry_run']}};return a['submission']!==undefined&&(b['submission']=a['submission']),await handleOnchainOperations(b);}export async function handleWorkflowOperation(a){const b=strictParse(WorkflowOperationInputSchema,a,'workflow_operation\x20input');if(b['action']==='list')return await handleList(b);if(b['action']==='task')return await handleTask(b);if(b['action']==='history')return await handleHistory(b);return await handleOperate(b);}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{readdirSync,readFileSync,writeFileSync,existsSync,mkdirSync,rmSync,statSync,cpSync,renameSync}from'node:fs';import{join,relative,resolve,sep,dirname,basename}from'node:path';import{getWowokWorkspaceDir}from'@wowok/wowok';import{strictParse}from'../../schema/index.js';import{WorkspaceOperationInputSchema}from'../../schema/workspace/index.js';const WORKSPACE_ROOT=getWowokWorkspaceDir();function resolveWorkspacePath(a){const b=resolve(WORKSPACE_ROOT,a);if(b!==WORKSPACE_ROOT&&!b['startsWith'](WORKSPACE_ROOT+sep))throw new Error('path\x20\x27'+a+'\x27\x20escapes\x20the\x20workspace\x20root');return b;}function decodeWriteContent(a,b){if(b!=='base64')return Buffer['from'](a,'utf-8');const c=a['replace'](/\s+/g,''),d=Buffer['from'](c,'base64');if(d['toString']('base64')['replace'](/\s+/g,'')!==c)throw new Error('\x27content\x27\x20is\x20not\x20valid\x20base64');if(d['length']>0xa*0x400*0x400)throw new Error('base64\x20write\x20payload\x20exceeds\x20the\x2010MB\x20limit');return d;}export function workspaceReadmeContent(){return['#\x20WoWok\x20Workspace','','>\x20This\x20folder\x20is\x20your\x20WoWok\x20file\x20workspace.\x20Files\x20here\x20are\x20managed\x20by\x20the','>\x20`workspace_operation`\x20tool\x20and\x20can\x20be\x20selected\x20as\x20AI\x20context\x20in\x20the\x20chat.','','##\x20What\x20lives\x20here','','-\x20**Generated\x20files**\x20—\x20`machineNode2file`\x20/\x20`guard2file`\x20exports\x20land\x20here','\x20\x20(`workspace/<kind>_<name>.<json|md>`)\x20for\x20review\x20before\x20deployment.','-\x20**WIP\x20/\x20WTS**\x20—\x20`generate_wip`,\x20`sign_wip`\x20/\x20`sign_wts`\x20and\x20`generate_wts`','\x20\x20write\x20their\x20outputs\x20here\x20(`wip_<ts>.wip`,\x20`signed_<name>`,\x20`wts/`).','-\x20**Your\x20documents**\x20—\x20anything\x20you\x20want\x20the\x20AI\x20to\x20read\x20as\x20context.','','##\x20How\x20to\x20use\x20it','','1.\x20Click\x20a\x20file\x20in\x20the\x20Workspace\x20drawer\x20to\x20load\x20it\x20into\x20the\x20chat\x20as\x20context.','2.\x20Ask\x20the\x20AI\x20to\x20generate\x20a\x20Machine\x20or\x20Guard\x20—\x20the\x20export\x20is\x20saved\x20here.','3.\x20Use\x20`workspace_operation`\x20(list\x20/\x20read\x20/\x20write\x20/\x20create\x20/\x20delete\x20/\x20move\x20/','\x20\x20\x20rename)\x20from\x20the\x20client\x20or\x20an\x20MCP-capable\x20AI\x20client.','','Everything\x20is\x20local\x20to\x20this\x20device\x20—\x20nothing\x20here\x20touches\x20the\x20chain.']['join']('\x0a');}export function ensureWorkspaceReadme(){mkdirSync(WORKSPACE_ROOT,{'recursive':!![]});const a=join(WORKSPACE_ROOT,'README.md');return!existsSync(a)&&writeFileSync(a,workspaceReadmeContent(),'utf-8'),a;}function listRecursive(a,b,c,d=0x0){if(d>0x8)return;let f;try{f=readdirSync(a,{'withFileTypes':!![]});}catch{return;}for(const g of f){const h=join(a,g['name']),i=relative(b,h)['split'](sep)['join']('/');let j=0x0,k=0x0;try{const l=statSync(h);k=l['size'],j=l['mtimeMs'];}catch{}g['isDirectory']()?(c['push']({'path':i,'is_dir':!![],'size':0x0,'mtime':j}),listRecursive(h,b,c,d+0x1)):c['push']({'path':i,'is_dir':![],'size':k,'mtime':j});}}const SEARCH_MAX_FILE_BYTES=0x5*0x400*0x400,EDIT_MAX_FILE_BYTES=0x2*0x400*0x400,READ_BASE64_MAX_BYTES=0xa*0x400*0x400,SEARCH_DEFAULT_MAX_RESULTS=0x32,SEARCH_HARD_CAP_MAX_RESULTS=0xc8,READ_DEFAULT_LINE_LIMIT=0x7d0;function escapeRegExpLiteral(a){return a['replace'](/[.*+?^${}()|[\]\\]/g,'\x5c$&');}function wildcardToRegExp(a){let b='';for(let d=0x0;d<a['length'];d++){const e=a[d];if(e==='*')a[d+0x1]==='*'?(d++,a[d+0x1]==='/'?(b+='(?:.*/)?',d++):b+='.*'):b+='[^/]*';else{if(e==='?')b+='[^/]';else{if(e==='{'){const f=a['indexOf']('}',d);if(f===-0x1){b+='\x5c{';continue;}const g=a['slice'](d+0x1,f)['split'](',')['map'](escapeRegExpLiteral)['join']('|');b+='(?:'+g+')',d=f;}else b+=escapeRegExpLiteral(e);}}}return new RegExp('^'+b+'$');}export async function handleWorkspaceOperation(a){const b=strictParse(WorkspaceOperationInputSchema,a,'workspace_operation\x20input');mkdirSync(WORKSPACE_ROOT,{'recursive':!![]}),ensureWorkspaceReadme();let c;switch(b['action']){case'resolve':c={'action':'resolve','dir':WORKSPACE_ROOT};break;case'list':{const d=[];listRecursive(WORKSPACE_ROOT,WORKSPACE_ROOT,d),c={'action':'list','dir':WORKSPACE_ROOT,'files':d};break;}case'read':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27read\x27');const g=resolveWorkspacePath(b['path']);if(!existsSync(g))throw new Error('file\x20not\x20found:\x20'+b['path']);if(b['encoding']==='base64'){const q=statSync(g);if(q['size']>READ_BASE64_MAX_BYTES)throw new Error('file\x20too\x20large\x20for\x20base64\x20read\x20(>10MB):\x20'+b['path']);const r=readFileSync(g)['toString']('base64');c={'action':'read','encoding':'base64','path':g,'content':r,'size':q['size']};break;}const h=readFileSync(g,'utf-8'),j=h['split']('\x0a')['length'];if(b['offset']===undefined&&b['limit']===undefined){c={'action':'read','path':g,'content':h,'total_lines':j,'offset':0x1,'limit':j,'truncated':![]};break;}const k=b['offset']??0x1,l=Math['min'](b['limit']??READ_DEFAULT_LINE_LIMIT,READ_DEFAULT_LINE_LIMIT),n=h['split']('\x0a'),o=n['slice'](k-0x1,k-0x1+l),p=k-0x1+l<j;c={'action':'read','path':g,'content':o['join']('\x0a'),'total_lines':j,'offset':k,'limit':l,'truncated':p};break;}case'write':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27write\x27');if(b['content']===undefined)throw new Error('\x27content\x27\x20is\x20required\x20for\x20action=\x27write\x27');const s=resolveWorkspacePath(b['path']);mkdirSync(dirname(s),{'recursive':!![]}),writeFileSync(s,decodeWriteContent(b['content'],b['encoding'])),c={'action':'write','path':s,'ok':!![]};break;}case'delete':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27delete\x27');const t=resolveWorkspacePath(b['path']);if(!existsSync(t))throw new Error('file\x20not\x20found:\x20'+b['path']);rmSync(t,{'recursive':!![],'force':!![]}),c={'action':'delete','path':t,'ok':!![]};break;}case'create_file':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27create_file\x27');const u=resolveWorkspacePath(b['path']);if(existsSync(u))throw new Error('file\x20already\x20exists:\x20'+b['path']);mkdirSync(dirname(u),{'recursive':!![]}),writeFileSync(u,decodeWriteContent(b['content']??'',b['encoding'])),c={'action':'create_file','path':u,'ok':!![]};break;}case'create_dir':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27create_dir\x27');const v=resolveWorkspacePath(b['path']);mkdirSync(v,{'recursive':!![]}),c={'action':'create_dir','path':v,'ok':!![]};break;}case'copy':{if(!b['from'])throw new Error('\x27from\x27\x20is\x20required\x20for\x20action=\x27copy\x27');if(!b['to'])throw new Error('\x27to\x27\x20is\x20required\x20for\x20action=\x27copy\x27');const w=resolveWorkspacePath(b['from']);let x=resolveWorkspacePath(b['to']);if(!existsSync(w))throw new Error('source\x20not\x20found:\x20'+b['from']);try{existsSync(x)&&statSync(x)['isDirectory']()&&(x=join(x,basename(w)));}catch{}if(x===w)throw new Error('\x27copy\x27\x20cannot\x20copy\x20a\x20file\x20onto\x20itself');mkdirSync(dirname(x),{'recursive':!![]}),cpSync(w,x,{'recursive':!![],'force':!![]}),c={'action':'copy','from':w,'to':x,'ok':!![]};break;}case'move':case'rename':{if(!b['from'])throw new Error('\x27from\x27\x20is\x20required\x20for\x20action=\x27'+b['action']+'\x27');if(!b['to'])throw new Error('\x27to\x27\x20is\x20required\x20for\x20action=\x27'+b['action']+'\x27');const y=resolveWorkspacePath(b['from']);let z=resolveWorkspacePath(b['to']);if(!existsSync(y))throw new Error('source\x20not\x20found:\x20'+b['from']);try{existsSync(z)&&statSync(z)['isDirectory']()&&(z=join(z,basename(y)));}catch{}if(z===y)throw new Error('\x27'+b['action']+'\x27\x20cannot\x20move\x20onto\x20itself');mkdirSync(dirname(z),{'recursive':!![]}),renameSync(y,z),c={'action':b['action'],'from':y,'to':z,'ok':!![]};break;}case'search':{if(!b['pattern'])throw new Error('\x27pattern\x27\x20is\x20required\x20for\x20action=\x27search\x27');let A;try{A=new RegExp(b['pattern'],b['ignore_case']?'i':'');}catch(I){throw new Error('invalid\x20search\x20pattern\x20\x27'+b['pattern']+'\x27:\x20'+(I instanceof Error?I['message']:String(I)));}const B=Math['min'](b['max_results']??SEARCH_DEFAULT_MAX_RESULTS,SEARCH_HARD_CAP_MAX_RESULTS),C=b['context_lines']??0x2;let D=WORKSPACE_ROOT;if(b['path']){D=resolveWorkspacePath(b['path']);if(!existsSync(D))throw new Error('path\x20not\x20found:\x20'+b['path']);if(!statSync(D)['isDirectory']())throw new Error('search\x20path\x20must\x20be\x20a\x20directory:\x20'+b['path']);}const E=b['glob']?wildcardToRegExp(b['glob']):null,F=[];listRecursive(D,WORKSPACE_ROOT,F);const G=[];let H=0x0;for(const J of F){if(J['is_dir'])continue;if(J['size']>SEARCH_MAX_FILE_BYTES)continue;if(E&&!E['test'](basename(J['path'])))continue;const K=join(WORKSPACE_ROOT,J['path']);let L;try{L=readFileSync(K,'utf-8');}catch{continue;}if(L['slice'](0x0,0x2000)['includes']('\x00'))continue;const M=new RegExp(A['source'],A['flags']),N=L['split']('\x0a');if(N['length']>0x1&&N[N['length']-0x1]==='')N['pop']();for(let O=0x0;O<N['length'];O++){if(!M['test'](N[O]))continue;H++;if(G['length']>=B)continue;const P={'path':J['path'],'line':O+0x1,'text':N[O]};if(C>0x0){const Q=N['slice'](Math['max'](0x0,O-C),O),R=N['slice'](O+0x1,Math['min'](N['length'],O+0x1+C));if(Q['length']>0x0)P['before']=Q;if(R['length']>0x0)P['after']=R;}G['push'](P);}}c={'action':'search','pattern':b['pattern'],'matches':G,'total_matches':H,'truncated':H>G['length']};break;}case'glob':{if(!b['pattern'])throw new Error('\x27pattern\x27\x20is\x20required\x20for\x20action=\x27glob\x27');const S=wildcardToRegExp(b['pattern']);let T=WORKSPACE_ROOT;if(b['path']){T=resolveWorkspacePath(b['path']);if(!existsSync(T))throw new Error('path\x20not\x20found:\x20'+b['path']);if(!statSync(T)['isDirectory']())throw new Error('glob\x20path\x20must\x20be\x20a\x20directory:\x20'+b['path']);}const U=[];listRecursive(T,WORKSPACE_ROOT,U);const V=U['filter'](W=>S['test'](W['path']));c={'action':'glob','pattern':b['pattern'],'files':V,'count':V['length']};break;}case'edit':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27edit\x27');if(!b['old_string'])throw new Error('\x27old_string\x27\x20must\x20be\x20a\x20non-empty\x20string\x20for\x20action=\x27edit\x27');if(b['new_string']===undefined)throw new Error('\x27new_string\x27\x20is\x20required\x20for\x20action=\x27edit\x27');const W=resolveWorkspacePath(b['path']);if(!existsSync(W))throw new Error('file\x20not\x20found:\x20'+b['path']);if(statSync(W)['size']>EDIT_MAX_FILE_BYTES)throw new Error('file\x20too\x20large\x20for\x20edit\x20(>2MB):\x20'+b['path']);const X=readFileSync(W,'utf-8'),Y=X['split'](b['old_string']),Z=Y['length']-0x1;if(Z===0x0)throw new Error('old_string\x20not\x20found\x20in\x20'+b['path']);if(Z>0x1&&!b['replace_all'])throw new Error('old_string\x20appears\x20'+Z+'\x20times\x20in\x20'+b['path']+';\x20provide\x20replace_all=true\x20or\x20a\x20longer\x20unique\x20string');writeFileSync(W,Y['join'](b['new_string']),'utf-8'),c={'action':'edit','path':W,'replacements':Z,'ok':!![]};break;}default:throw new Error('Unknown\x20workspace_operation\x20action:\x20'+String(b['action']));}return{'content':[{'type':'text','text':JSON['stringify']({'result':c})}],'structuredContent':{'result':c}};}
|
|
1
|
+
import{readdirSync,readFileSync,writeFileSync,existsSync,mkdirSync,rmSync,statSync,cpSync,renameSync}from'node:fs';import{spawn,spawnSync}from'node:child_process';import{createInterface}from'node:readline';import{join,relative,resolve,sep,dirname,basename}from'node:path';import{getWowokWorkspaceDir}from'@wowok/wowok';import{strictParse}from'../../schema/index.js';import{WorkspaceOperationInputSchema}from'../../schema/workspace/index.js';const WORKSPACE_ROOT=getWowokWorkspaceDir();function resolveWorkspacePath(a){const b=resolve(WORKSPACE_ROOT,a);if(b!==WORKSPACE_ROOT&&!b['startsWith'](WORKSPACE_ROOT+sep))throw new Error('path\x20\x27'+a+'\x27\x20escapes\x20the\x20workspace\x20root');return b;}function decodeWriteContent(a,b){if(b!=='base64')return Buffer['from'](a,'utf-8');const c=a['replace'](/\s+/g,''),d=Buffer['from'](c,'base64');if(d['toString']('base64')['replace'](/\s+/g,'')!==c)throw new Error('\x27content\x27\x20is\x20not\x20valid\x20base64');if(d['length']>0xa*0x400*0x400)throw new Error('base64\x20write\x20payload\x20exceeds\x20the\x2010MB\x20limit');return d;}export function workspaceReadmeContent(){return['#\x20WoWok\x20Workspace','','>\x20This\x20folder\x20is\x20your\x20WoWok\x20file\x20workspace.\x20Files\x20here\x20are\x20managed\x20by\x20the','>\x20`workspace_operation`\x20tool\x20and\x20can\x20be\x20selected\x20as\x20AI\x20context\x20in\x20the\x20chat.','','##\x20What\x20lives\x20here','','-\x20**Generated\x20files**\x20—\x20`machineNode2file`\x20/\x20`guard2file`\x20exports\x20land\x20here','\x20\x20(`workspace/<kind>_<name>.<json|md>`)\x20for\x20review\x20before\x20deployment.','-\x20**WIP\x20/\x20WTS**\x20—\x20`generate_wip`,\x20`sign_wip`\x20/\x20`sign_wts`\x20and\x20`generate_wts`','\x20\x20write\x20their\x20outputs\x20here\x20(`wip_<ts>.wip`,\x20`signed_<name>`,\x20`wts/`).','-\x20**Your\x20documents**\x20—\x20anything\x20you\x20want\x20the\x20AI\x20to\x20read\x20as\x20context.','','##\x20How\x20to\x20use\x20it','','1.\x20Click\x20a\x20file\x20in\x20the\x20Workspace\x20drawer\x20to\x20load\x20it\x20into\x20the\x20chat\x20as\x20context.','2.\x20Ask\x20the\x20AI\x20to\x20generate\x20a\x20Machine\x20or\x20Guard\x20—\x20the\x20export\x20is\x20saved\x20here.','3.\x20Use\x20`workspace_operation`\x20(list\x20/\x20read\x20/\x20write\x20/\x20create\x20/\x20delete\x20/\x20move\x20/','\x20\x20\x20rename)\x20from\x20the\x20client\x20or\x20an\x20MCP-capable\x20AI\x20client.','','Everything\x20is\x20local\x20to\x20this\x20device\x20—\x20nothing\x20here\x20touches\x20the\x20chain.']['join']('\x0a');}export function ensureWorkspaceReadme(){mkdirSync(WORKSPACE_ROOT,{'recursive':!![]});const a=join(WORKSPACE_ROOT,'README.md');return!existsSync(a)&&writeFileSync(a,workspaceReadmeContent(),'utf-8'),a;}function listRecursive(a,b,c,d=0x0){if(d>0x8)return;let f;try{f=readdirSync(a,{'withFileTypes':!![]});}catch{return;}for(const g of f){const h=join(a,g['name']),i=relative(b,h)['split'](sep)['join']('/');let j=0x0,k=0x0;try{const l=statSync(h);k=l['size'],j=l['mtimeMs'];}catch{}g['isDirectory']()?(c['push']({'path':i,'is_dir':!![],'size':0x0,'mtime':j}),listRecursive(h,b,c,d+0x1)):c['push']({'path':i,'is_dir':![],'size':k,'mtime':j});}}const SEARCH_MAX_FILE_BYTES=0x5*0x400*0x400,EDIT_MAX_FILE_BYTES=0x2*0x400*0x400,READ_BASE64_MAX_BYTES=0xa*0x400*0x400,SEARCH_DEFAULT_MAX_RESULTS=0x32,SEARCH_HARD_CAP_MAX_RESULTS=0xc8,READ_DEFAULT_LINE_LIMIT=0x7d0;function escapeRegExpLiteral(a){return a['replace'](/[.*+?^${}()|[\]\\]/g,'\x5c$&');}const SEARCH_EXCLUDES=['node_modules','.git','.hg','.svn','dist','build','out','target','__pycache__','.venv','venv','.next','.nuxt','.cache','coverage','.svelte-kit'],SEARCH_EVENT_BUDGET=0x4e20,GLOB_RESULT_CAP=0x3e8,RG_TIMEOUT_MS=0x7530;let rgProbed;function rgBin(){if(rgProbed)return rgProbed['bin'];const a=[],b=(process['env']['WOWOK_RG']??'')['trim']();if(b)a['push'](b);a['push']('rg');for(const d of a){try{const e=spawnSync(d,['--version'],{'timeout':0x1388,'windowsHide':!![]});if(e['status']===0x0&&/ripgrep/['test'](String(e['stdout'])))return rgProbed={'bin':d},d;}catch{}}return rgProbed={'bin':null},null;}function runRg(a,b,c){const d=rgBin();if(!d)return Promise['resolve']({'ok':![],'aborted':![],'timedOut':![]});return new Promise(e=>{let f;try{f=spawn(d,a,{'cwd':c,'windowsHide':!![]});}catch{e({'ok':![],'aborted':![],'timedOut':![]});return;}let g=![],h=![],i=![];const j=m=>{if(g)return;g=!![],clearTimeout(k),e({'ok':m===0x0||m===0x1,'aborted':i,'timedOut':h});},k=setTimeout(()=>{h=!![],f['kill']('SIGKILL');},RG_TIMEOUT_MS),l=createInterface({'input':f['stdout']});l['on']('line',m=>{!b(m)&&(i=!![],l['close'](),f['kill']('SIGKILL'));}),f['on']('error',()=>j(null)),f['on']('close',m=>{l['close'](),j(m);});});}function toWorkspaceRel(a,b){const c=resolve(a,b),d=relative(WORKSPACE_ROOT,c);return d['split'](sep)['join']('/');}const stripEol=a=>String(a??'')['replace'](/\r?\n$/,'');async function rgContentSearch(a){const b=['--json','--no-messages','--no-require-git','--max-filesize',Math['floor'](SEARCH_MAX_FILE_BYTES/(0x400*0x400))+'M','--max-depth','32','--max-count',String(a['maxResults'])];if(a['contextLines']>0x0)b['push']('--context',String(a['contextLines']),'--context-separator','NONE:');if(a['ignoreCase'])b['push']('--ignore-case');if(a['glob'])b['push']('--glob',a['glob']);for(const k of SEARCH_EXCLUDES)b['push']('--glob','!'+k);b['push']('--',a['pattern'],'.');const c=[];let d=0x0,f=![],g=[],h=null;const i=()=>{if(h&&g['length']&&!h['after'])h['after']=g['map'](l=>l['text']);g=[],h=null;},j=await runRg(b,l=>{let n;try{n=JSON['parse'](l);}catch{return!![];}if(!n||typeof n!=='object')return!![];if(n['type']==='context')return g['push']({'line':Number(n['data']?.['line_number']??0x0),'text':stripEol(n['data']?.['lines']?.['text'])}),!![];if(n['type']==='begin'||n['type']==='end')return i(),!![];if(n['type']!=='match')return!![];d++;const o=g['map'](p=>p['text']);g=[];if(c['length']<a['maxResults']){const p={'path':toWorkspaceRel(a['baseAbs'],String(n['data']?.['path']?.['text']??'')),'line':Number(n['data']?.['line_number']??0x0),'text':stripEol(n['data']?.['lines']?.['text'])};if(o['length'])p['before']=o;if(h&&o['length'])h['after']=o;c['push'](p),h=p;}else h=null;if(d>=SEARCH_EVENT_BUDGET)return f=!![],![];return!![];},a['baseAbs']);if(!j['ok'])return null;return i(),{'matches':c,'total':d,'truncated':d>c['length']||f||j['aborted']||j['timedOut']};}async function rgFileSearch(a,b){const c=['--files','--no-require-git','--max-depth','32'];for(const j of SEARCH_EXCLUDES)c['push']('--glob','!'+j);c['push']('--glob',a,'--','.');const d=[];let f=0x0,g=![];const h=await runRg(c,k=>{f++;if(d['length']<GLOB_RESULT_CAP)d['push'](k);else return g=!![],![];return!![];},b);if(!h['ok']&&f===0x0)return null;const i=[];for(const k of d){const l=toWorkspaceRel(b,k),m=resolve(b,k);let n=0x0,o=0x0;try{const q=statSync(m);n=q['size'],o=q['mtimeMs'];}catch{continue;}i['push']({'path':l,'is_dir':![],'size':n,'mtime':o});}return{'files':i,'scanned':f,'truncated':g||f>i['length']};}function isExcluded(a){return a['split']('/')['some'](b=>SEARCH_EXCLUDES['includes'](b));}function scopePrefix(a){const b=toWorkspaceRel(WORKSPACE_ROOT,a);return b?b+'/':'';}function globMatcher(a){const b=a['startsWith']('/')?a['slice'](0x1):a,c=wildcardToRegExp(b),d=!b['includes']('/');return e=>c['test'](d?e['slice'](e['lastIndexOf']('/')+0x1):e);}function jsContentSearch(a){const b=new RegExp(a['pattern'],a['ignoreCase']?'i':''),c=a['glob']?globMatcher(a['glob']):null,d=scopePrefix(a['baseAbs']),e=[];listRecursive(a['baseAbs'],WORKSPACE_ROOT,e);const g=[];let h=0x0;for(const j of e){if(j['is_dir']||isExcluded(j['path']))continue;if(j['size']>SEARCH_MAX_FILE_BYTES)continue;if(c&&!c(j['path']['slice'](d['length'])))continue;const k=join(WORKSPACE_ROOT,j['path']);let l;try{l=readFileSync(k,'utf-8');}catch{continue;}if(l['slice'](0x0,0x2000)['includes']('\x00'))continue;const n=l['split']('\x0a');if(n['length']>0x1&&n[n['length']-0x1]==='')n['pop']();for(let o=0x0;o<n['length'];o++){if(!b['test'](n[o]))continue;h++;if(g['length']>=a['maxResults'])continue;const p={'path':j['path'],'line':o+0x1,'text':n[o]};if(a['contextLines']>0x0){const q=n['slice'](Math['max'](0x0,o-a['contextLines']),o),r=n['slice'](o+0x1,Math['min'](n['length'],o+0x1+a['contextLines']));if(q['length']>0x0)p['before']=q;if(r['length']>0x0)p['after']=r;}g['push'](p);}}return{'matches':g,'total':h,'truncated':h>g['length']};}function jsFileSearch(a,b){const c=globMatcher(a),d=scopePrefix(b),e=[];listRecursive(b,WORKSPACE_ROOT,e);const f=e['filter'](g=>!isExcluded(g['path'])&&c(g['path']['slice'](d['length'])));return{'files':f['slice'](0x0,GLOB_RESULT_CAP),'truncated':f['length']>GLOB_RESULT_CAP};}function wildcardToRegExp(a){let b='';for(let d=0x0;d<a['length'];d++){const e=a[d];if(e==='*')a[d+0x1]==='*'?(d++,a[d+0x1]==='/'?(b+='(?:.*/)?',d++):b+='.*'):b+='[^/]*';else{if(e==='?')b+='[^/]';else{if(e==='{'){const f=a['indexOf']('}',d);if(f===-0x1){b+='\x5c{';continue;}const g=a['slice'](d+0x1,f)['split'](',')['map'](escapeRegExpLiteral)['join']('|');b+='(?:'+g+')',d=f;}else b+=escapeRegExpLiteral(e);}}}return new RegExp('^'+b+'$');}export async function handleWorkspaceOperation(a){const b=strictParse(WorkspaceOperationInputSchema,a,'workspace_operation\x20input');mkdirSync(WORKSPACE_ROOT,{'recursive':!![]}),ensureWorkspaceReadme();let c;switch(b['action']){case'resolve':c={'action':'resolve','dir':WORKSPACE_ROOT};break;case'list':{const d=[];listRecursive(WORKSPACE_ROOT,WORKSPACE_ROOT,d),c={'action':'list','dir':WORKSPACE_ROOT,'files':d};break;}case'read':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27read\x27');const f=resolveWorkspacePath(b['path']);if(!existsSync(f))throw new Error('file\x20not\x20found:\x20'+b['path']);if(b['encoding']==='base64'){const n=statSync(f);if(n['size']>READ_BASE64_MAX_BYTES)throw new Error('file\x20too\x20large\x20for\x20base64\x20read\x20(>10MB):\x20'+b['path']);const o=readFileSync(f)['toString']('base64');c={'action':'read','encoding':'base64','path':f,'content':o,'size':n['size']};break;}const g=readFileSync(f,'utf-8'),h=g['split']('\x0a')['length'];if(b['offset']===undefined&&b['limit']===undefined){c={'action':'read','path':f,'content':g,'total_lines':h,'offset':0x1,'limit':h,'truncated':![]};break;}const i=b['offset']??0x1,j=Math['min'](b['limit']??READ_DEFAULT_LINE_LIMIT,READ_DEFAULT_LINE_LIMIT),k=g['split']('\x0a'),l=k['slice'](i-0x1,i-0x1+j),m=i-0x1+j<h;c={'action':'read','path':f,'content':l['join']('\x0a'),'total_lines':h,'offset':i,'limit':j,'truncated':m};break;}case'write':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27write\x27');if(b['content']===undefined)throw new Error('\x27content\x27\x20is\x20required\x20for\x20action=\x27write\x27');const p=resolveWorkspacePath(b['path']);mkdirSync(dirname(p),{'recursive':!![]}),writeFileSync(p,decodeWriteContent(b['content'],b['encoding'])),c={'action':'write','path':p,'ok':!![]};break;}case'delete':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27delete\x27');const q=resolveWorkspacePath(b['path']);if(!existsSync(q))throw new Error('file\x20not\x20found:\x20'+b['path']);rmSync(q,{'recursive':!![],'force':!![]}),c={'action':'delete','path':q,'ok':!![]};break;}case'create_file':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27create_file\x27');const r=resolveWorkspacePath(b['path']);if(existsSync(r))throw new Error('file\x20already\x20exists:\x20'+b['path']);mkdirSync(dirname(r),{'recursive':!![]}),writeFileSync(r,decodeWriteContent(b['content']??'',b['encoding'])),c={'action':'create_file','path':r,'ok':!![]};break;}case'create_dir':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27create_dir\x27');const s=resolveWorkspacePath(b['path']);mkdirSync(s,{'recursive':!![]}),c={'action':'create_dir','path':s,'ok':!![]};break;}case'copy':{if(!b['from'])throw new Error('\x27from\x27\x20is\x20required\x20for\x20action=\x27copy\x27');if(!b['to'])throw new Error('\x27to\x27\x20is\x20required\x20for\x20action=\x27copy\x27');const t=resolveWorkspacePath(b['from']);let u=resolveWorkspacePath(b['to']);if(!existsSync(t))throw new Error('source\x20not\x20found:\x20'+b['from']);try{existsSync(u)&&statSync(u)['isDirectory']()&&(u=join(u,basename(t)));}catch{}if(u===t)throw new Error('\x27copy\x27\x20cannot\x20copy\x20a\x20file\x20onto\x20itself');mkdirSync(dirname(u),{'recursive':!![]}),cpSync(t,u,{'recursive':!![],'force':!![]}),c={'action':'copy','from':t,'to':u,'ok':!![]};break;}case'move':case'rename':{if(!b['from'])throw new Error('\x27from\x27\x20is\x20required\x20for\x20action=\x27'+b['action']+'\x27');if(!b['to'])throw new Error('\x27to\x27\x20is\x20required\x20for\x20action=\x27'+b['action']+'\x27');const v=resolveWorkspacePath(b['from']);let w=resolveWorkspacePath(b['to']);if(!existsSync(v))throw new Error('source\x20not\x20found:\x20'+b['from']);try{existsSync(w)&&statSync(w)['isDirectory']()&&(w=join(w,basename(v)));}catch{}if(w===v)throw new Error('\x27'+b['action']+'\x27\x20cannot\x20move\x20onto\x20itself');mkdirSync(dirname(w),{'recursive':!![]}),renameSync(v,w),c={'action':b['action'],'from':v,'to':w,'ok':!![]};break;}case'search':{if(!b['pattern'])throw new Error('\x27pattern\x27\x20is\x20required\x20for\x20action=\x27search\x27');const x=Math['min'](b['max_results']??SEARCH_DEFAULT_MAX_RESULTS,SEARCH_HARD_CAP_MAX_RESULTS),y=b['context_lines']??0x2;let z=WORKSPACE_ROOT;if(b['path']){z=resolveWorkspacePath(b['path']);if(!existsSync(z))throw new Error('path\x20not\x20found:\x20'+b['path']);if(!statSync(z)['isDirectory']())throw new Error('search\x20path\x20must\x20be\x20a\x20directory:\x20'+b['path']);}const A={'pattern':b['pattern'],'baseAbs':z,'glob':b['glob'],'ignoreCase':Boolean(b['ignore_case']),'maxResults':x,'contextLines':y},B=await rgContentSearch(A);let C=B;if(!C)try{C=jsContentSearch(A);}catch(D){throw new Error('invalid\x20search\x20pattern\x20\x27'+b['pattern']+'\x27:\x20'+(D instanceof Error?D['message']:String(D)));}c={'action':'search','pattern':b['pattern'],'engine':B?'ripgrep':'js','matches':C['matches'],'total_matches':C['total'],'truncated':C['truncated']};break;}case'glob':{if(!b['pattern'])throw new Error('\x27pattern\x27\x20is\x20required\x20for\x20action=\x27glob\x27');let E=WORKSPACE_ROOT;if(b['path']){E=resolveWorkspacePath(b['path']);if(!existsSync(E))throw new Error('path\x20not\x20found:\x20'+b['path']);if(!statSync(E)['isDirectory']())throw new Error('glob\x20path\x20must\x20be\x20a\x20directory:\x20'+b['path']);}const F=await rgFileSearch(b['pattern'],E),G=F??jsFileSearch(b['pattern'],E);c={'action':'glob','pattern':b['pattern'],'engine':F?'ripgrep':'js','files':G['files'],'count':G['files']['length'],'truncated':G['truncated']};break;}case'edit':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27edit\x27');if(!b['old_string'])throw new Error('\x27old_string\x27\x20must\x20be\x20a\x20non-empty\x20string\x20for\x20action=\x27edit\x27');if(b['new_string']===undefined)throw new Error('\x27new_string\x27\x20is\x20required\x20for\x20action=\x27edit\x27');const H=resolveWorkspacePath(b['path']);if(!existsSync(H))throw new Error('file\x20not\x20found:\x20'+b['path']);if(statSync(H)['size']>EDIT_MAX_FILE_BYTES)throw new Error('file\x20too\x20large\x20for\x20edit\x20(>2MB):\x20'+b['path']);const I=readFileSync(H,'utf-8'),J=I['split'](b['old_string']),K=J['length']-0x1;if(K===0x0)throw new Error('old_string\x20not\x20found\x20in\x20'+b['path']);if(K>0x1&&!b['replace_all'])throw new Error('old_string\x20appears\x20'+K+'\x20times\x20in\x20'+b['path']+';\x20provide\x20replace_all=true\x20or\x20a\x20longer\x20unique\x20string');writeFileSync(H,J['join'](b['new_string']),'utf-8'),c={'action':'edit','path':H,'replacements':K,'ok':!![]};break;}default:throw new Error('Unknown\x20workspace_operation\x20action:\x20'+String(b['action']));}return{'content':[{'type':'text','text':JSON['stringify']({'result':c})}],'structuredContent':{'result':c}};}
|