@wowok/agent-mcp 2.7.10 → 3.0.1
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/communication/evidence.d.ts +6 -0
- package/dist/communication/evidence.js +1 -0
- package/dist/evaluation/acceptance.d.ts +24 -0
- package/dist/evaluation/acceptance.js +1 -0
- package/dist/evaluation/builtins/demand-match.d.ts +3 -2
- package/dist/evaluation/builtins/demand-match.js +1 -1
- package/dist/evaluation/builtins/service-risk.d.ts +2 -1
- package/dist/evaluation/builtins/service-risk.js +1 -1
- package/dist/evaluation/index.d.ts +1 -0
- package/dist/evaluation/index.js +1 -1
- package/dist/evaluation/match-operation.d.ts +14 -0
- package/dist/evaluation/match-operation.js +1 -0
- package/dist/experience/realtime-feedback.js +1 -1
- package/dist/extensions/capability-manifest.d.ts +1 -82
- package/dist/extensions/capability-manifest.js +1 -1
- package/dist/extensions/constraint-registry.d.ts +6 -4
- package/dist/extensions/constraint-registry.js +1 -1
- package/dist/extensions/index.d.ts +4 -5
- package/dist/extensions/index.js +1 -1
- package/dist/extensions/industry-pack.js +1 -1
- package/dist/extensions/metric-registry.d.ts +6 -4
- package/dist/extensions/metric-registry.js +1 -1
- package/dist/extensions/mode-evaluator.d.ts +2 -3
- package/dist/extensions/mode-evaluator.js +1 -1
- package/dist/extensions/modes.js +1 -1
- package/dist/extensions/registry.d.ts +3 -25
- package/dist/extensions/registry.js +1 -1
- package/dist/extensions/types.d.ts +0 -68
- package/dist/goal/GoalClassifier.js +1 -1
- package/dist/goal/GoalEngine.d.ts +44 -1
- package/dist/goal/GoalEngine.js +1 -1
- package/dist/goal/types.d.ts +5 -1
- package/dist/harness/auto-escalation.d.ts +0 -12
- package/dist/harness/auto-escalation.js +1 -1
- package/dist/harness/index.d.ts +1 -14
- package/dist/harness/index.js +1 -1
- package/dist/harness/types.d.ts +0 -38
- package/dist/keeper/KeeperScan.d.ts +39 -0
- package/dist/keeper/KeeperScan.js +1 -0
- package/dist/keeper/KeeperStore.d.ts +43 -0
- package/dist/keeper/KeeperStore.js +1 -0
- package/dist/keeper/detectors.d.ts +23 -0
- package/dist/keeper/detectors.js +1 -0
- package/dist/keeper/keeper.spec.d.ts +1 -0
- package/dist/keeper/keeper.spec.js +1 -0
- package/dist/keeper/types.d.ts +65 -0
- package/dist/keeper/types.js +1 -0
- package/dist/knowledge/account-marks.d.ts +1 -0
- package/dist/knowledge/account-marks.js +1 -1
- package/dist/knowledge/demand-risk.js +1 -1
- package/dist/knowledge/event-semantics.d.ts +3 -0
- package/dist/knowledge/event-semantics.js +1 -1
- package/dist/knowledge/event-semantics.spec.d.ts +1 -0
- package/dist/knowledge/event-semantics.spec.js +1 -0
- package/dist/knowledge/evidence-review.d.ts +23 -0
- package/dist/knowledge/evidence-review.js +1 -1
- package/dist/knowledge/examples-scanner-cli.js +1 -1
- package/dist/knowledge/examples-scanner.js +1 -1
- package/dist/knowledge/fund-layer.d.ts +13 -9
- package/dist/knowledge/fund-layer.js +1 -1
- package/dist/knowledge/goal-completion.js +1 -1
- package/dist/knowledge/guard-bindings.d.ts +21 -0
- package/dist/knowledge/guard-bindings.js +1 -0
- package/dist/knowledge/guard-bytecode-spec.d.ts +82 -0
- package/dist/knowledge/guard-bytecode-spec.js +1 -0
- package/dist/knowledge/guard-design-patterns.d.ts +1 -1
- package/dist/knowledge/guard-design-patterns.js +1 -1
- package/dist/knowledge/index.d.ts +13 -7
- package/dist/knowledge/index.js +1 -1
- package/dist/knowledge/industry-registry.js +1 -1
- package/dist/knowledge/mcp-schema-audit-cli.js +1 -1
- package/dist/knowledge/mcp-schema-audit.js +1 -1
- package/dist/knowledge/reward-risk.d.ts +1 -1
- package/dist/knowledge/reward-risk.js +1 -1
- package/dist/knowledge/safety-rules.d.ts +2 -1
- package/dist/knowledge/safety-rules.js +1 -1
- package/dist/knowledge/scenario-modes.d.ts +1 -1
- package/dist/knowledge/scenario-modes.js +1 -1
- package/dist/knowledge/scenario-topology.d.ts +43 -0
- package/dist/knowledge/scenario-topology.js +1 -0
- package/dist/knowledge/supply-chain.js +1 -1
- package/dist/knowledge/template-registry.js +1 -1
- package/dist/knowledge/tools-reference.js +1 -1
- package/dist/knowledge/workflow-guidance.d.ts +55 -0
- package/dist/knowledge/workflow-guidance.js +1 -1
- package/dist/knowledge/workspace-lists.d.ts +1 -0
- package/dist/knowledge/workspace-lists.js +1 -1
- package/dist/monitor/MonitorLoop.d.ts +3 -0
- package/dist/monitor/MonitorLoop.js +1 -1
- package/dist/monitor/ScopeResolver.js +1 -1
- package/dist/monitor/SuggestionBridge.d.ts +38 -0
- package/dist/monitor/SuggestionBridge.js +1 -0
- package/dist/monitor/SuggestionBridge.spec.d.ts +1 -0
- package/dist/monitor/SuggestionBridge.spec.js +1 -0
- package/dist/monitor/types.d.ts +0 -1
- package/dist/monitor/types.js +1 -1
- package/dist/participation/arbitrator-interest.d.ts +20 -0
- package/dist/participation/arbitrator-interest.js +1 -0
- package/dist/participation/demander-interest.d.ts +23 -0
- package/dist/participation/demander-interest.js +1 -0
- package/dist/participation/employee-kpi.d.ts +12 -0
- package/dist/participation/employee-kpi.js +1 -1
- package/dist/participation/employee-kpi.spec.d.ts +1 -0
- package/dist/participation/employee-kpi.spec.js +1 -0
- package/dist/playbooks/service-build/business-puzzle.js +1 -1
- package/dist/playbooks/service-build/context-assembly.js +1 -1
- package/dist/playbooks/service-build/machine-nodes.js +1 -1
- package/dist/playbooks/service-build/machine-panorama.js +1 -1
- package/dist/playbooks/service-build/merchant-guide.d.ts +20 -0
- package/dist/playbooks/service-build/merchant-guide.js +1 -1
- package/dist/playbooks/service-build/mode-actions.d.ts +30 -12
- package/dist/playbooks/service-build/mode-actions.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/relationship-profile.d.ts +2 -0
- package/dist/playbooks/service-build/relationship-profile.js +1 -0
- package/dist/playbooks/service-build/semantic-graph.d.ts +5 -1
- package/dist/playbooks/service-build/semantic-graph.js +1 -1
- package/dist/playbooks/service-build/service-panorama.js +1 -1
- package/dist/relationship/derivation.d.ts +94 -0
- package/dist/relationship/derivation.js +1 -0
- package/dist/relationship/derivation.spec.d.ts +1 -0
- package/dist/relationship/derivation.spec.js +1 -0
- package/dist/relationship/incentive.d.ts +38 -0
- package/dist/relationship/incentive.js +1 -0
- package/dist/relationship/index.d.ts +4 -0
- package/dist/relationship/index.js +1 -0
- package/dist/relationship/registry.d.ts +13 -0
- package/dist/relationship/registry.js +1 -0
- package/dist/relationship/types.d.ts +45 -0
- package/dist/relationship/types.js +1 -0
- package/dist/review/progress.js +1 -1
- package/dist/role/index.d.ts +2 -2
- package/dist/role/index.js +1 -1
- package/dist/role/model.d.ts +2 -1
- package/dist/role/model.js +1 -1
- package/dist/role/types.d.ts +5 -0
- package/dist/rules.d.ts +1 -1
- package/dist/safety/confirm-gate.js +1 -1
- package/dist/safety/preview.js +1 -1
- package/dist/schema/call/bridge.d.ts +25 -3
- package/dist/schema/call/bridge.js +1 -1
- package/dist/schema/call/semantic.js +1 -1
- package/dist/schema/common/index.js +1 -1
- package/dist/schema/employee/index.d.ts +61 -1
- package/dist/schema/employee/index.js +1 -1
- package/dist/schema/evaluation/index.d.ts +70 -5
- package/dist/schema/evaluation/index.js +1 -1
- package/dist/schema/goal/index.d.ts +40 -14
- package/dist/schema/goal/index.js +1 -1
- package/dist/schema/goal/planning.d.ts +6 -6
- package/dist/schema/index.d.ts +1 -0
- package/dist/schema/index.js +1 -1
- package/dist/schema/industry-pack/index.d.ts +59 -7
- package/dist/schema/industry-pack/index.js +1 -1
- package/dist/schema/industry-pack/modes.d.ts +59 -7
- package/dist/schema/industry-pack/modes.js +1 -1
- package/dist/schema/intent-radar/index.d.ts +19 -19
- package/dist/schema/keeper/index.d.ts +475 -0
- package/dist/schema/keeper/index.js +1 -0
- package/dist/schema/local/index.d.ts +11 -0
- package/dist/schema/local/index.js +1 -1
- package/dist/schema/messenger/index.d.ts +2 -0
- package/dist/schema/messenger/index.js +1 -1
- package/dist/schema/operations.d.ts +64 -16
- package/dist/schema/persona/index.d.ts +1 -1
- package/dist/schema/query/bi.d.ts +244 -16
- package/dist/schema/query/bi.js +1 -1
- package/dist/schema/query/index.d.ts +2 -2
- package/dist/schema/schema-query/index.d.ts +2 -11
- package/dist/schema/schema-query/index.js +1 -1
- package/dist/schema/schema-version.js +1 -1
- package/dist/schema/utils/skills-recommendation.js +1 -1
- package/dist/schema/watch/index.d.ts +4 -0
- package/dist/schema/watch/index.js +1 -1
- package/dist/schema-query-impl/index.d.ts +33 -14
- package/dist/schema-query-impl/index.js +1 -1
- package/dist/schemas/account_operation.output.json +29 -0
- package/dist/schemas/account_operation.schema.json +6 -2
- package/dist/schemas/bridge_operation.output.json +24 -1
- package/dist/schemas/bridge_operation.schema.json +73 -1
- package/dist/schemas/employee_operation.output.json +100 -0
- package/dist/schemas/employee_operation.schema.json +148 -5
- package/dist/schemas/evaluation_operation.output.json +135 -9
- package/dist/schemas/evaluation_operation.schema.json +176 -7
- package/dist/schemas/goal_operation.schema.json +76 -0
- package/dist/schemas/index.json +7 -1
- package/dist/schemas/industry_pack_operation.output.json +172 -27
- package/dist/schemas/industry_pack_operation.schema.json +19 -0
- package/dist/schemas/keeper_operation.output.json +1274 -0
- package/dist/schemas/keeper_operation.schema.json +359 -0
- package/dist/schemas/messenger_operation.schema.json +8 -0
- package/dist/schemas/onchain_events.output.json +1 -1
- package/dist/schemas/onchain_operations.schema.json +41 -41
- package/dist/schemas/onchain_operations_allocation.schema.json +4 -4
- package/dist/schemas/onchain_operations_arbitration.schema.json +3 -3
- package/dist/schemas/onchain_operations_contact.schema.json +2 -2
- package/dist/schemas/onchain_operations_demand.schema.json +2 -2
- package/dist/schemas/onchain_operations_machine.schema.json +2 -2
- package/dist/schemas/onchain_operations_order.schema.json +2 -2
- package/dist/schemas/onchain_operations_payment.schema.json +1 -1
- package/dist/schemas/onchain_operations_permission.schema.json +2 -2
- package/dist/schemas/onchain_operations_progress.schema.json +2 -2
- package/dist/schemas/onchain_operations_repository.schema.json +2 -2
- package/dist/schemas/onchain_operations_reward.schema.json +6 -6
- package/dist/schemas/onchain_operations_service.schema.json +7 -7
- package/dist/schemas/onchain_operations_treasury.schema.json +6 -6
- package/dist/schemas/onchain_table_data.output.json +71 -0
- package/dist/schemas/query_toolkit.output.json +485 -7
- package/dist/schemas/query_toolkit.schema.json +71 -0
- package/dist/schemas/schema_query.output.json +1 -64
- package/dist/schemas/schema_query.schema.json +18 -3
- package/dist/schemas/watch_operation.output.json +21 -1
- package/dist/task/ProcessStore.d.ts +18 -1
- package/dist/task/ProcessStore.js +1 -1
- package/dist/task/playbook.js +1 -1
- package/dist/task/types.d.ts +24 -0
- package/dist/tools/handlers/bridge.js +1 -1
- package/dist/tools/handlers/config.js +1 -1
- package/dist/tools/handlers/employee.d.ts +6 -0
- package/dist/tools/handlers/employee.js +1 -1
- package/dist/tools/handlers/employee.spec.d.ts +1 -0
- package/dist/tools/handlers/employee.spec.js +1 -0
- package/dist/tools/handlers/evaluation.js +1 -1
- package/dist/tools/handlers/evaluation.spec.d.ts +1 -0
- package/dist/tools/handlers/evaluation.spec.js +1 -0
- package/dist/tools/handlers/goal.js +1 -1
- package/dist/tools/handlers/industry-pack.js +1 -1
- package/dist/tools/handlers/keeper.d.ts +12 -0
- package/dist/tools/handlers/keeper.js +1 -0
- package/dist/tools/handlers/local.d.ts +4 -3
- package/dist/tools/handlers/local.js +1 -1
- package/dist/tools/handlers/messenger.js +1 -1
- package/dist/tools/handlers/onchain.js +1 -1
- package/dist/tools/handlers/permission.js +1 -1
- package/dist/tools/handlers/query.js +1 -1
- package/dist/tools/handlers/schema-query.js +1 -1
- package/dist/tools/handlers/watch.js +1 -1
- package/dist/tools/handlers/workflow.js +1 -1
- package/dist/tools/index.js +1 -1
- package/dist/tools/registry/agent.d.ts +2 -0
- package/dist/tools/registry/agent.js +1 -0
- package/dist/tools/registry/bridge.d.ts +2 -0
- package/dist/tools/registry/bridge.js +1 -0
- package/dist/tools/registry/business.d.ts +2 -0
- package/dist/tools/registry/business.js +1 -0
- package/dist/tools/registry/config.d.ts +2 -0
- package/dist/tools/registry/config.js +1 -0
- package/dist/tools/registry/files.d.ts +2 -0
- package/dist/tools/registry/files.js +1 -0
- package/dist/tools/registry/identity.d.ts +2 -0
- package/dist/tools/registry/identity.js +1 -0
- package/dist/tools/registry/local.d.ts +2 -0
- package/dist/tools/registry/local.js +1 -0
- package/dist/tools/registry/messenger.d.ts +2 -0
- package/dist/tools/registry/messenger.js +1 -0
- package/dist/tools/registry/monitor.d.ts +2 -0
- package/dist/tools/registry/monitor.js +1 -0
- package/dist/tools/registry/onchain.d.ts +2 -0
- package/dist/tools/registry/onchain.js +1 -0
- package/dist/tools/registry/query.d.ts +2 -0
- package/dist/tools/registry/query.js +1 -0
- package/dist/tools/registry/trust.d.ts +2 -0
- package/dist/tools/registry/trust.js +1 -0
- package/dist/tools/rules-hook.d.ts +1 -0
- package/dist/tools/rules-hook.js +1 -1
- package/dist/tools/shared.js +1 -1
- package/dist/tools/wrap.js +1 -1
- package/package.json +2 -2
- package/dist/examples/arbitration-dispute-create.json +0 -41
- package/dist/examples/arbitration-vote-weighted.json +0 -35
- package/dist/examples/arbitration-voting-guard-add.json +0 -38
- package/dist/examples/demand-present-service.json +0 -33
- package/dist/examples/education-contact-create.json +0 -40
- package/dist/examples/freelance-contact-create.json +0 -40
- package/dist/examples/gen-passport-verify-guard.json +0 -48
- package/dist/examples/guard-template-balance-check.json +0 -59
- package/dist/examples/guard-template-time-lock.json +0 -60
- package/dist/examples/insurance-guard-claim-timelock.json +0 -75
- package/dist/examples/insurance-guard-withdraw-allocation.json +0 -96
- package/dist/examples/insurance-machine-create.json +0 -75
- package/dist/examples/insurance-service-allocators.json +0 -55
- package/dist/examples/machine-multisig-threshold.json +0 -87
- package/dist/examples/machine-publish.json +0 -30
- package/dist/examples/machine-template-7node-rental.json +0 -119
- package/dist/examples/payment-scenario-bound.json +0 -45
- package/dist/examples/rental-ziroom-machine-create.json +0 -148
- package/dist/examples/rental-ziroom-permission-create.json +0 -41
- package/dist/examples/rental-ziroom-service-create.json +0 -36
- package/dist/examples/retail-adv-guard-customer-win-create.json +0 -80
- package/dist/examples/retail-adv-guard-messenger-proof-create.json +0 -65
- package/dist/examples/retail-adv-guard-reward-timeout-create.json +0 -92
- package/dist/examples/retail-adv-reward-guard-add.json +0 -51
- package/dist/examples/retail-myshop-allocation-activate.json +0 -55
- package/dist/examples/retail-myshop-arbitration-create.json +0 -40
- package/dist/examples/retail-myshop-contact-create.json +0 -43
- package/dist/examples/retail-myshop-order-create.json +0 -56
- package/dist/examples/retail-myshop-progress-operate.json +0 -38
- package/dist/examples/retail-myshop-reward-create.json +0 -35
- package/dist/examples/retail-myshop-service-create.json +0 -38
- package/dist/examples/retail-myshop-service-customer-required.json +0 -31
- package/dist/examples/service-discount-issue.json +0 -46
- package/dist/examples/subscription-contact-create.json +0 -40
- package/dist/examples/threebody-guard-create.json +0 -56
- package/dist/examples/threebody-machine-create.json +0 -71
- package/dist/examples/threebody-permission-create.json +0 -38
- package/dist/examples/threebody-service-allocators.json +0 -48
- package/dist/examples/travel-guard-time-lock.json +0 -69
- package/dist/examples/travel-guard-weather-oracle.json +0 -70
- package/dist/examples/travel-machine-create.json +0 -135
- package/dist/examples/travel-repository-create.json +0 -47
- package/dist/examples/travel-service-create.json +0 -34
- package/dist/examples/travel-treasury-create.json +0 -34
- package/dist/examples/treasury-deposit.json +0 -37
- package/dist/examples/treasury-withdraw.json +0 -38
- package/dist/harness/plan.d.ts +0 -33
- package/dist/harness/plan.js +0 -1
- package/dist/knowledge/demand-matching.d.ts +0 -29
- package/dist/knowledge/demand-matching.js +0 -1
- package/dist/knowledge/guard-context.d.ts +0 -56
- package/dist/knowledge/guard-context.js +0 -1
- package/dist/knowledge/guard-migration.d.ts +0 -48
- package/dist/knowledge/guard-migration.js +0 -1
- package/dist/mode-market/index.d.ts +0 -3
- package/dist/mode-market/index.js +0 -1
- package/dist/mode-market/registry.d.ts +0 -53
- package/dist/mode-market/registry.js +0 -1
- package/dist/mode-market/review.d.ts +0 -27
- package/dist/mode-market/review.js +0 -1
- package/dist/mode-market/submission.d.ts +0 -25
- package/dist/mode-market/submission.js +0 -1
- package/dist/schemas/guard-node-schema.json +0 -1000
- package/dist/task/stage-gate.d.ts +0 -22
- package/dist/task/stage-gate.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{query_objects,query_address_profile}from'@wowok/wowok';import{strictParse}from'../../schema/index.js';import{WatchOperationInputSchema}from'../../schema/watch/index.js';import{resolveWatchRole,CORE_PERMISSION_INDEX,valuePerspectiveOf,gamePowerOf,gameStrategyOf,interestAnalyzerOf,isWeakerParty,isStrongerParty}from'../../role/index.js';import{interestsOf}from'../../evaluation/index.js';import{evaluatePathReasoning}from'../../evaluation/path-reasoning.js';import{resolveSupplyChainGraph}from'../../knowledge/supply-chain.js';import{fetchPermissionContext,fetchOrderContext,fetchMachineNodes,accountCanExecuteForward,enumerateObjectOperations,isPermissionIndexType}from'../../knowledge/index.js';import{getEffectivePersona}from'../../persona/index.js';import{normalizeObjectType}from'../../playbooks/service-build/object-type.js';async function readObject(a,b){try{const c=await query_objects({'objects':[a],'network':b}),d=c?.['objects']?.[0x0];if(!d)return undefined;const e=d?.['data']??d,f=d?.['type']??d?.['data']?.['type']??'';return{'address':String(d?.['object']??a),'type':normalizeObjectType(f),'data':e};}catch{return undefined;}}function displayName(a){if(typeof a['name']==='string'&&a['name']['length']>0x0)return a['name'];return undefined;}async function fetchUserProfile(a,b){try{const c=await query_address_profile({'address':a,'network':b});if(c&&c['kind']==='user')return c;return null;}catch{return null;}}function roleHintToCommercial(a){const b=(a??'')['toLowerCase']();if(b['includes']('customer'))return'customer';if(b['includes']('collaborator'))return'collaborator';if(b['includes']('merchant')||b['includes']('supplier'))return'merchant';if(b['includes']('demander'))return'demander';if(b['includes']('arbitrator'))return'arbitrator';return'neutral';}function resolveUserRole(a,b){const c=b['length']>0x0&&b===String(a['address']??'')['toLowerCase'](),d=a?.['role_evidence']?.['role_hint'],e=c&&d?roleHintToCommercial(d):'neutral',f={'manifest_role':e,'latent_role':undefined,'participation_role':e,'evaluation_role':e,'conflicting':![],'reason_direction':e==='neutral'?'objective':'game','derivation':c?'user-address\x20profile:\x20role_hint=\x22'+(d??'none')+'\x22\x20(order/contact/permission\x20memberships\x20+\x20reverse\x20bindings)':'user-address\x20profile\x20viewed\x20without\x20identity\x20binding\x20('+(b?'observer':'no\x20account')+')','note':c?'profile\x20of\x20this\x20address\x20itself\x20—\x20identity\x20derived\x20from\x20on-chain\x20memberships\x20and\x20reverse\x20bindings.':'address\x20profile\x20—\x20objective\x20facts\x20only;\x20supply\x20an\x20account\x20to\x20see\x20identity\x20relations.'};return f;}function toUserWatchObject(a){const b=a,c=b?.['identity'],d=b?.['reputation'],e=b?.['order_membership'],f=b?.['contact_membership'],g=b?.['permission_membership'],h=b?.['reverse_core'],i=b?.['reverse_tx'],j=(k,l)=>Array['isArray'](k)?k['length']:0x0;return{'address':b?.['address'],'object_type':'User','name':c?.['description']??undefined,'fields':{'kind':'user','identity':c?{'description':c['description']??null,'referrer':c['referrer']??null,'resource':c['resource']??null,'time':c['time']??null}:null,'reputation':d?{'like':Array['isArray'](d['votes'])?d['votes']['filter'](k=>k?.['like'])['length']:0x0,'dislike':Array['isArray'](d['votes'])?d['votes']['filter'](k=>k?.['dislike'])['length']:0x0,'favor':Array['isArray'](d['votes'])?d['votes']['filter'](k=>k?.['favor'])['length']:0x0,'voters':j(d?.['votes'],'v')}:null,'orders':e?{'owner':j(e?.['items']?.['filter'](k=>(k?.['role']&0x1)!==0x0),'o'),'agent':j(e?.['items']?.['filter'](k=>(k?.['role']&0x2)!==0x0),'o'),'total':j(e?.['items'],'o')}:null,'contacts':j(f?.['items'],'c'),'permissions':g?{'count':j(g?.['items'],'p'),'roles':(g?.['items']??[])['map'](k=>({'role':k?.['role']??null,'permission':k?.['permission']??null}))}:null,'reverse_bindings':{'core':j(h?.['items'],'c'),'tx':j(i?.['items'],'t'),'total':j(h?.['items'],'c')+j(i?.['items'],'t')},'activity':b?.['activity']??null,'role_evidence':b?.['role_evidence']??null}};}function buildUserRelations(a){const b=a,c=[],d=(e,f,g,h)=>{typeof f==='string'&&f['length']>0x0&&c['push']({'relation':e,'target':f,'target_type':g,'note':h});};for(const e of b?.['order_membership']?.['items']??[]){const f=(e?.['role']??0x0)&0x1?'owner':(e?.['role']??0x0)&0x2?'agent':'member';d('order',e?.['order'],'Order','member\x20as\x20'+f);}for(const g of b?.['contact_membership']?.['items']??[]){d('contact',g?.['contact'],'Contact','member');}for(const h of b?.['permission_membership']?.['items']??[]){const i=h?.['role']===0x1?'owner':h?.['role']===0x2?'admin':'entity';d('permission',h?.['permission'],'Permission','holds\x20role\x20'+i);}for(const j of b?.['reverse_core']?.['items']??[]){d('bound_by',j?.['who'],'Object','core\x20reverse\x20binding\x20(business\x20structure)');}for(const k of b?.['reverse_tx']?.['items']??[]){d('bound_by',k?.['who'],'Object','tx\x20reverse\x20binding\x20(recent\x20activity)');}for(const l of b?.['reputation']?.['votes']??[]){d('reputation',l?.['who'],'Account','voted');}return c;}async function assembleRoleInput(a,b,c,d){const e=c['toLowerCase'](),f={'account':e},g=new Set();switch(a){case'Order':{const h=b['builder'];if(typeof h==='string'&&h['length']>0x0)f['order_holder']=h;break;}case'Service':case'Demand':case'Arbitration':{const i=b['permission'];if(typeof i==='string'&&i['length']>0x0){const j=await fetchPermissionContext(i,d,![]);if(j){const k=await readObject(i,d),l=typeof k?.['data']?.['builder']==='string'?k['data']['builder']:undefined;if(j['admin']['has'](e)||l&&l['toLowerCase']()===e){const n=a==='Service'?CORE_PERMISSION_INDEX['service']:a==='Demand'?CORE_PERMISSION_INDEX['demand']:CORE_PERMISSION_INDEX['arbitration'];g['add'](n);}const m=j['table']['get'](e);if(m){for(const o of m)g['add'](o);}}}break;}case'Progress':{const q=b['namedOperator'];if(Array['isArray'](q)){const r=q['filter'](s=>Array['isArray'](s?.['operators'])&&s['operators']['some'](t=>String(t)['toLowerCase']()===e))['map'](s=>String(s?.['name']??''));if(r['length']>0x0)f['named_operator_names']=r;}break;}default:break;}if(g['size']>0x0)f['held_permission_indexes']=Array['from'](g);return f;}async function resolveRole(a,b,c,d){const e=await assembleRoleInput(a,b,c,d);let f;try{const g=await getEffectivePersona(c);f=g?.['role'];}catch{f=undefined;}return resolveWatchRole({'derivation':e,'latent_role':f});}function toWatchObject(a){if(!a)return null;const b=displayName(a['data']),c={};for(const [d,e]of Object['entries'](a['data'])){if(Array['isArray'](e)&&e['length']>0x14)continue;if(e&&typeof e==='object'&&!Array['isArray'](e))continue;c[d]=e;}return{'address':a['address'],'object_type':a['type'],'name':b,'fields':c};}async function buildRelations(b,c){const d=[],e=(f,g,h,i)=>{typeof g==='string'&&g['length']>0x0&&d['push']({'relation':f,'target':g,'target_type':h,'note':i});};switch(b){case'Service':{e('machine',c['machine'],'Machine','bound\x20workflow\x20(frozen\x20once\x20published)'),e('permission',c['permission'],'Permission','governance\x20owner');for(const f of Array['isArray'](c['arbitrations'])?c['arbitrations']:[])e('arbitration',f,'Arbitration');for(const g of Array['isArray'](c['rewards'])?c['rewards']:[])e('reward',g,'Reward');for(const h of Array['isArray'](c['repositories'])?c['repositories']:[])e('repository',h,'Repository');e('buy_guard',c['buy_guard'],'Guard','purchase\x20validation');break;}case'Order':{e('service',c['service'],'Service'),e('progress',c['progress'],'Progress'),e('machine',c['machine'],'Machine'),e('allocation',c['allocation'],'Allocation');break;}case'Demand':{e('permission',c['permission'],'Permission','governance\x20owner');break;}case'Arbitration':{e('permission',c['permission'],'Permission','governance\x20owner');break;}case'Progress':{e('machine',c['machine'],'Machine'),e('task',c['task'],'Order','bound\x20order');break;}default:break;}return d;}async function handleFocus(a){const b=(a['account']??'')['toLowerCase'](),c=await readObject(a['focus'],a['network']);if(!c){const e=await fetchUserProfile(a['focus'],a['network']);if(e)return{'action':'focus','result':{'object':toUserWatchObject(e),'role':resolveUserRole(e,b)}};}let d;return c&&b?d=await resolveRole(c['type'],c['data'],b,a['network']):d={'manifest_role':'neutral','latent_role':undefined,'participation_role':'neutral','evaluation_role':'neutral','conflicting':![],'reason_direction':'objective','derivation':'no\x20account\x20supplied\x20—\x20neutral\x20observer','note':'No\x20active\x20account;\x20only\x20objective\x20facts\x20are\x20narrated.'},{'action':'focus','result':{'object':toWatchObject(c),'role':d}};}async function handleExpand(a){const b=await readObject(a['focus'],a['network']);if(!b){const e=await fetchUserProfile(a['focus'],a['network']);if(e){const f=buildUserRelations(e);if(a['relation']){const g=f['filter'](h=>h['relation']===a['relation']);return{'action':'expand','result':{'object':toUserWatchObject(e),'relations':g,'supply_chain':undefined}};}return{'action':'expand','result':{'object':toUserWatchObject(e),'relations':f,'supply_chain':undefined}};}return{'action':'expand','result':{'object':null,'relations':[],'supply_chain':undefined}};}let c=await buildRelations(b['type'],b['data']);a['relation']&&(c=c['filter'](h=>h['relation']===a['relation']));let d;if(b['type']==='Service')try{d=await resolveSupplyChainGraph(b['address'],a['network']);}catch{d=undefined;}return{'action':'expand','result':{'object':toWatchObject(b),'relations':c,'supply_chain':d}};}async function readClockNow(a){try{const b=await query_objects({'objects':['0x6'],'network':a}),c=b?.['objects']?.[0x0],d=c?.['data']??c,e=Number(d?.['timestamp_ms']);return Number['isFinite'](e)?e:null;}catch{return null;}}async function collectOperations(a,b,c){const d=[];if(a['type']==='Progress'){const e=typeof a['data']['machine']==='string'?a['data']['machine']:undefined,f=(Array['isArray'](a['data']['namedOperator'])?a['data']['namedOperator']:[])['map'](j=>({'name':String(j?.['name']??''),'operators':(j?.['operators']??[])['map'](k=>String(k))}));let g,h,i;if(e){h=await fetchMachineNodes(e,c,![]),i=typeof a['data']['task']==='string'?await fetchOrderContext(a['data']['task'],c):undefined;if(h&&h['length']>0x0)try{const j=await query_objects({'objects':[e],'network':c}),k=j?.['objects']?.[0x0],l=(k?.['data']??k)?.['permission'];if(typeof l==='string')g=await fetchPermissionContext(l,c,![]);}catch{g=undefined;}}for(const m of h??[]){for(const n of m['pairs']??[]){for(const o of n['forwards']??[]){const p=accountCanExecuteForward(o,b,f,i,g),q=o['namedOperator']!==undefined&&o['namedOperator']!==null?o['namedOperator']===''?'order_holder':'named_operator':'permission_index';d['push']({'operation':'progress_next:'+o['name'],'can_execute':p,'path':q,'note':p?undefined:'guard/permission\x20not\x20satisfied\x20for\x20this\x20account'});}}}d['push'](...enumerateObjectOperations('Progress',a['data'],b,g));}else{let r;if(isPermissionIndexType(a['type'])){const t=a['data']['permission'];typeof t==='string'&&t['length']>0x0&&(r=await fetchPermissionContext(t,c,![]));}const s=a['type']==='Service'?await readClockNow(c):null;d['push'](...enumerateObjectOperations(a['type'],a['data'],b,r,s));}return d;}async function handleActions(a){const b=(a['account']??'')['toLowerCase'](),c=await readObject(a['focus'],a['network']);if(!c){const f=await fetchUserProfile(a['focus'],a['network']);if(f){const g=resolveUserRole(f,b),h=userAddressOperations(f,g);return{'action':'actions','result':{'object':toUserWatchObject(f),'role':g,'operations':h}};}return{'action':'actions','result':{'object':null,'role':null,'operations':[]}};}const d=b?await resolveRole(c['type'],c['data'],b,a['network']):null,e=b?await collectOperations(c,b,a['network']):[];return{'action':'actions','result':{'object':toWatchObject(c),'role':d,'operations':e}};}function userAddressOperations(a,b){const c=a,d=[],e=(i,j,k,l)=>d['push']({'operation':i,'can_execute':j,'path':k,'note':l}),f=Array['isArray'](c?.['permission_membership']?.['items'])?c['permission_membership']['items']['length']:0x0;f>0x0&&e('manage_permission_objects',!![],'permission_index',f+'\x20permission\x20membership(s)\x20—\x20operate\x20the\x20Service/Machine/Treasury/etc.\x20governed\x20by\x20them');const g=Array['isArray'](c?.['order_membership']?.['items'])?c['order_membership']['items']['length']:0x0;if(g>0x0){const i=c['order_membership']['items']['filter'](k=>(k?.['role']??0x0)&0x1)['length'],j=c['order_membership']['items']['filter'](k=>(k?.['role']??0x0)&0x2)['length'];if(i>0x0)e('advance_progress',!![],'order_holder',i+'\x20order(s)\x20as\x20owner\x20—\x20advance/claim');if(j>0x0)e('advance_progress',!![],'order_holder',j+'\x20order(s)\x20as\x20agent');}const h=Array['isArray'](c?.['reverse_tx']?.['items'])?c['reverse_tx']['items']['length']:0x0;return h>0x0&&e('submit_guard',![],'guard_submission',h+'\x20recent\x20tx\x20binding(s)\x20—\x20guard-gated\x20operations\x20require\x20passport\x20submissions'),d['length']===0x0&&e('prospect',b?.['participation_role']==='prospect'||b?.['manifest_role']==='neutral','none','no\x20on-chain\x20memberships\x20yet\x20—\x20explore\x20services\x20to\x20place\x20a\x20first\x20order'),d;}async function handleReason(a){const b=(a['account']??'')['toLowerCase'](),c=await readObject(a['focus'],a['network']);if(!c){const n=await fetchUserProfile(a['focus'],a['network']);if(n){const o=resolveUserRole(n,b),p=toUserWatchObject(n);if(o['reason_direction']==='objective')return{'action':'reason','result':{'object':p,'identity':o,'reason_direction':'objective','value':null,'game':null,'path':null,'objective_note':'user-address\x20profile\x20—\x20objective\x20facts\x20only\x20(identity,\x20reputation,\x20memberships,\x20activity);\x20bind\x20an\x20account\x20to\x20this\x20address\x20to\x20see\x20game/path\x20reasoning.'}};const q={'perspective':valuePerspectiveOf(o['participation_role']),'interest_analyzer':interestAnalyzerOf(o['participation_role']),'prefer':interestsOf(o['evaluation_role'])['prefer'],'avoid':interestsOf(o['evaluation_role'])['avoid'],'sensitivity':interestsOf(o['evaluation_role'])['sensitivity']},r={'power':gamePowerOf(o['participation_role']),'strategy':gameStrategyOf(o['participation_role']),'weaker_party':isWeakerParty(o['participation_role']),'stronger_party':isStrongerParty(o['participation_role'])};return{'action':'reason','result':{'object':p,'identity':o,'reason_direction':'game','value':q,'game':r,'path':{'operations':userAddressOperations(n,o),'summary':'address\x20holds\x20on-chain\x20memberships\x20—\x20'+o['participation_role']+'\x20capability\x20surface\x20listed.'}}};}return{'action':'reason','result':{'object':null,'identity':null,'reason_direction':'objective','value':null,'game':null,'path':null,'objective_note':'focus\x20object\x20unresolvable\x20—\x20no\x20reasoning\x20possible.'}};}const d=b?await resolveRole(c['type'],c['data'],b,a['network']):{'manifest_role':'neutral','latent_role':undefined,'participation_role':'neutral','evaluation_role':'neutral','conflicting':![],'reason_direction':'objective','derivation':'no\x20account\x20supplied\x20—\x20neutral\x20observer','note':'No\x20active\x20account;\x20only\x20objective\x20facts\x20are\x20narrated.'},e=toWatchObject(c);if(d['reason_direction']==='objective')return{'action':'reason','result':{'object':e,'identity':d,'reason_direction':'objective','value':null,'game':null,'path':null,'objective_note':d['participation_role']==='neutral'?'neutral\x20observer\x20—\x20no\x20on-chain\x20relationship;\x20only\x20objective\x20facts\x20are\x20narrated.':'system/observer\x20scope\x20—\x20no\x20game/path/action\x20recommendation\x20is\x20made.'}};const f=d['participation_role'],g=d['evaluation_role'],h=interestsOf(g),i={'perspective':valuePerspectiveOf(g),'interest_analyzer':interestAnalyzerOf(g),'prefer':h['prefer'],'avoid':h['avoid'],'sensitivity':h['sensitivity']},j={'power':gamePowerOf(f),'strategy':gameStrategyOf(f),'weaker_party':isWeakerParty(f),'stronger_party':isStrongerParty(f)},k=await collectOperations(c,b,a['network']),l=k['filter'](s=>s['can_execute']),m={'operations':k,'summary':k['length']+'\x20operation(s)\x20enumerated;\x20'+l['length']+'\x20executable\x20right\x20now\x20as\x20\x27'+f+'\x27.'};if(c['type']==='Progress'){const s=typeof c['data']['machine']==='string'?c['data']['machine']:undefined,t=typeof c['data']['current']==='string'?c['data']['current']:'';if(s){const u=await fetchMachineNodes(s,a['network'],![]);u&&u['length']>0x0&&(m['path_reasoning']=evaluatePathReasoning({'current_node':t,'perspective':f,'machine_nodes':u}));}}return{'action':'reason','result':{'object':e,'identity':d,'reason_direction':'game','value':i,'game':j,'path':m}};}export async function handleWatchOperation(a){const b=strictParse(WatchOperationInputSchema,a);let c;switch(b['action']){case'focus':c=await handleFocus(b);break;case'expand':c=await handleExpand(b);break;case'actions':c=await handleActions(b);break;case'reason':c=await handleReason(b);break;default:throw new Error('Unknown\x20watch\x20action:\x20'+b['action']);}return{'content':[{'type':'text','text':JSON['stringify']({'result':c})}],'structuredContent':{'result':c}};}
|
|
1
|
+
import{query_objects,query_address_profile}from'@wowok/wowok';import{strictParse}from'../../schema/index.js';import{WatchOperationInputSchema}from'../../schema/watch/index.js';import{resolveWatchRole,CORE_PERMISSION_INDEX,valuePerspectiveOf,gamePowerOf,gameStrategyOf,interestAnalyzerOf,valuePropositionOf,isWeakerParty,isStrongerParty}from'../../role/index.js';import{interestsOf}from'../../evaluation/index.js';import{evaluatePathReasoning}from'../../evaluation/path-reasoning.js';import{resolveSupplyChainGraph}from'../../knowledge/supply-chain.js';import{fetchPermissionContext,fetchOrderContext,fetchMachineNodes,accountCanExecuteForward,enumerateObjectOperations,isPermissionIndexType}from'../../knowledge/index.js';import{getEffectivePersona}from'../../persona/index.js';import{normalizeObjectType}from'../../playbooks/service-build/object-type.js';async function readObject(a,b){try{const c=await query_objects({'objects':[a],'network':b}),d=c?.['objects']?.[0x0];if(!d)return undefined;const e=d?.['data']??d,f=d?.['type']??d?.['data']?.['type']??'';return{'address':String(d?.['object']??a),'type':normalizeObjectType(f),'data':e};}catch{return undefined;}}function displayName(a){if(typeof a['name']==='string'&&a['name']['length']>0x0)return a['name'];return undefined;}async function fetchUserProfile(a,b){try{const c=await query_address_profile({'address':a,'network':b});if(c&&c['kind']==='user')return c;return null;}catch{return null;}}function roleHintToCommercial(a){const b=(a??'')['toLowerCase']();if(b['includes']('customer'))return'customer';if(b['includes']('collaborator'))return'collaborator';if(b['includes']('merchant')||b['includes']('supplier'))return'merchant';if(b['includes']('demander'))return'demander';if(b['includes']('arbitrator'))return'arbitrator';return'neutral';}function resolveUserRole(a,b){const c=b['length']>0x0&&b===String(a['address']??'')['toLowerCase'](),d=a?.['role_evidence']?.['role_hint'],e=c&&d?roleHintToCommercial(d):'neutral',f={'manifest_role':e,'latent_role':undefined,'participation_role':e,'evaluation_role':e,'conflicting':![],'reason_direction':e==='neutral'?'objective':'game','derivation':c?'user-address\x20profile:\x20role_hint=\x22'+(d??'none')+'\x22\x20(order/contact/permission\x20memberships\x20+\x20reverse\x20bindings)':'user-address\x20profile\x20viewed\x20without\x20identity\x20binding\x20('+(b?'observer':'no\x20account')+')','note':c?'profile\x20of\x20this\x20address\x20itself\x20—\x20identity\x20derived\x20from\x20on-chain\x20memberships\x20and\x20reverse\x20bindings.':'address\x20profile\x20—\x20objective\x20facts\x20only;\x20supply\x20an\x20account\x20to\x20see\x20identity\x20relations.'};return f;}function toUserWatchObject(a){const b=a,c=b?.['identity'],d=b?.['reputation'],e=b?.['order_membership'],f=b?.['contact_membership'],g=b?.['permission_membership'],h=b?.['reverse_core'],i=b?.['reverse_tx'],j=(k,l)=>Array['isArray'](k)?k['length']:0x0;return{'address':b?.['address'],'object_type':'User','name':c?.['description']??undefined,'fields':{'kind':'user','identity':c?{'description':c['description']??null,'referrer':c['referrer']??null,'resource':c['resource']??null,'time':c['time']??null}:null,'reputation':d?{'like':Array['isArray'](d['votes'])?d['votes']['filter'](k=>k?.['like'])['length']:0x0,'dislike':Array['isArray'](d['votes'])?d['votes']['filter'](k=>k?.['dislike'])['length']:0x0,'favor':Array['isArray'](d['votes'])?d['votes']['filter'](k=>k?.['favor'])['length']:0x0,'voters':j(d?.['votes'],'v')}:null,'orders':e?{'owner':j(e?.['items']?.['filter'](k=>(k?.['role']&0x1)!==0x0),'o'),'agent':j(e?.['items']?.['filter'](k=>(k?.['role']&0x2)!==0x0),'o'),'total':j(e?.['items'],'o')}:null,'contacts':j(f?.['items'],'c'),'permissions':g?{'count':j(g?.['items'],'p'),'roles':(g?.['items']??[])['map'](k=>({'role':k?.['role']??null,'permission':k?.['permission']??null}))}:null,'reverse_bindings':{'core':j(h?.['items'],'c'),'tx':j(i?.['items'],'t'),'total':j(h?.['items'],'c')+j(i?.['items'],'t')},'activity':b?.['activity']??null,'role_evidence':b?.['role_evidence']??null}};}function buildUserRelations(a){const b=a,c=[],d=(e,f,g,h)=>{typeof f==='string'&&f['length']>0x0&&c['push']({'relation':e,'target':f,'target_type':g,'note':h});};for(const e of b?.['order_membership']?.['items']??[]){const f=(e?.['role']??0x0)&0x1?'owner':(e?.['role']??0x0)&0x2?'agent':'member';d('order',e?.['order'],'Order','member\x20as\x20'+f);}for(const g of b?.['contact_membership']?.['items']??[]){d('contact',g?.['contact'],'Contact','member');}for(const h of b?.['permission_membership']?.['items']??[]){const i=h?.['role']===0x1?'owner':h?.['role']===0x2?'admin':'entity';d('permission',h?.['permission'],'Permission','holds\x20role\x20'+i);}for(const j of b?.['reverse_core']?.['items']??[]){d('bound_by',j?.['who'],'Object','core\x20reverse\x20binding\x20(business\x20structure)');}for(const k of b?.['reverse_tx']?.['items']??[]){d('bound_by',k?.['who'],'Object','tx\x20reverse\x20binding\x20(recent\x20activity)');}for(const l of b?.['reputation']?.['votes']??[]){d('reputation',l?.['who'],'Account','voted');}return c;}async function assembleRoleInput(a,b,c,d){const e=c['toLowerCase'](),f={'account':e},g=new Set();switch(a){case'Order':{const h=b['builder'];if(typeof h==='string'&&h['length']>0x0)f['order_holder']=h;break;}case'Service':case'Demand':case'Arbitration':{const i=b['permission'];if(typeof i==='string'&&i['length']>0x0){const j=await fetchPermissionContext(i,d,![]);if(j){const k=await readObject(i,d),l=typeof k?.['data']?.['builder']==='string'?k['data']['builder']:undefined;if(j['admin']['has'](e)||l&&l['toLowerCase']()===e){const n=a==='Service'?CORE_PERMISSION_INDEX['service']:a==='Demand'?CORE_PERMISSION_INDEX['demand']:CORE_PERMISSION_INDEX['arbitration'];g['add'](n);}const m=j['table']['get'](e);if(m){for(const o of m)g['add'](o);}}}break;}case'Progress':{const q=b['namedOperator'];if(Array['isArray'](q)){const r=q['filter'](s=>Array['isArray'](s?.['operators'])&&s['operators']['some'](t=>String(t)['toLowerCase']()===e))['map'](s=>String(s?.['name']??''));if(r['length']>0x0)f['named_operator_names']=r;}break;}default:break;}if(g['size']>0x0)f['held_permission_indexes']=Array['from'](g);return f;}async function resolveRole(a,b,c,d){const e=await assembleRoleInput(a,b,c,d);let f;try{const g=await getEffectivePersona(c);f=g?.['role'];}catch{f=undefined;}return resolveWatchRole({'derivation':e,'latent_role':f});}function toWatchObject(a){if(!a)return null;const b=displayName(a['data']),c={};for(const [d,e]of Object['entries'](a['data'])){if(Array['isArray'](e)&&e['length']>0x14)continue;if(e&&typeof e==='object'&&!Array['isArray'](e))continue;c[d]=e;}return{'address':a['address'],'object_type':a['type'],'name':b,'fields':c};}async function buildRelations(b,c){const d=[],e=(f,g,h,i)=>{typeof g==='string'&&g['length']>0x0&&d['push']({'relation':f,'target':g,'target_type':h,'note':i});};switch(b){case'Service':{e('machine',c['machine'],'Machine','bound\x20workflow\x20(frozen\x20once\x20published)'),e('permission',c['permission'],'Permission','governance\x20owner');for(const f of Array['isArray'](c['arbitrations'])?c['arbitrations']:[])e('arbitration',f,'Arbitration');for(const g of Array['isArray'](c['rewards'])?c['rewards']:[])e('reward',g,'Reward');for(const h of Array['isArray'](c['repositories'])?c['repositories']:[])e('repository',h,'Repository');e('buy_guard',c['buy_guard'],'Guard','purchase\x20validation');break;}case'Order':{e('service',c['service'],'Service'),e('progress',c['progress'],'Progress'),e('machine',c['machine'],'Machine'),e('allocation',c['allocation'],'Allocation');break;}case'Demand':{e('permission',c['permission'],'Permission','governance\x20owner');break;}case'Arbitration':{e('permission',c['permission'],'Permission','governance\x20owner');break;}case'Progress':{e('machine',c['machine'],'Machine'),e('task',c['task'],'Order','bound\x20order');break;}default:break;}return d;}async function handleFocus(a){const b=(a['account']??'')['toLowerCase'](),c=await readObject(a['focus'],a['network']);if(!c){const e=await fetchUserProfile(a['focus'],a['network']);if(e)return{'action':'focus','result':{'object':toUserWatchObject(e),'role':resolveUserRole(e,b)}};}let d;return c&&b?d=await resolveRole(c['type'],c['data'],b,a['network']):d={'manifest_role':'neutral','latent_role':undefined,'participation_role':'neutral','evaluation_role':'neutral','conflicting':![],'reason_direction':'objective','derivation':'no\x20account\x20supplied\x20—\x20neutral\x20observer','note':'No\x20active\x20account;\x20only\x20objective\x20facts\x20are\x20narrated.'},{'action':'focus','result':{'object':toWatchObject(c),'role':d}};}async function handleExpand(a){const b=await readObject(a['focus'],a['network']);if(!b){const e=await fetchUserProfile(a['focus'],a['network']);if(e){const f=buildUserRelations(e);if(a['relation']){const g=f['filter'](h=>h['relation']===a['relation']);return{'action':'expand','result':{'object':toUserWatchObject(e),'relations':g,'supply_chain':undefined}};}return{'action':'expand','result':{'object':toUserWatchObject(e),'relations':f,'supply_chain':undefined}};}return{'action':'expand','result':{'object':null,'relations':[],'supply_chain':undefined}};}let c=await buildRelations(b['type'],b['data']);a['relation']&&(c=c['filter'](h=>h['relation']===a['relation']));let d;if(b['type']==='Service')try{d=await resolveSupplyChainGraph(b['address'],a['network']);}catch{d=undefined;}return{'action':'expand','result':{'object':toWatchObject(b),'relations':c,'supply_chain':d}};}async function readClockNow(a){try{const b=await query_objects({'objects':['0x6'],'network':a}),c=b?.['objects']?.[0x0],d=c?.['data']??c,e=Number(d?.['timestamp_ms']);return Number['isFinite'](e)?e:null;}catch{return null;}}async function collectOperations(a,b,c){const d=[];if(a['type']==='Progress'){const e=typeof a['data']['machine']==='string'?a['data']['machine']:undefined,f=(Array['isArray'](a['data']['namedOperator'])?a['data']['namedOperator']:[])['map'](j=>({'name':String(j?.['name']??''),'operators':(j?.['operators']??[])['map'](k=>String(k))}));let g,h,i;if(e){h=await fetchMachineNodes(e,c,![]),i=typeof a['data']['task']==='string'?await fetchOrderContext(a['data']['task'],c):undefined;if(h&&h['length']>0x0)try{const j=await query_objects({'objects':[e],'network':c}),k=j?.['objects']?.[0x0],l=(k?.['data']??k)?.['permission'];if(typeof l==='string')g=await fetchPermissionContext(l,c,![]);}catch{g=undefined;}}for(const m of h??[]){for(const n of m['pairs']??[]){for(const o of n['forwards']??[]){const p=accountCanExecuteForward(o,b,f,i,g),q=o['namedOperator']!==undefined&&o['namedOperator']!==null?o['namedOperator']===''?'order_holder':'named_operator':'permission_index';d['push']({'operation':'progress_next:'+o['name'],'can_execute':p,'path':q,'note':p?undefined:'guard/permission\x20not\x20satisfied\x20for\x20this\x20account'});}}}d['push'](...enumerateObjectOperations('Progress',a['data'],b,g));}else{let r;if(isPermissionIndexType(a['type'])){const t=a['data']['permission'];typeof t==='string'&&t['length']>0x0&&(r=await fetchPermissionContext(t,c,![]));}const s=a['type']==='Service'?await readClockNow(c):null;d['push'](...enumerateObjectOperations(a['type'],a['data'],b,r,s));}return d;}async function handleActions(a){const b=(a['account']??'')['toLowerCase'](),c=await readObject(a['focus'],a['network']);if(!c){const f=await fetchUserProfile(a['focus'],a['network']);if(f){const g=resolveUserRole(f,b),h=userAddressOperations(f,g);return{'action':'actions','result':{'object':toUserWatchObject(f),'role':g,'operations':h}};}return{'action':'actions','result':{'object':null,'role':null,'operations':[]}};}const d=b?await resolveRole(c['type'],c['data'],b,a['network']):null,e=b?await collectOperations(c,b,a['network']):[];return{'action':'actions','result':{'object':toWatchObject(c),'role':d,'operations':e}};}function userAddressOperations(a,b){const c=a,d=[],e=(i,j,k,l)=>d['push']({'operation':i,'can_execute':j,'path':k,'note':l}),f=Array['isArray'](c?.['permission_membership']?.['items'])?c['permission_membership']['items']['length']:0x0;f>0x0&&e('manage_permission_objects',!![],'permission_index',f+'\x20permission\x20membership(s)\x20—\x20operate\x20the\x20Service/Machine/Treasury/etc.\x20governed\x20by\x20them');const g=Array['isArray'](c?.['order_membership']?.['items'])?c['order_membership']['items']['length']:0x0;if(g>0x0){const i=c['order_membership']['items']['filter'](k=>(k?.['role']??0x0)&0x1)['length'],j=c['order_membership']['items']['filter'](k=>(k?.['role']??0x0)&0x2)['length'];if(i>0x0)e('advance_progress',!![],'order_holder',i+'\x20order(s)\x20as\x20owner\x20—\x20advance/claim');if(j>0x0)e('advance_progress',!![],'order_holder',j+'\x20order(s)\x20as\x20agent');}const h=Array['isArray'](c?.['reverse_tx']?.['items'])?c['reverse_tx']['items']['length']:0x0;return h>0x0&&e('submit_guard',![],'guard_submission',h+'\x20recent\x20tx\x20binding(s)\x20—\x20guard-gated\x20operations\x20require\x20passport\x20submissions'),d['length']===0x0&&e('prospect',b?.['participation_role']==='prospect'||b?.['manifest_role']==='neutral','none','no\x20on-chain\x20memberships\x20yet\x20—\x20explore\x20services\x20to\x20place\x20a\x20first\x20order'),d;}async function handleReason(a){const b=(a['account']??'')['toLowerCase'](),c=await readObject(a['focus'],a['network']);if(!c){const n=await fetchUserProfile(a['focus'],a['network']);if(n){const o=resolveUserRole(n,b),p=toUserWatchObject(n);if(o['reason_direction']==='objective')return{'action':'reason','result':{'object':p,'identity':o,'reason_direction':'objective','value':null,'game':null,'path':null,'objective_note':'user-address\x20profile\x20—\x20objective\x20facts\x20only\x20(identity,\x20reputation,\x20memberships,\x20activity);\x20bind\x20an\x20account\x20to\x20this\x20address\x20to\x20see\x20game/path\x20reasoning.'}};const q={'perspective':valuePerspectiveOf(o['participation_role']),'interest_analyzer':interestAnalyzerOf(o['participation_role']),'prefer':interestsOf(o['evaluation_role'])['prefer'],'avoid':interestsOf(o['evaluation_role'])['avoid'],'sensitivity':interestsOf(o['evaluation_role'])['sensitivity']},r={'power':gamePowerOf(o['participation_role']),'strategy':gameStrategyOf(o['participation_role']),'weaker_party':isWeakerParty(o['participation_role']),'stronger_party':isStrongerParty(o['participation_role'])};return{'action':'reason','result':{'object':p,'identity':o,'reason_direction':'game','value':q,'game':r,'path':{'operations':userAddressOperations(n,o),'summary':'address\x20holds\x20on-chain\x20memberships\x20—\x20'+o['participation_role']+'\x20capability\x20surface\x20listed.'}}};}return{'action':'reason','result':{'object':null,'identity':null,'reason_direction':'objective','value':null,'game':null,'path':null,'objective_note':'focus\x20object\x20unresolvable\x20—\x20no\x20reasoning\x20possible.'}};}const d=b?await resolveRole(c['type'],c['data'],b,a['network']):{'manifest_role':'neutral','latent_role':undefined,'participation_role':'neutral','evaluation_role':'neutral','conflicting':![],'reason_direction':'objective','derivation':'no\x20account\x20supplied\x20—\x20neutral\x20observer','note':'No\x20active\x20account;\x20only\x20objective\x20facts\x20are\x20narrated.'},e=toWatchObject(c);if(d['reason_direction']==='objective')return{'action':'reason','result':{'object':e,'identity':d,'reason_direction':'objective','value':null,'game':null,'path':null,'objective_note':d['participation_role']==='neutral'?'neutral\x20observer\x20—\x20no\x20on-chain\x20relationship;\x20only\x20objective\x20facts\x20are\x20narrated.':'system/observer\x20scope\x20—\x20no\x20game/path/action\x20recommendation\x20is\x20made.'}};const f=d['participation_role'],g=d['evaluation_role'],h=interestsOf(g),i={'perspective':valuePerspectiveOf(g),'interest_analyzer':interestAnalyzerOf(g),'prefer':h['prefer'],'avoid':h['avoid'],'sensitivity':h['sensitivity'],'value_proposition':valuePropositionOf(g)},j={'power':gamePowerOf(f),'strategy':gameStrategyOf(f),'weaker_party':isWeakerParty(f),'stronger_party':isStrongerParty(f)},k=await collectOperations(c,b,a['network']),l=k['filter'](s=>s['can_execute']),m={'operations':k,'summary':k['length']+'\x20operation(s)\x20enumerated;\x20'+l['length']+'\x20executable\x20right\x20now\x20as\x20\x27'+f+'\x27.'};if(c['type']==='Progress'){const s=typeof c['data']['machine']==='string'?c['data']['machine']:undefined,t=typeof c['data']['current']==='string'?c['data']['current']:'';if(s){const u=await fetchMachineNodes(s,a['network'],![]);u&&u['length']>0x0&&(m['path_reasoning']=evaluatePathReasoning({'current_node':t,'perspective':f,'machine_nodes':u}));}}return{'action':'reason','result':{'object':e,'identity':d,'reason_direction':'game','value':i,'game':j,'path':m}};}export async function handleWatchOperation(a){const b=strictParse(WatchOperationInputSchema,a);let c;switch(b['action']){case'focus':c=await handleFocus(b);break;case'expand':c=await handleExpand(b);break;case'actions':c=await handleActions(b);break;case'reason':c=await handleReason(b);break;default:throw new Error('Unknown\x20watch\x20action:\x20'+b['action']);}return{'content':[{'type':'text','text':JSON['stringify']({'result':c})}],'structuredContent':{'result':c}};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{query_events,queryTableItem_ProgressHistory}from'@wowok/wowok';import{Cache}from'@wowok/wowok/w/local/cache';import{strictParse,WorkflowOperationInputSchema}from'../../schema/index.js';import{fetchMachineNodes,fetchPermissionContext,fetchOrdersOfUser,resolveLocalNamesFor,listLocalAccounts,accountCanExecuteForward,batchQueryObjectsByIds}from'../../knowledge/index.js';import{handleOnchainOperations}from'./onchain.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 operatorKind(a){if(a['namedOperator']==='')return'order_holder';if(typeof a['namedOperator']==='string'&&a['namedOperator']['length']>0x0)return'named_operator';return'permission_index';}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']??'',g=b['machine'],h=b['task']??null,i=(Array['isArray'](b['namedOperator'])?b['namedOperator']:[])['map'](u=>({'name':String(u?.['name']??''),'operators':(u?.['operators']??[])['map'](v=>String(v))}));if(!g)return undefined;const j=String(g)['toLowerCase'](),k=c['machineNodes']['get'](j)??[],l=c['permAddrByMachine']['get'](j),m=l?c['permCtxByPermission']['get'](String(l)['toLowerCase']()):undefined,n=h?c['orderCtxByOrder']['get'](String(h)['toLowerCase']()):undefined,o=h?c['serviceByOrder']['get'](String(h)['toLowerCase']()):undefined,p=new Map();for(const u of Array['isArray'](b['session'])?b['session']:[]){const v=String(u?.['next_node']??'');for(const w of Array['isArray'](u?.['forwards'])?u['forwards']:[]){p['set'](v+'|'+String(w?.['forward']??''),{'who':w?.['who']?String(w['who'])['toLowerCase']():null,'accomplished':!!w?.['accomplished']});}}const q=[];for(const x of k){for(const y of x['pairs']){if(y['prev_node']!==e)continue;for(const z of y['forwards']){if(!z['name'])continue;const A=p['get'](x['name']+'|'+z['name']);if(A?.['accomplished'])continue;let B=d['filter'](C=>accountCanExecuteForward(z,C['address'],i,n,m));A?.['who']&&(B=B['filter'](C=>C['address']['toLowerCase']()===A['who'])),q['push']({'next_node':x['name'],'forward':z['name'],'weight':z['weight'],'threshold':y['threshold'],'guard':z['guard'],'guard_submissions':z['guard']?c['guardSubsByAddr']['get'](String(z['guard'])['toLowerCase']()):undefined,'operator_kind':operatorKind(z),'permission_index':z['permissionIndex']??undefined,'named_operator':typeof z['namedOperator']==='string'&&z['namedOperator']['length']>0x0?z['namedOperator']:undefined,'executable_accounts':B['map'](C=>({'address':C['address'],'name':C['name']}))});}}}const r=q['some'](C=>C['executable_accounts']['length']>0x0),t=progressRelatedToLocalAccount(b,n,i,d);if(!r&&!t)return undefined;return{'progress':a,'progress_name':c['localNames']['get'](a['toLowerCase']()),'current':e,'machine':g,'machine_name':c['localNames']['get'](String(g)['toLowerCase']()),'task':h,'task_name':h?c['localNames']['get'](String(h)['toLowerCase']()):undefined,'service':o,'service_name':o?c['localNames']['get'](String(o)['toLowerCase']()):undefined,'context_repositories':(Array['isArray'](b['context_repositories'])?b['context_repositories']:[])['filter'](C=>typeof C==='string'&&C['startsWith']('0x'))['map'](C=>({'address':C,'name':c['localNames']['get'](C['toLowerCase']())})),'options':q,'terminal':q['length']===0x0,'actionable':r,'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 F={'action':'list','tasks':[],'note':'No\x20local\x20accounts\x20found\x20—\x20create\x20or\x20import\x20an\x20account\x20first.'};return{'content':[{'type':'text','text':JSON['stringify']({'result':F})}],'structuredContent':{'result':F}};}const g=await query_events({'type':'ProgressEvent','order':'descending','limit':b*0x3,'no_cache':e,'network':c}),h=new Set((g?.['data']??[])['map'](G=>G?.['progress'])['filter'](G=>typeof G==='string'&&G['startsWith']('0x'))['map'](G=>G['toLowerCase']()));await mapWithConcurrency(f,0x4,async G=>{const H=await fetchOrdersOfUser(G['address'],c,e);for(const I of H??[]){const J=I?.['order']?.['progress'];if(typeof J==='string'&&J['startsWith']('0x'))h['add'](J['toLowerCase']());}});if(h['size']===0x0){const G={'action':'list','tasks':[]};return{'content':[{'type':'text','text':JSON['stringify']({'result':G})}],'structuredContent':{'result':G}};}const i=[...h],j=await batchQueryObjectsByIds(i,c,e),k=new Map();for(const H of j??[]){const I=H?.['data']??H;H?.['type']==='Progress'&&typeof I?.['machine']==='string'&&k['set'](String(H?.['query_name']??H?.['object']??'')['toLowerCase'](),I);}const l=[...new Set([...k['values']()]['map'](J=>J['machine'])['filter'](J=>typeof J==='string'))],m=[...new Set([...k['values']()]['map'](J=>J['task'])['filter'](J=>typeof J==='string'&&J['startsWith']('0x')))],n=await batchQueryObjectsByIds(l,c,e),p=new Map(),q=new Set();for(const J of n??[]){const K=J?.['data']??J,L=String(J?.['query_name']??J?.['object']??'')['toLowerCase'](),M=typeof K?.['permission']==='string'?K['permission']:undefined;p['set'](L,M);if(M)q['add'](String(M)['toLowerCase']());}const r=new Map();await mapWithConcurrency(l,0x8,async N=>{r['set'](String(N)['toLowerCase'](),await fetchMachineNodes(N,c,![]));});const s=[...new Set([...r['values']()]['flatMap'](N=>N['flatMap'](O=>O['pairs']['flatMap'](P=>P['forwards']['map'](Q=>Q['guard'])['filter'](Q=>typeof Q==='string'&&Q['startsWith']('0x'))))))],t=new Map();if(s['length']>0x0){const N=await batchQueryObjectsByIds(s,c,e);for(const O of N??[]){const P=O?.['data']??O;if(O?.['type']==='Guard'&&Array['isArray'](P?.['table'])){const Q=String(O?.['query_name']??O?.['object']??'')['toLowerCase'](),R=P['table']['filter'](S=>S?.['b_submission'])['map'](S=>({'identifier':Number(S?.['identifier']??0x0),'name':String(S?.['name']??'field\x20'+S?.['identifier']),'value_type':String(S?.['value_type']??''),'object_type':S?.['object_type']?String(S['object_type']):undefined}));if(R['length']>0x0)t['set'](Q,R);}}}const u=new Map();await mapWithConcurrency([...q],0x8,async S=>{u['set'](S,await fetchPermissionContext(S,c,e));});const v=new Map(),w=new Map(),x=await batchQueryObjectsByIds(m,c,e);for(const S of x??[]){const T=S?.['data']??S;if(S?.['type']==='Order'){const U=String(S?.['query_name']??S?.['object']??'')['toLowerCase']();v['set'](U,{'builder':String(T?.['builder']??T?.['owner']??''),'agent':new Set((T?.['agent']??[])['map'](V=>String(V)['toLowerCase']()))});if(typeof T?.['service']==='string')w['set'](U,T['service']);}}const y=[...k['values']()]['flatMap'](V=>Array['isArray'](V?.['context_repositories'])?V['context_repositories']:[]),z=[...i,...l,...m,...[...w['values']()]['filter'](V=>typeof V==='string'),...y['filter'](V=>typeof V==='string')],{byAddress:A}=await resolveLocalNamesFor(z),B={'machineNodes':r,'permAddrByMachine':p,'permCtxByPermission':u,'orderCtxByOrder':v,'serviceByOrder':w,'localNames':A,'guardSubsByAddr':t},C=await mapWithConcurrency(i,0x8,async V=>{try{const W=k['get'](String(V)['toLowerCase']());return W?buildWorkflowTaskFromData(V,W,B,f):undefined;}catch{return undefined;}}),D=C['filter'](V=>V!==undefined)['sort']((V,W)=>Number(W['actionable'])-Number(V['actionable'])),E={'action':'list','tasks':D['slice'](0x0,b)};return{'content':[{'type':'text','text':JSON['stringify']({'result':E})}],'structuredContent':{'result':E}};}async function handleTask(a){const b=a['network'],c=a['no_cache'],e=a['progress'],f=await listLocalAccounts(),g=await batchQueryObjectsByIds([e],b,c),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=String(a['network']??'testnet'),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)for(let F=p;F<l;F++){const G=await queryTableItem_ProgressHistory({'parent':j,'u64':F,'no_cache':![],'network':b});if(!G)break;o['push']({'index':F,'node':G['node'],'next_node':G['next_node'],'time':G['time'],'session':G['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'](H=>H['time'])):n['lastActivity'];m[j]={'cursor':q,'lastActivity':u,'records':t};let v=0x0;if(d){const H=Date['now']()-WORKFLOW_HISTORY_RETENTION_MS;for(const I of Object['keys'](m)){const J=m[I];J['lastActivity']>0x0&&J['lastActivity']<H&&(delete m[I],v++);}}await writeHistoryStore(b,m);const w=typeof k?.['machine']==='string'?k['machine']:undefined,x=new Map();if(w)try{const K=await fetchMachineNodes(w,b,![]);for(const L of K??[]){for(const M of L?.['pairs']??[]){for(const N of M?.['forwards']??[]){if(N?.['name'])x['set'](L['name']+'|'+N['name'],Number(N?.['weight']??0x0));}}}}catch{}const y=[],z=O=>{for(const P of O??[]){const Q=String(P?.['value_type']??'')['toLowerCase'](),R=P?.['value'];if(!Q['includes']('address'))continue;if(Array['isArray'](R)){for(const S of R)if(typeof S==='string'&&S['startsWith']('0x'))y['push'](S);}else typeof R==='string'&&R['startsWith']('0x')&&y['push'](R);}};for(const O of t){for(const P of Array['isArray'](O?.['session'])?O['session']:[]){for(const Q of Array['isArray'](P?.['forwards'])?P['forwards']:[]){if(Q?.['who'])y['push'](String(Q['who']));z(Q?.['retained_submission']);}}}const {byAddress:A}=await resolveLocalNamesFor([...new Set(y)]),B=R=>{const S=String(R?.['value_type']??'')['toLowerCase'](),T=R?.['value'];if(!S['includes']('address'))return R;const U=Array['isArray'](T)?typeof T[0x0]==='string'?T[0x0]:undefined:typeof T==='string'?T:undefined;return{...R,'display_name':U?A['get'](String(U)['toLowerCase']()):undefined};},C=t['map'](R=>({...R,'session':(Array['isArray'](R?.['session'])?R['session']:[])['map'](S=>({...S,'forwards':(Array['isArray'](S?.['forwards'])?S['forwards']:[])['map'](T=>({...T,'weight':x['get'](S?.['next_node']+'|'+T?.['forward'])??undefined,'who_name':T?.['who']?A['get'](String(T['who'])['toLowerCase']()):undefined,'retained_submission':(Array['isArray'](T?.['retained_submission'])?T['retained_submission']:[])['map'](B)}))}))})),D={'action':'history','history':{'progress':j,'current':k?.['current'],'records':[...C]['sort']((R,S)=>S['index']-R['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']??'','network':a['network'],'no_cache':a['no_cache']}};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,fetchOrdersOfUser,resolveLocalNamesFor,listLocalAccounts,enumerateActionableForwards,batchQueryObjectsByIds,batchReadU64KeyedFields}from'../../knowledge/index.js';import{handleOnchainOperations}from'./onchain.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 F={'action':'list','tasks':[],'note':'No\x20local\x20accounts\x20found\x20—\x20create\x20or\x20import\x20an\x20account\x20first.'};return{'content':[{'type':'text','text':JSON['stringify']({'result':F})}],'structuredContent':{'result':F}};}const g=await query_events({'type':'ProgressEvent','order':'descending','limit':b*0x3,'no_cache':e,'network':c}),h=new Set((g?.['data']??[])['map'](G=>G?.['progress'])['filter'](G=>typeof G==='string'&&G['startsWith']('0x'))['map'](G=>G['toLowerCase']()));await mapWithConcurrency(f,0x4,async G=>{const H=await fetchOrdersOfUser(G['address'],c,e);for(const I of H??[]){const J=I?.['order']?.['progress'];if(typeof J==='string'&&J['startsWith']('0x'))h['add'](J['toLowerCase']());}});if(h['size']===0x0){const G={'action':'list','tasks':[]};return{'content':[{'type':'text','text':JSON['stringify']({'result':G})}],'structuredContent':{'result':G}};}const i=[...h],j=await batchQueryObjectsByIds(i,c,e),k=new Map();for(const H of j??[]){const I=H?.['data']??H;H?.['type']==='Progress'&&typeof I?.['machine']==='string'&&k['set'](String(H?.['query_name']??H?.['object']??'')['toLowerCase'](),I);}const l=[...new Set([...k['values']()]['map'](J=>J['machine'])['filter'](J=>typeof J==='string'))],m=[...new Set([...k['values']()]['map'](J=>J['task'])['filter'](J=>typeof J==='string'&&J['startsWith']('0x')))],n=await batchQueryObjectsByIds(l,c,e),p=new Map(),q=new Set();for(const J of n??[]){const K=J?.['data']??J,L=String(J?.['query_name']??J?.['object']??'')['toLowerCase'](),M=typeof K?.['permission']==='string'?K['permission']:undefined;p['set'](L,M);if(M)q['add'](String(M)['toLowerCase']());}const r=new Map();await mapWithConcurrency(l,0x8,async N=>{r['set'](String(N)['toLowerCase'](),await fetchMachineNodes(N,c,![]));});const s=[...new Set([...r['values']()]['flatMap'](N=>N['flatMap'](O=>O['pairs']['flatMap'](P=>P['forwards']['map'](Q=>Q['guard'])['filter'](Q=>typeof Q==='string'&&Q['startsWith']('0x'))))))],t=new Map();if(s['length']>0x0){const N=await batchQueryObjectsByIds(s,c,e);for(const O of N??[]){const P=O?.['data']??O;if(O?.['type']==='Guard'&&Array['isArray'](P?.['table'])){const Q=String(O?.['query_name']??O?.['object']??'')['toLowerCase'](),R=P['table']['filter'](S=>S?.['b_submission'])['map'](S=>({'identifier':Number(S?.['identifier']??0x0),'name':String(S?.['name']??'field\x20'+S?.['identifier']),'value_type':String(S?.['value_type']??''),'object_type':S?.['object_type']?String(S['object_type']):undefined}));if(R['length']>0x0)t['set'](Q,R);}}}const u=new Map();await mapWithConcurrency([...q],0x8,async S=>{u['set'](S,await fetchPermissionContext(S,c,e));});const v=new Map(),w=new Map(),x=await batchQueryObjectsByIds(m,c,e);for(const S of x??[]){const T=S?.['data']??S;if(S?.['type']==='Order'){const U=String(S?.['query_name']??S?.['object']??'')['toLowerCase']();v['set'](U,{'builder':String(T?.['builder']??T?.['owner']??''),'agent':new Set((T?.['agent']??[])['map'](V=>String(V)['toLowerCase']()))});if(typeof T?.['service']==='string')w['set'](U,T['service']);}}const y=[...k['values']()]['flatMap'](V=>Array['isArray'](V?.['context_repositories'])?V['context_repositories']:[]),z=[...i,...l,...m,...[...w['values']()]['filter'](V=>typeof V==='string'),...y['filter'](V=>typeof V==='string')],{byAddress:A}=await resolveLocalNamesFor(z),B={'machineNodes':r,'permAddrByMachine':p,'permCtxByPermission':u,'orderCtxByOrder':v,'serviceByOrder':w,'localNames':A,'guardSubsByAddr':t},C=await mapWithConcurrency(i,0x8,async V=>{try{const W=k['get'](String(V)['toLowerCase']());return W?buildWorkflowTaskFromData(V,W,B,f):undefined;}catch{return undefined;}}),D=C['filter'](V=>V!==undefined)['sort']((V,W)=>Number(W['actionable'])-Number(V['actionable'])),E={'action':'list','tasks':D['slice'](0x0,b)};return{'content':[{'type':'text','text':JSON['stringify']({'result':E})}],'structuredContent':{'result':E}};}async function handleTask(a){const b=a['network'],c=a['no_cache'],e=a['progress'],f=await listLocalAccounts(),g=await batchQueryObjectsByIds([e],b,c),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=String(a['network']??'testnet'),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']??'','network':a['network'],'no_cache':a['no_cache']}};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);}
|