@wowok/agent-mcp 3.3.6 → 3.3.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chain-semantics/eval-order.js +1 -1
- package/dist/chain-semantics/field-capability.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/communication/message-cursors.d.ts +35 -0
- package/dist/communication/message-cursors.js +1 -0
- package/dist/communication/wts-attestation.d.ts +5 -0
- package/dist/communication/wts-attestation.js +1 -1
- package/dist/composition/audit.js +1 -1
- package/dist/composition/compile.d.ts +3 -2
- package/dist/composition/compile.js +1 -1
- package/dist/composition/inflight.d.ts +7 -0
- package/dist/composition/inflight.js +1 -1
- package/dist/composition/materialize.d.ts +4 -1
- package/dist/composition/materialize.js +1 -1
- package/dist/config/index.d.ts +1 -0
- package/dist/config/index.js +1 -1
- package/dist/config/store-policy.d.ts +14 -0
- package/dist/config/store-policy.js +1 -0
- package/dist/config/store-policy.spec.d.ts +1 -0
- package/dist/config/store-policy.spec.js +1 -0
- package/dist/customer/industry-risks.js +1 -1
- package/dist/customer/user-preferences.js +1 -1
- package/dist/data/projection/facets.spec.js +1 -1
- package/dist/evaluation/builtins/graph-service.spec.js +1 -1
- package/dist/evaluation/engine.js +1 -1
- package/dist/evaluation/match-policy.d.ts +30 -6
- package/dist/evaluation/match-policy.js +1 -1
- package/dist/evaluation/match-policy.spec.js +1 -1
- package/dist/experience/realtime-feedback.js +1 -1
- package/dist/extensions/business-modules.d.ts +1 -1
- package/dist/extensions/business-modules.js +1 -1
- package/dist/extensions/industry-pack.js +1 -1
- package/dist/extensions/modes.js +1 -1
- package/dist/graph/onchain/analyze.js +1 -1
- package/dist/graph/onchain/expand.js +1 -1
- package/dist/graph/onchain/exposure.js +1 -1
- package/dist/graph/onchain/facts.d.ts +1 -0
- package/dist/graph/onchain/facts.js +1 -1
- package/dist/graph/onchain/facts.spec.js +1 -1
- package/dist/harness/recover.js +1 -1
- package/dist/intent/types.d.ts +1 -1
- package/dist/intent/types.js +1 -1
- package/dist/keeper/detectors.d.ts +3 -0
- package/dist/keeper/detectors.js +1 -1
- package/dist/keeper/keeper.spec.js +1 -1
- package/dist/knowledge/acquisition-flywheel.js +1 -1
- package/dist/knowledge/allocation-ledger.d.ts +1 -0
- package/dist/knowledge/allocation-ledger.js +1 -1
- package/dist/knowledge/allocator-rail-verifier.d.ts +6 -2
- package/dist/knowledge/allocator-rail-verifier.js +1 -1
- package/dist/knowledge/arbitration-ledger.js +1 -1
- package/dist/knowledge/audit-rules.d.ts +37 -0
- package/dist/knowledge/audit-rules.js +1 -1
- package/dist/knowledge/baselines/rules/plan.json +128 -3
- package/dist/knowledge/builtin-templates.d.ts +18 -1
- package/dist/knowledge/builtin-templates.js +1 -1
- package/dist/knowledge/commission-landing.d.ts +26 -0
- package/dist/knowledge/commission-landing.js +1 -0
- package/dist/knowledge/discount-threshold.js +1 -1
- package/dist/knowledge/event-semantics.js +1 -1
- package/dist/knowledge/fund-layer.d.ts +7 -0
- package/dist/knowledge/fund-layer.js +1 -1
- package/dist/knowledge/getting-started.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-puzzle.js +1 -1
- package/dist/knowledge/guard-render.d.ts +7 -0
- package/dist/knowledge/guard-render.js +1 -1
- package/dist/knowledge/guard-risk.js +1 -1
- package/dist/knowledge/guard-templates.d.ts +1 -1
- package/dist/knowledge/guard-templates.js +1 -1
- package/dist/knowledge/guard-translation.js +1 -1
- package/dist/knowledge/index.js +1 -1
- package/dist/knowledge/industry-generalizer.d.ts +4 -0
- package/dist/knowledge/industry-generalizer.js +1 -1
- package/dist/knowledge/industry-registry.d.ts +1 -1
- package/dist/knowledge/industry-registry.js +1 -1
- package/dist/knowledge/industry-strategy.js +1 -1
- package/dist/knowledge/jsonrpc-enum.js +1 -1
- package/dist/knowledge/machine-fork-watch.d.ts +9 -0
- package/dist/knowledge/machine-fork-watch.js +1 -0
- package/dist/knowledge/migration-preflight.js +1 -1
- package/dist/knowledge/projection.spec.js +1 -1
- package/dist/knowledge/scenario-modes.d.ts +8 -2
- package/dist/knowledge/scenario-modes.js +1 -1
- package/dist/knowledge/semantic-ir.d.ts +132 -0
- package/dist/knowledge/semantic-ir.js +1 -0
- package/dist/knowledge/service-ledger.js +1 -1
- package/dist/knowledge/strategy-manuals.js +1 -1
- package/dist/knowledge/template-index.js +1 -1
- package/dist/knowledge/template-loader.d.ts +45 -0
- package/dist/knowledge/template-loader.js +1 -1
- package/dist/knowledge/template-prose.d.ts +50 -0
- package/dist/knowledge/template-prose.js +1 -0
- package/dist/knowledge/template-registry.js +1 -1
- package/dist/knowledge/template-scanner.d.ts +5 -3
- package/dist/knowledge/template-scanner.js +1 -1
- package/dist/knowledge/template-validation.js +1 -1
- package/dist/knowledge/tools-reference.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/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 +16 -6
- package/dist/playbooks/service-build/merchant-guide.js +1 -1
- package/dist/playbooks/service-build/migration-planner.d.ts +11 -2
- package/dist/playbooks/service-build/migration-planner.js +1 -1
- package/dist/playbooks/service-build/mode-actions.d.ts +8 -0
- package/dist/playbooks/service-build/mode-actions.js +1 -1
- package/dist/playbooks/service-build/object-panorama.d.ts +22 -1
- package/dist/playbooks/service-build/object-panorama.js +1 -1
- package/dist/playbooks/service-build/participation-radar.js +1 -1
- package/dist/playbooks/service-build/relationship-profile.js +1 -1
- package/dist/playbooks/service-build/reverse-mapping-nk4.spec.js +1 -1
- package/dist/playbooks/service-build/reverse-mapping.d.ts +1 -0
- package/dist/playbooks/service-build/reverse-mapping.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/playbooks/service-build/service-quote.spec.js +1 -1
- package/dist/review/index.js +1 -1
- package/dist/safety/confirm-gate.js +1 -1
- package/dist/schema/benchmark-migration/index.d.ts +135 -10
- package/dist/schema/benchmark-migration/index.js +1 -1
- package/dist/schema/call/allocation.d.ts +3 -0
- package/dist/schema/call/allocation.js +1 -1
- package/dist/schema/call/arbitration.js +1 -1
- package/dist/schema/call/base.d.ts +32 -0
- package/dist/schema/call/bridge.d.ts +8 -0
- package/dist/schema/call/error-codes.d.ts +1 -1
- package/dist/schema/call/error-codes.js +1 -1
- package/dist/schema/call/order.js +1 -1
- package/dist/schema/call/reward.d.ts +10 -0
- package/dist/schema/call/reward.js +1 -1
- package/dist/schema/call/semantic.js +1 -1
- package/dist/schema/call/service.js +1 -1
- package/dist/schema/common/index.js +1 -1
- package/dist/schema/config/index.d.ts +24 -0
- package/dist/schema/config/index.js +1 -1
- package/dist/schema/evaluation/index.d.ts +152 -0
- package/dist/schema/evaluation/index.js +1 -1
- package/dist/schema/goal/index.d.ts +16 -0
- package/dist/schema/goal/planning.d.ts +29 -0
- package/dist/schema/goal/planning.js +1 -1
- package/dist/schema/industry-pack/index.d.ts +70 -0
- package/dist/schema/industry-pack/modes.d.ts +70 -0
- package/dist/schema/industry-pack/modes.js +1 -1
- package/dist/schema/intent-radar/index.d.ts +3 -0
- package/dist/schema/intent-radar/index.js +1 -1
- package/dist/schema/local/index.d.ts +80 -0
- package/dist/schema/local/index.js +1 -1
- package/dist/schema/messenger/index.d.ts +278 -1
- package/dist/schema/messenger/index.js +1 -1
- package/dist/schema/operations.d.ts +6 -0
- package/dist/schema/query/bi.d.ts +38 -0
- package/dist/schema/query/bi.js +1 -1
- package/dist/schema/query/index.d.ts +148 -47
- package/dist/schema/query/index.js +1 -1
- package/dist/schema/schema-version.js +1 -1
- package/dist/schema/service-clone/index.d.ts +17 -0
- package/dist/schema/service-clone/index.js +1 -1
- package/dist/schema-query-impl/index.js +1 -1
- package/dist/schemas/account_operation.output.json +8 -0
- package/dist/schemas/benchmark_migration_operation.output.json +296 -2
- package/dist/schemas/benchmark_migration_operation.schema.json +292 -7
- package/dist/schemas/bridge_operation.output.json +8 -0
- package/dist/schemas/config_operation.output.json +95 -0
- package/dist/schemas/config_operation.schema.json +16 -1
- package/dist/schemas/evaluation_operation.output.json +240 -0
- package/dist/schemas/evaluation_operation.schema.json +397 -1
- package/dist/schemas/goal_operation.schema.json +40 -10
- package/dist/schemas/index.json +1 -1
- package/dist/schemas/industry_pack_operation.output.json +90 -2
- package/dist/schemas/industry_pack_operation.schema.json +236 -0
- package/dist/schemas/intent_radar.output.json +2 -0
- package/dist/schemas/intent_radar.schema.json +1 -0
- package/dist/schemas/local_cache_operation.output.json +8 -0
- package/dist/schemas/local_history_operation.output.json +8 -0
- package/dist/schemas/local_info_operation.output.json +8 -0
- package/dist/schemas/local_mark_operation.output.json +8 -0
- package/dist/schemas/messenger_operation.output.json +609 -1
- package/dist/schemas/messenger_operation.schema.json +96 -1
- package/dist/schemas/onchain_events.output.json +281 -11
- package/dist/schemas/onchain_events.schema.json +5 -1
- package/dist/schemas/onchain_operations.output.json +8 -0
- package/dist/schemas/onchain_operations.schema.json +371 -10
- package/dist/schemas/onchain_operations_allocation.schema.json +10 -1
- package/dist/schemas/onchain_operations_arbitration.schema.json +1 -1
- package/dist/schemas/onchain_operations_guard.schema.json +318 -0
- package/dist/schemas/onchain_operations_order.schema.json +1 -1
- package/dist/schemas/onchain_operations_reward.schema.json +35 -1
- package/dist/schemas/onchain_operations_service.schema.json +6 -6
- package/dist/schemas/query_toolkit.output.json +305 -8
- package/dist/schemas/service_clone_operation.output.json +79 -0
- package/dist/tools/handlers/benchmark-migration.d.ts +15 -0
- package/dist/tools/handlers/benchmark-migration.js +1 -1
- package/dist/tools/handlers/config.js +1 -1
- package/dist/tools/handlers/evaluation.js +1 -1
- package/dist/tools/handlers/evaluation.spec.js +1 -1
- package/dist/tools/handlers/intent-radar.js +1 -1
- package/dist/tools/handlers/messenger.d.ts +1 -0
- package/dist/tools/handlers/messenger.js +1 -1
- package/dist/tools/handlers/onchain.d.ts +20 -1
- package/dist/tools/handlers/onchain.js +1 -1
- package/dist/tools/handlers/query.d.ts +1 -0
- package/dist/tools/handlers/query.js +1 -1
- package/dist/tools/handlers/service-clone.d.ts +18 -0
- package/dist/tools/handlers/service-clone.js +1 -1
- package/dist/tools/handlers/wip.js +1 -1
- package/dist/tools/registry/agent.js +1 -1
- package/dist/tools/registry/business.js +1 -1
- package/dist/tools/registry/query.js +1 -1
- package/dist/tools/wip-verify-ledger.d.ts +14 -0
- package/dist/tools/wip-verify-ledger.js +1 -0
- package/dist/tools/wrap.d.ts +4 -0
- package/dist/tools/wrap.js +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
import{strictParse}from'../../schema/index.js';import{BenchmarkMigrationSchema}from'../../schema/benchmark-migration/index.js';import{getTemplate,listTemplates,validateAllocatorRows,platformShareBps,builtinTemplateDrift}from'../../knowledge/template-loader.js';import{BUILTIN_TEMPLATES,BUILTIN_TEMPLATES_VERSION}from'../../knowledge/builtin-templates.js';import{scanTemplate,buildFeeParamLandingTable}from'../../knowledge/template-scanner.js';import{planMigration}from'../../playbooks/service-build/migration-planner.js';import{handleMerchantGuide}from'../../playbooks/service-build/merchant-guide.js';import{inferArbitration}from'../../playbooks/service-build/intent-analyzer.js';import{getIndustryModeRegistry}from'../../extensions/index.js';import{resolveIndustryName}from'../../knowledge/industry-registry.js';function templateSummary(a){return{'id':a['id'],'industry':a['industry'],'variant':a['variant'],'product_ref':a['product_ref'],'archetype':a['archetype'],'key_risk':a['key_risk'],'node_count':a['machine_shape']['length'],'guard_count':a['guards']['length'],'recommended_role':a['recommended_role']};}function templateGetAids(a){const b=a['machine_shape']['some'](c=>c['name']==='reviewed');return{'claim_anchor':b?'review_node+final':'final_only','claim_anchor_note':b?'machine_shape\x20mounts\x20a\x20\x27reviewed\x27\x20node\x20—\x20the\x20buyer\x27s\x20structured\x20review\x20rides\x20that\x20node\x20alongside\x20the\x20final\x20settlement.':'no\x20\x27reviewed\x27\x20node\x20—\x20sanctioned\x20variant:\x20the\x20buyer\x27s\x20voice\x20rides\x20the\x20claim/arbitration\x20rail\x20only\x20(no\x20separate\x20review\x20stop).','allocator_count_note':'allocator.count\x20=\x20'+a['allocator']['count']+'\x20counts\x20SETTLEMENT-track\x20legs\x20only;\x20refund-track\x20legs\x20(rows[]\x20with\x20track:\x22refund\x22)\x20are\x20additional\x20and\x20NOT\x20included\x20in\x20this\x20count.\x20rows[]\x20carries\x20the\x20complete\x20executable\x20split\x20plan.','onchain_field_notes':['passport.impack\x20—\x20the\x20on-chain\x20field\x20is\x20spelled\x20`impack`\x20(passport.move,\x20packed\x20business\x20objects\x20in\x20the\x20passport\x20verification\x20context).\x20It\x20is\x20the\x20contract\x27s\x20own\x20field\x20name,\x20not\x20a\x20typo;\x20echo\x20it\x20verbatim.']};}function requireTemplate(a,b){if(!a)throw new Error('\x27template_id\x27\x20is\x20required\x20for\x20action=\x27'+b+'\x27');const c=getTemplate(a);if(!c)throw new Error('Unknown\x20template\x20id:\x20'+a+'\x20(use\x20action=\x27template_list\x27\x20to\x20see\x20valid\x20ids)');return c;}function driftFace(a){const b=builtinTemplateDrift()['find'](c=>c['template']===a);if(!b){const c=BUILTIN_TEMPLATES['some'](d=>d['id']===a);return c?{'template':a,'state':'current','catalog_version':BUILTIN_TEMPLATES_VERSION,'blocked':![],'repairable':![],'detail':'disk\x20body\x20matches\x20the\x20shipped\x20catalog\x20(hash-verified\x20sentinel)'}:{'template':a,'state':'untracked','catalog_version':undefined,'blocked':![],'repairable':![],'detail':'user-authored\x20template\x20—\x20no\x20builtin\x20catalog\x20binding\x20to\x20compare\x20against'};}return{'template':b['template'],'state':b['state'],'catalog_version':BUILTIN_TEMPLATES_VERSION,'blocked':!![],'repairable':b['repairable'],'detail':b['detail']};}function scanSummary(a,b){const c={};for(const d of a['findings'])c[d['severity']]=(c[d['severity']]??0x0)+0x1;return{'template_id':a['template_id'],'risk_level':a['risk_level'],'preflight_scan_passed':a['red_flags']['length']===0x0,'finding_count':a['findings']['length'],'findings_by_severity':c,'red_flags':a['red_flags'],'findings':a['findings'],'drift':b};}function assertScanPassed(a,b){const c=a['red_flags'];if(a['passed']||c['length']===0x0)return;throw new Error('action=\x27'+b+'\x27\x20blocked:\x20pre-deploy\x20scan\x20of\x20template\x20\x27'+a['template_id']+'\x27\x20found\x20CRITICAL\x20risk\x20—\x20'+c['join'](';\x20')+'.\x20Fix\x20the\x20template\x20(frontmatter\x20or\x20body)\x20and\x20re-run\x20action=\x27template_scan\x27.');}const GENERATE_HIGH_TOLERATED=new Set([]);function assertGenerateScanPassed(a,b){assertScanPassed(a,b);if(b!=='template_generate')return;const c=generateHighBlockers(a['template_id'],a['findings']);if(c['length']===0x0)return;throw new Error('action=\x27'+b+'\x27\x20blocked:\x20pre-deploy\x20scan\x20of\x20template\x20\x27'+a['template_id']+'\x27\x20found\x20'+c['length']+'\x20HIGH\x20finding(s)\x20—\x20'+c['map'](d=>(d['rule_id']??'HIGH')+':\x20'+d['title'])['join'](';\x20')+'.\x20Fix\x20the\x20template\x20(frontmatter\x20or\x20body)\x20and\x20re-run\x20action=\x27template_scan\x27.');}function generateHighBlockers(a,b){return b['filter'](c=>c['severity']==='high'&&!(c['rule_id']&&GENERATE_HIGH_TOLERATED['has'](a+'/'+c['rule_id'])));}export function buildVerdict(a,b,c){const d=[];!a['preflight_scan_passed']&&d['push']('scan:\x20'+(a['findings_by_severity']['critical']??0x0)+'\x20CRITICAL\x20finding(s)\x20(preflight\x20scan\x20failed)');if(c){const h=generateHighBlockers(a['template_id'],a['findings']??[]);h['length']>0x0&&d['push']('scan:\x20'+h['length']+'\x20HIGH\x20finding(s)\x20—\x20template_generate\x20would\x20refuse\x20(N-21):\x20'+h['map'](i=>((i['rule_id']??'HIGH')+':\x20'+(i['title']??''))['trim']())['join'](';\x20'));}const e=b['graph_validation'];if(e&&e['valid']===![]){const i=Array['isArray'](e['hard_violations'])?e['hard_violations']['length']:0x0,j=Array['isArray'](e['hard_violations'])?e['hard_violations']['map'](k=>k['id'])['join'](',\x20'):'';d['push']('graph_validation:\x20'+i+'\x20hard\x20violation(s)'+(j?'\x20('+j+')':''));}const f=b['audit'];if(f&&f['blocking']===!![]){const k=(f['findings']??[])['filter'](l=>l['level']==='critical'||l['level']==='high');d['push'](k['length']===0x0?'audit:\x20guide\x20audit\x20flagged\x20blocking\x20issue(s)\x20(plan.audit)':'audit:\x20'+k['length']+'\x20blocking\x20finding(s)\x20—\x20'+k['slice'](0x0,0x5)['map'](l=>((l['rule_id']??'?')+':\x20'+(l['title']??''))['trim']())['join'](';\x20')+(k['length']>0x5?'\x20(+'+(k['length']-0x5)+'\x20more\x20in\x20plan.audit.findings)':''));}const g=d['length']===0x0;return{'buildable':g,'blockers':d,'status':g?'READY':'BLOCKED'};}async function templateScanDryRun(a){const b=[{'name':'scan-probe','price':'1000000000','quantity':0x1}],c=a['review_mode']==='review_reward'?{'review_mode':'review_reward','reward_funding':'20000000'}:undefined;try{const d=await runGuide(a,undefined,undefined,undefined,c,b),f=buildVerdict(scanSummary(scanTemplate(a)),d,!![]);return{'status':f['buildable']?'ready':'blocked','buildable':f['buildable'],'blockers':f['blockers'],'note':'Compile\x20dry-run\x20on\x20synthetic\x20probe\x20inputs\x20(single\x20probe\x20SKU,\x20benchmark\x20reward\x20funding),\x20mirrored\x20to\x20the\x20template_generate\x20gate\x20(CRITICAL\x20+\x20N-21\x20HIGH\x20+\x20graph\x20+\x20audit).\x20Structural\x20blockers\x20are\x20REAL\x20—\x20the\x20generate\x20face\x20refuses\x20for\x20the\x20same\x20reason.\x20Blockers\x20naming\x20caller\x20inputs\x20(fee_overrides\x20/\x20guard_resolutions\x20/\x20catalog)\x20may\x20clear\x20with\x20real\x20values.'};}catch(g){return{'status':'unavailable','note':'Compile\x20dry-run\x20could\x20not\x20run\x20on\x20synthetic\x20probe\x20inputs\x20('+(g instanceof Error?g['message']:String(g))+').\x20This\x20is\x20a\x20probe\x20limitation,\x20NOT\x20a\x20template\x20verdict\x20—\x20run\x20template_generate\x20for\x20the\x20authoritative\x20buildability.'};}}export function planNextAction(a,b,c){const d=a['next_action'];if(typeof d==='string'&&d['startsWith']('Plan\x20ready.'))return d;if(c?.['buildable']){const f=Array['isArray'](a['pending_guard_designs'])?a['pending_guard_designs']['length']:0x0;return'Plan\x20is\x20buildable\x20(verdict.buildable=true).\x20Materialize\x20the\x20objects\x20in\x20plan.steps\x20order'+(f>0x0?',\x20resolving\x20the\x20'+f+'\x20pending\x20guard\x20design(s)\x20in\x20plan.pending_guard_designs\x20via\x20guard_resolutions\x20before\x20the\x20Machine\x20publish':'')+'.';}const e=Array['isArray'](a['pending_guard_designs'])?a['pending_guard_designs']['length']:0x0;return'Plan\x20BLOCKED\x20by\x20the\x20guide\x20audit\x20(see\x20plan.audit\x20/\x20plan.next_action).\x20Do\x20NOT\x20materialize,\x20'+'and\x20do\x20NOT\x20hand-build\x20the\x20objects\x20instead:\x20this\x20plan\x20is\x20the\x20wiring\x20authority\x20(Arbitration\x20+\x20'+'compensation-fund,\x20Contact/um,\x20allocator\x20rows)\x20and\x20hand-built\x20replicas\x20silently\x20drop\x20those\x20wirings.\x20'+(e>0x0?'Resolve\x20the\x20'+e+'\x20pending\x20guard\x20design(s)\x20in\x20plan.pending_guard_designs\x20via\x20guard_resolutions\x20(kind\x20\x27inline\x27\x20with\x20the\x20Guard\x20table+root,\x20kind\x20\x27template\x27\x20with\x20a\x20tpl_*\x20id,\x20or\x20{kind:\x27omit\x27}\x20for\x20advisory\x20designs\x20that\x20do\x20not\x20apply\x20to\x20this\x20shop),\x20':'Adjust\x20fee_overrides,\x20pick\x20another\x20template\x20variant,\x20or\x20fix\x20the\x20template,\x20')+('then\x20re-run\x20action=\x27'+b+'\x27.');}function templateIntent(a,b){if(b&&b['trim']())return b['trim']();return'Adopt\x20the\x20'+a['id']+'\x20industry\x20archetype\x20template\x20('+a['archetype']+')\x20for\x20the\x20'+a['industry']+'\x20industry.\x20'+('Primary\x20risk\x20to\x20mitigate:\x20'+a['key_risk']+'.');}function effectiveFeeParams(a,b){return{...a['fee_params'],...b??{}};}const REWARD_POOL_PATTERNS=[/(?:reward|review|bonus|tip|prize)[\s-]*pools?\s*(?:of|is|at|:|=)?\s*([0-9][0-9_,]*(?:\.[0-9]+)?)/i,/([0-9][0-9_,]*(?:\.[0-9]+)?)\s*(?:reward|review|bonus|tip|prize)[\s-]*pools?\b/i,/(?:奖(?:金|励)?池|打赏池|好评(?:奖励)?池)\s*(?:为|是|:|:|=)?\s*([0-9][0-9_,]*(?:\.[0-9]+)?)/,/([0-9][0-9_,]*(?:\.[0-9]+)?)\s*的?\s*(?:奖(?:金|励)?池|打赏池|好评(?:奖励)?池)/];export function extractRewardPoolCandidate(a){if(!a)return undefined;for(const b of REWARD_POOL_PATTERNS){const c=b['exec'](a);if(!c)continue;const d=Number(c[0x1]['replaceAll'](/[,_]/g,''));if(Number['isFinite'](d)&&d>=0x0)return d;}return undefined;}function rewardPoolPrefill(a,b,c){if(a['fee_params']['review_reward_pool']===undefined)return undefined;if(c?.['review_reward_pool']!==undefined)return undefined;const d=extractRewardPoolCandidate(b);return d===undefined?undefined:{'fee_key':'review_reward_pool','value':d};}function validateFeeParams(a,b){const c=[];let d=0x0;for(const [e,f]of Object['entries'](a)){if(typeof f!=='number'||!Number['isFinite'](f))continue;if(e['endsWith']('_bps')){(!Number['isInteger'](f)||f<0x0||f>0x2710)&&c['push'](e+'='+f+'\x20is\x20not\x20an\x20integer\x20rate\x20in\x20[0,\x2010000]\x20bps');if(e['endsWith']('_share_bps'))d+=Math['max'](0x0,f);}else{if(e['endsWith']('_days')){if(f<=0x0||f>0xe42)c['push'](e+'='+f+'\x20is\x20outside\x20the\x20sane\x20window\x20range\x20(0,\x203650]\x20days');}else{if(e['endsWith']('_hours')){if(f<=0x0||f>0x2238)c['push'](e+'='+f+'\x20is\x20outside\x20the\x20sane\x20window\x20range\x20(0,\x208760]\x20hours');}}}}if(d>0x2710)c['push']('*_share_bps\x20sum\x20'+d+'\x20exceeds\x2010000\x20(a\x20pool\x20splits\x20into\x20at\x20most\x20100%)');if(c['length']>0x0)throw new Error('invalid\x20fee\x20parameters\x20for\x20template\x20\x27'+b+'\x27:\x20'+c['join'](';\x20')+'.\x20'+'Correct\x20the\x20template\x27s\x20fee_params\x20or\x20pass\x20valid\x20\x27fee_overrides\x27.');}export{validateAllocatorRows};export function variantPaymentModel(a){if(a['payment_model'])return a['payment_model'];const b=a['allocator']['rows']??[];if(b['some'](d=>d['track']==='refund'))return'escrow';const c=a['machine_shape']['map'](d=>d['name'])['join']('\x20')['toLowerCase']();if(/\b(milestone|revision|revis|draft|deliverable)\b/['test'](c))return'milestone';if(/\b(charge|renew|subscription|cycle|billing|monthly)\b/['test'](c))return'subscription';return'escrow';}function variantRefundPolicy(a){const b=a['allocator']['description']['toLowerCase']();if(/full[ -]?refund|100% refund|refund .*100/['test'](b))return'full';if(/pro-?rata|prorated/['test'](b))return'milestone_prorated';if(/partial/['test'](b))return'partial';return undefined;}export function variantDeliverables(a,b){const c=a['machine_shape']['filter'](g=>g['semantic_role']==='final'),d=c[c['length']-0x1]??[...a['machine_shape']]['reverse']()['find'](g=>!/refund|cancel|dispute|terminat/i['test'](g['name']+'\x20'+g['role']))??a['machine_shape'][a['machine_shape']['length']-0x1],e=b?.['has_logistics']?'physical':b?.['pure_digital']?'digital':'service_session',f=(a['guards']??[])['filter'](h=>/repository_data_check|required_info_evidence_gate|allocator_order_anchor/['test'](h['template_id']));return[{'name':a['variant']+'\x20fulfillment','type':e,'acceptanceCriteria':'Order\x20reaches\x20the\x20terminal\x20workflow\x20node\x20\x27'+d['name']+'\x27\x20('+d['role']+')','proofOfDelivery':f['length']>0x0?'wip_hash':'manual_confirm'}];}function validateConditionalParams(a,b){for(const d of a['conditional_guards']??[]){const e=b[d['param']];if(e===undefined)continue;if(typeof e!=='string'||!d['values']['includes'](e))throw new Error('invalid\x20\x27'+d['param']+'='+String(e)+'\x27\x20for\x20template\x20\x27'+a['id']+'\x27:\x20must\x20be\x20one\x20of\x20'+d['values']['map'](f=>'\x27'+f+'\x27')['join']('\x20|\x20')+('\x20(the\x20guard\x20variant\x20mounts\x20at\x20\x27'+d['emit_value']+'\x27)'));}}async function runGuide(a,b,c,d,e,f){const g=effectiveFeeParams(a,c),h=rewardPoolPrefill(a,b,c);if(h)g[h['fee_key']]=h['value'];validateFeeParams(g,a['id']),validateConditionalParams(a,g);const i=getIndustryModeRegistry()['getMode'](a['industry']),j=platformShareBps(g),k={'model':variantPaymentModel(a)},l=[],m=(a['allocator']['rows']?.['length']??0x0)>0x0;if(j!==undefined&&j>0x0&&!m&&a['allocator']['mode']==='rate'){const q=Math['round'](j)/0x64;l['push']({'recipient':'merchant','percentage':Math['round']((0x64-q)*0x64)/0x64}),l['push']({'recipient':'platform','percentage':q}),k['allocation']=l;}const n=variantRefundPolicy(a),o={'escrow':!![]};if(n)o['refundPolicy']=n;o['arbitration']=a['arbitration_mode']??o['arbitration']??inferArbitration(templateIntent(a,b));const p=await handleMerchantGuide({'intent':templateIntent(a,b),'guide_confirm':{'industry':a['industry'],'payment':k,'trust':o,'deliverables':variantDeliverables(a,i?.['traits']),...d&&Object['keys'](d)['length']>0x0?{'guard_resolutions':d}:{},...e?.['review_mode']?{'review_mode':e['review_mode']}:{},...e?.['reward_funding']!==undefined?{'reward_funding':e['reward_funding']}:{},...e?.['after_sales_mode']?{'after_sales_mode':e['after_sales_mode']}:{},...e?.['acceptance_mode']?{'acceptance_mode':e['acceptance_mode']}:{},...e?.['installment_mode']?{'installment_mode':e['installment_mode']}:{},...e?.['affiliate_mode']?{'affiliate_mode':e['affiliate_mode']}:{},...e?.['crowdfunding_mode']?{'crowdfunding_mode':e['crowdfunding_mode']}:{},...f?.['length']?{'sales':f}:{}},'template_override':{...a,'fee_params':g},'name_base':a['id']});if(a['allocator']['rows']?.['length'])p['template_allocator_rows']=a['allocator']['rows']['map'](s=>({...s}));p['template']={'id':a['id'],'archetype':a['archetype'],'recommended_role':a['recommended_role'],'fee_params':g},p['template_fee_param_landings']=buildFeeParamLandingTable(a,g);if(c&&Object['keys'](c)['length']>0x0)p['template_fee_overrides']=c;return h&&(p['fee_overrides_prefill']=h,p['next_action']=p['next_action']+'\x20Reward\x20pool\x20prefilled\x20from\x20your\x20request:\x20'+h['value']+'\x20—\x20adjust\x20via\x20fee_overrides.'),p;}export async function handleBenchmarkMigrationOperation(a){const b=strictParse(BenchmarkMigrationSchema,a,'benchmark_migration_operation\x20input'),c=b['industry']?resolveIndustryName(b['industry'])??b['industry']['toLowerCase']():undefined;let d;switch(b['action']){case'template_list':{const {templates:e,errors:f}=listTemplates(),g=c?e['filter'](i=>i['industry']===c):e,h=new Map(builtinTemplateDrift()['map'](i=>[i['template'],i['state']]));d={'action':'template_list','count':g['length'],'templates':g['map'](i=>({...templateSummary(i),'disk_state':h['get'](i['id'])??(BUILTIN_TEMPLATES['some'](j=>j['id']===i['id'])?'current':'untracked')})),'load_errors':f};break;}case'template_get':{const i=requireTemplate(b['template_id'],'template_get');d={'action':'template_get','template':{...i,...templateGetAids(i)}};break;}case'template_generate':{const j=requireTemplate(b['template_id'],'template_generate'),k=b['review_mode']??j['review_mode']??'none';if(k==='review_reward'&&!b['reward_funding'])return{'content':[{'type':'text','text':'template_generate\x20refused\x20—\x20no\x20plan\x20was\x20built.\x20Template\x20\x27'+j['id']+'\x27\x20resolves\x20to\x20review_mode\x20\x27review_reward\x27\x20(input'+(b['review_mode']?'':'\x20via\x20template\x20declaration')+'),\x20which\x20promises\x20buyers\x20a\x20claimable\x20review\x20bounty\x20—\x20an\x20unfunded\x20pool\x20must\x20not\x20ship.\x20Pass\x20reward_funding\x20(smallest-unit\x20string),\x20or\x20drop\x20the\x20mode\x20explicitly\x20(review_mode\x20\x27review\x27\x20keeps\x20the\x20review\x20rail\x20without\x20the\x20bounty;\x20\x27none\x27\x20removes\x20the\x20rail).'}],'structuredContent':{'result':{'type':'error','error':'review_mode\x20\x27'+k+'\x27\x20without\x20reward_funding\x20(INV-4)\x20on\x20template\x20\x27'+j['id']+'\x27.','error_code':'reward_funding_required','retryable':!![],'recovery_hint':'Pass\x20reward_funding\x20=\x20expected\x20orders\x20x\x20per-order\x20reward\x20(fee_param\x20review_reward_pool\x20is\x20the\x20planning\x20benchmark),\x20or\x20re-send\x20with\x20review_mode:\x27review\x27\x20(rail\x20only)\x20/\x20\x27none\x27\x20(no\x20rail).'},'message':'Refused:\x20a\x20review_reward\x20build\x20requires\x20a\x20funded\x20reward\x20pool.\x20See\x20recovery_hint.'}};if(!Array['isArray'](b['sales'])||b['sales']['length']===0x0)return{'content':[{'type':'text','text':'template_generate\x20refused\x20—\x20no\x20plan\x20was\x20built.\x20The\x20sellable\x20catalog\x20(sales)\x20is\x20required:\x20a\x20plan\x20without\x20one\x20publishes\x20a\x20Service\x20frozen\x20with\x20sales:\x20[]\x20and\x20every\x20order_new\x20aborts\x20(PLAN-SALES-01).\x20List\x20at\x20least\x20one\x20SKU:\x20{\x20name,\x20price,\x20quantity?,\x20wip_hash?\x20}\x20—\x20price\x20in\x20smallest\x20units.'}],'structuredContent':{'result':{'type':'error','error':'template_generate\x20without\x20a\x20non-empty\x20sales\x20catalog\x20(PLAN-SALES-01\x20upgraded\x20to\x20an\x20input\x20requirement,\x20amz9\x20A-2).','error_code':'sales_required','retryable':!![],'recovery_hint':'Pass\x20sales:\x20[{\x20name,\x20price,\x20quantity?,\x20wip_hash?\x20}]\x20—\x20one\x20entry\x20per\x20sellable\x20SKU\x20(wip_hash\x20from\x20the\x20wip_file\x20tool\x20upload).\x20migration_apply\x20is\x20unaffected:\x20it\x20confirms\x20an\x20already-reviewed\x20import.'},'message':'Refused:\x20template_generate\x20requires\x20a\x20sellable\x20catalog.\x20See\x20recovery_hint.'}};const l=scanTemplate(j);assertGenerateScanPassed(l,'template_generate');const m=await runGuide(j,b['description'],b['fee_overrides'],b['guard_resolutions'],{'review_mode':b['review_mode'],'reward_funding':b['reward_funding'],'after_sales_mode':b['after_sales_mode'],'acceptance_mode':b['acceptance_mode'],'installment_mode':b['installment_mode'],'affiliate_mode':b['affiliate_mode'],'crowdfunding_mode':b['crowdfunding_mode']},b['sales']);d=((()=>{const n=scanSummary(l,driftFace(j['id'])),o=buildVerdict(n,m);return{'action':'template_generate','template_id':j['id'],'scan':n,'plan':m,'verdict':o,'next_action':planNextAction(m,'template_generate',o)};})());break;}case'template_scan':{const n=requireTemplate(b['template_id'],'template_scan'),o=await templateScanDryRun(n);d={'action':'template_scan','scan':{...scanTemplate(n),'drift':driftFace(n['id']),'compile_dry_run':o}};break;}case'migration_import':{if(!b['description']||!b['description']['trim']())throw new Error('\x27description\x27\x20is\x20required\x20for\x20action=\x27migration_import\x27');const p=planMigration({'url':b['url'],'description':b['description'],'industry':c,'network':b['network']});if(!p)throw new Error('No\x20industry\x20template\x20matched\x20the\x20description.\x20Refine\x20the\x20description\x20or\x20pass\x20an\x20explicit\x20\x27industry\x27\x20hint.');d={'action':'migration_import','log':p,'next_action':'MigrationLog\x20ready.\x20Next:\x20call\x20action=\x27migration_review\x27\x20with\x20this\x20log\x20to\x20surface\x20the\x20mapped/unmapped/manual_review\x20items\x20for\x20user\x20confirmation.'};break;}case'migration_review':{if(!b['log'])throw new Error('\x27log\x27\x20is\x20required\x20for\x20action=\x27migration_review\x27');const q=b['log'],r=Array['isArray'](q['mapped'])?q['mapped']:[],s=Array['isArray'](q['unmapped'])?q['unmapped']:[],t=Array['isArray'](q['manual_review'])?q['manual_review']:[],u=q['risk_check']??{},v=q['source']?.['matched_template']??'',w=s['length']===0x0&&t['length']===0x0&&u['passed']===!![];d={'action':'migration_review','log':q,'review_summary':{'mapped_count':r['length'],'unmapped_count':s['length'],'manual_review_count':t['length'],'risk_passed':u['passed']===!![]},'next_action':w?'Review\x20clean.\x20Proceed:\x20call\x20action=\x27migration_apply\x27\x20with\x20template_id=\x27'+v+'\x27\x20to\x20produce\x20the\x20creation\x20plan\x20(network\x20defaults\x20to\x20testnet;\x20mainnet\x20requires\x20explicit\x20user\x20confirmation).':'Surface\x20the\x20'+s['length']+'\x20unmapped\x20and\x20'+t['length']+'\x20manual_review\x20items'+(u['passed']===!![]?'':'\x20plus\x20the\x20risk_check\x20findings')+'\x20to\x20the\x20user\x20for\x20a\x20decision\x20before\x20action=\x27migration_apply\x27\x20(template_id=\x27'+v+'\x27).'};break;}case'migration_apply':{const x=requireTemplate(b['template_id'],'migration_apply'),y=scanTemplate(x);assertScanPassed(y,'migration_apply');const z=b['network']??'testnet',A=await runGuide(x,b['description'],b['fee_overrides'],b['guard_resolutions'],{'review_mode':b['review_mode'],'reward_funding':b['reward_funding'],'after_sales_mode':b['after_sales_mode'],'acceptance_mode':b['acceptance_mode'],'installment_mode':b['installment_mode'],'affiliate_mode':b['affiliate_mode'],'crowdfunding_mode':b['crowdfunding_mode']},b['sales']);d=((()=>{const B=scanSummary(y,driftFace(x['id'])),C=buildVerdict(B,A);return{'action':'migration_apply','template_id':x['id'],'network':z,'scan':B,'plan':A,'verdict':C,'next_action':planNextAction(A,'migration_apply',C)};})());break;}default:throw new Error('Unknown\x20benchmark_migration_operation\x20action:\x20'+String(b['action']));}return{'content':[{'type':'text','text':JSON['stringify']({'result':d})}],'structuredContent':{'result':d}};}
|
|
1
|
+
import{strictParse}from'../../schema/index.js';import{BenchmarkMigrationSchema}from'../../schema/benchmark-migration/index.js';import{getTemplate,listTemplates,validateAllocatorRows,platformShareBps,builtinTemplateDrift}from'../../knowledge/template-loader.js';import{BUILTIN_TEMPLATES,auditTemplateOnceSlotArms,BUILTIN_TEMPLATES_VERSION,DISCOVERY_PRODUCT_REFS,DISCOVERY_TAG_VOCABULARY,discoveryTagsForTemplate}from'../../knowledge/builtin-templates.js';import{landPlatformCommission}from'../../knowledge/commission-landing.js';import{scanTemplate,buildFeeParamLandingTable}from'../../knowledge/template-scanner.js';import{planMigration}from'../../playbooks/service-build/migration-planner.js';import{handleMerchantGuide}from'../../playbooks/service-build/merchant-guide.js';import{inferArbitration}from'../../playbooks/service-build/intent-analyzer.js';import{getIndustryModeRegistry}from'../../extensions/index.js';import{listIndustries,resolveIndustryName}from'../../knowledge/industry-registry.js';import{claimNumber,discoverySignal,normalizeSemanticIR}from'../../knowledge/semantic-ir.js';import{handleRecommendIndustry}from'../../playbooks/service-build/mode-actions.js';import{handlerExecutor,materializePlan}from'../../composition/materialize.js';import{join,dirname}from'node:path';import{fileURLToPath}from'node:url';import{computeSrcDistStaleness}from'../upgrade-check.js';const __dirname=dirname(fileURLToPath(import.meta.url));export function staleBuildFace(a=join(__dirname,'..','..','..','src'),b=join(__dirname,'..','..','..','dist')){let c=null;try{c=computeSrcDistStaleness(a,b,{'srcExt':'.ts','distExt':'.js'});}catch{c=null;}if(!c)return{'stale':![],'known':![],'lag_minutes':null,'detail':'Stale-build\x20state\x20UNKNOWN\x20—\x20the\x20src/dist\x20trees\x20were\x20not\x20both\x20resolvable\x20(installed\x20dist-only\x20'+'package\x20or\x20a\x20build\x20in\x20progress),\x20so\x20template\x20freshness\x20could\x20not\x20be\x20verified.\x20Treat\x20the\x20'+'scan/plan\x20verdicts\x20as\x20unconfirmed.'};if(!c['stale'])return{'stale':![],'known':!![],'lag_minutes':c['lag_minutes'],'detail':'dist\x20is\x20current\x20with\x20src\x20(newest\x20compiled\x20.js\x20vs\x20newest\x20source\x20.ts\x20mtime\x20lag\x20'+c['lag_minutes']+'\x20'+'minute(s))\x20—\x20the\x20scan/plan\x20verdicts\x20reflect\x20this\x20workspace\x20checkout.'};return{'stale':!![],'known':!![],'lag_minutes':c['lag_minutes'],'detail':'dist\x20is\x20'+c['lag_minutes']+'\x20minute(s)\x20OLDER\x20than\x20src\x20(newest\x20compiled\x20.js\x20vs\x20newest\x20source\x20.ts\x20mtime)\x20'+'—\x20the\x20scan/plan\x20above\x20may\x20describe\x20superseded\x20template\x20knowledge.\x20Rebuild\x20(pnpm\x20build)\x20and\x20re-run\x20'+'before\x20acting\x20on\x20these\x20verdicts.'};}function templateSummary(a){return{'id':a['id'],'industry':a['industry'],'variant':a['variant'],'product_ref':a['product_ref'],'archetype':a['archetype'],'key_risk':a['key_risk'],'node_count':a['machine_shape']['length'],'guard_count':a['guards']['length'],'recommended_role':a['recommended_role'],'tags':discoveryTagsForTemplate(a['id'])};}function templateGetAids(a){const b=a['machine_shape']['some'](c=>c['name']==='reviewed');return{'claim_anchor':b?'review_node+final':'final_only','claim_anchor_note':b?'machine_shape\x20mounts\x20a\x20\x27reviewed\x27\x20node\x20—\x20the\x20buyer\x27s\x20structured\x20review\x20rides\x20that\x20node\x20alongside\x20the\x20final\x20settlement.':'no\x20\x27reviewed\x27\x20node\x20—\x20sanctioned\x20variant:\x20the\x20buyer\x27s\x20voice\x20rides\x20the\x20claim/arbitration\x20rail\x20only\x20(no\x20separate\x20review\x20stop).','allocator_count_note':'allocator.count\x20=\x20'+a['allocator']['count']+'\x20counts\x20SETTLEMENT-track\x20legs\x20only;\x20refund-track\x20legs\x20(rows[]\x20with\x20track:\x22refund\x22)\x20are\x20additional\x20and\x20NOT\x20included\x20in\x20this\x20count.\x20rows[]\x20carries\x20the\x20complete\x20executable\x20split\x20plan.','onchain_field_notes':['passport.impack\x20—\x20the\x20on-chain\x20field\x20is\x20spelled\x20`impack`\x20(passport.move,\x20packed\x20business\x20objects\x20in\x20the\x20passport\x20verification\x20context).\x20It\x20is\x20the\x20contract\x27s\x20own\x20field\x20name,\x20not\x20a\x20typo;\x20echo\x20it\x20verbatim.']};}function requireTemplate(a,b){if(!a)throw new Error('\x27template_id\x27\x20is\x20required\x20for\x20action=\x27'+b+'\x27');const c=getTemplate(a);if(!c)throw new Error('Unknown\x20template\x20id:\x20'+a+'\x20(use\x20action=\x27template_list\x27\x20to\x20see\x20valid\x20ids)');return c;}function driftFace(a){const b=builtinTemplateDrift()['find'](c=>c['template']===a);if(!b){const c=BUILTIN_TEMPLATES['some'](d=>d['id']===a);return c?{'template':a,'state':'current','catalog_version':BUILTIN_TEMPLATES_VERSION,'blocked':![],'repairable':![],'detail':'disk\x20body\x20matches\x20the\x20shipped\x20catalog\x20(hash-verified\x20sentinel)'}:{'template':a,'state':'untracked','catalog_version':undefined,'blocked':![],'repairable':![],'detail':'user-authored\x20template\x20—\x20no\x20builtin\x20catalog\x20binding\x20to\x20compare\x20against'};}return{'template':b['template'],'state':b['state'],'catalog_version':BUILTIN_TEMPLATES_VERSION,'blocked':!![],'repairable':b['repairable'],'detail':b['detail']};}function withOnceSlotAdvisories(a){try{const b=auditTemplateOnceSlotArms()['find'](c=>c['template_id']===a['template_id']);if(!b)return a;return{...a,'findings':[...a['findings'],{'rule_id':'R-ONCE-SLOT-ARM-254','severity':'medium','title':'Once-slot\x20arming\x20on\x20a\x20periodic\x20rail\x20('+b['kind']+')','detail':b['message'],'suggestion':'Arm\x20the\x20re-enterable\x20settlement/renewal\x20guard\x20with\x20identifier\x20255\x20plus\x20a\x20per-period\x20key\x20(period-<N>\x20from\x20chain\x20state,\x20e.g.\x20progress\x20history\x20count)\x20and\x20have\x20the\x20trigger\x20Passport\x20submit\x20the\x20same\x20value;\x20keep\x20254\x20for\x20one-shot-per-order\x20rails\x20only.\x20Re-run\x20action=\x27template_scan\x27\x20after\x20the\x20fix.'}]};}catch{return a;}}function scanSummary(a,b){a=withOnceSlotAdvisories(a);const c={};for(const d of a['findings'])c[d['severity']]=(c[d['severity']]??0x0)+0x1;return{'template_id':a['template_id'],'risk_level':a['risk_level'],'preflight_scan_passed':a['red_flags']['length']===0x0,'finding_count':a['findings']['length'],'findings_by_severity':c,'red_flags':a['red_flags'],'findings':a['findings'],'drift':b};}function assertScanPassed(a,b){const c=a['red_flags'];if(a['passed']||c['length']===0x0)return;throw new Error('action=\x27'+b+'\x27\x20blocked:\x20pre-deploy\x20scan\x20of\x20template\x20\x27'+a['template_id']+'\x27\x20found\x20CRITICAL\x20risk\x20—\x20'+c['join'](';\x20')+'.\x20Fix\x20the\x20template\x20(frontmatter\x20or\x20body)\x20and\x20re-run\x20action=\x27template_scan\x27.');}const GENERATE_HIGH_TOLERATED=new Set([]);function assertGenerateScanPassed(a,b){assertScanPassed(a,b);if(b!=='template_generate')return;const c=generateHighBlockers(a['template_id'],a['findings']);if(c['length']===0x0)return;throw new Error('action=\x27'+b+'\x27\x20blocked:\x20pre-deploy\x20scan\x20of\x20template\x20\x27'+a['template_id']+'\x27\x20found\x20'+c['length']+'\x20HIGH\x20finding(s)\x20—\x20'+c['map'](d=>(d['rule_id']??'HIGH')+':\x20'+d['title'])['join'](';\x20')+'.\x20Fix\x20the\x20template\x20(frontmatter\x20or\x20body)\x20and\x20re-run\x20action=\x27template_scan\x27.');}function generateHighBlockers(a,b){return b['filter'](c=>c['severity']==='high'&&!(c['rule_id']&&GENERATE_HIGH_TOLERATED['has'](a+'/'+c['rule_id'])));}export function buildVerdict(a,b,c){const d=[];!a['preflight_scan_passed']&&d['push']('scan:\x20'+(a['findings_by_severity']['critical']??0x0)+'\x20CRITICAL\x20finding(s)\x20(preflight\x20scan\x20failed)');if(c){const j=generateHighBlockers(a['template_id'],a['findings']??[]);j['length']>0x0&&d['push']('scan:\x20'+j['length']+'\x20HIGH\x20finding(s)\x20—\x20template_generate\x20would\x20refuse\x20(N-21):\x20'+j['map'](k=>((k['rule_id']??'HIGH')+':\x20'+(k['title']??''))['trim']())['join'](';\x20'));}const e=b['graph_validation'];if(e&&e['valid']===![]){const k=Array['isArray'](e['hard_violations'])?e['hard_violations']['length']:0x0,l=Array['isArray'](e['hard_violations'])?e['hard_violations']['map'](m=>m['id'])['join'](',\x20'):'';d['push']('graph_validation:\x20'+k+'\x20hard\x20violation(s)'+(l?'\x20('+l+')':''));}const f=b['audit'];if(f&&f['blocking']===!![]){const m=(f['findings']??[])['filter'](n=>n['level']==='critical'||n['level']==='high');d['push'](m['length']===0x0?'audit:\x20guide\x20audit\x20flagged\x20blocking\x20issue(s)\x20(plan.audit)':'audit:\x20'+m['length']+'\x20blocking\x20finding(s)\x20—\x20'+m['slice'](0x0,0x5)['map'](n=>((n['rule_id']??'?')+':\x20'+(n['title']??''))['trim']())['join'](';\x20')+(m['length']>0x5?'\x20(+'+(m['length']-0x5)+'\x20more\x20in\x20plan.audit.findings)':''));}const g=b['harness_check'],h=[...new Set((g?.['blocking_issues']??[])['filter'](n=>n['module']==='template')['flatMap'](n=>n['missing_constraints']??[]))];h['length']>0x0&&d['push']('compile:\x20'+h['length']+'\x20blocker(s)\x20—\x20merchant_guide\x20refuses\x20to\x20materialize\x20this\x20plan:\x20'+h['join'](',\x20'));const i=d['length']===0x0;return{'buildable':i,'blockers':d,'status':i?'READY':'BLOCKED'};}async function templateScanDryRun(a){const b=[{'name':'scan-probe','price':'1000000000','quantity':0x1}],c=a['review_mode']==='review_reward'?{'review_mode':'review_reward','reward_funding':'20000000','reward_claim_amount':'1000000'}:undefined;try{const d=await runGuide(a,undefined,undefined,undefined,c,b),f=buildVerdict(scanSummary(scanTemplate(a)),d,!![]);return{'status':f['buildable']?'ready':'blocked','buildable':f['buildable'],'blockers':f['blockers'],'note':'Compile\x20dry-run\x20on\x20synthetic\x20probe\x20inputs\x20(single\x20probe\x20SKU,\x20benchmark\x20reward\x20funding),\x20mirrored\x20to\x20the\x20template_generate\x20gate\x20(CRITICAL\x20+\x20N-21\x20HIGH\x20+\x20graph\x20+\x20audit).\x20Structural\x20blockers\x20are\x20REAL\x20—\x20the\x20generate\x20face\x20refuses\x20for\x20the\x20same\x20reason.\x20Blockers\x20naming\x20caller\x20inputs\x20(fee_overrides\x20/\x20guard_resolutions\x20/\x20catalog)\x20may\x20clear\x20with\x20real\x20values.'};}catch(g){return{'status':'unavailable','note':'Compile\x20dry-run\x20could\x20not\x20run\x20on\x20synthetic\x20probe\x20inputs\x20('+(g instanceof Error?g['message']:String(g))+').\x20This\x20is\x20a\x20probe\x20limitation,\x20NOT\x20a\x20template\x20verdict\x20—\x20run\x20template_generate\x20for\x20the\x20authoritative\x20buildability.'};}}export function planNextAction(a,b,c){const d=a['next_action'];if(typeof d==='string'&&d['startsWith']('Plan\x20ready.'))return d;if(c?.['buildable']){const f=Array['isArray'](a['pending_guard_designs'])?a['pending_guard_designs']['length']:0x0;return'Plan\x20is\x20buildable\x20(verdict.buildable=true).\x20Materialize\x20the\x20objects\x20in\x20plan.steps\x20order'+(f>0x0?',\x20resolving\x20the\x20'+f+'\x20pending\x20guard\x20design(s)\x20in\x20plan.pending_guard_designs\x20via\x20guard_resolutions\x20before\x20the\x20Machine\x20publish':'')+'.';}const e=Array['isArray'](a['pending_guard_designs'])?a['pending_guard_designs']['length']:0x0;return'Plan\x20BLOCKED\x20by\x20the\x20guide\x20audit\x20(see\x20plan.audit\x20/\x20plan.next_action).\x20Do\x20NOT\x20materialize,\x20'+'and\x20do\x20NOT\x20hand-build\x20the\x20objects\x20instead:\x20this\x20plan\x20is\x20the\x20wiring\x20authority\x20(Arbitration\x20+\x20'+'compensation-fund,\x20Contact/um,\x20allocator\x20rows)\x20and\x20hand-built\x20replicas\x20silently\x20drop\x20those\x20wirings.\x20'+(e>0x0?'Resolve\x20the\x20'+e+'\x20pending\x20guard\x20design(s)\x20in\x20plan.pending_guard_designs\x20via\x20guard_resolutions\x20(kind\x20\x27inline\x27\x20with\x20the\x20Guard\x20table+root,\x20kind\x20\x27template\x27\x20with\x20a\x20tpl_*\x20id,\x20or\x20{kind:\x27omit\x27}\x20for\x20advisory\x20designs\x20that\x20do\x20not\x20apply\x20to\x20this\x20shop),\x20':'Adjust\x20fee_overrides,\x20pick\x20another\x20template\x20variant,\x20or\x20fix\x20the\x20template,\x20')+('then\x20re-run\x20action=\x27'+b+'\x27.');}function templateIntent(a,b){if(b&&b['trim']())return b['trim']();return'Adopt\x20the\x20'+a['id']+'\x20industry\x20archetype\x20template\x20('+a['archetype']+')\x20for\x20the\x20'+a['industry']+'\x20industry.\x20'+('Primary\x20risk\x20to\x20mitigate:\x20'+a['key_risk']+'.');}function effectiveFeeParams(a,b){return{...a['fee_params'],...b??{}};}const REWARD_POOL_PATTERNS=[/(?:reward|review|bonus|tip|prize)[\s-]*pools?\s*(?:of|is|at|:|=)?\s*([0-9][0-9_,]*(?:\.[0-9]+)?)/i,/([0-9][0-9_,]*(?:\.[0-9]+)?)\s*(?:reward|review|bonus|tip|prize)[\s-]*pools?\b/i];export function extractRewardPoolCandidate(a){if(!a)return undefined;for(const b of REWARD_POOL_PATTERNS){const c=b['exec'](a);if(!c)continue;const d=Number(c[0x1]['replaceAll'](/[,_]/g,''));if(Number['isFinite'](d)&&d>=0x0)return d;}return undefined;}function rewardPoolPrefill(a,b,c,d){if(a['fee_params']['review_reward_pool']===undefined)return undefined;if(c?.['review_reward_pool']!==undefined)return undefined;const e=d?claimNumber(d,'reward_pool_amount'):undefined;if(e!==undefined)return{'fee_key':'review_reward_pool','value':e,'claim_source':'semantic_ir'};const f=extractRewardPoolCandidate(b);return f===undefined?undefined:{'fee_key':'review_reward_pool','value':f};}const FUNDING_THRESHOLD_PATTERNS=[/(?:funding|campaign|round)[\s-]*(?:threshold|goal)s?\s*(?:of|is|at|:|=)?\s*([0-9][0-9_,]*(?:\.[0-9]+)?)/i,/([0-9][0-9_,]*(?:\.[0-9]+)?)\s*(?:funding|campaign|round)[\s-]*(?:threshold|goal)\b/i],MIN_ORDER_PATTERNS=[/(?:min(?:imum)?)\s+order(?:\s+(?:price|value|amount))?\s*(?:of|is|at|:|=)?\s*([0-9][0-9_,]*(?:\.[0-9]+)?)/i,/([0-9][0-9_,]*(?:\.[0-9]+)?)\s*(?:min(?:imum)?)\s+order\b/i];export function extractFundingThresholdCandidate(a){if(!a)return undefined;for(const b of FUNDING_THRESHOLD_PATTERNS){const c=b['exec'](a);if(!c)continue;const d=Number(c[0x1]['replaceAll'](/[,_]/g,''));if(Number['isFinite'](d)&&d>=0x0)return d;}return undefined;}export function extractMinOrderCandidate(a){if(!a)return undefined;for(const b of MIN_ORDER_PATTERNS){const c=b['exec'](a);if(!c)continue;const d=Number(c[0x1]['replaceAll'](/[,_]/g,''));if(Number['isFinite'](d)&&d>=0x0)return d;}return undefined;}function numericFeePrefill(a,b,c,d,e,f,g){if(a['fee_params'][b]===undefined)return undefined;if(f?.[b]!==undefined)return undefined;const h=g?claimNumber(g,c):undefined;if(h!==undefined)return{'fee_key':b,'value':h,'claim_source':'semantic_ir'};const i=d(e);return i===undefined?undefined:{'fee_key':b,'value':i};}function validateFeeParams(a,b){const c=[];let d=0x0;for(const [e,f]of Object['entries'](a)){if(typeof f!=='number'||!Number['isFinite'](f))continue;if(e['endsWith']('_bps')){(!Number['isInteger'](f)||f<0x0||f>0x2710)&&c['push'](e+'='+f+'\x20is\x20not\x20an\x20integer\x20rate\x20in\x20[0,\x2010000]\x20bps');if(e['endsWith']('_share_bps'))d+=Math['max'](0x0,f);}else{if(e['endsWith']('_days')){if(f<=0x0||f>0xe42)c['push'](e+'='+f+'\x20is\x20outside\x20the\x20sane\x20window\x20range\x20(0,\x203650]\x20days');}else{if(e['endsWith']('_hours')){if(f<=0x0||f>0x2238)c['push'](e+'='+f+'\x20is\x20outside\x20the\x20sane\x20window\x20range\x20(0,\x208760]\x20hours');}}}}if(d>0x2710)c['push']('*_share_bps\x20sum\x20'+d+'\x20exceeds\x2010000\x20(a\x20pool\x20splits\x20into\x20at\x20most\x20100%)');if(c['length']>0x0)throw new Error('invalid\x20fee\x20parameters\x20for\x20template\x20\x27'+b+'\x27:\x20'+c['join'](';\x20')+'.\x20'+'Correct\x20the\x20template\x27s\x20fee_params\x20or\x20pass\x20valid\x20\x27fee_overrides\x27.');}export{validateAllocatorRows};export function variantPaymentModel(a){if(a['payment_model'])return a['payment_model'];const b=a['allocator']['rows']??[];if(b['some'](d=>d['track']==='refund'))return'escrow';const c=a['machine_shape']['map'](d=>d['name'])['join']('\x20')['toLowerCase']();if(/\b(milestone|revision|revis|draft|deliverable)\b/['test'](c))return'milestone';if(/\b(charge|renew|subscription|cycle|billing|monthly)\b/['test'](c))return'subscription';return'escrow';}function variantRefundPolicy(a){const b=a['allocator']['description']['toLowerCase']();if(/full[ -]?refund|100% refund|refund .*100/['test'](b))return'full';if(/pro-?rata|prorated/['test'](b))return'milestone_prorated';if(/partial/['test'](b))return'partial';return undefined;}export function variantDeliverables(a,b){const c=a['machine_shape']['filter'](g=>g['semantic_role']==='final'),d=c[c['length']-0x1]??[...a['machine_shape']]['reverse']()['find'](g=>!/refund|cancel|dispute|terminat/i['test'](g['name']+'\x20'+g['role']))??a['machine_shape'][a['machine_shape']['length']-0x1],e=b?.['has_logistics']?'physical':b?.['pure_digital']?'digital':'service_session',f=(a['guards']??[])['filter'](h=>/repository_data_check|required_info_evidence_gate|allocator_order_anchor/['test'](h['template_id']));return[{'name':a['variant']+'\x20fulfillment','type':e,'acceptanceCriteria':'Order\x20reaches\x20the\x20terminal\x20workflow\x20node\x20\x27'+d['name']+'\x27\x20('+d['role']+')','proofOfDelivery':f['length']>0x0?'wip_hash':'manual_confirm'}];}function validateConditionalParams(a,b){for(const d of a['conditional_guards']??[]){const e=b[d['param']];if(e===undefined)continue;if(typeof e!=='string'||!d['values']['includes'](e))throw new Error('invalid\x20\x27'+d['param']+'='+String(e)+'\x27\x20for\x20template\x20\x27'+a['id']+'\x27:\x20must\x20be\x20one\x20of\x20'+d['values']['map'](f=>'\x27'+f+'\x27')['join']('\x20|\x20')+('\x20(the\x20guard\x20variant\x20mounts\x20at\x20\x27'+d['emit_value']+'\x27)'));}}async function runGuide(a,b,c,d,e,f,g){const h=effectiveFeeParams(a,c),i=rewardPoolPrefill(a,b,c,g);if(i)h[i['fee_key']]=i['value'];const j=numericFeePrefill(a,'funding_threshold','funding_threshold_amount',extractFundingThresholdCandidate,b,c,g);if(j)h[j['fee_key']]=j['value'];const k=numericFeePrefill(a,'min_order_price','min_order_price_amount',extractMinOrderCandidate,b,c,g);if(k)h[k['fee_key']]=k['value'];validateFeeParams(h,a['id']),validateConditionalParams(a,h);const l=landPlatformCommission(a,h);if(l['error']!==undefined)throw new Error(l['error']);const m=l['rows']?{...a,'allocator':{...a['allocator'],'rows':l['rows'],'count':l['rows']['filter'](y=>y['track']==='settlement')['length']}}:a,n=getIndustryModeRegistry()['getMode'](a['industry']),o=platformShareBps(h),q={'model':variantPaymentModel(a)},r=[],s=(m['allocator']['rows']?.['length']??0x0)>0x0;if(o!==undefined&&o>0x0&&!s&&a['allocator']['mode']==='rate'){const y=Math['round'](o)/0x64;r['push']({'recipient':'merchant','percentage':Math['round']((0x64-y)*0x64)/0x64}),r['push']({'recipient':'platform','percentage':y}),q['allocation']=r;}const u=variantRefundPolicy(a),v={'escrow':!![]};if(u)v['refundPolicy']=u;v['arbitration']=a['arbitration_mode']??v['arbitration']??inferArbitration(templateIntent(a,b));const w=await handleMerchantGuide({'intent':templateIntent(a,b),'guide_confirm':{'industry':a['industry'],'payment':q,'trust':v,'deliverables':variantDeliverables(a,n?.['traits']),...d&&Object['keys'](d)['length']>0x0?{'guard_resolutions':d}:{},...e?.['review_mode']?{'review_mode':e['review_mode']}:{},...e?.['reward_funding']!==undefined?{'reward_funding':e['reward_funding']}:{},...e?.['reward_claim_amount']!==undefined?{'reward_claim_amount':e['reward_claim_amount']}:{},...e?.['after_sales_mode']?{'after_sales_mode':e['after_sales_mode']}:{},...e?.['acceptance_mode']?{'acceptance_mode':e['acceptance_mode']}:{},...e?.['installment_mode']?{'installment_mode':e['installment_mode']}:{},...e?.['affiliate_mode']?{'affiliate_mode':e['affiliate_mode']}:{},...e?.['crowdfunding_mode']?{'crowdfunding_mode':e['crowdfunding_mode']}:{},...e?.['logistics_mode']?{'logistics_mode':e['logistics_mode']}:{},...f?.['length']?{'sales':f}:{}},'template_override':{...m,'fee_params':h},'name_base':a['id']});m['allocator']['rows']?.['length']&&(w['template_allocator_rows']=m['allocator']['rows']['map'](z=>({...z})));if(l['landing']!==undefined)w['commission_landing']=l['landing'];w['template']={'id':a['id'],'archetype':a['archetype'],'recommended_role':a['recommended_role'],'fee_params':h},w['template_fee_param_landings']=buildFeeParamLandingTable(m,h);if(c&&Object['keys'](c)['length']>0x0)w['template_fee_overrides']=c;const x=[];if(i)x['push'](i);if(j)x['push'](j);if(k)x['push'](k);if(x['length']>0x0){w['fee_overrides_prefills']=x;for(const z of x){const A=z['fee_key']==='review_reward_pool'?'Reward\x20pool':z['fee_key']==='funding_threshold'?'Funding\x20threshold':'Minimum\x20order',B=z['claim_source']==='semantic_ir'?'\x20(from\x20the\x20semantic\x20IR\x20claim)':'';w['next_action']=w['next_action']+'\x20'+A+'\x20prefilled\x20from\x20your\x20request:\x20'+z['value']+B+'\x20—\x20adjust\x20via\x20fee_overrides.';}}return w;}export async function handleBenchmarkMigrationOperation(a){const b=strictParse(BenchmarkMigrationSchema,a,'benchmark_migration_operation\x20input'),c=b['industry']?resolveIndustryName(b['industry'])??b['industry']['toLowerCase']():undefined,d=b['semantic_ir']?normalizeSemanticIR(b['semantic_ir'],{'source_text':b['description']}):undefined,e=d?{'semantic_ir_digest':d['digest'],...d['issues']['length']>0x0?{'semantic_ir_issues':d['issues']}:{}}:undefined;let f;switch(b['action']){case'template_list':{const {templates:g,errors:h}=listTemplates(),i=c?g['filter'](k=>k['industry']===c):g,j=new Map(builtinTemplateDrift()['map'](k=>[k['template'],k['state']]));f={'action':'template_list','count':i['length'],'templates':i['map'](k=>({...templateSummary(k),'disk_state':j['get'](k['id'])??(BUILTIN_TEMPLATES['some'](l=>l['id']===k['id'])?'current':'untracked')})),'discovery_vocabulary':{'industries':listIndustries()['map'](k=>k['name'])['sort'](),'tags':[...DISCOVERY_TAG_VOCABULARY],'product_refs':[...DISCOVERY_PRODUCT_REFS]},'load_errors':h};break;}case'template_get':{const k=requireTemplate(b['template_id'],'template_get');f={'action':'template_get','template':{...k,...templateGetAids(k)}};break;}case'template_generate':{const l=requireTemplate(b['template_id'],'template_generate'),m=b['review_mode']??l['review_mode']??'none',n=[];m==='review_reward'&&!b['reward_funding']&&n['push']('reward_funding\x20is\x20required:\x20template\x20\x27'+l['id']+'\x27\x20resolves\x20to\x20review_mode\x20\x27review_reward\x27\x20(input'+(b['review_mode']?'':'\x20via\x20template\x20declaration')+'),\x20which\x20promises\x20buyers\x20a\x20claimable\x20review\x20bounty\x20—\x20an\x20unfunded\x20pool\x20must\x20not\x20ship\x20(INV-4).\x20Pass\x20reward_funding\x20(smallest-unit\x20string;\x20expected\x20orders\x20x\x20per-order\x20reward\x20—\x20fee_param\x20review_reward_pool\x20is\x20the\x20planning\x20benchmark),\x20or\x20drop\x20the\x20mode\x20explicitly\x20(review_mode\x20\x27review\x27\x20keeps\x20the\x20review\x20rail\x20without\x20the\x20bounty;\x20\x27none\x27\x20removes\x20the\x20rail).');(!Array['isArray'](b['sales'])||b['sales']['length']===0x0)&&n['push']('sales\x20is\x20required:\x20a\x20plan\x20without\x20a\x20sellable\x20catalog\x20publishes\x20a\x20Service\x20frozen\x20with\x20sales:\x20[]\x20and\x20every\x20order_new\x20aborts\x20(PLAN-SALES-01,\x20upgraded\x20to\x20an\x20input\x20requirement,\x20amz9\x20A-2).\x20Pass\x20sales:\x20[{\x20name,\x20price,\x20quantity?,\x20wip_hash?\x20}]\x20—\x20one\x20entry\x20per\x20sellable\x20SKU,\x20price\x20in\x20smallest\x20units\x20(wip_hash\x20from\x20the\x20wip_file\x20tool\x20upload).');if(n['length']>0x0)return{'content':[{'type':'text','text':'template_generate\x20refused\x20—\x20no\x20plan\x20was\x20built.\x20'+n['length']+'\x20input\x20gap(s),\x20ALL\x20listed\x20at\x20once\x20(AR-4\x20T-05):\x20'+n['map']((q,r)=>'('+(r+0x1)+')\x20'+q)['join']('\x20')}],'structuredContent':{'result':{'type':'error','error':'template_generate\x20input\x20preflight\x20failed\x20with\x20'+n['length']+'\x20gap(s)\x20on\x20template\x20\x27'+l['id']+'\x27\x20—\x20all\x20gaps\x20reported\x20in\x20this\x20single\x20response\x20(do\x20not\x20fix\x20one\x20and\x20rediscover\x20the\x20next).','error_code':'input_preflight_failed','retryable':!![],'recovery_hint':n['join']('\x20|\x20'),'gaps':n},'message':'Refused:\x20input\x20preflight\x20failed.\x20Fix\x20ALL\x20listed\x20gaps,\x20then\x20re-send\x20ONCE.\x20See\x20recovery_hint.'}};const o=scanTemplate(l);assertGenerateScanPassed(o,'template_generate');const p=await runGuide(l,b['description'],b['fee_overrides'],b['guard_resolutions'],{'review_mode':b['review_mode'],'reward_funding':b['reward_funding'],'reward_claim_amount':b['reward_claim_amount'],'after_sales_mode':b['after_sales_mode'],'acceptance_mode':b['acceptance_mode'],'installment_mode':b['installment_mode'],'affiliate_mode':b['affiliate_mode'],'crowdfunding_mode':b['crowdfunding_mode']},b['sales'],d?.['ir']);f=((()=>{const q=scanSummary(o,driftFace(l['id'])),r=buildVerdict(q,p);return{'action':'template_generate','template_id':l['id'],...e,'stale_build':staleBuildFace(),'scan':q,'plan':p,'verdict':r,'next_action':planNextAction(p,'template_generate',r)};})());break;}case'template_scan':{const q=requireTemplate(b['template_id'],'template_scan'),r=await templateScanDryRun(q);f={'action':'template_scan','stale_build':staleBuildFace(),'scan':{...withOnceSlotAdvisories(scanTemplate(q)),'drift':driftFace(q['id']),'compile_dry_run':r}};break;}case'migration_import':{if(!b['description']||!b['description']['trim']())throw new Error('\x27description\x27\x20is\x20required\x20for\x20action=\x27migration_import\x27');const s=d?handleRecommendIndustry({'intent':b['description'],'semantic_ir':b['semantic_ir']}):undefined,t=planMigration({'url':b['url'],'description':b['description'],'industry':c,'ir_industry':c?undefined:s?.['recommendations'][0x0]?.['industry'],'ir_discovery':d?discoverySignal(d['ir']):undefined,'network':b['network']});if(!t)throw new Error('No\x20industry\x20template\x20matched\x20the\x20description.\x20Refine\x20the\x20description\x20or\x20pass\x20an\x20explicit\x20\x27industry\x27\x20hint'+(d?',\x20or\x20add\x20discovery\x20tags\x20/\x20a\x20product_ref\x20to\x20semantic_ir\x20(tags\x20vocabulary:\x20template_list.discovery_vocabulary).':'\x20(or\x20provide\x20semantic_ir\x20with\x20discovery\x20tags\x20/\x20traits\x20for\x20a\x20non-English\x20description).'));f={'action':'migration_import','log':t,...s?{'inference_source':s['inference_source']}:{},...e,'next_action':'MigrationLog\x20ready.\x20Next:\x20call\x20action=\x27migration_review\x27\x20with\x20this\x20log\x20to\x20surface\x20the\x20mapped/unmapped/manual_review\x20items\x20for\x20user\x20confirmation.'};break;}case'plan_execute':{if(!b['plan']||typeof b['plan']!=='object'||Array['isArray'](b['plan']))throw new Error('\x27plan\x27\x20is\x20required\x20for\x20action=\x27plan_execute\x27\x20—\x20pass\x20the\x20object\x20returned\x20under\x20\x27plan\x27\x20by\x20template_generate\x20verbatim');const u=b['plan'],v=u['plan']!==undefined&&typeof u['plan']==='object'&&!Array['isArray'](u['plan'])&&Array['isArray'](u['plan']['steps'])?u['plan']:u;if(!Array['isArray'](v['steps']))throw new Error('action=\x27plan_execute\x27:\x20the\x20passed\x20plan\x20carries\x20no\x20steps[]\x20—\x20pass\x20the\x20template_generate\x20\x27plan\x27\x20object\x20verbatim');const w=Array['isArray'](b['completed_steps'])&&b['completed_steps']['length']>0x0||b['previous_outputs']?{'completedSteps':b['completed_steps']??[],'outputs':b['previous_outputs']??{}}:undefined,x=await materializePlan(v,{'execute':handlerExecutor(b['env'])},w),y=x['steps']['filter'](A=>A['status']==='blocked')['length'],z=x['steps']['find'](A=>A['status']==='failed');f={'action':'plan_execute','completed':x['completed'],'steps':x['steps'],'outputs':x['outputs'],'preflight':{'issues':x['preflight']['issues'],'findings':x['preflight']['findings']},'readback':x['readback'],'next_action':x['completed']?'Deployed.\x20Verify\x20the\x20store\x20(query_toolkit:\x20service\x20/\x20machine\x20/\x20orders),\x20then\x20discharge\x20any\x20post-deploy\x20module\x20obligations\x20the\x20guide\x20listed\x20under\x20harness_check.module_gaps.':y>0x0?'A\x20publish\x20step\x20was\x20BLOCKED\x20by\x20the\x20freeze\x20gate\x20—\x20the\x20store\x20is\x20NOT\x20live.\x20Fix\x20the\x20listed\x20preflight\x20checks\x20at\x20the\x20SOURCE\x20(re-run\x20template_generate);\x20never\x20patch\x20plan\x20steps\x20by\x20hand.':'Step\x20\x27'+(z?.['stepId']??'?')+'\x27\x20FAILED:\x20'+(z?.['error']??'unknown')+'.\x20RESUME\x20—\x20do\x20NOT\x20re-run\x20from\x20scratch\x20(duplicate\x20objects):\x20send\x20plan_execute\x20again\x20with\x20completed_steps\x20=\x20every\x20stepId\x20whose\x20status\x20is\x20\x27executed\x27\x20in\x20this\x20response,\x20and\x20previous_outputs\x20=\x20this\x20response\x27s\x20outputs.'};break;}case'migration_review':{if(!b['log'])throw new Error('\x27log\x27\x20is\x20required\x20for\x20action=\x27migration_review\x27');const A=b['log'],B=Array['isArray'](A['mapped'])?A['mapped']:[],C=Array['isArray'](A['unmapped'])?A['unmapped']:[],D=Array['isArray'](A['manual_review'])?A['manual_review']:[],E=A['risk_check']??{},F=A['source']?.['matched_template']??'',G=C['length']===0x0&&D['length']===0x0&&E['passed']===!![];f={'action':'migration_review','log':A,'review_summary':{'mapped_count':B['length'],'unmapped_count':C['length'],'manual_review_count':D['length'],'risk_passed':E['passed']===!![]},'next_action':G?'Review\x20clean.\x20Proceed:\x20call\x20action=\x27migration_apply\x27\x20with\x20template_id=\x27'+F+'\x27\x20to\x20produce\x20the\x20creation\x20plan\x20(network\x20defaults\x20to\x20testnet;\x20mainnet\x20requires\x20explicit\x20user\x20confirmation).':'Surface\x20the\x20'+C['length']+'\x20unmapped\x20and\x20'+D['length']+'\x20manual_review\x20items'+(E['passed']===!![]?'':'\x20plus\x20the\x20risk_check\x20findings')+'\x20to\x20the\x20user\x20for\x20a\x20decision\x20before\x20action=\x27migration_apply\x27\x20(template_id=\x27'+F+'\x27).'};break;}case'migration_apply':{const H=requireTemplate(b['template_id'],'migration_apply'),I=scanTemplate(H);assertScanPassed(I,'migration_apply');const J=b['network']??'testnet',K=await runGuide(H,b['description'],b['fee_overrides'],b['guard_resolutions'],{'review_mode':b['review_mode'],'reward_funding':b['reward_funding'],'reward_claim_amount':b['reward_claim_amount'],'after_sales_mode':b['after_sales_mode'],'acceptance_mode':b['acceptance_mode'],'installment_mode':b['installment_mode'],'affiliate_mode':b['affiliate_mode'],'crowdfunding_mode':b['crowdfunding_mode']},b['sales'],d?.['ir']);f=((()=>{const L=scanSummary(I,driftFace(H['id'])),M=buildVerdict(L,K);return{'action':'migration_apply','template_id':H['id'],'network':J,...e,'scan':L,'plan':K,'verdict':M,'next_action':planNextAction(K,'migration_apply',M)};})());break;}default:throw new Error('Unknown\x20benchmark_migration_operation\x20action:\x20'+String(b['action']));}return{'content':[{'type':'text','text':JSON['stringify']({'result':f})}],'structuredContent':{'result':f}};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{listServices,getServiceInfo,toggle as
|
|
1
|
+
import{listServices,getServiceInfo,toggle as a503a,setEnabled as a503b,reset as a503c}from'../../config/index.js';import{judgmentStatus,setJudgmentOverride,clearJudgmentOverride,clearJudgmentOverrides,patchUserJudgmentDoc,readUserJudgmentDocView}from'../../config/judgment.js';import{getStoreDualPayoutPolicy,setStoreDualPayoutPreauthorization,clearStoreDualPayoutPreauthorization}from'../../config/store-policy.js';import{strictParse}from'../../schema/index.js';import{ConfigOperationInputSchema}from'../../schema/config/index.js';import{LocalMark}from'@wowok/wowok';async function resolvePolicyAccount(a){const b=a['trim']();if(/^0x[0-9a-fA-F]{64}$/['test'](b))return b['toLowerCase']();try{const c=await LocalMark['Instance']()['get_address'](b)['catch'](()=>undefined)??undefined;if(typeof c==='string'&&/^0x[0-9a-fA-F]{64}$/['test'](c))return c['toLowerCase']();}catch{}return b['toLowerCase']();}export async function handleConfigOperation(a){const b=strictParse(ConfigOperationInputSchema,a,'config_operation\x20input'),{action:c,service:d,path:e,value:f}=b;let g;switch(c){case'list':g={'action':'list','services':listServices()};break;case'toggle':{if(!d)throw new Error('\x27service\x27\x20param\x20is\x20required\x20for\x20toggle');const h=d,i=getServiceInfo(h);if(!i)throw new Error('Unknown\x20service:\x20'+h+'.\x20Use\x20action=\x27list\x27\x20to\x20see\x20all\x20valid\x20services.');if(h==='confirm_gate'&&i['enabled'])throw new Error('confirm_gate\x20cannot\x20be\x20disabled\x20at\x20runtime.\x20'+'Set\x20WOWOK_CONFIRM_GATE=0\x20in\x20the\x20server\x20environment\x20and\x20restart\x20if\x20you\x20really\x20want\x20it\x20off.');const j=a503a(h);g={'action':'toggle','service':h,'enabled':j,'reminder':i['reminder']};break;}case'disable':{if(!d)throw new Error('\x27service\x27\x20param\x20is\x20required\x20for\x20disable');const k=d,l=getServiceInfo(k);if(!l)throw new Error('Unknown\x20service:\x20'+k+'.\x20Use\x20action=\x27list\x27\x20to\x20see\x20all\x20valid\x20services.');if(k==='confirm_gate')throw new Error('confirm_gate\x20cannot\x20be\x20disabled\x20at\x20runtime.\x20'+'Set\x20WOWOK_CONFIRM_GATE=0\x20in\x20the\x20server\x20environment\x20and\x20restart\x20if\x20you\x20really\x20want\x20it\x20off.');a503b(k,![]),g={'action':'disable','service':k,'enabled':![],'reminder':l['reminder']};break;}case'enable':{if(!d)throw new Error('\x27service\x27\x20param\x20is\x20required\x20for\x20enable');const m=d,n=getServiceInfo(m);if(!n)throw new Error('Unknown\x20service:\x20'+m+'.\x20Use\x20action=\x27list\x27\x20to\x20see\x20all\x20valid\x20services.');a503b(m,!![]),g={'action':'enable','service':m,'enabled':!![],'reminder':n['reminder']};break;}case'reset':{if(!d)throw new Error('\x27service\x27\x20param\x20is\x20required\x20for\x20reset');const o=d,p=getServiceInfo(o);if(!p)throw new Error('Unknown\x20service:\x20'+o+'.\x20Use\x20action=\x27list\x27\x20to\x20see\x20all\x20valid\x20services.');a503c(o),g={'action':'reset','service':o,'enabled':getServiceInfo(o)?.['enabled'],'reminder':p['reminder'],'reset':!![]};break;}case'info':{if(!d)throw new Error('\x27service\x27\x20param\x20is\x20required\x20for\x20info');const q=d,r=getServiceInfo(q);if(!r)throw new Error('Unknown\x20service:\x20'+q+'.\x20Use\x20action=\x27list\x27\x20to\x20see\x20all\x20valid\x20services.');g={'action':'info',...r};break;}case'judgment_list':g={'action':'judgment_list',...judgmentStatus()};break;case'judgment_set':{if(!e)throw new Error('\x27path\x27\x20param\x20is\x20required\x20for\x20judgment_set\x20(dotted,\x20e.g.\x20\x27evaluation.weights.trust_reviews\x27)');if(!('value'in b))throw new Error('\x27value\x27\x20param\x20is\x20required\x20for\x20judgment_set');const s=setJudgmentOverride(e,f);if(!s['ok'])throw new Error(s['error']);g={'action':'judgment_set','path':e,'value':f,'applied':!![]};break;}case'judgment_reset':{const t=e?clearJudgmentOverride(e)?0x1:0x0:clearJudgmentOverrides();g={'action':'judgment_reset',...e?{'path':e}:{},'cleared':t};break;}case'judgment_doc_read':{g={'action':'judgment_doc_read',...readUserJudgmentDocView()};break;}case'judgment_doc_patch':{if(!b['patch']||typeof b['patch']!=='object'||Array['isArray'](b['patch']))throw new Error('\x27patch\x27\x20param\x20is\x20required\x20for\x20judgment_doc_patch\x20(a\x20partial\x20judgment\x20document\x20object,\x20e.g.\x20{\x22evaluation\x22:\x20{\x22weights\x22:\x20{…}}})');g={'action':'judgment_doc_patch',...patchUserJudgmentDoc(b['patch'])};break;}case'store_dual_payout_get':{if(!b['account'])throw new Error('\x27account\x27\x20param\x20is\x20required\x20for\x20store_dual_payout_get\x20(the\x20store\x27s\x20signing\x20account)');const u=await resolvePolicyAccount(b['account']),v=getStoreDualPayoutPolicy(u);g={'action':'store_dual_payout_get','account':b['account'],'preauthorized':v?.['preauthorized']===!![],...v?.['authorized_at']?{'authorized_at':v['authorized_at']}:{},...v?.['note']?{'note':v['note']}:{},...v?.['network']?{'network':v['network']}:{}};break;}case'store_dual_payout_set':{if(!b['account'])throw new Error('\x27account\x27\x20param\x20is\x20required\x20for\x20store_dual_payout_set\x20(the\x20store\x27s\x20signing\x20account)');const w=await resolvePolicyAccount(b['account']),x=setStoreDualPayoutPreauthorization(w,{'confirm':b['confirm']===!![],...b['note']?{'note':b['note']}:{}});g={'action':'store_dual_payout_set','account':b['account'],'preauthorized':!![],'authorized_at':x['authorized_at'],...x['note']?{'note':x['note']}:{},'reminder':'Recorded\x20as\x20a\x20HUMAN\x20merchant\x20decision\x20(D-1).\x20The\x20allocation\x20gate\x20now\x20honors\x20acknowledge_dual_payout\x20'+'for\x20this\x20store.\x20Keep\x20the\x20note\x20meaningful\x20—\x20this\x20is\x20the\x20audit\x20trail\x20for\x20a\x20standing\x20commercial\x20netting\x20policy.'};break;}case'store_dual_payout_clear':{if(!b['account'])throw new Error('\x27account\x27\x20param\x20is\x20required\x20for\x20store_dual_payout_clear\x20(the\x20store\x27s\x20signing\x20account)');const y=await resolvePolicyAccount(b['account']),z=clearStoreDualPayoutPreauthorization(y);g={'action':'store_dual_payout_clear','account':b['account'],'cleared':z};break;}default:throw new Error('Unknown\x20config_operation\x20action:\x20'+String(c));}return{'content':[{'type':'text','text':JSON['stringify']({'result':g})}],'structuredContent':{'result':g}};}
|
|
@@ -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{query_objects,ArbStatus,createQueryCoverage,discoveryDataSource,remoteIndexUrl}from'@wowok/wowok';import{enumerateServices,enumerateDemands,enumerateArbs,matchServicesViaIndex}from'../../knowledge/jsonrpc-enum.js';import{KNOWN_CAPABILITIES}from'../../data/api/match.js';import{fetchObjectLinkerCore,batchQueryObjectsByIds}from'../../graph/onchain/sdk-batch.js';import{summarizeCapabilityGaps}from'../../evaluation/gap.js';import{resolveNetwork}from'./network.js';import{composeServicesForDemand}from'../../evaluation/composer.js';import{matchDemandToServices,matchServiceToDemands}from'../../evaluation/builtins/demand-match.js';import{nextOperationForServiceMatch,nextOperationForDemandMatch,nextOperationForServiceOrder}from'../../evaluation/match-operation.js';import{extractDemandCapability}from'../../evaluation/extract.js';import{assessArbitration}from'../../evaluation/builtins/arbitration-score.js';import{resolveCategoryMatchRules,toSoftWeightInjection,applyHardConstraints}from'../../evaluation/category-match-rules.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{applyPolicyGates,applyPolicyRerank,buildPolicyEffect,policyToInjection,resolveMatchPolicy}from'../../evaluation/match-policy.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'])};}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'demand_match':{const k=await matchDemandToServices(capabilityFromInput(b['demand_cap']),b['services'],await resolveInjection(b['account'],b['injection']),0x5,b['presenter_history']);c={'action':'demand_match','matches':k['map'](l=>({'service':l['service'],'result':l['result'],'next':nextOperationForDemandMatch(l['service']),'order':nextOperationForServiceOrder(l['service'])}))};break;}case'service_match':{const l=await matchServiceToDemands(capabilityFromInput(b['service_cap']),b['demands'],await resolveInjection(b['account'],b['injection']),0x5,b['presenter_history']);c={'action':'service_match','matches':l['map'](n=>({'demand':n['demand'],'result':n['result'],'next':nextOperationForServiceMatch(n['demand'],null)}))};break;}case'path_reasoning':{const m=b['account']?await getEffectivePersona(b['account']):null,n=b['appetite']??m?.['layer']['preferences']?.['risk_appetite'],o=b['requirements']??m?.['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':n,'requirements':o,'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 p=!b['sensitivity']?inferSensitivity(b['description']??''):null,q=b['sensitivity']??p['sensitivity'],r=p?.['signals']??[],s=await resolveNetwork(b['context_network']),t={'raw':b['location'],...b['region']??{}},u=expandSearchScope(q,t),v=await enumerateServices(s,{'max_objects':b['max_objects'],'no_cache':b['no_cache'],'location_any':u['search_terms'],'coin_type':b['coin_type'],'name_contains':b['name_contains']}),w=rankByLocation(q,t,v['services']['map'](x=>({'id':x['object'],'name':x['name'],'location':x['location']})));c={'action':'discover_services','sensitivity':q,'inference_signals':r,'services':w['map'](x=>{const y=v['services']['find'](z=>z['object']===x['id']);return{'object':x['id'],'name':y?.['name'],'location':y?.['location'],'relation':x['relation'],'satisfied':x['satisfied'],'score':x['score'],'reason':x['reason']};}),'total_enumerated':v['total_enumerated'],'has_more':v['has_more'],'coverage':v['coverage'],'scope_advice':{'search_terms':u['search_terms'],'ai_enrichment_note':u['ai_enrichment_note']}};break;}case'discover_demands':{const x=await resolveNetwork(b['context_network']),y=await enumerateDemands(x,{'max_objects':b['max_objects'],'no_cache':b['no_cache']}),z=b['location']?.['toLowerCase'](),A=y['demands']['filter'](B=>!z||(B['location']??'')['toLowerCase']()['includes'](z))['map'](B=>({'object':B['object'],'description':B['description']??'','location':B['location']??'','presenters_count':B['presenters_count']??0x0,'permission':B['permission']??''}));c={'action':'discover_demands','demands':A,'total_enumerated':y['total_enumerated'],'has_more':y['has_more'],'coverage':y['coverage']};break;}case'demand_present':{const B=await resolveNetwork(b['context_network']),C=await enumerateDemands(B,{'max_objects':b['max_objects'],'no_cache':b['no_cache']}),D=b['location']?.['toLowerCase'](),E=C['demands']['filter'](I=>!D||(I['location']??'')['toLowerCase']()['includes'](D)),F=new Map(E['map'](I=>[I['object'],(I['guards']?.['length']??0x0)>0x0])),G=E['map'](I=>({'object':I['object'],'description':I['description']??'','location':I['location']??'','rewards':I['rewards']??[],'um':I['um']??null})),H=await matchServiceToDemands(capabilityFromInput(b['service_cap']),G,await resolveInjection(b['account'],b['injection']),b['limit']??0x5);c={'action':'demand_present','matches':H['map'](I=>{const J=F['get'](I['demand']['object'])??![];return{'demand':I['demand'],'result':I['result'],'next':nextOperationForServiceMatch(I['demand'],J)};}),'total_enumerated':C['total_enumerated'],'has_more':C['has_more'],'coverage':C['coverage']};break;}case'market_metrics':{const I=await resolveNetwork(b['context_network']),J=await computeMarketMetrics(I,b['no_cache']),K=await computeOrderFlow(I,{'noCache':b['no_cache'],'maxPages':b['limit']?Math['max'](0x1,Math['ceil'](b['limit']/0x32)):undefined});c={'action':'market_metrics',...J,'order_flow':K};break;}case'anti_cheat':{const L=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':L};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 M=b['market_signals'];if(!M)throw new Error('dynamic_pricing\x20op\x20requires\x20market_signals');c={'action':'market_operations','result':suggestPricing({'supplyCount':M['supplyCount'],'demandCount':M['demandCount'],'avgPrice':M['avgPrice'],'myPrice':M['myPrice'],'competitorPrices':M['competitorPrices'],'recentOrderCount':M['recentOrderCount'],'repeatCustomerRate':M['repeatCustomerRate']})};}else c={'action':'market_operations','result':buildCustomerRelationships(b['customer_orders']??[])};}}break;}case'match_discover':{const N=!b['sensitivity']?inferSensitivity(b['description']??''):null,O=b['sensitivity']??N['sensitivity'],P=N?.['signals']??[],Q=await resolveNetwork(b['context_network']),R={'raw':b['location'],...b['region']??{}},S=expandSearchScope(O,R),T=resolveMatchPolicy(b['match_policy'],'demand_to_supply'),U=(b['required_capabilities']??[])['filter'](ag=>KNOWN_CAPABILITIES['includes'](ag)),V=!b['coin_type']&&!b['name_contains'],W=discoveryDataSource();let X,Y=new Map(),Z='legacy_enumeration';const a0=()=>enumerateServices(Q,{'max_objects':b['max_objects'],'no_cache':b['no_cache'],'location_any':S['search_terms'],'coin_type':b['coin_type'],'name_contains':b['name_contains']});if(V&&W!=='legacy'&&remoteIndexUrl())try{const ag=await matchServicesViaIndex(Q,{'q':b['description'],'location':b['location'],'budgetWei':b['budget'],'capabilities':U['length']>0x0?U:undefined,'limit':Math['min'](0x64,b['max_objects']??0x64),'recallLimit':Math['min'](0x3e8,Math['max'](0xc8,b['max_objects']??0xc8))});X={'services':ag['candidates']['map'](ah=>({'object':ah['objectId'],'location':ah['publicFeatures']['location']??'','json':ah['payloadJson']??null})),'total_enumerated':ag['recall']['liveSet']??ag['recall']['gated'],'has_more':ag['truncated'],'coverage':ag['coverage']},Y=new Map(ag['candidates']['map'](ah=>[ah['objectId'],ah])),Z='remote_index';}catch(ah){if(W==='remote')throw ah;X=await a0();const ai=ah?.['code'],aj=typeof ai==='string'&&/^INDEX_[A-Z_]+$/['test'](ai)?ai:'INDEX_UNAVAILABLE';X['coverage']=createQueryCoverage({'mode':X['coverage']['mode'],'totalEnumerated':X['coverage']['total_enumerated'],'truncated':X['coverage']['truncated'],'chainId':X['coverage']['chain_id'],'degradedReasons':[...X['coverage']['degraded_reasons'],'MATCH_INDEX_FALLBACK',aj]});}else X=await a0();const a1=new Set(b['required_capabilities']??[]),a2=extractDemandCapability({'object':'intent','description':b['description'],'location':b['location'],'owner':b['account']},{'price_max':b['budget']!==undefined?BigInt(b['budget']):undefined,'capabilities':{'has_arbitration':a1['has']('has_arbitration'),'has_refund_path':a1['has']('has_refund_path'),'has_milestone_nodes':a1['has']('has_milestone_nodes'),'has_compensation_fund':a1['has']('has_compensation_fund'),'has_wip_verification':a1['has']('has_wip_verification'),'has_messenger':a1['has']('has_messenger'),'has_buy_guard':a1['has']('has_buy_guard'),'has_dynamic_pricing':a1['has']('has_dynamic_pricing'),'is_published':!![],'is_paused':![]}}),a3=rankByLocation(O,R,X['services']['map'](ak=>({'id':ak['object'],'name':ak['name'],'location':ak['location']}))),a4=a3['filter'](ak=>ak['satisfied']),a5=X['services']['filter'](ak=>a4['some'](al=>al['id']===ak['object']))['map'](serviceSummaryToExtract),a6=resolveCategoryMatchRules(b['category']);let a7=a5;const a8=[];if(a6){const ak=applyHardConstraints(a6,a5);a7=ak['passed'];for(const al of ak['dropped']){a8['push']({'object':al['candidate']['object'],'reason':al['constraint']['description']});}}let a9=await resolveInjection(b['account'],b['injection']);a6&&(a9=mergeInjections(a9,toSoftWeightInjection(a6)));let aa,ab;if(T){const am=applyPolicyGates(T,a7,{'budgetWei':b['budget']!==undefined?BigInt(b['budget']):undefined});a7=am['passed'];const an=policyToInjection(T);a9=mergeInjections(a9,an['injection']),ab={'gateOutcome':am,'weights':an};}const ac=await matchDemandToServices(a2,a7,a9,a7['length'],b['presenter_history']),ad=new Map(ac['map'](ao=>[ao['service']['object'],ao['result']])),ae=new Set(a7['map'](ao=>ao['object']));let af=a4['filter'](ao=>ae['has'](ao['id']))['map'](ao=>{const ap=X['services']['find'](ar=>ar['object']===ao['id']),aq=Y['get'](ao['id']);return{'service':serviceSummaryToExtract(ap),'location':{'relation':ao['relation'],'satisfied':ao['satisfied'],'score':ao['score'],'reason':ao['reason']},'result':ad['get'](ao['id']),...aq?{'server_match':{'policy_version':aq['serverEvaluation']['policyVersion'],'total':aq['serverEvaluation']['total'],'breakdown':aq['serverEvaluation']['breakdown'],'unknown_rules':aq['serverEvaluation']['unknownRules'],'red_flags':aq['serverEvaluation']['redFlags'],'channels':aq['channels'],'rrf':aq['rrf']}}:{}};});if(T&&ab){const ao=applyPolicyRerank(af,T);af=ao['matches'],aa=buildPolicyEffect(T,ab['gateOutcome'],ab['weights'],ao);}c={'action':'match_discover','sensitivity':O,'inference_signals':P,'match_route':Z,'matches':af,'total_enumerated':X['total_enumerated'],'has_more':X['has_more'],'coverage':X['coverage'],'scope_advice':{'search_terms':S['search_terms'],'ai_enrichment_note':S['ai_enrichment_note']},...aa?{'policy_effect':aa}:{}};break;}case'arbitration_score':{let ap=b['history'];const aq=b['context_network']??'testnet';if((!ap||ap['length']===0x0)&&b['arbitration']['object'])try{const as=await enumerateArbs(aq,{'arbitration':b['arbitration']['object']});ap=await arbCasesWithRoles(as['arbs'],aq);}catch{ap=b['history'];}if((!ap||ap['length']===0x0)&&b['arbitration']['object'])try{const at=await query_objects({'objects':[b['arbitration']['object']],'network':aq}),au=at?.['objects']?.[0x0];if(au?.['permission']){const av=await fetchObjectLinkerCore(au['permission'],aq),aw=(av?.['items']??[])['map'](ay=>ay['who'])['filter'](ay=>ay!==b['arbitration']['object']),ax=[];for(const ay of aw['slice'](0x0,0xa)){const az=await enumerateArbs(aq,{'arbitration':ay})['catch'](()=>undefined);az?.['arbs']?.['length']&&ax['push'](...await arbCasesWithRoles(az['arbs'],aq));}if(ax['length']>0x0)ap=ax;}}catch{}const ar=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':ap,'entity_votes':b['entity_votes'],'fee_median':b['fee_median']},await resolveInjection(b['account'],b['injection']));c={'action':'arbitration_score',...ar};break;}case'account_events':{const aA=await runAccountEventWatchers({'account':b['account'],'network':await resolveNetwork(b['context_network']),'reviews':b['reviews']?.['map'](aB=>({'reviewer':aB['reviewer'],'rating':aB['rating'],'tags':aB['tags'],'comment':aB['comment'],'orderRef':aB['orderRef'],'timestamp':aB['timestamp'],'verified':aB['verified']??![]})),'order_history':b['order_history']},b['categories']);c={'action':'account_events','events':aA};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{query_objects,ArbStatus,createQueryCoverage,discoveryDataSource,remoteIndexUrl}from'@wowok/wowok';import{enumerateServices,enumerateDemands,enumerateArbs,matchServicesViaIndex}from'../../knowledge/jsonrpc-enum.js';import{KNOWN_CAPABILITIES}from'../../data/api/match.js';import{fetchObjectLinkerCore,batchQueryObjectsByIds}from'../../graph/onchain/sdk-batch.js';import{summarizeCapabilityGaps}from'../../evaluation/gap.js';import{resolveNetwork}from'./network.js';import{composeServicesForDemand}from'../../evaluation/composer.js';import{matchDemandToServices,matchServiceToDemands}from'../../evaluation/builtins/demand-match.js';import{nextOperationForServiceMatch,nextOperationForDemandMatch,nextOperationForServiceOrder}from'../../evaluation/match-operation.js';import{extractDemandCapability}from'../../evaluation/extract.js';import{assessArbitration}from'../../evaluation/builtins/arbitration-score.js';import{resolveCategoryMatchRules,toSoftWeightInjection,applyHardConstraints}from'../../evaluation/category-match-rules.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,resolveMatchPolicy}from'../../evaluation/match-policy.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'])};}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'demand_match':{const k=await matchDemandToServices(capabilityFromInput(b['demand_cap']),b['services'],await resolveInjection(b['account'],b['injection']),0x5,b['presenter_history']);c={'action':'demand_match','matches':k['map'](l=>({'service':l['service'],'result':l['result'],'next':nextOperationForDemandMatch(l['service']),'order':nextOperationForServiceOrder(l['service'])}))};break;}case'service_match':{const l=await matchServiceToDemands(capabilityFromInput(b['service_cap']),b['demands'],await resolveInjection(b['account'],b['injection']),0x5,b['presenter_history']);c={'action':'service_match','matches':l['map'](n=>({'demand':n['demand'],'result':n['result'],'next':nextOperationForServiceMatch(n['demand'],null)}))};break;}case'path_reasoning':{const m=b['account']?await getEffectivePersona(b['account']):null,n=b['appetite']??m?.['layer']['preferences']?.['risk_appetite'],o=b['requirements']??m?.['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':n,'requirements':o,'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 p=!b['sensitivity']?inferSensitivity(b['description']??''):null,q=b['sensitivity']??p['sensitivity'],r=p?.['signals']??[],s=await resolveNetwork(b['context_network']),t={'raw':b['location'],...b['region']??{}},u=expandSearchScope(q,t),v=await enumerateServices(s,{'max_objects':b['max_objects'],'no_cache':b['no_cache'],'location_any':u['search_terms'],'coin_type':b['coin_type'],'name_contains':b['name_contains']}),w=rankByLocation(q,t,v['services']['map'](x=>({'id':x['object'],'name':x['name'],'location':x['location']})));c={'action':'discover_services','sensitivity':q,'inference_signals':r,'services':w['map'](x=>{const y=v['services']['find'](z=>z['object']===x['id']);return{'object':x['id'],'name':y?.['name'],'location':y?.['location'],'relation':x['relation'],'satisfied':x['satisfied'],'score':x['score'],'reason':x['reason']};}),'total_enumerated':v['total_enumerated'],'has_more':v['has_more'],'coverage':v['coverage'],'scope_advice':{'search_terms':u['search_terms'],'ai_enrichment_note':u['ai_enrichment_note']}};break;}case'discover_demands':{const x=await resolveNetwork(b['context_network']),y=resolveMatchPolicy(b['match_policy'],'supply_to_demand'),z=await enumerateDemands(x,{'max_objects':b['max_objects'],'no_cache':b['no_cache']}),A=b['location']?.['toLowerCase'](),B=z['demands']['filter'](E=>!A||(E['location']??'')['toLowerCase']()['includes'](A))['map'](E=>({'object':E['object'],'description':E['description']??'','location':E['location']??'','presenters_count':E['presenters_count']??0x0,'permission':E['permission']??''}));let C=B,D;if(y){const E=z['demands']['filter'](J=>!A||(J['location']??'')['toLowerCase']()['includes'](A))['map'](J=>({'object':J['object'],'description':J['description']??'','location':J['location']??'','rewards':J['rewards'],'um':J['um']??null,'owner':typeof J['owner']==='string'?J['owner']:undefined,'guards':J['guards'],'presenters_count':J['presenters_count']})),F=applyDemandPolicyGates(y,E),G=new Set(F['passed']['map'](J=>J['object']));C=B['filter'](J=>G['has'](J['object']));const H=y['output']?.['top_n'];if(H!==undefined)C=C['slice'](0x0,H);const I=[];Object['keys'](y['weights']??{})['length']>0x0&&I['push']('weights\x20not\x20applicable\x20in\x20discover_demands\x20(no\x20private\x20scoring\x20at\x20this\x20stage;\x20use\x20demand_present)'),y['rerank']!==undefined&&I['push']('rerank\x20not\x20applicable\x20in\x20discover_demands\x20(no\x20private\x20scoring\x20at\x20this\x20stage;\x20use\x20demand_present)'),D=buildPolicyEffect(y,F,{'applied':{},'ignored':[]},{'order':'enumeration\x20order\x20(discover_demands\x20performs\x20no\x20private\x20scoring)','diversity_applied':![],'deferred':0x0,'ignored':[]},I);}c={'action':'discover_demands','demands':C,'total_enumerated':z['total_enumerated'],'has_more':z['has_more'],'coverage':z['coverage'],...D?{'policy_effect':D}:{}};break;}case'demand_present':{const J=await resolveNetwork(b['context_network']),K=resolveMatchPolicy(b['match_policy'],'supply_to_demand'),L=await enumerateDemands(J,{'max_objects':b['max_objects'],'no_cache':b['no_cache']}),M=b['location']?.['toLowerCase'](),N=L['demands']['filter'](X=>!M||(X['location']??'')['toLowerCase']()['includes'](M)),O=new Map(N['map'](X=>[X['object'],(X['guards']?.['length']??0x0)>0x0])),P=N['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})),Q=N['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']}));let R=await resolveInjection(b['account'],b['injection']),S=P,T,U;if(K){const X=applyDemandPolicyGates(K,Q),Y=new Set(X['passed']['map'](a0=>a0['object']));S=P['filter'](a0=>Y['has'](a0['object']));const Z=policyToInjection(K);R=mergeInjections(R,Z['injection']),U={'gateOutcome':X,'weights':Z};}const V=await matchServiceToDemands(capabilityFromInput(b['service_cap']),S,R,K?S['length']:b['limit']??0x5);let W=V['map'](a0=>{const a1=O['get'](a0['demand']['object'])??![];return{'demand':a0['demand'],'result':a0['result'],'next':nextOperationForServiceMatch(a0['demand'],a1)};});if(K&&U){const a0=rerankDemandMatches(W,K);W=a0['matches'],T=buildPolicyEffect(K,U['gateOutcome'],U['weights'],a0);}c={'action':'demand_present','matches':W,'total_enumerated':L['total_enumerated'],'has_more':L['has_more'],'coverage':L['coverage'],...T?{'policy_effect':T}:{}};break;}case'market_metrics':{const a1=await resolveNetwork(b['context_network']),a2=await computeMarketMetrics(a1,b['no_cache']),a3=await computeOrderFlow(a1,{'noCache':b['no_cache'],'maxPages':b['limit']?Math['max'](0x1,Math['ceil'](b['limit']/0x32)):undefined});c={'action':'market_metrics',...a2,'order_flow':a3};break;}case'anti_cheat':{const a4=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':a4};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 a5=b['market_signals'];if(!a5)throw new Error('dynamic_pricing\x20op\x20requires\x20market_signals');c={'action':'market_operations','result':suggestPricing({'supplyCount':a5['supplyCount'],'demandCount':a5['demandCount'],'avgPrice':a5['avgPrice'],'myPrice':a5['myPrice'],'competitorPrices':a5['competitorPrices'],'recentOrderCount':a5['recentOrderCount'],'repeatCustomerRate':a5['repeatCustomerRate']})};}else c={'action':'market_operations','result':buildCustomerRelationships(b['customer_orders']??[])};}}break;}case'match_discover':{const a6=!b['sensitivity']?inferSensitivity(b['description']??''):null,a7=b['sensitivity']??a6['sensitivity'],a8=a6?.['signals']??[],a9=await resolveNetwork(b['context_network']),aa={'raw':b['location'],...b['region']??{}},ab=expandSearchScope(a7,aa),ac=resolveMatchPolicy(b['match_policy'],'demand_to_supply'),ad=(b['required_capabilities']??[])['filter'](az=>KNOWN_CAPABILITIES['includes'](az)),ae=!b['coin_type']&&!b['name_contains'],af=discoveryDataSource();let ag,ah=new Map(),ai='legacy_enumeration';const aj=()=>enumerateServices(a9,{'max_objects':b['max_objects'],'no_cache':b['no_cache'],'location_any':ab['search_terms'],'coin_type':b['coin_type'],'name_contains':b['name_contains']});if(ae&&af!=='legacy'&&remoteIndexUrl())try{const az=await matchServicesViaIndex(a9,{'q':b['description'],'location':b['location'],'budgetWei':b['budget'],'capabilities':ad['length']>0x0?ad:undefined,'limit':Math['min'](0x64,b['max_objects']??0x64),'recallLimit':Math['min'](0x3e8,Math['max'](0xc8,b['max_objects']??0xc8))});ag={'services':az['candidates']['map'](aA=>({'object':aA['objectId'],'location':aA['publicFeatures']['location']??'','json':aA['payloadJson']??null})),'total_enumerated':az['recall']['liveSet']??az['recall']['gated'],'has_more':az['truncated'],'coverage':az['coverage']},ah=new Map(az['candidates']['map'](aA=>[aA['objectId'],aA])),ai='remote_index';}catch(aA){if(af==='remote')throw aA;ag=await aj();const aB=aA?.['code'],aC=typeof aB==='string'&&/^INDEX_[A-Z_]+$/['test'](aB)?aB:'INDEX_UNAVAILABLE';ag['coverage']=createQueryCoverage({'mode':ag['coverage']['mode'],'totalEnumerated':ag['coverage']['total_enumerated'],'truncated':ag['coverage']['truncated'],'chainId':ag['coverage']['chain_id'],'degradedReasons':[...ag['coverage']['degraded_reasons'],'MATCH_INDEX_FALLBACK',aC]});}else ag=await aj();const ak=new Set(b['required_capabilities']??[]),al=extractDemandCapability({'object':'intent','description':b['description'],'location':b['location'],'owner':b['account']},{'price_max':b['budget']!==undefined?BigInt(b['budget']):undefined,'capabilities':{'has_arbitration':ak['has']('has_arbitration'),'has_refund_path':ak['has']('has_refund_path'),'has_milestone_nodes':ak['has']('has_milestone_nodes'),'has_compensation_fund':ak['has']('has_compensation_fund'),'has_wip_verification':ak['has']('has_wip_verification'),'has_messenger':ak['has']('has_messenger'),'has_buy_guard':ak['has']('has_buy_guard'),'has_dynamic_pricing':ak['has']('has_dynamic_pricing'),'is_published':!![],'is_paused':![]}}),am=rankByLocation(a7,aa,ag['services']['map'](aD=>({'id':aD['object'],'name':aD['name'],'location':aD['location']}))),an=am['filter'](aD=>aD['satisfied']),ao=ag['services']['filter'](aD=>an['some'](aE=>aE['id']===aD['object']))['map'](serviceSummaryToExtract),ap=resolveCategoryMatchRules(b['category']);let aq=ao;const ar=[];if(ap){const aD=applyHardConstraints(ap,ao);aq=aD['passed'];for(const aE of aD['dropped']){ar['push']({'object':aE['candidate']['object'],'reason':aE['constraint']['description']});}}let as=await resolveInjection(b['account'],b['injection']);ap&&(as=mergeInjections(as,toSoftWeightInjection(ap)));let at,au;if(ac){const aF=applyPolicyGates(ac,aq,{'budgetWei':b['budget']!==undefined?BigInt(b['budget']):undefined});aq=aF['passed'];const aG=policyToInjection(ac);as=mergeInjections(as,aG['injection']),au={'gateOutcome':aF,'weights':aG};}const av=await matchDemandToServices(al,aq,as,aq['length'],b['presenter_history']),aw=new Map(av['map'](aH=>[aH['service']['object'],aH['result']])),ax=new Set(aq['map'](aH=>aH['object']));let ay=an['filter'](aH=>ax['has'](aH['id']))['map'](aH=>{const aI=ag['services']['find'](aK=>aK['object']===aH['id']),aJ=ah['get'](aH['id']);return{'service':serviceSummaryToExtract(aI),'location':{'relation':aH['relation'],'satisfied':aH['satisfied'],'score':aH['score'],'reason':aH['reason']},'result':aw['get'](aH['id']),...aJ?{'server_match':{'policy_version':aJ['serverEvaluation']['policyVersion'],'total':aJ['serverEvaluation']['total'],'breakdown':aJ['serverEvaluation']['breakdown'],'unknown_rules':aJ['serverEvaluation']['unknownRules'],'red_flags':aJ['serverEvaluation']['redFlags'],'channels':aJ['channels'],'rrf':aJ['rrf']}}:{}};});if(ac&&au){const aH=applyPolicyRerank(ay,ac);ay=aH['matches'],at=buildPolicyEffect(ac,au['gateOutcome'],au['weights'],aH);}c={'action':'match_discover','sensitivity':a7,'inference_signals':a8,'match_route':ai,'matches':ay,'total_enumerated':ag['total_enumerated'],'has_more':ag['has_more'],'coverage':ag['coverage'],'scope_advice':{'search_terms':ab['search_terms'],'ai_enrichment_note':ab['ai_enrichment_note']},...at?{'policy_effect':at}:{}};break;}case'arbitration_score':{let aI=b['history'];const aJ=b['context_network']??'testnet';if((!aI||aI['length']===0x0)&&b['arbitration']['object'])try{const aL=await enumerateArbs(aJ,{'arbitration':b['arbitration']['object']});aI=await arbCasesWithRoles(aL['arbs'],aJ);}catch{aI=b['history'];}if((!aI||aI['length']===0x0)&&b['arbitration']['object'])try{const aM=await query_objects({'objects':[b['arbitration']['object']],'network':aJ}),aN=aM?.['objects']?.[0x0];if(aN?.['permission']){const aO=await fetchObjectLinkerCore(aN['permission'],aJ),aP=(aO?.['items']??[])['map'](aR=>aR['who'])['filter'](aR=>aR!==b['arbitration']['object']),aQ=[];for(const aR of aP['slice'](0x0,0xa)){const aS=await enumerateArbs(aJ,{'arbitration':aR})['catch'](()=>undefined);aS?.['arbs']?.['length']&&aQ['push'](...await arbCasesWithRoles(aS['arbs'],aJ));}if(aQ['length']>0x0)aI=aQ;}}catch{}const aK=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':aI,'entity_votes':b['entity_votes'],'fee_median':b['fee_median']},await resolveInjection(b['account'],b['injection']));c={'action':'arbitration_score',...aK};break;}case'account_events':{const aT=await runAccountEventWatchers({'account':b['account'],'network':await resolveNetwork(b['context_network']),'reviews':b['reviews']?.['map'](aU=>({'reviewer':aU['reviewer'],'rating':aU['rating'],'tags':aU['tags'],'comment':aU['comment'],'orderRef':aU['orderRef'],'timestamp':aU['timestamp'],'verified':aU['verified']??![]})),'order_history':b['order_history']},b['categories']);c={'action':'account_events','events':aT};break;}default:throw new Error('Unknown\x20evaluation_operation\x20action');}return{'content':[{'type':'text','text':JSON['stringify']({'result':c})}],'structuredContent':{'result':c}};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{afterEach,beforeEach,describe,expect,it,vi}from'vitest';import{handleEvaluationOperation}from'./evaluation.js';import{enumerateServices,matchServicesViaIndex,weiToWowDecimal}from'../../knowledge/jsonrpc-enum.js';vi['mock']('../../knowledge/jsonrpc-enum.js',async a=>({...await a(),'enumerateServices':vi['fn'](),'matchServicesViaIndex':vi['fn']()}));function resultOf(a){return a['structuredContent']['result'];}const demandCap={'id':'0xdemand1','kind':'demand','industry':'freelance','region':{'mode':'physical','city':'Shanghai','raw':'Shanghai'},'keywords':['design'],'capabilities':{'has_arbitration':![],'has_refund_path':![],'has_milestone_nodes':![],'has_compensation_fund':![],'has_wip_verification':![],'has_messenger':![],'has_buy_guard':![],'has_dynamic_pricing':![],'is_published':!![],'is_paused':![]}},service={'object':'0xsvc1','description':'freelance\x20logo\x20design','location':'Shanghai','sales':[{'price':'100','wip_hash':'abc'}],'bPublished':!![],'bPaused':![]};describe('evaluation_operation\x20demand_match\x20presenter_history\x20(P2-2)',()=>{it('acceptance\x20rule\x20scores\x20the\x20rated\x20history\x20in\x20the\x20breakdown',async()=>{const a=await handleEvaluationOperation({'action':'demand_match','demand_cap':demandCap,'services':[service],'presenter_history':[{'acceptance_score':0x50},{'acceptance_score':0x5a}]}),c=resultOf(a);expect(c['action'])['toBe']('demand_match');const d=c['matches'][0x0]['result']['breakdown']['find'](e=>e['rule_id']==='acceptance');expect(d)['toBeDefined'](),expect(d['score'])['toBe'](0x55);}),it('omitted\x20history\x20→\x20acceptance\x20stays\x20neutral',async()=>{const a=await handleEvaluationOperation({'action':'demand_match','demand_cap':demandCap,'services':[service]}),c=resultOf(a)['matches'][0x0]['result']['breakdown']['find'](d=>d['rule_id']==='acceptance');expect(c)['toBeDefined'](),expect(c['score'])['toBe'](0x32),expect(c['reason'])['toContain']('neutral');}),it('schema\x20rejects\x20a\x20malformed\x20presenter_history\x20entry',async()=>{await expect(handleEvaluationOperation({'action':'demand_match','demand_cap':demandCap,'services':[service],'presenter_history':[{'acceptance_score':0x50,'bogus':!![]}]}))['rejects']['toThrow']();});}),describe('evaluation_operation\x20demand_match\x20order\x20bridge\x20(N-2\x20/\x2008\x20§7)',()=>{it('each\x20match\x20carries\x20the\x20service.order_new\x20transaction-formation\x20bridge',async()=>{const a=await handleEvaluationOperation({'action':'demand_match','demand_cap':demandCap,'services':[service]}),b=resultOf(a)['matches'][0x0];expect(b['order'])['toBeDefined'](),expect(b['order']['operation'])['toBe']('service.order_new'),expect(b['order']['operation_type'])['toBe']('service'),expect(b['order']['preconditions']['some'](c=>c['includes']('acceptance_score')))['toBe'](!![]),expect(b['order']['rationale'])['toContain']('0xsvc1'),expect(b['next']['operation'])['toBe']('demand.publish'),expect(b['next']['operation_type'])['toBe']('demand'),expect(b['next']['rationale'])['toContain']('service.order_new');});}),describe('evaluation_operation\x20match_discover\x20indexed\x20candidate\x20mapping',()=>{it('scores\x20wrapped\x20sales\x20fields\x20instead\x20of\x20replacing\x20them\x20with\x20zero\x20values',async()=>{vi['mocked'](enumerateServices)['mockResolvedValueOnce']({'services':[{'object':'0xsvc1','name':'Logo\x20design','location':'Shanghai','json':{'description':'freelance\x20logo\x20design','location':'Shanghai','sales':[{'fields':{'name':'logo','price':'100','wip_hash':'abc'}}],'bPublished':!![],'bPaused':![]}}],'total_enumerated':0x1,'has_more':![],'coverage':{'mode':'known_objects','complete':![],'truncated':![],'total_enumerated':0x1,'chain_id':'chain_test','degraded_reasons':[]}});const a=await handleEvaluationOperation({'action':'match_discover','description':'freelance\x20logo\x20design','location':'Shanghai','sensitivity':'strict','budget':'50','required_capabilities':['has_wip_verification'],'context_network':'testnet'}),b=resultOf(a)['matches'][0x0];expect(b['service']['sales'])['toEqual']([{'name':'logo','price':'100','wip_hash':'abc'}]),expect(b['result']['breakdown']['find'](c=>c['rule_id']==='price'))['toMatchObject']({'score':0x0,'reason':'over\x20budget'}),expect(b['result']['breakdown']['find'](c=>c['rule_id']==='capabilities'))['toMatchObject']({'score':0x64,'matched':['has_wip_verification']});});}),describe('evaluation_operation\x20evidence_review\x20list\x20mode\x20(P2-3)',()=>{it('items\x20mode\x20→\x20structured\x20usable/manual/rejected\x20+\x20proof\x20candidates',async()=>{const a=await handleEvaluationOperation({'action':'evidence_review','items':[{'id':'chat.wts','kind':'signature_photo','hash_committed':!![],'digital_check_passed':!![],'proof_ref':'0xproof1'},{'id':'waybill.jpg','kind':'delivery_proof','hash_committed':!![]},{'id':'voice.mp3','kind':'voice_recording','hash_committed':![]}]}),b=resultOf(a);expect(b['action'])['toBe']('evidence_review'),expect(b['list']['items'])['toHaveLength'](0x3),expect(b['list']['usable'])['toHaveLength'](0x1),expect(b['list']['manual'])['toHaveLength'](0x1),expect(b['list']['rejected'])['toHaveLength'](0x1),expect(b['list']['proof_candidates'])['toHaveLength'](0x1),expect(b['list']['proof_candidates'][0x0]['proof_ref'])['toBe']('0xproof1'),expect(b['list']['dispute_hint'])['toContain']('1\x20Proof\x20reference\x20candidate(s)\x20ready');}),it('single-item\x20mode\x20still\x20works\x20(backwards\x20compatible)',async()=>{const a=await handleEvaluationOperation({'action':'evidence_review','kind':'signature_photo','hash_committed':!![],'digital_check_passed':!![]});expect(resultOf(a)['review']['status'])['toBe']('auto_pass');}),it('schema\x20refinement:\x20neither\x20items\x20nor\x20kind+hash_committed\x20→\x20error',async()=>{await expect(handleEvaluationOperation({'action':'evidence_review'}))['rejects']['toThrow']();});});function remoteCandidate(a,b={}){return{'objectId':a,'verifiedKind':'Service','objectVersion':'3','facetVersion':'facets-1','channels':['bm25','structured'],'rrf':0.032786885246,'publicFeatures':{'industry':'freelance','industryConfidence':0.7,'location':'Shanghai','priceMin':'100','priceMax':'100','capabilities':['has_wip_verification'],'published':!![],'paused':![],'keywords':['design']},'serverEvaluation':{'policyVersion':'public-baseline-1','total':87.5,'breakdown':[{'dimension':'text','weight':0x1e,'score':0x64}],'unknownRules':['trust:\x20cold-start\x20prior\x20withheld'],'redFlags':[]},'payloadJson':{'description':'freelance\x20logo\x20design','location':'Shanghai','sales':[{'fields':{'name':'logo','price':'100','wip_hash':'abc'}}],'bPublished':!![],'bPaused':![]},...b};}function remotePage(a){return{'policyVersion':'public-baseline-1','candidates':a,'recall':{'liveSet':a['length']+0x2,'gated':a['length'],'structured':a['length'],'bm25':a['length'],'merged':a['length'],'channelsActive':['structured','bm25']},'truncated':![],'coverage':{'mode':'known_objects','complete':![],'truncated':![],'total_enumerated':a['length'],'chain_id':'chain_test','degraded_reasons':[]}};}function legacyAnswer(){return{'services':[{'object':'0xsvc1','name':'Logo\x20design','location':'Shanghai','json':{'description':'freelance\x20logo\x20design','location':'Shanghai','sales':[{'fields':{'name':'logo','price':'100','wip_hash':'abc'}}],'bPublished':!![],'bPaused':![]}}],'total_enumerated':0x1,'has_more':![],'coverage':{'mode':'event_window','complete':![],'truncated':![],'total_enumerated':0x1,'chain_id':'chain_test','degraded_reasons':['EVENT_BACKED_ENUMERATION']}};}const MATCH_INPUT={'action':'match_discover','description':'freelance\x20logo\x20design','location':'Shanghai','sensitivity':'strict','budget':'100','required_capabilities':['has_wip_verification'],'context_network':'testnet'};describe('evaluation_operation\x20match_discover\x20remote\x20index\x20route\x20(K5-11\x20R3)',()=>{beforeEach(()=>{vi['mocked'](enumerateServices)['mockReset'](),vi['mocked'](matchServicesViaIndex)['mockReset']();}),afterEach(()=>{delete process['env']['WOWOK_DATA_SOURCE'],delete process['env']['WOWOK_INDEX_URL'];}),it('converts\x20wei\x20budgets\x20to\x20WOW\x20decimals\x20for\x20the\x20match\x20API',()=>{expect(weiToWowDecimal('0'))['toBe']('0'),expect(weiToWowDecimal('6000000000'))['toBe']('6'),expect(weiToWowDecimal('7500000000'))['toBe']('7.5'),expect(weiToWowDecimal('123456789'))['toBe']('0.123456789'),expect(weiToWowDecimal('1000000000000'))['toBe']('1000'),expect(()=>weiToWowDecimal('12.5'))['toThrow']();}),it('one-shot\x20remote\x20match:\x20no\x20enumeration,\x20dual\x20breakdown,\x20private\x20re-rank',async()=>{process['env']['WOWOK_DATA_SOURCE']='remote',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](matchServicesViaIndex)['mockResolvedValueOnce'](remotePage([remoteCandidate('0xsvc1'),remoteCandidate('0xsvc2',{'payloadJson':{'description':'mural\x20painting','location':'Shanghai','sales':[{'fields':{'name':'mural','price':'90'}}],'bPublished':!![],'bPaused':![]}})]));const a=await handleEvaluationOperation({...MATCH_INPUT}),b=resultOf(a);expect(b['match_route'])['toBe']('remote_index'),expect(enumerateServices)['not']['toHaveBeenCalled'](),expect(vi['mocked'](matchServicesViaIndex)['mock']['calls'][0x0][0x1])['toMatchObject']({'q':'freelance\x20logo\x20design','location':'Shanghai','budgetWei':'100','capabilities':['has_wip_verification']}),expect(b['matches'])['toHaveLength'](0x2),expect(b['total_enumerated'])['toBe'](0x4);const c=b['matches']['find'](e=>e['service']['object']==='0xsvc1');expect(c['server_match'])['toMatchObject']({'policy_version':'public-baseline-1','total':87.5,'channels':['bm25','structured']}),expect(c['server_match']['unknown_rules'])['toEqual'](['trust:\x20cold-start\x20prior\x20withheld']),expect(c['result']['breakdown']['some'](e=>e['rule_id']==='capabilities'))['toBe'](!![]);const d=b['matches']['find'](e=>e['service']['object']==='0xsvc2');expect(d['service']['description'])['toBe']('mural\x20painting'),expect(d['server_match'])['toBeDefined'](),expect(b['coverage']['mode'])['toBe']('known_objects');}),it('auto\x20mode\x20degrades\x20to\x20legacy\x20enumeration\x20with\x20honest\x20coverage',async()=>{process['env']['WOWOK_DATA_SOURCE']='auto',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](matchServicesViaIndex)['mockRejectedValueOnce'](Object['assign'](new Error('Remote\x20index\x20returned\x20HTTP\x20503'),{'code':'INDEX_HTTP_ERROR'})),vi['mocked'](enumerateServices)['mockResolvedValueOnce'](legacyAnswer());const a=await handleEvaluationOperation({...MATCH_INPUT}),b=resultOf(a);expect(b['match_route'])['toBe']('legacy_enumeration'),expect(enumerateServices)['toHaveBeenCalledTimes'](0x1),expect(b['coverage']['degraded_reasons'])['toContain']('MATCH_INDEX_FALLBACK'),expect(b['coverage']['degraded_reasons'])['toContain']('INDEX_HTTP_ERROR'),expect(b['matches'])['toHaveLength'](0x1),expect(b['matches'][0x0]['server_match'])['toBeUndefined']();}),it('strict\x20remote\x20mode\x20surfaces\x20the\x20index\x20failure',async()=>{process['env']['WOWOK_DATA_SOURCE']='remote',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](matchServicesViaIndex)['mockRejectedValueOnce'](Object['assign'](new Error('Remote\x20index\x20request\x20failed'),{'code':'INDEX_UNAVAILABLE'})),await expect(handleEvaluationOperation({...MATCH_INPUT}))['rejects']['toThrow'](/Remote index request failed/),expect(enumerateServices)['not']['toHaveBeenCalled']();}),it('filters\x20the\x20match\x20API\x20cannot\x20express\x20keep\x20the\x20legacy\x20route',async()=>{process['env']['WOWOK_DATA_SOURCE']='remote',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](enumerateServices)['mockResolvedValueOnce'](legacyAnswer());const a=await handleEvaluationOperation({...MATCH_INPUT,'coin_type':'0x2::wow::WOW'}),b=resultOf(a);expect(b['match_route'])['toBe']('legacy_enumeration'),expect(matchServicesViaIndex)['not']['toHaveBeenCalled'](),expect(enumerateServices)['toHaveBeenCalledTimes'](0x1);});}),describe('evaluation_operation\x20match_discover\x20private\x20policy\x20DSL\x20(K5-11\x20R4)',()=>{beforeEach(()=>{vi['mocked'](enumerateServices)['mockReset'](),vi['mocked'](matchServicesViaIndex)['mockReset']();}),afterEach(()=>{delete process['env']['WOWOK_DATA_SOURCE'],delete process['env']['WOWOK_INDEX_URL'];});function a(){return{'services':[{'object':'0xgood','name':'Logo\x20design','location':'Shanghai','json':{'description':'freelance\x20logo\x20design','location':'Shanghai','sales':[{'fields':{'name':'logo','price':'100','wip_hash':'abc'}}],'arbitrations':['0xarb1'],'owner':'0xownerA','bPublished':!![],'bPaused':![]}},{'object':'0xpaused','name':'Paused\x20shop','location':'Shanghai','json':{'description':'freelance\x20logo\x20design','location':'Shanghai','sales':[{'fields':{'name':'logo','price':'100'}}],'owner':'0xownerB','bPublished':!![],'bPaused':!![]}}],'total_enumerated':0x2,'has_more':![],'coverage':{'mode':'event_window','complete':![],'truncated':![],'total_enumerated':0x2,'chain_id':'chain_test','degraded_reasons':['EVENT_BACKED_ENUMERATION']}};}it('preset\x20gate\x20drops\x20the\x20paused\x20candidate\x20and\x20reports\x20it\x20in\x20policy_effect',async()=>{vi['mocked'](enumerateServices)['mockResolvedValueOnce'](a());const b=await handleEvaluationOperation({'action':'match_discover','description':'freelance\x20logo\x20design','location':'Shanghai','sensitivity':'strict','context_network':'testnet','match_policy':'trust_first'}),c=resultOf(b);expect(c['matches']['map'](d=>d['service']['object']))['toEqual'](['0xgood']),expect(c['policy_effect']['policy_id'])['toBe']('trust_first'),expect(c['policy_effect']['privacy'])['toContain']('never\x20leave\x20this\x20device'),expect(c['policy_effect']['dropped']['some'](e=>e['object']==='0xpaused'))['toBe'](!![]),expect(c['policy_effect']['weights_applied']['trust'])['toBe'](0x1e),expect(typeof c['policy_effect']['policy_hash'])['toBe']('string');}),it('a\x20weight-only\x20policy\x20re-anchors\x20the\x20trust\x20dimension\x20(weight_source=override)',async()=>{vi['mocked'](enumerateServices)['mockResolvedValueOnce'](a());const b=await handleEvaluationOperation({'action':'match_discover','description':'freelance\x20logo\x20design','location':'Shanghai','sensitivity':'strict','context_network':'testnet','match_policy':{'policy_id':'custom','weights':{'trust':0x2d}}}),c=resultOf(b),d=c['matches'][0x0]['result']['breakdown']['find'](e=>e['rule_id']==='trust');expect(d['weight'])['toBe'](0x2d),expect(d['weight_source'])['toBe']('override'),expect(c['policy_effect']['weights_applied'])['toEqual']({'trust':0x2d});}),it('the\x20private\x20policy\x20never\x20reaches\x20the\x20remote\x20match\x20request',async()=>{process['env']['WOWOK_DATA_SOURCE']='remote',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](matchServicesViaIndex)['mockResolvedValueOnce'](remotePage([remoteCandidate('0xsvc1')])),await handleEvaluationOperation({...MATCH_INPUT,'match_policy':'trust_first'});const b=vi['mocked'](matchServicesViaIndex)['mock']['calls'][0x0][0x1];expect(b['match_policy'])['toBeUndefined'](),expect(b['policy'])['toBeUndefined'](),expect(JSON['stringify'](b))['not']['toContain']('trust_first');}),it('unknown\x20preset\x20id\x20throws\x20with\x20the\x20available\x20list',async()=>{await expect(handleEvaluationOperation({...MATCH_INPUT,'match_policy':'does_not_exist'}))['rejects']['toThrow'](/unknown match_policy preset/);}),it('a\x20supply_to_demand\x20policy\x20is\x20rejected\x20by\x20match_discover',async()=>{await expect(handleEvaluationOperation({...MATCH_INPUT,'match_policy':'supplier_hunting'}))['rejects']['toThrow'](/direction/);});});
|
|
1
|
+
import{afterEach,beforeEach,describe,expect,it,vi}from'vitest';import{handleEvaluationOperation}from'./evaluation.js';import{enumerateDemands,enumerateServices,matchServicesViaIndex,weiToWowDecimal}from'../../knowledge/jsonrpc-enum.js';vi['mock']('../../knowledge/jsonrpc-enum.js',async a=>({...await a(),'enumerateServices':vi['fn'](),'enumerateDemands':vi['fn'](),'matchServicesViaIndex':vi['fn']()}));function resultOf(a){return a['structuredContent']['result'];}const demandCap={'id':'0xdemand1','kind':'demand','industry':'freelance','region':{'mode':'physical','city':'Shanghai','raw':'Shanghai'},'keywords':['design'],'capabilities':{'has_arbitration':![],'has_refund_path':![],'has_milestone_nodes':![],'has_compensation_fund':![],'has_wip_verification':![],'has_messenger':![],'has_buy_guard':![],'has_dynamic_pricing':![],'is_published':!![],'is_paused':![]}},service={'object':'0xsvc1','description':'freelance\x20logo\x20design','location':'Shanghai','sales':[{'price':'100','wip_hash':'abc'}],'bPublished':!![],'bPaused':![]};describe('evaluation_operation\x20demand_match\x20presenter_history\x20(P2-2)',()=>{it('acceptance\x20rule\x20scores\x20the\x20rated\x20history\x20in\x20the\x20breakdown',async()=>{const a=await handleEvaluationOperation({'action':'demand_match','demand_cap':demandCap,'services':[service],'presenter_history':[{'acceptance_score':0x50},{'acceptance_score':0x5a}]}),c=resultOf(a);expect(c['action'])['toBe']('demand_match');const d=c['matches'][0x0]['result']['breakdown']['find'](e=>e['rule_id']==='acceptance');expect(d)['toBeDefined'](),expect(d['score'])['toBe'](0x55);}),it('omitted\x20history\x20→\x20acceptance\x20stays\x20neutral',async()=>{const a=await handleEvaluationOperation({'action':'demand_match','demand_cap':demandCap,'services':[service]}),c=resultOf(a)['matches'][0x0]['result']['breakdown']['find'](d=>d['rule_id']==='acceptance');expect(c)['toBeDefined'](),expect(c['score'])['toBe'](0x32),expect(c['reason'])['toContain']('neutral');}),it('schema\x20rejects\x20a\x20malformed\x20presenter_history\x20entry',async()=>{await expect(handleEvaluationOperation({'action':'demand_match','demand_cap':demandCap,'services':[service],'presenter_history':[{'acceptance_score':0x50,'bogus':!![]}]}))['rejects']['toThrow']();});}),describe('evaluation_operation\x20demand_match\x20order\x20bridge\x20(N-2\x20/\x2008\x20§7)',()=>{it('each\x20match\x20carries\x20the\x20service.order_new\x20transaction-formation\x20bridge',async()=>{const a=await handleEvaluationOperation({'action':'demand_match','demand_cap':demandCap,'services':[service]}),b=resultOf(a)['matches'][0x0];expect(b['order'])['toBeDefined'](),expect(b['order']['operation'])['toBe']('service.order_new'),expect(b['order']['operation_type'])['toBe']('service'),expect(b['order']['preconditions']['some'](c=>c['includes']('acceptance_score')))['toBe'](!![]),expect(b['order']['rationale'])['toContain']('0xsvc1'),expect(b['next']['operation'])['toBe']('demand.publish'),expect(b['next']['operation_type'])['toBe']('demand'),expect(b['next']['rationale'])['toContain']('service.order_new');});}),describe('evaluation_operation\x20match_discover\x20indexed\x20candidate\x20mapping',()=>{it('scores\x20wrapped\x20sales\x20fields\x20instead\x20of\x20replacing\x20them\x20with\x20zero\x20values',async()=>{vi['mocked'](enumerateServices)['mockResolvedValueOnce']({'services':[{'object':'0xsvc1','name':'Logo\x20design','location':'Shanghai','json':{'description':'freelance\x20logo\x20design','location':'Shanghai','sales':[{'fields':{'name':'logo','price':'100','wip_hash':'abc'}}],'bPublished':!![],'bPaused':![]}}],'total_enumerated':0x1,'has_more':![],'coverage':{'mode':'known_objects','complete':![],'truncated':![],'total_enumerated':0x1,'chain_id':'chain_test','degraded_reasons':[]}});const a=await handleEvaluationOperation({'action':'match_discover','description':'freelance\x20logo\x20design','location':'Shanghai','sensitivity':'strict','budget':'50','required_capabilities':['has_wip_verification'],'context_network':'testnet'}),b=resultOf(a)['matches'][0x0];expect(b['service']['sales'])['toEqual']([{'name':'logo','price':'100','wip_hash':'abc'}]),expect(b['result']['breakdown']['find'](c=>c['rule_id']==='price'))['toMatchObject']({'score':0x0,'reason':'over\x20budget'}),expect(b['result']['breakdown']['find'](c=>c['rule_id']==='capabilities'))['toMatchObject']({'score':0x64,'matched':['has_wip_verification']});});}),describe('evaluation_operation\x20evidence_review\x20list\x20mode\x20(P2-3)',()=>{it('items\x20mode\x20→\x20structured\x20usable/manual/rejected\x20+\x20proof\x20candidates',async()=>{const a=await handleEvaluationOperation({'action':'evidence_review','items':[{'id':'chat.wts','kind':'signature_photo','hash_committed':!![],'digital_check_passed':!![],'proof_ref':'0xproof1'},{'id':'waybill.jpg','kind':'delivery_proof','hash_committed':!![]},{'id':'voice.mp3','kind':'voice_recording','hash_committed':![]}]}),b=resultOf(a);expect(b['action'])['toBe']('evidence_review'),expect(b['list']['items'])['toHaveLength'](0x3),expect(b['list']['usable'])['toHaveLength'](0x1),expect(b['list']['manual'])['toHaveLength'](0x1),expect(b['list']['rejected'])['toHaveLength'](0x1),expect(b['list']['proof_candidates'])['toHaveLength'](0x1),expect(b['list']['proof_candidates'][0x0]['proof_ref'])['toBe']('0xproof1'),expect(b['list']['dispute_hint'])['toContain']('1\x20Proof\x20reference\x20candidate(s)\x20ready');}),it('single-item\x20mode\x20still\x20works\x20(backwards\x20compatible)',async()=>{const a=await handleEvaluationOperation({'action':'evidence_review','kind':'signature_photo','hash_committed':!![],'digital_check_passed':!![]});expect(resultOf(a)['review']['status'])['toBe']('auto_pass');}),it('schema\x20refinement:\x20neither\x20items\x20nor\x20kind+hash_committed\x20→\x20error',async()=>{await expect(handleEvaluationOperation({'action':'evidence_review'}))['rejects']['toThrow']();});});function remoteCandidate(a,b={}){return{'objectId':a,'verifiedKind':'Service','objectVersion':'3','facetVersion':'facets-1','channels':['bm25','structured'],'rrf':0.032786885246,'publicFeatures':{'industry':'freelance','industryConfidence':0.7,'location':'Shanghai','priceMin':'100','priceMax':'100','capabilities':['has_wip_verification'],'published':!![],'paused':![],'keywords':['design']},'serverEvaluation':{'policyVersion':'public-baseline-1','total':87.5,'breakdown':[{'dimension':'text','weight':0x1e,'score':0x64}],'unknownRules':['trust:\x20cold-start\x20prior\x20withheld'],'redFlags':[]},'payloadJson':{'description':'freelance\x20logo\x20design','location':'Shanghai','sales':[{'fields':{'name':'logo','price':'100','wip_hash':'abc'}}],'bPublished':!![],'bPaused':![]},...b};}function remotePage(a){return{'policyVersion':'public-baseline-1','candidates':a,'recall':{'liveSet':a['length']+0x2,'gated':a['length'],'structured':a['length'],'bm25':a['length'],'merged':a['length'],'channelsActive':['structured','bm25']},'truncated':![],'coverage':{'mode':'known_objects','complete':![],'truncated':![],'total_enumerated':a['length'],'chain_id':'chain_test','degraded_reasons':[]}};}function legacyAnswer(){return{'services':[{'object':'0xsvc1','name':'Logo\x20design','location':'Shanghai','json':{'description':'freelance\x20logo\x20design','location':'Shanghai','sales':[{'fields':{'name':'logo','price':'100','wip_hash':'abc'}}],'bPublished':!![],'bPaused':![]}}],'total_enumerated':0x1,'has_more':![],'coverage':{'mode':'event_window','complete':![],'truncated':![],'total_enumerated':0x1,'chain_id':'chain_test','degraded_reasons':['EVENT_BACKED_ENUMERATION']}};}const MATCH_INPUT={'action':'match_discover','description':'freelance\x20logo\x20design','location':'Shanghai','sensitivity':'strict','budget':'100','required_capabilities':['has_wip_verification'],'context_network':'testnet'};describe('evaluation_operation\x20match_discover\x20remote\x20index\x20route\x20(K5-11\x20R3)',()=>{beforeEach(()=>{vi['mocked'](enumerateServices)['mockReset'](),vi['mocked'](matchServicesViaIndex)['mockReset']();}),afterEach(()=>{delete process['env']['WOWOK_DATA_SOURCE'],delete process['env']['WOWOK_INDEX_URL'];}),it('converts\x20wei\x20budgets\x20to\x20WOW\x20decimals\x20for\x20the\x20match\x20API',()=>{expect(weiToWowDecimal('0'))['toBe']('0'),expect(weiToWowDecimal('6000000000'))['toBe']('6'),expect(weiToWowDecimal('7500000000'))['toBe']('7.5'),expect(weiToWowDecimal('123456789'))['toBe']('0.123456789'),expect(weiToWowDecimal('1000000000000'))['toBe']('1000'),expect(()=>weiToWowDecimal('12.5'))['toThrow']();}),it('one-shot\x20remote\x20match:\x20no\x20enumeration,\x20dual\x20breakdown,\x20private\x20re-rank',async()=>{process['env']['WOWOK_DATA_SOURCE']='remote',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](matchServicesViaIndex)['mockResolvedValueOnce'](remotePage([remoteCandidate('0xsvc1'),remoteCandidate('0xsvc2',{'payloadJson':{'description':'mural\x20painting','location':'Shanghai','sales':[{'fields':{'name':'mural','price':'90'}}],'bPublished':!![],'bPaused':![]}})]));const a=await handleEvaluationOperation({...MATCH_INPUT}),b=resultOf(a);expect(b['match_route'])['toBe']('remote_index'),expect(enumerateServices)['not']['toHaveBeenCalled'](),expect(vi['mocked'](matchServicesViaIndex)['mock']['calls'][0x0][0x1])['toMatchObject']({'q':'freelance\x20logo\x20design','location':'Shanghai','budgetWei':'100','capabilities':['has_wip_verification']}),expect(b['matches'])['toHaveLength'](0x2),expect(b['total_enumerated'])['toBe'](0x4);const c=b['matches']['find'](e=>e['service']['object']==='0xsvc1');expect(c['server_match'])['toMatchObject']({'policy_version':'public-baseline-1','total':87.5,'channels':['bm25','structured']}),expect(c['server_match']['unknown_rules'])['toEqual'](['trust:\x20cold-start\x20prior\x20withheld']),expect(c['result']['breakdown']['some'](e=>e['rule_id']==='capabilities'))['toBe'](!![]);const d=b['matches']['find'](e=>e['service']['object']==='0xsvc2');expect(d['service']['description'])['toBe']('mural\x20painting'),expect(d['server_match'])['toBeDefined'](),expect(b['coverage']['mode'])['toBe']('known_objects');}),it('auto\x20mode\x20degrades\x20to\x20legacy\x20enumeration\x20with\x20honest\x20coverage',async()=>{process['env']['WOWOK_DATA_SOURCE']='auto',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](matchServicesViaIndex)['mockRejectedValueOnce'](Object['assign'](new Error('Remote\x20index\x20returned\x20HTTP\x20503'),{'code':'INDEX_HTTP_ERROR'})),vi['mocked'](enumerateServices)['mockResolvedValueOnce'](legacyAnswer());const a=await handleEvaluationOperation({...MATCH_INPUT}),b=resultOf(a);expect(b['match_route'])['toBe']('legacy_enumeration'),expect(enumerateServices)['toHaveBeenCalledTimes'](0x1),expect(b['coverage']['degraded_reasons'])['toContain']('MATCH_INDEX_FALLBACK'),expect(b['coverage']['degraded_reasons'])['toContain']('INDEX_HTTP_ERROR'),expect(b['matches'])['toHaveLength'](0x1),expect(b['matches'][0x0]['server_match'])['toBeUndefined']();}),it('strict\x20remote\x20mode\x20surfaces\x20the\x20index\x20failure',async()=>{process['env']['WOWOK_DATA_SOURCE']='remote',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](matchServicesViaIndex)['mockRejectedValueOnce'](Object['assign'](new Error('Remote\x20index\x20request\x20failed'),{'code':'INDEX_UNAVAILABLE'})),await expect(handleEvaluationOperation({...MATCH_INPUT}))['rejects']['toThrow'](/Remote index request failed/),expect(enumerateServices)['not']['toHaveBeenCalled']();}),it('filters\x20the\x20match\x20API\x20cannot\x20express\x20keep\x20the\x20legacy\x20route',async()=>{process['env']['WOWOK_DATA_SOURCE']='remote',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](enumerateServices)['mockResolvedValueOnce'](legacyAnswer());const a=await handleEvaluationOperation({...MATCH_INPUT,'coin_type':'0x2::wow::WOW'}),b=resultOf(a);expect(b['match_route'])['toBe']('legacy_enumeration'),expect(matchServicesViaIndex)['not']['toHaveBeenCalled'](),expect(enumerateServices)['toHaveBeenCalledTimes'](0x1);});}),describe('evaluation_operation\x20match_discover\x20private\x20policy\x20DSL\x20(K5-11\x20R4)',()=>{beforeEach(()=>{vi['mocked'](enumerateServices)['mockReset'](),vi['mocked'](matchServicesViaIndex)['mockReset']();}),afterEach(()=>{delete process['env']['WOWOK_DATA_SOURCE'],delete process['env']['WOWOK_INDEX_URL'];});function a(){return{'services':[{'object':'0xgood','name':'Logo\x20design','location':'Shanghai','json':{'description':'freelance\x20logo\x20design','location':'Shanghai','sales':[{'fields':{'name':'logo','price':'100','wip_hash':'abc'}}],'arbitrations':['0xarb1'],'owner':'0xownerA','bPublished':!![],'bPaused':![]}},{'object':'0xpaused','name':'Paused\x20shop','location':'Shanghai','json':{'description':'freelance\x20logo\x20design','location':'Shanghai','sales':[{'fields':{'name':'logo','price':'100'}}],'owner':'0xownerB','bPublished':!![],'bPaused':!![]}}],'total_enumerated':0x2,'has_more':![],'coverage':{'mode':'event_window','complete':![],'truncated':![],'total_enumerated':0x2,'chain_id':'chain_test','degraded_reasons':['EVENT_BACKED_ENUMERATION']}};}it('preset\x20gate\x20drops\x20the\x20paused\x20candidate\x20and\x20reports\x20it\x20in\x20policy_effect',async()=>{vi['mocked'](enumerateServices)['mockResolvedValueOnce'](a());const b=await handleEvaluationOperation({'action':'match_discover','description':'freelance\x20logo\x20design','location':'Shanghai','sensitivity':'strict','context_network':'testnet','match_policy':'trust_first'}),c=resultOf(b);expect(c['matches']['map'](d=>d['service']['object']))['toEqual'](['0xgood']),expect(c['policy_effect']['policy_id'])['toBe']('trust_first'),expect(c['policy_effect']['privacy'])['toContain']('never\x20leave\x20this\x20device'),expect(c['policy_effect']['dropped']['some'](e=>e['object']==='0xpaused'))['toBe'](!![]),expect(c['policy_effect']['weights_applied']['trust'])['toBe'](0x1e),expect(typeof c['policy_effect']['policy_hash'])['toBe']('string');}),it('a\x20weight-only\x20policy\x20re-anchors\x20the\x20trust\x20dimension\x20(weight_source=override)',async()=>{vi['mocked'](enumerateServices)['mockResolvedValueOnce'](a());const b=await handleEvaluationOperation({'action':'match_discover','description':'freelance\x20logo\x20design','location':'Shanghai','sensitivity':'strict','context_network':'testnet','match_policy':{'policy_id':'custom','weights':{'trust':0x2d}}}),c=resultOf(b),d=c['matches'][0x0]['result']['breakdown']['find'](e=>e['rule_id']==='trust');expect(d['weight'])['toBe'](0x2d),expect(d['weight_source'])['toBe']('override'),expect(c['policy_effect']['weights_applied'])['toEqual']({'trust':0x2d});}),it('the\x20private\x20policy\x20never\x20reaches\x20the\x20remote\x20match\x20request',async()=>{process['env']['WOWOK_DATA_SOURCE']='remote',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](matchServicesViaIndex)['mockResolvedValueOnce'](remotePage([remoteCandidate('0xsvc1')])),await handleEvaluationOperation({...MATCH_INPUT,'match_policy':'trust_first'});const b=vi['mocked'](matchServicesViaIndex)['mock']['calls'][0x0][0x1];expect(b['match_policy'])['toBeUndefined'](),expect(b['policy'])['toBeUndefined'](),expect(JSON['stringify'](b))['not']['toContain']('trust_first');}),it('unknown\x20preset\x20id\x20throws\x20with\x20the\x20available\x20list',async()=>{await expect(handleEvaluationOperation({...MATCH_INPUT,'match_policy':'does_not_exist'}))['rejects']['toThrow'](/unknown match_policy preset/);}),it('a\x20supply_to_demand\x20policy\x20is\x20rejected\x20by\x20match_discover',async()=>{await expect(handleEvaluationOperation({...MATCH_INPUT,'match_policy':'supplier_hunting'}))['rejects']['toThrow'](/direction/);});}),describe('evaluation_operation\x20demand_present\x20private\x20policy\x20(K5-11\x20R4-W2)',()=>{const a={'id':'0xsvc1','kind':'service','industry':'freelance','region':{'mode':'physical','city':'Shanghai','raw':'Shanghai'},'keywords':['design'],'capabilities':{'has_arbitration':!![],'has_refund_path':!![],'has_milestone_nodes':![],'has_compensation_fund':![],'has_wip_verification':!![],'has_messenger':!![],'has_buy_guard':![],'has_dynamic_pricing':![],'is_published':!![],'is_paused':![]}};function b(){return{'demands':[{'object':'0xdesign','description':'need\x20a\x20freelance\x20logo\x20redesign\x20for\x20a\x20coffee\x20brand','location':'Shanghai','rewards':['0xr1','0xr2'],'guards':[],'presenters_count':0x0,'um':'0xum1','permission':'0xperm1'},{'object':'0xcleaning','description':'deep\x20cleaning\x20for\x20a\x203-bedroom\x20apartment','location':'Beijing','rewards':['0xr3'],'guards':[{'guard':'0xg'}],'presenters_count':0x2,'um':null,'permission':'0xperm2'}],'total_enumerated':0x2,'has_more':![],'coverage':{'mode':'event_window','complete':![],'truncated':![],'total_enumerated':0x2,'chain_id':'chain_test','degraded_reasons':['EVENT_BACKED_ENUMERATION']}};}beforeEach(()=>{vi['mocked'](enumerateDemands)['mockReset'](),vi['mocked'](matchServicesViaIndex)['mockReset']();}),it('supply_to_demand\x20policy\x20gates\x20demands\x20and\x20reports\x20the\x20effect',async()=>{vi['mocked'](enumerateDemands)['mockResolvedValueOnce'](b());const c=await handleEvaluationOperation({'action':'demand_present','service_cap':a,'context_network':'testnet','match_policy':{'policy_id':'pick-design','direction':'supply_to_demand','gates':[{'dim':'text','op':'must_contain','value':'logo'},{'dim':'messenger','op':'eq','value':!![]}]}}),d=resultOf(c);expect(d['matches']['map'](e=>e['demand']['object']))['toEqual'](['0xdesign']),expect(d['policy_effect']['policy_id'])['toBe']('pick-design'),expect(d['policy_effect']['direction'])['toBe']('supply_to_demand'),expect(d['policy_effect']['dropped']['some'](e=>e['object']==='0xcleaning'))['toBe'](!![]),expect(d['policy_effect']['privacy'])['toContain']('never\x20leave\x20this\x20device'),expect(d['matches'][0x0]['next'])['toBeDefined'](),expect(matchServicesViaIndex)['not']['toHaveBeenCalled']();}),it('preset\x20supplier_hunting\x20drives\x20demand_present\x20end-to-end',async()=>{vi['mocked'](enumerateDemands)['mockResolvedValueOnce'](b());const c=await handleEvaluationOperation({'action':'demand_present','service_cap':a,'context_network':'testnet','match_policy':'supplier_hunting'}),d=resultOf(c);expect(d['policy_effect']['policy_id'])['toBe']('supplier_hunting'),expect(d['matches'])['toHaveLength'](0x2);}),it('a\x20demand_to_supply\x20policy\x20is\x20rejected\x20by\x20demand_present',async()=>{await expect(handleEvaluationOperation({'action':'demand_present','service_cap':a,'context_network':'testnet','match_policy':'trust_first'}))['rejects']['toThrow'](/direction/),expect(enumerateDemands)['not']['toHaveBeenCalled']();}),it('weights\x20re-anchor\x20the\x20demand_match\x20scoring\x20dims\x20on\x20the\x20supply-to-demand\x20path',async()=>{vi['mocked'](enumerateDemands)['mockResolvedValueOnce'](b());const c=await handleEvaluationOperation({'action':'demand_present','service_cap':a,'context_network':'testnet','match_policy':{'policy_id':'custom','direction':'supply_to_demand','weights':{'capabilities':0x32}}}),d=resultOf(c),e=d['matches'][0x0]['result']['breakdown']['find'](f=>f['rule_id']==='capabilities');expect(e['weight'])['toBe'](0x32),expect(e['weight_source'])['toBe']('override'),expect(d['policy_effect']['weights_applied'])['toEqual']({'capabilities':0x32});});}),describe('evaluation_operation\x20discover_demands\x20policy\x20gates\x20(K5-11\x20R4-W2)',()=>{function a(){return{'demands':[{'object':'0xdesign','description':'need\x20a\x20freelance\x20logo\x20redesign','location':'Shanghai','rewards':['0xr1'],'guards':[],'presenters_count':0x0,'um':'0xum1','permission':'0xperm1'},{'object':'0xcleaning','description':'deep\x20cleaning\x20for\x20a\x203-bedroom\x20apartment','location':'Beijing','rewards':[],'guards':[],'presenters_count':0x0,'um':null,'permission':'0xperm2'}],'total_enumerated':0x2,'has_more':![],'coverage':{'mode':'event_window','complete':![],'truncated':![],'total_enumerated':0x2,'chain_id':'chain_test','degraded_reasons':['EVENT_BACKED_ENUMERATION']}};}beforeEach(()=>{vi['mocked'](enumerateDemands)['mockReset']();}),it('gates\x20filter\x20the\x20enumerated\x20set;\x20weights/rerank\x20are\x20reported\x20not\x20applicable',async()=>{vi['mocked'](enumerateDemands)['mockResolvedValueOnce'](a());const b=await handleEvaluationOperation({'action':'discover_demands','context_network':'testnet','match_policy':{'policy_id':'pick-design','direction':'supply_to_demand','gates':[{'dim':'text','op':'must_contain','value':'logo'}],'weights':{'trust':0x1e},'rerank':{'diversity':{'by':'owner','max_per_group':0x1}}}}),c=resultOf(b);expect(c['demands']['map'](e=>e['object']))['toEqual'](['0xdesign']),expect(c['policy_effect']['policy_id'])['toBe']('pick-design'),expect(c['policy_effect']['ignored']['join']('|'))['toContain']('weights\x20not\x20applicable'),expect(c['policy_effect']['ignored']['join']('|'))['toContain']('rerank\x20not\x20applicable'),expect(c['policy_effect']['weights_applied'])['toEqual']({});}),it('violated\x20reward\x20gates\x20eliminate\x20demands\x20from\x20the\x20enumerated\x20set',async()=>{vi['mocked'](enumerateDemands)['mockResolvedValueOnce'](a());const b=await handleEvaluationOperation({'action':'discover_demands','context_network':'testnet','match_policy':{'policy_id':'multi-reward','direction':'supply_to_demand','gates':[{'dim':'reward','op':'gte','value':0x2}]}}),c=resultOf(b);expect(c['demands'])['toHaveLength'](0x0),expect(c['policy_effect']['dropped'])['toHaveLength'](0x2);});});
|
|
@@ -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','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'];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}};}
|
|
@@ -20,4 +20,5 @@ export declare function normalizeManyAccountOrMark(input: string[] | {
|
|
|
20
20
|
entities: any[];
|
|
21
21
|
check_all_founded?: boolean;
|
|
22
22
|
} | undefined;
|
|
23
|
+
export declare function throwIfTransportAmbiguous(op: string, e: unknown): never;
|
|
23
24
|
export declare function handleMessengerOperation(args: unknown): Promise<ToolDispatchResult>;
|