@wowok/agent-mcp 3.3.6 → 3.3.7

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.
Files changed (137) hide show
  1. package/dist/chain-semantics/eval-order.js +1 -1
  2. package/dist/chain-semantics/field-capability.js +1 -1
  3. package/dist/chain-semantics/fund-flow.js +1 -1
  4. package/dist/chain-semantics/guard-verbs.js +1 -1
  5. package/dist/chain-semantics/object-graph.js +1 -1
  6. package/dist/composition/audit.js +1 -1
  7. package/dist/composition/compile.d.ts +2 -1
  8. package/dist/composition/compile.js +1 -1
  9. package/dist/composition/materialize.js +1 -1
  10. package/dist/data/projection/facets.spec.js +1 -1
  11. package/dist/evaluation/match-policy.d.ts +30 -6
  12. package/dist/evaluation/match-policy.js +1 -1
  13. package/dist/evaluation/match-policy.spec.js +1 -1
  14. package/dist/extensions/business-modules.js +1 -1
  15. package/dist/harness/recover.js +1 -1
  16. package/dist/intent/types.d.ts +1 -1
  17. package/dist/intent/types.js +1 -1
  18. package/dist/keeper/detectors.d.ts +3 -0
  19. package/dist/keeper/detectors.js +1 -1
  20. package/dist/keeper/keeper.spec.js +1 -1
  21. package/dist/knowledge/allocator-rail-verifier.js +1 -1
  22. package/dist/knowledge/audit-rules.js +1 -1
  23. package/dist/knowledge/baselines/rules/plan.json +97 -2
  24. package/dist/knowledge/builtin-templates.d.ts +6 -1
  25. package/dist/knowledge/builtin-templates.js +1 -1
  26. package/dist/knowledge/event-semantics.js +1 -1
  27. package/dist/knowledge/guard-design-patterns.js +1 -1
  28. package/dist/knowledge/guard-templates.d.ts +1 -1
  29. package/dist/knowledge/guard-templates.js +1 -1
  30. package/dist/knowledge/industry-generalizer.d.ts +4 -0
  31. package/dist/knowledge/industry-generalizer.js +1 -1
  32. package/dist/knowledge/semantic-ir.d.ts +113 -0
  33. package/dist/knowledge/semantic-ir.js +1 -0
  34. package/dist/knowledge/strategy-manuals.js +1 -1
  35. package/dist/knowledge/template-loader.d.ts +34 -0
  36. package/dist/knowledge/template-loader.js +1 -1
  37. package/dist/knowledge/template-prose.d.ts +50 -0
  38. package/dist/knowledge/template-prose.js +1 -0
  39. package/dist/knowledge/template-registry.js +1 -1
  40. package/dist/knowledge/template-scanner.d.ts +1 -1
  41. package/dist/knowledge/template-scanner.js +1 -1
  42. package/dist/knowledge/tools-reference.js +1 -1
  43. package/dist/monitor/MonitorLoop.js +1 -1
  44. package/dist/monitor/normalize.d.ts +1 -1
  45. package/dist/monitor/normalize.js +1 -1
  46. package/dist/monitor/types.js +1 -1
  47. package/dist/playbooks/service-build/business-puzzle.js +1 -1
  48. package/dist/playbooks/service-build/machine-panorama.js +1 -1
  49. package/dist/playbooks/service-build/merchant-guide.d.ts +4 -0
  50. package/dist/playbooks/service-build/merchant-guide.js +1 -1
  51. package/dist/playbooks/service-build/migration-planner.d.ts +2 -1
  52. package/dist/playbooks/service-build/migration-planner.js +1 -1
  53. package/dist/playbooks/service-build/mode-actions.d.ts +7 -0
  54. package/dist/playbooks/service-build/mode-actions.js +1 -1
  55. package/dist/playbooks/service-build/object-panorama.d.ts +22 -1
  56. package/dist/playbooks/service-build/object-panorama.js +1 -1
  57. package/dist/playbooks/service-build/participation-radar.js +1 -1
  58. package/dist/playbooks/service-build/relationship-profile.js +1 -1
  59. package/dist/playbooks/service-build/reverse-mapping-nk4.spec.js +1 -1
  60. package/dist/playbooks/service-build/reverse-mapping.d.ts +1 -0
  61. package/dist/playbooks/service-build/reverse-mapping.js +1 -1
  62. package/dist/playbooks/service-build/service-panorama.js +1 -1
  63. package/dist/playbooks/service-build/service-quote.js +1 -1
  64. package/dist/review/index.js +1 -1
  65. package/dist/safety/confirm-gate.js +1 -1
  66. package/dist/schema/benchmark-migration/index.d.ts +64 -10
  67. package/dist/schema/benchmark-migration/index.js +1 -1
  68. package/dist/schema/call/arbitration.js +1 -1
  69. package/dist/schema/call/base.d.ts +8 -0
  70. package/dist/schema/call/bridge.d.ts +2 -0
  71. package/dist/schema/call/error-codes.d.ts +1 -1
  72. package/dist/schema/call/error-codes.js +1 -1
  73. package/dist/schema/call/reward.d.ts +10 -0
  74. package/dist/schema/call/reward.js +1 -1
  75. package/dist/schema/call/semantic.js +1 -1
  76. package/dist/schema/call/service.js +1 -1
  77. package/dist/schema/common/index.js +1 -1
  78. package/dist/schema/evaluation/index.d.ts +152 -0
  79. package/dist/schema/evaluation/index.js +1 -1
  80. package/dist/schema/goal/index.d.ts +2 -0
  81. package/dist/schema/goal/planning.d.ts +3 -0
  82. package/dist/schema/goal/planning.js +1 -1
  83. package/dist/schema/industry-pack/index.d.ts +62 -0
  84. package/dist/schema/industry-pack/modes.d.ts +62 -0
  85. package/dist/schema/industry-pack/modes.js +1 -1
  86. package/dist/schema/intent-radar/index.d.ts +3 -0
  87. package/dist/schema/intent-radar/index.js +1 -1
  88. package/dist/schema/local/index.d.ts +20 -0
  89. package/dist/schema/local/index.js +1 -1
  90. package/dist/schema/operations.d.ts +5 -0
  91. package/dist/schema/query/index.d.ts +145 -47
  92. package/dist/schema/query/index.js +1 -1
  93. package/dist/schema/schema-version.js +1 -1
  94. package/dist/schema-query-impl/index.js +1 -1
  95. package/dist/schemas/account_operation.output.json +2 -0
  96. package/dist/schemas/benchmark_migration_operation.output.json +42 -0
  97. package/dist/schemas/benchmark_migration_operation.schema.json +208 -5
  98. package/dist/schemas/bridge_operation.output.json +2 -0
  99. package/dist/schemas/evaluation_operation.output.json +240 -0
  100. package/dist/schemas/evaluation_operation.schema.json +397 -1
  101. package/dist/schemas/goal_operation.schema.json +18 -10
  102. package/dist/schemas/index.json +1 -1
  103. package/dist/schemas/industry_pack_operation.output.json +86 -2
  104. package/dist/schemas/industry_pack_operation.schema.json +199 -0
  105. package/dist/schemas/intent_radar.output.json +2 -0
  106. package/dist/schemas/intent_radar.schema.json +1 -0
  107. package/dist/schemas/local_cache_operation.output.json +2 -0
  108. package/dist/schemas/local_history_operation.output.json +2 -0
  109. package/dist/schemas/local_info_operation.output.json +2 -0
  110. package/dist/schemas/local_mark_operation.output.json +2 -0
  111. package/dist/schemas/onchain_events.output.json +281 -11
  112. package/dist/schemas/onchain_events.schema.json +5 -1
  113. package/dist/schemas/onchain_operations.output.json +2 -0
  114. package/dist/schemas/onchain_operations.schema.json +37 -3
  115. package/dist/schemas/onchain_operations_arbitration.schema.json +1 -1
  116. package/dist/schemas/onchain_operations_reward.schema.json +35 -1
  117. package/dist/schemas/onchain_operations_service.schema.json +1 -1
  118. package/dist/schemas/query_toolkit.output.json +34 -0
  119. package/dist/tools/handlers/benchmark-migration.d.ts +1 -0
  120. package/dist/tools/handlers/benchmark-migration.js +1 -1
  121. package/dist/tools/handlers/config.js +1 -1
  122. package/dist/tools/handlers/evaluation.js +1 -1
  123. package/dist/tools/handlers/evaluation.spec.js +1 -1
  124. package/dist/tools/handlers/intent-radar.js +1 -1
  125. package/dist/tools/handlers/messenger.d.ts +1 -0
  126. package/dist/tools/handlers/messenger.js +1 -1
  127. package/dist/tools/handlers/onchain.d.ts +1 -0
  128. package/dist/tools/handlers/onchain.js +1 -1
  129. package/dist/tools/handlers/query.js +1 -1
  130. package/dist/tools/handlers/wip.js +1 -1
  131. package/dist/tools/registry/agent.js +1 -1
  132. package/dist/tools/registry/query.js +1 -1
  133. package/dist/tools/wip-verify-ledger.d.ts +14 -0
  134. package/dist/tools/wip-verify-ledger.js +1 -0
  135. package/dist/tools/wrap.d.ts +4 -0
  136. package/dist/tools/wrap.js +1 -1
  137. package/package.json +2 -2
@@ -17,6 +17,9 @@ export interface SimilarIndustryMatch {
17
17
  domain_prior?: boolean;
18
18
  requirement_support?: number;
19
19
  }
20
+ export declare const ENUM_TRAIT_SCALES: Partial<Record<keyof IndustryTraits, readonly string[]>>;
21
+ export declare const BOOLEAN_TRAIT_KEYS: Array<keyof IndustryTraits>;
22
+ export declare const EVIDENCE_THRESHOLD = 0.5;
20
23
  export interface RequiredTrait {
21
24
  trait: keyof IndustryTraits;
22
25
  value: boolean | string;
@@ -43,6 +46,7 @@ export interface DomainPriorMatch {
43
46
  matched_keywords: string[];
44
47
  industries: string[];
45
48
  boost: number;
49
+ source?: "keyword" | "semantic_ir" | "both";
46
50
  }
47
51
  export declare function detectDomainPriors(text: string): DomainPriorMatch[];
48
52
  export declare function requirementSupport(industry: string, traits: IndustryTraits, trait_confidence?: Partial<Record<keyof IndustryTraits, number>>): number | undefined;
@@ -1 +1 @@
1
- import{getIndustryProfile,listIndustries,registerIndustry}from'./industry-registry.js';const TRAIT_INFERENCE_RULES=[{'keywords':['logistics','shipping','delivery','express','shipment','ship'],'trait':'has_logistics','value':!![],'weight':0.85},{'keywords':['digital','online','cloud','virtual'],'trait':'has_logistics','value':![],'weight':0.7},{'keywords':['consulting','communication','requirement-confirmation','revision-rounds','negotiate','consult'],'trait':'communication_heavy','value':!![],'weight':0.8},{'keywords':['standard-product','in-stock','one-click-order','standard','instant'],'trait':'communication_heavy','value':![],'weight':0.7},{'keywords':['digital','file','code','design-draft','electronic','online','software','source'],'trait':'pure_digital','value':!![],'weight':0.8},{'keywords':['physical','hardware','equipment'],'trait':'pure_digital','value':![],'weight':0.75},{'keywords':['course','semester','long-cycle','long-term','project-based','project'],'trait':'long_cycle','value':!![],'weight':0.75},{'keywords':['instant','in-stock','same-day','immediate'],'trait':'long_cycle','value':![],'weight':0.8},{'keywords':['rental','rent','deposit','lease','shortstay','short-stay','short\x20stay','bnb','homestay','短租'],'trait':'deposit_required','value':!![],'weight':0.9},{'keywords':['purchase','buyout','buy'],'trait':'deposit_required','value':![],'weight':0.6},{'keywords':['multi-party','segmented','multi-stage','multi-vendor','itinerary','segment'],'trait':'multi_tier_allocation','value':!![],'weight':0.75},{'keywords':['medical','legal','financial','insurance','pharmaceutical','pharma'],'trait':'regulatory_intensity','value':'high','weight':0.9},{'keywords':['education','food','construction'],'trait':'regulatory_intensity','value':'medium','weight':0.7},{'keywords':['entertainment','gaming','digital','game'],'trait':'regulatory_intensity','value':'low','weight':0.6},{'keywords':['custom','high-value','customized','bespoke'],'trait':'trust_sensitivity','value':'high','weight':0.8},{'keywords':['standard-product','small-ticket','standard','low-value'],'trait':'trust_sensitivity','value':'low','weight':0.7},{'keywords':['subscription','membership','recurring'],'trait':'consumption_frequency','value':'frequent','weight':0.85},{'keywords':['course','semester','education'],'trait':'consumption_frequency','value':'one_time','weight':0.75},{'keywords':['daily','frequent','common'],'trait':'consumption_frequency','value':'frequent','weight':0.75},{'keywords':['small-ticket','daily','convenience-store','micro'],'trait':'avg_ticket_size','value':'micro','weight':0.7},{'keywords':['retail','commodity','standard-product'],'trait':'avg_ticket_size','value':'small','weight':0.7},{'keywords':['custom','project','outsourcing'],'trait':'avg_ticket_size','value':'medium','weight':0.7},{'keywords':['real-estate','automobile','high-value','luxury','realestate','car'],'trait':'avg_ticket_size','value':'large','weight':0.85},{'keywords':['物流','配送','送货','快递','发货','运输','上门'],'trait':'has_logistics','value':!![],'weight':0.85},{'keywords':['数字','线上','云端','虚拟'],'trait':'has_logistics','value':![],'weight':0.7},{'keywords':['沟通','客服','咨询','洽谈','协商','客服沟通'],'trait':'communication_heavy','value':!![],'weight':0.8},{'keywords':['标准品','现货','一键下单','标准','即时'],'trait':'communication_heavy','value':![],'weight':0.7},{'keywords':['数字','文件','代码','设计稿','电子','线上','软件','源码','数字商品'],'trait':'pure_digital','value':!![],'weight':0.8},{'keywords':['实物','硬件','设备','线下商品'],'trait':'pure_digital','value':![],'weight':0.75},{'keywords':['课程','学期','长周期','长期','项目制'],'trait':'long_cycle','value':!![],'weight':0.75},{'keywords':['即时','现货','当天','即时交付'],'trait':'long_cycle','value':![],'weight':0.8},{'keywords':['租赁','租借','租金','押金','定金','预订金'],'trait':'deposit_required','value':!![],'weight':0.9},{'keywords':['购买','买断','现购'],'trait':'deposit_required','value':![],'weight':0.6},{'keywords':['多方','多方参与','分段','多段','多供应商','行程','路线','套餐'],'trait':'multi_tier_allocation','value':!![],'weight':0.75},{'keywords':['医疗','法律','金融','保险','医药','药企'],'trait':'regulatory_intensity','value':'high','weight':0.9},{'keywords':['教育','餐饮','建筑'],'trait':'regulatory_intensity','value':'medium','weight':0.7},{'keywords':['娱乐','游戏','数字娱乐'],'trait':'regulatory_intensity','value':'low','weight':0.6},{'keywords':['定制','高价值','高端定制'],'trait':'trust_sensitivity','value':'high','weight':0.8},{'keywords':['标准品','小额','标准','低价','廉价'],'trait':'trust_sensitivity','value':'low','weight':0.7},{'keywords':['订阅','会员','续费','复购'],'trait':'consumption_frequency','value':'frequent','weight':0.85},{'keywords':['课程','学期','学历'],'trait':'consumption_frequency','value':'one_time','weight':0.75},{'keywords':['日常','频繁','常见'],'trait':'consumption_frequency','value':'frequent','weight':0.75},{'keywords':['小额','日常','便利店','微型'],'trait':'avg_ticket_size','value':'micro','weight':0.7},{'keywords':['零售','商品','标准品'],'trait':'avg_ticket_size','value':'small','weight':0.7},{'keywords':['定制','项目','外包'],'trait':'avg_ticket_size','value':'medium','weight':0.7},{'keywords':['房产','汽车','高价值','奢侈品','贵重','豪华','高端'],'trait':'avg_ticket_size','value':'large','weight':0.85},{'keywords':['酒店','住宿','民宿','客栈','宾馆','客房','房源','门店','到店','线下','度假村','公寓','旅馆','机票','旅游','旅行','行程','度假','门票','游轮','hotel','hostel','apartment','resort','stay','room','property','accommodation','lodging','bnb','homestay','shortstay','短租','flight','itinerary','tourism','travel','trip','vacation'],'trait':'has_logistics','value':!![],'weight':0.8},{'keywords':['预订','预约','订房','下单','退房','入住','核销','行程','签证','门票','机票','旅游','旅行','度假','booking','reservation','reservation','check-in','checkin','checkout','check-out','itinerary','flight','ticket','vacation','travel','trip'],'trait':'multi_tier_allocation','value':!![],'weight':0.75},{'keywords':['实名','证件','身份证','核销','核验','凭证','资质','持证','真实房源','验真'],'trait':'trust_sensitivity','value':'high','weight':0.8},{'keywords':['酒店','住宿','民宿','客栈','旅游','旅行','度假','签证','旅行社','旅馆','hospitality','tourism','visa','lodging'],'trait':'regulatory_intensity','value':'medium','weight':0.8},{'keywords':['单次','一次性','单晚','单程','单间','每晚','按晚'],'trait':'consumption_frequency','value':'one_time','weight':0.75},{'keywords':['房费','房价','客单价','高客单','机票','游轮','度假套餐','酒店','住宿','民宿','客栈','度假村','度假','签证','hotel','hostel','resort','flight','accommodation','lodging'],'trait':'avg_ticket_size','value':'large','weight':0.85},{'keywords':['门店','到店','线下','实地','面对面'],'trait':'pure_digital','value':![],'weight':0.75},{'keywords':['沟通','客服','messenger','咨询','售后沟通'],'trait':'communication_heavy','value':!![],'weight':0.8}];export const DEFAULT_TRAITS={'has_logistics':![],'communication_heavy':![],'pure_digital':![],'long_cycle':![],'deposit_required':![],'multi_tier_allocation':![],'regulatory_intensity':'low','trust_sensitivity':'medium','consumption_frequency':'occasional','avg_ticket_size':'small'};export function inferTraitsFromDescription(a){const b=(a??'')['toLowerCase'](),c=[],d=new Map(),e=new Map();for(const i of TRAIT_INFERENCE_RULES){const j=i['keywords']['find'](l=>b['includes'](l['toLowerCase']()));if(j){c['push'](j);const l=d['get'](i['trait'])??0x0;i['weight']>l&&(d['set'](i['trait'],i['weight']),e['set'](i['trait'],i['value']));}}const f={...DEFAULT_TRAITS};for(const [m,n]of e['entries']()){f[m]=n;}const g=d['size'],h=Math['min'](0x1,g/0xa);return{'traits':f,'confidence':h,'matched_keywords':Array['from'](new Set(c)),'trait_confidence':Object['fromEntries'](d)};}const ENUM_TRAIT_SCALES={'regulatory_intensity':['low','medium','high'],'trust_sensitivity':['low','medium','high'],'consumption_frequency':['one_time','occasional','frequent'],'avg_ticket_size':['micro','small','medium','large']},BOOLEAN_TRAIT_KEYS=['has_logistics','communication_heavy','pure_digital','long_cycle','deposit_required','multi_tier_allocation'],ENUM_TRAIT_KEYS=['regulatory_intensity','trust_sensitivity','consumption_frequency','avg_ticket_size'],EVIDENCE_THRESHOLD=0.5;export const INDUSTRY_REQUIRED_TRAITS={'subscription':[{'trait':'pure_digital','value':!![],'reason':'subscription\x20build\x20notes:\x20\x27Pure\x20digital\x20—\x20native\x20WoWok\x20soil\x27'}],'retail':[{'trait':'has_logistics','value':!![],'reason':'retail\x20fulfilment\x20is\x20physical\x20shipping'}],'retail_d2c':[{'trait':'has_logistics','value':!![],'reason':'retail_d2c\x20fulfilment\x20is\x20physical\x20shipping'}],'rental':[{'trait':'deposit_required','value':!![],'reason':'rental\x20without\x20a\x20deposit\x20is\x20not\x20the\x20rental\x20model'}],'travel':[{'trait':'has_logistics','value':!![],'reason':'travel\x20fulfilment\x20happens\x20at\x20a\x20physical\x20destination'},{'trait':'multi_tier_allocation','value':!![],'reason':'travel\x20splits\x20guest\x20/\x20property\x20/\x20payment\x20legs'}],'education':[{'trait':'long_cycle','value':!![],'reason':'education\x20delivers\x20over\x20a\x20course/term\x20cycle'}],'freelance':[{'trait':'communication_heavy','value':!![],'reason':'freelance\x20is\x20requirement-confirmation\x20driven'}],'licensing':[{'trait':'pure_digital','value':!![],'reason':'a\x20license\x20grant\x20is\x20a\x20digital\x20right,\x20no\x20physical\x20fulfilment\x20leg'},{'trait':'multi_tier_allocation','value':!![],'reason':'licensing\x20splits\x20proceeds\x20across\x20rights-holders\x20—\x20the\x20royalty\x20waterfall\x20is\x20the\x20defining\x20structure'}],'crowdfunding':[{'trait':'deposit_required','value':!![],'reason':'each\x20contribution\x20is\x20escrowed\x20and\x20locked\x20until\x20the\x20deadline\x20—\x20funds-in-escrow\x20is\x20the\x20defining\x20structure'},{'trait':'multi_tier_allocation','value':!![],'reason':'settlement\x20is\x20a\x20two-leg\x20allocation\x20(release-to-project\x20XOR\x20per-contributor\x20refund)\x20—\x20the\x20split\x20decision\x20is\x20the\x20defining\x20structure'}],'general':[]};export function traitContradictions(a,b,c){const d=INDUSTRY_REQUIRED_TRAITS[a];if(!d||d['length']===0x0)return[];const e=[];for(const f of d){const g=b[f['trait']],h=typeof f['value']==='boolean'?g!==f['value']:g!==f['value'];if(!h)continue;const i=c?.[f['trait']];if(c&&(i===undefined||i<EVIDENCE_THRESHOLD))continue;e['push'](f);}return e;}export function filterConsistentIndustries(a,b,c){const d=[],e=[];for(const f of a){const g=traitContradictions(f['industry'],b,c);if(g['length']>0x0)e['push']({'industry':f['industry'],'contradictions':g});else d['push'](f);}return{'consistent':d,'inconsistent':e};}export const DOMAIN_PRIORS=[{'domain':'travel_accommodation','keywords':['酒店','住宿','民宿','客栈','宾馆','旅馆','客房','房源','公寓','度假村','度假','旅游','旅行','机票','门票','行程','预订','订房','下单','入住','退房','核销','签证','hotel','hostel','apartment','resort','flight','ticket','itinerary','reservation','booking','check-in','checkin','checkout','check-out','stay','room','property','vacation','travel','trip','ota','accommodation','lodging','bnb','homestay','shortstay','short-stay','短租'],'industries':['travel','rental'],'boost':0.15}];export function detectDomainPriors(a){const b=(a??'')['toLowerCase'](),c=[];for(const d of DOMAIN_PRIORS){const e=d['keywords']['filter'](f=>b['includes'](f['toLowerCase']()));if(e['length']===0x0)continue;c['push']({'domain':d['domain'],'matched_keywords':Array['from'](new Set(e)),'industries':[...d['industries']],'boost':d['boost']});}return c;}function dimAffinity(c,d,e){if(d===e)return 0x1;const f=ENUM_TRAIT_SCALES[c];if(!f)return 0x0;const g=f['indexOf'](String(d)),h=f['indexOf'](String(e));if(g<0x0||h<0x0)return 0x0;const i=f['length']-0x1;return Math['max'](0x0,0x1-Math['abs'](g-h)/ i);}const REQUIREMENT_SUPPORT_WEIGHT=0.25;export function requirementSupport(a,b,c){const d=INDUSTRY_REQUIRED_TRAITS[a];if(!d||d['length']===0x0)return undefined;let e=0x0;for(const f of d){const g=c?.[f['trait']];if(c&&(g===undefined||g<EVIDENCE_THRESHOLD)){e+=0.5;continue;}e+=b[f['trait']]===f['value']?0x1:0x0;}return e/d['length'];}export function findSimilarIndustries(a,b,d){const e=listIndustries(),f=[],g=d?.['trait_confidence'],h=[...BOOLEAN_TRAIT_KEYS,...ENUM_TRAIT_KEYS];for(const i of e){const j=i['traits'];let l=0x0;const m=[],n=[],o=[];for(const s of h){const t=dimAffinity(s,a[s],j[s]),u=g?.[s],v=g===undefined||u!==undefined&&u>=EVIDENCE_THRESHOLD;if(v){o['push'](s);if(t===0x1)m['push'](s);else n['push'](s);}l+=v?t:0.5;}const p=l/h['length'],q=requirementSupport(i['name'],a,d?.['trait_confidence']),r=q===undefined?p:p+REQUIREMENT_SUPPORT_WEIGHT*q;f['push']({'industry':i['name'],'similarity':r,'matched_traits':m,'contradicted_traits':n,'evidenced_traits':o,'trait_distance':Number((0x1-r)['toFixed'](0x4)),...q===undefined?{}:{'requirement_support':Number(q['toFixed'](0x4))}});}return f['sort']((w,x)=>x['similarity']-w['similarity']),typeof b==='number'?f['slice'](0x0,Math['max'](0x0,b)):f;}const FALLBACK_RISK_CHECK_RULES=[{'trait_key':'deposit_required','trait_value':!![],'check':{'id':'fb_deposit_lock','description':'Deposit\x20lock-period\x20safety\x20(deposit\x20cannot\x20be\x20withdrawn\x20by\x20merchant\x20at\x20any\x20time)','weight':0x1e,'passed':a=>a?.['fund_safety']?.['lock_duration_safe']??![],'advice':'⚠️\x20Lock\x20period\x20unsafe:\x20deposit\x20may\x20be\x20withdrawn\x20at\x20any\x20time;\x20recommend\x20requiring\x20a\x20lock\x20period\x20≥\x207\x20days.'},'need':{'id':'need_deposit_lock','tier':'personalized','description':'Deposit\x20lock-period\x20safety','satisfied':a=>a?.['fund_safety']?.['lock_duration_safe']??![],'advice':'Deposit\x20lock-period\x20unsafe.'}},{'trait_key':'has_logistics','trait_value':!![],'check':{'id':'fb_logistics_track','description':'Logistics\x20Guard\x20configuration\x20(shipping/receipt\x20verification)','weight':0x19,'passed':a=>a?.['workflow_analysis']?.['has_milestone_nodes']??![],'advice':'⚠️\x20No\x20logistics\x20Guard:\x20shipping\x20and\x20receipt\x20status\x20are\x20not\x20verified\x20by\x20a\x20third\x20party.'}},{'trait_key':'pure_digital','trait_value':!![],'check':{'id':'fb_wip_verified','description':'WIP\x20hash\x20verification\x20(digital\x20deliverables\x20traceable)','weight':0x19,'passed':a=>a?.['service_basics']?.['wip_verified']===!![],'advice':'⚠️\x20WIP\x20not\x20verified:\x20digital\x20deliverables\x20cannot\x20be\x20traced.'}},{'trait_key':'long_cycle','trait_value':!![],'check':{'id':'fb_milestone','description':'Milestone\x20nodes\x20(phased\x20acceptance)','weight':0x19,'passed':a=>a?.['workflow_analysis']?.['has_milestone_nodes']??![],'advice':'⚠️\x20No\x20milestone\x20nodes:\x20long-cycle\x20projects\x20lack\x20phased\x20acceptance.'}},{'trait_key':'regulatory_intensity','trait_value':'high','check':{'id':'fb_compliance','description':'Compliance\x20configuration\x20(arbitration\x20+\x20compensation\x20fund)','weight':0x1e,'passed':a=>(a?.['workflow_analysis']?.['has_arbitration_path']??![])&&(a?.['service_basics']?.['compensation_fund_balance']??0x0n)>0x0n,'advice':'🔴\x20Compliance\x20requirement\x20not\x20met:\x20highly\x20regulated\x20industries\x20must\x20configure\x20arbitration\x20and\x20a\x20compensation\x20fund.'}},{'trait_key':'multi_tier_allocation','trait_value':!![],'check':{'id':'fb_multi_tier_fair','description':'Multi-tier\x20allocation\x20fairness\x20(each\x20segment\x20has\x20a\x20corresponding\x20Allocator)','weight':0x14,'passed':a=>(a?.['workflow_analysis']?.['total_nodes']??0x0)>=0x3,'advice':'⚠️\x20Multi-tier\x20allocation\x20requires\x20corresponding\x20nodes\x20and\x20Allocators,\x20otherwise\x20fund\x20distribution\x20is\x20opaque.'}}];function buildFallbackFlywheel(a,b){const c=['Fund\x20escrow\x20+\x20process\x20transparency'];if(b['deposit_required'])c['push']('Deposit\x20escrow\x20+\x20lock-period\x20guarantee');if(b['has_logistics'])c['push']('Logistics\x20Guard\x20verification');if(b['pure_digital'])c['push']('WIP\x20digital\x20deliverable\x20traceability');if(b['regulatory_intensity']==='high')c['push']('Compliant\x20arbitration\x20+\x20compensation\x20fund\x20guarantee');const d=[{'action':'Set\x20first-order\x20Reward','purpose':'Attract\x20new\x20customers','mutableField':'rewards','metricToWatch':'New\x20customer\x20order\x20rate'},{'action':'Configure\x20compensation_fund','purpose':'Improve\x20trust\x20score','mutableField':'compensation_fund','metricToWatch':'Trust\x20score'}];return b['long_cycle']&&d['push']({'action':'Milestone\x20Reward','purpose':'Incentivize\x20completion\x20of\x20long-cycle\x20projects','mutableField':'rewards','metricToWatch':'Completion\x20rate'}),b['consumption_frequency']==='frequent'&&d['push']({'action':'Loyalty\x20Reward','purpose':'Improve\x20repurchase','mutableField':'rewards','metricToWatch':'Repurchase\x20rate'}),{'industry':a,'trustSellingPoints':c,'keyActions':d,'rewardStrategy':'First-order\x20reward\x20+\x20referral\x20cashback'+(b['consumption_frequency']==='frequent'?'\x20+\x20loyalty\x20reward':''),'discountStrategy':b['long_cycle']?'Long-term\x20cooperation\x20discount\x20+\x20tiered\x20discount':'First-order\x20discount\x20+\x20spend-threshold\x20discount','trustDescription':c['join']('\x20+\x20')};}function buildFallbackPreferenceTemplate(a){return{'max_acceptable_cycle':a['long_cycle']?0x5a:0xe,'response_time_expectation':a['communication_heavy']?0x4:0xc,'require_arbitration':a['regulatory_intensity']!=='low'||a['trust_sensitivity']==='high','require_compensation_fund':a['trust_sensitivity']==='high'||a['deposit_required'],'risk_appetite':a['trust_sensitivity']==='high'?'conservative':'balanced','delivery_speed_priority':a['has_logistics']&&a['consumption_frequency']==='frequent'?'urgent':'normal','after_sales_expectation':a['trust_sensitivity']==='high'?'full':'basic'};}export function synthesizeProfile(a,b){const c=findSimilarIndustries(a,0x1),d=c[0x0],e=d&&d['similarity']>=0.6?getIndustryProfile(d['industry']):undefined,f=b??'custom_'+Date['now']()['toString'](0x24),g=b??'Custom\x20Industry',h=e?{...e['flywheel'],'industry':f}:buildFallbackFlywheel(f,a),i=e?{...e['preference_template'],'max_acceptable_cycle':a['long_cycle']?Math['max'](e['preference_template']['max_acceptable_cycle'],0x5a):e['preference_template']['max_acceptable_cycle'],'require_compensation_fund':a['trust_sensitivity']==='high'?!![]:e['preference_template']['require_compensation_fund']}:buildFallbackPreferenceTemplate(a),j=[],k=[];for(const l of FALLBACK_RISK_CHECK_RULES){a[l['trait_key']]===l['trait_value']&&(j['push']({...l['check'],'industry':f}),l['need']&&k['push']({...l['need']}));}return j['length']===0x0&&j['push']({'id':'fb_basic_arbitration','industry':f,'description':'Configure\x20arbitration\x20(basic\x20dispute\x20resolution)','weight':0x64,'passed':m=>m?.['workflow_analysis']?.['has_arbitration_path']??![],'advice':'⚠️\x20No\x20arbitration\x20configured:\x20basic\x20disputes\x20have\x20no\x20resolution\x20channel.'}),{'name':f,'display_name':g,'traits':a,'source':'inferred','version':'v1','flywheel':h,'risk_checks':j,'preference_template':i,'needs':k,'confidence':d?.['similarity']??0.3,'evolution':{'version':0x1,'last_updated':Date['now'](),'signal_count':0x0,'pending_suggestions':0x0}};}export function composeIndustries(a,b){if(!a||a['length']===0x0)return undefined;const d=[];for(const o of a){const q=getIndustryProfile(o);if(!q)return undefined;d['push'](q);}const e={'has_logistics':d['some'](r=>r['traits']['has_logistics']),'communication_heavy':d['some'](r=>r['traits']['communication_heavy']),'pure_digital':d['every'](r=>r['traits']['pure_digital']),'long_cycle':d['some'](r=>r['traits']['long_cycle']),'deposit_required':d['some'](r=>r['traits']['deposit_required']),'multi_tier_allocation':d['some'](r=>r['traits']['multi_tier_allocation']),'regulatory_intensity':pickStrictest(d['map'](r=>r['traits']['regulatory_intensity']),['low','medium','high']),'trust_sensitivity':pickStrictest(d['map'](r=>r['traits']['trust_sensitivity']),['low','medium','high']),'consumption_frequency':pickStrictest(d['map'](r=>r['traits']['consumption_frequency']),['one_time','occasional','frequent']),'avg_ticket_size':pickStrictest(d['map'](r=>r['traits']['avg_ticket_size']),['micro','small','medium','large'])},f=b??'composed_'+a['join']('_and_'),g=Array['from'](new Set(d['flatMap'](r=>r['flywheel']['trustSellingPoints']))),h=Array['from'](new Set(d['flatMap'](r=>r['flywheel']['keyActions']))),i={'industry':f,'trustSellingPoints':g,'keyActions':h,'rewardStrategy':d['map'](r=>r['flywheel']['rewardStrategy'])['join']('\x20+\x20'),'discountStrategy':d['map'](r=>r['flywheel']['discountStrategy'])['join']('\x20+\x20'),'trustDescription':d['map'](r=>r['flywheel']['trustDescription'])['join']('\x20+\x20')},j=new Map();for(const r of d){for(const s of r['risk_checks']){!j['has'](s['id'])&&j['set'](s['id'],{...s,'industry':f});}}const k=new Map();for(const t of d){for(const u of t['needs']){!k['has'](u['id'])&&k['set'](u['id'],{...u});}}const l={'max_acceptable_cycle':Math['max'](...d['map'](v=>v['preference_template']['max_acceptable_cycle'])),'response_time_expectation':Math['min'](...d['map'](v=>v['preference_template']['response_time_expectation'])),'require_arbitration':d['some'](v=>v['preference_template']['require_arbitration']),'require_compensation_fund':d['some'](v=>v['preference_template']['require_compensation_fund']),'risk_appetite':pickStrictest(d['map'](v=>v['preference_template']['risk_appetite']),['aggressive','balanced','conservative']),'delivery_speed_priority':pickStrictest(d['map'](v=>v['preference_template']['delivery_speed_priority']),['flexible','normal','urgent']),'after_sales_expectation':pickStrictest(d['map'](v=>v['preference_template']['after_sales_expectation']),['minimal','basic','full'])},m={'name':f,'display_name':b??'Composed\x20Industry\x20('+a['join']('+')+')','traits':e,'source':'composed','version':'v1','flywheel':i,'risk_checks':Array['from'](j['values']()),'preference_template':l,'needs':Array['from'](k['values']()),'parent_industries':[...a],'evolution':{'version':0x1,'last_updated':Date['now'](),'signal_count':0x0,'pending_suggestions':0x0}};return registerIndustry(m),m;}function pickStrictest(a,b){let c=0x0,d=a[0x0]??b[0x0];for(const e of a){const f=b['indexOf'](e);f>=0x0&&f>c&&(c=f,d=e);}return d;}
1
+ import{getIndustryProfile,listIndustries,registerIndustry}from'./industry-registry.js';const TRAIT_INFERENCE_RULES=[{'keywords':['logistics','shipping','delivery','express','shipment','ship'],'trait':'has_logistics','value':!![],'weight':0.85},{'keywords':['digital','online','cloud','virtual'],'trait':'has_logistics','value':![],'weight':0.7},{'keywords':['consulting','communication','requirement-confirmation','revision-rounds','negotiate','consult'],'trait':'communication_heavy','value':!![],'weight':0.8},{'keywords':['standard-product','in-stock','one-click-order','standard','instant'],'trait':'communication_heavy','value':![],'weight':0.7},{'keywords':['digital','file','code','design-draft','electronic','online','software','source'],'trait':'pure_digital','value':!![],'weight':0.8},{'keywords':['physical','hardware','equipment'],'trait':'pure_digital','value':![],'weight':0.75},{'keywords':['course','semester','long-cycle','long-term','project-based','project'],'trait':'long_cycle','value':!![],'weight':0.75},{'keywords':['instant','in-stock','same-day','immediate'],'trait':'long_cycle','value':![],'weight':0.8},{'keywords':['rental','rent','deposit','lease','shortstay','short-stay','short\x20stay','bnb','homestay'],'trait':'deposit_required','value':!![],'weight':0.9},{'keywords':['purchase','buyout','buy'],'trait':'deposit_required','value':![],'weight':0.6},{'keywords':['multi-party','segmented','multi-stage','multi-vendor','itinerary','segment'],'trait':'multi_tier_allocation','value':!![],'weight':0.75},{'keywords':['medical','legal','financial','insurance','pharmaceutical','pharma'],'trait':'regulatory_intensity','value':'high','weight':0.9},{'keywords':['education','food','construction'],'trait':'regulatory_intensity','value':'medium','weight':0.7},{'keywords':['entertainment','gaming','digital','game'],'trait':'regulatory_intensity','value':'low','weight':0.6},{'keywords':['custom','high-value','customized','bespoke'],'trait':'trust_sensitivity','value':'high','weight':0.8},{'keywords':['standard-product','small-ticket','standard','low-value'],'trait':'trust_sensitivity','value':'low','weight':0.7},{'keywords':['subscription','membership','recurring'],'trait':'consumption_frequency','value':'frequent','weight':0.85},{'keywords':['course','semester','education'],'trait':'consumption_frequency','value':'one_time','weight':0.75},{'keywords':['daily','frequent','common'],'trait':'consumption_frequency','value':'frequent','weight':0.75},{'keywords':['small-ticket','daily','convenience-store','micro'],'trait':'avg_ticket_size','value':'micro','weight':0.7},{'keywords':['retail','commodity','standard-product'],'trait':'avg_ticket_size','value':'small','weight':0.7},{'keywords':['custom','project','outsourcing'],'trait':'avg_ticket_size','value':'medium','weight':0.7},{'keywords':['real-estate','automobile','high-value','luxury','realestate','car'],'trait':'avg_ticket_size','value':'large','weight':0.85},{'keywords':['hotel','hostel','apartment','resort','stay','room','property','accommodation','lodging','bnb','homestay','shortstay','flight','itinerary','tourism','travel','trip','vacation'],'trait':'has_logistics','value':!![],'weight':0.8},{'keywords':['booking','reservation','check-in','checkin','checkout','check-out','itinerary','flight','ticket','vacation','travel','trip'],'trait':'multi_tier_allocation','value':!![],'weight':0.75},{'keywords':['hospitality','tourism','visa','lodging'],'trait':'regulatory_intensity','value':'medium','weight':0.8},{'keywords':['hotel','hostel','resort','flight','accommodation','lodging'],'trait':'avg_ticket_size','value':'large','weight':0.85},{'keywords':['messenger'],'trait':'communication_heavy','value':!![],'weight':0.8}];export const DEFAULT_TRAITS={'has_logistics':![],'communication_heavy':![],'pure_digital':![],'long_cycle':![],'deposit_required':![],'multi_tier_allocation':![],'regulatory_intensity':'low','trust_sensitivity':'medium','consumption_frequency':'occasional','avg_ticket_size':'small'};export function inferTraitsFromDescription(a){const b=(a??'')['toLowerCase'](),c=[],d=new Map(),e=new Map();for(const i of TRAIT_INFERENCE_RULES){const j=i['keywords']['find'](l=>b['includes'](l['toLowerCase']()));if(j){c['push'](j);const l=d['get'](i['trait'])??0x0;i['weight']>l&&(d['set'](i['trait'],i['weight']),e['set'](i['trait'],i['value']));}}const f={...DEFAULT_TRAITS};for(const [m,n]of e['entries']()){f[m]=n;}const g=d['size'],h=Math['min'](0x1,g/0xa);return{'traits':f,'confidence':h,'matched_keywords':Array['from'](new Set(c)),'trait_confidence':Object['fromEntries'](d)};}export const ENUM_TRAIT_SCALES={'regulatory_intensity':['low','medium','high'],'trust_sensitivity':['low','medium','high'],'consumption_frequency':['one_time','occasional','frequent'],'avg_ticket_size':['micro','small','medium','large']};export const BOOLEAN_TRAIT_KEYS=['has_logistics','communication_heavy','pure_digital','long_cycle','deposit_required','multi_tier_allocation'];const ENUM_TRAIT_KEYS=['regulatory_intensity','trust_sensitivity','consumption_frequency','avg_ticket_size'];export const EVIDENCE_THRESHOLD=0.5;export const INDUSTRY_REQUIRED_TRAITS={'subscription':[{'trait':'pure_digital','value':!![],'reason':'subscription\x20build\x20notes:\x20\x27Pure\x20digital\x20—\x20native\x20WoWok\x20soil\x27'}],'retail':[{'trait':'has_logistics','value':!![],'reason':'retail\x20fulfilment\x20is\x20physical\x20shipping'}],'retail_d2c':[{'trait':'has_logistics','value':!![],'reason':'retail_d2c\x20fulfilment\x20is\x20physical\x20shipping'}],'rental':[{'trait':'deposit_required','value':!![],'reason':'rental\x20without\x20a\x20deposit\x20is\x20not\x20the\x20rental\x20model'}],'travel':[{'trait':'has_logistics','value':!![],'reason':'travel\x20fulfilment\x20happens\x20at\x20a\x20physical\x20destination'},{'trait':'multi_tier_allocation','value':!![],'reason':'travel\x20splits\x20guest\x20/\x20property\x20/\x20payment\x20legs'}],'education':[{'trait':'long_cycle','value':!![],'reason':'education\x20delivers\x20over\x20a\x20course/term\x20cycle'}],'freelance':[{'trait':'communication_heavy','value':!![],'reason':'freelance\x20is\x20requirement-confirmation\x20driven'}],'licensing':[{'trait':'pure_digital','value':!![],'reason':'a\x20license\x20grant\x20is\x20a\x20digital\x20right,\x20no\x20physical\x20fulfilment\x20leg'},{'trait':'multi_tier_allocation','value':!![],'reason':'licensing\x20splits\x20proceeds\x20across\x20rights-holders\x20—\x20the\x20royalty\x20waterfall\x20is\x20the\x20defining\x20structure'}],'crowdfunding':[{'trait':'deposit_required','value':!![],'reason':'each\x20contribution\x20is\x20escrowed\x20and\x20locked\x20until\x20the\x20deadline\x20—\x20funds-in-escrow\x20is\x20the\x20defining\x20structure'},{'trait':'multi_tier_allocation','value':!![],'reason':'settlement\x20is\x20a\x20two-leg\x20allocation\x20(release-to-project\x20XOR\x20per-contributor\x20refund)\x20—\x20the\x20split\x20decision\x20is\x20the\x20defining\x20structure'}],'general':[]};export function traitContradictions(a,b,c){const d=INDUSTRY_REQUIRED_TRAITS[a];if(!d||d['length']===0x0)return[];const e=[];for(const f of d){const g=b[f['trait']],h=typeof f['value']==='boolean'?g!==f['value']:g!==f['value'];if(!h)continue;const i=c?.[f['trait']];if(c&&(i===undefined||i<EVIDENCE_THRESHOLD))continue;e['push'](f);}return e;}export function filterConsistentIndustries(a,b,c){const d=[],e=[];for(const f of a){const g=traitContradictions(f['industry'],b,c);if(g['length']>0x0)e['push']({'industry':f['industry'],'contradictions':g});else d['push'](f);}return{'consistent':d,'inconsistent':e};}export const DOMAIN_PRIORS=[{'domain':'travel_accommodation','keywords':['hotel','hostel','apartment','resort','flight','ticket','itinerary','reservation','booking','check-in','checkin','checkout','check-out','stay','room','property','vacation','travel','trip','ota','accommodation','lodging','bnb','homestay','shortstay','short-stay'],'industries':['travel','rental'],'boost':0.15}];export function detectDomainPriors(a){const b=(a??'')['toLowerCase'](),c=[];for(const d of DOMAIN_PRIORS){const e=d['keywords']['filter'](f=>b['includes'](f['toLowerCase']()));if(e['length']===0x0)continue;c['push']({'domain':d['domain'],'matched_keywords':Array['from'](new Set(e)),'industries':[...d['industries']],'boost':d['boost']});}return c;}function dimAffinity(c,d,e){if(d===e)return 0x1;const f=ENUM_TRAIT_SCALES[c];if(!f)return 0x0;const g=f['indexOf'](String(d)),h=f['indexOf'](String(e));if(g<0x0||h<0x0)return 0x0;const i=f['length']-0x1;return Math['max'](0x0,0x1-Math['abs'](g-h)/ i);}const REQUIREMENT_SUPPORT_WEIGHT=0.25;export function requirementSupport(a,b,c){const d=INDUSTRY_REQUIRED_TRAITS[a];if(!d||d['length']===0x0)return undefined;let e=0x0;for(const f of d){const g=c?.[f['trait']];if(c&&(g===undefined||g<EVIDENCE_THRESHOLD)){e+=0.5;continue;}e+=b[f['trait']]===f['value']?0x1:0x0;}return e/d['length'];}export function findSimilarIndustries(a,b,d){const e=listIndustries(),f=[],g=d?.['trait_confidence'],h=[...BOOLEAN_TRAIT_KEYS,...ENUM_TRAIT_KEYS];for(const i of e){const j=i['traits'];let l=0x0;const m=[],n=[],o=[];for(const s of h){const t=dimAffinity(s,a[s],j[s]),u=g?.[s],v=g===undefined||u!==undefined&&u>=EVIDENCE_THRESHOLD;if(v){o['push'](s);if(t===0x1)m['push'](s);else n['push'](s);}l+=v?t:0.5;}const p=l/h['length'],q=requirementSupport(i['name'],a,d?.['trait_confidence']),r=q===undefined?p:p+REQUIREMENT_SUPPORT_WEIGHT*q;f['push']({'industry':i['name'],'similarity':r,'matched_traits':m,'contradicted_traits':n,'evidenced_traits':o,'trait_distance':Number((0x1-r)['toFixed'](0x4)),...q===undefined?{}:{'requirement_support':Number(q['toFixed'](0x4))}});}return f['sort']((w,x)=>x['similarity']-w['similarity']),typeof b==='number'?f['slice'](0x0,Math['max'](0x0,b)):f;}const FALLBACK_RISK_CHECK_RULES=[{'trait_key':'deposit_required','trait_value':!![],'check':{'id':'fb_deposit_lock','description':'Deposit\x20lock-period\x20safety\x20(deposit\x20cannot\x20be\x20withdrawn\x20by\x20merchant\x20at\x20any\x20time)','weight':0x1e,'passed':a=>a?.['fund_safety']?.['lock_duration_safe']??![],'advice':'⚠️\x20Lock\x20period\x20unsafe:\x20deposit\x20may\x20be\x20withdrawn\x20at\x20any\x20time;\x20recommend\x20requiring\x20a\x20lock\x20period\x20≥\x207\x20days.'},'need':{'id':'need_deposit_lock','tier':'personalized','description':'Deposit\x20lock-period\x20safety','satisfied':a=>a?.['fund_safety']?.['lock_duration_safe']??![],'advice':'Deposit\x20lock-period\x20unsafe.'}},{'trait_key':'has_logistics','trait_value':!![],'check':{'id':'fb_logistics_track','description':'Logistics\x20Guard\x20configuration\x20(shipping/receipt\x20verification)','weight':0x19,'passed':a=>a?.['workflow_analysis']?.['has_milestone_nodes']??![],'advice':'⚠️\x20No\x20logistics\x20Guard:\x20shipping\x20and\x20receipt\x20status\x20are\x20not\x20verified\x20by\x20a\x20third\x20party.'}},{'trait_key':'pure_digital','trait_value':!![],'check':{'id':'fb_wip_verified','description':'WIP\x20hash\x20verification\x20(digital\x20deliverables\x20traceable)','weight':0x19,'passed':a=>a?.['service_basics']?.['wip_verified']===!![],'advice':'⚠️\x20WIP\x20not\x20verified:\x20digital\x20deliverables\x20cannot\x20be\x20traced.'}},{'trait_key':'long_cycle','trait_value':!![],'check':{'id':'fb_milestone','description':'Milestone\x20nodes\x20(phased\x20acceptance)','weight':0x19,'passed':a=>a?.['workflow_analysis']?.['has_milestone_nodes']??![],'advice':'⚠️\x20No\x20milestone\x20nodes:\x20long-cycle\x20projects\x20lack\x20phased\x20acceptance.'}},{'trait_key':'regulatory_intensity','trait_value':'high','check':{'id':'fb_compliance','description':'Compliance\x20configuration\x20(arbitration\x20+\x20compensation\x20fund)','weight':0x1e,'passed':a=>(a?.['workflow_analysis']?.['has_arbitration_path']??![])&&(a?.['service_basics']?.['compensation_fund_balance']??0x0n)>0x0n,'advice':'🔴\x20Compliance\x20requirement\x20not\x20met:\x20highly\x20regulated\x20industries\x20must\x20configure\x20arbitration\x20and\x20a\x20compensation\x20fund.'}},{'trait_key':'multi_tier_allocation','trait_value':!![],'check':{'id':'fb_multi_tier_fair','description':'Multi-tier\x20allocation\x20fairness\x20(each\x20segment\x20has\x20a\x20corresponding\x20Allocator)','weight':0x14,'passed':a=>(a?.['workflow_analysis']?.['total_nodes']??0x0)>=0x3,'advice':'⚠️\x20Multi-tier\x20allocation\x20requires\x20corresponding\x20nodes\x20and\x20Allocators,\x20otherwise\x20fund\x20distribution\x20is\x20opaque.'}}];function buildFallbackFlywheel(a,b){const c=['Fund\x20escrow\x20+\x20process\x20transparency'];if(b['deposit_required'])c['push']('Deposit\x20escrow\x20+\x20lock-period\x20guarantee');if(b['has_logistics'])c['push']('Logistics\x20Guard\x20verification');if(b['pure_digital'])c['push']('WIP\x20digital\x20deliverable\x20traceability');if(b['regulatory_intensity']==='high')c['push']('Compliant\x20arbitration\x20+\x20compensation\x20fund\x20guarantee');const d=[{'action':'Set\x20first-order\x20Reward','purpose':'Attract\x20new\x20customers','mutableField':'rewards','metricToWatch':'New\x20customer\x20order\x20rate'},{'action':'Configure\x20compensation_fund','purpose':'Improve\x20trust\x20score','mutableField':'compensation_fund','metricToWatch':'Trust\x20score'}];return b['long_cycle']&&d['push']({'action':'Milestone\x20Reward','purpose':'Incentivize\x20completion\x20of\x20long-cycle\x20projects','mutableField':'rewards','metricToWatch':'Completion\x20rate'}),b['consumption_frequency']==='frequent'&&d['push']({'action':'Loyalty\x20Reward','purpose':'Improve\x20repurchase','mutableField':'rewards','metricToWatch':'Repurchase\x20rate'}),{'industry':a,'trustSellingPoints':c,'keyActions':d,'rewardStrategy':'First-order\x20reward\x20+\x20referral\x20cashback'+(b['consumption_frequency']==='frequent'?'\x20+\x20loyalty\x20reward':''),'discountStrategy':b['long_cycle']?'Long-term\x20cooperation\x20discount\x20+\x20tiered\x20discount':'First-order\x20discount\x20+\x20spend-threshold\x20discount','trustDescription':c['join']('\x20+\x20')};}function buildFallbackPreferenceTemplate(a){return{'max_acceptable_cycle':a['long_cycle']?0x5a:0xe,'response_time_expectation':a['communication_heavy']?0x4:0xc,'require_arbitration':a['regulatory_intensity']!=='low'||a['trust_sensitivity']==='high','require_compensation_fund':a['trust_sensitivity']==='high'||a['deposit_required'],'risk_appetite':a['trust_sensitivity']==='high'?'conservative':'balanced','delivery_speed_priority':a['has_logistics']&&a['consumption_frequency']==='frequent'?'urgent':'normal','after_sales_expectation':a['trust_sensitivity']==='high'?'full':'basic'};}export function synthesizeProfile(a,b){const c=findSimilarIndustries(a,0x1),d=c[0x0],e=d&&d['similarity']>=0.6?getIndustryProfile(d['industry']):undefined,f=b??'custom_'+Date['now']()['toString'](0x24),g=b??'Custom\x20Industry',h=e?{...e['flywheel'],'industry':f}:buildFallbackFlywheel(f,a),i=e?{...e['preference_template'],'max_acceptable_cycle':a['long_cycle']?Math['max'](e['preference_template']['max_acceptable_cycle'],0x5a):e['preference_template']['max_acceptable_cycle'],'require_compensation_fund':a['trust_sensitivity']==='high'?!![]:e['preference_template']['require_compensation_fund']}:buildFallbackPreferenceTemplate(a),j=[],k=[];for(const l of FALLBACK_RISK_CHECK_RULES){a[l['trait_key']]===l['trait_value']&&(j['push']({...l['check'],'industry':f}),l['need']&&k['push']({...l['need']}));}return j['length']===0x0&&j['push']({'id':'fb_basic_arbitration','industry':f,'description':'Configure\x20arbitration\x20(basic\x20dispute\x20resolution)','weight':0x64,'passed':m=>m?.['workflow_analysis']?.['has_arbitration_path']??![],'advice':'⚠️\x20No\x20arbitration\x20configured:\x20basic\x20disputes\x20have\x20no\x20resolution\x20channel.'}),{'name':f,'display_name':g,'traits':a,'source':'inferred','version':'v1','flywheel':h,'risk_checks':j,'preference_template':i,'needs':k,'confidence':d?.['similarity']??0.3,'evolution':{'version':0x1,'last_updated':Date['now'](),'signal_count':0x0,'pending_suggestions':0x0}};}export function composeIndustries(a,b){if(!a||a['length']===0x0)return undefined;const d=[];for(const o of a){const q=getIndustryProfile(o);if(!q)return undefined;d['push'](q);}const e={'has_logistics':d['some'](r=>r['traits']['has_logistics']),'communication_heavy':d['some'](r=>r['traits']['communication_heavy']),'pure_digital':d['every'](r=>r['traits']['pure_digital']),'long_cycle':d['some'](r=>r['traits']['long_cycle']),'deposit_required':d['some'](r=>r['traits']['deposit_required']),'multi_tier_allocation':d['some'](r=>r['traits']['multi_tier_allocation']),'regulatory_intensity':pickStrictest(d['map'](r=>r['traits']['regulatory_intensity']),['low','medium','high']),'trust_sensitivity':pickStrictest(d['map'](r=>r['traits']['trust_sensitivity']),['low','medium','high']),'consumption_frequency':pickStrictest(d['map'](r=>r['traits']['consumption_frequency']),['one_time','occasional','frequent']),'avg_ticket_size':pickStrictest(d['map'](r=>r['traits']['avg_ticket_size']),['micro','small','medium','large'])},f=b??'composed_'+a['join']('_and_'),g=Array['from'](new Set(d['flatMap'](r=>r['flywheel']['trustSellingPoints']))),h=Array['from'](new Set(d['flatMap'](r=>r['flywheel']['keyActions']))),i={'industry':f,'trustSellingPoints':g,'keyActions':h,'rewardStrategy':d['map'](r=>r['flywheel']['rewardStrategy'])['join']('\x20+\x20'),'discountStrategy':d['map'](r=>r['flywheel']['discountStrategy'])['join']('\x20+\x20'),'trustDescription':d['map'](r=>r['flywheel']['trustDescription'])['join']('\x20+\x20')},j=new Map();for(const r of d){for(const s of r['risk_checks']){!j['has'](s['id'])&&j['set'](s['id'],{...s,'industry':f});}}const k=new Map();for(const t of d){for(const u of t['needs']){!k['has'](u['id'])&&k['set'](u['id'],{...u});}}const l={'max_acceptable_cycle':Math['max'](...d['map'](v=>v['preference_template']['max_acceptable_cycle'])),'response_time_expectation':Math['min'](...d['map'](v=>v['preference_template']['response_time_expectation'])),'require_arbitration':d['some'](v=>v['preference_template']['require_arbitration']),'require_compensation_fund':d['some'](v=>v['preference_template']['require_compensation_fund']),'risk_appetite':pickStrictest(d['map'](v=>v['preference_template']['risk_appetite']),['aggressive','balanced','conservative']),'delivery_speed_priority':pickStrictest(d['map'](v=>v['preference_template']['delivery_speed_priority']),['flexible','normal','urgent']),'after_sales_expectation':pickStrictest(d['map'](v=>v['preference_template']['after_sales_expectation']),['minimal','basic','full'])},m={'name':f,'display_name':b??'Composed\x20Industry\x20('+a['join']('+')+')','traits':e,'source':'composed','version':'v1','flywheel':i,'risk_checks':Array['from'](j['values']()),'preference_template':l,'needs':Array['from'](k['values']()),'parent_industries':[...a],'evolution':{'version':0x1,'last_updated':Date['now'](),'signal_count':0x0,'pending_suggestions':0x0}};return registerIndustry(m),m;}function pickStrictest(a,b){let c=0x0,d=a[0x0]??b[0x0];for(const e of a){const f=b['indexOf'](e);f>=0x0&&f>c&&(c=f,d=e);}return d;}
@@ -0,0 +1,113 @@
1
+ import { z } from "zod";
2
+ import { type DomainPriorMatch, type TraitInferenceResult } from "./industry-generalizer.js";
3
+ import type { IndustryTraits } from "./industry-registry.js";
4
+ export declare const SEMANTIC_IR_SCHEMA_VERSION: 1;
5
+ export declare const TRAIT_KEYS: Array<keyof IndustryTraits>;
6
+ export declare const SEMANTIC_CLAIM_KEYS: readonly ["reward_pool_amount"];
7
+ export type SemanticClaimKey = (typeof SEMANTIC_CLAIM_KEYS)[number];
8
+ export declare const SemanticIRInputSchema: z.ZodObject<{
9
+ schema_version: z.ZodLiteral<1>;
10
+ locale: z.ZodString;
11
+ traits: z.ZodOptional<z.ZodArray<z.ZodObject<{
12
+ trait: z.ZodString;
13
+ value: z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>;
14
+ confidence: z.ZodNumber;
15
+ span: z.ZodOptional<z.ZodObject<{
16
+ start: z.ZodNumber;
17
+ end: z.ZodNumber;
18
+ }, z.core.$strict>>;
19
+ quote: z.ZodOptional<z.ZodString>;
20
+ }, z.core.$strict>>>;
21
+ domains: z.ZodOptional<z.ZodArray<z.ZodObject<{
22
+ domain: z.ZodString;
23
+ confidence: z.ZodOptional<z.ZodNumber>;
24
+ span: z.ZodOptional<z.ZodObject<{
25
+ start: z.ZodNumber;
26
+ end: z.ZodNumber;
27
+ }, z.core.$strict>>;
28
+ quote: z.ZodOptional<z.ZodString>;
29
+ }, z.core.$strict>>>;
30
+ claims: z.ZodOptional<z.ZodArray<z.ZodObject<{
31
+ key: z.ZodString;
32
+ value: z.ZodNumber;
33
+ confidence: z.ZodOptional<z.ZodNumber>;
34
+ span: z.ZodOptional<z.ZodObject<{
35
+ start: z.ZodNumber;
36
+ end: z.ZodNumber;
37
+ }, z.core.$strict>>;
38
+ quote: z.ZodOptional<z.ZodString>;
39
+ }, z.core.$strict>>>;
40
+ provenance: z.ZodObject<{
41
+ source: z.ZodEnum<{
42
+ human: "human";
43
+ caller_llm: "caller_llm";
44
+ }>;
45
+ model: z.ZodOptional<z.ZodString>;
46
+ prompt_version: z.ZodOptional<z.ZodString>;
47
+ generated_at: z.ZodOptional<z.ZodNumber>;
48
+ }, z.core.$strict>;
49
+ }, z.core.$strict>;
50
+ export type SemanticIRInput = z.infer<typeof SemanticIRInputSchema>;
51
+ export interface SemanticIRTraitEvidence {
52
+ trait: keyof IndustryTraits;
53
+ value: boolean | string;
54
+ confidence: number;
55
+ span?: {
56
+ start: number;
57
+ end: number;
58
+ };
59
+ quote?: string;
60
+ }
61
+ export interface SemanticIRDomainEvidence {
62
+ domain: string;
63
+ confidence: number;
64
+ span?: {
65
+ start: number;
66
+ end: number;
67
+ };
68
+ quote?: string;
69
+ }
70
+ export interface SemanticIRClaim {
71
+ key: SemanticClaimKey;
72
+ value: number;
73
+ confidence: number;
74
+ span?: {
75
+ start: number;
76
+ end: number;
77
+ };
78
+ quote?: string;
79
+ }
80
+ export interface CanonicalSemanticIR {
81
+ schema_version: typeof SEMANTIC_IR_SCHEMA_VERSION;
82
+ locale: string;
83
+ traits: SemanticIRTraitEvidence[];
84
+ domains: SemanticIRDomainEvidence[];
85
+ claims: SemanticIRClaim[];
86
+ provenance: {
87
+ source: "caller_llm" | "human";
88
+ model?: string;
89
+ prompt_version?: string;
90
+ generated_at?: number;
91
+ };
92
+ }
93
+ export interface NormalizedSemanticIR {
94
+ ir: CanonicalSemanticIR;
95
+ digest: string;
96
+ issues: string[];
97
+ }
98
+ export declare function semanticIrDigest(ir: CanonicalSemanticIR): string;
99
+ export declare function normalizeSemanticIR(raw: unknown): NormalizedSemanticIR;
100
+ export declare function claimNumber(ir: CanonicalSemanticIR, key: SemanticClaimKey): number | undefined;
101
+ export interface SemanticIRConflict {
102
+ trait: string;
103
+ keyword_value: boolean | string;
104
+ keyword_confidence: number;
105
+ ir_value: boolean | string;
106
+ ir_confidence: number;
107
+ }
108
+ export interface MergedTraitInference extends TraitInferenceResult {
109
+ conflicts: SemanticIRConflict[];
110
+ }
111
+ export declare function mergeSemanticIR(base: TraitInferenceResult, ir: CanonicalSemanticIR): MergedTraitInference;
112
+ export declare function domainPriorsFromIR(ir: CanonicalSemanticIR): DomainPriorMatch[];
113
+ export declare function mergeDomainPriors(keywordPriors: DomainPriorMatch[], irPriors: DomainPriorMatch[]): DomainPriorMatch[];
@@ -0,0 +1 @@
1
+ import{createHash}from'node:crypto';import{z}from'zod';import{BOOLEAN_TRAIT_KEYS,DOMAIN_PRIORS,ENUM_TRAIT_SCALES,EVIDENCE_THRESHOLD}from'./industry-generalizer.js';export const SEMANTIC_IR_SCHEMA_VERSION=0x1;export const TRAIT_KEYS=[...BOOLEAN_TRAIT_KEYS,...Object['keys'](ENUM_TRAIT_SCALES)];export const SEMANTIC_CLAIM_KEYS=['reward_pool_amount'];const SpanSchema=z['object']({'start':z['number']()['int']()['nonnegative'](),'end':z['number']()['int']()['nonnegative']()})['strict'](),TraitEvidenceSchema=z['object']({'trait':z['string']()['max'](0x40),'value':z['union']([z['boolean'](),z['string']()['max'](0x20)]),'confidence':z['number'](),'span':SpanSchema['optional'](),'quote':z['string']()['max'](0x12c)['optional']()})['strict'](),DomainEvidenceSchema=z['object']({'domain':z['string']()['max'](0x40),'confidence':z['number']()['optional'](),'span':SpanSchema['optional'](),'quote':z['string']()['max'](0x12c)['optional']()})['strict'](),ClaimEvidenceSchema=z['object']({'key':z['string']()['max'](0x40),'value':z['number'](),'confidence':z['number']()['optional'](),'span':SpanSchema['optional'](),'quote':z['string']()['max'](0x12c)['optional']()})['strict'](),ProvenanceSchema=z['object']({'source':z['enum'](['caller_llm','human']),'model':z['string']()['max'](0x78)['optional'](),'prompt_version':z['string']()['max'](0x3c)['optional'](),'generated_at':z['number']()['int']()['nonnegative']()['optional']()})['strict']();export const SemanticIRInputSchema=z['object']({'schema_version':z['literal'](SEMANTIC_IR_SCHEMA_VERSION),'locale':z['string']()['min'](0x2)['max'](0x23),'traits':z['array'](TraitEvidenceSchema)['max'](0x14)['optional'](),'domains':z['array'](DomainEvidenceSchema)['max'](0xa)['optional'](),'claims':z['array'](ClaimEvidenceSchema)['max'](0xa)['optional'](),'provenance':ProvenanceSchema})['strict']();export function semanticIrDigest(a){return createHash('sha256')['update'](JSON['stringify'](a))['digest']('hex');}function traitOrder(a){return TRAIT_KEYS['indexOf'](a);}export function normalizeSemanticIR(a){const b=SemanticIRInputSchema['safeParse'](a);if(!b['success']){const q=b['error']['issues']['map'](r=>(r['path']['length']>0x0?r['path']['join']('.'):'(root)')+':\x20'+r['message'])['join'](';\x20');throw new Error('semantic_ir\x20rejected:\x20'+q);}const e=[],f=[];for(const r of b['data']['traits']??[]){if(!TRAIT_KEYS['includes'](r['trait'])){e['push']('unknown\x20trait\x20\x27'+r['trait']+'\x27\x20ignored\x20(vocabulary:\x20'+TRAIT_KEYS['join'](',\x20')+')');continue;}const s=r['trait'],t=BOOLEAN_TRAIT_KEYS['includes'](s);if(t){if(typeof r['value']!=='boolean'){e['push']('trait\x20\x27'+s+'\x27\x20is\x20boolean;\x20value\x20\x27'+String(r['value'])+'\x27\x20ignored');continue;}}else{const x=ENUM_TRAIT_SCALES[s];if(!x||typeof r['value']!=='string'||!x['includes'](r['value'])){e['push']('trait\x20\x27'+s+'\x27\x20expects\x20one\x20of\x20['+(x??[])['join'](',\x20')+'];\x20'+('value\x20\x27'+String(r['value'])+'\x27\x20ignored'));continue;}}if(!Number['isFinite'](r['confidence'])){e['push']('trait\x20\x27'+s+'\x27\x20confidence\x20is\x20not\x20finite;\x20evidence\x20ignored');continue;}const u=Math['max'](0x0,Math['min'](0x1,r['confidence']));u!==r['confidence']&&e['push']('trait\x20\x27'+s+'\x27\x20confidence\x20'+r['confidence']+'\x20clamped\x20to\x20'+u);u<EVIDENCE_THRESHOLD&&e['push']('trait\x20\x27'+s+'\x27\x20confidence\x20'+u+'\x20is\x20below\x20the\x20evidence\x20threshold\x20'+(EVIDENCE_THRESHOLD+';\x20recorded\x20but\x20not\x20applied'));let v;r['span']&&(r['span']['end']<r['span']['start']?e['push']('trait\x20\x27'+s+'\x27\x20span\x20has\x20end\x20<\x20start;\x20span\x20dropped'):v={'start':r['span']['start'],'end':r['span']['end']});const w={'trait':s,'value':r['value'],'confidence':u};if(v)w['span']=v;if(r['quote']!==undefined)w['quote']=r['quote'];f['push'](w);}f['sort']((y,A)=>{const B=traitOrder(y['trait'])-traitOrder(A['trait']);if(B!==0x0)return B;if(A['confidence']!==y['confidence'])return A['confidence']-y['confidence'];return JSON['stringify'](y['value'])['localeCompare'](JSON['stringify'](A['value']));});const g=[],h=new Map();for(const y of f){const A=h['get'](y['trait']);if(!A){h['set'](y['trait'],y),g['push'](y);continue;}A['value']!==y['value']&&e['push']('conflicting\x20evidence\x20for\x20\x27'+y['trait']+'\x27:\x20'+('kept\x20\x27'+String(A['value'])+'\x27\x20(confidence\x20'+A['confidence']+')\x20over\x20')+('\x27'+String(y['value'])+'\x27\x20(confidence\x20'+y['confidence']+')'));}const i=[];for(const B of b['data']['domains']??[]){if(!DOMAIN_PRIORS['some'](F=>F['domain']===B['domain'])){e['push']('unknown\x20domain\x20\x27'+B['domain']+'\x27\x20ignored\x20(vocabulary:\x20'+DOMAIN_PRIORS['map'](F=>F['domain'])['join'](',\x20')+')');continue;}const C=B['confidence']??0x1;if(!Number['isFinite'](C)){e['push']('domain\x20\x27'+B['domain']+'\x27\x20confidence\x20is\x20not\x20finite;\x20evidence\x20ignored');continue;}const D=Math['max'](0x0,Math['min'](0x1,C));D!==C&&e['push']('domain\x20\x27'+B['domain']+'\x27\x20confidence\x20'+C+'\x20clamped\x20to\x20'+D);D<EVIDENCE_THRESHOLD&&e['push']('domain\x20\x27'+B['domain']+'\x27\x20confidence\x20'+D+'\x20is\x20below\x20the\x20evidence\x20threshold\x20'+(EVIDENCE_THRESHOLD+';\x20recorded\x20but\x20not\x20applied'));const E={'domain':B['domain'],'confidence':D};if(B['span']&&B['span']['end']>=B['span']['start'])E['span']={'start':B['span']['start'],'end':B['span']['end']};else{if(B['span'])e['push']('domain\x20\x27'+B['domain']+'\x27\x20span\x20has\x20end\x20<\x20start;\x20span\x20dropped');}if(B['quote']!==undefined)E['quote']=B['quote'];i['push'](E);}i['sort']((F,G)=>{if(G['confidence']!==F['confidence'])return G['confidence']-F['confidence'];return F['domain']['localeCompare'](G['domain']);});const j=[],k=new Set();for(const F of i){if(k['has'](F['domain']))continue;k['add'](F['domain']),j['push'](F);}const l=[];for(const G of b['data']['claims']??[]){if(!SEMANTIC_CLAIM_KEYS['includes'](G['key'])){e['push']('unknown\x20claim\x20\x27'+G['key']+'\x27\x20ignored\x20(vocabulary:\x20'+SEMANTIC_CLAIM_KEYS['join'](',\x20')+')');continue;}const H=G['key'];if(!Number['isFinite'](G['value'])){e['push']('claim\x20\x27'+H+'\x27\x20value\x20is\x20not\x20finite;\x20ignored');continue;}if(G['value']<0x0){e['push']('claim\x20\x27'+H+'\x27\x20value\x20'+G['value']+'\x20is\x20negative;\x20ignored');continue;}const I=G['confidence']??0x1;if(!Number['isFinite'](I)){e['push']('claim\x20\x27'+H+'\x27\x20confidence\x20is\x20not\x20finite;\x20claim\x20ignored');continue;}const J=Math['max'](0x0,Math['min'](0x1,I));J!==I&&e['push']('claim\x20\x27'+H+'\x27\x20confidence\x20'+I+'\x20clamped\x20to\x20'+J);J<EVIDENCE_THRESHOLD&&e['push']('claim\x20\x27'+H+'\x27\x20confidence\x20'+J+'\x20is\x20below\x20the\x20evidence\x20threshold\x20'+(EVIDENCE_THRESHOLD+';\x20recorded\x20but\x20not\x20applied'));const K={'key':H,'value':G['value'],'confidence':J};G['span']&&(G['span']['end']<G['span']['start']?e['push']('claim\x20\x27'+H+'\x27\x20span\x20has\x20end\x20<\x20start;\x20span\x20dropped'):K['span']={'start':G['span']['start'],'end':G['span']['end']});if(G['quote']!==undefined)K['quote']=G['quote'];l['push'](K);}l['sort']((L,M)=>{if(L['key']!==M['key'])return L['key']<M['key']?-0x1:0x1;return M['confidence']-L['confidence'];});const m=[],n=new Map();for(const L of l){const M=n['get'](L['key']);if(!M){n['set'](L['key'],L),m['push'](L);continue;}M['value']!==L['value']&&e['push']('conflicting\x20evidence\x20for\x20claim\x20\x27'+L['key']+'\x27:\x20'+('kept\x20'+M['value']+'\x20(confidence\x20'+M['confidence']+')\x20over\x20')+(L['value']+'\x20(confidence\x20'+L['confidence']+')'));}g['length']===0x0&&j['length']===0x0&&m['length']===0x0&&e['push']('semantic_ir\x20carries\x20no\x20usable\x20evidence;\x20keyword\x20inference\x20is\x20the\x20only\x20signal');const o={'source':b['data']['provenance']['source']};if(b['data']['provenance']['model']!==undefined)o['model']=b['data']['provenance']['model'];b['data']['provenance']['prompt_version']!==undefined&&(o['prompt_version']=b['data']['provenance']['prompt_version']);b['data']['provenance']['generated_at']!==undefined&&(o['generated_at']=b['data']['provenance']['generated_at']);const p={'schema_version':SEMANTIC_IR_SCHEMA_VERSION,'locale':b['data']['locale'],'traits':g,'domains':j,'claims':m,'provenance':o};return{'ir':p,'digest':semanticIrDigest(p),'issues':e};}export function claimNumber(a,b){const c=a['claims']['find'](d=>d['key']===b&&d['confidence']>=EVIDENCE_THRESHOLD);return c?.['value'];}export function mergeSemanticIR(a,b){const c={...a['traits']},d={...a['trait_confidence']},e=[];for(const h of b['traits']){if(h['confidence']<EVIDENCE_THRESHOLD)continue;const i=a['trait_confidence'][h['trait']],j=a['traits'][h['trait']];i!==undefined&&j!==h['value']?(e['push']({'trait':h['trait'],'keyword_value':j,'keyword_confidence':i,'ir_value':h['value'],'ir_confidence':h['confidence']}),d[h['trait']]=h['confidence']):d[h['trait']]=Math['max'](i??0x0,h['confidence']),c[h['trait']]=h['value'];}const f=Object['values'](d)['filter'](k=>(k??0x0)>=EVIDENCE_THRESHOLD)['length'],g=Math['min'](0x1,Math['max'](a['confidence'],f/TRAIT_KEYS['length']));return{'traits':c,'confidence':g,'matched_keywords':[...a['matched_keywords']],'trait_confidence':d,'conflicts':e};}export function domainPriorsFromIR(a){const b=[];for(const c of a['domains']){if(c['confidence']<EVIDENCE_THRESHOLD)continue;const e=DOMAIN_PRIORS['find'](f=>f['domain']===c['domain']);if(!e)continue;b['push']({'domain':e['domain'],'matched_keywords':[],'industries':[...e['industries']],'boost':e['boost'],'source':'semantic_ir'});}return b;}export function mergeDomainPriors(a,b){const c=new Map();for(const d of a){c['set'](d['domain'],{...d,'source':d['source']??'keyword'});}for(const e of b){const f=c['get'](e['domain']);if(!f){c['set'](e['domain'],e);continue;}c['set'](e['domain'],{...f,'matched_keywords':[...new Set([...f['matched_keywords'],...e['matched_keywords']])],'industries':[...new Set([...f['industries'],...e['industries']])],'boost':Math['max'](f['boost'],e['boost']),'source':'both'});}return Array['from'](c['values']());}