@wowok/agent-mcp 3.4.2 → 3.4.3
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/.build-stamp.json +5 -0
- package/dist/chain-semantics/composition-truth.js +1 -1
- package/dist/chain-semantics/eval-order.js +1 -1
- 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.js +1 -1
- package/dist/composition/compile.d.ts +10 -3
- package/dist/composition/compile.js +1 -1
- package/dist/composition/emit-phases.d.ts +30 -2
- package/dist/composition/emit-phases.js +1 -1
- package/dist/composition/guard-fill.d.ts +8 -0
- package/dist/composition/guard-fill.js +1 -1
- package/dist/composition/inflight.js +1 -1
- package/dist/composition/input-normalize.js +1 -1
- package/dist/composition/materialize.d.ts +2 -0
- package/dist/composition/materialize.js +1 -1
- package/dist/composition/mode-gates.js +1 -1
- package/dist/composition/param-disclosure.js +1 -1
- package/dist/composition/plan-retry-ledger.d.ts +16 -0
- package/dist/composition/plan-retry-ledger.js +1 -1
- package/dist/composition/plan.d.ts +15 -1
- package/dist/composition/plan.js +1 -1
- package/dist/config/config-audit.spec.js +1 -1
- package/dist/config/judgment.d.ts +5 -0
- package/dist/config/judgment.js +1 -1
- package/dist/evaluation/builtins/arbitration-score.d.ts +1 -0
- package/dist/evaluation/builtins/arbitration-score.js +1 -1
- package/dist/evaluation/builtins/demand-match.js +1 -1
- package/dist/evaluation/builtins/graph-service.d.ts +8 -0
- package/dist/evaluation/builtins/graph-service.js +1 -1
- package/dist/evaluation/capability.d.ts +9 -0
- package/dist/evaluation/engine.js +1 -1
- package/dist/evaluation/extract.d.ts +9 -1
- package/dist/evaluation/extract.js +1 -1
- package/dist/evaluation/match-operation.js +1 -1
- package/dist/evaluation/match-policy.d.ts +5 -3
- package/dist/evaluation/match-policy.js +1 -1
- package/dist/evaluation/standards.d.ts +1 -0
- package/dist/evaluation/standards.js +1 -1
- package/dist/evaluation/structured-lines.js +1 -1
- package/dist/evaluation/types.d.ts +1 -0
- package/dist/extensions/capability.js +1 -1
- package/dist/harness/recover.js +1 -1
- package/dist/index.js +1 -1
- package/dist/intent/types.d.ts +1 -1
- package/dist/intent/types.js +1 -1
- package/dist/knowledge/allocation-ledger.js +1 -1
- package/dist/knowledge/allocator-rail-verifier.d.ts +17 -1
- package/dist/knowledge/allocator-rail-verifier.js +1 -1
- package/dist/knowledge/arb-fund-facts.d.ts +7 -0
- package/dist/knowledge/arb-fund-facts.js +1 -1
- package/dist/knowledge/arbitration-rail-verifier.d.ts +35 -0
- package/dist/knowledge/arbitration-rail-verifier.js +1 -0
- package/dist/knowledge/audit-rules.d.ts +11 -0
- package/dist/knowledge/audit-rules.js +1 -1
- package/dist/knowledge/baselines/judgment-baselines.json +1 -0
- package/dist/knowledge/baselines/rules/guard.json +7 -6
- package/dist/knowledge/baselines/rules/progress.json +4 -4
- package/dist/knowledge/baselines/rules/reward.json +118 -3
- package/dist/knowledge/builtin-templates.d.ts +3 -2
- package/dist/knowledge/builtin-templates.js +1 -1
- package/dist/knowledge/chain-query-registry.d.ts +14 -0
- package/dist/knowledge/chain-query-registry.js +1 -0
- package/dist/knowledge/event-semantics.js +1 -1
- package/dist/knowledge/fee-param-bindings.d.ts +2 -0
- package/dist/knowledge/fee-param-bindings.js +1 -1
- package/dist/knowledge/getting-started.js +1 -1
- package/dist/knowledge/guard-binding-table.js +1 -1
- package/dist/knowledge/guard-binding-verifier.d.ts +7 -0
- package/dist/knowledge/guard-binding-verifier.js +1 -1
- package/dist/knowledge/guard-design-patterns.d.ts +1 -1
- package/dist/knowledge/guard-design-patterns.js +1 -1
- package/dist/knowledge/guard-host-context.js +1 -1
- package/dist/knowledge/guard-lint.js +1 -1
- package/dist/knowledge/guard-node-gates.d.ts +3 -1
- package/dist/knowledge/guard-node-gates.js +1 -1
- package/dist/knowledge/guard-puzzle.js +1 -1
- package/dist/knowledge/guard-render.js +1 -1
- package/dist/knowledge/guard-risk.js +1 -1
- package/dist/knowledge/guard-templates.d.ts +2 -1
- package/dist/knowledge/guard-templates.js +1 -1
- package/dist/knowledge/guard-translation.js +1 -1
- package/dist/knowledge/index.d.ts +2 -0
- package/dist/knowledge/index.js +1 -1
- package/dist/knowledge/industry-registry.js +1 -1
- package/dist/knowledge/jsonrpc-enum.js +1 -1
- package/dist/knowledge/knob-docs.js +1 -1
- package/dist/knowledge/param-schema.d.ts +1 -1
- package/dist/knowledge/param-schema.js +1 -1
- package/dist/knowledge/param-tiers.d.ts +2 -0
- package/dist/knowledge/param-tiers.js +1 -1
- package/dist/knowledge/path-oracle/products/food-delivery.js +1 -1
- package/dist/knowledge/pattern-resolutions.d.ts +2 -0
- package/dist/knowledge/pattern-resolutions.js +1 -1
- package/dist/knowledge/product-detail-source.d.ts +37 -0
- package/dist/knowledge/product-detail-source.js +1 -0
- package/dist/knowledge/product-doc-b5.d.ts +16 -0
- package/dist/knowledge/product-doc-b5.js +1 -0
- package/dist/knowledge/progress-ledger.js +1 -1
- package/dist/knowledge/projection.spec.js +1 -1
- package/dist/knowledge/publish-gate.d.ts +20 -0
- package/dist/knowledge/publish-gate.js +1 -0
- package/dist/knowledge/publish-readiness.d.ts +25 -0
- package/dist/knowledge/publish-readiness.js +1 -0
- package/dist/knowledge/publish-surface-contract.d.ts +16 -0
- package/dist/knowledge/publish-surface-contract.js +1 -0
- package/dist/knowledge/rail-exit-satisfiability.d.ts +25 -0
- package/dist/knowledge/rail-exit-satisfiability.js +1 -0
- package/dist/knowledge/reward-ledger.d.ts +1 -1
- package/dist/knowledge/reward-ledger.js +1 -1
- package/dist/knowledge/reward-risk.d.ts +1 -1
- package/dist/knowledge/reward-risk.js +1 -1
- package/dist/knowledge/service-ledger.d.ts +3 -1
- package/dist/knowledge/service-ledger.js +1 -1
- package/dist/knowledge/template-loader.d.ts +41 -2
- package/dist/knowledge/template-loader.js +1 -1
- package/dist/knowledge/template-registry.js +1 -1
- package/dist/knowledge/template-scanner.d.ts +17 -0
- package/dist/knowledge/template-scanner.js +1 -1
- package/dist/knowledge/workflow-guidance.d.ts +4 -0
- package/dist/knowledge/workflow-guidance.js +1 -1
- package/dist/monitor/MonitorLoop.js +1 -1
- package/dist/monitor/normalize.d.ts +1 -1
- package/dist/monitor/normalize.js +1 -1
- package/dist/monitor/types.js +1 -1
- package/dist/participation/game-context.js +1 -1
- package/dist/participation/radar-core.js +1 -1
- package/dist/playbooks/service-build/business-puzzle.js +1 -1
- package/dist/playbooks/service-build/machine-panorama.js +1 -1
- package/dist/playbooks/service-build/merchant-guide.d.ts +28 -3
- package/dist/playbooks/service-build/merchant-guide.js +1 -1
- package/dist/playbooks/service-build/object-panorama.d.ts +4 -0
- 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.js +1 -1
- package/dist/playbooks/service-build/service-panorama.js +1 -1
- package/dist/playbooks/service-build/service-quote.js +1 -1
- package/dist/review/index.js +1 -1
- package/dist/review/order.js +1 -1
- package/dist/safety/confirm-gate.js +1 -1
- package/dist/schema/benchmark-migration/index.d.ts +24 -0
- package/dist/schema/benchmark-migration/index.js +1 -1
- package/dist/schema/call/allocation.d.ts +11 -7
- package/dist/schema/call/allocation.js +1 -1
- package/dist/schema/call/arbitration.d.ts +4 -0
- package/dist/schema/call/arbitration.js +1 -1
- package/dist/schema/call/base.d.ts +28 -0
- package/dist/schema/call/base.js +1 -1
- package/dist/schema/call/bridge.d.ts +21 -0
- package/dist/schema/call/contact.d.ts +4 -0
- package/dist/schema/call/demand.d.ts +4 -0
- package/dist/schema/call/guard.d.ts +12 -0
- package/dist/schema/call/handler.d.ts +1 -0
- package/dist/schema/call/handler.js +1 -1
- package/dist/schema/call/machine.d.ts +16 -8
- package/dist/schema/call/normalize-error.d.ts +1 -0
- package/dist/schema/call/normalize-error.js +1 -0
- package/dist/schema/call/order.d.ts +7 -3
- package/dist/schema/call/order.js +1 -1
- package/dist/schema/call/payment.d.ts +7 -3
- package/dist/schema/call/permission.d.ts +4 -0
- package/dist/schema/call/personal.d.ts +4 -0
- package/dist/schema/call/progress.d.ts +4 -0
- package/dist/schema/call/progress.js +1 -1
- package/dist/schema/call/proof.d.ts +8 -0
- package/dist/schema/call/receipt.js +1 -1
- package/dist/schema/call/repository.d.ts +4 -0
- package/dist/schema/call/reward.d.ts +6 -2
- package/dist/schema/call/reward.js +1 -1
- package/dist/schema/call/semantic.d.ts +2 -2
- package/dist/schema/call/semantic.js +1 -1
- package/dist/schema/call/service.d.ts +6 -2
- package/dist/schema/call/treasury.d.ts +10 -6
- package/dist/schema/common/index.js +1 -1
- package/dist/schema/envelope-unify.d.ts +1 -0
- package/dist/schema/envelope-unify.js +1 -1
- package/dist/schema/evaluation/index.d.ts +43 -0
- package/dist/schema/evaluation/index.js +1 -1
- package/dist/schema/goal/index.d.ts +14 -2
- package/dist/schema/goal/planning.d.ts +18 -0
- package/dist/schema/goal/planning.js +1 -1
- package/dist/schema/intent-radar/index.d.ts +12 -0
- package/dist/schema/intent-radar/index.js +1 -1
- package/dist/schema/keeper/index.d.ts +1 -0
- package/dist/schema/local/index.d.ts +10 -0
- package/dist/schema/local/index.js +1 -1
- package/dist/schema/local/wip.js +1 -1
- package/dist/schema/messenger/index.d.ts +1 -0
- package/dist/schema/messenger/index.js +1 -1
- package/dist/schema/operations.d.ts +95 -12
- package/dist/schema/operations.js +1 -1
- package/dist/schema/persona/index.d.ts +22 -0
- package/dist/schema/query/bi.d.ts +28 -2
- package/dist/schema/query/bi.js +1 -1
- package/dist/schema/query/index.d.ts +67 -61
- package/dist/schema/query/index.js +1 -1
- package/dist/schema/schema-version.js +1 -1
- package/dist/schema/workflow/index.js +1 -1
- package/dist/schema-query-impl/index.d.ts +1 -0
- package/dist/schema-query-impl/index.js +1 -1
- package/dist/schemas/account_operation.output.json +2 -1
- package/dist/schemas/benchmark_migration_operation.output.json +74 -0
- package/dist/schemas/benchmark_migration_operation.schema.json +32 -0
- package/dist/schemas/bridge_operation.output.json +2 -1
- package/dist/schemas/bridge_operation.schema.json +40 -0
- package/dist/schemas/evaluation_operation.output.json +96 -0
- package/dist/schemas/evaluation_operation.schema.json +39 -0
- package/dist/schemas/goal_operation.schema.json +32 -0
- package/dist/schemas/guard2file.schema.json +8 -0
- package/dist/schemas/index.json +1 -1
- package/dist/schemas/intent_radar.output.json +10 -2
- package/dist/schemas/intent_radar.schema.json +5 -1
- package/dist/schemas/keeper_operation.output.json +2 -1
- package/dist/schemas/local_cache_operation.output.json +2 -1
- package/dist/schemas/local_history_operation.output.json +2 -1
- package/dist/schemas/local_info_operation.output.json +2 -1
- package/dist/schemas/local_mark_operation.output.json +2 -1
- package/dist/schemas/local_mark_operation.schema.json +10 -1
- package/dist/schemas/machineNode2file.schema.json +8 -0
- package/dist/schemas/messenger_operation.output.json +2 -1
- package/dist/schemas/messenger_operation.schema.json +2 -1
- package/dist/schemas/monitor_events.output.json +2 -1
- package/dist/schemas/monitor_subscription.output.json +2 -1
- package/dist/schemas/onchain_events.output.json +206 -13
- package/dist/schemas/onchain_events.schema.json +16 -0
- package/dist/schemas/onchain_operations.output.json +22 -3
- package/dist/schemas/onchain_operations.schema.json +971 -326
- package/dist/schemas/onchain_operations_allocation.schema.json +19 -12
- package/dist/schemas/onchain_operations_arbitration.schema.json +9 -1
- package/dist/schemas/onchain_operations_contact.schema.json +8 -0
- package/dist/schemas/onchain_operations_demand.schema.json +8 -0
- package/dist/schemas/onchain_operations_gen_passport.schema.json +8 -0
- package/dist/schemas/onchain_operations_gen_proof.schema.json +8 -0
- package/dist/schemas/onchain_operations_guard.schema.json +654 -114
- package/dist/schemas/onchain_operations_machine.schema.json +11 -3
- package/dist/schemas/onchain_operations_order.schema.json +14 -11
- package/dist/schemas/onchain_operations_payment.schema.json +12 -9
- package/dist/schemas/onchain_operations_permission.schema.json +8 -0
- package/dist/schemas/onchain_operations_personal.schema.json +8 -0
- package/dist/schemas/onchain_operations_progress.schema.json +9 -1
- package/dist/schemas/onchain_operations_proof.schema.json +8 -0
- package/dist/schemas/onchain_operations_repository.schema.json +8 -0
- package/dist/schemas/onchain_operations_reward.schema.json +14 -11
- package/dist/schemas/onchain_operations_service.schema.json +13 -10
- package/dist/schemas/onchain_operations_treasury.schema.json +17 -19
- package/dist/schemas/onchain_table_data.output.json +52 -10
- package/dist/schemas/persona_operation.output.json +57 -0
- package/dist/schemas/persona_operation.schema.json +9 -0
- package/dist/schemas/query_toolkit.output.json +325 -22
- package/dist/schemas/query_toolkit.schema.json +18 -5
- package/dist/schemas/wip_file.output.json +2 -2
- package/dist/schemas/wip_file.schema.json +2 -2
- package/dist/schemas/workflow_operation.schema.json +1 -1
- package/dist/tools/error-catalog.d.ts +17 -0
- package/dist/tools/error-catalog.js +1 -0
- package/dist/tools/handlers/benchmark-migration.d.ts +20 -8
- package/dist/tools/handlers/benchmark-migration.js +1 -1
- package/dist/tools/handlers/config.js +1 -1
- package/dist/tools/handlers/entry-edge-recipe.d.ts +101 -0
- package/dist/tools/handlers/entry-edge-recipe.js +1 -0
- package/dist/tools/handlers/escrow-deficit.d.ts +10 -0
- package/dist/tools/handlers/escrow-deficit.js +1 -0
- package/dist/tools/handlers/evaluation.js +1 -1
- package/dist/tools/handlers/fund-rail-recipe.d.ts +10 -0
- package/dist/tools/handlers/fund-rail-recipe.js +1 -0
- package/dist/tools/handlers/intent-radar.js +1 -1
- package/dist/tools/handlers/local.js +1 -1
- package/dist/tools/handlers/mark-namespace.d.ts +30 -0
- package/dist/tools/handlers/mark-namespace.js +1 -0
- package/dist/tools/handlers/messenger.js +1 -1
- package/dist/tools/handlers/onchain-name-registration.d.ts +1 -0
- package/dist/tools/handlers/onchain-name-registration.js +1 -1
- package/dist/tools/handlers/onchain-name-registration.spec.js +1 -1
- package/dist/tools/handlers/onchain.d.ts +30 -1
- package/dist/tools/handlers/onchain.js +1 -1
- package/dist/tools/handlers/publish-binding-echo.d.ts +22 -0
- package/dist/tools/handlers/publish-binding-echo.js +1 -0
- package/dist/tools/handlers/query.d.ts +1 -1
- package/dist/tools/handlers/query.js +1 -1
- package/dist/tools/handlers/review-chain.d.ts +1 -0
- package/dist/tools/handlers/review-chain.js +1 -1
- package/dist/tools/handlers/schema-query.js +1 -1
- package/dist/tools/handlers/stale-build-check.d.ts +9 -0
- package/dist/tools/handlers/stale-build-check.js +1 -0
- package/dist/tools/handlers/submission-assembly.d.ts +55 -0
- package/dist/tools/handlers/submission-assembly.js +1 -0
- package/dist/tools/handlers/wip.js +1 -1
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.js +1 -1
- package/dist/tools/move-fn-index.gen.js +1 -1
- package/dist/tools/publish-gate-state.d.ts +5 -0
- package/dist/tools/publish-gate-state.js +1 -0
- package/dist/tools/registry/business.js +1 -1
- package/dist/tools/registry/onchain.js +1 -1
- package/dist/tools/registry/query.js +1 -1
- package/dist/tools/retry.js +1 -1
- package/dist/tools/runtime-health.js +1 -1
- package/dist/tools/shared.js +1 -1
- package/dist/tools/upgrade-check.d.ts +1 -0
- package/dist/tools/upgrade-check.js +1 -1
- package/dist/tools/wip-verify-ledger.d.ts +2 -0
- package/dist/tools/wip-verify-ledger.js +1 -1
- package/dist/tools/wrap.d.ts +15 -1
- package/dist/tools/wrap.js +1 -1
- package/package.json +5 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{CallProgress}from'@wowok/wowok';import{batchQueryObjectsByIds,fetchMachineNodes}from'../../graph/onchain/sdk-batch.js';import{loadGuardJsonFromChain}from'../../knowledge/guard-submission-brief.js';import{TASK_BINDING_SLOT,ONCE_SLOT_BYTES}from'../../knowledge/onchain-constants.js';export function findEntryEdges(a){const b=[];for(const c of Array['isArray'](a)?a:[]){for(const d of Array['isArray'](c?.['pairs'])?c['pairs']:[]){if(d?.['prev_node']!=='')continue;for(const e of Array['isArray'](d['forwards'])?d['forwards']:[]){if(!e?.['name'])continue;b['push']({'forward':e,'target':c['name'],'threshold':Number(d['threshold']??0x0)});}}}return b;}export function entrySlotSuggestion(a,b){const c=Number(a['identifier']),d=String(a['value_type']??''),e=typeof a['name']==='string'&&a['name']?'\x20(\x22'+a['name']+'\x22)':'';if(c===TASK_BINDING_SLOT)return b?'the\x20protocol\x20task-binding\x20slot\x20—\x20the\x20Order\x20address\x20this\x20workflow\x20is\x20bound\x20to:\x20'+b:'the\x20protocol\x20task-binding\x20slot\x20—\x20the\x20Order\x20address\x20this\x20workflow\x20is\x20bound\x20to\x20(the\x20order\x20that\x20owns\x20the\x20Progress)';if(c===ONCE_SLOT_BYTES)return'the\x20protocol\x20once-key\x20bytes\x20(vector<u8>)\x20—\x20order-anchored\x20edges\x20pass\x20[1]+bcs(order);\x20'+'period-keyed\x20edges\x20pass\x20the\x20guard-pinned\x20key\x20(e.g.\x20\x22period-<N>\x22)\x20as\x20bytes';if(d['includes']('Address'))return'the\x20address\x20this\x20entry\x20leg\x20constrains'+e+'\x20—\x20the\x20Entity\x20address\x20the\x20guard\x20expression\x20pins\x20'+'(permission-gated\x20leg)\x20or\x20the\x20object\x20anchor\x20the\x20expression\x20compares';if(d['includes']('Bool'))return'the\x20boolean\x20flag'+e+'\x20the\x20entry\x20guard\x20expression\x20consumes';if(d['includes']('u64')||d['includes']('u32')||d['includes']('u128')||d['includes']('u8'))return'the\x20human\x20quantity\x20this\x20slot\x20constrains'+e+',\x20in\x20base\x20units\x20(the\x20claimed\x20amount\x20/\x20'+'threshold\x20the\x20entry\x20guard\x20expression\x20compares\x20against)';return'the\x20'+(d||'typed')+'\x20value'+e+'\x20the\x20entry\x20guard\x20expression\x20consumes\x20—\x20read\x20the\x20guard\x27s\x20root\x20'+'expression\x20to\x20derive\x20it\x20(analyze_guard_semantics)';}export function entryGuardSlotRequirements(a,b){const c=Array['isArray'](a?.['table'])?a['table']:[],d=[];for(const e of c){if(!e||typeof e!=='object')continue;const f=e;if(f['b_submission']!==!![])continue;const g=Number(f['identifier']);if(!Number['isFinite'](g))continue;const h=typeof f['value_type']==='string'?f['value_type']:String(f['value_type']??'');d['push']({'identifier':g,'value_type':h,...typeof f['name']==='string'&&f['name']?{'name':f['name']}:{},'suggestion':entrySlotSuggestion({'identifier':g,'value_type':h,'name':typeof f['name']==='string'?f['name']:undefined},b),'autofillable':g===TASK_BINDING_SLOT});}return d;}function isObj(a){return a!=null&&typeof a==='object'&&!Array['isArray'](a);}function childrenOf(a){if(Array['isArray'](a['nodes']))return a['nodes']['filter'](isObj);if(isObj(a['node']))return[a['node']];return[];}const ANCHOR_QUERY_TYPES=new Set(['query_progress_history_time','query_progress_history_time_or_zero']);export function guardTimeAnchors(a){const b=new Set(),c=(d,e)=>{if(e>0xc||!isObj(d))return;if(typeof d['type']==='string'&&ANCHOR_QUERY_TYPES['has'](d['type'])){const f=isObj(d['where'])?d['where']:{};if(typeof f['nextNode']==='string'&&f['nextNode'])b['add'](f['nextNode']);}for(const g of childrenOf(d))c(g,e+0x1);};return c(a,0x0),[...b];}export function classifyEntryFire(a,b){if(a['length']!==0x1)return{'kind':'recipe','edges':a,'reports':b,'reason':a['length']===0x0?'no\x20entry\x20edge\x20exists\x20on\x20the\x20machine\x20topology':a['length']+'\x20entry\x20forwards\x20share\x20the\x20entry\x20state\x20—\x20which\x20one\x20to\x20fire\x20is\x20a\x20business\x20decision'};const c=a[0x0],d=c['forward']['namedOperator']===''&&c['forward']['weight']>=c['threshold'],e=b['find'](f=>f['edge']===c);if(!c['forward']['guard']){if(!d)return{'kind':'recipe','edges':a,'reports':b,'reason':'the\x20entry\x20forward\x20needs\x20weight\x20'+c['forward']['weight']+'\x20>=\x20threshold\x20'+c['threshold']+((c['forward']['namedOperator']?'\x20and\x20namedOperator\x20\x22'+c['forward']['namedOperator']+'\x22\x20(not\x20the\x20order\x20holder)':'')+'\x20to\x20fire')};return{'kind':'open','edge':c};}if(!e||e['unreadable']||!e['guard'])return{'kind':'recipe','edges':a,'reports':b,'reason':'the\x20entry\x20guard\x20could\x20not\x20be\x20read\x20on-chain\x20—\x20refusing\x20to\x20guess\x20its\x20requirements'};if(!d)return{'kind':'recipe','edges':a,'reports':b,'reason':'the\x20entry\x20forward\x20needs\x20weight\x20'+c['forward']['weight']+'\x20>=\x20threshold\x20'+c['threshold']+((c['forward']['namedOperator']?'\x20and\x20namedOperator\x20\x22'+c['forward']['namedOperator']+'\x22\x20(not\x20the\x20order\x20holder)':'')+'\x20to\x20fire')};if(e['slots']['length']>0x0)return{'kind':'recipe','edges':a,'reports':b,'reason':'the\x20entry\x20guard\x20declares\x20'+e['slots']['length']+'\x20submission\x20slot(s)\x20that\x20only\x20the\x20caller\x20can\x20fill'};if(e['has_rely'])return{'kind':'recipe','edges':a,'reports':b,'reason':'the\x20entry\x20guard\x20relies\x20on\x20other\x20guards\x20(rely\x20chain)\x20—\x20out\x20of\x20the\x20auto-ignite\x20posture'};return{'kind':'signature_guard','edge':c,'guard':e['guard']};}export function buildForwardCallTemplate(a,b,c,d){return'onchain_operations\x20{\x20operation_type:\x20\x27progress\x27,\x20data:\x20{\x20object:\x20\x27'+a+'\x27,\x20'+('task:\x20\x27'+b+'\x27,\x20operate:\x20{\x20op:\x20\x27next\x27,\x20operation:\x20{\x20forward:\x20\x27'+c+'\x27,\x20')+('next_node_name:\x20\x27'+d+'\x27\x20}\x20}\x20}\x20}');}export function buildSubmissionEnvelopeTemplate(a,b,c){const d=b['map'](e=>{const f=e['identifier']===TASK_BINDING_SLOT&&c?c:'<'+(e['value_type']||'value')+'\x20—\x20see\x20suggestion>';return'{\x20identifier:\x20'+e['identifier']+',\x20value:\x20\x27'+f+'\x27,\x20value_type:\x20\x27'+e['value_type']+'\x27,\x20name:\x20\x27\x27,\x20b_submission:\x20true\x20}';});return'{\x20type:\x20\x27submission\x27,\x20guard:\x20[{\x20object:\x20\x27'+a+'\x27,\x20impack:\x20true\x20}],\x20'+('submission:\x20[{\x20guard:\x20\x27'+a+'\x27,\x20submission:\x20['+d['join'](',\x20')+']\x20}]\x20}\x20—\x20')+'attach\x20as\x20the\x20TOP-LEVEL\x20submission\x20field\x20of\x20the\x20SAME\x20tool\x20call\x20(a\x20sibling\x20of\x20data\x20and\x20env)';}export function buildEntryEdgePendingRecipe(a){const {machineAddr:b,progressAddr:c,orderAddr:d,edges:e,reports:f,reason:g}=a,h=[];h['push']('ENTRY\x20EDGE\x20PENDING\x20—\x20the\x20order\x20is\x20funded\x20but\x20the\x20workflow\x20has\x20NOT\x20started\x20'+'(chain\x20truth:\x20a\x20fresh\x20Progress\x20sits\x20at\x20the\x20reserved\x20empty\x20entry\x20node;\x20the\x20chain\x20only\x20asserts\x20'+'the\x20entry\x20edge\x20EXISTS\x20at\x20publish\x20(E_NO_ENTRY_EDGE)\x20and\x20service\x20order\x20new\x20does\x20NOT\x20fire\x20it\x20—\x20'+'every\x20order\x20needs\x20ONE\x20explicit\x20entry-ignition\x20transaction).'),h['push']('\x20\x20•\x20entry\x20forward(s):\x20'+e['map'](k=>'\x22'+k['forward']['name']+'\x22\x20→\x20\x22'+k['target']+'\x22'+((k['forward']['guard']?'\x20[guarded]':'\x20[unguarded]')+'\x20(threshold\x20'+k['threshold']+')'))['join'](';\x20')+'.');for(const k of f){if(!k['guard'])continue;if(k['slots']['length']===0x0)h['push']('\x20\x20•\x20guard\x20'+k['guard']+(k['guard_name']?'\x20(\x22'+k['guard_name']+'\x22)':'')+':\x20signature-only\x20'+'(no\x20submission\x20slots).');else{h['push']('\x20\x20•\x20guard\x20'+k['guard']+(k['guard_name']?'\x20(\x22'+k['guard_name']+'\x22)':'')+'\x20requires\x20'+(k['slots']['length']+'\x20submission\x20slot(s):'));for(const l of k['slots']){h['push']('\x20\x20\x20\x20\x20\x20-\x20slot\x20'+l['identifier']+':\x20value_type='+(l['value_type']||'?')+((l['name']?'\x20(name:\x20\x22'+l['name']+'\x22)':'')+'\x20—\x20'+l['suggestion'])+(''+(l['autofillable']?'\x20[auto-fillable:\x20this\x20order\x27s\x20address]':'')));}}k['time_anchors']['length']>0x0&&h['push']('\x20\x20•\x20MC-ENTRYEDGE-01:\x20this\x20entry\x20guard\x20queries\x20progress\x20HISTORY\x20time\x20(anchor\x20node(s):\x20'+(k['time_anchors']['map'](m=>'\x22'+m+'\x22')['join'](',\x20')+').\x20The\x20anchor\x20counts\x20FROM\x20entry\x20ignition\x20—\x20')+'while\x20the\x20entry\x20is\x20unfired\x20the\x20order\x20cannot\x20advance\x20and\x20the\x20anchor\x20query\x20aborts\x20(the\x20'+'Progress\x20history\x20has\x20no\x20records).\x20Fire\x20the\x20entry\x20FIRST,\x20then\x20evaluate\x20the\x20window.');}const i=e[0x0];h['push']('\x20\x20•\x20why\x20not\x20auto-fired:\x20'+g+'.');if(e['length']===0x1&&i['forward']['guard']){const m=f['find'](n=>n['edge']===i);m?.['guard']&&m['slots']['length']>0x0?(h['push']('\x20\x20•\x20READY-TO-RUN\x20(one\x20call):\x20'+buildForwardCallTemplate(c,d,i['forward']['name'],i['target'])),h['push']('\x20\x20\x20\x20...\x20with\x20submission:\x20'+buildSubmissionEnvelopeTemplate(m['guard'],m['slots'],d))):h['push']('\x20\x20•\x20READY-TO-RUN\x20(one\x20call):\x20'+buildForwardCallTemplate(c,d,i['forward']['name'],i['target']));}else h['push']('\x20\x20•\x20FORWARD\x20CALL\x20TEMPLATE:\x20'+buildForwardCallTemplate(c,d,'<entry\x20forward>','<target>'));h['push']('\x20\x20•\x20Skipping\x20ignition\x20=\x20the\x20order\x20stalls\x20at\x20the\x20empty\x20entry\x20state\x20—\x20invisible\x20to\x20workflow\x20'+'guidance,\x20un-advanceable,\x20and\x20any\x20history-time\x20anchor\x20in\x20the\x20workflow\x20aborts.');const j={'status':'pending','machine':b,'progress':c,'order':d,'forward':e[0x0]?.['forward']['name']??'','target_node':e[0x0]?.['target']??'',...e[0x0]?.['threshold']!==undefined?{'threshold':e[0x0]['threshold']}:{},...f[0x0]?.['guard']?{'guard':f[0x0]['guard']}:{},'guard_slots':f['flatMap'](n=>n['slots']),...f['some'](n=>n['time_anchors']['length']>0x0)?{'time_anchors':f['flatMap'](n=>n['time_anchors'])}:{},'forward_call_template':e['length']===0x1?buildForwardCallTemplate(c,d,e[0x0]['forward']['name'],e[0x0]['target']):buildForwardCallTemplate(c,d,'<entry\x20forward>','<target>'),...e['length']===0x1&&f[0x0]?.['guard']&&f[0x0]['slots']['length']>0x0?{'submission_envelope_template':buildSubmissionEnvelopeTemplate(f[0x0]['guard'],f[0x0]['slots'],d)}:{},'note':g};return{'note':h['join']('\x0a'),'structured':j};}async function toAddr(a){if(typeof a!=='string'||a['length']===0x0)return undefined;if(a['startsWith']('0x'))return a;try{const {LocalMark:b}=await import('@wowok/wowok');return await b['Instance']()['get_address'](a)??undefined;}catch{return undefined;}}export async function resolveOrderEntryContext(a,b){const c=await toAddr(a);if(!c)return undefined;const d=await batchQueryObjectsByIds([c],b,!![]),e=d?.[0x0]?.['data']??d?.[0x0],f=typeof e?.['progress']==='string'?e['progress']:undefined;if(!f)return undefined;const g=await batchQueryObjectsByIds([f],b,!![]),h=g?.[0x0]?.['data']??g?.[0x0];if(typeof h?.['current']==='string'&&h['current']!=='')return undefined;const i=typeof h?.['machine']==='string'?h['machine']:undefined;if(!i)return undefined;const j=await fetchMachineNodes(i,b,![]),k=findEntryEdges(j);if(k['length']===0x0)return undefined;return{'orderAddr':c,'progressAddr':f,'machineAddr':i,'edges':k,'nodes':j};}export async function readEntryGuardReports(a,b,c){const d=[];for(const e of a){const f=e['forward']['guard'];if(!f){d['push']({'edge':e,'slots':[],'time_anchors':[]});continue;}const g=await loadGuardJsonFromChain(f,c)['catch'](()=>undefined);if(!g){d['push']({'edge':e,'guard':await toAddr(f),'slots':[],'time_anchors':[],'unreadable':!![]});continue;}const h=entryGuardSlotRequirements(g['json'],b),i=guardTimeAnchors(g['json']['root']),j=g['json']['rely'],k=Array['isArray'](j?.['guards'])&&j['guards']['length']>0x0,l={'edge':e,'guard':g['guard'],...g['name']?{'guard_name':g['name']}:{},'slots':h,'time_anchors':i,...k?{'has_rely':!![]}:{}};d['push'](l);}return d;}export async function fireEntryEdgeForward(a,b){try{const c=new CallProgress({'object':b['progressAddr'],'task':b['orderAddr'],'operate':{'op':'next','operation':{'forward':a['edge']['forward']['name'],'next_node_name':a['edge']['target']}}}),d=a['kind']==='signature_guard'?await c['call_with_submission'](b['env'],{'type':'submission','guard':[{'object':a['guard'],'impack':!![]}],'submission':[]}):await c['call'](b['env']),f=!!d&&typeof d==='object'&&d?.['effects']?.['status']?.['status']==='success';if(f)return{'ok':!![],'digest':d?.['digest']};const g=d&&typeof d==='object'?String(d?.['effects']?.['status']?.['error']??d?.['error']??'unknown\x20rejection'):'unknown\x20rejection';return{'ok':![],'error':g};}catch(h){return{'ok':![],'error':String(h?.['message']??h)};}}export async function entryEdgeStepAfterOrderNew(a,b){if(b?.['dry_run']===!![])return undefined;try{const c=await resolveOrderEntryContext(a,b?.['network']);if(!c)return undefined;const d=await readEntryGuardReports(c['edges'],c['orderAddr'],b?.['network']),f=classifyEntryFire(c['edges'],d);if(f['kind']==='recipe')return buildEntryEdgePendingRecipe({'machineAddr':c['machineAddr'],'progressAddr':c['progressAddr'],'orderAddr':c['orderAddr'],'edges':c['edges'],'reports':d,'reason':f['reason']});const g=await fireEntryEdgeForward(f,{'progressAddr':c['progressAddr'],'orderAddr':c['orderAddr'],'env':b});if(!g)return undefined;const h=f['kind'],i=f['kind']==='signature_guard'?'\x20(signature-only\x20guard\x20'+f['guard']+'\x20evaluated\x20STRICTLY\x20via\x20an\x20ephemeral\x20in-PTB\x20passport\x20—\x20'+'a\x20false\x20result\x20would\x20have\x20aborted\x20the\x20transaction,\x20nothing\x20was\x20bypassed)':'';if(g['ok']){const k={'status':'fired','fired_via':h,'machine':c['machineAddr'],'progress':c['progressAddr'],'order':c['orderAddr'],'forward':f['edge']['forward']['name'],'target_node':f['edge']['target'],'threshold':f['edge']['threshold'],...f['kind']==='signature_guard'?{'guard':f['guard']}:{},'guard_slots':[],'forward_call_template':buildForwardCallTemplate(c['progressAddr'],c['orderAddr'],f['edge']['forward']['name'],f['edge']['target']),'note':'fired\x20in-session\x20('+h+')'};return{'note':'ENTRY\x20EDGE\x20FIRED'+(h==='signature_guard'?'\x20(signature-only\x20guard)':'')+':\x20'+('\x22'+f['edge']['forward']['name']+'\x22\x20→\x20\x22'+f['edge']['target']+'\x22'+i+'\x20—\x20digest\x20'+(g['digest']??'n/a')+'.\x20')+'The\x20workflow\x20has\x20STARTED:\x20the\x20order\x20left\x20the\x20empty\x20entry\x20node,\x20counterparties\x20can\x20see\x20and\x20'+'act\x20on\x20it,\x20and\x20history-time\x20anchors\x20now\x20have\x20their\x20ignition\x20instant.','structured':k};}const j=buildEntryEdgePendingRecipe({'machineAddr':c['machineAddr'],'progressAddr':c['progressAddr'],'orderAddr':c['orderAddr'],'edges':c['edges'],'reports':d,'reason':'the\x20in-session\x20ignition\x20attempt\x20was\x20REJECTED:\x20'+String(g['error']??'')['slice'](0x0,0x12c)});return j;}catch(l){return{'note':'ENTRY\x20EDGE\x20PENDING\x20(probe\x20failed:\x20'+String(l?.['message']??l)['slice'](0x0,0xc8)+'):\x20the\x20order\x20may\x20'+'still\x20sit\x20at\x20the\x20empty\x20entry\x20state\x20—\x20check\x20the\x20Progress\x27s\x20current\x20node\x20and\x20fire\x20the\x20entry\x20'+'forward\x20if\x20the\x20workflow\x20has\x20not\x20started\x20(query\x20the\x20order,\x20then\x20progress\x20operate\x20\x27next\x27).','structured':{'status':'pending','machine':'','progress':'','order':'','forward':'','target_node':'','guard_slots':[],'forward_call_template':'','note':String(l?.['message']??l)['slice'](0x0,0xc8)}};}}export function entryEdgeTimeAnchorAdvisory(a){const b=a['filter'](d=>d['time_anchors']['length']>0x0);if(b['length']===0x0)return undefined;const c=b['map'](d=>'\x22'+d['edge']['forward']['name']+'\x22\x20→\x20\x22'+d['edge']['target']+'\x22'+(''+(d['guard']?'\x20(guard\x20'+d['guard']+(d['guard_name']?'\x20\x22'+d['guard_name']+'\x22':'')+')':''))+('\x20anchored\x20at\x20'+d['time_anchors']['map'](e=>'\x22'+e+'\x22')['join'](',\x20')));return'MC-ENTRYEDGE-01\x20(entry-edge\x20time\x20anchor):\x20an\x20ENTRY-edge\x20guard\x20queries\x20progress\x20HISTORY\x20time\x20—\x20'+(c['join'](';\x20')+'.\x20Chain\x20truth\x20(machine.move):\x20a\x20fresh\x20Progress\x20starts\x20at\x20the\x20reserved\x20empty\x20entry\x20')+'node\x20and\x20publish\x20only\x20asserts\x20the\x20entry\x20edge\x20EXISTS\x20(E_NO_ENTRY_EDGE)\x20—\x20time\x20anchors\x20count\x20FROM\x20entry\x20'+'ignition.\x20An\x20order\x20whose\x20entry\x20forward\x20was\x20never\x20fired\x20cannot\x20advance,\x20and\x20evaluating\x20its\x20anchor\x20'+'query\x20aborts\x20(the\x20Progress\x20history\x20has\x20no\x20records\x20to\x20read).\x20Every\x20order\x20needs\x20an\x20explicit\x20'+'entry-ignition\x20transaction\x20(service\x20order\x20new\x20does\x20NOT\x20fire\x20the\x20entry;\x20this\x20MCP\x20fires\x20open\x20/\x20'+'signature-only\x20entries\x20automatically\x20after\x20order\x20new\x20and\x20otherwise\x20returns\x20an\x20ENTRY\x20EDGE\x20PENDING\x20'+'recipe)\x20—\x20make\x20sure\x20the\x20operator\x20flow\x20ignites\x20entries\x20BEFORE\x20any\x20window\x20on\x20these\x20edges\x20matters.';}export async function entryEdgePublishAdvisory(a,b){try{const c=await fetchMachineNodes(a,b,!![]),d=findEntryEdges(c);if(d['length']===0x0)return undefined;const e=await readEntryGuardReports(d,'',b);return entryEdgeTimeAnchorAdvisory(e);}catch{return undefined;}}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface EscrowDeficitFace {
|
|
2
|
+
escrow_deficit: string;
|
|
3
|
+
order_amount: string;
|
|
4
|
+
escrow_balance: string;
|
|
5
|
+
allocation: string;
|
|
6
|
+
cause?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const ESCROW_DEFICIT_CAUSE: string;
|
|
9
|
+
export declare function deriveEscrowDeficit(orderAmount: unknown, escrowBalance: unknown): bigint | undefined;
|
|
10
|
+
export declare function attachEscrowDeficit(orderData: unknown, network: string | undefined, noCache?: boolean): Promise<EscrowDeficitFace | undefined>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{batchQueryObjectsByIds}from'../../graph/onchain/sdk-batch.js';export const ESCROW_DEFICIT_CAUSE='escrow_balance\x20exceeds\x20the\x20Order\x27s\x20booked\x20amount\x20(raw\x20units).\x20Typical\x20cause:\x20'+'pre-sale\x20/\x20deposit-freeze\x20semantics\x20—\x20order.amount\x20records\x20only\x20the\x20deposit\x20frozen\x20at\x20'+'creation\x20while\x20the\x20escrow\x20Allocation\x20holds\x20the\x20full\x20price,\x20and\x20later\x20tail\x20payments\x20are\x20'+'NOT\x20written\x20back\x20into\x20order.amount.\x20Do\x20NOT\x20derive\x20indemnity\x20caps,\x20coverage\x20or\x20loss\x20'+'figures\x20from\x20order_amount\x20alone:\x20the\x20escrow\x27s\x20real\x20exposure\x20is\x20escrow_balance.';function asBigIntOrUndefined(a){try{if(typeof a==='bigint')return a;if(typeof a==='number'&&Number['isFinite'](a))return BigInt(Math['trunc'](a));if(typeof a==='string'&&a['trim']()!=='')return BigInt(a);}catch{}return undefined;}export function deriveEscrowDeficit(a,b){const c=asBigIntOrUndefined(a),d=asBigIntOrUndefined(b);if(c===undefined||d===undefined)return undefined;if(c<0x0n||d<0x0n)return undefined;if(c===0x0n)return undefined;if(d<c)return undefined;return d-c;}function pickAddr(a){return a?.['object']??a?.['data']?.['object']??a?.['id'];}function pickData(a){return a?.['data']??a;}export async function attachEscrowDeficit(a,b,c){try{const d=a??{},e=typeof d['allocation']==='string'&&d['allocation']!==''?d['allocation']:undefined;if(e===undefined)return undefined;if(deriveEscrowDeficitPrecheck(d['amount']))return undefined;const f=await batchQueryObjectsByIds([e],b,c),g=f['find'](m=>pickAddr(m)!==undefined),h=pickData(g);if(!h)return undefined;const i=pickAddr(g)??e,j=deriveEscrowDeficit(d['amount'],h?.['balance']);if(j===undefined)return undefined;const k=asBigIntOrUndefined(d['amount']),l=asBigIntOrUndefined(h?.['balance']);return{'escrow_deficit':j['toString'](),'order_amount':k['toString'](),'escrow_balance':l['toString'](),'allocation':i??e,...j>0x0n?{'cause':ESCROW_DEFICIT_CAUSE}:{}};}catch{return undefined;}}function deriveEscrowDeficitPrecheck(a){const b=asBigIntOrUndefined(a);return b===undefined||b<=0x0n;}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{strictParse}from'../../schema/index.js';import{EvaluationOperationInputSchema}from'../../schema/evaluation/index.js';import{evaluateArbGame}from'../../evaluation/arbitration-game.js';import{evaluateNodeGame}from'../../evaluation/node-game.js';import{evaluatePathReasoning}from'../../evaluation/path-reasoning.js';import{assessEvidenceReview,reviewEvidenceList}from'../../knowledge/evidence-review.js';import{expandSearchScope,inferSensitivity,rankByLocation}from'../../evaluation/location-match.js';import{ArbStatus,discoveryDataSource,LocalMark,query_objects}from'@wowok/wowok';import{enumerateServices,enumerateDemands,enumerateArbs,indexErrorCode,indexUrlFor,matchServicesViaIndex,matchDemandsViaIndex,withDegradedReasons}from'../../knowledge/jsonrpc-enum.js';import{KNOWN_CAPABILITIES}from'../../data/api/match.js';import{fetchObjectLinkerCore,batchQueryObjectsByIds,batchQueryTableItems}from'../../graph/onchain/sdk-batch.js';import{summarizeCapabilityGaps}from'../../evaluation/gap.js';import{resolveNetwork}from'./network.js';import{composeServicesForDemand}from'../../evaluation/composer.js';import{generateCompositionPlan,PILOT_CHAINS}from'../../composition/generate.js';import{matchDemandToServices,matchServiceToDemands}from'../../evaluation/builtins/demand-match.js';import{nextOperationForServiceMatch,nextOperationForDemandMatchLive,nextOperationForServiceOrder}from'../../evaluation/match-operation.js';import{extractDemandCapability,enrichFromDescription}from'../../evaluation/extract.js';import{assessArbitration}from'../../evaluation/builtins/arbitration-score.js';import{resolveCategoryMatchRules,toSoftWeightInjection,applyHardConstraints}from'../../evaluation/category-match-rules.js';import{matchGradeFromScore}from'../../evaluation/standards.js';import{computeMarketMetrics,computeOrderFlow}from'../../knowledge/market-metrics.js';import{workflowSubgraphFromRows}from'../../graph/onchain/index.js';import{assessAntiCheat}from'../../knowledge/anti-cheat.js';import{computeJourneyFunnel,attributeReferrals,buildCustomerRelationships}from'../../knowledge/market-operations.js';import{suggestPricing}from'../../knowledge/dynamic-pricing.js';import{runAccountEventWatchers}from'../../customer/account-events.js';import{registerBuiltinEvaluations}from'../../evaluation/builtins/index.js';import{getEffectivePersona,mergeInjections}from'../../persona/index.js';import{buildUserInjection}from'../../evaluation/injection.js';import{applyDemandPolicyGates,applyPolicyGates,applyPolicyRerank,buildPolicyEffect,policyToInjection,rerankDemandMatches}from'../../evaluation/match-policy.js';import{resolveEffectiveMatchPolicy}from'../../evaluation/match-policy-resolver.js';registerBuiltinEvaluations();function arbCaseFromObject(b){const c=typeof b['time']==='number'?b['time']:Number(b['time']??0x0);return{'status':b['status'],'time':Number['isFinite'](c)?c:undefined,'resolved_time':typeof b['indemnity']?.['time']==='number'?b['indemnity']['time']:b['compensation_time']??undefined,'indemnity_amount':b['indemnity']?.['amount'],'objected':b['status']===ArbStatus['Objectionable']||b['objection']!=null&&b['objection']['length']>0x0};}async function arbCasesWithRoles(a,b){const c=a['map'](arbCaseFromObject),d=Array['from'](new Set(a['map'](j=>j['order'])['filter'](Boolean))),e=new Map(),f=[];if(d['length']>0x0){const j=await batchQueryObjectsByIds(d,b);for(const k of j){const l=k;if(!l?.['object'])continue;e['set'](l['object'],l);if(l['service'])f['push'](l['service']);}}const g=new Map(),h=Array['from'](new Set(f));if(h['length']>0x0){const m=await batchQueryObjectsByIds(h,b);for(const n of m){const p=n;if(p?.['object'])g['set'](p['object'],p);}}for(let q=0x0;q<a['length'];q++){const r=e['get'](a[q]['order']);if(!r)continue;c[q]['customer']=r['builder']||undefined;const t=g['get'](r['service']);if(t)c[q]['merchant']=t['permission']||undefined;}return c;}function capabilityFromInput(a){return{'id':a['id'],'kind':a['kind'],'owner':a['owner']??'','industry':a['industry'],'industry_confidence':a['industry_confidence']??0x0,'region':a['region'],'price_min':a['price_min']!==undefined?BigInt(a['price_min']):undefined,'price_max':a['price_max']!==undefined?BigInt(a['price_max']):undefined,'token_type':a['token_type']??'','ticket_size':a['ticket_size']??'medium','trust_score':a['trust_score']??0x32,'reputation_like_ratio':a['reputation_like_ratio']??0x1,'arbitration_independent':a['arbitration_independent']??![],'merchant_history_count':a['merchant_history_count']??0x0,'capabilities':a['capabilities'],'tags':a['tags']??[],'keywords':a['keywords']??[]};}async function resolveInjection(a,b){return mergeInjections(await buildUserInjection(a),b);}function serviceSummaryToExtract(a){const b=a['json']??{},c=f=>typeof f==='string'?f:undefined,d=f=>typeof f==='string'?f:null,e=Array['isArray'](b['sales'])?b['sales']['map'](f=>{const g=f?.['fields']??f;return{'name':typeof g?.['name']==='string'?g['name']:undefined,'price':typeof g?.['price']==='string'?g['price']:g?.['price']!=null?String(g['price']):'0','wip_hash':typeof g?.['wip_hash']==='string'?g['wip_hash']:undefined};}):[];return{'object':a['object'],'description':c(b['description'])??'','location':a['location']??c(b['location'])??'','sales':e,'arbitrations':Array['isArray'](b['arbitrations'])?b['arbitrations']['map'](String):[],'compensation_fund':c(b['compensation_fund']),'buy_guard':d(b['buy_guard']),'machine':d(b['machine']),'um':d(b['um']),'bPublished':b['bPublished']===!![],'bPaused':b['bPaused']===!![],'owner':c(b['owner'])};}function policyNeedsOwner(a){if(!a)return![];return Boolean(a['gates']?.['some'](b=>b['dim']==='owner')||a['excludes']?.['some'](b=>b['dim']==='blacklist'&&(b['owners']?.['length']??0x0)>0x0));}async function recallDemandsHybrid(a,b,c){const d=()=>enumerateDemands(a,{'max_objects':b['max_objects'],'no_cache':b['no_cache']}),e=async h=>({'answer':withDegradedReasons(await d(),['MATCH_INDEX_FALLBACK',...h]),'matchRoute':'legacy_enumeration'}),f=!policyNeedsOwner(c),g=discoveryDataSource();if(!f||g==='legacy'||!indexUrlFor(a))return{'answer':await d(),'matchRoute':'legacy_enumeration'};try{const h=await matchDemandsViaIndex(a,{'location':b['location'],'industry':b['industry']&&b['industry']!=='general'?b['industry']:undefined,'limit':Math['min'](0x64,b['max_objects']??0x64),'recallLimit':Math['min'](0x3e8,Math['max'](0xc8,b['max_objects']??0xc8))});if(g==='auto'&&h['total_enumerated']===0x0)return await e(['INDEX_KIND_EMPTY']);return{'answer':h,'matchRoute':'remote_index'};}catch(i){if(g==='remote')throw i;return await e([indexErrorCode(i)]);}}export async function handleEvaluationOperation(a){const b=strictParse(EvaluationOperationInputSchema,a,'evaluation_operation\x20input');let c;switch(b['action']){case'arb_game':{const e=b['account']?await getEffectivePersona(b['account']):null,f=b['appetite']??e?.['layer']['preferences']?.['risk_appetite'],g=b['requirements']??e?.['layer']['requirements'];c={'action':'arb_game',...evaluateArbGame(b['status'],b['perspective'],{'risk_appetite':f,'requirements':g})};break;}case'node_game':{const h=b['account']?await getEffectivePersona(b['account']):null,i=b['appetite']??h?.['layer']['preferences']?.['risk_appetite'],j=b['requirements']??h?.['layer']['requirements'];c={'action':'node_game',...evaluateNodeGame({'current_node':b['current_node'],'perspective':b['perspective'],'appetite':i,'requirements':j,'threshold':b['threshold'],'allocation':b['allocation'],'order_amount':b['order_amount'],'compensation_fund':b['compensation_fund'],'operable':b['operable'],'waiting_on':b['waiting_on']??[]})};break;}case'capability_gap':{c={'action':'capability_gap','report':summarizeCapabilityGaps(capabilityFromInput(b['demand']),capabilityFromInput(b['service']))};break;}case'compose_service':{c={'action':'compose_service','plan':composeServicesForDemand(capabilityFromInput(b['demand']),b['services']['map'](capabilityFromInput))};break;}case'compose_generation':{const k=generateCompositionPlan({'intent':b['intent'],...b['selections']!==undefined?{'selections':b['selections']}:{},...b['supply_chain']!==undefined?{'supplyChain':b['supply_chain']}:{},...b['inputs']!==undefined?{'inputs':b['inputs']}:{},...b['name_base']!==undefined?{'nameBase':b['name_base']}:{},...b['preferred_chain']!==undefined?{'preferredChain':b['preferred_chain']}:{}});c={'action':'compose_generation','feasibility':k['feasibility'],...k['chain']!==undefined?{'chain':k['chain']}:{},...k['carrier']!==undefined?{'carrier':k['carrier']}:{},'pilot_chains':PILOT_CHAINS['map'](l=>l['chain']),'adopted':k['adopted']['map'](l=>({'id':l['id'],'via':l['via'],...l['evidence']!==undefined?{'matched_signals':l['evidence']['hits'],'signals_tested':l['evidence']['tested']}:{}})),'blockers':k['blockers'],...k['plan']!==undefined?{'plan':{...k['plan'],'catalog_version':k['templates_version']}}:{},...k['audit']!==undefined?{'audit':{'blocking':k['audit']['blocking'],'findings':k['audit']['findings']['map'](l=>({'level':l['level'],'rule_id':l['rule_id'],'title':l['title']}))}}:{},'templates_version':k['templates_version'],...k['supplyChain']!==undefined?{'supply_chain':k['supplyChain']}:{}};break;}case'demand_match':{let l=null,m=b['presenter_history'];if(b['demand_object']){const o=b['demand_object']['startsWith']('0x')?b['demand_object']:await LocalMark['Instance']()['get_address'](b['demand_object'])['catch'](()=>undefined)??undefined;if(o)try{const p=await resolveNetwork(undefined),r=await query_objects({'objects':[o],'network':p,'no_cache':!![]}),s=r?.['objects']?.[0x0],t=s?.['data']??s;let u=typeof t?.['presenters_count']==='number'?t['presenters_count']:null;if(u===null)try{const {items:v}=await batchQueryTableItems(o,{'network':p,'noCache':!![],'maxItems':0xc8}),w=v['map'](x=>x['object'])['filter'](x=>x?.['type']==='TableItem_DemandPresenter');u=w['length'],!m&&w['length']>0x0&&(m=w['map'](x=>({'demand_id':b['demand_object'],'presenter':typeof x?.['address']==='string'?x['address']:undefined,'presenter_service':typeof x?.['service']==='string'?x['service']:undefined,'acceptance_score':typeof x?.['acceptance_score']==='number'?x['acceptance_score']:null,'feedback_time':typeof x?.['feedback_time']==='number'?x['feedback_time']:undefined})));}catch{}l={'object':b['demand_object'],'presenters_count':u};}catch{l={'object':b['demand_object'],'presenters_count':null};}else l={'object':b['demand_object'],'presenters_count':null};}const n=await matchDemandToServices(capabilityFromInput(b['demand_cap']),b['services'],await resolveInjection(b['account'],b['injection']),0x5,m);c={'action':'demand_match','matches':n['map'](x=>({'service':x['service'],'result':x['result'],'grade':matchGradeFromScore(x['result']['total']),'next':nextOperationForDemandMatchLive(x['service'],l),'order':nextOperationForServiceOrder(x['service'])}))};break;}case'service_match':{const x=await matchServiceToDemands(capabilityFromInput(b['service_cap']),b['demands'],await resolveInjection(b['account'],b['injection']),0x5,b['presenter_history']);c={'action':'service_match','matches':x['map'](y=>({'demand':y['demand'],'result':y['result'],'next':nextOperationForServiceMatch(y['demand'],null)}))};break;}case'path_reasoning':{const y=b['account']?await getEffectivePersona(b['account']):null,z=b['appetite']??y?.['layer']['preferences']?.['risk_appetite'],A=b['requirements']??y?.['layer']['requirements'];c={'action':'path_reasoning',...evaluatePathReasoning({'current_node':b['current_node'],'perspective':b['perspective'],'workflow':workflowSubgraphFromRows(b['machine_nodes']),'node_annotations':b['node_annotations'],'appetite':z,'requirements':A,'order_amount':b['order_amount'],'max_depth':b['max_depth']})};break;}case'evidence_review':{b['items']&&b['items']['length']>0x0?c={'action':'evidence_review','list':reviewEvidenceList(b['items'])}:c={'action':'evidence_review','review':assessEvidenceReview({'kind':b['kind'],'hash_committed':b['hash_committed'],'digital_check_passed':b['digital_check_passed'],'contradiction':b['contradiction']})};break;}case'discover_services':{const B=!b['sensitivity']?inferSensitivity(b['description']??''):null,C=b['sensitivity']??B['sensitivity'],D=B?.['signals']??[],E=await resolveNetwork(b['context_network']),F={'raw':b['location'],...b['region']??{}},G=expandSearchScope(C,F),H=await enumerateServices(E,{'max_objects':b['max_objects'],'no_cache':b['no_cache'],'location_any':G['search_terms'],'coin_type':b['coin_type'],'name_contains':b['name_contains']}),I=rankByLocation(C,F,H['services']['map'](J=>({'id':J['object'],'name':J['name'],'location':J['location']})));c={'action':'discover_services','sensitivity':C,'inference_signals':D,'services':I['map'](J=>{const K=H['services']['find'](L=>L['object']===J['id']);return{'object':J['id'],'name':K?.['name'],'location':K?.['location'],'relation':J['relation'],'satisfied':J['satisfied'],'score':J['score'],'reason':J['reason']};}),'total_enumerated':H['total_enumerated'],'has_more':H['has_more'],'coverage':H['coverage'],'scope_advice':{'search_terms':G['search_terms'],'ai_enrichment_note':G['ai_enrichment_note']}};break;}case'discover_demands':{const J=await resolveNetwork(b['context_network']),K=await resolveEffectiveMatchPolicy(b['match_policy'],'supply_to_demand',b['account']),L=K['policy'],{answer:M,matchRoute:N}=await recallDemandsHybrid(J,{'max_objects':b['max_objects'],'no_cache':b['no_cache'],'location':b['location']},L),O=b['location']?.['toLowerCase'](),P=M['demands']['filter'](S=>!O||(S['location']??'')['toLowerCase']()['includes'](O))['map'](S=>({'object':S['object'],'description':S['description']??'','location':S['location']??'','presenters_count':S['presenters_count']??0x0,'permission':S['permission']??''}));let Q=P,R;if(L){const S=M['demands']['filter'](X=>!O||(X['location']??'')['toLowerCase']()['includes'](O))['map'](X=>({'object':X['object'],'description':X['description']??'','location':X['location']??'','rewards':X['rewards'],'um':X['um']??null,'owner':typeof X['owner']==='string'?X['owner']:undefined,'guards':X['guards'],'presenters_count':X['presenters_count']})),T=applyDemandPolicyGates(L,S),U=new Set(T['passed']['map'](X=>X['object']));Q=P['filter'](X=>U['has'](X['object']));const V=L['output']?.['top_n'];if(V!==undefined)Q=Q['slice'](0x0,V);const W=[];Object['keys'](L['weights']??{})['length']>0x0&&W['push']('weights\x20not\x20applicable\x20in\x20discover_demands\x20(no\x20private\x20scoring\x20at\x20this\x20stage;\x20use\x20demand_present)'),L['rerank']!==undefined&&W['push']('rerank\x20not\x20applicable\x20in\x20discover_demands\x20(no\x20private\x20scoring\x20at\x20this\x20stage;\x20use\x20demand_present)'),R=buildPolicyEffect(L,T,{'applied':{},'ignored':[]},{'order':N==='remote_index'?'server\x20public-baseline\x20order\x20(discover_demands\x20performs\x20no\x20private\x20scoring)':'enumeration\x20order\x20(discover_demands\x20performs\x20no\x20private\x20scoring)','diversity_applied':![],'deferred':0x0,'ignored':[]},W,K['source']);}c={'action':'discover_demands','demands':Q,'total_enumerated':M['total_enumerated'],'has_more':M['has_more'],'match_route':N,'coverage':M['coverage'],...R?{'policy_effect':R}:{}};break;}case'demand_present':{const X=await resolveNetwork(b['context_network']),Y=await resolveEffectiveMatchPolicy(b['match_policy'],'supply_to_demand',b['account']),Z=Y['policy'],{answer:a0,matchRoute:a1}=await recallDemandsHybrid(X,{'max_objects':b['max_objects'],'no_cache':b['no_cache'],'location':b['location'],'industry':b['service_cap']['industry']},Z),a2=b['location']?.['toLowerCase'](),a3=a0['demands']['filter'](ad=>!a2||(ad['location']??'')['toLowerCase']()['includes'](a2)),a4=new Map(a3['map'](ad=>[ad['object'],(ad['guards']?.['length']??0x0)>0x0])),a5=a3['map'](ad=>({'object':ad['object'],'description':ad['description']??'','location':ad['location']??'','rewards':ad['rewards']??[],'um':ad['um']??null,'owner':typeof ad['owner']==='string'?ad['owner']:undefined})),a6=a3['map'](ad=>({'object':ad['object'],'description':ad['description']??'','location':ad['location']??'','rewards':ad['rewards'],'um':ad['um']??null,'owner':typeof ad['owner']==='string'?ad['owner']:undefined,'guards':ad['guards'],'presenters_count':ad['presenters_count']}));let a7=await resolveInjection(b['account'],b['injection']),a8=a5,a9,aa;if(Z){const ad=applyDemandPolicyGates(Z,a6),ae=new Set(ad['passed']['map'](ag=>ag['object']));a8=a5['filter'](ag=>ae['has'](ag['object']));const af=policyToInjection(Z);a7=mergeInjections(a7,af['injection']),aa={'gateOutcome':ad,'weights':af};}const ab=await matchServiceToDemands(capabilityFromInput(b['service_cap']),a8,a7,Z?a8['length']:b['limit']??0x5);let ac=ab['map'](ag=>{const ah=a4['get'](ag['demand']['object'])??![];return{'demand':ag['demand'],'result':ag['result'],'next':nextOperationForServiceMatch(ag['demand'],ah)};});if(Z&&aa){const ag=rerankDemandMatches(ac,Z);ac=ag['matches'],a9=buildPolicyEffect(Z,aa['gateOutcome'],aa['weights'],ag,[],Y['source']);}c={'action':'demand_present','matches':ac,'total_enumerated':a0['total_enumerated'],'has_more':a0['has_more'],'match_route':a1,'coverage':a0['coverage'],...a9?{'policy_effect':a9}:{}};break;}case'market_metrics':{const ah=await resolveNetwork(b['context_network']),ai=await computeMarketMetrics(ah,b['no_cache']),aj=await computeOrderFlow(ah,{'noCache':b['no_cache'],'maxPages':b['limit']?Math['max'](0x1,Math['ceil'](b['limit']/0x32)):undefined});c={'action':'market_metrics',...ai,'order_flow':aj};break;}case'anti_cheat':{const ak=assessAntiCheat({'service':{'object':b['service']['object'],'arbitrations':b['service']['arbitrations'],'compensation_fund':b['service']['compensation_fund'],'machine':b['service']['machine'],'bPublished':b['service']['bPublished']},'orders':b['orders'],'reviews':b['reviews']});c={'action':'anti_cheat','signals':ak};break;}case'market_operations':{if(b['op']==='journey_funnel')c={'action':'market_operations','result':computeJourneyFunnel({'due_diligence':b['due_diligence']??0x0,'orders':b['orders']??0x0,'completed':b['completed']??0x0,'reviews':b['reviews']??0x0})};else{if(b['op']==='referral_attribution')c={'action':'market_operations','result':attributeReferrals(b['referral_orders']??[])};else{if(b['op']==='dynamic_pricing'){const al=b['market_signals'];if(!al)throw new Error('dynamic_pricing\x20op\x20requires\x20market_signals');c={'action':'market_operations','result':suggestPricing({'supplyCount':al['supplyCount'],'demandCount':al['demandCount'],'avgPrice':al['avgPrice'],'myPrice':al['myPrice'],'competitorPrices':al['competitorPrices'],'recentOrderCount':al['recentOrderCount'],'repeatCustomerRate':al['repeatCustomerRate']})};}else c={'action':'market_operations','result':buildCustomerRelationships(b['customer_orders']??[])};}}break;}case'match_discover':{const am=!b['sensitivity']?inferSensitivity(b['description']??''):null,an=b['sensitivity']??am['sensitivity'],ao=am?.['signals']??[],ap=await resolveNetwork(b['context_network']),aq={'raw':b['location'],...b['region']??{}},ar=expandSearchScope(an,aq),as=await resolveEffectiveMatchPolicy(b['match_policy'],'demand_to_supply',b['account']),at=as['policy'],au=(b['required_capabilities']??[])['filter'](aT=>KNOWN_CAPABILITIES['includes'](aT)),av=enrichFromDescription(b['description'])['industry'],aw=!b['coin_type']&&!b['name_contains'],ax=discoveryDataSource();let ay,az=new Map(),aA='legacy_enumeration';const aB=()=>enumerateServices(ap,{'max_objects':b['max_objects'],'no_cache':b['no_cache'],'location_any':ar['search_terms'],'coin_type':b['coin_type'],'name_contains':b['name_contains']});if(aw&&ax!=='legacy'&&indexUrlFor(ap))try{const aT=await matchServicesViaIndex(ap,{'q':b['description'],'location':b['location'],'budgetWei':b['budget'],'industry':av==='general'?undefined:av,'capabilities':au['length']>0x0?au:undefined,'limit':Math['min'](0x64,b['max_objects']??0x64),'recallLimit':Math['min'](0x3e8,Math['max'](0xc8,b['max_objects']??0xc8))});ay={'services':aT['candidates']['map'](aU=>({'object':aU['objectId'],'location':aU['publicFeatures']['location']??'','json':aU['payloadJson']??null})),'total_enumerated':aT['recall']['liveSet']??aT['recall']['gated'],'has_more':aT['truncated'],'coverage':aT['coverage']};if(ax==='auto'&&ay['total_enumerated']===0x0)throw Object['assign'](new Error('Remote\x20index\x20materializes\x20no\x20Service'),{'code':'INDEX_KIND_EMPTY'});az=new Map(aT['candidates']['map'](aU=>[aU['objectId'],aU])),aA='remote_index';}catch(aU){if(ax==='remote')throw aU;ay=withDegradedReasons(await aB(),['MATCH_INDEX_FALLBACK',indexErrorCode(aU)]);}else!aw?ay=withDegradedReasons(await aB(),['MATCH_FILTER_FALLBACK','coin_type/name_contains\x20are\x20legacy-route-only\x20—\x20remote\x20index\x20skipped;\x20recall\x20may\x20miss\x20indexed\x20supply']):ay=await aB();const aC=new Set(b['required_capabilities']??[]),aD=extractDemandCapability({'object':'intent','description':b['description'],'location':b['location'],'owner':b['account']},{'price_max':b['budget']!==undefined?BigInt(b['budget']):undefined,'capabilities':{'has_arbitration':aC['has']('has_arbitration'),'has_refund_path':aC['has']('has_refund_path'),'has_milestone_nodes':aC['has']('has_milestone_nodes'),'has_compensation_fund':aC['has']('has_compensation_fund'),'has_wip_verification':aC['has']('has_wip_verification'),'has_messenger':aC['has']('has_messenger'),'has_buy_guard':aC['has']('has_buy_guard'),'has_dynamic_pricing':aC['has']('has_dynamic_pricing'),'is_published':!![],'is_paused':![]}}),aE=rankByLocation(an,aq,ay['services']['map'](aV=>({'id':aV['object'],'name':aV['name'],'location':aV['location']}))),aF=aE['filter'](aV=>aV['satisfied']),aG=aF['length']===0x0,aH=aG?aE:aF,aI=ay['services']['filter'](aV=>aH['some'](aW=>aW['id']===aV['object']))['map'](serviceSummaryToExtract),aJ=resolveCategoryMatchRules(b['category']);let aK=aI;const aL=[];if(aJ){const aV=applyHardConstraints(aJ,aI);aK=aV['passed'];for(const aW of aV['dropped']){aL['push']({'object':aW['candidate']['object'],'reason':aW['constraint']['description']});}}let aM=await resolveInjection(b['account'],b['injection']);aJ&&(aM=mergeInjections(aM,toSoftWeightInjection(aJ)));let aN,aO;if(at){const aX=applyPolicyGates(at,aK,{'budgetWei':b['budget']!==undefined?BigInt(b['budget']):undefined});aK=aX['passed'];const aY=policyToInjection(at);aM=mergeInjections(aM,aY['injection']),aO={'gateOutcome':aX,'weights':aY};}const aP=await matchDemandToServices(aD,aK,aM,aK['length'],b['presenter_history']),aQ=new Map(aP['map'](aZ=>[aZ['service']['object'],aZ['result']])),aR=new Set(aK['map'](aZ=>aZ['object']));let aS=aH['filter'](aZ=>aR['has'](aZ['id']))['map'](aZ=>{const b0=ay['services']['find'](b2=>b2['object']===aZ['id']),b1=az['get'](aZ['id']);return{'service':serviceSummaryToExtract(b0),'location':{'relation':aZ['relation'],'satisfied':aZ['satisfied'],'score':aZ['score'],'reason':aZ['reason']},'result':aQ['get'](aZ['id']),'grade':matchGradeFromScore(aQ['get'](aZ['id'])['total']),...b1?{'server_match':{'policy_version':b1['serverEvaluation']['policyVersion'],'total':b1['serverEvaluation']['total'],'breakdown':b1['serverEvaluation']['breakdown'],'unknown_rules':b1['serverEvaluation']['unknownRules'],'red_flags':b1['serverEvaluation']['redFlags'],'channels':b1['channels'],'rrf':b1['rrf']}}:{}};});if(at&&aO){const aZ=applyPolicyRerank(aS,at);aS=aZ['matches'],aN=buildPolicyEffect(at,aO['gateOutcome'],aO['weights'],aZ,[],as['source']);}c={'action':'match_discover','sensitivity':an,'inference_signals':ao,'match_route':aA,'location_gate':{'passed':aF['length'],'failed':aE['length']-aF['length'],'fallback_used':aG,...aG?{'note':'NO\x20service\x20passed\x20the\x20location\x20gate\x20—\x20gate-failed\x20services\x20are\x20retained\x20as\x20'+'candidates\x20under\x20this\x20fallback\x20disclosure\x20(presented-supply\x20recall).\x20Verify\x20'+'geographic\x20fit\x20manually\x20or\x20switch\x20sensitivity\x20(strict\x20→\x20near\x20→\x20logistics)\x20before\x20deciding.'}:{}},'matches':aS,'total_enumerated':ay['total_enumerated'],'has_more':ay['has_more'],'coverage':ay['coverage'],'scope_advice':{'search_terms':ar['search_terms'],'ai_enrichment_note':ar['ai_enrichment_note']},...aN?{'policy_effect':aN}:{}};break;}case'arbitration_score':{let b0=b['history'];const b1=b['context_network']??'testnet';if((!b0||b0['length']===0x0)&&b['arbitration']['object'])try{const b3=await enumerateArbs(b1,{'arbitration':b['arbitration']['object']});b0=await arbCasesWithRoles(b3['arbs'],b1);}catch{b0=b['history'];}if((!b0||b0['length']===0x0)&&b['arbitration']['object'])try{const b4=await query_objects({'objects':[b['arbitration']['object']],'network':b1}),b5=b4?.['objects']?.[0x0];if(b5?.['permission']){const b6=await fetchObjectLinkerCore(b5['permission'],b1),b7=(b6?.['items']??[])['map'](b9=>b9['who'])['filter'](b9=>b9!==b['arbitration']['object']),b8=[];for(const b9 of b7['slice'](0x0,0xa)){const ba=await enumerateArbs(b1,{'arbitration':b9})['catch'](()=>undefined);ba?.['arbs']?.['length']&&b8['push'](...await arbCasesWithRoles(ba['arbs'],b1));}if(b8['length']>0x0)b0=b8;}}catch{}const b2=await assessArbitration({'arbitration':{'object':b['arbitration']['object'],'fee':b['arbitration']['fee'],'balance':b['arbitration']['balance'],'voting_guard_count':b['arbitration']['voting_guard_count'],'bPaused':b['arbitration']['bPaused'],'location':b['arbitration']['location'],'has_verified_identity':b['arbitration']['has_verified_identity']},'history':b0,'entity_votes':b['entity_votes'],'fee_median':b['fee_median']},await resolveInjection(b['account'],b['injection']));c={'action':'arbitration_score',...b2};break;}case'account_events':{const bb=await runAccountEventWatchers({'account':b['account'],'network':await resolveNetwork(b['context_network']),'reviews':b['reviews']?.['map'](bc=>({'reviewer':bc['reviewer'],'rating':bc['rating'],'tags':bc['tags'],'comment':bc['comment'],'orderRef':bc['orderRef'],'timestamp':bc['timestamp'],'verified':bc['verified']??![]})),'order_history':b['order_history']},b['categories']);c={'action':'account_events','events':bb};break;}default:throw new Error('Unknown\x20evaluation_operation\x20action');}return{'content':[{'type':'text','text':JSON['stringify']({'result':c})}],'structuredContent':{'result':c}};}
|
|
1
|
+
import{strictParse}from'../../schema/index.js';import{EvaluationOperationInputSchema}from'../../schema/evaluation/index.js';import{evaluateArbGame}from'../../evaluation/arbitration-game.js';import{evaluateNodeGame}from'../../evaluation/node-game.js';import{evaluatePathReasoning}from'../../evaluation/path-reasoning.js';import{assessEvidenceReview,reviewEvidenceList}from'../../knowledge/evidence-review.js';import{expandSearchScope,inferSensitivity,rankByLocation}from'../../evaluation/location-match.js';import{ArbStatus,discoveryDataSource,LocalMark,query_objects}from'@wowok/wowok';import{enumerateServices,enumerateDemands,enumerateArbs,indexErrorCode,indexUrlFor,matchServicesViaIndex,matchDemandsViaIndex,withDegradedReasons}from'../../knowledge/jsonrpc-enum.js';import{KNOWN_CAPABILITIES}from'../../data/api/match.js';import{fetchObjectLinkerCore,batchQueryObjectsByIds,batchQueryTableItems}from'../../graph/onchain/sdk-batch.js';import{summarizeCapabilityGaps}from'../../evaluation/gap.js';import{resolveNetwork}from'./network.js';import{composeServicesForDemand}from'../../evaluation/composer.js';import{generateCompositionPlan,PILOT_CHAINS}from'../../composition/generate.js';import{matchDemandToServices,matchServiceToDemands}from'../../evaluation/builtins/demand-match.js';import{nextOperationForServiceMatch,nextOperationForDemandMatchLive,nextOperationForServiceOrder}from'../../evaluation/match-operation.js';import{extractDemandCapability,enrichFromDescription}from'../../evaluation/extract.js';import{assessArbitration}from'../../evaluation/builtins/arbitration-score.js';import{resolveCategoryMatchRules,toSoftWeightInjection,applyHardConstraints}from'../../evaluation/category-match-rules.js';import{matchGradeFromScore}from'../../evaluation/standards.js';import{computeMarketMetrics,computeOrderFlow}from'../../knowledge/market-metrics.js';import{workflowSubgraphFromRows}from'../../graph/onchain/index.js';import{assessAntiCheat}from'../../knowledge/anti-cheat.js';import{computeJourneyFunnel,attributeReferrals,buildCustomerRelationships}from'../../knowledge/market-operations.js';import{suggestPricing}from'../../knowledge/dynamic-pricing.js';import{runAccountEventWatchers}from'../../customer/account-events.js';import{registerBuiltinEvaluations}from'../../evaluation/builtins/index.js';import{getEffectivePersona,mergeInjections}from'../../persona/index.js';import{buildUserInjection}from'../../evaluation/injection.js';import{applyDemandPolicyGates,applyPolicyGates,applyPolicyRerank,buildPolicyEffect,policyToInjection,rerankDemandMatches}from'../../evaluation/match-policy.js';import{resolveEffectiveMatchPolicy}from'../../evaluation/match-policy-resolver.js';registerBuiltinEvaluations();function arbCaseFromObject(b){const c=typeof b['time']==='number'?b['time']:Number(b['time']??0x0);return{'status':b['status'],'time':Number['isFinite'](c)?c:undefined,'resolved_time':typeof b['indemnity']?.['time']==='number'?b['indemnity']['time']:b['compensation_time']??undefined,'indemnity_amount':b['indemnity']?.['amount'],'objected':b['status']===ArbStatus['Objectionable']||b['objection']!=null&&b['objection']['length']>0x0};}async function arbCasesWithRoles(a,b){const c=a['map'](arbCaseFromObject),d=Array['from'](new Set(a['map'](j=>j['order'])['filter'](Boolean))),e=new Map(),f=[];if(d['length']>0x0){const j=await batchQueryObjectsByIds(d,b);for(const k of j){const l=k;if(!l?.['object'])continue;e['set'](l['object'],l);if(l['service'])f['push'](l['service']);}}const g=new Map(),h=Array['from'](new Set(f));if(h['length']>0x0){const m=await batchQueryObjectsByIds(h,b);for(const n of m){const p=n;if(p?.['object'])g['set'](p['object'],p);}}for(let q=0x0;q<a['length'];q++){const r=e['get'](a[q]['order']);if(!r)continue;c[q]['customer']=r['builder']||undefined;const t=g['get'](r['service']);if(t)c[q]['merchant']=t['permission']||undefined;}return c;}function capabilityFromInput(a){return{'id':a['id'],'kind':a['kind'],'owner':a['owner']??'','industry':a['industry'],'industry_confidence':a['industry_confidence']??0x0,'region':a['region'],'price_min':a['price_min']!==undefined?BigInt(a['price_min']):undefined,'price_max':a['price_max']!==undefined?BigInt(a['price_max']):undefined,'token_type':a['token_type']??'','ticket_size':a['ticket_size']??'medium','trust_score':a['trust_score']??0x32,'reputation_like_ratio':a['reputation_like_ratio']??0x1,'arbitration_independent':a['arbitration_independent']??![],'merchant_history_count':a['merchant_history_count']??0x0,'capabilities':a['capabilities'],'tags':a['tags']??[],'keywords':a['keywords']??[]};}async function resolveInjection(a,b){return mergeInjections(await buildUserInjection(a),b);}function serviceSummaryToExtract(a){const b=a['json']??{},c=f=>typeof f==='string'?f:undefined,d=f=>typeof f==='string'?f:null,e=Array['isArray'](b['sales'])?b['sales']['map'](f=>{const g=f?.['fields']??f;return{'name':typeof g?.['name']==='string'?g['name']:undefined,'price':typeof g?.['price']==='string'?g['price']:g?.['price']!=null?String(g['price']):'0','wip_hash':typeof g?.['wip_hash']==='string'?g['wip_hash']:undefined};}):[];return{'object':a['object'],'description':c(b['description'])??'','location':a['location']??c(b['location'])??'','sales':e,'arbitrations':Array['isArray'](b['arbitrations'])?b['arbitrations']['map'](String):[],'compensation_fund':c(b['compensation_fund']),'buy_guard':d(b['buy_guard']),'machine':d(b['machine']),'um':d(b['um']),'bPublished':b['bPublished']===!![],'bPaused':b['bPaused']===!![],'owner':c(b['owner'])};}function policyNeedsOwner(a){if(!a)return![];return Boolean(a['gates']?.['some'](b=>b['dim']==='owner')||a['excludes']?.['some'](b=>b['dim']==='blacklist'&&(b['owners']?.['length']??0x0)>0x0));}async function recallDemandsHybrid(a,b,c){const d=()=>enumerateDemands(a,{'max_objects':b['max_objects'],'no_cache':b['no_cache']}),e=async h=>({'answer':withDegradedReasons(await d(),['MATCH_INDEX_FALLBACK',...h]),'matchRoute':'legacy_enumeration'}),f=!policyNeedsOwner(c),g=discoveryDataSource();if(!f||g==='legacy'||!indexUrlFor(a))return{'answer':await d(),'matchRoute':'legacy_enumeration'};try{const h=await matchDemandsViaIndex(a,{'location':b['location'],'industry':b['industry']&&b['industry']!=='general'?b['industry']:undefined,'limit':Math['min'](0x64,b['max_objects']??0x64),'recallLimit':Math['min'](0x3e8,Math['max'](0xc8,b['max_objects']??0xc8))});if(g==='auto'&&h['total_enumerated']===0x0)return await e(['INDEX_KIND_EMPTY']);return{'answer':h,'matchRoute':'remote_index'};}catch(i){if(g==='remote')throw i;return await e([indexErrorCode(i)]);}}export async function handleEvaluationOperation(a){const b=strictParse(EvaluationOperationInputSchema,a,'evaluation_operation\x20input');let c;switch(b['action']){case'arb_game':{const e=b['account']?await getEffectivePersona(b['account']):null,f=b['appetite']??e?.['layer']['preferences']?.['risk_appetite'],g=b['requirements']??e?.['layer']['requirements'];c={'action':'arb_game',...evaluateArbGame(b['status'],b['perspective'],{'risk_appetite':f,'requirements':g})};break;}case'node_game':{const h=b['account']?await getEffectivePersona(b['account']):null,i=b['appetite']??h?.['layer']['preferences']?.['risk_appetite'],j=b['requirements']??h?.['layer']['requirements'];c={'action':'node_game',...evaluateNodeGame({'current_node':b['current_node'],'perspective':b['perspective'],'appetite':i,'requirements':j,'threshold':b['threshold'],'allocation':b['allocation'],'order_amount':b['order_amount'],'compensation_fund':b['compensation_fund'],'operable':b['operable'],'waiting_on':b['waiting_on']??[]})};break;}case'capability_gap':{c={'action':'capability_gap','report':summarizeCapabilityGaps(capabilityFromInput(b['demand']),capabilityFromInput(b['service']))};break;}case'compose_service':{c={'action':'compose_service','plan':composeServicesForDemand(capabilityFromInput(b['demand']),b['services']['map'](capabilityFromInput))};break;}case'compose_generation':{const k=generateCompositionPlan({'intent':b['intent'],...b['selections']!==undefined?{'selections':b['selections']}:{},...b['supply_chain']!==undefined?{'supplyChain':b['supply_chain']}:{},...b['inputs']!==undefined?{'inputs':b['inputs']}:{},...b['name_base']!==undefined?{'nameBase':b['name_base']}:{},...b['preferred_chain']!==undefined?{'preferredChain':b['preferred_chain']}:{}});c={'action':'compose_generation','feasibility':k['feasibility'],...k['chain']!==undefined?{'chain':k['chain']}:{},...k['carrier']!==undefined?{'carrier':k['carrier']}:{},'pilot_chains':PILOT_CHAINS['map'](l=>l['chain']),'adopted':k['adopted']['map'](l=>({'id':l['id'],'via':l['via'],...l['evidence']!==undefined?{'matched_signals':l['evidence']['hits'],'signals_tested':l['evidence']['tested']}:{}})),'blockers':k['blockers'],...k['plan']!==undefined?{'plan':{...k['plan'],'catalog_version':k['templates_version']}}:{},...k['audit']!==undefined?{'audit':{'blocking':k['audit']['blocking'],'findings':k['audit']['findings']['map'](l=>({'level':l['level'],'rule_id':l['rule_id'],'title':l['title']}))}}:{},'templates_version':k['templates_version'],...k['supplyChain']!==undefined?{'supply_chain':k['supplyChain']}:{}};break;}case'demand_match':{let l=null,m=b['presenter_history'];if(b['demand_object']){const o=b['demand_object']['startsWith']('0x')?b['demand_object']:await LocalMark['Instance']()['get_address'](b['demand_object'])['catch'](()=>undefined)??undefined;if(o)try{const p=await resolveNetwork(undefined),r=await query_objects({'objects':[o],'network':p,'no_cache':!![]}),s=r?.['objects']?.[0x0],t=s?.['data']??s;let u=typeof t?.['presenters_count']==='number'?t['presenters_count']:null;if(u===null)try{const {items:v}=await batchQueryTableItems(o,{'network':p,'noCache':!![],'maxItems':0xc8}),w=v['map'](x=>x['object'])['filter'](x=>x?.['type']==='TableItem_DemandPresenter');u=w['length'],!m&&w['length']>0x0&&(m=w['map'](x=>({'demand_id':b['demand_object'],'presenter':typeof x?.['address']==='string'?x['address']:undefined,'presenter_service':typeof x?.['service']==='string'?x['service']:undefined,'acceptance_score':typeof x?.['acceptance_score']==='number'?x['acceptance_score']:null,'feedback_time':typeof x?.['feedback_time']==='number'?x['feedback_time']:undefined})));}catch{}l={'object':b['demand_object'],'presenters_count':u};}catch{l={'object':b['demand_object'],'presenters_count':null};}else l={'object':b['demand_object'],'presenters_count':null};}const n=await matchDemandToServices(capabilityFromInput(b['demand_cap']),b['services'],await resolveInjection(b['account'],b['injection']),0x5,m);c={'action':'demand_match','matches':n['map'](x=>({'service':x['service'],'result':x['result'],'grade':matchGradeFromScore(x['result']['total']),'next':nextOperationForDemandMatchLive(x['service'],l),'order':nextOperationForServiceOrder(x['service'])}))};break;}case'service_match':{const x=await matchServiceToDemands(capabilityFromInput(b['service_cap']),b['demands'],await resolveInjection(b['account'],b['injection']),0x5,b['presenter_history']);c={'action':'service_match','matches':x['map'](y=>({'demand':y['demand'],'result':y['result'],'next':nextOperationForServiceMatch(y['demand'],null)}))};break;}case'path_reasoning':{const y=b['account']?await getEffectivePersona(b['account']):null,z=b['appetite']??y?.['layer']['preferences']?.['risk_appetite'],A=b['requirements']??y?.['layer']['requirements'];c={'action':'path_reasoning',...evaluatePathReasoning({'current_node':b['current_node'],'perspective':b['perspective'],'workflow':workflowSubgraphFromRows(b['machine_nodes']),'node_annotations':b['node_annotations'],'appetite':z,'requirements':A,'order_amount':b['order_amount'],'max_depth':b['max_depth']})};break;}case'evidence_review':{b['items']&&b['items']['length']>0x0?c={'action':'evidence_review','list':reviewEvidenceList(b['items'])}:c={'action':'evidence_review','review':assessEvidenceReview({'kind':b['kind'],'hash_committed':b['hash_committed'],'digital_check_passed':b['digital_check_passed'],'contradiction':b['contradiction']})};break;}case'discover_services':{const B=!b['sensitivity']?inferSensitivity(b['description']??''):null,C=b['sensitivity']??B['sensitivity'],D=B?.['signals']??[],E=await resolveNetwork(b['context_network']),F={'raw':b['location'],...b['region']??{}},G=expandSearchScope(C,F),H=await enumerateServices(E,{'max_objects':b['max_objects'],'no_cache':b['no_cache'],'location_any':G['search_terms'],'coin_type':b['coin_type'],'name_contains':b['name_contains']}),I=rankByLocation(C,F,H['services']['map'](J=>({'id':J['object'],'name':J['name'],'location':J['location']})));c={'action':'discover_services','sensitivity':C,'inference_signals':D,'services':I['map'](J=>{const K=H['services']['find'](L=>L['object']===J['id']);return{'object':J['id'],'name':K?.['name'],'location':K?.['location'],'relation':J['relation'],'satisfied':J['satisfied'],'score':J['score'],'reason':J['reason']};}),'total_enumerated':H['total_enumerated'],'has_more':H['has_more'],'coverage':H['coverage'],'scope_advice':{'search_terms':G['search_terms'],'ai_enrichment_note':G['ai_enrichment_note']}};break;}case'discover_demands':{const J=await resolveNetwork(b['context_network']),K=await resolveEffectiveMatchPolicy(b['match_policy'],'supply_to_demand',b['account']),L=K['policy'],{answer:M,matchRoute:N}=await recallDemandsHybrid(J,{'max_objects':b['max_objects'],'no_cache':b['no_cache'],'location':b['location']},L),O=b['location']?.['toLowerCase'](),P=M['demands']['filter'](S=>!O||(S['location']??'')['toLowerCase']()['includes'](O))['map'](S=>({'object':S['object'],'description':S['description']??'','location':S['location']??'','presenters_count':S['presenters_count']??0x0,'permission':S['permission']??''}));let Q=P,R;if(L){const S=M['demands']['filter'](X=>!O||(X['location']??'')['toLowerCase']()['includes'](O))['map'](X=>({'object':X['object'],'description':X['description']??'','location':X['location']??'','rewards':X['rewards'],'um':X['um']??null,'owner':typeof X['owner']==='string'?X['owner']:undefined,'guards':X['guards'],'presenters_count':X['presenters_count']})),T=applyDemandPolicyGates(L,S),U=new Set(T['passed']['map'](X=>X['object']));Q=P['filter'](X=>U['has'](X['object']));const V=L['output']?.['top_n'];if(V!==undefined)Q=Q['slice'](0x0,V);const W=[];Object['keys'](L['weights']??{})['length']>0x0&&W['push']('weights\x20not\x20applicable\x20in\x20discover_demands\x20(no\x20private\x20scoring\x20at\x20this\x20stage;\x20use\x20demand_present)'),L['rerank']!==undefined&&W['push']('rerank\x20not\x20applicable\x20in\x20discover_demands\x20(no\x20private\x20scoring\x20at\x20this\x20stage;\x20use\x20demand_present)'),R=buildPolicyEffect(L,T,{'applied':{},'ignored':[]},{'order':N==='remote_index'?'server\x20public-baseline\x20order\x20(discover_demands\x20performs\x20no\x20private\x20scoring)':'enumeration\x20order\x20(discover_demands\x20performs\x20no\x20private\x20scoring)','diversity_applied':![],'deferred':0x0,'ignored':[]},W,K['source']);}c={'action':'discover_demands','demands':Q,'total_enumerated':M['total_enumerated'],'has_more':M['has_more'],'match_route':N,'coverage':M['coverage'],...R?{'policy_effect':R}:{}};break;}case'demand_present':{const X=await resolveNetwork(b['context_network']),Y=await resolveEffectiveMatchPolicy(b['match_policy'],'supply_to_demand',b['account']),Z=Y['policy'],{answer:a0,matchRoute:a1}=await recallDemandsHybrid(X,{'max_objects':b['max_objects'],'no_cache':b['no_cache'],'location':b['location'],'industry':b['service_cap']['industry']},Z),a2=b['location']?.['toLowerCase'](),a3=a0['demands']['filter'](ad=>!a2||(ad['location']??'')['toLowerCase']()['includes'](a2)),a4=new Map(a3['map'](ad=>[ad['object'],(ad['guards']?.['length']??0x0)>0x0])),a5=a3['map'](ad=>({'object':ad['object'],'description':ad['description']??'','location':ad['location']??'','rewards':ad['rewards']??[],'um':ad['um']??null,'owner':typeof ad['owner']==='string'?ad['owner']:undefined})),a6=a3['map'](ad=>({'object':ad['object'],'description':ad['description']??'','location':ad['location']??'','rewards':ad['rewards'],'um':ad['um']??null,'owner':typeof ad['owner']==='string'?ad['owner']:undefined,'guards':ad['guards'],'presenters_count':ad['presenters_count']}));let a7=await resolveInjection(b['account'],b['injection']),a8=a5,a9,aa;if(Z){const ad=applyDemandPolicyGates(Z,a6),ae=new Set(ad['passed']['map'](ag=>ag['object']));a8=a5['filter'](ag=>ae['has'](ag['object']));const af=policyToInjection(Z);a7=mergeInjections(a7,af['injection']),aa={'gateOutcome':ad,'weights':af};}const ab=await matchServiceToDemands(capabilityFromInput(b['service_cap']),a8,a7,Z?a8['length']:b['limit']??0x5);let ac=ab['map'](ag=>{const ah=a4['get'](ag['demand']['object'])??![];return{'demand':ag['demand'],'result':ag['result'],'next':nextOperationForServiceMatch(ag['demand'],ah)};});if(Z&&aa){const ag=rerankDemandMatches(ac,Z);ac=ag['matches'],a9=buildPolicyEffect(Z,aa['gateOutcome'],aa['weights'],ag,[],Y['source']);}c={'action':'demand_present','matches':ac,'total_enumerated':a0['total_enumerated'],'has_more':a0['has_more'],'match_route':a1,'coverage':a0['coverage'],...a9?{'policy_effect':a9}:{}};break;}case'market_metrics':{const ah=await resolveNetwork(b['context_network']),ai=await computeMarketMetrics(ah,b['no_cache']),aj=await computeOrderFlow(ah,{'noCache':b['no_cache'],'maxPages':b['limit']?Math['max'](0x1,Math['ceil'](b['limit']/0x32)):undefined});c={'action':'market_metrics',...ai,'order_flow':aj};break;}case'anti_cheat':{const ak=assessAntiCheat({'service':{'object':b['service']['object'],'arbitrations':b['service']['arbitrations'],'compensation_fund':b['service']['compensation_fund'],'machine':b['service']['machine'],'bPublished':b['service']['bPublished']},'orders':b['orders'],'reviews':b['reviews']});c={'action':'anti_cheat','signals':ak};break;}case'market_operations':{if(b['op']==='journey_funnel')c={'action':'market_operations','result':computeJourneyFunnel({'due_diligence':b['due_diligence']??0x0,'orders':b['orders']??0x0,'completed':b['completed']??0x0,'reviews':b['reviews']??0x0})};else{if(b['op']==='referral_attribution')c={'action':'market_operations','result':attributeReferrals(b['referral_orders']??[])};else{if(b['op']==='dynamic_pricing'){const al=b['market_signals'];if(!al)throw new Error('dynamic_pricing\x20op\x20requires\x20market_signals');c={'action':'market_operations','result':suggestPricing({'supplyCount':al['supplyCount'],'demandCount':al['demandCount'],'avgPrice':al['avgPrice'],'myPrice':al['myPrice'],'competitorPrices':al['competitorPrices'],'recentOrderCount':al['recentOrderCount'],'repeatCustomerRate':al['repeatCustomerRate']})};}else c={'action':'market_operations','result':buildCustomerRelationships(b['customer_orders']??[])};}}break;}case'match_discover':{const am=!b['sensitivity']?inferSensitivity(b['description']??''):null,an=b['sensitivity']??am['sensitivity'],ao=am?.['signals']??[],ap=await resolveNetwork(b['context_network']),aq={'raw':b['location'],...b['region']??{}},ar=expandSearchScope(an,aq),as=await resolveEffectiveMatchPolicy(b['match_policy'],'demand_to_supply',b['account']),at=as['policy'],au=(b['required_capabilities']??[])['filter'](aT=>KNOWN_CAPABILITIES['includes'](aT)),av=enrichFromDescription(b['description'])['industry'],aw=!b['coin_type']&&!b['name_contains'],ax=discoveryDataSource();let ay,az=new Map(),aA='legacy_enumeration';const aB=()=>enumerateServices(ap,{'max_objects':b['max_objects'],'no_cache':b['no_cache'],'location_any':ar['search_terms'],'coin_type':b['coin_type'],'name_contains':b['name_contains']});if(aw&&ax!=='legacy'&&indexUrlFor(ap))try{const aT=await matchServicesViaIndex(ap,{'q':b['description'],'location':b['location'],'budgetWei':b['budget'],'industry':av==='general'?undefined:av,'capabilities':au['length']>0x0?au:undefined,'limit':Math['min'](0x64,b['max_objects']??0x64),'recallLimit':Math['min'](0x3e8,Math['max'](0xc8,b['max_objects']??0xc8))});ay={'services':aT['candidates']['map'](aU=>({'object':aU['objectId'],'location':aU['publicFeatures']['location']??'','json':aU['payloadJson']??null})),'total_enumerated':aT['recall']['liveSet']??aT['recall']['gated'],'has_more':aT['truncated'],'coverage':aT['coverage']};if(ax==='auto'&&ay['total_enumerated']===0x0)throw Object['assign'](new Error('Remote\x20index\x20materializes\x20no\x20Service'),{'code':'INDEX_KIND_EMPTY'});az=new Map(aT['candidates']['map'](aU=>[aU['objectId'],aU])),aA='remote_index';}catch(aU){if(ax==='remote')throw aU;ay=withDegradedReasons(await aB(),['MATCH_INDEX_FALLBACK',indexErrorCode(aU)]);}else!aw?ay=withDegradedReasons(await aB(),['MATCH_FILTER_FALLBACK','coin_type/name_contains\x20are\x20legacy-route-only\x20—\x20remote\x20index\x20skipped;\x20recall\x20may\x20miss\x20indexed\x20supply']):ay=await aB();const aC=new Set(b['required_capabilities']??[]),aD=extractDemandCapability({'object':'intent','description':b['description'],'location':b['location'],'owner':b['account']},{'price_max':b['budget']!==undefined?BigInt(b['budget']):undefined,'capabilities':{'has_arbitration':aC['has']('has_arbitration'),'has_refund_path':aC['has']('has_refund_path'),'has_milestone_nodes':aC['has']('has_milestone_nodes'),'has_compensation_fund':aC['has']('has_compensation_fund'),'has_wip_verification':aC['has']('has_wip_verification'),'has_messenger':aC['has']('has_messenger'),'has_buy_guard':aC['has']('has_buy_guard'),'has_dynamic_pricing':aC['has']('has_dynamic_pricing'),'is_published':!![],'is_paused':![]}}),aE=rankByLocation(an,aq,ay['services']['map'](aV=>({'id':aV['object'],'name':aV['name'],'location':aV['location']}))),aF=aE['filter'](aV=>aV['satisfied']),aG=aF['length']===0x0,aH=aG?aE:aF,aI=ay['services']['filter'](aV=>aH['some'](aW=>aW['id']===aV['object']))['map'](serviceSummaryToExtract),aJ=resolveCategoryMatchRules(b['category']);let aK=aI;const aL=[];if(aJ){const aV=applyHardConstraints(aJ,aI);aK=aV['passed'];for(const aW of aV['dropped']){aL['push']({'object':aW['candidate']['object'],'reason':aW['constraint']['description']});}}let aM=await resolveInjection(b['account'],b['injection']);aJ&&(aM=mergeInjections(aM,toSoftWeightInjection(aJ)));let aN,aO;if(at){const aX=applyPolicyGates(at,aK,{'budgetWei':b['budget']!==undefined?BigInt(b['budget']):undefined});aK=aX['passed'];const aY=policyToInjection(at);aM=mergeInjections(aM,aY['injection']),aO={'gateOutcome':aX,'weights':aY};}const aP=await matchDemandToServices(aD,aK,aM,aK['length'],b['presenter_history']),aQ=new Map(aP['map'](aZ=>[aZ['service']['object'],aZ['result']])),aR=new Set(aK['map'](aZ=>aZ['object']));let aS=aH['filter'](aZ=>aR['has'](aZ['id']))['map'](aZ=>{const b0=ay['services']['find'](b2=>b2['object']===aZ['id']),b1=az['get'](aZ['id']);return{'service':serviceSummaryToExtract(b0),'location':{'relation':aZ['relation'],'satisfied':aZ['satisfied'],'score':aZ['score'],'reason':aZ['reason']},'result':aQ['get'](aZ['id']),'grade':matchGradeFromScore(aQ['get'](aZ['id'])['total']),...b1?{'server_match':{'policy_version':b1['serverEvaluation']['policyVersion'],'total':b1['serverEvaluation']['total'],'breakdown':b1['serverEvaluation']['breakdown'],'unknown_rules':b1['serverEvaluation']['unknownRules'],'red_flags':b1['serverEvaluation']['redFlags'],'channels':b1['channels'],'rrf':b1['rrf']}}:{}};});if(at&&aO){const aZ=applyPolicyRerank(aS,at);aS=aZ['matches'],aN=buildPolicyEffect(at,aO['gateOutcome'],aO['weights'],aZ,[],as['source']);}c={'action':'match_discover','sensitivity':an,'inference_signals':ao,'match_route':aA,'location_gate':{'passed':aF['length'],'failed':aE['length']-aF['length'],'fallback_used':aG,...aG?{'note':'NO\x20service\x20passed\x20the\x20location\x20gate\x20—\x20gate-failed\x20services\x20are\x20retained\x20as\x20'+'candidates\x20under\x20this\x20fallback\x20disclosure\x20(presented-supply\x20recall).\x20Verify\x20'+'geographic\x20fit\x20manually\x20or\x20switch\x20sensitivity\x20(strict\x20→\x20near\x20→\x20logistics)\x20before\x20deciding.'}:{}},'matches':aS,'total_enumerated':ay['total_enumerated'],'has_more':ay['has_more'],'coverage':ay['coverage'],'scope_advice':{'search_terms':ar['search_terms'],'ai_enrichment_note':ar['ai_enrichment_note']},...aN?{'policy_effect':aN}:{}};break;}case'arbitration_score':{let b0=b['history'];const b1=b['context_network']??'testnet';if((!b0||b0['length']===0x0)&&b['arbitration']['object'])try{const b4=await enumerateArbs(b1,{'arbitration':b['arbitration']['object']});b0=await arbCasesWithRoles(b4['arbs'],b1);}catch{b0=b['history'];}if((!b0||b0['length']===0x0)&&b['arbitration']['object'])try{const b5=await query_objects({'objects':[b['arbitration']['object']],'network':b1}),b6=b5?.['objects']?.[0x0];if(b6?.['permission']){const b7=await fetchObjectLinkerCore(b6['permission'],b1),b8=(b7?.['items']??[])['map'](ba=>ba['who'])['filter'](ba=>ba!==b['arbitration']['object']),b9=[];for(const ba of b8['slice'](0x0,0xa)){const bb=await enumerateArbs(b1,{'arbitration':ba})['catch'](()=>undefined);bb?.['arbs']?.['length']&&b9['push'](...await arbCasesWithRoles(bb['arbs'],b1));}if(b9['length']>0x0)b0=b9;}}catch{}const b2={'voting_guard_count':b['arbitration']['voting_guard_count']};if(b['arbitration']['object'])try{const bc=await query_objects({'objects':[b['arbitration']['object']],'network':b1}),bd=bc?.['objects']?.[0x0];if(b2['voting_guard_count']===undefined){const be=bd?.['voting_guards'];Array['isArray'](be)&&(b2['voting_guard_count']=be['length']);}b2['usage_guard']===undefined&&(b2['usage_guard']=bd?.['usage_guard']??null);}catch{}const b3=await assessArbitration({'arbitration':{'object':b['arbitration']['object'],'fee':b['arbitration']['fee'],'balance':b['arbitration']['balance'],'voting_guard_count':b2['voting_guard_count'],'bPaused':b['arbitration']['bPaused'],'location':b['arbitration']['location'],'has_verified_identity':b['arbitration']['has_verified_identity'],'usage_guard':b2['usage_guard']},'history':b0,'entity_votes':b['entity_votes'],'fee_median':b['fee_median']},await resolveInjection(b['account'],b['injection']));c={'action':'arbitration_score',...b3};break;}case'account_events':{const bf=await runAccountEventWatchers({'account':b['account'],'network':await resolveNetwork(b['context_network']),'reviews':b['reviews']?.['map'](bg=>({'reviewer':bg['reviewer'],'rating':bg['rating'],'tags':bg['tags'],'comment':bg['comment'],'orderRef':bg['orderRef'],'timestamp':bg['timestamp'],'verified':bg['verified']??![]})),'order_history':b['order_history']},b['categories']);c={'action':'account_events','events':bf};break;}default:throw new Error('Unknown\x20evaluation_operation\x20action');}return{'content':[{'type':'text','text':JSON['stringify']({'result':c})}],'structuredContent':{'result':c}};}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type FundRailKind = "refund" | "settlement";
|
|
2
|
+
export declare function classifyFundRail(targetNode: string | undefined | null): FundRailKind | undefined;
|
|
3
|
+
export interface RefundRailRecipeContext {
|
|
4
|
+
targetNode: string;
|
|
5
|
+
progressRef?: string;
|
|
6
|
+
orderRef?: string;
|
|
7
|
+
allocationRef?: string;
|
|
8
|
+
network?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function refundRailRecipeNotice(ctx: RefundRailRecipeContext): Promise<string | undefined>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{LocalMark}from'@wowok/wowok';import{batchQueryObjectsByIds}from'../../graph/onchain/sdk-batch.js';import{classifyNode}from'../../knowledge/workflow-guidance.js';import{classifyDualPayoutTrack}from'../../knowledge/recipient-constraint.js';export function classifyFundRail(a){if(typeof a!=='string'||a['length']===0x0)return undefined;const b=classifyNode(a);if(b==='refund')return'refund';if(b==='complete')return'settlement';return undefined;}async function toAddr(a){if(typeof a!=='string'||a['length']===0x0)return undefined;if(a['startsWith']('0x'))return a;try{return await LocalMark['Instance']()['get_address'](a)??undefined;}catch{return undefined;}}async function readObj(a,b){const c=await batchQueryObjectsByIds([a],b,!![]),d=c?.[0x0];return d?.['data']??d;}function asBigInt(a){try{if(typeof a==='bigint')return a;if(typeof a==='number'&&Number['isFinite'](a))return BigInt(Math['trunc'](a));if(typeof a==='string'&&a['trim']()!=='')return BigInt(a);}catch{}return undefined;}function formatAmount(a){const b=Number(a)/0x3b9aca00;if(b===0x0)return'0\x20WOW\x20('+a['toString']()+'\x20MIST)';const c=b['toFixed'](0x9)['replace'](/\.?0+$/,'');return c+'\x20WOW\x20('+a['toString']()+'\x20MIST)';}async function matchRailGuards(a,b){const c=b==='refund'?'order-directed':'entity-directed',d=[];for(const e of Array['isArray'](a)?a:[]){const f=await toAddr(e?.['guard']);if(!f)continue;try{if(classifyDualPayoutTrack(a,f)['track']===c)d['push'](f);}catch{}}return d;}function renderRecipe(a,b){const c=a==='refund',d=c?'The\x20forward\x20that\x20landed\x20on\x20refund/cancel\x20node\x20\x22'+b['node']+'\x22\x20does\x20NOT\x20auto-allocate\x20the\x20escrow\x20'+'(allocation\x20has\x20no\x20forward\x20hook\x20—\x20alloc_by_guard\x20and\x20the\x20payment\x20receive\x20are\x20TWO\x20explicit\x20calls;\x20'+'the\x20refund\x20is\x20NOT\x20done\x20yet).':'The\x20forward\x20that\x20landed\x20on\x20completion\x20node\x20\x22'+b['node']+'\x22\x20does\x20NOT\x20auto-settle\x20the\x20escrow\x20'+'(order\x20completion\x20is\x20a\x20workflow\x20fact\x20—\x20allocation\x20has\x20no\x20forward\x20hook;\x20'+'the\x20provider\x20payout\x20is\x20NOT\x20released\x20yet).',e=c?'order-directed\x20—\x20the\x20payout\x20lands\x20on\x20the\x20Order\x20object\x20for\x20the\x20buyer\x20(order\x20owner)\x20to\x20claim':'entity-directed\x20—\x20the\x20payout\x20goes\x20to\x20the\x20fixed\x20provider-side\x20recipients',f=c?'FUND\x20RAIL\x20RECIPE\x20(refund\x20rail)\x20—\x20ORDER\x20CANCELLATION\x20≠\x20FUNDS\x20DISTRIBUTED.':'FUND\x20RAIL\x20RECIPE\x20(settlement\x20rail)\x20—\x20ORDER\x20COMPLETION\x20≠\x20FUNDS\x20DISTRIBUTED.';return[f,d,'','\x20\x20•\x20allocation_state:\x20'+formatAmount(b['balance'])+'\x20still\x20UNDISTRIBUTED\x20in\x20Allocation\x20'+b['allocAddr']+'\x20(the\x20escrow\x20of\x20Order\x20'+b['orderAddr']+').','\x20\x20•\x20'+a+'-rail\x20guard(s):\x20'+b['guards']['join'](',\x20')+'\x20('+e+').','\x20\x20•\x20TWO-STEP\x20RECIPE\x20(run\x20BOTH,\x20in\x20order):','\x20\x20\x20\x201)\x20allocation\x20operate\x20—\x20onchain_operations\x20{\x20operation_type:\x27allocation\x27,\x20data:{\x20object:\x27'+b['allocAddr']+'\x27,\x20alloc_by_guard:\x27'+b['guards'][0x0]+'\x27\x20}\x20}\x20—\x20'+'attach\x20a\x20TOP-LEVEL\x20submission\x20envelope\x20for\x20that\x20guard\x27s\x20b_submission\x20slots\x20(a\x20missing\x20slot\x20aborts\x20on-chain\x20with\x20'+'\x22Submission\x20ID\x20not\x20found\x22;\x20the\x20protocol\x20slot\x20254\x20takes\x20the\x20Order\x20address\x20this\x20Allocation\x20is\x20anchored\x20to\x20—\x20payment_info.for_object).','\x20\x20\x20\x202)\x20payment\x20receive\x20—\x20the\x20alloc\x20only\x20CREATES\x20the\x20CoinWrappers;\x20recipients\x20claim\x20them\x20afterwards\x20'+'(payment\x20receive,\x20e.g.\x20receive:\x27recently\x27;\x20an\x20order-anchored\x20payout\x20is\x20claimed\x20by\x20the\x20order\x20owner\x20via\x20the\x20order\x20receive).','\x20\x20•\x20Skipping\x20this\x20recipe\x20=\x20the\x20funds\x20stay\x20stranded\x20in\x20escrow.\x20Verify\x20by\x20re-reading\x20the\x20Allocation:\x20balance\x200\x20=\x20fully\x20distributed.']['join']('\x0a');}export async function refundRailRecipeNotice(a){try{const b=classifyFundRail(a['targetNode']);if(!b)return undefined;let c=await toAddr(a['orderRef']);if(!c&&a['progressRef']){const i=await readObj(await toAddr(a['progressRef'])??'',a['network']);c=await toAddr(i?.['task']);}if(!c)return undefined;let d=await toAddr(a['allocationRef']);if(!d){const j=await readObj(c,a['network']);d=await toAddr(j?.['allocation']);}if(!d)return undefined;const e=await readObj(d,a['network']),f=asBigInt(e?.['balance']);if(f===undefined||f<=0x0n)return undefined;const g=Array['isArray'](e?.['allocators']?.['allocators'])?e['allocators']['allocators']:Array['isArray'](e?.['allocators'])?e['allocators']:[],h=await matchRailGuards(g,b);if(h['length']===0x0)return undefined;return renderRecipe(b,{'node':a['targetNode'],'balance':f,'allocAddr':d,'orderAddr':c,'guards':h});}catch{return undefined;}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{strictParse}from'../../schema/index.js';import{IntentRadarInputSchema}from'../../schema/intent-radar/index.js';import{createIntent,listIntents,matchAllIntents,matchIntent,removeIntent}from'../../intent/index.js';import{enrichEventsWithObjectText}from'../../intent/enrich.js';import{query_events}from'@wowok/wowok';const AUTO_PULL_TYPES=['ServiceEvent','ArbitrationEvent','DemandChangedEvent','DemandPresentEvent','NewOrderEvent','ProgressEvent','ThresholdPendingEvent','ArbEvent','VoteEvent','DemandFeedbackEvent','NewEntityEvent','NewPaymentEvent','AllocationEvent','TreasuryEvent','RewardClaimEvent','RewardFundEvent','RewardWithdrawEvent','PermissionChangedEvent','RepositoryDataOverwriteEvent'];async function pullRecentEvents(a,b){const c=[];for(const d of AUTO_PULL_TYPES){try{const e=await query_events({'type':d,'cursor':null,'limit':b,'order':'descending','no_cache':![],'network':a}),f=e?.['data'];if(Array['isArray'](f))c['push'](...f);}catch{}}return c;}export async function handleIntentRadar(a){const b=strictParse(IntentRadarInputSchema,a,'intent_radar\x20input');let c;switch(b['action']){case'save':{const d=await createIntent({'intent':b['intent'],'account':b['account'],'role':b['role'],'target_types':b['target_types']});c={'action':'save','intent':d};break;}case'list':{c={'action':'list','intents':await listIntents(b['account'])};break;}case'remove':{c={'action':'remove','removed':await removeIntent(b['id'])};break;}case'match':{let e=b['events']??[];e['length']===0x0&&(e=await pullRecentEvents(b['network'],b['limit']??0x5));e=await enrichEventsWithObjectText(e,b['network']);const f=b['intent_id']?[await matchIntent(b['intent_id'],e)]['filter'](g=>g!==null):await matchAllIntents(e,b['account']);c={'action':'match','results':f};break;}default:throw new Error('Unknown\x20intent_radar\x20action');}return{'content':[{'type':'text','text':JSON['stringify']({'result':c})}],'structuredContent':{'result':c}};}
|
|
1
|
+
import{strictParse}from'../../schema/index.js';import{IntentRadarInputSchema}from'../../schema/intent-radar/index.js';import{createIntent,listIntents,matchAllIntents,matchIntent,removeIntent}from'../../intent/index.js';import{enrichEventsWithObjectText}from'../../intent/enrich.js';import{query_events}from'@wowok/wowok';const AUTO_PULL_TYPES=['ServiceEvent','ArbitrationEvent','DemandChangedEvent','DemandPresentEvent','NewOrderEvent','ProgressEvent','ThresholdPendingEvent','ArbEvent','VoteEvent','DemandFeedbackEvent','NewEntityEvent','NewPaymentEvent','AllocationEvent','TreasuryEvent','RewardClaimEvent','RewardFundEvent','RewardWithdrawEvent','PermissionChangedEvent','RepositoryDataOverwriteEvent','RowRemovedEvent','OrderTagOverwriteEvent','OrderTagRemovedEvent','PrincipalRefundedEvent'];async function pullRecentEvents(a,b){const c=[];for(const d of AUTO_PULL_TYPES){try{const e=await query_events({'type':d,'cursor':null,'limit':b,'order':'descending','no_cache':![],'network':a}),f=e?.['data'];if(Array['isArray'](f))c['push'](...f);}catch{}}return c;}export async function handleIntentRadar(a){const b=strictParse(IntentRadarInputSchema,a,'intent_radar\x20input');let c;switch(b['action']){case'save':{const d=await createIntent({'intent':b['intent'],'account':b['account'],'role':b['role'],'target_types':b['target_types']});c={'action':'save','intent':d};break;}case'list':{c={'action':'list','intents':await listIntents(b['account'])};break;}case'remove':{c={'action':'remove','removed':await removeIntent(b['id'])};break;}case'match':{let e=b['events']??[];e['length']===0x0&&(e=await pullRecentEvents(b['network'],b['limit']??0x5));e=await enrichEventsWithObjectText(e,b['network']);const f=b['intent_id']?[await matchIntent(b['intent_id'],e)]['filter'](g=>g!==null):await matchAllIntents(e,b['account']);c={'action':'match','results':f};break;}default:throw new Error('Unknown\x20intent_radar\x20action');}return{'content':[{'type':'text','text':JSON['stringify']({'result':c})}],'structuredContent':{'result':c}};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{wrapLocalHandler}from'../shared.js';import{withFaucetRetry}from'../retry.js';import{strictParse}from'../../schema/index.js';import{AccountOperationSchema,LocalMarkOperationSchema,LocalInfoOperationSchema,LocalHistoryOperationSchema,LocalCacheOperationSchema}from'../../schema/index.js';import{Cache}from'@wowok/wowok/w/local/cache';import{Account}from'@wowok/wowok/w/local';import{clearInFlightMarkers}from'../../composition/inflight.js';import{clearChainScope,resolveChainIdentity}from'@wowok/wowok/w/local/chain-scope';import{account_operation,local_mark_operation,local_info_operation,local_history_operation,GasTokenType,isFundApprovalExempt}from'@wowok/wowok';import{parseAmount,generateFundConfirmation,generateSkillsHint,formatAmountText}from'../../knowledge/fund-layer.js';import{buildDataSemantic}from'../../schema/call/semantic.js';import{resolveNetwork}from'./network.js';function deriveOpType(a,b){for(const c of Object['keys'](b)){if(b[c]!==undefined)return a+'_'+String(c);}return a+'_unknown';}function accountError(a,b){return{'content':[{'type':'text','text':'Error:\x20'+a}],'structuredContent':{'result':{'status':'error','error':a},'semantic':buildDataSemantic(undefined,b,!![],a)}};}function buildAccountContext(a){return{'operation_type':deriveOpType('account',a),'data':a};}const DEFAULT_ACCOUNT_CLIENT_ONLY='The\x20default\x20account\x20is\x20the\x20app\x27s\x20root\x20identity\x20and\x20is\x20managed\x20by\x20the\x20'+'client\x20Wallet\x20app\x20only\x20—\x20it\x20cannot\x20be\x20renamed\x20or\x20suspended\x20via\x20MCP.\x20'+'Ask\x20the\x20user\x20to\x20rename\x20or\x20suspend\x20it\x20in\x20the\x20client\x27s\x20Wallet\x20tab,\x20or\x20'+'target\x20a\x20named\x20(non-default)\x20account\x20instead.',SWAP_DEFAULT_ACCOUNT_CLIENT_ONLY='Swapping\x20a\x20name\x20with\x20the\x20default\x20account\x20is\x20not\x20allowed\x20via\x20MCP\x20—\x20the\x20'+'default\x20account\x20is\x20the\x20app\x27s\x20root\x20identity\x20and\x20is\x20managed\x20by\x20the\x20client\x20'+'Wallet\x20app\x20only.\x20Ask\x20the\x20user\x20to\x20manage\x20it\x20in\x20the\x20client\x27s\x20Wallet\x20tab,\x20'+'or\x20swap\x20two\x20named\x20(non-default)\x20accounts\x20instead.';async function isDefaultAccountTarget(a){if(a===undefined||a['trim']()==='')return!![];try{const b=await Account['Instance']()['get'](a);return!!b&&!b['suspended']&&(b['name']??'')==='';}catch{return![];}}function isDefaultNameRef(a){return a===undefined||a['trim']()==='';}async function fundProcessCoinAmount(a,b,c){try{const d=await parseAmount(a,b,c);return{'parsed':d};}catch(f){return{'error':f instanceof Error?f['message']:String(f)};}}async function coinFundGate(a,b,c,d,e,f){const {parsed:g,error:h}=await fundProcessCoinAmount(a,b,c);if(h||!g)return{'blocked':accountError(h??'Amount\x20parsing\x20failed',f)};try{const j=await Account['Instance']()['balance'](b,e['accountRef'],c),k=j?.['totalBalance'];if(k!==undefined&&BigInt(k)<g['smallestUnit']){const l=e['accountRef']?'\x27'+e['accountRef']+'\x27':'(default\x20account)';return{'blocked':accountError('Insufficient\x20balance:\x20'+e['key']+'\x20requires\x20'+(formatAmountText(g['smallestUnit'],g['decimals'],g['tokenSymbol'])+'\x20but\x20account\x20'+l+'\x20holds\x20')+(formatAmountText(k,g['decimals'],g['tokenSymbol'])+'.\x20')+'Fund\x20the\x20account\x20first\x20(faucet\x20on\x20testnet/localnet)\x20or\x20lower\x20the\x20amount.',f)};}}catch{}const i=isFundApprovalExempt(c,b,g['smallestUnit']['toString']());if(!i&&d!==!![]){const m=generateFundConfirmation([{'path':e['amountPath'],'displayAmount':g['displayAmount'],'tokenType':g['tokenType'],'tokenSymbol':g['tokenSymbol'],'decimals':g['decimals'],'smallestUnit':g['smallestUnit']['toString'](),'verified':g['verified'],'source':g['source'],'converted':g['converted'],'context':e['context']}],[]),n=generateSkillsHint(m),o=[m['message'],'',...e['detailLines'],n??'','The\x20'+e['key']+'\x20was\x20NOT\x20executed.\x20If\x20the\x20user\x20consents,\x20re-call\x20with\x20the\x20SAME\x20parameters\x20plus\x20'+e['key']+'.confirmed=true.']['filter'](p=>p!=='')['join']('\x0a');return{'blocked':{'content':[{'type':'text','text':o}],'structuredContent':{'result':{'status':'pending_confirmation','operation':e['operation'],'message':o,'rule_id':e['ruleId']},'semantic':{...buildDataSemantic(undefined,f,!![],'pending\x20user\x20confirmation'),'summary':e['summary']}}}};}return{'parsed':g};}async function executeAccountOperation(a,b){try{const c=await withFaucetRetry(account_operation)(a);try{if(c['transfer']){const d=c['transfer'];d['network']=await resolveNetwork(a['transfer']?.['network']),d['network_source']=a['transfer']?.['network']?'request':'session_default';}if(c['get']){const e=c['get'];e['network']=await resolveNetwork(a['get']?.['network']),e['network_source']=a['get']?.['network']?'request':'session_default';}}catch{}return{'content':[{'type':'text','text':JSON['stringify'](c)}],'structuredContent':{'result':{'status':'success','data':c},'semantic':buildDataSemantic(c,b)}};}catch(f){const g=f instanceof Error?f['message']:String(f);return accountError(g,b);}}export const handleAccountOperation=async a=>{let b;try{b=strictParse(AccountOperationSchema,a,'account_operation\x20input');}catch(d){return accountError('Parameter\x20validation\x20failed:\x20'+(d?.['message']??String(d)));}const c=buildAccountContext(b);if(b['suspend']!==undefined||b['rename']!==undefined){const f=b['suspend']?.['name_or_address']??b['rename']?.['name_or_address'];if(await isDefaultAccountTarget(f))return accountError(DEFAULT_ACCOUNT_CLIENT_ONLY,c);}if(b['swap_name']!==undefined){const {name1:g,name2:h}=b['swap_name'];if(isDefaultNameRef(g)||isDefaultNameRef(h))return accountError(SWAP_DEFAULT_ACCOUNT_CLIENT_ONLY,c);}if(b['transfer']!==undefined){const i=b['transfer'],j=await coinFundGate(i['amount'],i['token_type']??GasTokenType,i['network'],i['confirmed'],{'key':'transfer','amountPath':'transfer.amount','context':'Account\x20token\x20transfer','operation':'account_transfer','ruleId':'account_transfer_fund_movement','summary':'Token\x20transfer\x20blocked\x20pending\x20user\x20confirmation.\x20Re-call\x20with\x20transfer.confirmed=true\x20to\x20proceed.','detailLines':['Recipient:\x20'+(i['name_or_address_to']??'(default\x20account)'),'Sender:\x20'+(i['name_or_address_from']??'(default\x20account)')],'accountRef':i['name_or_address_from']},c);if('blocked'in j)return j['blocked'];const k={...b,'transfer':{...i,'amount':j['parsed']['smallestUnit']['toString']()}};return delete k['transfer']['confirmed'],executeAccountOperation(k,c);}if(b['get']!==undefined){const l=b['get'],m=await coinFundGate(l['balance_required'],l['token_type']??GasTokenType,l['network'],l['confirmed'],{'key':'get','amountPath':'get.balance_required','context':'Coin\x20object\x20production\x20(split/merge\x20+\x20self-delivery)','operation':'account_get_coin_object','ruleId':'account_get_fund_movement','summary':'Coin\x20object\x20production\x20blocked\x20pending\x20user\x20confirmation.\x20Re-call\x20with\x20get.confirmed=true\x20to\x20proceed.','detailLines':['Account:\x20'+(l['name_or_address']??'(default\x20account)'),'Effect:\x20splits/merges\x20the\x20account\x27s\x20coins\x20and\x20self-delivers\x20a\x20coin\x20object;\x20funds\x20never\x20leave\x20the\x20account\x20but\x20GAS\x20IS\x20SPENT.','On\x20success\x20the\x20result\x20reports\x20the\x20coin\x27s\x20ACTUAL\x20on-chain\x20balance\x20—\x20check\x20it\x20against\x20the\x20amount\x20you\x20need\x20before\x20relying\x20on\x20it.'],'accountRef':l['name_or_address']},c);if('blocked'in m)return m['blocked'];const n={...b,'get':{...l,'balance_required':m['parsed']['smallestUnit']['toString']()}};return delete n['get']['confirmed'],executeAccountOperation(n,c);}return executeAccountOperation(b,c);};export const handleMarkOperation=wrapLocalHandler({'schema':LocalMarkOperationSchema,'operationFn':local_mark_operation,'parseLabel':'local_mark_operation\x20input','buildContext':a=>{const b={'operation_type':deriveOpType('mark',a),'data':a},c=a;return c['add']&&Array['isArray'](c['add']['data'])&&c['add']['data']['length']>0x0&&(b['pre_warnings']=['Cross-network\x20consistency\x20(FIX-011):\x20LocalMark\x20names\x20are\x20scoped\x20per\x20network.\x20'+'When\x20creating\x20marks\x20for\x20the\x20same\x20logical\x20object\x20on\x20different\x20networks\x20'+'(e.g.\x20testnet\x20and\x20mainnet),\x20use\x20the\x20SAME\x20name\x20value\x20to\x20keep\x20name-based\x20'+'references\x20portable.\x20Before\x20creating\x20a\x20mark\x20on\x20mainnet,\x20consider\x20querying\x20'+'testnet\x20via\x20query_local\x20with\x20network=\x27testnet\x27\x20to\x20check\x20for\x20an\x20existing\x20'+'same-named\x20mark\x20and\x20replicate\x20it.']),b;}});export const handleInfoOperation=wrapLocalHandler({'schema':LocalInfoOperationSchema,'operationFn':local_info_operation,'parseLabel':'local_info_operation\x20input','buildContext':a=>({'operation_type':deriveOpType('local_info',a),'data':a})});export const handleHistoryOperation=wrapLocalHandler({'schema':LocalHistoryOperationSchema,'operationFn':local_history_operation,'parseLabel':'local_history_operation\x20input','buildContext':a=>({'operation_type':deriveOpType('local_history',a),'data':a})});async function readStorageStats(){if(!Cache['hasStorage']())return{'rows':null,'bytes':null};const a=Cache['storage']?.['getStats'];if(typeof a!=='function')return{'rows':null,'bytes':null};try{const b=await a['call'](Cache['storage']);return{'rows':b?.['count']??null,'bytes':b?.['totalBytes']??null};}catch{return{'rows':null,'bytes':null};}}function buildCacheContext(a){return{'operation_type':deriveOpType('cache',a),'data':a};}function cacheSuccess(a,b){return{'content':[{'type':'text','text':JSON['stringify'](a,null,0x2)}],'structuredContent':{'result':{'status':'success','data':a},'semantic':buildDataSemantic(a,b)}};}export const handleCacheOperation=async a=>{let b;try{b=strictParse(LocalCacheOperationSchema,a,'local_cache_operation\x20input');}catch(d){return{'content':[{'type':'text','text':'Error:\x20'+(d instanceof Error?d['message']:String(d))}],'structuredContent':{'result':{'status':'error','error':d instanceof Error?d['message']:String(d),'error_code':'invalid_param','retryable':![],'recovery_hint':'Pass\x20exactly\x20one\x20nested\x20operation:\x20{status:{op:\x27status\x27}},\x20{clear_prefix:{op:\x27clear_prefix\x27,prefix:\x27objectv2\x27}},\x20{clear:{op:\x27clear\x27}},\x20{refresh_chain_scope:{op:\x27refresh_chain_scope\x27}},\x20or\x20{clear_inflight:{op:\x27clear_inflight\x27}}.'}}};}const c=buildCacheContext(b);try{if(b['status']){const {rows:f,bytes:g}=await readStorageStats();return cacheSuccess({'op':'status','chain_identity':Cache['chainIdentityOf']()??null,'storage_attached':Cache['hasStorage'](),'memory_entries':Cache['memory']['size'],'storage_rows':f,'storage_bytes':g},c);}if(b['clear_prefix']){const {prefix:h}=b['clear_prefix'];return await Cache['clearPrefix'](h),cacheSuccess({'op':'clear_prefix','prefix':h,'chain_identity':Cache['chainIdentityOf']()??null},c);}if(b['clear'])return await Cache['clear'](),cacheSuccess({'op':'clear','cleared':!![],'chain_identity':Cache['chainIdentityOf']()??null},c);if(b['clear_inflight']){const i=clearInFlightMarkers();return cacheSuccess({'op':'clear_inflight','cleared':i},c);}if(b['refresh_chain_scope']){const j=Cache['chainIdentityOf']()??null;clearChainScope();const k=await resolveChainIdentity(b['refresh_chain_scope']['network'])??null;return cacheSuccess({'op':'refresh_chain_scope','previous_chain_identity':j,'chain_identity':k,'changed':k!==null&&k!==j,'resolved':k!==null},c);}return accountError('No\x20cache\x20operation\x20specified',c);}catch(l){const m=l instanceof Error?l['message']:String(l);return{'content':[{'type':'text','text':'Error:\x20'+m}],'structuredContent':{'result':{'status':'error','error':m,'error_code':'unknown_error','retryable':!![],'recovery_hint':'If\x20the\x20cache\x20backend\x20is\x20locked\x20or\x20corrupt,\x20use\x20{clear:\x20{op:\x27clear\x27}}\x20to\x20drop\x20everything,\x20or\x20{refresh_chain_scope:\x20{op:\x27refresh_chain_scope\x27}}\x20if\x20the\x20node\x20was\x20reset.'},'semantic':buildDataSemantic(undefined,c,!![],m)}};}};
|
|
1
|
+
import{wrapLocalHandler}from'../shared.js';import{withFaucetRetry}from'../retry.js';import{strictParse}from'../../schema/index.js';import{AccountOperationSchema,LocalMarkOperationSchema,LocalInfoOperationSchema,LocalHistoryOperationSchema,LocalCacheOperationSchema}from'../../schema/index.js';import{Cache}from'@wowok/wowok/w/local/cache';import{Account}from'@wowok/wowok/w/local';import{clearInFlightMarkers}from'../../composition/inflight.js';import{clearChainScope,resolveChainIdentity}from'@wowok/wowok/w/local/chain-scope';import{account_operation,local_mark_operation,local_info_operation,local_history_operation,GasTokenType,isFundApprovalExempt}from'@wowok/wowok';import{parseAmount,generateFundConfirmation,generateSkillsHint,formatAmountText}from'../../knowledge/fund-layer.js';import{buildDataSemantic,normalizeErrorMessage}from'../../schema/call/semantic.js';import{resolveNetwork}from'./network.js';function deriveOpType(a,b){for(const c of Object['keys'](b)){if(b[c]!==undefined)return a+'_'+String(c);}return a+'_unknown';}function accountError(a,b){return{'content':[{'type':'text','text':'Error:\x20'+a}],'structuredContent':{'result':{'status':'error','error':a},'semantic':buildDataSemantic(undefined,b,!![],a)}};}function buildAccountContext(a){return{'operation_type':deriveOpType('account',a),'data':a};}const DEFAULT_ACCOUNT_CLIENT_ONLY='The\x20default\x20account\x20is\x20the\x20app\x27s\x20root\x20identity\x20and\x20is\x20managed\x20by\x20the\x20'+'client\x20Wallet\x20app\x20only\x20—\x20it\x20cannot\x20be\x20renamed\x20or\x20suspended\x20via\x20MCP.\x20'+'Ask\x20the\x20user\x20to\x20rename\x20or\x20suspend\x20it\x20in\x20the\x20client\x27s\x20Wallet\x20tab,\x20or\x20'+'target\x20a\x20named\x20(non-default)\x20account\x20instead.',SWAP_DEFAULT_ACCOUNT_CLIENT_ONLY='Swapping\x20a\x20name\x20with\x20the\x20default\x20account\x20is\x20not\x20allowed\x20via\x20MCP\x20—\x20the\x20'+'default\x20account\x20is\x20the\x20app\x27s\x20root\x20identity\x20and\x20is\x20managed\x20by\x20the\x20client\x20'+'Wallet\x20app\x20only.\x20Ask\x20the\x20user\x20to\x20manage\x20it\x20in\x20the\x20client\x27s\x20Wallet\x20tab,\x20'+'or\x20swap\x20two\x20named\x20(non-default)\x20accounts\x20instead.';async function isDefaultAccountTarget(a){if(a===undefined||a['trim']()==='')return!![];try{const b=await Account['Instance']()['get'](a);return!!b&&!b['suspended']&&(b['name']??'')==='';}catch{return![];}}function isDefaultNameRef(a){return a===undefined||a['trim']()==='';}async function fundProcessCoinAmount(a,b,c){try{const d=await parseAmount(a,b,c);return{'parsed':d};}catch(f){return{'error':f instanceof Error?f['message']:String(f)};}}async function coinFundGate(a,b,c,d,e,f){const {parsed:g,error:h}=await fundProcessCoinAmount(a,b,c);if(h||!g)return{'blocked':accountError(h??'Amount\x20parsing\x20failed',f)};try{const j=await Account['Instance']()['balance'](b,e['accountRef'],c),k=j?.['totalBalance'];if(k!==undefined&&BigInt(k)<g['smallestUnit']){const l=e['accountRef']?'\x27'+e['accountRef']+'\x27':'(default\x20account)';return{'blocked':accountError('Insufficient\x20balance:\x20'+e['key']+'\x20requires\x20'+(formatAmountText(g['smallestUnit'],g['decimals'],g['tokenSymbol'])+'\x20but\x20account\x20'+l+'\x20holds\x20')+(formatAmountText(k,g['decimals'],g['tokenSymbol'])+'.\x20')+'Fund\x20the\x20account\x20first\x20(faucet\x20on\x20testnet/localnet)\x20or\x20lower\x20the\x20amount.',f)};}}catch{}const i=isFundApprovalExempt(c,b,g['smallestUnit']['toString']());if(!i&&d!==!![]){const m=generateFundConfirmation([{'path':e['amountPath'],'displayAmount':g['displayAmount'],'tokenType':g['tokenType'],'tokenSymbol':g['tokenSymbol'],'decimals':g['decimals'],'smallestUnit':g['smallestUnit']['toString'](),'verified':g['verified'],'source':g['source'],'converted':g['converted'],'context':e['context']}],[]),n=generateSkillsHint(m),o=[m['message'],'',...e['detailLines'],n??'','The\x20'+e['key']+'\x20was\x20NOT\x20executed.\x20If\x20the\x20user\x20consents,\x20re-call\x20with\x20the\x20SAME\x20parameters\x20plus\x20'+e['key']+'.confirmed=true.']['filter'](p=>p!=='')['join']('\x0a');return{'blocked':{'content':[{'type':'text','text':o}],'structuredContent':{'result':{'status':'pending_confirmation','operation':e['operation'],'message':o,'rule_id':e['ruleId']},'semantic':{...buildDataSemantic(undefined,f,!![],'pending\x20user\x20confirmation'),'summary':e['summary']}}}};}return{'parsed':g};}async function executeAccountOperation(a,b){try{const c=await withFaucetRetry(account_operation)(a);try{if(c['transfer']){const d=c['transfer'];d['network']=await resolveNetwork(a['transfer']?.['network']),d['network_source']=a['transfer']?.['network']?'request':'session_default';}if(c['get']){const e=c['get'];e['network']=await resolveNetwork(a['get']?.['network']),e['network_source']=a['get']?.['network']?'request':'session_default';}}catch{}return{'content':[{'type':'text','text':JSON['stringify'](c)}],'structuredContent':{'result':{'status':'success','data':c},'semantic':buildDataSemantic(c,b)}};}catch(f){const g=normalizeErrorMessage(f);if(/free a slot|MAX_ACCOUNTS|max(?:imum)? (?:number of )?accounts/i['test'](g))return accountError(g+'\x0aACCOUNT\x20POOL\x20RECOVERY\x20(F-17):\x20the\x20local\x20account\x20pool\x20is\x20a\x20static\x20quota.\x20Recover\x20in\x20order:\x20'+'(1)\x20`account_operation`\x20sub-op\x20`suspend`\x20one\x20idle\x20test\x20account\x20—\x20each\x20suspend\x20frees\x20EXACTLY\x20one\x20slot,\x20so\x20pair\x20every\x20suspend\x20with\x20the\x20next\x20`gen`;\x20'+'a\x20suspend\x20candidate\x20has\x20no\x20unreturned\x20funds\x20and\x20NO\x20in-flight\x20order\x20(an\x20[UNOBSERVED-PENDING]\x20marker\x20means\x20the\x20outcome\x20is\x20still\x20unknown\x20—\x20never\x20suspend\x20it);\x20'+'(2)\x20or\x20raise\x20the\x20cap\x20within\x20the\x20build\x20limit\x20via\x20the\x20WOWOK_MAX_ACCOUNTS\x20env\x20var\x20(must\x20be\x20set\x20before\x20the\x20session\x20starts);\x20'+'(3)\x20rename/swap_name\x20never\x20frees\x20a\x20slot.',b);return accountError(g,b);}}export const handleAccountOperation=async a=>{let b;try{b=strictParse(AccountOperationSchema,a,'account_operation\x20input');}catch(d){return accountError('Parameter\x20validation\x20failed:\x20'+(d?.['message']??String(d)));}const c=buildAccountContext(b);if(b['suspend']!==undefined||b['rename']!==undefined){const f=b['suspend']?.['name_or_address']??b['rename']?.['name_or_address'];if(await isDefaultAccountTarget(f))return accountError(DEFAULT_ACCOUNT_CLIENT_ONLY,c);}if(b['swap_name']!==undefined){const {name1:g,name2:h}=b['swap_name'];if(isDefaultNameRef(g)||isDefaultNameRef(h))return accountError(SWAP_DEFAULT_ACCOUNT_CLIENT_ONLY,c);}if(b['transfer']!==undefined){const i=b['transfer'],j=await coinFundGate(i['amount'],i['token_type']??GasTokenType,i['network'],i['confirmed'],{'key':'transfer','amountPath':'transfer.amount','context':'Account\x20token\x20transfer','operation':'account_transfer','ruleId':'account_transfer_fund_movement','summary':'Token\x20transfer\x20blocked\x20pending\x20user\x20confirmation.\x20Re-call\x20with\x20transfer.confirmed=true\x20to\x20proceed.','detailLines':['Recipient:\x20'+(i['name_or_address_to']??'(default\x20account)'),'Sender:\x20'+(i['name_or_address_from']??'(default\x20account)')],'accountRef':i['name_or_address_from']},c);if('blocked'in j)return j['blocked'];const k={...b,'transfer':{...i,'amount':j['parsed']['smallestUnit']['toString']()}};return delete k['transfer']['confirmed'],executeAccountOperation(k,c);}if(b['get']!==undefined){const l=b['get'],m=await coinFundGate(l['balance_required'],l['token_type']??GasTokenType,l['network'],l['confirmed'],{'key':'get','amountPath':'get.balance_required','context':'Coin\x20object\x20production\x20(split/merge\x20+\x20self-delivery)','operation':'account_get_coin_object','ruleId':'account_get_fund_movement','summary':'Coin\x20object\x20production\x20blocked\x20pending\x20user\x20confirmation.\x20Re-call\x20with\x20get.confirmed=true\x20to\x20proceed.','detailLines':['Account:\x20'+(l['name_or_address']??'(default\x20account)'),'Effect:\x20splits/merges\x20the\x20account\x27s\x20coins\x20and\x20self-delivers\x20a\x20coin\x20object;\x20funds\x20never\x20leave\x20the\x20account\x20but\x20GAS\x20IS\x20SPENT.','On\x20success\x20the\x20result\x20reports\x20the\x20coin\x27s\x20ACTUAL\x20on-chain\x20balance\x20—\x20check\x20it\x20against\x20the\x20amount\x20you\x20need\x20before\x20relying\x20on\x20it.'],'accountRef':l['name_or_address']},c);if('blocked'in m)return m['blocked'];const n={...b,'get':{...l,'balance_required':m['parsed']['smallestUnit']['toString']()}};return delete n['get']['confirmed'],executeAccountOperation(n,c);}return executeAccountOperation(b,c);};export const handleMarkOperation=wrapLocalHandler({'schema':LocalMarkOperationSchema,'operationFn':local_mark_operation,'parseLabel':'local_mark_operation\x20input','buildContext':a=>{const b={'operation_type':deriveOpType('mark',a),'data':a},c=a;return c['add']&&Array['isArray'](c['add']['data'])&&c['add']['data']['length']>0x0&&(b['pre_warnings']=['Cross-network\x20consistency\x20(FIX-011):\x20LocalMark\x20names\x20are\x20scoped\x20per\x20network.\x20'+'When\x20creating\x20marks\x20for\x20the\x20same\x20logical\x20object\x20on\x20different\x20networks\x20'+'(e.g.\x20testnet\x20and\x20mainnet),\x20use\x20the\x20SAME\x20name\x20value\x20to\x20keep\x20name-based\x20'+'references\x20portable.\x20Before\x20creating\x20a\x20mark\x20on\x20mainnet,\x20consider\x20querying\x20'+'testnet\x20via\x20query_local\x20with\x20network=\x27testnet\x27\x20to\x20check\x20for\x20an\x20existing\x20'+'same-named\x20mark\x20and\x20replicate\x20it.']),b;}});export const handleInfoOperation=wrapLocalHandler({'schema':LocalInfoOperationSchema,'operationFn':local_info_operation,'parseLabel':'local_info_operation\x20input','buildContext':a=>({'operation_type':deriveOpType('local_info',a),'data':a})});export const handleHistoryOperation=wrapLocalHandler({'schema':LocalHistoryOperationSchema,'operationFn':local_history_operation,'parseLabel':'local_history_operation\x20input','buildContext':a=>({'operation_type':deriveOpType('local_history',a),'data':a})});async function readStorageStats(){if(!Cache['hasStorage']())return{'rows':null,'bytes':null};const a=Cache['storage']?.['getStats'];if(typeof a!=='function')return{'rows':null,'bytes':null};try{const b=await a['call'](Cache['storage']);return{'rows':b?.['count']??null,'bytes':b?.['totalBytes']??null};}catch{return{'rows':null,'bytes':null};}}function buildCacheContext(a){return{'operation_type':deriveOpType('cache',a),'data':a};}function cacheSuccess(a,b){return{'content':[{'type':'text','text':JSON['stringify'](a,null,0x2)}],'structuredContent':{'result':{'status':'success','data':a},'semantic':buildDataSemantic(a,b)}};}export const handleCacheOperation=async a=>{let b;try{b=strictParse(LocalCacheOperationSchema,a,'local_cache_operation\x20input');}catch(d){return{'content':[{'type':'text','text':'Error:\x20'+(d instanceof Error?d['message']:String(d))}],'structuredContent':{'result':{'status':'error','error':d instanceof Error?d['message']:String(d),'error_code':'invalid_param','retryable':![],'recovery_hint':'Pass\x20exactly\x20one\x20nested\x20operation:\x20{status:{op:\x27status\x27}},\x20{clear_prefix:{op:\x27clear_prefix\x27,prefix:\x27objectv2\x27}},\x20{clear:{op:\x27clear\x27}},\x20{refresh_chain_scope:{op:\x27refresh_chain_scope\x27}},\x20or\x20{clear_inflight:{op:\x27clear_inflight\x27}}.'}}};}const c=buildCacheContext(b);try{if(b['status']){const {rows:f,bytes:g}=await readStorageStats();return cacheSuccess({'op':'status','chain_identity':Cache['chainIdentityOf']()??null,'storage_attached':Cache['hasStorage'](),'memory_entries':Cache['memory']['size'],'storage_rows':f,'storage_bytes':g},c);}if(b['clear_prefix']){const {prefix:h}=b['clear_prefix'];return await Cache['clearPrefix'](h),cacheSuccess({'op':'clear_prefix','prefix':h,'chain_identity':Cache['chainIdentityOf']()??null},c);}if(b['clear'])return await Cache['clear'](),cacheSuccess({'op':'clear','cleared':!![],'chain_identity':Cache['chainIdentityOf']()??null},c);if(b['clear_inflight']){const i=clearInFlightMarkers();return cacheSuccess({'op':'clear_inflight','cleared':i},c);}if(b['refresh_chain_scope']){const j=Cache['chainIdentityOf']()??null;clearChainScope();const k=await resolveChainIdentity(b['refresh_chain_scope']['network'])??null;return cacheSuccess({'op':'refresh_chain_scope','previous_chain_identity':j,'chain_identity':k,'changed':k!==null&&k!==j,'resolved':k!==null},c);}return accountError('No\x20cache\x20operation\x20specified',c);}catch(l){const m=l instanceof Error?l['message']:String(l);return{'content':[{'type':'text','text':'Error:\x20'+m}],'structuredContent':{'result':{'status':'error','error':m,'error_code':'unknown_error','retryable':!![],'recovery_hint':'If\x20the\x20cache\x20backend\x20is\x20locked\x20or\x20corrupt,\x20use\x20{clear:\x20{op:\x27clear\x27}}\x20to\x20drop\x20everything,\x20or\x20{refresh_chain_scope:\x20{op:\x27refresh_chain_scope\x27}}\x20if\x20the\x20node\x20was\x20reset.'},'semantic':buildDataSemantic(undefined,c,!![],m)}};}};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { LocalMarkAccess, LocalMarkWrite } from "./onchain-name-registration.js";
|
|
2
|
+
export declare function namespacedMarkName(ns: string, name: string): string;
|
|
3
|
+
export declare function isNamespacedMarkName(name: string): boolean;
|
|
4
|
+
export declare function sessionMarkNamespace(): string;
|
|
5
|
+
export declare function activeMarkNamespace(): string | undefined;
|
|
6
|
+
export declare function setMarkNamespaceOverride(ns: string | undefined): void;
|
|
7
|
+
export declare function resetMarkNamespaceForTests(): void;
|
|
8
|
+
export interface NamespacedPutResult {
|
|
9
|
+
written: Array<{
|
|
10
|
+
name: string;
|
|
11
|
+
address: string;
|
|
12
|
+
}>;
|
|
13
|
+
bareSkipped?: {
|
|
14
|
+
reason: "conflict";
|
|
15
|
+
existingAddress: string;
|
|
16
|
+
};
|
|
17
|
+
warnings: string[];
|
|
18
|
+
}
|
|
19
|
+
export declare function putMarkNamespaced(access: LocalMarkAccess, write: LocalMarkWrite, ns?: string | undefined): Promise<NamespacedPutResult>;
|
|
20
|
+
export declare function namespacedLocalMarkAccess(base: LocalMarkAccess, ns?: string | undefined): LocalMarkAccess;
|
|
21
|
+
export interface MarkResolution {
|
|
22
|
+
name: string;
|
|
23
|
+
ns?: string;
|
|
24
|
+
address?: string;
|
|
25
|
+
source: "ns" | "bare" | "none";
|
|
26
|
+
nsAddress?: string;
|
|
27
|
+
bareAddress?: string;
|
|
28
|
+
collisionWarning?: string;
|
|
29
|
+
}
|
|
30
|
+
export declare function resolveMarkNamespaced(access: LocalMarkAccess, name: string, ns?: string | undefined): Promise<MarkResolution>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export function namespacedMarkName(a,b){return a+':'+b;}export function isNamespacedMarkName(a){const b=a['indexOf'](':');return b>0x0&&b<a['length']-0x1;}const BOOT_EPOCH=Date['now']();let namespaceOverride;export function sessionMarkNamespace(){return's'+BOOT_EPOCH;}export function activeMarkNamespace(){if(namespaceOverride!==undefined)return namespaceOverride===''?undefined:namespaceOverride;return sessionMarkNamespace();}export function setMarkNamespaceOverride(a){namespaceOverride=a;}export function resetMarkNamespaceForTests(){namespaceOverride=undefined;}export async function putMarkNamespaced(a,b,c=activeMarkNamespace()){const d={'written':[],'warnings':[]},f=b['name']['value'];if(!c||isNamespacedMarkName(f))return await a['put']([b]),d['written']['push']({'name':f,'address':b['address']}),d;const g=namespacedMarkName(c,f);let h=![];try{await a['put']([{'name':{'value':g,'replaceExistName':!![]},'address':b['address'],'tags':b['tags']}]),h=!![];}catch(j){d['warnings']['push']('MARK\x20NS:\x20composite\x20row\x20\x22'+g+'\x22\x20could\x20not\x20be\x20written\x20('+(j instanceof Error?j['message']:String(j))+')\x20—\x20'+'the\x20session-scoped\x20binding\x20is\x20missing;\x20bare-name\x20fallback\x20applies\x20for\x20reads');}h&&d['written']['push']({'name':g,'address':b['address']});let i;try{i=await a['getAddress'](f);}catch{i=undefined;}if(i!==undefined&&i['toLowerCase']()!==b['address']['toLowerCase']())return d['bareSkipped']={'reason':'conflict','existingAddress':i},d['warnings']['push']('MARK\x20COLLISION\x20(ISS-015):\x20bare\x20name\x20\x22'+f+'\x22\x20already\x20resolves\x20to\x20'+i+';\x20THIS\x20registration\x20'+('wanted\x20'+b['address']+'.\x20The\x20session\x20row\x20\x22'+g+'\x22\x20was\x20written\x20and\x20reads\x20in\x20THIS\x20session\x20resolve\x20')+'there;\x20the\x20bare\x20name\x20was\x20left\x20UNTOUCHED\x20(it\x20may\x20be\x20another\x20build\x27s\x20binding\x20—\x20force\x20with\x20a\x20NEW\x20name\x20or\x20'+'release\x20the\x20old\x20one\x20via\x20local_mark\x20release).'),d;try{await a['put']([{'name':{'value':f,'replaceExistName':![]},'address':b['address'],'tags':b['tags']}]),d['written']['push']({'name':f,'address':b['address']});}catch(k){d['warnings']['push']('MARK\x20NS:\x20bare\x20row\x20\x22'+f+'\x22\x20could\x20not\x20be\x20written\x20('+(k instanceof Error?k['message']:String(k))+')\x20—\x20'+'legacy\x20readers\x20will\x20not\x20resolve\x20this\x20name');}return d;}export function namespacedLocalMarkAccess(a,b=activeMarkNamespace()){return{'getAddress':async c=>(await resolveMarkNamespaced(a,c??'',b))['address'],'put':async c=>{const d=[];for(const e of c){d['push'](await putMarkNamespaced(a,e,b));}return d;}};}export async function resolveMarkNamespaced(a,b,c=activeMarkNamespace()){const d=(b??'')['trim'](),e={'name':d,'source':'none'};if(d==='')return e;if(c!==undefined&&!isNamespacedMarkName(d)){e['ns']=c;const [g,h]=await Promise['all']([a['getAddress'](namespacedMarkName(c,d))['catch'](()=>undefined),a['getAddress'](d)['catch'](()=>undefined)]);e['nsAddress']=g,e['bareAddress']=h;if(g!==undefined)e['address']=g,e['source']='ns',h!==undefined&&h['toLowerCase']()!==g['toLowerCase']()&&(e['collisionWarning']='NAME\x20COLLISION\x20(ISS-015):\x20\x22'+d+'\x22\x20resolves\x20to\x20'+g+'\x20in\x20THIS\x20session\x20('+c+')\x20but\x20the\x20'+('bare\x20global\x20row\x20points\x20at\x20'+h+'\x20(another\x20build/session\x27s\x20binding).\x20THIS\x20session\x20keeps\x20the\x20')+'session\x20row;\x20verify\x20the\x20bare\x20row\x20is\x20not\x20what\x20an\x20older\x20tool\x20call\x20froze\x20on-chain.');else h!==undefined&&(e['address']=h,e['source']='bare');return e;}const f=await a['getAddress'](d)['catch'](()=>undefined);return f!==undefined&&(e['address']=f,e['source']='bare'),e;}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{strictParse,MessengerOperationInputSchema}from'../../schema/index.js';import{watch_conversations,send_message,send_file,watch_messages,export_attachment,pull_messages,generate_wts,verify_wts,sign_wts,wts2html,proof_message,mark_messages_as_viewed,mark_conversation_as_viewed,blacklist,friendslist,guardlist,settings,LocalInfo,GetAccountOrMark_Address,Config}from'@wowok/wowok';import{classifyError,buildDataSemantic}from'../../schema/call/semantic.js';import{classifyCommunicationEvidence}from'../../communication/evidence.js';import{pageMessagesBySeq,recordConversationRead,getConversationReadReceipt}from'../../communication/message-cursors.js';import{noteProofIssued}from'../../communication/proof-reuse.js';import{isModuleLoadError,noteRuntimeModuleFault}from'../runtime-health.js';import{attestWtsFile,evaluateWtsSealedAvailability}from'../../communication/wts-attestation.js';import{goalEngine}from'../../goal/GoalEngine.js';export function normalizeAccountOrMark(a){if(typeof a==='string')return{'name_or_address':a,'local_mark_first':!![]};return a;}export function normalizeOptionalAccountOrMark(a){if(a===undefined||a===null)return undefined;return normalizeAccountOrMark(a);}export function normalizeManyAccountOrMark(a){if(a===undefined||a===null)return undefined;if(Array['isArray'](a))return{'entities':a['map'](b=>typeof b==='string'?{'name_or_address':b,'local_mark_first':!![]}:b),'check_all_founded':!![]};return a;}function communicationEvidencePayload(a,b){const c=b??{};switch(a){case'send_message':case'send_file':{const d=typeof c['messageId']==='string'?c['messageId']:undefined;return{'detail':d?'message\x20'+d:'message\x20sent','data':d?{'message_id':d}:{}};}case'send_required_info':{const e=typeof c['messageId']==='string'?c['messageId']:undefined,f=Array['isArray'](c['sent_fields'])?c['sent_fields']:undefined;return{'detail':'required-info\x20confirmation\x20sent','data':{...e?{'message_id':e}:{},...f?{'sent_fields':f}:{}}};}case'generate_wts':{const g=typeof c['totalMessageCount']==='number'?c['totalMessageCount']:undefined,h=Array['isArray'](c['files'])?c['files']:undefined,i=Array['isArray'](c['htmlFiles'])?c['htmlFiles']:undefined;return{'detail':'WTS\x20evidence\x20packet\x20generated','data':{...g!==undefined?{'message_count':g}:{},...h?{'files':h}:{},...i?{'html_reports':i}:{}}};}case'verify_wts':{const j=c['attestation'],k=typeof c['error']==='string'?c['error']:undefined;return{'detail':j?'WTS\x20verification\x20—\x20'+j['attested_count']+'/'+j['total_messages']+'\x20message(s)\x20server-attested':'WTS\x20verification\x20—\x20server\x20attestation\x20unavailable','data':{'valid':c['valid']===!![],'hash_valid':c['hashValid']===!![],'has_signature':c['hasSignature']===!![],...c['signatureValid']===undefined?{}:{'packet_signature_valid':c['signatureValid']===!![]},...k?{'error':k}:{},...j?{'attested_messages':j['attested_count'],'total_messages':j['total_messages'],'fully_attested':j['fully_attested'],'packet_signed':j['packet_signed'],'server_public_keys':j['server_public_keys'],'verdict':j['verdict']}:{'attestation':'unavailable\x20—\x20cross-check\x20the\x20seal\x20signer\x20and\x20server\x20keys\x20independently\x20before\x20treating\x20the\x20packet\x20as\x20third-party\x20evidence'}}};}case'sign_wts':{return{'detail':typeof b==='string'?b:'WTS\x20evidence\x20signed','data':{}};}case'proof_message':{const l=typeof c['proofAddress']==='string'?c['proofAddress']:undefined;return{'detail':l?'proof\x20'+l:'message\x20proofed\x20on-chain','data':l?{'proof_address':l}:{}};}default:return{'detail':a,'data':{}};}}export function throwIfTransportAmbiguous(a,b){const c=b instanceof Error?b['message']:String(b);if(/timeout|timed out|ETIMEDOUT|ECONNRESET|ECONNREFUSED|EAI_AGAIN|socket\s+hang\s+up|connection\s+(refused|reset|lost)|fetch\s+failed|unexpected\s+status\s+code:\s*5\d\d/i['test'](c))throw new Error('messenger\x20delivery\x20state\x20UNKNOWN\x20on\x20'+a+':\x20the\x20transport\x20failed\x20AFTER\x20submission\x20('+c+')\x20—\x20'+'the\x20relay\x20may\x20have\x20already\x20committed\x20the\x20message\x20despite\x20the\x20client-side\x20failure.\x20'+'Do\x20NOT\x20re-send\x20blindly:\x20first\x20check\x20the\x20conversation\x20(watch_conversations\x20/\x20read\x20messages)\x20'+'for\x20the\x20same\x20payload;\x20re-send\x20only\x20after\x20confirming\x20it\x20never\x20arrived.\x20A\x20blind\x20re-send\x20DOUBLE-DELIVERS.');throw b instanceof Error?b:new Error(c);}const LOCAL_SCAN_PAGE_SIZE=0x3e8,LOCAL_SCAN_MAX_PAGES=0xa;async function scanConversationMessages(a,b){const c=[];let d=0x0;for(let e=0x0;e<LOCAL_SCAN_MAX_PAGES;e++){const f=await watch_messages({'account':a,'peerAddress':b,'sortOrder':'desc','skipAutoMarkViewed':!![],'limit':LOCAL_SCAN_PAGE_SIZE,'offset':d});c['push'](...f);if(f['length']<LOCAL_SCAN_PAGE_SIZE)return{'messages':c,'truncated':![]};d+=LOCAL_SCAN_PAGE_SIZE;}return{'messages':c,'truncated':!![]};}async function resolveMessengerAddress(a,b){try{const d=await GetAccountOrMark_Address(a);if(typeof d==='string'&&d['length']>0x0)return d;}catch{}const c=typeof a==='string'?a:a?.['name_or_address'];if(typeof c==='string'&&c['length']>0x0)return c;throw new Error(b+'\x20could\x20not\x20be\x20resolved\x20to\x20a\x20messenger\x20account\x20address');}export async function handleMessengerOperation(a){let b;try{b=strictParse(MessengerOperationInputSchema,a,'messenger_operation\x20input');const c=b['operation'];let d,f;switch(b['operation']){case'watch_conversations':{const i=await watch_conversations(b['filter']);d={'operation':'watch_conversations','result':i};break;}case'send_message':{let j;try{j=await send_message(normalizeOptionalAccountOrMark(b['from']),normalizeAccountOrMark(b['to']),b['content'],b['options']);}catch(m){throwIfTransportAmbiguous('send_message',m);}if(j['authRequired']){d={'operation':'send_message','result':j};break;}const k=j,l={...k,'merkleData':k['merkleData']?{'leafIndex':k['merkleData']['leafIndex'],'prevRoot':k['merkleData']['prevRoot'],'newRoot':k['merkleData']['newRoot'],'serverSignature':k['merkleData']['serverSignature'],'serverTimestamp':k['merkleData']['serverTimestamp'],'serverPublicKey':k['merkleData']['serverPublicKey']}:undefined};d={'operation':'send_message','result':l};break;}case'send_file':{let n;try{n=await send_file(normalizeOptionalAccountOrMark(b['from']),normalizeAccountOrMark(b['to']),b['filePath'],b['options']);}catch(q){throwIfTransportAmbiguous('send_file',q);}const o=n,p={...o,'merkleData':o['merkleData']?{'leafIndex':o['merkleData']['leafIndex'],'prevRoot':o['merkleData']['prevRoot'],'newRoot':o['merkleData']['newRoot'],'serverSignature':o['merkleData']['serverSignature'],'serverTimestamp':o['merkleData']['serverTimestamp'],'serverPublicKey':o['merkleData']['serverPublicKey']}:undefined};d={'operation':'send_file','result':p};break;}case'send_required_info':{let r=b['content'];const s=[];let t;if(!r){const x=await GetAccountOrMark_Address(b['from']),y=await LocalInfo['Instance']()['list'](undefined,x),z=b['fields'],A=z&&z['length']>0x0?y['filter'](B=>z['includes'](B['name'])):y;if(A['length']===0x0)throw new Error('No\x20LocalInfo\x20fields\x20available.\x20Add\x20private\x20info\x20first\x20via\x20local_info_operation.');r=A['map'](B=>B['name']+':\x20'+B['default'])['join']('\x0a'),s['push'](...A['map'](B=>B['name']));}else b['fields']&&b['fields']['length']>0x0&&(t=[...b['fields']]);const u=await send_message(normalizeOptionalAccountOrMark(b['from']),normalizeAccountOrMark(b['to']),r,b['options']),v=u,w={...v,'merkleData':v['merkleData']?{'leafIndex':v['merkleData']['leafIndex'],'prevRoot':v['merkleData']['prevRoot'],'newRoot':v['merkleData']['newRoot'],'serverSignature':v['merkleData']['serverSignature'],'serverTimestamp':v['merkleData']['serverTimestamp'],'serverPublicKey':v['merkleData']['serverPublicKey']}:undefined,...t?{'fields_ignored':t,'note':'content\x20took\x20precedence:\x20the\x20requested\x20LocalInfo\x20fields\x20listed\x20in\x20fields_ignored\x20were\x20NOT\x20assembled\x20and\x20NOT\x20sent\x20—\x20only\x20the\x20explicit\x20content\x20was\x20delivered.\x20To\x20send\x20the\x20LocalInfo\x20assembly\x20instead,\x20re-call\x20WITHOUT\x20content.'}:{},'sent_fields':s};d={'operation':'send_required_info','result':w};break;}case'watch_messages':{const B=b['filter']?{...b['filter'],'peerAddress':b['filter']['peerAddress']?normalizeAccountOrMark(b['filter']['peerAddress']):undefined,'account':b['filter']['account']?normalizeOptionalAccountOrMark(b['filter']['account']):undefined}:undefined,C=await watch_messages(B);d={'operation':'watch_messages','result':C};Array['isArray'](C)&&C['length']===0x0&&(f='watch_messages\x20returned\x200\x20messages:\x20it\x20reads\x20the\x20LOCAL\x20message\x20cache\x20only\x20and\x20never\x20contacts\x20the\x20'+'messenger\x20server,\x20so\x20messages\x20not\x20yet\x20pulled\x20are\x20invisible\x20here.\x20Run\x20pull_messages\x20for\x20this\x20'+'account/peer\x20first,\x20then\x20watch_messages\x20again.\x20(watch_messages\x20intentionally\x20never\x20advances\x20the\x20'+'pull\x20cursor\x20—\x20this\x20is\x20by\x20contract,\x20not\x20a\x20fault.)');break;}case'save_attachment':{const D=await export_attachment(normalizeOptionalAccountOrMark(b['account']),b['messageId'],{'outputDir':b['outputDir'],'saveAs':b['saveAs']});d={'operation':'save_attachment','result':D};break;}case'generate_wts':{const E=b['params']?{...b['params'],'peerAccount':normalizeAccountOrMark(b['params']['peerAccount']),'myAccount':normalizeOptionalAccountOrMark(b['params']['myAccount'])}:undefined,F=await generate_wts(E);let G={'sealed_available':null,'sealed_available_note':null};try{const H=F?.['files'],I=Array['isArray'](H)&&typeof H[0x0]==='string'&&H[0x0]?H[0x0]:undefined;I?G=evaluateWtsSealedAvailability(await verify_wts(I)):G={'sealed_available':null,'sealed_available_note':'Evidence-tier\x20pre-check\x20UNVERIFIED:\x20no\x20packet\x20file\x20was\x20returned\x20to\x20probe\x20—\x20the\x20third-party-verifiable\x20tier\x20is\x20UNKNOWN;\x20run\x20sign_wts\x20then\x20verify_wts\x20and\x20read\x20serverKeysOfficial/serverKeyAnchor\x20there.'};}catch{G={'sealed_available':null,'sealed_available_note':'Evidence-tier\x20pre-check\x20UNVERIFIED:\x20the\x20anchor\x20probe\x20failed\x20(the\x20key\x20book\x20or\x20chain\x20was\x20unreachable)\x20—\x20the\x20WTS\x20itself\x20was\x20generated\x20normally;\x20treat\x20the\x20third-party-verifiable\x20tier\x20as\x20UNKNOWN\x20and\x20re-probe\x20with\x20verify_wts\x20after\x20sign_wts.'};}d={'operation':'generate_wts','result':{...F??{},'sealed_available':G['sealed_available'],'sealed_available_note':G['sealed_available_note']}};break;}case'verify_wts':{const J=await verify_wts(b['wtsFilePath']),K=J?.['valid']===![]?'A\x20packet\x20generated\x20by\x20generate_wts\x20is\x20UNSEALED\x20(no\x20meta.signature)\x20and\x20always\x20fails\x20verification\x20—\x20run\x20sign_wts\x20on\x20this\x20file\x20first,\x20then\x20verify_wts\x20the\x20SIGNED\x20output.':undefined,L=await attestWtsFile(b['wtsFilePath']);let M;if(J?.['serverKeysOfficial']===!![]){const N=J?.['serverKeysOfficialNetwork'],O=J?.['serverKeyAnchor']?.['network'],P=[];if(N){let Q;try{Q=String(await Config['Instance']()['network_get']());}catch{}Q&&Q!==N&&P['push']('NETWORK\x20MISMATCH:\x20official-key\x20verification\x20scored\x20in\x20the\x20\x27'+N+'\x27\x20key\x20partition,\x20but\x20this\x20call\x20was\x20served\x20on\x20network\x20\x27'+Q+'\x27.\x20'+('The\x20verdict\x20is\x20evidence\x20for\x20\x27'+N+'\x27\x20only\x20—\x20quote\x20this\x20transcript\x20with\x20its\x20partition\x20stated,\x20or\x20switch\x20env.network\x20to\x20\x27'+N+'\x27\x20and\x20re-verify.')),N!=='mainnet'&&P['push']('PARTITION\x20RULE:\x20this\x20official\x20verdict\x20is\x20bound\x20to\x20the\x20\x27'+N+'\x27\x20partition\x20(anchor\x20network:\x20'+(O??N)+').\x20'+'For\x20a\x20MAINNET\x20case\x20the\x20ONLY\x20network-level\x20truth\x20is\x20an\x20on-chain\x20Proof\x20anchor\x20—\x20a\x20proof_message\x20re-anchored\x20on\x20mainnet.\x20'+'A\x20file-level\x20official\x20verdict\x20from\x20a\x20non-mainnet\x20partition\x20is\x20rehearsal\x20evidence\x20and\x20can\x20never\x20ground\x20a\x20mainnet\x20ruling.');}if(P['length']>0x0)M=P['join']('\x20');}d={'operation':'verify_wts','result':L?{...J,...K?{'hint':K}:{},...M?{'network_caveat':M}:{},'attestation':L}:{...J,...K?{'hint':K}:{},...M?{'network_caveat':M}:{},'attestation_unavailable':'Per-message\x20server\x20attestation\x20could\x20not\x20be\x20computed\x20(file\x20not\x20readable\x20locally\x20or\x20not\x20JSON).\x20The\x20guarded\x20verifier\x27s\x20valid\x20flag\x20already\x20required\x20server\x20attestation\x20+\x20seal;\x20cross-check\x20the\x20seal\x20signer\x20and\x20server\x20keys\x20yourself\x20before\x20treating\x20it\x20as\x20third-party\x20evidence.'}};break;}case'sign_wts':{const R=await sign_wts(b['wtsFilePath'],normalizeOptionalAccountOrMark(b['account']),b['outputPath']);d={'operation':'sign_wts','result':R};break;}case'wts2html':{const S=await wts2html(b['wtsPath'],b['options']);d={'operation':'wts2html','result':S};break;}case'proof_message':{let T;try{T=await proof_message(normalizeOptionalAccountOrMark(b['account']),b['messageId'],b['network']);}catch(V){if(isModuleLoadError(V)){const W=noteRuntimeModuleFault('proof_message',V);throw new Error('SDK\x20runtime\x20is\x20stale\x20in\x20this\x20process:\x20the\x20loaded\x20module\x20graph\x20references\x20chunk\x20\x22'+W['module']+'\x22\x20'+'which\x20no\x20longer\x20exists\x20on\x20disk\x20(the\x20SDK\x20dist\x20was\x20rebuilt\x20after\x20this\x20MCP\x20process\x20started).\x20'+'Restart\x20the\x20MCP\x20server\x20to\x20reload\x20the\x20rebuilt\x20dist;\x20this\x20operation\x20cannot\x20succeed\x20until\x20then.');}throw V;}const U=T?.['proofAddress'];if(typeof U==='string')noteProofIssued(U);d={'operation':'proof_message','result':T};break;}case'blacklist':{const X={'account':normalizeOptionalAccountOrMark(b['account']),'op':b['blacklist']['op']};'users'in b['blacklist']&&(X['users']=normalizeManyAccountOrMark(b['blacklist']['users']));const Y=await blacklist(X);d={'operation':'blacklist','op':b['blacklist']['op'],'result':Y['result']};break;}case'friendslist':{const Z={'account':normalizeOptionalAccountOrMark(b['account']),'op':b['friendslist']['op']};'users'in b['friendslist']&&(Z['users']=normalizeManyAccountOrMark(b['friendslist']['users']));const a0=await friendslist(Z);d={'operation':'friendslist','op':b['friendslist']['op'],'result':a0['result']};break;}case'guardlist':{const a1=await guardlist({'account':normalizeOptionalAccountOrMark(b['account']),...b['guardlist']});d={'operation':'guardlist','op':b['guardlist']['op'],'result':a1['result']};break;}case'settings':{const a2=await settings({'account':normalizeOptionalAccountOrMark(b['account']),...b['settings']});d={'operation':'settings','op':b['settings']['op'],'result':a2['result']};break;}case'mark_messages_as_viewed':{const a3=await mark_messages_as_viewed(b['messageIds'],normalizeOptionalAccountOrMark(b['account']));d={'operation':'mark_messages_as_viewed','result':a3};break;}case'mark_conversation_as_viewed':{const a4=await mark_conversation_as_viewed(normalizeAccountOrMark(b['peerAddress']),normalizeOptionalAccountOrMark(b['account']));d={'operation':'mark_conversation_as_viewed','result':a4};break;}case'mark_conversation_read':{const a5=await resolveMessengerAddress(b['account'],'mark_conversation_read.account'),a6=await resolveMessengerAddress(b['peerAddress'],'mark_conversation_read.peerAddress'),a7=await scanConversationMessages(a5,normalizeAccountOrMark(b['peerAddress'])),a8=a7['messages']['filter'](af=>af['direction']==='received'&&typeof af['leafIndex']==='number')['map'](af=>af['leafIndex']),a9=a8['length']>0x0?Math['max'](...a8):null,aa=typeof b['through_seq']==='number'?b['through_seq']:null;let ab=aa??a9,ac=![];ab!==null&&(a9===null||ab>a9)&&(ab=a9,ac=!![]);const ad=await mark_conversation_as_viewed(normalizeAccountOrMark(b['peerAddress']),normalizeOptionalAccountOrMark(b['account'])),ae=recordConversationRead(a5,a6,ab);d={'operation':'mark_conversation_read','result':{...ae,'marked_count':ad,'capped':ac,'requested_through_seq':aa}};break;}case'pull_messages':{if(b['after']!==undefined){if(b['allAccounts']||b['accounts']?.['length'])throw new Error('pull_messages.after\x20is\x20conversation-scoped\x20and\x20cannot\x20be\x20combined\x20with\x20allAccounts/accounts\x20fan-out\x20—\x20call\x20it\x20once\x20per\x20account\x20and\x20conversation.');if(!b['peerAddress'])throw new Error('pull_messages.after\x20requires\x20peerAddress:\x20the\x20message\x20sequence\x20(leafIndex)\x20is\x20per\x20conversation,\x20so\x20an\x20incremental\x20cursor\x20must\x20name\x20the\x20conversation.\x20Omit\x20`after`\x20for\x20the\x20legacy\x20bare-array\x20pull.');const ag=await resolveMessengerAddress(b['account'],'pull_messages.account'),ah=await resolveMessengerAddress(b['peerAddress'],'pull_messages.peerAddress'),ai=typeof b['limit']==='number'?b['limit']:0x32,aj=[];try{await pull_messages(normalizeOptionalAccountOrMark(b['account']),b['limit']);}catch(an){const ao=an instanceof Error?an['message']:String(an);aj['push']('server\x20refresh\x20failed,\x20so\x20this\x20page\x20is\x20served\x20from\x20the\x20local\x20store\x20only\x20('+ao+')');}const ak=await scanConversationMessages(ag,normalizeAccountOrMark(b['peerAddress'])),al=pageMessagesBySeq(ak['messages'],b['after'],ai,{'scanTruncated':ak['truncated']}),am=[...aj,...al['degraded_reasons']];d={'operation':'pull_messages','result':{'mode':'incremental','account':ag,'peer':ah,'after':al['after'],'messages':al['messages'],'highest_seq':al['highest_seq'],'latest_seq':al['latest_seq'],'has_more':al['has_more'],'gap':al['gap'],'degraded':am['length']>0x0,'degraded_reasons':am,'read_receipt':getConversationReadReceipt(ag,ah)}};break;}const af=await pull_messages(normalizeOptionalAccountOrMark(b['account']),b['limit'],{'allAccounts':b['allAccounts'],'accounts':b['accounts']?.['map'](ap=>normalizeAccountOrMark(ap)),'concurrency':b['concurrency']});d={'operation':'pull_messages','result':af};break;}default:throw new Error('Unknown\x20messenger\x20operation:\x20'+c);}const g=classifyCommunicationEvidence(c),h=b['goal_id'];if(g&&h){const ap=d['result'],{detail:aq,data:ar}=communicationEvidencePayload(c,ap);await goalEngine['recordCommunicationEvidence'](h,{'operation':c,'kind':g['kind'],'title':g['title'],'detail':aq,'data':ar},b['network']??'default');}return{'content':[{'type':'text','text':f?JSON['stringify'](d)+'\x0a'+f:JSON['stringify'](d)}],'structuredContent':{'result':d}};}catch(as){const at=as instanceof Error?as['message']:String(as),au=b?{'operation_type':'messenger_'+b['operation'],'data':b}:undefined,av=classifyError(at),aw={'operation':'error','error':at};if(av['error_code']!==undefined)aw['error_code']=av['error_code'];if(av['retryable']!==undefined)aw['retryable']=av['retryable'];if(av['recovery_hint']!==undefined)aw['recovery_hint']=av['recovery_hint'];return{'content':[{'type':'text','text':'Error:\x20'+at}],'structuredContent':{'result':aw,'semantic':buildDataSemantic(undefined,au,!![],at)}};}}
|
|
1
|
+
import{strictParse,MessengerOperationInputSchema}from'../../schema/index.js';import{watch_conversations,send_message,send_file,watch_messages,export_attachment,pull_messages,generate_wts,verify_wts,sign_wts,wts2html,proof_message,mark_messages_as_viewed,mark_conversation_as_viewed,blacklist,friendslist,guardlist,settings,LocalInfo,GetAccountOrMark_Address,Config,query_objects,wowAddressKind}from'@wowok/wowok';import{classifyError,buildDataSemantic,normalizeErrorMessage}from'../../schema/call/semantic.js';import{classifyCommunicationEvidence}from'../../communication/evidence.js';import{pageMessagesBySeq,recordConversationRead,getConversationReadReceipt}from'../../communication/message-cursors.js';import{noteProofIssued}from'../../communication/proof-reuse.js';import{isModuleLoadError,noteRuntimeModuleFault}from'../runtime-health.js';import{attestWtsFile,evaluateWtsSealedAvailability}from'../../communication/wts-attestation.js';import{goalEngine}from'../../goal/GoalEngine.js';export function normalizeAccountOrMark(a){if(typeof a==='string')return{'name_or_address':a,'local_mark_first':!![]};return a;}export function normalizeOptionalAccountOrMark(a){if(a===undefined||a===null)return undefined;return normalizeAccountOrMark(a);}export function normalizeManyAccountOrMark(a){if(a===undefined||a===null)return undefined;if(Array['isArray'](a))return{'entities':a['map'](b=>typeof b==='string'?{'name_or_address':b,'local_mark_first':!![]}:b),'check_all_founded':!![]};return a;}function communicationEvidencePayload(a,b){const c=b??{};switch(a){case'send_message':case'send_file':{const d=typeof c['messageId']==='string'?c['messageId']:undefined;return{'detail':d?'message\x20'+d:'message\x20sent','data':d?{'message_id':d}:{}};}case'send_required_info':{const e=typeof c['messageId']==='string'?c['messageId']:undefined,f=Array['isArray'](c['sent_fields'])?c['sent_fields']:undefined;return{'detail':'required-info\x20confirmation\x20sent','data':{...e?{'message_id':e}:{},...f?{'sent_fields':f}:{}}};}case'generate_wts':{const g=typeof c['totalMessageCount']==='number'?c['totalMessageCount']:undefined,h=Array['isArray'](c['files'])?c['files']:undefined,i=Array['isArray'](c['htmlFiles'])?c['htmlFiles']:undefined;return{'detail':'WTS\x20evidence\x20packet\x20generated','data':{...g!==undefined?{'message_count':g}:{},...h?{'files':h}:{},...i?{'html_reports':i}:{}}};}case'verify_wts':{const j=c['attestation'],k=typeof c['error']==='string'?c['error']:undefined;return{'detail':j?'WTS\x20verification\x20—\x20'+j['attested_count']+'/'+j['total_messages']+'\x20message(s)\x20server-attested':'WTS\x20verification\x20—\x20server\x20attestation\x20unavailable','data':{'valid':c['valid']===!![],'hash_valid':c['hashValid']===!![],'has_signature':c['hasSignature']===!![],...c['signatureValid']===undefined?{}:{'packet_signature_valid':c['signatureValid']===!![]},...k?{'error':k}:{},...j?{'attested_messages':j['attested_count'],'total_messages':j['total_messages'],'fully_attested':j['fully_attested'],'packet_signed':j['packet_signed'],'server_public_keys':j['server_public_keys'],'verdict':j['verdict']}:{'attestation':'unavailable\x20—\x20cross-check\x20the\x20seal\x20signer\x20and\x20server\x20keys\x20independently\x20before\x20treating\x20the\x20packet\x20as\x20third-party\x20evidence'}}};}case'sign_wts':{return{'detail':typeof b==='string'?b:'WTS\x20evidence\x20signed','data':{}};}case'proof_message':{const l=typeof c['proofAddress']==='string'?c['proofAddress']:undefined;return{'detail':l?'proof\x20'+l:'message\x20proofed\x20on-chain','data':l?{'proof_address':l}:{}};}default:return{'detail':a,'data':{}};}}export function throwIfTransportAmbiguous(a,b){const c=b instanceof Error?b['message']:String(b);if(/timeout|timed out|ETIMEDOUT|ECONNRESET|ECONNREFUSED|EAI_AGAIN|socket\s+hang\s+up|connection\s+(refused|reset|lost)|fetch\s+failed|unexpected\s+status\s+code:\s*5\d\d/i['test'](c))throw new Error('messenger\x20delivery\x20state\x20UNKNOWN\x20on\x20'+a+':\x20the\x20transport\x20failed\x20AFTER\x20submission\x20('+c+')\x20—\x20'+'the\x20relay\x20may\x20have\x20already\x20committed\x20the\x20message\x20despite\x20the\x20client-side\x20failure.\x20'+'Do\x20NOT\x20re-send\x20blindly:\x20first\x20check\x20the\x20conversation\x20(watch_conversations\x20/\x20read\x20messages)\x20'+'for\x20the\x20same\x20payload;\x20re-send\x20only\x20after\x20confirming\x20it\x20never\x20arrived.\x20A\x20blind\x20re-send\x20DOUBLE-DELIVERS.');throw b instanceof Error?b:new Error(c);}const LOCAL_SCAN_PAGE_SIZE=0x3e8,LOCAL_SCAN_MAX_PAGES=0xa;async function scanConversationMessages(a,b){const c=[];let d=0x0;for(let e=0x0;e<LOCAL_SCAN_MAX_PAGES;e++){const f=await watch_messages({'account':a,'peerAddress':b,'sortOrder':'desc','skipAutoMarkViewed':!![],'limit':LOCAL_SCAN_PAGE_SIZE,'offset':d});c['push'](...f);if(f['length']<LOCAL_SCAN_PAGE_SIZE)return{'messages':c,'truncated':![]};d+=LOCAL_SCAN_PAGE_SIZE;}return{'messages':c,'truncated':!![]};}async function resolveMessengerAddress(a,b){try{const d=await GetAccountOrMark_Address(a);if(typeof d==='string'&&d['length']>0x0)return d;}catch{}const c=typeof a==='string'?a:a?.['name_or_address'];if(typeof c==='string'&&c['length']>0x0)return c;throw new Error(b+'\x20could\x20not\x20be\x20resolved\x20to\x20a\x20messenger\x20account\x20address');}async function resolveContactRecipient(a,b,c){let d;try{d=await GetAccountOrMark_Address(a);}catch{d=undefined;}if(!d||wowAddressKind(d)!=='object')return normalizeAccountOrMark(a);let f;try{const g=await query_objects({'objects':[d],'network':b}),h=g?.['objects']?.[0x0];if(h?.['type']==='Contact'){const i=(Array['isArray'](h['ims'])?h['ims']:[])['find'](j=>typeof j?.['at']==='string'&&j['at'])?.['at'];if(i)return{'name_or_address':i,'local_mark_first':!![]};}f=h?.['type'];}catch(j){throw new Error(c+'\x20\x27'+d+'\x27\x20is\x20an\x20on-chain\x20OBJECT\x20address,\x20not\x20an\x20account\x20—\x20messenger\x20recipients\x20are\x20ACCOUNT\x20'+'addresses.\x20A\x20Contact\x20object\x20would\x20be\x20auto-resolved\x20to\x20the\x20messenger\x20address\x20stored\x20inside\x20it,\x20but\x20the\x20'+('on-chain\x20lookup\x20failed\x20('+(j instanceof Error?j['message']:String(j))+').\x20Re-try,\x20or\x20pass\x20the\x20recipient\x27s\x20')+'account\x20address\x20or\x20account/mark\x20name.');}if(f==='Contact')throw new Error(c+'\x20\x27'+d+'\x27\x20is\x20a\x20Contact\x20object\x20that\x20stores\x20NO\x20messenger\x20address\x20(empty\x20ims)\x20—\x20Messenger\x20routes\x20'+'messages\x20to\x20the\x20Contact\x27s\x20ims\x20members,\x20so\x20this\x20send\x20would\x20have\x20nowhere\x20to\x20arrive.\x20Register\x20an\x20IM\x20address\x20'+'on\x20the\x20Contact\x20first\x20(contact\x20ims\x20add),\x20or\x20pass\x20the\x20recipient\x27s\x20account\x20address\x20directly.');throw new Error(c+'\x20\x27'+d+'\x27\x20is\x20an\x20on-chain\x20'+(f??'non-account')+'\x20object\x20address,\x20not\x20an\x20account\x20—\x20'+'messenger\x20recipients\x20are\x20ACCOUNT\x20addresses\x20(a\x20Contact\x20object\x20is\x20auto-resolved\x20to\x20the\x20messenger\x20address\x20'+'stored\x20inside\x20it).\x20Pass\x20the\x20account\x20address\x20or\x20account/mark\x20name\x20instead.');}export async function handleMessengerOperation(a){let b;try{b=strictParse(MessengerOperationInputSchema,a,'messenger_operation\x20input');const c=b['operation'];let d,f;switch(b['operation']){case'watch_conversations':{const i=await watch_conversations(b['filter']);d={'operation':'watch_conversations','result':i};break;}case'send_message':{const j=await resolveContactRecipient(b['to'],b['options']?.['network'],'send_message.to');let k;try{k=await send_message(normalizeOptionalAccountOrMark(b['from']),j,b['content'],b['options']);}catch(n){throwIfTransportAmbiguous('send_message',n);}if(k['authRequired']){d={'operation':'send_message','result':k};break;}const l=k,m={...l,'merkleData':l['merkleData']?{'leafIndex':l['merkleData']['leafIndex'],'prevRoot':l['merkleData']['prevRoot'],'newRoot':l['merkleData']['newRoot'],'serverSignature':l['merkleData']['serverSignature'],'serverTimestamp':l['merkleData']['serverTimestamp'],'serverPublicKey':l['merkleData']['serverPublicKey']}:undefined};d={'operation':'send_message','result':m};break;}case'send_file':{const o=await resolveContactRecipient(b['to'],b['options']?.['network'],'send_file.to');let p;try{p=await send_file(normalizeOptionalAccountOrMark(b['from']),o,b['filePath'],b['options']);}catch(s){throwIfTransportAmbiguous('send_file',s);}const q=p,r={...q,'merkleData':q['merkleData']?{'leafIndex':q['merkleData']['leafIndex'],'prevRoot':q['merkleData']['prevRoot'],'newRoot':q['merkleData']['newRoot'],'serverSignature':q['merkleData']['serverSignature'],'serverTimestamp':q['merkleData']['serverTimestamp'],'serverPublicKey':q['merkleData']['serverPublicKey']}:undefined};d={'operation':'send_file','result':r};break;}case'send_required_info':{let t=b['content'];const u=[];let v;if(!t){const A=await GetAccountOrMark_Address(b['from']),B=await LocalInfo['Instance']()['list'](undefined,A),C=b['fields'],D=C&&C['length']>0x0?B['filter'](E=>C['includes'](E['name'])):B;if(D['length']===0x0)throw new Error('No\x20LocalInfo\x20fields\x20available.\x20Add\x20private\x20info\x20first\x20via\x20local_info_operation.');t=D['map'](E=>E['name']+':\x20'+E['default'])['join']('\x0a'),u['push'](...D['map'](E=>E['name']));}else b['fields']&&b['fields']['length']>0x0&&(v=[...b['fields']]);const w=await resolveContactRecipient(b['to'],b['options']?.['network'],'send_required_info.to'),x=await send_message(normalizeOptionalAccountOrMark(b['from']),w,t,b['options']),y=x,z={...y,'merkleData':y['merkleData']?{'leafIndex':y['merkleData']['leafIndex'],'prevRoot':y['merkleData']['prevRoot'],'newRoot':y['merkleData']['newRoot'],'serverSignature':y['merkleData']['serverSignature'],'serverTimestamp':y['merkleData']['serverTimestamp'],'serverPublicKey':y['merkleData']['serverPublicKey']}:undefined,...v?{'fields_ignored':v,'note':'content\x20took\x20precedence:\x20the\x20requested\x20LocalInfo\x20fields\x20listed\x20in\x20fields_ignored\x20were\x20NOT\x20assembled\x20and\x20NOT\x20sent\x20—\x20only\x20the\x20explicit\x20content\x20was\x20delivered.\x20To\x20send\x20the\x20LocalInfo\x20assembly\x20instead,\x20re-call\x20WITHOUT\x20content.'}:{},'sent_fields':u};d={'operation':'send_required_info','result':z};break;}case'watch_messages':{const E=b['filter']?{...b['filter'],'peerAddress':b['filter']['peerAddress']?normalizeAccountOrMark(b['filter']['peerAddress']):undefined,'account':b['filter']['account']?normalizeOptionalAccountOrMark(b['filter']['account']):undefined}:undefined,F=await watch_messages(E);d={'operation':'watch_messages','result':F};Array['isArray'](F)&&F['length']===0x0&&(f='watch_messages\x20returned\x200\x20messages:\x20it\x20reads\x20the\x20LOCAL\x20message\x20cache\x20only\x20and\x20never\x20contacts\x20the\x20'+'messenger\x20server,\x20so\x20messages\x20not\x20yet\x20pulled\x20are\x20invisible\x20here.\x20Run\x20pull_messages\x20for\x20this\x20'+'account/peer\x20first,\x20then\x20watch_messages\x20again.\x20(watch_messages\x20intentionally\x20never\x20advances\x20the\x20'+'pull\x20cursor\x20—\x20this\x20is\x20by\x20contract,\x20not\x20a\x20fault.)');break;}case'save_attachment':{const G=await export_attachment(normalizeOptionalAccountOrMark(b['account']),b['messageId'],{'outputDir':b['outputDir'],'saveAs':b['saveAs']});d={'operation':'save_attachment','result':G};break;}case'generate_wts':{const H=b['params']?{...b['params'],'peerAccount':normalizeAccountOrMark(b['params']['peerAccount']),'myAccount':normalizeOptionalAccountOrMark(b['params']['myAccount'])}:undefined,I=await generate_wts(H);let J={'sealed_available':null,'sealed_available_note':null};try{const K=I?.['files'],L=Array['isArray'](K)&&typeof K[0x0]==='string'&&K[0x0]?K[0x0]:undefined;L?J=evaluateWtsSealedAvailability(await verify_wts(L)):J={'sealed_available':null,'sealed_available_note':'Evidence-tier\x20pre-check\x20UNVERIFIED:\x20no\x20packet\x20file\x20was\x20returned\x20to\x20probe\x20—\x20the\x20third-party-verifiable\x20tier\x20is\x20UNKNOWN;\x20run\x20sign_wts\x20then\x20verify_wts\x20and\x20read\x20serverKeysOfficial/serverKeyAnchor\x20there.'};}catch{J={'sealed_available':null,'sealed_available_note':'Evidence-tier\x20pre-check\x20UNVERIFIED:\x20the\x20anchor\x20probe\x20failed\x20(the\x20key\x20book\x20or\x20chain\x20was\x20unreachable)\x20—\x20the\x20WTS\x20itself\x20was\x20generated\x20normally;\x20treat\x20the\x20third-party-verifiable\x20tier\x20as\x20UNKNOWN\x20and\x20re-probe\x20with\x20verify_wts\x20after\x20sign_wts.'};}d={'operation':'generate_wts','result':{...I??{},'sealed_available':J['sealed_available'],'sealed_available_note':J['sealed_available_note']}};break;}case'verify_wts':{const M=await verify_wts(b['wtsFilePath']),N=M??{},O=N['serverKeyAnchor']?.['verified']===![]||/anchor|key book/i['test'](String(N['error']??'')),P=O?'EVIDENCE\x20TIER\x20DOWNGRADE\x20(CSTC2-06,\x20algr12\x20P1-4):\x20the\x20on-chain\x20key-book\x20anchor\x20did\x20not\x20verify\x20('+(N['serverKeyAnchor']?.['reason']??String(N['error']??'anchor\x20check\x20failed'))+(N['serverKeyAnchor']?.['network']?';\x20anchor\x20network\x20\x27'+N['serverKeyAnchor']['network']+'\x27':'')+').\x20A\x20WTS\x20whose\x20key\x20book\x20is\x20not\x20anchored\x20CANNOT\x20be\x20third-party-verifiable\x20evidence\x20—\x20verify_wts\x20is\x20structurally\x20false\x20in\x20this\x20state\x20and\x20this\x20does\x20NOT\x20mean\x20the\x20conversation\x20or\x20the\x20packet\x20is\x20forged.\x20Treat\x20the\x20WTS\x20as\x20a\x20PRIVATE\x20conversation\x20record\x20only;\x20anything\x20that\x20must\x20hold\x20in\x20a\x20dispute\x20rides\x20proof_message\x20(an\x20on-chain\x20Proof\x20anchor)\x20with\x20the\x20WTS\x20quoted\x20as\x20context,\x20never\x20as\x20the\x20sole\x20proof.\x20The\x20anchor\x20itself\x20is\x20an\x20OPS\x20deployment/migration\x20item\x20(the\x20server\x20keybook\x20account\x20re-anchors\x20its\x20key\x20book\x20record\x20—\x20CipherStamp/ops\x20keybook-anchor.mjs;\x20CSTC2-06\x20protocol-train\x20candidate)\x20—\x20re-run\x20verify_wts\x20after\x20the\x20anchor\x20lands.':undefined,Q=M?.['valid']===![]?'A\x20packet\x20generated\x20by\x20generate_wts\x20is\x20UNSEALED\x20(no\x20meta.signature)\x20and\x20always\x20fails\x20verification\x20—\x20run\x20sign_wts\x20on\x20this\x20file\x20first,\x20then\x20verify_wts\x20the\x20SIGNED\x20output.':undefined,R=await attestWtsFile(b['wtsFilePath']);let S;if(M?.['serverKeysOfficial']===!![]){const T=M?.['serverKeysOfficialNetwork'],U=M?.['serverKeyAnchor']?.['network'],V=[];if(T){let W;try{W=String(await Config['Instance']()['network_get']());}catch{}W&&W!==T&&V['push']('NETWORK\x20MISMATCH:\x20official-key\x20verification\x20scored\x20in\x20the\x20\x27'+T+'\x27\x20key\x20partition,\x20but\x20this\x20call\x20was\x20served\x20on\x20network\x20\x27'+W+'\x27.\x20'+('The\x20verdict\x20is\x20evidence\x20for\x20\x27'+T+'\x27\x20only\x20—\x20quote\x20this\x20transcript\x20with\x20its\x20partition\x20stated,\x20or\x20switch\x20env.network\x20to\x20\x27'+T+'\x27\x20and\x20re-verify.')),T!=='mainnet'&&V['push']('PARTITION\x20RULE:\x20this\x20official\x20verdict\x20is\x20bound\x20to\x20the\x20\x27'+T+'\x27\x20partition\x20(anchor\x20network:\x20'+(U??T)+').\x20'+'For\x20a\x20MAINNET\x20case\x20the\x20ONLY\x20network-level\x20truth\x20is\x20an\x20on-chain\x20Proof\x20anchor\x20—\x20a\x20proof_message\x20re-anchored\x20on\x20mainnet.\x20'+'A\x20file-level\x20official\x20verdict\x20from\x20a\x20non-mainnet\x20partition\x20is\x20rehearsal\x20evidence\x20and\x20can\x20never\x20ground\x20a\x20mainnet\x20ruling.');}if(V['length']>0x0)S=V['join']('\x20');}d={'operation':'verify_wts','result':R?{...M,...Q?{'hint':Q}:{},...S?{'network_caveat':S}:{},...P?{'evidence_tier_note':P}:{},'attestation':R}:{...M,...Q?{'hint':Q}:{},...S?{'network_caveat':S}:{},...P?{'evidence_tier_note':P}:{},'attestation_unavailable':'Per-message\x20server\x20attestation\x20could\x20not\x20be\x20computed\x20(file\x20not\x20readable\x20locally\x20or\x20not\x20JSON).\x20The\x20guarded\x20verifier\x27s\x20valid\x20flag\x20already\x20required\x20server\x20attestation\x20+\x20seal;\x20cross-check\x20the\x20seal\x20signer\x20and\x20server\x20keys\x20yourself\x20before\x20treating\x20it\x20as\x20third-party\x20evidence.'}};break;}case'sign_wts':{const X=await sign_wts(b['wtsFilePath'],normalizeOptionalAccountOrMark(b['account']),b['outputPath']);d={'operation':'sign_wts','result':X};break;}case'wts2html':{const Y=await wts2html(b['wtsPath'],b['options']);d={'operation':'wts2html','result':Y};break;}case'proof_message':{let Z;try{Z=await proof_message(normalizeOptionalAccountOrMark(b['account']),b['messageId'],b['network']);}catch(a1){if(isModuleLoadError(a1)){const a2=noteRuntimeModuleFault('proof_message',a1);throw new Error('SDK\x20runtime\x20is\x20stale\x20in\x20this\x20process:\x20the\x20loaded\x20module\x20graph\x20references\x20chunk\x20\x22'+a2['module']+'\x22\x20'+'which\x20no\x20longer\x20exists\x20on\x20disk\x20(the\x20SDK\x20dist\x20was\x20rebuilt\x20after\x20this\x20MCP\x20process\x20started).\x20'+'Restart\x20the\x20MCP\x20server\x20to\x20reload\x20the\x20rebuilt\x20dist;\x20this\x20operation\x20cannot\x20succeed\x20until\x20then.');}throw a1;}const a0=Z?.['proofAddress'];if(typeof a0==='string')noteProofIssued(a0);d={'operation':'proof_message','result':Z};break;}case'blacklist':{const a3={'account':normalizeOptionalAccountOrMark(b['account']),'op':b['blacklist']['op']};'users'in b['blacklist']&&(a3['users']=normalizeManyAccountOrMark(b['blacklist']['users']));const a4=await blacklist(a3);d={'operation':'blacklist','op':b['blacklist']['op'],'result':a4['result']};break;}case'friendslist':{const a5={'account':normalizeOptionalAccountOrMark(b['account']),'op':b['friendslist']['op']};'users'in b['friendslist']&&(a5['users']=normalizeManyAccountOrMark(b['friendslist']['users']));const a6=await friendslist(a5);d={'operation':'friendslist','op':b['friendslist']['op'],'result':a6['result']};break;}case'guardlist':{const a7=await guardlist({'account':normalizeOptionalAccountOrMark(b['account']),...b['guardlist']});d={'operation':'guardlist','op':b['guardlist']['op'],'result':a7['result']};break;}case'settings':{const a8=await settings({'account':normalizeOptionalAccountOrMark(b['account']),...b['settings']});d={'operation':'settings','op':b['settings']['op'],'result':a8['result']};break;}case'mark_messages_as_viewed':{const a9=await mark_messages_as_viewed(b['messageIds'],normalizeOptionalAccountOrMark(b['account']));d={'operation':'mark_messages_as_viewed','result':a9};break;}case'mark_conversation_as_viewed':{const aa=await mark_conversation_as_viewed(normalizeAccountOrMark(b['peerAddress']),normalizeOptionalAccountOrMark(b['account']));d={'operation':'mark_conversation_as_viewed','result':aa};break;}case'mark_conversation_read':{const ab=await resolveMessengerAddress(b['account'],'mark_conversation_read.account'),ac=await resolveMessengerAddress(b['peerAddress'],'mark_conversation_read.peerAddress'),ad=await scanConversationMessages(ab,normalizeAccountOrMark(b['peerAddress'])),ae=ad['messages']['filter'](al=>al['direction']==='received'&&typeof al['leafIndex']==='number')['map'](al=>al['leafIndex']),af=ae['length']>0x0?Math['max'](...ae):null,ag=typeof b['through_seq']==='number'?b['through_seq']:null;let ah=ag??af,ai=![];ah!==null&&(af===null||ah>af)&&(ah=af,ai=!![]);const aj=await mark_conversation_as_viewed(normalizeAccountOrMark(b['peerAddress']),normalizeOptionalAccountOrMark(b['account'])),ak=recordConversationRead(ab,ac,ah);d={'operation':'mark_conversation_read','result':{...ak,'marked_count':aj,'capped':ai,'requested_through_seq':ag}};break;}case'pull_messages':{if(b['after']!==undefined){if(b['allAccounts']||b['accounts']?.['length'])throw new Error('pull_messages.after\x20is\x20conversation-scoped\x20and\x20cannot\x20be\x20combined\x20with\x20allAccounts/accounts\x20fan-out\x20—\x20call\x20it\x20once\x20per\x20account\x20and\x20conversation.');if(!b['peerAddress'])throw new Error('pull_messages.after\x20requires\x20peerAddress:\x20the\x20message\x20sequence\x20(leafIndex)\x20is\x20per\x20conversation,\x20so\x20an\x20incremental\x20cursor\x20must\x20name\x20the\x20conversation.\x20Omit\x20`after`\x20for\x20the\x20legacy\x20bare-array\x20pull.');const am=await resolveMessengerAddress(b['account'],'pull_messages.account'),an=await resolveMessengerAddress(b['peerAddress'],'pull_messages.peerAddress'),ao=typeof b['limit']==='number'?b['limit']:0x32,ap=[];try{await pull_messages(normalizeOptionalAccountOrMark(b['account']),b['limit']);}catch(at){const au=at instanceof Error?at['message']:String(at);ap['push']('server\x20refresh\x20failed,\x20so\x20this\x20page\x20is\x20served\x20from\x20the\x20local\x20store\x20only\x20('+au+')');}const aq=await scanConversationMessages(am,normalizeAccountOrMark(b['peerAddress'])),ar=pageMessagesBySeq(aq['messages'],b['after'],ao,{'scanTruncated':aq['truncated']}),as=[...ap,...ar['degraded_reasons']];d={'operation':'pull_messages','result':{'mode':'incremental','account':am,'peer':an,'after':ar['after'],'messages':ar['messages'],'highest_seq':ar['highest_seq'],'latest_seq':ar['latest_seq'],'has_more':ar['has_more'],'gap':ar['gap'],'degraded':as['length']>0x0,'degraded_reasons':as,'read_receipt':getConversationReadReceipt(am,an)}};break;}const al=await pull_messages(normalizeOptionalAccountOrMark(b['account']),b['limit'],{'allAccounts':b['allAccounts'],'accounts':b['accounts']?.['map'](av=>normalizeAccountOrMark(av)),'concurrency':b['concurrency']});d={'operation':'pull_messages','result':al};break;}default:throw new Error('Unknown\x20messenger\x20operation:\x20'+c);}const g=classifyCommunicationEvidence(c),h=b['goal_id'];if(g&&h){const av=d['result'],{detail:aw,data:ax}=communicationEvidencePayload(c,av);await goalEngine['recordCommunicationEvidence'](h,{'operation':c,'kind':g['kind'],'title':g['title'],'detail':aw,'data':ax},b['network']??'default');}return{'content':[{'type':'text','text':f?JSON['stringify'](d)+'\x0a'+f:JSON['stringify'](d)}],'structuredContent':{'result':d}};}catch(ay){const az=normalizeErrorMessage(ay),aA=b?{'operation_type':'messenger_'+b['operation'],'data':b}:undefined,aB=classifyError(az),aC={'operation':'error','error':az};if(aB['error_code']!==undefined)aC['error_code']=aB['error_code'];if(aB['retryable']!==undefined)aC['retryable']=aB['retryable'];if(aB['recovery_hint']!==undefined)aC['recovery_hint']=aB['recovery_hint'];return{'content':[{'type':'text','text':'Error:\x20'+az}],'structuredContent':{'result':aC,'semantic':buildDataSemantic(undefined,aA,!![],az)}};}}
|