@wowok/agent-mcp 3.0.0 → 3.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. package/dist/communication/evidence.d.ts +6 -0
  2. package/dist/communication/evidence.js +1 -0
  3. package/dist/evaluation/acceptance.d.ts +24 -0
  4. package/dist/evaluation/acceptance.js +1 -0
  5. package/dist/evaluation/builtins/demand-match.d.ts +3 -2
  6. package/dist/evaluation/builtins/demand-match.js +1 -1
  7. package/dist/evaluation/builtins/service-risk.d.ts +2 -1
  8. package/dist/evaluation/builtins/service-risk.js +1 -1
  9. package/dist/evaluation/index.d.ts +1 -0
  10. package/dist/evaluation/index.js +1 -1
  11. package/dist/evaluation/match-operation.d.ts +14 -0
  12. package/dist/evaluation/match-operation.js +1 -0
  13. package/dist/experience/realtime-feedback.js +1 -1
  14. package/dist/extensions/modes.js +1 -1
  15. package/dist/goal/GoalClassifier.js +1 -1
  16. package/dist/goal/GoalEngine.d.ts +8 -0
  17. package/dist/goal/GoalEngine.js +1 -1
  18. package/dist/goal/types.d.ts +1 -1
  19. package/dist/harness/auto-escalation.d.ts +0 -12
  20. package/dist/harness/auto-escalation.js +1 -1
  21. package/dist/harness/index.d.ts +1 -14
  22. package/dist/harness/index.js +1 -1
  23. package/dist/harness/types.d.ts +0 -38
  24. package/dist/intent/types.d.ts +1 -1
  25. package/dist/intent/types.js +1 -1
  26. package/dist/keeper/KeeperScan.d.ts +39 -0
  27. package/dist/keeper/KeeperScan.js +1 -0
  28. package/dist/keeper/KeeperStore.d.ts +43 -0
  29. package/dist/keeper/KeeperStore.js +1 -0
  30. package/dist/keeper/detectors.d.ts +23 -0
  31. package/dist/keeper/detectors.js +1 -0
  32. package/dist/keeper/keeper.spec.d.ts +1 -0
  33. package/dist/keeper/keeper.spec.js +1 -0
  34. package/dist/keeper/types.d.ts +65 -0
  35. package/dist/keeper/types.js +1 -0
  36. package/dist/knowledge/demand-risk.js +1 -1
  37. package/dist/knowledge/event-semantics.d.ts +3 -0
  38. package/dist/knowledge/event-semantics.js +1 -1
  39. package/dist/knowledge/event-semantics.spec.d.ts +1 -0
  40. package/dist/knowledge/event-semantics.spec.js +1 -0
  41. package/dist/knowledge/evidence-review.d.ts +23 -0
  42. package/dist/knowledge/evidence-review.js +1 -1
  43. package/dist/knowledge/examples-scanner-cli.js +1 -1
  44. package/dist/knowledge/examples-scanner.js +1 -1
  45. package/dist/knowledge/guard-bytecode-spec.d.ts +82 -0
  46. package/dist/knowledge/guard-bytecode-spec.js +1 -0
  47. package/dist/knowledge/guard-design-patterns.d.ts +1 -1
  48. package/dist/knowledge/guard-design-patterns.js +1 -1
  49. package/dist/knowledge/index.d.ts +10 -6
  50. package/dist/knowledge/index.js +1 -1
  51. package/dist/knowledge/industry-registry.js +1 -1
  52. package/dist/knowledge/mcp-schema-audit-cli.js +1 -1
  53. package/dist/knowledge/mcp-schema-audit.js +1 -1
  54. package/dist/knowledge/migration-preflight.d.ts +27 -0
  55. package/dist/knowledge/migration-preflight.js +1 -0
  56. package/dist/knowledge/scenario-modes.d.ts +1 -1
  57. package/dist/knowledge/scenario-modes.js +1 -1
  58. package/dist/knowledge/template-registry.js +1 -1
  59. package/dist/knowledge/tools-reference.js +1 -1
  60. package/dist/knowledge/workflow-guidance.d.ts +20 -0
  61. package/dist/knowledge/workflow-guidance.js +1 -1
  62. package/dist/monitor/MonitorLoop.d.ts +1 -0
  63. package/dist/monitor/MonitorLoop.js +1 -1
  64. package/dist/monitor/ScopeResolver.js +1 -1
  65. package/dist/monitor/SuggestionBridge.d.ts +1 -1
  66. package/dist/monitor/SuggestionBridge.js +1 -1
  67. package/dist/monitor/SuggestionBridge.spec.d.ts +1 -0
  68. package/dist/monitor/SuggestionBridge.spec.js +1 -0
  69. package/dist/monitor/normalize.js +1 -1
  70. package/dist/monitor/types.d.ts +0 -1
  71. package/dist/monitor/types.js +1 -1
  72. package/dist/participation/employee-kpi.d.ts +12 -0
  73. package/dist/participation/employee-kpi.js +1 -1
  74. package/dist/participation/employee-kpi.spec.d.ts +1 -0
  75. package/dist/participation/employee-kpi.spec.js +1 -0
  76. package/dist/playbooks/service-build/business-puzzle.js +1 -1
  77. package/dist/playbooks/service-build/mode-actions.d.ts +19 -6
  78. package/dist/playbooks/service-build/mode-actions.js +1 -1
  79. package/dist/playbooks/service-build/relationship-profile.js +1 -1
  80. package/dist/relationship/derivation.d.ts +6 -0
  81. package/dist/relationship/derivation.js +1 -1
  82. package/dist/relationship/derivation.spec.d.ts +1 -0
  83. package/dist/relationship/derivation.spec.js +1 -0
  84. package/dist/role/index.d.ts +2 -2
  85. package/dist/role/index.js +1 -1
  86. package/dist/role/model.d.ts +2 -1
  87. package/dist/role/model.js +1 -1
  88. package/dist/role/types.d.ts +5 -0
  89. package/dist/rules.d.ts +1 -1
  90. package/dist/safety/confirm-gate.js +1 -1
  91. package/dist/schema/call/semantic.js +1 -1
  92. package/dist/schema/common/index.js +1 -1
  93. package/dist/schema/employee/index.d.ts +61 -1
  94. package/dist/schema/employee/index.js +1 -1
  95. package/dist/schema/evaluation/index.d.ts +70 -5
  96. package/dist/schema/evaluation/index.js +1 -1
  97. package/dist/schema/index.d.ts +1 -0
  98. package/dist/schema/index.js +1 -1
  99. package/dist/schema/industry-pack/index.d.ts +43 -7
  100. package/dist/schema/industry-pack/modes.d.ts +42 -6
  101. package/dist/schema/industry-pack/modes.js +1 -1
  102. package/dist/schema/intent-radar/index.d.ts +3 -0
  103. package/dist/schema/intent-radar/index.js +1 -1
  104. package/dist/schema/keeper/index.d.ts +475 -0
  105. package/dist/schema/keeper/index.js +1 -0
  106. package/dist/schema/local/index.js +1 -1
  107. package/dist/schema/messenger/index.d.ts +2 -0
  108. package/dist/schema/messenger/index.js +1 -1
  109. package/dist/schema/operations.d.ts +34 -0
  110. package/dist/schema/query/bi.d.ts +188 -0
  111. package/dist/schema/query/bi.js +1 -1
  112. package/dist/schema/query/index.d.ts +48 -48
  113. package/dist/schema/query/index.js +1 -1
  114. package/dist/schema/schema-query/index.d.ts +2 -11
  115. package/dist/schema/schema-query/index.js +1 -1
  116. package/dist/schema/schema-version.js +1 -1
  117. package/dist/schema/utils/skills-recommendation.js +1 -1
  118. package/dist/schema/watch/index.d.ts +4 -0
  119. package/dist/schema/watch/index.js +1 -1
  120. package/dist/schema-query-impl/index.d.ts +33 -14
  121. package/dist/schema-query-impl/index.js +1 -1
  122. package/dist/schemas/employee_operation.output.json +100 -0
  123. package/dist/schemas/employee_operation.schema.json +148 -5
  124. package/dist/schemas/evaluation_operation.output.json +135 -9
  125. package/dist/schemas/evaluation_operation.schema.json +176 -7
  126. package/dist/schemas/index.json +7 -1
  127. package/dist/schemas/industry_pack_operation.output.json +158 -32
  128. package/dist/schemas/intent_radar.output.json +2 -0
  129. package/dist/schemas/intent_radar.schema.json +1 -0
  130. package/dist/schemas/keeper_operation.output.json +1274 -0
  131. package/dist/schemas/keeper_operation.schema.json +359 -0
  132. package/dist/schemas/messenger_operation.schema.json +8 -0
  133. package/dist/schemas/onchain_events.output.json +55 -11
  134. package/dist/schemas/onchain_events.schema.json +4 -0
  135. package/dist/schemas/onchain_table_data.output.json +59 -0
  136. package/dist/schemas/query_toolkit.output.json +428 -0
  137. package/dist/schemas/query_toolkit.schema.json +59 -0
  138. package/dist/schemas/schema_query.output.json +1 -64
  139. package/dist/schemas/schema_query.schema.json +18 -3
  140. package/dist/schemas/watch_operation.output.json +21 -1
  141. package/dist/task/playbook.js +1 -1
  142. package/dist/task/types.d.ts +1 -1
  143. package/dist/tools/handlers/bridge.js +1 -1
  144. package/dist/tools/handlers/config.js +1 -1
  145. package/dist/tools/handlers/employee.d.ts +6 -0
  146. package/dist/tools/handlers/employee.js +1 -1
  147. package/dist/tools/handlers/employee.spec.d.ts +1 -0
  148. package/dist/tools/handlers/employee.spec.js +1 -0
  149. package/dist/tools/handlers/evaluation.js +1 -1
  150. package/dist/tools/handlers/evaluation.spec.d.ts +1 -0
  151. package/dist/tools/handlers/evaluation.spec.js +1 -0
  152. package/dist/tools/handlers/intent-radar.js +1 -1
  153. package/dist/tools/handlers/keeper.d.ts +12 -0
  154. package/dist/tools/handlers/keeper.js +1 -0
  155. package/dist/tools/handlers/messenger.js +1 -1
  156. package/dist/tools/handlers/onchain.js +1 -1
  157. package/dist/tools/handlers/query.js +1 -1
  158. package/dist/tools/handlers/schema-query.js +1 -1
  159. package/dist/tools/handlers/watch.js +1 -1
  160. package/dist/tools/handlers/workflow.js +1 -1
  161. package/dist/tools/index.js +1 -1
  162. package/dist/tools/registry/agent.d.ts +2 -0
  163. package/dist/tools/registry/agent.js +1 -0
  164. package/dist/tools/registry/bridge.d.ts +2 -0
  165. package/dist/tools/registry/bridge.js +1 -0
  166. package/dist/tools/registry/business.d.ts +2 -0
  167. package/dist/tools/registry/business.js +1 -0
  168. package/dist/tools/registry/config.d.ts +2 -0
  169. package/dist/tools/registry/config.js +1 -0
  170. package/dist/tools/registry/files.d.ts +2 -0
  171. package/dist/tools/registry/files.js +1 -0
  172. package/dist/tools/registry/identity.d.ts +2 -0
  173. package/dist/tools/registry/identity.js +1 -0
  174. package/dist/tools/registry/local.d.ts +2 -0
  175. package/dist/tools/registry/local.js +1 -0
  176. package/dist/tools/registry/messenger.d.ts +2 -0
  177. package/dist/tools/registry/messenger.js +1 -0
  178. package/dist/tools/registry/monitor.d.ts +2 -0
  179. package/dist/tools/registry/monitor.js +1 -0
  180. package/dist/tools/registry/onchain.d.ts +2 -0
  181. package/dist/tools/registry/onchain.js +1 -0
  182. package/dist/tools/registry/query.d.ts +2 -0
  183. package/dist/tools/registry/query.js +1 -0
  184. package/dist/tools/registry/trust.d.ts +2 -0
  185. package/dist/tools/registry/trust.js +1 -0
  186. package/dist/tools/shared.js +1 -1
  187. package/dist/tools/wrap.js +1 -1
  188. package/package.json +2 -2
  189. package/dist/examples/arbitration-dispute-create.json +0 -41
  190. package/dist/examples/arbitration-vote-weighted.json +0 -35
  191. package/dist/examples/arbitration-voting-guard-add.json +0 -38
  192. package/dist/examples/demand-present-service.json +0 -33
  193. package/dist/examples/education-contact-create.json +0 -40
  194. package/dist/examples/freelance-contact-create.json +0 -40
  195. package/dist/examples/gen-passport-verify-guard.json +0 -48
  196. package/dist/examples/guard-template-balance-check.json +0 -59
  197. package/dist/examples/guard-template-time-lock.json +0 -60
  198. package/dist/examples/insurance-guard-claim-timelock.json +0 -75
  199. package/dist/examples/insurance-guard-withdraw-allocation.json +0 -96
  200. package/dist/examples/insurance-machine-create.json +0 -75
  201. package/dist/examples/insurance-service-allocators.json +0 -55
  202. package/dist/examples/machine-multisig-threshold.json +0 -87
  203. package/dist/examples/machine-publish.json +0 -30
  204. package/dist/examples/machine-template-7node-rental.json +0 -119
  205. package/dist/examples/payment-scenario-bound.json +0 -45
  206. package/dist/examples/rental-ziroom-machine-create.json +0 -148
  207. package/dist/examples/rental-ziroom-permission-create.json +0 -41
  208. package/dist/examples/rental-ziroom-service-create.json +0 -36
  209. package/dist/examples/retail-adv-guard-customer-win-create.json +0 -80
  210. package/dist/examples/retail-adv-guard-messenger-proof-create.json +0 -65
  211. package/dist/examples/retail-adv-guard-reward-timeout-create.json +0 -92
  212. package/dist/examples/retail-adv-reward-guard-add.json +0 -51
  213. package/dist/examples/retail-myshop-allocation-activate.json +0 -55
  214. package/dist/examples/retail-myshop-arbitration-create.json +0 -40
  215. package/dist/examples/retail-myshop-contact-create.json +0 -43
  216. package/dist/examples/retail-myshop-order-create.json +0 -56
  217. package/dist/examples/retail-myshop-progress-operate.json +0 -38
  218. package/dist/examples/retail-myshop-reward-create.json +0 -35
  219. package/dist/examples/retail-myshop-service-create.json +0 -38
  220. package/dist/examples/retail-myshop-service-customer-required.json +0 -31
  221. package/dist/examples/service-discount-issue.json +0 -46
  222. package/dist/examples/subscription-contact-create.json +0 -40
  223. package/dist/examples/threebody-guard-create.json +0 -56
  224. package/dist/examples/threebody-machine-create.json +0 -71
  225. package/dist/examples/threebody-permission-create.json +0 -38
  226. package/dist/examples/threebody-service-allocators.json +0 -48
  227. package/dist/examples/travel-guard-time-lock.json +0 -69
  228. package/dist/examples/travel-guard-weather-oracle.json +0 -70
  229. package/dist/examples/travel-machine-create.json +0 -135
  230. package/dist/examples/travel-repository-create.json +0 -47
  231. package/dist/examples/travel-service-create.json +0 -34
  232. package/dist/examples/travel-treasury-create.json +0 -34
  233. package/dist/examples/treasury-deposit.json +0 -37
  234. package/dist/examples/treasury-withdraw.json +0 -38
  235. package/dist/harness/plan.d.ts +0 -33
  236. package/dist/harness/plan.js +0 -1
  237. package/dist/knowledge/demand-matching.d.ts +0 -29
  238. package/dist/knowledge/demand-matching.js +0 -1
  239. package/dist/knowledge/guard-context.d.ts +0 -56
  240. package/dist/knowledge/guard-context.js +0 -1
  241. package/dist/knowledge/guard-migration.d.ts +0 -48
  242. package/dist/knowledge/guard-migration.js +0 -1
  243. package/dist/schemas/guard-node-schema.json +0 -1000
  244. package/dist/task/stage-gate.d.ts +0 -22
  245. package/dist/task/stage-gate.js +0 -1
@@ -1 +1 @@
1
- import{initServicePuzzleFromIntent,initMachinePuzzleFromIntent,initAllocationPuzzleFromIntent,initTreasuryPuzzleFromIntent,initArbitrationPuzzleFromIntent,initRewardPuzzleFromIntent,initProgressPuzzleFromIntent,initOrderPuzzleFromIntent,initPuzzleFromIntent as a284a,checkServicePuzzleCompleteness,checkMachinePuzzleCompleteness,checkAllocationPuzzleCompleteness,checkTreasuryPuzzleCompleteness,checkArbitrationPuzzleCompleteness,checkRewardPuzzleCompleteness,checkProgressPuzzleCompleteness,checkOrderPuzzleCompleteness,checkPuzzleCompleteness as a284b}from'../../knowledge/index.js';import{initPuzzleFromIntent as a284c,checkPuzzleCompleteness as a284d}from'../../knowledge/permission-puzzle.js';const KEYWORD_TABLE=[{'category':'Product/Service','keywords_zh':['product','selling','sell','sales','store','open\x20shop'],'keywords_en':['sell','product','sale','shop','store'],'objects':['service','order','progress'],'required_level':'R','scene_id':'retail'},{'category':'Subscription','keywords_zh':['subscription','cycle','renewal'],'keywords_en':['subscribe','recurring','subscription'],'objects':['service','machine','reward'],'required_level':'C','scene_id':'subscription'},{'category':'Rental','keywords_zh':['rent','lease','return'],'keywords_en':['rent','lease','return'],'objects':['service','machine','arb'],'required_level':'C','scene_id':'rental_return'},{'category':'Trust','keywords_zh':['deposit','pledge','verify','trust'],'keywords_en':['deposit','trust','verify'],'objects':['guard','permission','treasury'],'required_level':'R','scene_id':'trust_deposit'},{'category':'Funds','keywords_zh':['split','collect','share\x20profit','income','incentive'],'keywords_en':['split','revenue','reward'],'objects':['allocation','treasury','reward'],'required_level':'R','scene_id':'revenue_split'},{'category':'Workflow','keywords_zh':['node','stage','process','workflow'],'keywords_en':['workflow','stage','node'],'objects':['machine','progress'],'required_level':'R','scene_id':'workflow'},{'category':'Dispute','keywords_zh':['arbitration','refund','conflict','rights\x20protection'],'keywords_en':['arbitration','refund','dispute'],'objects':['arb','proof'],'required_level':'C','scene_id':'arbitration_dispute'},{'category':'Contact','keywords_zh':['customer\x20service','contact','communication'],'keywords_en':['contact','support','im'],'objects':['contact'],'required_level':'C','scene_id':'contact_im'},{'category':'Data','keywords_zh':['evidence','record','data'],'keywords_en':['evidence','record','data'],'objects':['repository','proof'],'required_level':'C','scene_id':'evidence_record'},{'category':'User\x20Profile','keywords_zh':['personal\x20info','preference','privacy'],'keywords_en':['personal','profile','privacy'],'objects':['personal','contact'],'required_level':'OPTIONAL','scene_id':'user_profile'},{'category':'Demand\x20Submission','keywords_zh':['demand','publish','inquiry'],'keywords_en':['demand','request','inquiry'],'objects':['demand'],'required_level':'OPTIONAL','scene_id':'demand_inquiry'}],INDUSTRY_KEYWORDS=[{'industry':'freelance','words':['freelance','outsourcing','freelance','gig']},{'industry':'rental','words':['rental','lease','rental','rent']},{'industry':'education','words':['education','course','training','education','course']},{'industry':'travel','words':['travel','tour','itinerary','travel','trip']},{'industry':'subscription','words':['subscription','cycle','subscription','recurring']}];function buildPuzzleDispatch(){const a=(c,d)=>{try{return c(d);}catch{return undefined;}},b=(c,d)=>{if(!c)return{'missing':[],'complete':![],'next_step':'init\x20failed'};try{return d(c);}catch{return{'missing':[],'complete':![],'next_step':'check\x20failed'};}};return{'service':{'init':c=>a(initServicePuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkServicePuzzleCompleteness)},'machine':{'init':c=>a(initMachinePuzzleFromIntent,c),'check':c=>b(c,checkMachinePuzzleCompleteness)},'allocation':{'init':c=>a(initAllocationPuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkAllocationPuzzleCompleteness)},'treasury':{'init':c=>a(initTreasuryPuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkTreasuryPuzzleCompleteness)},'arb':{'init':c=>a(initArbitrationPuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkArbitrationPuzzleCompleteness)},'reward':{'init':c=>a(initRewardPuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkRewardPuzzleCompleteness)},'progress':{'init':c=>a(initProgressPuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkProgressPuzzleCompleteness)},'order':{'init':c=>a(initOrderPuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkOrderPuzzleCompleteness)},'permission':{'init':c=>a(a284c,{'primary_goal':c}),'check':c=>b(c,a284d)},'guard':{'init':c=>a(a284a,{'primary_goal':c}),'check':c=>b(c,a284b)}};}export function extractKeywords(a){if(!a||typeof a!=='string')return[];const b=[];for(const c of KEYWORD_TABLE){const d=[...c['keywords_zh'],...c['keywords_en']];for(const e of d){try{const f=new RegExp(escapeRegex(e),'gi'),g=(a['match'](f)||[])['length'];g>0x0&&b['push']({'keyword':e,'category':c['category'],'matched_objects':[...c['objects']],'required_level':c['required_level'],'match_count':g});}catch{}}}return b['sort']((h,i)=>i['match_count']-h['match_count']),b;}function escapeRegex(a){return a['replace'](/[.*+?^${}()|[\]\\]/g,'\x5c$&');}export function resolveIndustry(a,b){const c=((a??'')+'\x20'+(b??''))['toLowerCase']();for(const d of INDUSTRY_KEYWORDS){for(const e of d['words']){if(c['includes'](e['toLowerCase']()))return d['industry'];}}return'general';}export function identifyObjects(a,b){if(b['length']===0x0)return{'primary':'service','secondary':['permission','machine','progress'],'scenes':[{'object':'service','scene_id':'general'}]};const c=b['find'](i=>i['required_level']==='R'),d=(c??b[0x0])['matched_objects'][0x0],e=new Set([d]),f=[];for(const i of b){for(const j of i['matched_objects']){!e['has'](j)&&(e['add'](j),f['push'](j));}}const g=[],h=new Set();for(const k of KEYWORD_TABLE){const l=b['find'](n=>n['category']===k['category']);if(!l)continue;if(h['has'](k['scene_id']))continue;h['add'](k['scene_id']),g['push']({'object':k['objects'][0x0],'scene_id':k['scene_id']});}return{'primary':d,'secondary':f,'scenes':g};}export function analyzeBusinessIntent(a){const b=[];if(!a||!a['user_intent']||typeof a['user_intent']!=='string')return{'intent_parsed':{'primary_object':'service','secondary_objects':[],'detected_scenes':[],'industry':'general','keyword_matches':[]},'puzzles':{},'overall_completeness':'empty','next_step':'Please\x20provide\x20a\x20non-empty\x20business\x20intent.','recommended_creation_order':[],'warnings':['input.user_intent\x20is\x20empty']};const c=a['user_intent'],e=extractKeywords(c),f=resolveIndustry(c,a['industry']),{primary:g,secondary:h,scenes:i}=identifyObjects(c,e);let j=[g,...h];if(a['target_objects']&&a['target_objects']['length']>0x0){const p=a['target_objects']['filter'](q=>['service','machine','guard','permission','reward','arb','progress','treasury','demand','repository','contact','order','allocation','personal','payment','proof']['includes'](q));if(p['length']>0x0)j=p;}const k=buildPuzzleDispatch(),l={};for(const q of j){const r=k[q];if(!r){b['push']('No\x20puzzle\x20module\x20for\x20\x27'+q+'\x27\x20—\x20skipped\x20(L3\x20object)');continue;}const s=r['init'](c),t=s?r['check'](s):undefined,u=extractMissingDimensions(t);l[q]={'puzzle':s,'completeness':t,'missing_dimensions':u},!s&&b['push']('Puzzle\x20init\x20failed\x20for\x20\x27'+q+'\x27');}const m=aggregatePuzzleCompleteness(l),n=suggestNextPuzzleStep({'intent_parsed':{'primary_object':g,'secondary_objects':h,'detected_scenes':i,'industry':f,'keyword_matches':e},'puzzles':l,'overall_completeness':m,'next_step':'','recommended_creation_order':[],'warnings':b}),o=['permission','progress','guard','allocation','machine','service'];return{'intent_parsed':{'primary_object':g,'secondary_objects':h,'detected_scenes':i,'industry':f,'keyword_matches':e},'puzzles':l,'overall_completeness':m,'next_step':n,'recommended_creation_order':o,'warnings':b};}function extractMissingDimensions(a){if(!a||typeof a!=='object')return[];const b=a,d=b['missing'];if(Array['isArray'](d))return d['map'](f=>String(f));const e=b['missing_details'];if(Array['isArray'](e))return e['map'](f=>String(f?.['dimension']??f));return[];}export function aggregatePuzzleCompleteness(a){const b=Object['values'](a??{});if(b['length']===0x0)return'empty';const c=b['filter'](f=>!f['puzzle'])['length'];if(c===b['length'])return'empty';const d=b['reduce']((f,g)=>f+(g['missing_dimensions']?.['length']??0x0),0x0);if(d===0x0)return'complete';return'partial';}export function suggestNextPuzzleStep(a){if(!a)return'No\x20result\x20to\x20suggest\x20from.';if(a['overall_completeness']==='complete')return'All\x20puzzle\x20dimensions\x20are\x20complete\x20—\x20ready\x20for\x20risk\x20calibration\x20(stage\x203).';if(a['overall_completeness']==='empty')return'No\x20puzzle\x20has\x20been\x20initialized.\x20Provide\x20more\x20concrete\x20business\x20intent\x20so\x20the\x20primary\x20object\x20can\x20be\x20identified.';const b=['permission','treasury','allocation','guard','machine','service','order','progress','arb','reward','proof','repository','demand','contact','personal','payment'],d=a['puzzles']??{},e=b['filter'](f=>d[f]);for(const f of e){const g=d[f];if(!g)continue;const h=g['missing_dimensions']??[];if(h['length']===0x0)continue;const i=g['completeness'],j=i&&typeof i==='object'?i['next_step']:undefined;if(typeof j==='string'&&j['trim']())return'['+f+']\x20'+j;return'['+f+']\x20Complete\x20dimension'+(h['length']>0x1?'s':'')+'\x20'+h['join'](',\x20')+'\x20to\x20advance\x20the\x20puzzle.';}return'Continue\x20dialog\x20to\x20fill\x20remaining\x20pending\x20fields.';}
1
+ import{initServicePuzzleFromIntent,initMachinePuzzleFromIntent,initAllocationPuzzleFromIntent,initTreasuryPuzzleFromIntent,initArbitrationPuzzleFromIntent,initRewardPuzzleFromIntent,initProgressPuzzleFromIntent,initOrderPuzzleFromIntent,initPuzzleFromIntent as a293a,checkServicePuzzleCompleteness,checkMachinePuzzleCompleteness,checkAllocationPuzzleCompleteness,checkTreasuryPuzzleCompleteness,checkArbitrationPuzzleCompleteness,checkRewardPuzzleCompleteness,checkProgressPuzzleCompleteness,checkOrderPuzzleCompleteness,checkPuzzleCompleteness as a293b}from'../../knowledge/index.js';import{initPuzzleFromIntent as a293c,checkPuzzleCompleteness as a293d}from'../../knowledge/permission-puzzle.js';const KEYWORD_TABLE=[{'category':'Product/Service','keywords_zh':['product','selling','sell','sales','store','open\x20shop'],'keywords_en':['sell','product','sale','shop','store'],'objects':['service','order','progress'],'required_level':'R','scene_id':'retail'},{'category':'Subscription','keywords_zh':['subscription','cycle','renewal'],'keywords_en':['subscribe','recurring','subscription'],'objects':['service','machine','reward'],'required_level':'C','scene_id':'subscription'},{'category':'Rental','keywords_zh':['rent','lease','return'],'keywords_en':['rent','lease','return'],'objects':['service','machine','arb'],'required_level':'C','scene_id':'rental_return'},{'category':'Trust','keywords_zh':['deposit','pledge','verify','trust'],'keywords_en':['deposit','trust','verify'],'objects':['guard','permission','treasury'],'required_level':'R','scene_id':'trust_deposit'},{'category':'Funds','keywords_zh':['split','collect','share\x20profit','income','incentive'],'keywords_en':['split','revenue','reward'],'objects':['allocation','treasury','reward'],'required_level':'R','scene_id':'revenue_split'},{'category':'Workflow','keywords_zh':['node','stage','process','workflow'],'keywords_en':['workflow','stage','node'],'objects':['machine','progress'],'required_level':'R','scene_id':'workflow'},{'category':'Dispute','keywords_zh':['arbitration','refund','conflict','rights\x20protection'],'keywords_en':['arbitration','refund','dispute'],'objects':['arb','proof'],'required_level':'C','scene_id':'arbitration_dispute'},{'category':'Contact','keywords_zh':['customer\x20service','contact','communication'],'keywords_en':['contact','support','im'],'objects':['contact'],'required_level':'C','scene_id':'contact_im'},{'category':'Data','keywords_zh':['evidence','record','data'],'keywords_en':['evidence','record','data'],'objects':['repository','proof'],'required_level':'C','scene_id':'evidence_record'},{'category':'User\x20Profile','keywords_zh':['personal\x20info','preference','privacy'],'keywords_en':['personal','profile','privacy'],'objects':['personal','contact'],'required_level':'OPTIONAL','scene_id':'user_profile'},{'category':'Demand\x20Submission','keywords_zh':['demand','publish','inquiry'],'keywords_en':['demand','request','inquiry'],'objects':['demand'],'required_level':'OPTIONAL','scene_id':'demand_inquiry'}],INDUSTRY_KEYWORDS=[{'industry':'freelance','words':['freelance','outsourcing','freelance','gig']},{'industry':'rental','words':['rental','lease','rental','rent']},{'industry':'education','words':['education','course','training','education','course']},{'industry':'travel','words':['travel','tour','itinerary','travel','trip']},{'industry':'subscription','words':['subscription','cycle','subscription','recurring']}];function buildPuzzleDispatch(){const a=(c,d)=>{try{return c(d);}catch{return undefined;}},b=(c,d)=>{if(!c)return{'missing':[],'complete':![],'next_step':'init\x20failed'};try{return d(c);}catch{return{'missing':[],'complete':![],'next_step':'check\x20failed'};}};return{'service':{'init':c=>a(initServicePuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkServicePuzzleCompleteness)},'machine':{'init':c=>a(initMachinePuzzleFromIntent,c),'check':c=>b(c,checkMachinePuzzleCompleteness)},'allocation':{'init':c=>a(initAllocationPuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkAllocationPuzzleCompleteness)},'treasury':{'init':c=>a(initTreasuryPuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkTreasuryPuzzleCompleteness)},'arb':{'init':c=>a(initArbitrationPuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkArbitrationPuzzleCompleteness)},'reward':{'init':c=>a(initRewardPuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkRewardPuzzleCompleteness)},'progress':{'init':c=>a(initProgressPuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkProgressPuzzleCompleteness)},'order':{'init':c=>a(initOrderPuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkOrderPuzzleCompleteness)},'permission':{'init':c=>a(a293c,{'primary_goal':c}),'check':c=>b(c,a293d)},'guard':{'init':c=>a(a293a,{'primary_goal':c}),'check':c=>b(c,a293b)}};}export function extractKeywords(a){if(!a||typeof a!=='string')return[];const b=[];for(const c of KEYWORD_TABLE){const d=[...c['keywords_zh'],...c['keywords_en']];for(const e of d){try{const f=new RegExp(escapeRegex(e),'gi'),g=(a['match'](f)||[])['length'];g>0x0&&b['push']({'keyword':e,'category':c['category'],'matched_objects':[...c['objects']],'required_level':c['required_level'],'match_count':g});}catch{}}}return b['sort']((h,i)=>i['match_count']-h['match_count']),b;}function escapeRegex(a){return a['replace'](/[.*+?^${}()|[\]\\]/g,'\x5c$&');}export function resolveIndustry(a,b){const c=((a??'')+'\x20'+(b??''))['toLowerCase']();for(const d of INDUSTRY_KEYWORDS){for(const e of d['words']){if(c['includes'](e['toLowerCase']()))return d['industry'];}}return'general';}export function identifyObjects(a,b){if(b['length']===0x0)return{'primary':'service','secondary':['permission','machine','progress'],'scenes':[{'object':'service','scene_id':'general'}]};const c=b['find'](i=>i['required_level']==='R'),d=(c??b[0x0])['matched_objects'][0x0],e=new Set([d]),f=[];for(const i of b){for(const j of i['matched_objects']){!e['has'](j)&&(e['add'](j),f['push'](j));}}const g=[],h=new Set();for(const k of KEYWORD_TABLE){const l=b['find'](n=>n['category']===k['category']);if(!l)continue;if(h['has'](k['scene_id']))continue;h['add'](k['scene_id']),g['push']({'object':k['objects'][0x0],'scene_id':k['scene_id']});}return{'primary':d,'secondary':f,'scenes':g};}export function analyzeBusinessIntent(a){const b=[];if(!a||!a['user_intent']||typeof a['user_intent']!=='string')return{'intent_parsed':{'primary_object':'service','secondary_objects':[],'detected_scenes':[],'industry':'general','keyword_matches':[]},'puzzles':{},'overall_completeness':'empty','next_step':'Please\x20provide\x20a\x20non-empty\x20business\x20intent.','recommended_creation_order':[],'warnings':['input.user_intent\x20is\x20empty']};const c=a['user_intent'],e=extractKeywords(c),f=resolveIndustry(c,a['industry']),{primary:g,secondary:h,scenes:i}=identifyObjects(c,e);let j=[g,...h];if(a['target_objects']&&a['target_objects']['length']>0x0){const p=a['target_objects']['filter'](q=>['service','machine','guard','permission','reward','arb','progress','treasury','demand','repository','contact','order','allocation','personal','payment','proof']['includes'](q));if(p['length']>0x0)j=p;}const k=buildPuzzleDispatch(),l={};for(const q of j){const r=k[q];if(!r){b['push']('No\x20puzzle\x20module\x20for\x20\x27'+q+'\x27\x20—\x20skipped\x20(L3\x20object)');continue;}const s=r['init'](c),t=s?r['check'](s):undefined,u=extractMissingDimensions(t);l[q]={'puzzle':s,'completeness':t,'missing_dimensions':u},!s&&b['push']('Puzzle\x20init\x20failed\x20for\x20\x27'+q+'\x27');}const m=aggregatePuzzleCompleteness(l),n=suggestNextPuzzleStep({'intent_parsed':{'primary_object':g,'secondary_objects':h,'detected_scenes':i,'industry':f,'keyword_matches':e},'puzzles':l,'overall_completeness':m,'next_step':'','recommended_creation_order':[],'warnings':b}),o=['permission','progress','guard','allocation','machine','service'];return{'intent_parsed':{'primary_object':g,'secondary_objects':h,'detected_scenes':i,'industry':f,'keyword_matches':e},'puzzles':l,'overall_completeness':m,'next_step':n,'recommended_creation_order':o,'warnings':b};}function extractMissingDimensions(a){if(!a||typeof a!=='object')return[];const b=a,d=b['missing'];if(Array['isArray'](d))return d['map'](f=>String(f));const e=b['missing_details'];if(Array['isArray'](e))return e['map'](f=>String(f?.['dimension']??f));return[];}export function aggregatePuzzleCompleteness(a){const b=Object['values'](a??{});if(b['length']===0x0)return'empty';const c=b['filter'](f=>!f['puzzle'])['length'];if(c===b['length'])return'empty';const d=b['reduce']((f,g)=>f+(g['missing_dimensions']?.['length']??0x0),0x0);if(d===0x0)return'complete';return'partial';}export function suggestNextPuzzleStep(a){if(!a)return'No\x20result\x20to\x20suggest\x20from.';if(a['overall_completeness']==='complete')return'All\x20puzzle\x20dimensions\x20are\x20complete\x20—\x20ready\x20for\x20risk\x20calibration\x20(stage\x203).';if(a['overall_completeness']==='empty')return'No\x20puzzle\x20has\x20been\x20initialized.\x20Provide\x20more\x20concrete\x20business\x20intent\x20so\x20the\x20primary\x20object\x20can\x20be\x20identified.';const b=['permission','treasury','allocation','guard','machine','service','order','progress','arb','reward','proof','repository','demand','contact','personal','payment'],d=a['puzzles']??{},e=b['filter'](f=>d[f]);for(const f of e){const g=d[f];if(!g)continue;const h=g['missing_dimensions']??[];if(h['length']===0x0)continue;const i=g['completeness'],j=i&&typeof i==='object'?i['next_step']:undefined;if(typeof j==='string'&&j['trim']())return'['+f+']\x20'+j;return'['+f+']\x20Complete\x20dimension'+(h['length']>0x1?'s':'')+'\x20'+h['join'](',\x20')+'\x20to\x20advance\x20the\x20puzzle.';}return'Continue\x20dialog\x20to\x20fill\x20remaining\x20pending\x20fields.';}
@@ -1,5 +1,6 @@
1
1
  import { type MetricType, type MetricScale, type ConstraintRule, type ConstraintSeverity, type ConstraintViolationAction } from "../../extensions/index.js";
2
2
  import { type InfrastructureLever } from "../../persona/strategy-intent.js";
3
+ import type { LocationSensitivity } from "../../evaluation/location-match.js";
3
4
  export declare const LOCAL_MODE_OWNER = "local";
4
5
  export interface RecommendIndustryInput {
5
6
  intent?: string;
@@ -19,12 +20,9 @@ export declare function handleRecommendIndustry(v: RecommendIndustryInput): {
19
20
  industry: string;
20
21
  similarity: number;
21
22
  matched_traits: string[];
22
- reference_examples: {
23
- file: string;
24
- title: string;
25
- operation_type: string;
26
- verified: boolean;
27
- }[];
23
+ location_sensitivity: LocationSensitivity;
24
+ trust_selling_points: string[];
25
+ build_notes: string[];
28
26
  strategy_alignment: {
29
27
  score: number;
30
28
  matched_levers: InfrastructureLever[];
@@ -42,6 +40,9 @@ export declare function handleListModes(): Promise<{
42
40
  key_risk: string;
43
41
  machine_nodes: string[];
44
42
  similar_industries: string[];
43
+ location_sensitivity: LocationSensitivity;
44
+ trust_selling_points: string[];
45
+ build_notes: string[];
45
46
  }[];
46
47
  user_modes: {
47
48
  name: string;
@@ -50,6 +51,9 @@ export declare function handleListModes(): Promise<{
50
51
  derived_from: string | null;
51
52
  key_risk: string;
52
53
  machine_nodes: string[];
54
+ location_sensitivity: LocationSensitivity;
55
+ trust_selling_points: string[];
56
+ build_notes: string[];
53
57
  evolution_history: {
54
58
  version: string;
55
59
  changed_at: number;
@@ -75,6 +79,9 @@ export declare function handleDeriveUserMode(v: DeriveUserModeInput): Promise<{
75
79
  owner: string;
76
80
  key_risk: string;
77
81
  machine_nodes: string[];
82
+ location_sensitivity: LocationSensitivity;
83
+ trust_selling_points: string[];
84
+ build_notes: string[];
78
85
  evolution_history: {
79
86
  version: string;
80
87
  changed_at: number;
@@ -99,6 +106,9 @@ export declare function handleEvolveUserMode(v: EvolveUserModeInput): Promise<{
99
106
  owner: string;
100
107
  key_risk: string;
101
108
  machine_nodes: string[];
109
+ location_sensitivity: LocationSensitivity;
110
+ trust_selling_points: string[];
111
+ build_notes: string[];
102
112
  evolution_history: {
103
113
  version: string;
104
114
  changed_at: number;
@@ -122,6 +132,9 @@ export declare function handleRegisterUserMode(v: RegisterUserModeInput): Promis
122
132
  owner: string;
123
133
  key_risk: string;
124
134
  machine_nodes: string[];
135
+ location_sensitivity: LocationSensitivity;
136
+ trust_selling_points: string[];
137
+ build_notes: string[];
125
138
  evolution_history: {
126
139
  version: string;
127
140
  changed_at: number;
@@ -1 +1 @@
1
- import{getIndustryModeRegistry,getMetricRegistry,getConstraintRegistry}from'../../extensions/index.js';import{inferTraitsFromDescription,findSimilarIndustries}from'../../knowledge/industry-generalizer.js';import{searchExamples}from'../../schema-query-impl/index.js';import{resolveObjective,buildStrategyIntent,suggestLevers}from'../../persona/strategy-intent.js';export const LOCAL_MODE_OWNER='local';const RM1_11_NODE_REGEX=/(^|_)(disputed?|refund(?:ed)?|arbitration|arb)(_|$)/i;function validateMachineShape(a,b){const c=[];if(!Array['isArray'](a))return c;const d=new Set();for(const e of a){const f=e?.['name'];if(typeof f!=='string'||!f){c['push'](b+':\x20every\x20node\x20must\x20have\x20a\x20non-empty\x20string\x20\x27name\x27');continue;}d['has'](f)&&c['push'](b+':\x20duplicate\x20node\x20name\x20\x27'+f+'\x27\x20(R-M1-10)'),d['add'](f),RM1_11_NODE_REGEX['test'](f)&&c['push'](b+':\x20node\x20\x27'+f+'\x27\x20violates\x20R-M1-11\x20—\x20dispute/refund\x20flows\x20must\x20NOT\x20be\x20'+'modeled\x20as\x20Machine\x20nodes.\x20Disputes\x20flow\x20through\x20Service.arbitrations\x20→\x20Arbitration.dispute()\x20'+'independently\x20of\x20the\x20Machine.\x20Use\x20business-state\x20nodes\x20(e.g.\x20\x27cancelled\x27,\x20\x27return_approved\x27)\x20'+'and\x20route\x20fund\x20refunds\x20via\x20Allocator\x20triggered\x20by\x20those\x20states.');}return c;}function modeLevers(a){const b=[];return(a['capabilities_used']['some'](d=>d['startsWith']('reward.'))||a['flywheel']?.['rewardStrategy']&&a['flywheel']['rewardStrategy']!=='User-defined')&&b['push']('reward'),(a['flywheel']?.['discountStrategy']&&a['flywheel']['discountStrategy']!=='User-defined'||a['config_overrides']?.['service']?.['first_order_discount']===!![])&&b['push']('discount'),(a['capabilities_used']['includes']('guard.validate_buy')||a['guards']['some'](c=>c['template_id']['includes']('buy')))&&b['push']('buy_guard'),a['capabilities_used']['includes']('machine.node_topology')&&a['machine_shape']['length']>0x0&&b['push']('machine_design'),b;}function resolveStrategyObjectives(a){const b=typeof a==='string'?[a]:a??[],c=new Set();for(const d of b){const e=resolveObjective(d);if(e)c['add'](e);}return[...c];}export function handleRecommendIndustry(a){const b=(a['intent']??a['project_description']??a['project_name']??'')['trim']();if(!b)throw new Error('recommend_industry\x20requires\x20\x27intent\x27\x20(business\x20description\x20text).\x20'+'Example:\x20intent=\x27I\x20rent\x20cameras\x20to\x20photographers\x20with\x20deposit\x20and\x20damage\x20inspection\x27.');const c=inferTraitsFromDescription(b),d=findSimilarIndustries(c['traits'],0x3),e=resolveStrategyObjectives(a['strategy']),f=e['map'](k=>buildStrategyIntent(k)),g=[...new Set(f['flatMap'](k=>k['levers']))],h=getIndustryModeRegistry(),i=d['map'](k=>{const l=searchExamples(k['industry'])['slice'](0x0,0x3)['map'](r=>({'file':r['file'],'title':r['title'],'operation_type':r['operation_type'],'verified':r['verified']})),n=h['getMode'](k['industry']),o=n?modeLevers(n):[],p=g['filter'](r=>o['includes'](r)),q=g['length']>0x0?{'score':p['length']/g['length'],'matched_levers':p,'missing_levers':g['filter'](r=>!o['includes'](r))}:undefined;return{'industry':k['industry'],'similarity':k['similarity'],'matched_traits':k['matched_traits'],'reference_examples':l,'strategy_alignment':q};});g['length']>0x0&&i['sort']((k,l)=>{const m=k['similarity']*0.7+(k['strategy_alignment']?.['score']??0x0)*0.3,n=l['similarity']*0.7+(l['strategy_alignment']?.['score']??0x0)*0.3;return n-m;});const j=i[0x0];return{'action':'recommend_industry','intent':b,'inferred_traits':c['traits'],'inference_confidence':c['confidence'],'matched_keywords':c['matched_keywords'],'strategy_intents':f,'lever_suggestions':f['flatMap'](k=>suggestLevers(k)),'recommendations':i,'hint':j?'Top\x20match:\x20\x27'+j['industry']+'\x27\x20(similarity\x20'+(j['similarity']*0x64)['toFixed'](0x0)+'%'+(g['length']>0x0?',\x20strategy\x20alignment\x20'+((j['strategy_alignment']?.['score']??0x0)*0x64)['toFixed'](0x0)+'%':'')+').\x20Use\x20it\x20to\x20shape\x20the\x20build\x20—\x20run\x20goal_operation\x20action=\x27merchant_guide\x27\x20(or\x20\x27analyze_intent\x27)\x20with\x20this\x20industry\x20context,\x20'+'or\x20choose\x20another\x20industry\x20from\x20\x27recommendations\x27.\x20'+'Review\x20reference\x20examples\x20via\x20schema_query\x20action=\x27search_examples\x27\x20query=\x27<industry>\x27.':'No\x20similar\x20industry\x20found.\x20Shape\x20the\x20build\x20from\x20scratch\x20via\x20goal_operation\x20action=\x27merchant_guide\x27.'};}export async function handleListModes(){const a=getIndustryModeRegistry(),b=a['listModes']()['filter'](d=>d['source']==='builtin')['map'](d=>({'name':d['name'],'display_name':d['display_name'],'version':d['version'],'key_risk':d['key_risk'],'machine_nodes':d['machine_shape']['map'](e=>e['name']),'similar_industries':d['similar_industries']??[]})),c=(await a['listUserModes'](LOCAL_MODE_OWNER))['map'](d=>({'name':d['name'],'display_name':d['display_name'],'version':d['version'],'derived_from':d['derived_from']??null,'key_risk':d['key_risk'],'machine_nodes':d['machine_shape']['map'](e=>e['name']),'evolution_history':(d['evolution_history']??[])['map'](e=>({'version':e['version'],'changed_at':e['changed_at'],'changes':e['changes']}))}));return{'action':'list_modes','builtin_modes':b,'user_modes':c,'owner':LOCAL_MODE_OWNER,'hint':'Use\x20a\x20builtin\x20mode\x20name\x20as\x20the\x20industry/mode\x20context\x20for\x20your\x20build\x20(see\x20recommend_industry\x20/\x20merchant_guide).\x20'+'Use\x20derive_user_mode\x20to\x20customize\x20a\x20builtin\x20mode,\x20or\x20register_user_mode\x20for\x20a\x20fully\x20custom\x20mode.\x20'+'User\x20modes\x20are\x20referenced\x20as\x20\x27<name>\x27\x20in\x20derive/evolve/unregister\x20actions.'};}export async function handleDeriveUserMode(a){const b=requireField(a['mode_source'],'mode_source'),c=requireField(a['mode_name'],'mode_name'),d=a['mode_changes']??{},e=validateMachineShape(d['machine_shape'],'mode_changes.machine_shape');if(e['length']>0x0)throw new Error('derive_user_mode\x20blocked:\x0a'+e['join']('\x0a'));const f=getIndustryModeRegistry(),g=await f['deriveMode'](b,d,LOCAL_MODE_OWNER,c,a['mode_display_name']);if(!g)throw new Error('derive_user_mode\x20failed:\x20source\x20mode\x20\x27'+b+'\x27\x20not\x20found,\x20or\x20name\x20\x27'+c+'\x27\x20conflicts\x20'+'with\x20a\x20builtin/existing\x20user\x20mode.\x20Call\x20list_modes\x20to\x20see\x20available\x20names.');return{'action':'derive_user_mode','mode':summarizeUserMode(g),'hint':'Mode\x20\x27'+c+'\x27\x20derived\x20from\x20\x27'+b+'\x27.\x20Use\x20it\x20as\x20the\x20industry/mode\x20context\x20for\x20your\x20build.\x20'+'Iterate\x20with\x20evolve_user_mode.'};}export async function handleEvolveUserMode(a){const b=requireField(a['mode_name'],'mode_name'),c=requireField(a['mode_change_description'],'mode_change_description'),d=a['mode_changes']??{},e=validateMachineShape(d['machine_shape'],'mode_changes.machine_shape');if(e['length']>0x0)throw new Error('evolve_user_mode\x20blocked:\x0a'+e['join']('\x0a'));const f=getIndustryModeRegistry(),g=await f['evolveMode'](b,d,LOCAL_MODE_OWNER,c,a['mode_bump_version']??!![]);if(!g)throw new Error('evolve_user_mode\x20failed:\x20user\x20mode\x20\x27'+b+'\x27\x20not\x20found\x20for\x20owner\x20\x27'+LOCAL_MODE_OWNER+'\x27.\x20'+'Call\x20list_modes\x20to\x20see\x20your\x20modes.');return{'action':'evolve_user_mode','mode':summarizeUserMode(g),'hint':'Mode\x20\x27'+b+'\x27\x20evolved\x20to\x20'+g['version']+'.\x20Evolution\x20history\x20recorded.'};}export async function handleRegisterUserMode(a){const b=requireField(a['mode_name'],'mode_name'),c=a['mode_changes']??{},d=[];(!Array['isArray'](c['machine_shape'])||c['machine_shape']['length']===0x0)&&d['push']('machine_shape\x20(non-empty\x20array\x20of\x20{name,\x20role})');(typeof c['key_risk']!=='string'||!c['key_risk'])&&d['push']('key_risk\x20(string\x20describing\x20the\x20industry\x27s\x20key\x20risk)');if(d['length']>0x0)throw new Error('register_user_mode\x20requires\x20these\x20fields\x20in\x20mode_changes:\x20'+d['join'](',\x20')+'.\x20'+'Tip:\x20derive_user_mode\x20from\x20a\x20builtin\x20mode\x20is\x20usually\x20easier\x20than\x20registering\x20from\x20scratch.');const e=validateMachineShape(c['machine_shape'],'mode_changes.machine_shape');if(e['length']>0x0)throw new Error('register_user_mode\x20blocked:\x0a'+e['join']('\x0a'));const f=getIndustryModeRegistry(),g=f['getMode']('general');if(!g)throw new Error('Builtin\x20mode\x20\x27general\x27\x20not\x20registered\x20—\x20cannot\x20build\x20custom\x20mode\x20defaults');const h={...g,...c,'name':b,'display_name':a['mode_display_name']??b,'version':'v1','source':'custom','owner':LOCAL_MODE_OWNER,'derived_from':undefined,'evolution_history':[]},i=await f['registerUserMode'](h,LOCAL_MODE_OWNER);if(!i)throw new Error('register_user_mode\x20failed:\x20name\x20\x27'+b+'\x27\x20conflicts\x20with\x20a\x20builtin/existing\x20user\x20mode,\x20'+'or\x20payload\x20is\x20invalid.\x20Call\x20list_modes\x20to\x20see\x20available\x20names.');return{'action':'register_user_mode','mode':summarizeUserMode(h),'hint':'Custom\x20mode\x20\x27'+b+'\x27\x20registered.\x20Use\x20it\x20as\x20the\x20industry/mode\x20context\x20for\x20your\x20build.'};}export async function handleUnregisterUserMode(a){const b=requireField(a['mode_name'],'mode_name'),c=getIndustryModeRegistry(),d=await c['unregisterUserMode'](b,LOCAL_MODE_OWNER);if(!d)throw new Error('unregister_user_mode\x20failed:\x20user\x20mode\x20\x27'+b+'\x27\x20not\x20found\x20for\x20owner\x20\x27'+LOCAL_MODE_OWNER+'\x27.');return{'action':'unregister_user_mode','removed':!![],'mode_name':b};}export async function handleRegisterCustomMetric(a){const b=requireField(a['metric_id'],'metric_id'),c=requireField(a['metric_display_name'],'metric_display_name'),d=requireField(a['metric_description'],'metric_description'),e=requireField(a['metric_type'],'metric_type'),f=requireField(a['metric_scale'],'metric_scale'),g=await getMetricRegistry()['registerCustomMetric'](b,c,d,e,f,LOCAL_MODE_OWNER,a['metric_weight']);if(!g)throw new Error('register_custom_metric\x20failed:\x20metric_id\x20\x27'+b+'\x27\x20already\x20exists\x20or\x20fields\x20are\x20invalid.');return{'action':'register_custom_metric','metric':{'metric_id':b,'display_name':c,'description':d,'type':e,'scale':f,'weight':a['metric_weight']??0x1,'scope':'custom','owner':LOCAL_MODE_OWNER},'hint':'Custom\x20metric\x20\x27'+b+'\x27\x20registered\x20globally\x20and\x20persisted\x20(survives\x20restart)\x20—\x20all\x20modes\x20reference\x20it\x20in\x20evaluation.'};}export async function handleUnregisterCustomMetric(a){const b=requireField(a['metric_id'],'metric_id'),c=await getMetricRegistry()['unregisterMetric'](b,LOCAL_MODE_OWNER);if(!c)throw new Error('unregister_custom_metric\x20failed:\x20custom\x20metric\x20\x27'+b+'\x27\x20not\x20found\x20(builtin\x20metrics\x20cannot\x20be\x20deleted).\x20'+'Call\x20list_metrics_constraints\x20with\x20scope_filter=\x27custom\x27\x20to\x20see\x20deletable\x20metrics.');return{'action':'unregister_custom_metric','removed':!![],'metric_id':b};}export async function handleRegisterCustomConstraint(a){const b=requireField(a['constraint_id'],'constraint_id'),c=requireField(a['constraint_display_name'],'constraint_display_name'),d=requireField(a['constraint_description'],'constraint_description'),e=a['constraint_rule'];if(!e||typeof e!=='object'||!('type'in e))throw new Error('constraint_rule\x20is\x20required\x20and\x20must\x20be\x20one\x20of:\x20'+'{type:\x27capability_required\x27,\x20capability_id}\x20|\x20{type:\x27capability_forbidden\x27,\x20capability_id}\x20|\x20'+'{type:\x27numeric_limit\x27,\x20field,\x20max?,\x20min?}\x20|\x20{type:\x27condition_required\x27,\x20condition,\x20ai_evaluated:true}');const f=await getConstraintRegistry()['registerCustomConstraint'](b,c,d,e,LOCAL_MODE_OWNER,a['constraint_severity']??'soft',a['constraint_on_violation']??'warn');if(!f)throw new Error('register_custom_constraint\x20failed:\x20constraint_id\x20\x27'+b+'\x27\x20already\x20exists\x20or\x20rule\x20is\x20invalid.');return{'action':'register_custom_constraint','constraint':{'constraint_id':b,'display_name':c,'description':d,'rule':e,'severity':a['constraint_severity']??'soft','on_violation':a['constraint_on_violation']??'warn','scope':'custom','owner':LOCAL_MODE_OWNER},'hint':'Custom\x20constraint\x20\x27'+b+'\x27\x20registered\x20and\x20persisted\x20(survives\x20restart).\x20\x27hard\x27\x20constraints\x20mark\x20a\x20mode\x20not\x20applicable\x20on\x20violation;\x20\x27soft\x27\x20only\x20warn.'};}export async function handleUnregisterCustomConstraint(a){const b=requireField(a['constraint_id'],'constraint_id'),c=await getConstraintRegistry()['unregisterConstraint'](b,LOCAL_MODE_OWNER);if(!c)throw new Error('unregister_custom_constraint\x20failed:\x20custom\x20constraint\x20\x27'+b+'\x27\x20not\x20found\x20(builtin\x20constraints\x20cannot\x20be\x20deleted).\x20'+'Call\x20list_metrics_constraints\x20with\x20scope_filter=\x27custom\x27\x20to\x20see\x20deletable\x20constraints.');return{'action':'unregister_custom_constraint','removed':!![],'constraint_id':b};}export async function handleListMetricsConstraints(a){const b=(await getMetricRegistry()['listMetrics']({'type':a['metric_type_filter'],'scope':a['scope_filter']}))['map'](d=>({'metric_id':d['metric_id'],'display_name':d['display_name'],'description':d['description'],'type':d['type'],'scale':d['scale'],'weight':d['weight'],'scope':d['scope']})),c=(await getConstraintRegistry()['listConstraints']({'scope':a['scope_filter']}))['map'](d=>({'constraint_id':d['constraint_id'],'display_name':d['display_name'],'description':d['description'],'rule':d['rule'],'severity':d['severity'],'on_violation':d['on_violation'],'scope':d['scope']}));return{'action':'list_metrics_constraints','metrics':b,'constraints':c,'hint':'Register\x20custom\x20entries\x20via\x20register_custom_metric\x20/\x20register_custom_constraint;\x20'+'delete\x20via\x20unregister_custom_metric\x20/\x20unregister_custom_constraint\x20(custom\x20only).\x20'+'Custom\x20entries\x20are\x20persisted\x20and\x20survive\x20restart.\x20'+'Filter\x20with\x20metric_type_filter\x20(\x27risk\x27|\x27benefit\x27)\x20or\x20scope_filter\x20(\x27builtin\x27|\x27custom\x27).'};}function requireField(a,b){if(a===undefined||a===null||typeof a==='string'&&!a['trim']())throw new Error('\x27'+b+'\x27\x20is\x20required\x20for\x20this\x20action');return a;}function summarizeUserMode(a){return{'name':a['name'],'display_name':a['display_name'],'version':a['version'],'derived_from':a['derived_from']??null,'owner':a['owner'],'key_risk':a['key_risk'],'machine_nodes':a['machine_shape']['map'](b=>b['name']),'evolution_history':(a['evolution_history']??[])['map'](b=>({'version':b['version'],'changed_at':b['changed_at'],'changes':b['changes']}))};}
1
+ import{getIndustryModeRegistry,getMetricRegistry,getConstraintRegistry}from'../../extensions/index.js';import{inferTraitsFromDescription,findSimilarIndustries}from'../../knowledge/industry-generalizer.js';import{resolveObjective,buildStrategyIntent,suggestLevers}from'../../persona/strategy-intent.js';export const LOCAL_MODE_OWNER='local';function locationSensitivity(a){if(a['has_logistics'])return'logistics';if(a['pure_digital'])return'near';return'strict';}const RM1_11_NODE_REGEX=/(^|_)(disputed?|refund(?:ed)?|arbitration|arb)(_|$)/i;function validateMachineShape(a,b){const c=[];if(!Array['isArray'](a))return c;const d=new Set();for(const e of a){const f=e?.['name'];if(typeof f!=='string'||!f){c['push'](b+':\x20every\x20node\x20must\x20have\x20a\x20non-empty\x20string\x20\x27name\x27');continue;}d['has'](f)&&c['push'](b+':\x20duplicate\x20node\x20name\x20\x27'+f+'\x27\x20(R-M1-10)'),d['add'](f),RM1_11_NODE_REGEX['test'](f)&&c['push'](b+':\x20node\x20\x27'+f+'\x27\x20violates\x20R-M1-11\x20—\x20dispute/refund\x20flows\x20must\x20NOT\x20be\x20'+'modeled\x20as\x20Machine\x20nodes.\x20Disputes\x20flow\x20through\x20Service.arbitrations\x20→\x20Arbitration.dispute()\x20'+'independently\x20of\x20the\x20Machine.\x20Use\x20business-state\x20nodes\x20(e.g.\x20\x27cancelled\x27,\x20\x27return_approved\x27)\x20'+'and\x20route\x20fund\x20refunds\x20via\x20Allocator\x20triggered\x20by\x20those\x20states.');}return c;}function modeLevers(a){const b=[];return(a['capabilities_used']['some'](d=>d['startsWith']('reward.'))||a['flywheel']?.['rewardStrategy']&&a['flywheel']['rewardStrategy']!=='User-defined')&&b['push']('reward'),(a['flywheel']?.['discountStrategy']&&a['flywheel']['discountStrategy']!=='User-defined'||a['config_overrides']?.['service']?.['first_order_discount']===!![])&&b['push']('discount'),(a['capabilities_used']['includes']('guard.validate_buy')||a['guards']['some'](c=>c['template_id']['includes']('buy')))&&b['push']('buy_guard'),a['capabilities_used']['includes']('machine.node_topology')&&a['machine_shape']['length']>0x0&&b['push']('machine_design'),b;}function resolveStrategyObjectives(a){const b=typeof a==='string'?[a]:a??[],c=new Set();for(const d of b){const e=resolveObjective(d);if(e)c['add'](e);}return[...c];}export function handleRecommendIndustry(a){const b=(a['intent']??a['project_description']??a['project_name']??'')['trim']();if(!b)throw new Error('recommend_industry\x20requires\x20\x27intent\x27\x20(business\x20description\x20text).\x20'+'Example:\x20intent=\x27I\x20rent\x20cameras\x20to\x20photographers\x20with\x20deposit\x20and\x20damage\x20inspection\x27.');const c=inferTraitsFromDescription(b),d=findSimilarIndustries(c['traits'],0x3),e=resolveStrategyObjectives(a['strategy']),f=e['map'](k=>buildStrategyIntent(k)),g=[...new Set(f['flatMap'](k=>k['levers']))],h=getIndustryModeRegistry(),i=d['map'](k=>{const l=h['getMode'](k['industry']),n=l?modeLevers(l):[],o=g['filter'](q=>n['includes'](q)),p=g['length']>0x0?{'score':o['length']/g['length'],'matched_levers':o,'missing_levers':g['filter'](q=>!n['includes'](q))}:undefined;return{'industry':k['industry'],'similarity':k['similarity'],'matched_traits':k['matched_traits'],'location_sensitivity':l?locationSensitivity(l['traits']):'strict','trust_selling_points':l?l['flywheel']?.['trustSellingPoints']??[]:[],'build_notes':l?.['build_notes']??[],'strategy_alignment':p};});g['length']>0x0&&i['sort']((k,l)=>{const m=k['similarity']*0.7+(k['strategy_alignment']?.['score']??0x0)*0.3,n=l['similarity']*0.7+(l['strategy_alignment']?.['score']??0x0)*0.3;return n-m;});const j=i[0x0];return{'action':'recommend_industry','intent':b,'inferred_traits':c['traits'],'inference_confidence':c['confidence'],'matched_keywords':c['matched_keywords'],'strategy_intents':f,'lever_suggestions':f['flatMap'](k=>suggestLevers(k)),'recommendations':i,'hint':j?'Top\x20match:\x20\x27'+j['industry']+'\x27\x20(similarity\x20'+(j['similarity']*0x64)['toFixed'](0x0)+'%'+(g['length']>0x0?',\x20strategy\x20alignment\x20'+((j['strategy_alignment']?.['score']??0x0)*0x64)['toFixed'](0x0)+'%':'')+').\x20Use\x20it\x20to\x20shape\x20the\x20build\x20—\x20run\x20goal_operation\x20action=\x27merchant_guide\x27\x20(or\x20\x27analyze_intent\x27)\x20with\x20this\x20industry\x20context,\x20'+'or\x20choose\x20another\x20industry\x20from\x20\x27recommendations\x27.':'No\x20similar\x20industry\x20found.\x20Shape\x20the\x20build\x20from\x20scratch\x20via\x20goal_operation\x20action=\x27merchant_guide\x27.'};}export async function handleListModes(){const a=getIndustryModeRegistry(),b=a['listModes']()['filter'](d=>d['source']==='builtin')['map'](d=>({'name':d['name'],'display_name':d['display_name'],'version':d['version'],'key_risk':d['key_risk'],'machine_nodes':d['machine_shape']['map'](e=>e['name']),'similar_industries':d['similar_industries']??[],'location_sensitivity':locationSensitivity(d['traits']),'trust_selling_points':d['flywheel']?.['trustSellingPoints']??[],'build_notes':d['build_notes']??[]})),c=(await a['listUserModes'](LOCAL_MODE_OWNER))['map'](d=>({'name':d['name'],'display_name':d['display_name'],'version':d['version'],'derived_from':d['derived_from']??null,'key_risk':d['key_risk'],'machine_nodes':d['machine_shape']['map'](e=>e['name']),'location_sensitivity':locationSensitivity(d['traits']),'trust_selling_points':d['flywheel']?.['trustSellingPoints']??[],'build_notes':d['build_notes']??[],'evolution_history':(d['evolution_history']??[])['map'](e=>({'version':e['version'],'changed_at':e['changed_at'],'changes':e['changes']}))}));return{'action':'list_modes','builtin_modes':b,'user_modes':c,'owner':LOCAL_MODE_OWNER,'hint':'Use\x20a\x20builtin\x20mode\x20name\x20as\x20the\x20industry/mode\x20context\x20for\x20your\x20build\x20(see\x20recommend_industry\x20/\x20merchant_guide).\x20'+'Use\x20derive_user_mode\x20to\x20customize\x20a\x20builtin\x20mode,\x20or\x20register_user_mode\x20for\x20a\x20fully\x20custom\x20mode.\x20'+'User\x20modes\x20are\x20referenced\x20as\x20\x27<name>\x27\x20in\x20derive/evolve/unregister\x20actions.'};}export async function handleDeriveUserMode(a){const b=requireField(a['mode_source'],'mode_source'),c=requireField(a['mode_name'],'mode_name'),d=a['mode_changes']??{},e=validateMachineShape(d['machine_shape'],'mode_changes.machine_shape');if(e['length']>0x0)throw new Error('derive_user_mode\x20blocked:\x0a'+e['join']('\x0a'));const f=getIndustryModeRegistry(),g=await f['deriveMode'](b,d,LOCAL_MODE_OWNER,c,a['mode_display_name']);if(!g)throw new Error('derive_user_mode\x20failed:\x20source\x20mode\x20\x27'+b+'\x27\x20not\x20found,\x20or\x20name\x20\x27'+c+'\x27\x20conflicts\x20'+'with\x20a\x20builtin/existing\x20user\x20mode.\x20Call\x20list_modes\x20to\x20see\x20available\x20names.');return{'action':'derive_user_mode','mode':summarizeUserMode(g),'hint':'Mode\x20\x27'+c+'\x27\x20derived\x20from\x20\x27'+b+'\x27.\x20Use\x20it\x20as\x20the\x20industry/mode\x20context\x20for\x20your\x20build.\x20'+'Iterate\x20with\x20evolve_user_mode.'};}export async function handleEvolveUserMode(a){const b=requireField(a['mode_name'],'mode_name'),c=requireField(a['mode_change_description'],'mode_change_description'),d=a['mode_changes']??{},e=validateMachineShape(d['machine_shape'],'mode_changes.machine_shape');if(e['length']>0x0)throw new Error('evolve_user_mode\x20blocked:\x0a'+e['join']('\x0a'));const f=getIndustryModeRegistry(),g=await f['evolveMode'](b,d,LOCAL_MODE_OWNER,c,a['mode_bump_version']??!![]);if(!g)throw new Error('evolve_user_mode\x20failed:\x20user\x20mode\x20\x27'+b+'\x27\x20not\x20found\x20for\x20owner\x20\x27'+LOCAL_MODE_OWNER+'\x27.\x20'+'Call\x20list_modes\x20to\x20see\x20your\x20modes.');return{'action':'evolve_user_mode','mode':summarizeUserMode(g),'hint':'Mode\x20\x27'+b+'\x27\x20evolved\x20to\x20'+g['version']+'.\x20Evolution\x20history\x20recorded.'};}export async function handleRegisterUserMode(a){const b=requireField(a['mode_name'],'mode_name'),c=a['mode_changes']??{},d=[];(!Array['isArray'](c['machine_shape'])||c['machine_shape']['length']===0x0)&&d['push']('machine_shape\x20(non-empty\x20array\x20of\x20{name,\x20role})');(typeof c['key_risk']!=='string'||!c['key_risk'])&&d['push']('key_risk\x20(string\x20describing\x20the\x20industry\x27s\x20key\x20risk)');if(d['length']>0x0)throw new Error('register_user_mode\x20requires\x20these\x20fields\x20in\x20mode_changes:\x20'+d['join'](',\x20')+'.\x20'+'Tip:\x20derive_user_mode\x20from\x20a\x20builtin\x20mode\x20is\x20usually\x20easier\x20than\x20registering\x20from\x20scratch.');const e=validateMachineShape(c['machine_shape'],'mode_changes.machine_shape');if(e['length']>0x0)throw new Error('register_user_mode\x20blocked:\x0a'+e['join']('\x0a'));const f=getIndustryModeRegistry(),g=f['getMode']('general');if(!g)throw new Error('Builtin\x20mode\x20\x27general\x27\x20not\x20registered\x20—\x20cannot\x20build\x20custom\x20mode\x20defaults');const h={...g,...c,'name':b,'display_name':a['mode_display_name']??b,'version':'v1','source':'custom','owner':LOCAL_MODE_OWNER,'derived_from':undefined,'evolution_history':[]},i=await f['registerUserMode'](h,LOCAL_MODE_OWNER);if(!i)throw new Error('register_user_mode\x20failed:\x20name\x20\x27'+b+'\x27\x20conflicts\x20with\x20a\x20builtin/existing\x20user\x20mode,\x20'+'or\x20payload\x20is\x20invalid.\x20Call\x20list_modes\x20to\x20see\x20available\x20names.');return{'action':'register_user_mode','mode':summarizeUserMode(h),'hint':'Custom\x20mode\x20\x27'+b+'\x27\x20registered.\x20Use\x20it\x20as\x20the\x20industry/mode\x20context\x20for\x20your\x20build.'};}export async function handleUnregisterUserMode(a){const b=requireField(a['mode_name'],'mode_name'),c=getIndustryModeRegistry(),d=await c['unregisterUserMode'](b,LOCAL_MODE_OWNER);if(!d)throw new Error('unregister_user_mode\x20failed:\x20user\x20mode\x20\x27'+b+'\x27\x20not\x20found\x20for\x20owner\x20\x27'+LOCAL_MODE_OWNER+'\x27.');return{'action':'unregister_user_mode','removed':!![],'mode_name':b};}export async function handleRegisterCustomMetric(a){const b=requireField(a['metric_id'],'metric_id'),c=requireField(a['metric_display_name'],'metric_display_name'),d=requireField(a['metric_description'],'metric_description'),e=requireField(a['metric_type'],'metric_type'),f=requireField(a['metric_scale'],'metric_scale'),g=await getMetricRegistry()['registerCustomMetric'](b,c,d,e,f,LOCAL_MODE_OWNER,a['metric_weight']);if(!g)throw new Error('register_custom_metric\x20failed:\x20metric_id\x20\x27'+b+'\x27\x20already\x20exists\x20or\x20fields\x20are\x20invalid.');return{'action':'register_custom_metric','metric':{'metric_id':b,'display_name':c,'description':d,'type':e,'scale':f,'weight':a['metric_weight']??0x1,'scope':'custom','owner':LOCAL_MODE_OWNER},'hint':'Custom\x20metric\x20\x27'+b+'\x27\x20registered\x20globally\x20and\x20persisted\x20(survives\x20restart)\x20—\x20all\x20modes\x20reference\x20it\x20in\x20evaluation.'};}export async function handleUnregisterCustomMetric(a){const b=requireField(a['metric_id'],'metric_id'),c=await getMetricRegistry()['unregisterMetric'](b,LOCAL_MODE_OWNER);if(!c)throw new Error('unregister_custom_metric\x20failed:\x20custom\x20metric\x20\x27'+b+'\x27\x20not\x20found\x20(builtin\x20metrics\x20cannot\x20be\x20deleted).\x20'+'Call\x20list_metrics_constraints\x20with\x20scope_filter=\x27custom\x27\x20to\x20see\x20deletable\x20metrics.');return{'action':'unregister_custom_metric','removed':!![],'metric_id':b};}export async function handleRegisterCustomConstraint(a){const b=requireField(a['constraint_id'],'constraint_id'),c=requireField(a['constraint_display_name'],'constraint_display_name'),d=requireField(a['constraint_description'],'constraint_description'),e=a['constraint_rule'];if(!e||typeof e!=='object'||!('type'in e))throw new Error('constraint_rule\x20is\x20required\x20and\x20must\x20be\x20one\x20of:\x20'+'{type:\x27capability_required\x27,\x20capability_id}\x20|\x20{type:\x27capability_forbidden\x27,\x20capability_id}\x20|\x20'+'{type:\x27numeric_limit\x27,\x20field,\x20max?,\x20min?}\x20|\x20{type:\x27condition_required\x27,\x20condition,\x20ai_evaluated:true}');const f=await getConstraintRegistry()['registerCustomConstraint'](b,c,d,e,LOCAL_MODE_OWNER,a['constraint_severity']??'soft',a['constraint_on_violation']??'warn');if(!f)throw new Error('register_custom_constraint\x20failed:\x20constraint_id\x20\x27'+b+'\x27\x20already\x20exists\x20or\x20rule\x20is\x20invalid.');return{'action':'register_custom_constraint','constraint':{'constraint_id':b,'display_name':c,'description':d,'rule':e,'severity':a['constraint_severity']??'soft','on_violation':a['constraint_on_violation']??'warn','scope':'custom','owner':LOCAL_MODE_OWNER},'hint':'Custom\x20constraint\x20\x27'+b+'\x27\x20registered\x20and\x20persisted\x20(survives\x20restart).\x20\x27hard\x27\x20constraints\x20mark\x20a\x20mode\x20not\x20applicable\x20on\x20violation;\x20\x27soft\x27\x20only\x20warn.'};}export async function handleUnregisterCustomConstraint(a){const b=requireField(a['constraint_id'],'constraint_id'),c=await getConstraintRegistry()['unregisterConstraint'](b,LOCAL_MODE_OWNER);if(!c)throw new Error('unregister_custom_constraint\x20failed:\x20custom\x20constraint\x20\x27'+b+'\x27\x20not\x20found\x20(builtin\x20constraints\x20cannot\x20be\x20deleted).\x20'+'Call\x20list_metrics_constraints\x20with\x20scope_filter=\x27custom\x27\x20to\x20see\x20deletable\x20constraints.');return{'action':'unregister_custom_constraint','removed':!![],'constraint_id':b};}export async function handleListMetricsConstraints(a){const b=(await getMetricRegistry()['listMetrics']({'type':a['metric_type_filter'],'scope':a['scope_filter']}))['map'](d=>({'metric_id':d['metric_id'],'display_name':d['display_name'],'description':d['description'],'type':d['type'],'scale':d['scale'],'weight':d['weight'],'scope':d['scope']})),c=(await getConstraintRegistry()['listConstraints']({'scope':a['scope_filter']}))['map'](d=>({'constraint_id':d['constraint_id'],'display_name':d['display_name'],'description':d['description'],'rule':d['rule'],'severity':d['severity'],'on_violation':d['on_violation'],'scope':d['scope']}));return{'action':'list_metrics_constraints','metrics':b,'constraints':c,'hint':'Register\x20custom\x20entries\x20via\x20register_custom_metric\x20/\x20register_custom_constraint;\x20'+'delete\x20via\x20unregister_custom_metric\x20/\x20unregister_custom_constraint\x20(custom\x20only).\x20'+'Custom\x20entries\x20are\x20persisted\x20and\x20survive\x20restart.\x20'+'Filter\x20with\x20metric_type_filter\x20(\x27risk\x27|\x27benefit\x27)\x20or\x20scope_filter\x20(\x27builtin\x27|\x27custom\x27).'};}function requireField(a,b){if(a===undefined||a===null||typeof a==='string'&&!a['trim']())throw new Error('\x27'+b+'\x27\x20is\x20required\x20for\x20this\x20action');return a;}function summarizeUserMode(a){return{'name':a['name'],'display_name':a['display_name'],'version':a['version'],'derived_from':a['derived_from']??null,'owner':a['owner'],'key_risk':a['key_risk'],'machine_nodes':a['machine_shape']['map'](b=>b['name']),'location_sensitivity':locationSensitivity(a['traits']),'trust_selling_points':a['flywheel']?.['trustSellingPoints']??[],'build_notes':a['build_notes']??[],'evolution_history':(a['evolution_history']??[])['map'](b=>({'version':b['version'],'changed_at':b['changed_at'],'changes':b['changes']}))};}
@@ -1 +1 @@
1
- import{LocalMark,objectTypeFromAddress,queryOrdersByUser}from'@wowok/wowok';import{batchQueryObjectsByIds,batchQueryTableItems,fetchEntityPermission,fetchObjectLinkerCore,fetchObjectLinkerTx,fetchServiceOrders}from'../../knowledge/workflow-guidance.js';import{deriveRelationshipProfile}from'../../relationship/index.js';import{GUARD_BINDING_REGISTRY,OWNER_RECEIVE_COGNITION}from'../../knowledge/guard-bindings.js';import{detectBridgesForObjects,summarizeBridge}from'../../knowledge/scenario-topology.js';import{fetchMachineNodes}from'./machine-nodes.js';const MAX_MANAGED_PER_PERMISSION=0x3c,MAX_ORDERS=0x28,MAX_DEMANDS=0x14,MAX_ALLOCATIONS=0x28;function fld(a,b){return a?.[b]??a?.['data']?.[b];}async function resolveAddress(a,b){if(/^0x[0-9a-fA-F]{4,}$/i['test'](a))return a;const c=await LocalMark['Instance']()['get_address'](a);if(!c)throw new Error('Cannot\x20resolve\x20'+b+'\x20\x27'+a+'\x27\x20—\x20not\x20a\x20valid\x20address\x20and\x20no\x20LocalMark\x20entry\x20found.\x20'+'Pass\x20the\x200x\x20address\x20directly\x20or\x20register\x20it\x20via\x20local_mark_operation.');return c;}async function safe(a,b,c){try{return await b();}catch(d){return c['push'](a+':\x20'+d['message']),undefined;}}export async function handleRelationshipProfile(b){if(!b['radar_account'])throw new Error('\x27radar_account\x27\x20is\x20required\x20for\x20relationship_profile');const e=b['context_network']??'testnet',f=[],g=await resolveAddress(b['radar_account'],'radar_account'),h=await safe('entity_permission\x20'+g,()=>fetchEntityPermission(g,e),f),i=[...new Set((h?.['items']??[])['map'](S=>typeof S?.['permission']==='string'?S['permission']:undefined)['filter'](S=>!!S))]['slice'](0x0,0x19),j=[],k=new Map();if(i['length']>0x0){const S=await safe('permissions\x20query',()=>batchQueryObjectsByIds(i,e),f)??[];for(const T of S){const U=fld(T,'object');if(!U)continue;j['push']({'address':U,'owner':fld(T,'owner')??'','admins':(fld(T,'admin')??[])['filter'](V=>typeof V==='string'),'entities':[]});}await Promise['all'](i['map'](async V=>{const W=await safe('permission\x20table\x20'+V,()=>batchQueryTableItems(V,{'network':e}),f);if(!W)return;const X=j['find'](Y=>Y['address']['toLowerCase']()===V['toLowerCase']());if(!X)return;for(const Y of W['items']){const Z=Y['object'];if(Z?.['type']&&!String(Z['type'])['includes']('PermissionPerm'))continue;const a0=fld(Z,'address');if(!a0)continue;const a1=fld(Z,'perm')??[],a2=a1['map'](a3=>typeof a3==='number'?a3:typeof a3?.['index']==='number'?a3['index']:null)['filter'](a3=>a3!==null);X['entities']['push']({'address':a0,'perm_indices':a2});}}));for(const V of i){const [W,X]=await Promise['all']([safe('object_linker_core\x20'+V,()=>fetchObjectLinkerCore(V,e),f),safe('object_linker_tx\x20'+V,()=>fetchObjectLinkerTx(V,e),f)]),Y=[...(W?.['items']??[])['map'](Z=>Z?.['who']),...(X?.['items']??[])['map'](Z=>Z?.['who'])]['filter'](Z=>typeof Z==='string'&&!!Z);for(const Z of Y['slice'](0x0,MAX_MANAGED_PER_PERMISSION)){if(!k['has'](Z['toLowerCase']())){const a0=objectTypeFromAddress(Z);if(a0)k['set'](Z['toLowerCase'](),a0);}}}}const l=a1=>[...k['entries']()]['filter'](([a2,a3])=>a3===a1)['map'](([a2])=>a2),m=l('service'),n=l('demand')['slice'](0x0,MAX_DEMANDS),q=l('contact'),u=l('arbitration'),w=new Map(),x=await safe('orders\x20by\x20user\x20'+g,()=>queryOrdersByUser({'address':g,'network':e}),f);for(const a1 of x??[]){const a2=a1?.['order']?.['object'];typeof a2==='string'&&a2&&w['set'](a2['toLowerCase'](),'buyer');}for(const a3 of m){const a4=await safe('service\x20orders\x20'+a3,()=>fetchServiceOrders(a3,e),f);for(const a5 of a4?.['items']??[]){typeof a5?.['who']==='string'&&a5['who']&&w['set'](a5['who']['toLowerCase'](),'merchant');}}const y=[...w['keys']()]['slice'](0x0,MAX_ORDERS),z=[],A={};if(y['length']>0x0){const a6=await safe('orders\x20query',()=>batchQueryObjectsByIds(y,e),f)??[],a7=new Set();for(const ab of a6){const ac=fld(ab,'object');if(!ac)continue;z['push']({'address':ac,'owner':fld(ab,'owner')??'','agents':(fld(ab,'agent')??[])['filter'](ae=>typeof ae==='string'),'service':fld(ab,'service')??'','amount':fld(ab,'amount')??undefined,'allocation':fld(ab,'allocation')??undefined,'dispute_arbitrations':(fld(ab,'dispute')??[])['filter'](ae=>typeof ae==='string'),'claimed_by':fld(ab,'claimed_by')??null});const ad=fld(ab,'service');if(ad)a7['add'](ad);}const a8=await safe('order\x20services\x20query',()=>batchQueryObjectsByIds([...a7],e),f)??[],a9=new Map();for(const ae of a8){const af=fld(ae,'object'),ag=fld(ae,'permission');if(af&&ag)a9['set'](af['toLowerCase'](),ag);}const aa=[...new Set([...a9['values']()])];if(aa['length']>0x0){const ah=await safe('service\x20permissions\x20query',()=>batchQueryObjectsByIds(aa,e),f)??[],ai=new Map();for(const aj of ah){const ak=fld(aj,'object'),al=fld(aj,'owner');if(ak&&al)ai['set'](ak['toLowerCase'](),al);}for(const [am,an]of a9){const ao=ai['get'](an['toLowerCase']());if(ao)A[am]=ao;}}}const B=[];for(const ap of n){const aq=await safe('demand\x20'+ap,()=>batchQueryObjectsByIds([ap],e),f)??[],ar=aq[0x0],as=fld(ar,'permission');let at='';if(as){const aw=await safe('demand\x20permission\x20'+as,()=>batchQueryObjectsByIds([as],e),f)??[];at=fld(aw[0x0],'owner')??'';}const au=[],av=await safe('demand\x20presenters\x20'+ap,()=>batchQueryTableItems(ap,{'network':e}),f);if(av)for(const ax of av['items']){const ay=ax['object'];if(!ay?.['type']||!String(ay['type'])['includes']('Present'))continue;const az=fld(ay,'address')??ax['objectId'],aA=fld(ay,'value')??ay;au['push']({'address':typeof az==='string'?az:ax['objectId'],'service':typeof aA?.['service']==='string'?aA['service']:undefined,'acceptance_score':typeof aA?.['acceptance_score']==='number'?aA['acceptance_score']:undefined});}B['push']({'address':ap,'owner':at,'presenters':au});}const C=[],D=[...new Set(z['map'](aB=>aB['allocation'])['filter'](aB=>!!aB))]['slice'](0x0,MAX_ALLOCATIONS);if(D['length']>0x0){const aB=await safe('allocations\x20query',()=>batchQueryObjectsByIds(D,e),f)??[];for(const aC of aB){const aD=fld(aC,'object');if(!aD)continue;const aE=fld(aC,'allocators')??aC,aF=Array['isArray'](aE)?aE:Array['isArray'](aE?.['allocators'])?aE['allocators']:[],aG=aF['flatMap'](aH=>(aH?.['sharing']??[])['map'](aI=>({'who':aI?.['who']??aI,'mode':aI?.['mode']===0x1||aI?.['mode']==='Rate'?'Rate':aI?.['mode']===0x2||aI?.['mode']==='Surplus'?'Surplus':'Amount','sharing':aI?.['sharing']!=null?String(aI['sharing']):undefined,'guard':typeof aH?.['guard']==='string'?aH['guard']:undefined})));C['push']({'address':aD,'owner':fld(aC,'owner')??'','sharing':aG});}}const E=[];if(q['length']>0x0){const aH=await safe('contacts\x20query',()=>batchQueryObjectsByIds(q['slice'](0x0,0x14),e),f)??[];for(const aI of aH){const aJ=fld(aI,'object');if(!aJ)continue;const aK=fld(aI,'permission');let aL='';if(aK){const aN=await safe('contact\x20permission\x20'+aK,()=>batchQueryObjectsByIds([aK],e),f)??[];aL=fld(aN[0x0],'owner')??'';}const aM=(fld(aI,'ims')??[])['map'](aO=>typeof aO==='string'?aO:aO?.['at'])['filter'](aO=>typeof aO==='string');E['push']({'address':aJ,'ims':aM,'owner':aL});}}const F=[],G=l('machine')['slice'](0x0,0xa);for(const aO of G){const [aP,aQ]=await Promise['all']([safe('machine\x20'+aO,()=>batchQueryObjectsByIds([aO],e),f),safe('machine\x20nodes\x20'+aO,()=>fetchMachineNodes(aO,e),f)]),aR=aP?.[0x0]?fld(aP[0x0],'permission'):undefined,aS=(aQ??[])['flatMap'](aT=>(Array['isArray'](aT['value'])?aT['value']:[])['flatMap'](aU=>(aU['forwards']??[])['map'](aV=>({'node':aU['prev_node']??aT['name'],'next_node':aT['name'],'forward_name':aV['name'],'named_operator':aV['namedOperator']??null,'permission_index':aV['permissionIndex']??null,'guard':typeof aV['guard']==='string'?aV['guard']:aV['guard']?.['guard']??null}))));F['push']({'address':aO,'permission_address':aR,'forwards':aS});}const H=[],I=new Set(u);for(const aT of z){for(const aU of aT['dispute_arbitrations']??[])I['add'](aU);}if(I['size']>0x0){const aV=await safe('arbitrations\x20query',()=>batchQueryObjectsByIds([...I]['slice'](0x0,0xf),e),f)??[];for(const aW of aV){const aX=fld(aW,'object');if(!aX)continue;H['push']({'address':aX,'voters':[],'bound_services':[]});}H['length']>0x0&&f['push']('Arbitration\x20voting-guard\x20member\x20resolution\x20is\x20not\x20implemented\x20yet\x20—\x20arbitration_delegation\x20edges\x20list\x20the\x20arbitration\x20bindings\x20without\x20individual\x20voters.');}const J={'anchor':g,'permissions':j,'machines':F,'orders':z,'demands':B,'allocations':C,'contacts':E,'arbitrations':H,'service_owners':A},K=deriveRelationshipProfile(J),L=new Set();if(C['length']>0x0)L['add']('Allocation');if(B['length']>0x0)L['add']('Demand');if(F['some'](aY=>(aY['forwards']??[])['some'](aZ=>aZ['guard'])))L['add']('MachineForward');if(H['length']>0x0)L['add']('Arbitration');for(const aY of L){const aZ=GUARD_BINDING_REGISTRY['filter'](b1=>b1['object']===aY);if(aZ['length']===0x0)continue;const b0=aZ['map'](b1=>{const b2=b1['preset_kind']==='amount'&&b1['object']==='Allocation'?'\x20(Rate\x20is\x20basis\x20points;\x20rates\x20must\x20complete\x2010000\x20unless\x20a\x20Surplus\x20entry\x20exists)':'';return''+b1['slot']+b2+'\x20['+b1['preset_kind']+']\x20—\x20creator:\x20'+b1['creator']['split']('\x20—\x20')[0x0]['split']('.\x20')[0x0]+';\x20user:\x20'+b1['user'];})['join']('\x20|\x20');K['notes']['push']('Guard-preset\x20deep\x20context\x20on\x20the\x20'+aY+'(s)\x20in\x20this\x20topology:\x20'+b0+'.');}C['length']>0x0&&K['notes']['push']('Cognition\x20fixed:\x20'+OWNER_RECEIVE_COGNITION);const M=['Permission'];if(z['length']>0x0)M['push']('Order');if(F['length']>0x0)M['push']('Machine','Progress');if(C['length']>0x0)M['push']('Allocation','Payment');if(B['length']>0x0)M['push']('Demand');if(H['length']>0x0)M['push']('Arbitration','Arb');if(E['length']>0x0)M['push']('Contact');if(Object['keys'](A)['length']>0x0)M['push']('Service','Guard');const N=detectBridgesForObjects(M);if(N['length']>0x0){const b1=N['slice'](0x0,0x8)['map'](b2=>summarizeBridge(b2))['join']('\x0a-\x20');K['notes']['push']('Scenario\x20topology\x20('+N['length']+'\x20bridge(s)\x20implied\x20by\x20the\x20touched\x20objects\x20—\x20capability\x20comes\x20from\x20the\x20\x22\x20+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22integration,\x20not\x20from\x20any\x20single\x20object):\x0a-\x20'+b1);}const O=b['relation_kinds']?new Set(b['relation_kinds']):undefined,P=O?K['edges']['filter'](b2=>O['has'](b2['kind'])):K['edges'],Q=P['reduce']((b2,b3)=>{return b2[b3['kind']]=(b2[b3['kind']]??0x0)+0x1,b2;},{});let R=g+'\x20holds\x20'+P['length']+'\x20relationship\x20edge(s)\x20across\x20'+Object['keys'](K['by_counterparty'])['length']+'\x20counterparty(ies)'+(Object['keys'](Q)['length']>0x0?':\x20'+Object['entries'](Q)['map'](([b2,b3])=>b2+'×'+b3)['join'](',\x20')+'.':'.');return P['length']===0x0&&f['length']>0x0&&(R+='\x20No\x20edges\x20derived\x20—\x20check\x20data_gaps\x20(the\x20account\x20may\x20have\x20no\x20on-chain\x20power\x20carriers\x20on\x20this\x20network).'),{'action':'relationship_profile','account':g,'edges':P,'by_counterparty':K['by_counterparty'],'notes':K['notes'],'data_gaps':f,'summary':R};}
1
+ import{LocalMark,objectTypeFromAddress,queryOrdersByUser}from'@wowok/wowok';import{batchQueryObjectsByIds,batchQueryTableItems,fetchEntityPermission,fetchObjectLinkerCore,fetchObjectLinkerTx,fetchServiceOrders}from'../../knowledge/workflow-guidance.js';import{deriveRelationshipProfile}from'../../relationship/index.js';import{analyzeDemanderInterest}from'../../participation/demander-interest.js';import{GUARD_BINDING_REGISTRY,OWNER_RECEIVE_COGNITION}from'../../knowledge/guard-bindings.js';import{detectBridgesForObjects,summarizeBridge}from'../../knowledge/scenario-topology.js';import{fetchMachineNodes}from'./machine-nodes.js';const MAX_MANAGED_PER_PERMISSION=0x3c,MAX_ORDERS=0x28,MAX_DEMANDS=0x14,MAX_ALLOCATIONS=0x28;function fld(a,b){return a?.[b]??a?.['data']?.[b];}async function resolveAddress(a,b){if(/^0x[0-9a-fA-F]{4,}$/i['test'](a))return a;const c=await LocalMark['Instance']()['get_address'](a);if(!c)throw new Error('Cannot\x20resolve\x20'+b+'\x20\x27'+a+'\x27\x20—\x20not\x20a\x20valid\x20address\x20and\x20no\x20LocalMark\x20entry\x20found.\x20'+'Pass\x20the\x200x\x20address\x20directly\x20or\x20register\x20it\x20via\x20local_mark_operation.');return c;}async function safe(a,b,c){try{return await b();}catch(d){return c['push'](a+':\x20'+d['message']),undefined;}}export async function handleRelationshipProfile(b){if(!b['radar_account'])throw new Error('\x27radar_account\x27\x20is\x20required\x20for\x20relationship_profile');const e=b['context_network']??'testnet',f=[],g=await resolveAddress(b['radar_account'],'radar_account'),h=await safe('entity_permission\x20'+g,()=>fetchEntityPermission(g,e),f),i=[...new Set((h?.['items']??[])['map'](V=>typeof V?.['permission']==='string'?V['permission']:undefined)['filter'](V=>!!V))]['slice'](0x0,0x19),j=[],k=new Map();if(i['length']>0x0){const V=await safe('permissions\x20query',()=>batchQueryObjectsByIds(i,e),f)??[];for(const W of V){const X=fld(W,'object');if(!X)continue;j['push']({'address':X,'owner':fld(W,'owner')??'','admins':(fld(W,'admin')??[])['filter'](Y=>typeof Y==='string'),'entities':[]});}await Promise['all'](i['map'](async Y=>{const Z=await safe('permission\x20table\x20'+Y,()=>batchQueryTableItems(Y,{'network':e}),f);if(!Z)return;const a0=j['find'](a1=>a1['address']['toLowerCase']()===Y['toLowerCase']());if(!a0)return;for(const a1 of Z['items']){const a2=a1['object'];if(a2?.['type']&&!String(a2['type'])['includes']('PermissionPerm'))continue;const a3=fld(a2,'address');if(!a3)continue;const a4=fld(a2,'perm')??[],a5=a4['map'](a6=>typeof a6==='number'?a6:typeof a6?.['index']==='number'?a6['index']:null)['filter'](a6=>a6!==null);a0['entities']['push']({'address':a3,'perm_indices':a5});}}));for(const Y of i){const [Z,a0]=await Promise['all']([safe('object_linker_core\x20'+Y,()=>fetchObjectLinkerCore(Y,e),f),safe('object_linker_tx\x20'+Y,()=>fetchObjectLinkerTx(Y,e),f)]),a1=[...(Z?.['items']??[])['map'](a2=>a2?.['who']),...(a0?.['items']??[])['map'](a2=>a2?.['who'])]['filter'](a2=>typeof a2==='string'&&!!a2);for(const a2 of a1['slice'](0x0,MAX_MANAGED_PER_PERMISSION)){if(!k['has'](a2['toLowerCase']())){const a3=objectTypeFromAddress(a2);if(a3)k['set'](a2['toLowerCase'](),a3);}}}}const l=a4=>[...k['entries']()]['filter'](([a5,a6])=>a6===a4)['map'](([a5])=>a5),m=l('service'),n=l('demand')['slice'](0x0,MAX_DEMANDS),q=l('contact'),u=l('arbitration'),w=new Map(),x=await safe('orders\x20by\x20user\x20'+g,()=>queryOrdersByUser({'address':g,'network':e}),f);for(const a4 of x??[]){const a5=a4?.['order']?.['object'];typeof a5==='string'&&a5&&w['set'](a5['toLowerCase'](),'buyer');}for(const a6 of m){const a7=await safe('service\x20orders\x20'+a6,()=>fetchServiceOrders(a6,e),f);for(const a8 of a7?.['items']??[]){typeof a8?.['who']==='string'&&a8['who']&&w['set'](a8['who']['toLowerCase'](),'merchant');}}const y=[...w['keys']()]['slice'](0x0,MAX_ORDERS),z=[],A={};if(y['length']>0x0){const a9=await safe('orders\x20query',()=>batchQueryObjectsByIds(y,e),f)??[],aa=new Set();for(const ae of a9){const af=fld(ae,'object');if(!af)continue;z['push']({'address':af,'owner':fld(ae,'owner')??'','agents':(fld(ae,'agent')??[])['filter'](ah=>typeof ah==='string'),'service':fld(ae,'service')??'','amount':fld(ae,'amount')??undefined,'allocation':fld(ae,'allocation')??undefined,'dispute_arbitrations':(fld(ae,'dispute')??[])['filter'](ah=>typeof ah==='string'),'claimed_by':fld(ae,'claimed_by')??null});const ag=fld(ae,'service');if(ag)aa['add'](ag);}const ab=await safe('order\x20services\x20query',()=>batchQueryObjectsByIds([...aa],e),f)??[],ac=new Map();for(const ah of ab){const ai=fld(ah,'object'),aj=fld(ah,'permission');if(ai&&aj)ac['set'](ai['toLowerCase'](),aj);}const ad=[...new Set([...ac['values']()])];if(ad['length']>0x0){const ak=await safe('service\x20permissions\x20query',()=>batchQueryObjectsByIds(ad,e),f)??[],al=new Map();for(const am of ak){const an=fld(am,'object'),ao=fld(am,'owner');if(an&&ao)al['set'](an['toLowerCase'](),ao);}for(const [ap,aq]of ac){const ar=al['get'](aq['toLowerCase']());if(ar)A[ap]=ar;}}}const B=[];for(const as of n){const at=await safe('demand\x20'+as,()=>batchQueryObjectsByIds([as],e),f)??[],au=at[0x0],av=fld(au,'permission');let aw='';if(av){const aB=await safe('demand\x20permission\x20'+av,()=>batchQueryObjectsByIds([av],e),f)??[];aw=fld(aB[0x0],'owner')??'';}const ax=[],ay=await safe('demand\x20presenters\x20'+as,()=>batchQueryTableItems(as,{'network':e}),f);if(ay)for(const aC of ay['items']){const aD=aC['object'];if(!aD?.['type']||!String(aD['type'])['includes']('Present'))continue;const aE=fld(aD,'address')??aC['objectId'],aF=fld(aD,'value')??aD;ax['push']({'address':typeof aE==='string'?aE:aC['objectId'],'service':typeof aF?.['service']==='string'?aF['service']:undefined,'acceptance_score':typeof aF?.['acceptance_score']==='number'?aF['acceptance_score']:undefined});}const az=(fld(au,'rewards')??[])['filter'](aG=>typeof aG==='string'),aA=(fld(au,'guards')??[])['map'](aG=>typeof aG==='string'?aG:fld(aG,'guard'))['filter'](aG=>typeof aG==='string');B['push']({'address':as,'owner':aw,'presenters':ax,'rewards':az,'guards':aA});}const C=[],D=[...new Set(z['map'](aG=>aG['allocation'])['filter'](aG=>!!aG))]['slice'](0x0,MAX_ALLOCATIONS);if(D['length']>0x0){const aG=await safe('allocations\x20query',()=>batchQueryObjectsByIds(D,e),f)??[];for(const aH of aG){const aI=fld(aH,'object');if(!aI)continue;const aJ=fld(aH,'allocators')??aH,aK=Array['isArray'](aJ)?aJ:Array['isArray'](aJ?.['allocators'])?aJ['allocators']:[],aL=aK['flatMap'](aM=>(aM?.['sharing']??[])['map'](aN=>({'who':aN?.['who']??aN,'mode':aN?.['mode']===0x1||aN?.['mode']==='Rate'?'Rate':aN?.['mode']===0x2||aN?.['mode']==='Surplus'?'Surplus':'Amount','sharing':aN?.['sharing']!=null?String(aN['sharing']):undefined,'guard':typeof aM?.['guard']==='string'?aM['guard']:undefined})));C['push']({'address':aI,'owner':fld(aH,'owner')??'','sharing':aL});}}const E=[];if(q['length']>0x0){const aM=await safe('contacts\x20query',()=>batchQueryObjectsByIds(q['slice'](0x0,0x14),e),f)??[];for(const aN of aM){const aO=fld(aN,'object');if(!aO)continue;const aP=fld(aN,'permission');let aQ='';if(aP){const aS=await safe('contact\x20permission\x20'+aP,()=>batchQueryObjectsByIds([aP],e),f)??[];aQ=fld(aS[0x0],'owner')??'';}const aR=(fld(aN,'ims')??[])['map'](aT=>typeof aT==='string'?aT:aT?.['at'])['filter'](aT=>typeof aT==='string');E['push']({'address':aO,'ims':aR,'owner':aQ});}}const F=[],G=l('machine')['slice'](0x0,0xa);for(const aT of G){const [aU,aV]=await Promise['all']([safe('machine\x20'+aT,()=>batchQueryObjectsByIds([aT],e),f),safe('machine\x20nodes\x20'+aT,()=>fetchMachineNodes(aT,e),f)]),aW=aU?.[0x0]?fld(aU[0x0],'permission'):undefined,aX=(aV??[])['flatMap'](aY=>(Array['isArray'](aY['value'])?aY['value']:[])['flatMap'](aZ=>(aZ['forwards']??[])['map'](b0=>({'node':aZ['prev_node']??aY['name'],'next_node':aY['name'],'forward_name':b0['name'],'named_operator':b0['namedOperator']??null,'permission_index':b0['permissionIndex']??null,'guard':typeof b0['guard']==='string'?b0['guard']:b0['guard']?.['guard']??null}))));F['push']({'address':aT,'permission_address':aW,'forwards':aX});}const H=[],I=new Map();for(const aY of z){const aZ=w['get'](aY['address']['toLowerCase']())??'buyer';for(const b0 of aY['dispute_arbitrations']??[])I['set'](b0['toLowerCase'](),{'order':aY['address'],'side':aZ});}const J=new Set(u);for(const b1 of I['keys']())J['add'](b1);if(J['size']>0x0){const b2=await safe('arbitrations\x20query',()=>batchQueryObjectsByIds([...J]['slice'](0x0,0xf),e),f)??[];let b3=0x0;for(const b4 of b2){const b5=fld(b4,'object');if(!b5)continue;const b6=I['get'](b5['toLowerCase']());if(b6){const b7=(fld(b4,'voted')??[])['map'](b8=>({'address':typeof b8?.['voter']==='string'?b8['voter']:'','weight':typeof b8?.['weight']==='number'?b8['weight']:undefined}))['filter'](b8=>b8['address']['length']>0x0);H['push']({'address':b5,'object_kind':'case','voters':b7,'order':fld(b4,'order')??b6['order'],'arbitration':fld(b4,'arbitration')??undefined,'anchor_side':b6['side'],'bound_services':[]});}else b3++,H['push']({'address':b5,'object_kind':'service','voters':[],'bound_services':[]});}b3>0x0&&f['push']('Arbitration\x20service\x20voting-guard\x20member\x20resolution\x20is\x20not\x20implemented\x20yet\x20—\x20arbitration\x20services\x20contribute\x20binding\x20presence\x20only\x20(Arb\x20CASE\x20votes\x20ARE\x20parsed\x20into\x20arbitration_delegation/dispute_resolution\x20edges).');}const K={'anchor':g,'permissions':j,'machines':F,'orders':z,'demands':B,'allocations':C,'contacts':E,'arbitrations':H,'service_owners':A},L=deriveRelationshipProfile(K),M=new Set();if(C['length']>0x0)M['add']('Allocation');if(B['length']>0x0)M['add']('Demand');if(F['some'](b8=>(b8['forwards']??[])['some'](b9=>b9['guard'])))M['add']('MachineForward');if(H['length']>0x0)M['add']('Arbitration');for(const b8 of M){const b9=GUARD_BINDING_REGISTRY['filter'](bb=>bb['object']===b8);if(b9['length']===0x0)continue;const ba=b9['map'](bb=>{const bc=bb['preset_kind']==='amount'&&bb['object']==='Allocation'?'\x20(Rate\x20is\x20basis\x20points;\x20rates\x20must\x20complete\x2010000\x20unless\x20a\x20Surplus\x20entry\x20exists)':'';return''+bb['slot']+bc+'\x20['+bb['preset_kind']+']\x20—\x20creator:\x20'+bb['creator']['split']('\x20—\x20')[0x0]['split']('.\x20')[0x0]+';\x20user:\x20'+bb['user'];})['join']('\x20|\x20');L['notes']['push']('Guard-preset\x20deep\x20context\x20on\x20the\x20'+b8+'(s)\x20in\x20this\x20topology:\x20'+ba+'.');}C['length']>0x0&&L['notes']['push']('Cognition\x20fixed:\x20'+OWNER_RECEIVE_COGNITION);const N=['Permission'];if(z['length']>0x0)N['push']('Order');if(F['length']>0x0)N['push']('Machine','Progress');if(C['length']>0x0)N['push']('Allocation','Payment');if(B['length']>0x0)N['push']('Demand');if(H['length']>0x0)N['push']('Arbitration','Arb');if(E['length']>0x0)N['push']('Contact');if(Object['keys'](A)['length']>0x0)N['push']('Service','Guard');const O=detectBridgesForObjects(N);if(O['length']>0x0){const bb=O['slice'](0x0,0x8)['map'](bc=>summarizeBridge(bc))['join']('\x0a-\x20');L['notes']['push']('Scenario\x20topology\x20('+O['length']+'\x20bridge(s)\x20implied\x20by\x20the\x20touched\x20objects\x20—\x20capability\x20comes\x20from\x20the\x20\x22\x20+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22integration,\x20not\x20from\x20any\x20single\x20object):\x0a-\x20'+bb);}const P=b['relation_kinds']?new Set(b['relation_kinds']):undefined,Q=P?L['edges']['filter'](bc=>P['has'](bc['kind'])):L['edges'],R=Q['reduce']((bc,bd)=>{return bc[bd['kind']]=(bc[bd['kind']]??0x0)+0x1,bc;},{});let S=g+'\x20holds\x20'+Q['length']+'\x20relationship\x20edge(s)\x20across\x20'+Object['keys'](L['by_counterparty'])['length']+'\x20counterparty(ies)'+(Object['keys'](R)['length']>0x0?':\x20'+Object['entries'](R)['map'](([bc,bd])=>bc+'×'+bd)['join'](',\x20')+'.':'.');Q['length']===0x0&&f['length']>0x0&&(S+='\x20No\x20edges\x20derived\x20—\x20check\x20data_gaps\x20(the\x20account\x20may\x20have\x20no\x20on-chain\x20power\x20carriers\x20on\x20this\x20network).');const T=(bc,bd)=>bc['toLowerCase']()===bd['toLowerCase'](),U=B['filter'](bc=>bc['owner']&&T(bc['owner'],g))['map'](bc=>({'demand':bc['address'],...analyzeDemanderInterest({'account':g,'demand':bc['address'],'presenters':bc['presenters']??[],'rewards':(bc['rewards']??[])['map'](bd=>({'address':bd})),'guards':bc['guards']??[],'open':!(bc['presenters']??[])['some'](bd=>bd['acceptance_score']!==undefined)})}));return U['length']>0x0&&(S+='\x20Anchor\x20demands\x20'+U['length']+'\x20demand(s)\x20—\x20demander-interest\x20analysis\x20attached.'),{'action':'relationship_profile','account':g,'edges':Q,'by_counterparty':L['by_counterparty'],'notes':L['notes'],'data_gaps':f,'summary':S,...U['length']>0x0?{'demander_interest':U}:{}};}
@@ -44,6 +44,8 @@ export interface DemandFacts {
44
44
  service?: string;
45
45
  acceptance_score?: number;
46
46
  }>;
47
+ rewards?: string[];
48
+ guards?: string[];
47
49
  }
48
50
  export interface AllocationFacts {
49
51
  address: string;
@@ -68,10 +70,14 @@ export interface ContactFacts {
68
70
  }
69
71
  export interface ArbitrationFacts {
70
72
  address: string;
73
+ object_kind?: "case" | "service";
71
74
  voters?: Array<{
72
75
  address: string;
73
76
  weight?: number;
74
77
  }>;
78
+ order?: string;
79
+ arbitration?: string;
80
+ anchor_side?: "buyer" | "merchant";
75
81
  bound_services?: string[];
76
82
  }
77
83
  export interface RelationshipInput {
@@ -1 +1 @@
1
- import{RELATIONSHIP_KIND_REGISTRY,interestHintsFor}from'./registry.js';function eq(c,d){return c['toLowerCase']()===d['toLowerCase']();}function isAddressLike(a){return/^0x[0-9a-fA-F]{4,}$/i['test'](a);}function edge(a,b,c,d,e,f=[]){return{'anchor':a,'counterparty':b,'kind':c,'power':e,'interest':d,'value_flows':f,'tension':RELATIONSHIP_KIND_REGISTRY[c]['tension']};}function pushEdge(a,b){const c=b['counterparty']['toLowerCase']()+'|'+b['kind'],d=a['get'](c);if(d){d['power']['objects']['push'](...b['power']['objects']),d['value_flows']['push'](...b['value_flows']);b['power']['perm_indices']['length']>0x0&&(d['power']['perm_indices']=[...new Set([...d['power']['perm_indices'],...b['power']['perm_indices']])]);return;}a['set'](c,b);}export function deriveRelationshipProfile(a){const b=a['anchor'],c=new Map(),d=[],f=a['service_owners']??{};for(const i of a['permissions']??[]){const j=eq(i['owner'],b),k=i['admins']['some'](m=>eq(m,b)),l=i['entities']['find'](m=>eq(m['address'],b));if(j||k)for(const m of i['entities']){if(eq(m['address'],b))continue;const n='employment';pushEdge(c,edge(b,m['address'],n,interestHintsFor(n,!![]),{'role_bits':(j?0x1:0x0)|(k?0x2:0x0),'perm_indices':[],'objects':(i['managed_objects']??[])['map'](p=>({'object_type':p['object_type'],'address':p['address'],'capacity':'merchant-side\x20authority'})),'carrier':'permission'}));}else{if(l)for(const o of[i['owner'],...i['admins']]){if(!o||eq(o,b))continue;const p='employment';pushEdge(c,edge(b,o,p,interestHintsFor(p,![]),{'role_bits':0x4,'perm_indices':l['perm_indices'],'objects':(i['managed_objects']??[])['map'](q=>({'object_type':q['object_type'],'address':q['address'],'capacity':'entity\x20(perm\x20indices:\x20'+(l['perm_indices']['join'](',\x20')||'none')+')'})),'carrier':'permission'}));}}}for(const q of a['machines']??[]){for(const r of q['forwards']??[]){const t=r['named_operator'];if(!t||eq(t,b))continue;const u='process_operation';isAddressLike(t)?pushEdge(c,edge(b,t,u,interestHintsFor(u,!![]),{'role_bits':0x0,'perm_indices':[],'objects':[{'object_type':'Machine','address':q['address'],'capacity':r['node']+'\x20→\x20'+r['next_node']+'\x20('+r['forward_name']+')\x20named\x20operator'}],'carrier':'machine_forward'})):d['push']('Machine\x20'+q['address']+'\x20forward\x20\x27'+r['forward_name']+'\x27\x20('+r['node']+'\x20→\x20'+r['next_node']+')\x20has\x20named\x20operator\x20\x27'+t+'\x27\x20—\x20named\x20operators\x20resolve\x20per-order\x20via\x20the\x20Progress\x20namedOperator\x20table,\x20so\x20no\x20static\x20edge\x20is\x20derived.');}}for(const v of a['orders']??[]){const w=eq(v['owner'],b),x=v['agents']['some'](A=>eq(A,b)),y=v['service_owner']??f[v['service']],z='transaction';if((w||x)&&y){const A=[];v['amount']&&v['amount']!=='0'&&A['push']({'from':w?b:v['owner'],'to':y,'carrier_object':v['address'],'carrier_type':v['allocation']?'Order\x20→\x20Allocation':'Order\x20(escrow)','amount':v['amount'],'trigger':'workflow\x20reaches\x20a\x20completion\x20terminal\x20(guard-gated)'});const B=edge(b,y,z,interestHintsFor(z,!![]),{'role_bits':w?0x1:0x2,'perm_indices':[],'objects':[{'object_type':'Order','address':v['address'],'capacity':w?'buyer\x20(owner)':'buyer\x27s\x20agent'}],'carrier':'order'},A);v['dispute_arbitrations']?.['length']&&B['power']['objects']['push']({'object_type':'Arbitration','address':v['dispute_arbitrations']['join'](',\x20'),'capacity':'bound\x20dispute\x20paths'}),pushEdge(c,B);}else y&&eq(y,b)&&pushEdge(c,edge(b,v['owner'],z,interestHintsFor(z,![]),{'role_bits':0x4,'perm_indices':[],'objects':[{'object_type':'Order','address':v['address'],'capacity':'merchant\x20side\x20(service)'}],'carrier':'order'},v['amount']&&v['amount']!=='0'?[{'from':v['owner'],'to':b,'carrier_object':v['address'],'carrier_type':v['allocation']?'Order\x20→\x20Allocation':'Order\x20(escrow)','amount':v['amount'],'trigger':'workflow\x20reaches\x20a\x20completion\x20terminal\x20(guard-gated)'}]:[]));if(w)for(const C of v['agents']){if(eq(C,b))continue;const D='agency';pushEdge(c,edge(b,C,D,interestHintsFor(D,!![]),{'role_bits':0x1,'perm_indices':[],'objects':[{'object_type':'Order','address':v['address'],'capacity':'principal'}],'carrier':'order'}));}else{if(x){const E='agency';pushEdge(c,edge(b,v['owner'],E,interestHintsFor(E,![]),{'role_bits':0x2,'perm_indices':[],'objects':[{'object_type':'Order','address':v['address'],'capacity':'agent'}],'carrier':'order'}));}}}for(const F of a['demands']??[]){const G=eq(F['owner'],b);for(const H of F['presenters']??[]){if(eq(H['address'],b)&&G)continue;if(G&&!eq(H['address'],b)){const I='supply',J=edge(b,H['address'],I,interestHintsFor(I,!![]),{'role_bits':0x1,'perm_indices':[],'objects':[{'object_type':'Demand','address':F['address'],'capacity':'presenter\x20(service\x20'+(H['service']??'?')+',\x20score\x20'+(H['acceptance_score']??'n/a')+')'}],'carrier':'demand_presenter'});pushEdge(c,J);}else{if(!G&&eq(H['address'],b)){const K='supply';pushEdge(c,edge(b,F['owner'],K,interestHintsFor(K,![]),{'role_bits':0x4,'perm_indices':[],'objects':[{'object_type':'Demand','address':F['address'],'capacity':'I\x20presented\x20service\x20'+(H['service']??'?')+'\x20(score\x20'+(H['acceptance_score']??'n/a')+')'}],'carrier':'demand_presenter'}));}}}}for(const L of a['allocations']??[]){const M=!!L['owner']&&eq(L['owner'],b),N=(L['sharing']??[])['some'](O=>typeof O['who']==='object'&&'Entity'in O['who']&&eq(O['who']['Entity'],b));if(M)for(const O of L['sharing']??[]){if(typeof O['who']!=='object'||!('Entity'in O['who']))continue;const P=O['who']['Entity'];if(!P||eq(P,b))continue;const Q='value_distribution';pushEdge(c,edge(b,P,Q,interestHintsFor(Q,!![]),{'role_bits':0x1,'perm_indices':[],'objects':[{'object_type':'Allocation','address':L['address'],'capacity':'payer\x20/\x20allocation\x20owner'}],'carrier':'allocation_sharing'},[{'from':b,'to':P,'carrier_object':L['address'],'carrier_type':'Allocation\x20Sharing\x20('+O['mode']+(O['sharing']?'\x20'+O['sharing']:'')+')','trigger':O['guard']?'guard\x20'+O['guard']+'\x20passes':'allocator\x20guard\x20passes'}]));}else{if(N&&L['owner']&&!eq(L['owner'],b)){const R='value_distribution';pushEdge(c,edge(b,L['owner'],R,interestHintsFor(R,![]),{'role_bits':0x4,'perm_indices':[],'objects':[{'object_type':'Allocation','address':L['address'],'capacity':'declared\x20recipient'}],'carrier':'allocation_sharing'},[{'from':L['owner'],'to':b,'carrier_object':L['address'],'carrier_type':'Allocation\x20Sharing','trigger':'allocator\x20guard\x20passes'}]));}}for(const S of L['sharing']??[]){if(typeof S['who']==='object'&&'Signer'in S['who'])d['push']('Allocation\x20'+L['address']+'\x20has\x20a\x20Signer\x20recipient\x20('+S['mode']+')\x20—\x20value\x20flows\x20to\x20the\x20account\x20that\x20executes\x20the\x20guard-gated\x20alloc\x20call,\x20not\x20to\x20a\x20fixed\x20counterparty.');else typeof S['who']==='object'&&'GuardIdentifier'in S['who']&&d['push']('Allocation\x20'+L['address']+'\x20has\x20a\x20GuardIdentifier\x20recipient\x20('+S['mode']+')\x20—\x20the\x20recipient\x20address\x20is\x20resolved\x20from\x20a\x20guard\x20submission\x20at\x20alloc\x20time,\x20not\x20statically.');}}for(const T of a['arbitrations']??[]){for(const U of T['voters']??[]){if(eq(U['address'],b))continue;const V='arbitration_delegation';pushEdge(c,edge(b,U['address'],V,interestHintsFor(V,!![]),{'role_bits':0x1,'perm_indices':[],'objects':[{'object_type':'Arbitration','address':T['address'],'capacity':'bound\x20arbitration\x20(voter\x20weight\x20'+(U['weight']??'n/a')+')'}],'carrier':'arbitration_binding'}));}}for(const W of a['contacts']??[]){const X=eq(W['owner'],b);for(const Y of W['ims']){if(eq(Y,b))continue;const Z='contact_membership';pushEdge(c,edge(b,Y,Z,interestHintsFor(Z,X),{'role_bits':X?0x1:0x4,'perm_indices':[],'objects':[{'object_type':'Contact','address':W['address'],'capacity':X?'contact\x20owner':'IM\x20member'}],'carrier':'contact_im'}));}}const g=[...c['values']()],h={};for(const a0 of g){const a1=a0['counterparty']['toLowerCase']();(h[a1]??=[])['push'](a0['kind']);}for(const a2 of new Set(g['map'](a3=>a3['kind']))){const a3=RELATIONSHIP_KIND_REGISTRY[a2];a3?.['tension']&&d['push'](a2+':\x20anchor('+a3['anchor_role']+')\x20wants\x20\x22'+a3['tension']['anchor_goal']+'\x22;\x20counterparty('+a3['counterparty_role']+')\x20wants\x20\x22'+a3['tension']['counterparty_goal']+'\x22.\x20Divergence:\x20'+a3['tension']['divergence']);}return{'anchor':b,'edges':g,'by_counterparty':h,'notes':d};}
1
+ import{RELATIONSHIP_KIND_REGISTRY,interestHintsFor}from'./registry.js';function eq(c,d){return c['toLowerCase']()===d['toLowerCase']();}function isAddressLike(a){return/^0x[0-9a-fA-F]{4,}$/i['test'](a);}function edge(a,b,c,d,e,f=[]){return{'anchor':a,'counterparty':b,'kind':c,'power':e,'interest':d,'value_flows':f,'tension':RELATIONSHIP_KIND_REGISTRY[c]['tension']};}function pushEdge(a,b){const c=b['counterparty']['toLowerCase']()+'|'+b['kind'],d=a['get'](c);if(d){d['power']['objects']['push'](...b['power']['objects']),d['value_flows']['push'](...b['value_flows']);b['power']['perm_indices']['length']>0x0&&(d['power']['perm_indices']=[...new Set([...d['power']['perm_indices'],...b['power']['perm_indices']])]);return;}a['set'](c,b);}export function deriveRelationshipProfile(a){const b=a['anchor'],c=new Map(),d=[],f=a['service_owners']??{};for(const i of a['permissions']??[]){const j=eq(i['owner'],b),k=i['admins']['some'](m=>eq(m,b)),l=i['entities']['find'](m=>eq(m['address'],b));if(j||k)for(const m of i['entities']){if(eq(m['address'],b))continue;const n='employment';pushEdge(c,edge(b,m['address'],n,interestHintsFor(n,!![]),{'role_bits':(j?0x1:0x0)|(k?0x2:0x0),'perm_indices':[],'objects':(i['managed_objects']??[])['map'](p=>({'object_type':p['object_type'],'address':p['address'],'capacity':'merchant-side\x20authority'})),'carrier':'permission'}));}else{if(l)for(const o of[i['owner'],...i['admins']]){if(!o||eq(o,b))continue;const p='employment';pushEdge(c,edge(b,o,p,interestHintsFor(p,![]),{'role_bits':0x4,'perm_indices':l['perm_indices'],'objects':(i['managed_objects']??[])['map'](q=>({'object_type':q['object_type'],'address':q['address'],'capacity':'entity\x20(perm\x20indices:\x20'+(l['perm_indices']['join'](',\x20')||'none')+')'})),'carrier':'permission'}));}}}for(const q of a['machines']??[]){for(const r of q['forwards']??[]){const t=r['named_operator'];if(!t||eq(t,b))continue;const u='process_operation';isAddressLike(t)?pushEdge(c,edge(b,t,u,interestHintsFor(u,!![]),{'role_bits':0x0,'perm_indices':[],'objects':[{'object_type':'Machine','address':q['address'],'capacity':r['node']+'\x20→\x20'+r['next_node']+'\x20('+r['forward_name']+')\x20named\x20operator'}],'carrier':'machine_forward'})):d['push']('Machine\x20'+q['address']+'\x20forward\x20\x27'+r['forward_name']+'\x27\x20('+r['node']+'\x20→\x20'+r['next_node']+')\x20has\x20named\x20operator\x20\x27'+t+'\x27\x20—\x20named\x20operators\x20resolve\x20per-order\x20via\x20the\x20Progress\x20namedOperator\x20table,\x20so\x20no\x20static\x20edge\x20is\x20derived.');}}for(const v of a['orders']??[]){const w=eq(v['owner'],b),x=v['agents']['some'](A=>eq(A,b)),y=v['service_owner']??f[v['service']],z='transaction';if((w||x)&&y){const A=[];v['amount']&&v['amount']!=='0'&&A['push']({'from':w?b:v['owner'],'to':y,'carrier_object':v['address'],'carrier_type':v['allocation']?'Order\x20→\x20Allocation':'Order\x20(escrow)','amount':v['amount'],'trigger':'workflow\x20reaches\x20a\x20completion\x20terminal\x20(guard-gated)'});const B=edge(b,y,z,interestHintsFor(z,!![]),{'role_bits':w?0x1:0x2,'perm_indices':[],'objects':[{'object_type':'Order','address':v['address'],'capacity':w?'buyer\x20(owner)':'buyer\x27s\x20agent'}],'carrier':'order'},A);v['dispute_arbitrations']?.['length']&&B['power']['objects']['push']({'object_type':'Arbitration','address':v['dispute_arbitrations']['join'](',\x20'),'capacity':'bound\x20dispute\x20paths'}),pushEdge(c,B);}else y&&eq(y,b)&&pushEdge(c,edge(b,v['owner'],z,interestHintsFor(z,![]),{'role_bits':0x4,'perm_indices':[],'objects':[{'object_type':'Order','address':v['address'],'capacity':'merchant\x20side\x20(service)'}],'carrier':'order'},v['amount']&&v['amount']!=='0'?[{'from':v['owner'],'to':b,'carrier_object':v['address'],'carrier_type':v['allocation']?'Order\x20→\x20Allocation':'Order\x20(escrow)','amount':v['amount'],'trigger':'workflow\x20reaches\x20a\x20completion\x20terminal\x20(guard-gated)'}]:[]));if(w)for(const C of v['agents']){if(eq(C,b))continue;const D='agency';pushEdge(c,edge(b,C,D,interestHintsFor(D,!![]),{'role_bits':0x1,'perm_indices':[],'objects':[{'object_type':'Order','address':v['address'],'capacity':'principal'}],'carrier':'order'}));}else{if(x){const E='agency';pushEdge(c,edge(b,v['owner'],E,interestHintsFor(E,![]),{'role_bits':0x2,'perm_indices':[],'objects':[{'object_type':'Order','address':v['address'],'capacity':'agent'}],'carrier':'order'}));}}}for(const F of a['demands']??[]){const G=eq(F['owner'],b);for(const H of F['presenters']??[]){if(eq(H['address'],b)&&G)continue;if(G&&!eq(H['address'],b)){const I='supply',J=edge(b,H['address'],I,interestHintsFor(I,!![]),{'role_bits':0x1,'perm_indices':[],'objects':[{'object_type':'Demand','address':F['address'],'capacity':'presenter\x20(service\x20'+(H['service']??'?')+',\x20score\x20'+(H['acceptance_score']??'n/a')+')'}],'carrier':'demand_presenter'});pushEdge(c,J);}else{if(!G&&eq(H['address'],b)){const K='supply';pushEdge(c,edge(b,F['owner'],K,interestHintsFor(K,![]),{'role_bits':0x4,'perm_indices':[],'objects':[{'object_type':'Demand','address':F['address'],'capacity':'I\x20presented\x20service\x20'+(H['service']??'?')+'\x20(score\x20'+(H['acceptance_score']??'n/a')+')'}],'carrier':'demand_presenter'}));}}}}for(const L of a['allocations']??[]){const M=!!L['owner']&&eq(L['owner'],b),N=(L['sharing']??[])['some'](O=>typeof O['who']==='object'&&'Entity'in O['who']&&eq(O['who']['Entity'],b));if(M)for(const O of L['sharing']??[]){if(typeof O['who']!=='object'||!('Entity'in O['who']))continue;const P=O['who']['Entity'];if(!P||eq(P,b))continue;const Q='value_distribution';pushEdge(c,edge(b,P,Q,interestHintsFor(Q,!![]),{'role_bits':0x1,'perm_indices':[],'objects':[{'object_type':'Allocation','address':L['address'],'capacity':'payer\x20/\x20allocation\x20owner'}],'carrier':'allocation_sharing'},[{'from':b,'to':P,'carrier_object':L['address'],'carrier_type':'Allocation\x20Sharing\x20('+O['mode']+(O['sharing']?'\x20'+O['sharing']:'')+')','trigger':O['guard']?'guard\x20'+O['guard']+'\x20passes':'allocator\x20guard\x20passes'}]));}else{if(N&&L['owner']&&!eq(L['owner'],b)){const R='value_distribution';pushEdge(c,edge(b,L['owner'],R,interestHintsFor(R,![]),{'role_bits':0x4,'perm_indices':[],'objects':[{'object_type':'Allocation','address':L['address'],'capacity':'declared\x20recipient'}],'carrier':'allocation_sharing'},[{'from':L['owner'],'to':b,'carrier_object':L['address'],'carrier_type':'Allocation\x20Sharing','trigger':'allocator\x20guard\x20passes'}]));}}for(const S of L['sharing']??[]){if(typeof S['who']==='object'&&'Signer'in S['who'])d['push']('Allocation\x20'+L['address']+'\x20has\x20a\x20Signer\x20recipient\x20('+S['mode']+')\x20—\x20value\x20flows\x20to\x20the\x20account\x20that\x20executes\x20the\x20guard-gated\x20alloc\x20call,\x20not\x20to\x20a\x20fixed\x20counterparty.');else typeof S['who']==='object'&&'GuardIdentifier'in S['who']&&d['push']('Allocation\x20'+L['address']+'\x20has\x20a\x20GuardIdentifier\x20recipient\x20('+S['mode']+')\x20—\x20the\x20recipient\x20address\x20is\x20resolved\x20from\x20a\x20guard\x20submission\x20at\x20alloc\x20time,\x20not\x20statically.');}}for(const T of a['arbitrations']??[]){for(const U of T['voters']??[]){if(eq(U['address'],b))continue;if(T['anchor_side']!=='buyer'){const V='arbitration_delegation';pushEdge(c,edge(b,U['address'],V,interestHintsFor(V,!![]),{'role_bits':0x1,'perm_indices':[],'objects':[{'object_type':'Arbitration','address':T['address'],'capacity':'bound\x20arbitration\x20(voter\x20weight\x20'+(U['weight']??'n/a')+')'}],'carrier':'arbitration_binding'}));}if(T['object_kind']==='case'){const W='dispute_resolution',X=[{'object_type':'Arb','address':T['address'],'capacity':'dispute\x20case\x20(vote\x20weight\x20'+(U['weight']??'n/a')+')'}];T['order']&&X['push']({'object_type':'Order','address':T['order'],'capacity':'disputed\x20order'}),pushEdge(c,edge(b,U['address'],W,interestHintsFor(W,![]),{'role_bits':0x4,'perm_indices':[],'objects':X,'carrier':'arbitration_binding'}));}}}for(const Y of a['contacts']??[]){const Z=eq(Y['owner'],b);for(const a0 of Y['ims']){if(eq(a0,b))continue;const a1='contact_membership';pushEdge(c,edge(b,a0,a1,interestHintsFor(a1,Z),{'role_bits':Z?0x1:0x4,'perm_indices':[],'objects':[{'object_type':'Contact','address':Y['address'],'capacity':Z?'contact\x20owner':'IM\x20member'}],'carrier':'contact_im'}));}}const g=[...c['values']()],h={};for(const a2 of g){const a3=a2['counterparty']['toLowerCase']();(h[a3]??=[])['push'](a2['kind']);}for(const a4 of new Set(g['map'](a5=>a5['kind']))){const a5=RELATIONSHIP_KIND_REGISTRY[a4];a5?.['tension']&&d['push'](a4+':\x20anchor('+a5['anchor_role']+')\x20wants\x20\x22'+a5['tension']['anchor_goal']+'\x22;\x20counterparty('+a5['counterparty_role']+')\x20wants\x20\x22'+a5['tension']['counterparty_goal']+'\x22.\x20Divergence:\x20'+a5['tension']['divergence']);}return{'anchor':b,'edges':g,'by_counterparty':h,'notes':d};}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ import{describe,expect,it}from'vitest';import{deriveRelationshipProfile}from'./derivation.js';const ANCHOR='0xaaa111',VOTER1='0xbbb222',VOTER2='0xccc333',ARB_CASE='0x1200aa',ORDER='0x1600bb',ARB_SERVICE='0x1300cc';function edgesOf(a,b){return deriveRelationshipProfile(b)['edges']['filter'](c=>c['kind']===a);}describe('deriveRelationshipProfile\x20—\x20arbitration\x20edges\x20(K3-19\x20G1)',()=>{it('merchant-side\x20case:\x20voters\x20produce\x20BOTH\x20delegation\x20and\x20dispute_resolution\x20edges',()=>{const a={'anchor':ANCHOR,'arbitrations':[{'address':ARB_CASE,'object_kind':'case','voters':[{'address':VOTER1,'weight':0x2},{'address':VOTER2,'weight':0x1}],'order':ORDER,'arbitration':ARB_SERVICE,'anchor_side':'merchant'}]},b=edgesOf('arbitration_delegation',a);expect(b)['toHaveLength'](0x2),expect(b['map'](f=>f['counterparty'])['sort']())['toEqual']([VOTER1,VOTER2]['sort']()),expect(b[0x0]['power']['objects'][0x0])['toMatchObject']({'object_type':'Arbitration','address':ARB_CASE});const c=edgesOf('dispute_resolution',a);expect(c)['toHaveLength'](0x2);const d=c['find'](f=>f['counterparty']===VOTER1);expect(d['power']['objects'])['toEqual']([{'object_type':'Arb','address':ARB_CASE,'capacity':'dispute\x20case\x20(vote\x20weight\x202)'},{'object_type':'Order','address':ORDER,'capacity':'disputed\x20order'}]),expect(d['interest']['gains'][0x0])['toMatch'](/indemnity|own-side loss/i);}),it('buyer-side\x20case:\x20dispute_resolution\x20edges\x20only\x20—\x20the\x20buyer\x20never\x20delegates',()=>{const a={'anchor':ANCHOR,'arbitrations':[{'address':ARB_CASE,'object_kind':'case','voters':[{'address':VOTER1,'weight':0x3}],'order':ORDER,'anchor_side':'buyer'}]};expect(edgesOf('arbitration_delegation',a))['toHaveLength'](0x0);const b=edgesOf('dispute_resolution',a);expect(b)['toHaveLength'](0x1),expect(b[0x0]['counterparty'])['toBe'](VOTER1);}),it('arbitration\x20SERVICE\x20without\x20resolved\x20voters:\x20binding\x20presence\x20only,\x20no\x20edges',()=>{const a={'anchor':ANCHOR,'arbitrations':[{'address':ARB_SERVICE,'object_kind':'service','voters':[],'bound_services':[]}]},b=deriveRelationshipProfile(a);expect(b['edges']['filter'](c=>c['kind']==='arbitration_delegation'||c['kind']==='dispute_resolution'))['toHaveLength'](0x0);}),it('the\x20anchor\x27s\x20own\x20vote\x20is\x20skipped\x20(no\x20self\x20edges)',()=>{const a={'anchor':ANCHOR,'arbitrations':[{'address':ARB_CASE,'object_kind':'case','voters':[{'address':ANCHOR,'weight':0x1},{'address':VOTER2}],'order':ORDER,'anchor_side':'merchant'}]},b=deriveRelationshipProfile(a)['edges'];expect(b['every'](c=>c['counterparty']['toLowerCase']()!==ANCHOR['toLowerCase']()))['toBe'](!![]),expect(edgesOf('dispute_resolution',a))['toHaveLength'](0x1),expect(edgesOf('dispute_resolution',a)[0x0]['power']['objects'][0x0]['capacity'])['toContain']('n/a');}),it('legacy\x20facts\x20(no\x20object_kind/anchor_side)\x20still\x20produce\x20delegation\x20edges',()=>{const a={'anchor':ANCHOR,'arbitrations':[{'address':ARB_SERVICE,'voters':[{'address':VOTER1,'weight':0x5}]}]};expect(edgesOf('arbitration_delegation',a))['toHaveLength'](0x1),expect(edgesOf('dispute_resolution',a))['toHaveLength'](0x0);}),it('multiple\x20cases\x20on\x20the\x20same\x20voter\x20merge\x20into\x20ONE\x20edge\x20per\x20(pair,\x20kind)',()=>{const a='0x1200dd',b={'anchor':ANCHOR,'arbitrations':[{'address':ARB_CASE,'object_kind':'case','voters':[{'address':VOTER1,'weight':0x1}],'order':ORDER,'anchor_side':'buyer'},{'address':a,'object_kind':'case','voters':[{'address':VOTER1,'weight':0x2}],'order':'0x1600ee','anchor_side':'buyer'}]},c=edgesOf('dispute_resolution',b);expect(c)['toHaveLength'](0x1),expect(c[0x0]['power']['objects']['filter'](d=>d['object_type']==='Arb'))['toHaveLength'](0x2);});});
@@ -1,5 +1,5 @@
1
- export type { CommercialRole, GamePower, ValuePerspective, RoleModel, } from "./types.js";
1
+ export type { CommercialRole, GamePower, ValuePerspective, ValueProposition, RoleModel, } from "./types.js";
2
2
  export { COMMERCIAL_ROLES } from "./types.js";
3
- export { ROLE_MODELS, gamePowerOf, valuePerspectiveOf, isWeakerParty, isStrongerParty, interestAnalyzerOf, gameStrategyOf, } from "./model.js";
3
+ export { ROLE_MODELS, gamePowerOf, valuePerspectiveOf, isWeakerParty, isStrongerParty, interestAnalyzerOf, gameStrategyOf, valuePropositionOf, } from "./model.js";
4
4
  export { deriveCommercialRole, deriveAllRoles, PERMISSION_RANGES, CORE_PERMISSION_INDEX, type RoleDerivationInput, type DerivedRole, } from "./derivation.js";
5
5
  export { mergeRolePerspective, isOnchainRoleAuthoritative, resolveWatchRole, type RoleMergeResult, type WatchRoleInput, type WatchRole, } from "./resolution.js";
@@ -1 +1 @@
1
- export{COMMERCIAL_ROLES}from'./types.js';export{ROLE_MODELS,gamePowerOf,valuePerspectiveOf,isWeakerParty,isStrongerParty,interestAnalyzerOf,gameStrategyOf}from'./model.js';export{deriveCommercialRole,deriveAllRoles,PERMISSION_RANGES,CORE_PERMISSION_INDEX}from'./derivation.js';export{mergeRolePerspective,isOnchainRoleAuthoritative,resolveWatchRole}from'./resolution.js';
1
+ export{COMMERCIAL_ROLES}from'./types.js';export{ROLE_MODELS,gamePowerOf,valuePerspectiveOf,isWeakerParty,isStrongerParty,interestAnalyzerOf,gameStrategyOf,valuePropositionOf}from'./model.js';export{deriveCommercialRole,deriveAllRoles,PERMISSION_RANGES,CORE_PERMISSION_INDEX}from'./derivation.js';export{mergeRolePerspective,isOnchainRoleAuthoritative,resolveWatchRole}from'./resolution.js';
@@ -1,4 +1,4 @@
1
- import type { CommercialRole, GamePower, RoleModel, ValuePerspective } from "./types.js";
1
+ import type { CommercialRole, GamePower, RoleModel, ValuePerspective, ValueProposition } from "./types.js";
2
2
  export declare const ROLE_MODELS: Record<CommercialRole, RoleModel>;
3
3
  export declare function gamePowerOf(role: CommercialRole): GamePower;
4
4
  export declare function valuePerspectiveOf(role: CommercialRole): ValuePerspective;
@@ -6,3 +6,4 @@ export declare function isWeakerParty(role: CommercialRole): boolean;
6
6
  export declare function isStrongerParty(role: CommercialRole): boolean;
7
7
  export declare function interestAnalyzerOf(role: CommercialRole): string;
8
8
  export declare function gameStrategyOf(role: CommercialRole): string;
9
+ export declare function valuePropositionOf(role: CommercialRole): ValueProposition;
@@ -1 +1 @@
1
- export const ROLE_MODELS={'merchant':{'role':'merchant','power':'strong','interest_analyzer':'merchant-interest','game_strategy':'merchant','value_perspective':'producer'},'customer':{'role':'customer','power':'weak','interest_analyzer':'customer-interest','game_strategy':'customer','value_perspective':'consumer'},'demander':{'role':'demander','power':'weak','interest_analyzer':'demander-interest','game_strategy':'demander','value_perspective':'consumer'},'prospect':{'role':'prospect','power':'weak','interest_analyzer':'preorder','game_strategy':'customer','value_perspective':'consumer'},'supplier':{'role':'supplier','power':'peer','interest_analyzer':'supplier-interest','game_strategy':'supplier','value_perspective':'producer'},'collaborator':{'role':'collaborator','power':'peer','interest_analyzer':'collaborator-interest','game_strategy':'collaborator','value_perspective':'neutral'},'arbitrator':{'role':'arbitrator','power':'neutral','interest_analyzer':'arb_game','game_strategy':'arbitrator','value_perspective':'neutral'},'neutral':{'role':'neutral','power':'neutral','interest_analyzer':'system','game_strategy':'system','value_perspective':'neutral'},'system':{'role':'system','power':'neutral','interest_analyzer':'system','game_strategy':'system','value_perspective':'neutral'}};export function gamePowerOf(a){return ROLE_MODELS[a]['power'];}export function valuePerspectiveOf(a){return ROLE_MODELS[a]['value_perspective'];}export function isWeakerParty(a){return ROLE_MODELS[a]['power']==='weak';}export function isStrongerParty(a){return ROLE_MODELS[a]['power']==='strong';}export function interestAnalyzerOf(a){return ROLE_MODELS[a]['interest_analyzer'];}export function gameStrategyOf(a){return ROLE_MODELS[a]['game_strategy'];}
1
+ export const ROLE_MODELS={'merchant':{'role':'merchant','power':'strong','interest_analyzer':'merchant-interest','game_strategy':'merchant','value_perspective':'producer','value_proposition':{'offers':'a\x20Service\x20(product\x20+\x20Machine\x20workflow)\x20for\x20delivery','seeks':'settlement\x20for\x20the\x20delivered\x20service'}},'customer':{'role':'customer','power':'weak','interest_analyzer':'customer-interest','game_strategy':'customer','value_perspective':'consumer','value_proposition':{'offers':'escrowed\x20payment\x20for\x20the\x20order','seeks':'verified\x20delivery\x20of\x20the\x20purchased\x20service'}},'demander':{'role':'demander','power':'weak','interest_analyzer':'demander-interest','game_strategy':'demander','value_perspective':'consumer','value_proposition':{'offers':'a\x20Demand\x20(opportunity\x20+\x20selection-based\x20award)','seeks':'qualified\x20suppliers\x20to\x20present\x20and\x20fulfill\x20it'}},'prospect':{'role':'prospect','power':'weak','interest_analyzer':'preorder','game_strategy':'customer','value_perspective':'consumer','value_proposition':{'offers':'due-diligence\x20attention\x20and\x20a\x20potential\x20order','seeks':'a\x20trustworthy\x20service\x20worth\x20buying'}},'supplier':{'role':'supplier','power':'peer','interest_analyzer':'supplier-interest','game_strategy':'supplier','value_perspective':'producer','value_proposition':{'offers':'sub-order\x20fulfillment\x20as\x20a\x20peer\x20provider','seeks':'settlement\x20and\x20continued\x20workflow\x20participation'}},'collaborator':{'role':'collaborator','power':'peer','interest_analyzer':'collaborator-interest','game_strategy':'collaborator','value_perspective':'neutral','value_proposition':{'offers':'authorized\x20process\x20operations\x20(advance\x20nodes)','seeks':'participation\x20within\x20their\x20permission\x20scope'}},'arbitrator':{'role':'arbitrator','power':'neutral','interest_analyzer':'arb_game','game_strategy':'arbitrator','value_perspective':'neutral','value_proposition':{'offers':'neutral\x20dispute\x20resolution','seeks':'resolution\x20fees\x20and\x20clean\x20cases'}},'neutral':{'role':'neutral','power':'neutral','interest_analyzer':'system','game_strategy':'system','value_perspective':'neutral','value_proposition':{'offers':'no\x20operative\x20stake','seeks':'objective\x20observation'}},'system':{'role':'system','power':'neutral','interest_analyzer':'system','game_strategy':'system','value_perspective':'neutral','value_proposition':{'offers':'non-human\x20automation\x20(keepers\x20/\x20time\x20guards)','seeks':'deterministic\x20lifecycle\x20advancement'}}};export function gamePowerOf(a){return ROLE_MODELS[a]['power'];}export function valuePerspectiveOf(a){return ROLE_MODELS[a]['value_perspective'];}export function isWeakerParty(a){return ROLE_MODELS[a]['power']==='weak';}export function isStrongerParty(a){return ROLE_MODELS[a]['power']==='strong';}export function interestAnalyzerOf(a){return ROLE_MODELS[a]['interest_analyzer'];}export function gameStrategyOf(a){return ROLE_MODELS[a]['game_strategy'];}export function valuePropositionOf(a){return ROLE_MODELS[a]['value_proposition'];}
@@ -1,11 +1,16 @@
1
1
  export type CommercialRole = "merchant" | "customer" | "demander" | "prospect" | "supplier" | "collaborator" | "arbitrator" | "neutral" | "system";
2
2
  export type GamePower = "strong" | "weak" | "peer" | "neutral";
3
3
  export type ValuePerspective = "producer" | "consumer" | "neutral";
4
+ export interface ValueProposition {
5
+ offers: string;
6
+ seeks: string;
7
+ }
4
8
  export interface RoleModel {
5
9
  role: CommercialRole;
6
10
  power: GamePower;
7
11
  interest_analyzer: string;
8
12
  game_strategy: string;
9
13
  value_perspective: ValuePerspective;
14
+ value_proposition: ValueProposition;
10
15
  }
11
16
  export declare const COMMERCIAL_ROLES: CommercialRole[];
package/dist/rules.d.ts CHANGED
@@ -7,7 +7,7 @@ export { CONFIRMATION_RULES, SAFETY_RULES_VERSION, DEFAULT_AMOUNT_THRESHOLD, get
7
7
  export { distillIntent, extractSignals } from "./experience/intent-distill.js";
8
8
  export type { DistilledIntent } from "./experience/types.js";
9
9
  export { Harness, getHarness, setHarness } from "./harness/index.js";
10
- export type { ODG, ExpectedResult, VerifyReport, RecoveryAction, } from "./harness/types.js";
10
+ export type { ExpectedResult, VerifyReport, RecoveryAction, } from "./harness/types.js";
11
11
  export { getDefaultPreferences, inferPreferences, matchServiceToPreferences, mergePreferences, validatePreferences, SUPPORTED_INDUSTRIES, type IndustryTemplate, type Industry, type PreferenceInference, type ServiceForMatching, type PreferenceMatchResult, } from "./customer/user-preferences.js";
12
12
  export type { UserPreferences } from "./customer/types.js";
13
13
  export declare function buildSoftRulesPrompt(): string;
@@ -1 +1 @@
1
- import{CONFIRMATION_RULES,resolveOverrideId}from'../knowledge/safety-rules.js';import{isEnabled as a325a}from'../config/index.js';import{isPlanPreapproved}from'../goal/plan-approval.js';export function isConfirmGateEnabled(){return a325a('confirm_gate');}const internalErrorCounts={};function logInternalError(a,b){const c=a;internalErrorCounts[c]=(internalErrorCounts[c]??0x0)+0x1;const d=internalErrorCounts[c];console['warn']('[ConfirmGate]\x20internal_error\x20context=\x22'+a+'\x22\x20count='+d+'\x20error='+(b instanceof Error?b['message']:String(b)));}export function getFailMode(a){switch(a){case'irreversible':case'publish':case'amount':return'closed';case'standard':case'none':default:return'open';}}function buildInternalErrorResult(){return{'pass':![],'level':'irreversible','preview':{'level':'irreversible','operation':'unknown','irreversible':!![]},'rule_id':'internal_error'};}export function confirmGate(a,b,c,d,f){if(!isConfirmGateEnabled())return{'pass':!![]};if(c?.['confirmed']===!![])return{'pass':!![]};let g,h=null;try{g=CONFIRMATION_RULES['find'](l=>{try{return l['when'](a,b,c);}catch(m){logInternalError('rule_when:'+l['id'],m);if(getFailMode(l['level'])==='closed')throw m;return![];}});}catch(l){h=l;}if(h)return logInternalError('rule_search',h),buildInternalErrorResult();if(!g)return{'pass':!![]};if(getFailMode(g['level'])==='open'&&isPlanPreapproved(c))return{'pass':!![]};const i=resolveOverrideId(g['id'],a),j=i?f?.[i]:undefined;if(j==='auto')return{'pass':!![]};if(j!=='block'&&g['bypass_on_explicit_intent']&&d&&d['length']>0x0){const m=d['map'](o=>o['toLowerCase']()),n=g['bypass_on_explicit_intent']['some'](o=>m['some'](q=>q['includes'](o['toLowerCase']())));if(n)return{'pass':!![]};}let k;try{k=g['preview'](a,b,c);}catch(o){logInternalError('rule_preview:'+g['id'],o);if(getFailMode(g['level'])==='closed')return buildInternalErrorResult();return{'pass':!![]};}return{'pass':![],'level':g['level'],'preview':k,'rule_id':g['id']};}export function isExplicitlyConfirmed(a){return a?.['confirmed']===!![];}
1
+ import{CONFIRMATION_RULES,resolveOverrideId}from'../knowledge/safety-rules.js';import{isEnabled as a335a}from'../config/index.js';import{isPlanPreapproved}from'../goal/plan-approval.js';export function isConfirmGateEnabled(){return a335a('confirm_gate');}const internalErrorCounts={};function logInternalError(a,b){const c=a;internalErrorCounts[c]=(internalErrorCounts[c]??0x0)+0x1;const d=internalErrorCounts[c];console['warn']('[ConfirmGate]\x20internal_error\x20context=\x22'+a+'\x22\x20count='+d+'\x20error='+(b instanceof Error?b['message']:String(b)));}export function getFailMode(a){switch(a){case'irreversible':case'publish':case'amount':return'closed';case'standard':case'none':default:return'open';}}function buildInternalErrorResult(){return{'pass':![],'level':'irreversible','preview':{'level':'irreversible','operation':'unknown','irreversible':!![]},'rule_id':'internal_error'};}export function confirmGate(a,b,c,d,f){if(!isConfirmGateEnabled())return{'pass':!![]};if(c?.['confirmed']===!![])return{'pass':!![]};let g,h=null;try{g=CONFIRMATION_RULES['find'](l=>{try{return l['when'](a,b,c);}catch(m){logInternalError('rule_when:'+l['id'],m);if(getFailMode(l['level'])==='closed')throw m;return![];}});}catch(l){h=l;}if(h)return logInternalError('rule_search',h),buildInternalErrorResult();if(!g)return{'pass':!![]};if(getFailMode(g['level'])==='open'&&isPlanPreapproved(c))return{'pass':!![]};const i=resolveOverrideId(g['id'],a),j=i?f?.[i]:undefined;if(j==='auto')return{'pass':!![]};if(j!=='block'&&g['bypass_on_explicit_intent']&&d&&d['length']>0x0){const m=d['map'](o=>o['toLowerCase']()),n=g['bypass_on_explicit_intent']['some'](o=>m['some'](q=>q['includes'](o['toLowerCase']())));if(n)return{'pass':!![]};}let k;try{k=g['preview'](a,b,c);}catch(o){logInternalError('rule_preview:'+g['id'],o);if(getFailMode(g['level'])==='closed')return buildInternalErrorResult();return{'pass':!![]};}return{'pass':![],'level':g['level'],'preview':k,'rule_id':g['id']};}export function isExplicitlyConfirmed(a){return a?.['confirmed']===!![];}