@wowok/agent-mcp 3.0.4 → 3.0.6

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 (305) hide show
  1. package/README.md +25 -20
  2. package/dist/customer/account-events.js +1 -1
  3. package/dist/evaluation/path-reasoning.d.ts +4 -2
  4. package/dist/evaluation/path-reasoning.js +1 -1
  5. package/dist/extensions/constraint-registry.d.ts +2 -2
  6. package/dist/extensions/constraint-registry.js +1 -1
  7. package/dist/extensions/custom-registry-file.d.ts +22 -0
  8. package/dist/extensions/custom-registry-file.js +1 -0
  9. package/dist/extensions/index.d.ts +2 -1
  10. package/dist/extensions/index.js +1 -1
  11. package/dist/extensions/industry-pack.d.ts +7 -0
  12. package/dist/extensions/industry-pack.js +1 -1
  13. package/dist/extensions/metric-registry.d.ts +2 -2
  14. package/dist/extensions/metric-registry.js +1 -1
  15. package/dist/extensions/modes.js +1 -1
  16. package/dist/extensions/registry.d.ts +2 -2
  17. package/dist/extensions/registry.js +1 -1
  18. package/dist/extensions/types.d.ts +4 -0
  19. package/dist/goal/GoalEngine.d.ts +13 -1
  20. package/dist/goal/GoalEngine.js +1 -1
  21. package/dist/goal/next-steps.d.ts +12 -0
  22. package/dist/goal/next-steps.js +1 -0
  23. package/dist/goal/pursue.d.ts +18 -0
  24. package/dist/goal/pursue.js +1 -0
  25. package/dist/goal/types.d.ts +72 -0
  26. package/dist/goal/types.js +1 -1
  27. package/dist/graph/onchain/analyze.d.ts +44 -0
  28. package/dist/graph/onchain/analyze.js +1 -0
  29. package/dist/graph/onchain/analyze.spec.d.ts +1 -0
  30. package/dist/graph/onchain/analyze.spec.js +1 -0
  31. package/dist/graph/onchain/anti-cheat.d.ts +39 -0
  32. package/dist/graph/onchain/anti-cheat.js +1 -0
  33. package/dist/graph/onchain/anti-cheat.spec.d.ts +1 -0
  34. package/dist/graph/onchain/anti-cheat.spec.js +1 -0
  35. package/dist/graph/onchain/dataplane.d.ts +44 -0
  36. package/dist/graph/onchain/dataplane.js +1 -0
  37. package/dist/graph/onchain/edge-schema.d.ts +60 -0
  38. package/dist/graph/onchain/edge-schema.js +1 -0
  39. package/dist/graph/onchain/expand.d.ts +4 -0
  40. package/dist/graph/onchain/expand.js +1 -0
  41. package/dist/graph/onchain/extract.d.ts +21 -0
  42. package/dist/graph/onchain/extract.js +1 -0
  43. package/dist/graph/onchain/index.d.ts +17 -0
  44. package/dist/graph/onchain/index.js +1 -0
  45. package/dist/graph/onchain/interest.d.ts +10 -0
  46. package/dist/graph/onchain/interest.js +1 -0
  47. package/dist/graph/onchain/interest.spec.d.ts +1 -0
  48. package/dist/graph/onchain/interest.spec.js +1 -0
  49. package/dist/graph/onchain/onchain.spec.d.ts +1 -0
  50. package/dist/graph/onchain/onchain.spec.js +1 -0
  51. package/dist/graph/onchain/order-status.d.ts +53 -0
  52. package/dist/graph/onchain/order-status.js +1 -0
  53. package/dist/graph/onchain/project-relationship.d.ts +3 -0
  54. package/dist/graph/onchain/project-relationship.js +1 -0
  55. package/dist/graph/onchain/sdk-batch.d.ts +123 -0
  56. package/dist/graph/onchain/sdk-batch.js +1 -0
  57. package/dist/graph/onchain/sdk-dataplane.d.ts +43 -0
  58. package/dist/graph/onchain/sdk-dataplane.js +1 -0
  59. package/dist/graph/onchain/strategy.d.ts +54 -0
  60. package/dist/graph/onchain/strategy.js +1 -0
  61. package/dist/graph/onchain/strategy.spec.d.ts +1 -0
  62. package/dist/graph/onchain/strategy.spec.js +1 -0
  63. package/dist/graph/onchain/types.d.ts +238 -0
  64. package/dist/graph/onchain/types.js +1 -0
  65. package/dist/graph/onchain/viewport.d.ts +5 -0
  66. package/dist/graph/onchain/viewport.js +1 -0
  67. package/dist/harness/recover.js +1 -1
  68. package/dist/index.js +1 -1
  69. package/dist/intent/enrich.js +1 -1
  70. package/dist/keeper/detectors.d.ts +1 -1
  71. package/dist/keeper/detectors.js +1 -1
  72. package/dist/knowledge/account-marks.js +1 -1
  73. package/dist/knowledge/allocation-risk.js +1 -1
  74. package/dist/knowledge/allocation-templates.js +1 -1
  75. package/dist/knowledge/anti-cheat.d.ts +2 -37
  76. package/dist/knowledge/anti-cheat.js +1 -1
  77. package/dist/knowledge/contract-invariants.js +1 -1
  78. package/dist/knowledge/getting-started.d.ts +37 -0
  79. package/dist/knowledge/getting-started.js +1 -0
  80. package/dist/knowledge/goal-completion.d.ts +12 -0
  81. package/dist/knowledge/goal-completion.js +1 -1
  82. package/dist/knowledge/guard-render.d.ts +1 -0
  83. package/dist/knowledge/guard-render.js +1 -1
  84. package/dist/knowledge/guard-risk.js +1 -1
  85. package/dist/knowledge/guard-submission-brief.d.ts +83 -0
  86. package/dist/knowledge/guard-submission-brief.js +1 -0
  87. package/dist/knowledge/guard-submission-prompt.d.ts +13 -0
  88. package/dist/knowledge/guard-submission-prompt.js +1 -1
  89. package/dist/knowledge/index.d.ts +10 -4
  90. package/dist/knowledge/index.js +1 -1
  91. package/dist/knowledge/industry-registry.js +1 -1
  92. package/dist/knowledge/industry-strategy.d.ts +91 -0
  93. package/dist/knowledge/industry-strategy.js +1 -0
  94. package/dist/knowledge/jsonrpc-enum.js +1 -1
  95. package/dist/knowledge/market-metrics.d.ts +14 -3
  96. package/dist/knowledge/market-metrics.js +1 -1
  97. package/dist/knowledge/migration-preflight.js +1 -1
  98. package/dist/knowledge/operation-dictionary.d.ts +1 -1
  99. package/dist/knowledge/payment-tracker.d.ts +63 -0
  100. package/dist/knowledge/payment-tracker.js +1 -0
  101. package/dist/knowledge/recipient-constraint.d.ts +160 -0
  102. package/dist/knowledge/recipient-constraint.js +1 -0
  103. package/dist/knowledge/safety-rules.d.ts +1 -1
  104. package/dist/knowledge/safety-rules.js +1 -1
  105. package/dist/knowledge/scenario-topology.d.ts +6 -1
  106. package/dist/knowledge/scenario-topology.js +1 -1
  107. package/dist/knowledge/service-risk-node.d.ts +3 -0
  108. package/dist/knowledge/service-risk-node.js +1 -0
  109. package/dist/knowledge/service-risk.d.ts +2 -0
  110. package/dist/knowledge/service-risk.js +1 -1
  111. package/dist/knowledge/service-templates.d.ts +2 -0
  112. package/dist/knowledge/service-templates.js +1 -1
  113. package/dist/knowledge/strategy-manuals.d.ts +17 -0
  114. package/dist/knowledge/strategy-manuals.js +1 -0
  115. package/dist/knowledge/supply-chain.d.ts +3 -1
  116. package/dist/knowledge/supply-chain.js +1 -1
  117. package/dist/knowledge/template-registry.js +1 -1
  118. package/dist/knowledge/tools-reference.js +1 -1
  119. package/dist/knowledge/workflow-guidance.d.ts +3 -118
  120. package/dist/knowledge/workflow-guidance.js +1 -1
  121. package/dist/knowledge/workspace-lists.d.ts +4 -0
  122. package/dist/knowledge/workspace-lists.js +1 -1
  123. package/dist/monitor/MonitorLoop.js +1 -1
  124. package/dist/monitor/ScopeResolver.js +1 -1
  125. package/dist/participation/arbitrator-interest.d.ts +2 -0
  126. package/dist/participation/arbitrator-interest.js +1 -1
  127. package/dist/participation/collaborator-interest.d.ts +2 -0
  128. package/dist/participation/collaborator-interest.js +1 -1
  129. package/dist/participation/customer-interest.d.ts +2 -0
  130. package/dist/participation/customer-interest.js +1 -1
  131. package/dist/participation/merchant-interest.d.ts +2 -0
  132. package/dist/participation/merchant-interest.js +1 -1
  133. package/dist/participation/radar-core.d.ts +15 -15
  134. package/dist/participation/radar-core.js +1 -1
  135. package/dist/participation/supplier-interest.d.ts +2 -0
  136. package/dist/participation/supplier-interest.js +1 -1
  137. package/dist/persona/analyzer.d.ts +2 -1
  138. package/dist/persona/bridge.d.ts +5 -1
  139. package/dist/persona/bridge.js +1 -1
  140. package/dist/persona/defaults.js +1 -1
  141. package/dist/persona/distill-goal.d.ts +7 -1
  142. package/dist/persona/distill-goal.js +1 -1
  143. package/dist/persona/index.d.ts +13 -3
  144. package/dist/persona/index.js +1 -1
  145. package/dist/persona/model.d.ts +12 -2
  146. package/dist/persona/model.js +1 -1
  147. package/dist/persona/overrides.d.ts +1 -0
  148. package/dist/persona/overrides.js +1 -1
  149. package/dist/persona/topology-focus.d.ts +29 -0
  150. package/dist/persona/topology-focus.js +1 -0
  151. package/dist/persona/types.d.ts +81 -0
  152. package/dist/playbooks/service-build/business-puzzle.js +1 -1
  153. package/dist/playbooks/service-build/context-assembly.js +1 -1
  154. package/dist/playbooks/service-build/machine-nodes.js +1 -1
  155. package/dist/playbooks/service-build/machine-panorama.js +1 -1
  156. package/dist/playbooks/service-build/merchant-guide.d.ts +7 -0
  157. package/dist/playbooks/service-build/merchant-guide.js +1 -1
  158. package/dist/playbooks/service-build/object-panorama.js +1 -1
  159. package/dist/playbooks/service-build/participation-radar.js +1 -1
  160. package/dist/playbooks/service-build/pipeline-actions.d.ts +2 -2
  161. package/dist/playbooks/service-build/pipeline-actions.js +1 -1
  162. package/dist/playbooks/service-build/relationship-profile.d.ts +1 -0
  163. package/dist/playbooks/service-build/relationship-profile.js +1 -1
  164. package/dist/playbooks/service-build/risk-aggregator.js +1 -1
  165. package/dist/playbooks/service-build/service-panorama.d.ts +4 -0
  166. package/dist/playbooks/service-build/service-panorama.js +1 -1
  167. package/dist/playbooks/service-build/topology-query.d.ts +14 -0
  168. package/dist/playbooks/service-build/topology-query.js +1 -0
  169. package/dist/relationship/derivation.js +1 -1
  170. package/dist/role/index.d.ts +1 -0
  171. package/dist/role/index.js +1 -1
  172. package/dist/role/profiles.d.ts +26 -0
  173. package/dist/role/profiles.js +1 -0
  174. package/dist/safety/confirm-gate.d.ts +4 -1
  175. package/dist/safety/confirm-gate.js +1 -1
  176. package/dist/schema/call/allocation.d.ts +6 -6
  177. package/dist/schema/call/allocation.js +1 -1
  178. package/dist/schema/call/base.js +1 -1
  179. package/dist/schema/call/bridge.d.ts +1 -1
  180. package/dist/schema/call/guard.d.ts +20 -20
  181. package/dist/schema/call/repository.js +1 -1
  182. package/dist/schema/call/semantic.js +1 -1
  183. package/dist/schema/call/service.d.ts +4 -4
  184. package/dist/schema/call/service.js +1 -1
  185. package/dist/schema/common/index.js +1 -1
  186. package/dist/schema/employee/index.d.ts +7 -7
  187. package/dist/schema/evaluation/index.d.ts +26 -13
  188. package/dist/schema/evaluation/index.js +1 -1
  189. package/dist/schema/goal/index.d.ts +53 -17
  190. package/dist/schema/goal/index.js +1 -1
  191. package/dist/schema/goal/planning.d.ts +7 -7
  192. package/dist/schema/index.d.ts +1 -0
  193. package/dist/schema/index.js +1 -1
  194. package/dist/schema/industry-pack/index.d.ts +13 -6
  195. package/dist/schema/industry-pack/index.js +1 -1
  196. package/dist/schema/industry-pack/modes.d.ts +6 -6
  197. package/dist/schema/intent-radar/index.d.ts +16 -16
  198. package/dist/schema/local/index.d.ts +8 -4
  199. package/dist/schema/local/index.js +1 -1
  200. package/dist/schema/messenger/index.d.ts +428 -72
  201. package/dist/schema/messenger/index.js +1 -1
  202. package/dist/schema/operations.d.ts +177 -34
  203. package/dist/schema/operations.js +1 -1
  204. package/dist/schema/persona/index.d.ts +15744 -1
  205. package/dist/schema/persona/index.js +1 -1
  206. package/dist/schema/query/bi.d.ts +891 -24
  207. package/dist/schema/query/bi.js +1 -1
  208. package/dist/schema/query/index.d.ts +168 -43
  209. package/dist/schema/query/index.js +1 -1
  210. package/dist/schema/schema-query/index.d.ts +16 -0
  211. package/dist/schema/schema-query/index.js +1 -1
  212. package/dist/schema/schema-version.js +1 -1
  213. package/dist/schema/strategy-review/index.d.ts +137 -0
  214. package/dist/schema/strategy-review/index.js +1 -0
  215. package/dist/schema/trust/index.d.ts +6 -6
  216. package/dist/schema/workflow/index.d.ts +2 -2
  217. package/dist/schema-query-impl/index.js +1 -1
  218. package/dist/schemas/account_operation.output.json +8 -4
  219. package/dist/schemas/account_operation.schema.json +6 -2
  220. package/dist/schemas/bridge_operation.schema.json +10 -10
  221. package/dist/schemas/evaluation_operation.output.json +24 -0
  222. package/dist/schemas/evaluation_operation.schema.json +7 -7
  223. package/dist/schemas/goal_operation.schema.json +124 -0
  224. package/dist/schemas/guard2file.schema.json +2 -2
  225. package/dist/schemas/index.json +7 -1
  226. package/dist/schemas/industry_pack_operation.output.json +39 -0
  227. package/dist/schemas/local_mark_operation.schema.json +2 -2
  228. package/dist/schemas/machineNode2file.schema.json +2 -2
  229. package/dist/schemas/messenger_operation.output.json +934 -236
  230. package/dist/schemas/messenger_operation.schema.json +93 -242
  231. package/dist/schemas/onchain_events.schema.json +1 -1
  232. package/dist/schemas/onchain_operations.schema.json +54 -54
  233. package/dist/schemas/onchain_operations_allocation.schema.json +5 -5
  234. package/dist/schemas/onchain_operations_arbitration.schema.json +2 -2
  235. package/dist/schemas/onchain_operations_contact.schema.json +2 -2
  236. package/dist/schemas/onchain_operations_demand.schema.json +2 -2
  237. package/dist/schemas/onchain_operations_gen_passport.schema.json +2 -2
  238. package/dist/schemas/onchain_operations_gen_proof.schema.json +2 -2
  239. package/dist/schemas/onchain_operations_guard.schema.json +2 -2
  240. package/dist/schemas/onchain_operations_machine.schema.json +8 -8
  241. package/dist/schemas/onchain_operations_order.schema.json +2 -2
  242. package/dist/schemas/onchain_operations_payment.schema.json +3 -3
  243. package/dist/schemas/onchain_operations_permission.schema.json +2 -2
  244. package/dist/schemas/onchain_operations_personal.schema.json +2 -2
  245. package/dist/schemas/onchain_operations_progress.schema.json +2 -2
  246. package/dist/schemas/onchain_operations_proof.schema.json +2 -2
  247. package/dist/schemas/onchain_operations_repository.schema.json +5 -5
  248. package/dist/schemas/onchain_operations_reward.schema.json +2 -2
  249. package/dist/schemas/onchain_operations_service.schema.json +5 -5
  250. package/dist/schemas/onchain_operations_treasury.schema.json +4 -4
  251. package/dist/schemas/onchain_table_data.output.json +197 -13
  252. package/dist/schemas/onchain_table_data.schema.json +43 -43
  253. package/dist/schemas/persona_operation.output.json +37778 -262
  254. package/dist/schemas/persona_operation.schema.json +5960 -1
  255. package/dist/schemas/query_toolkit.output.json +1615 -10
  256. package/dist/schemas/query_toolkit.schema.json +232 -42
  257. package/dist/schemas/schema_query.schema.json +25 -1
  258. package/dist/schemas/strategy_review_operation.output.json +532 -0
  259. package/dist/schemas/strategy_review_operation.schema.json +66 -0
  260. package/dist/schemas/wowok_buildin_info.output.json +188 -6
  261. package/dist/schemas/wowok_buildin_info.schema.json +14 -0
  262. package/dist/strategy/collectors.d.ts +66 -0
  263. package/dist/strategy/collectors.js +1 -0
  264. package/dist/strategy/collectors.spec.d.ts +1 -0
  265. package/dist/strategy/collectors.spec.js +1 -0
  266. package/dist/strategy/index.d.ts +5 -0
  267. package/dist/strategy/index.js +1 -0
  268. package/dist/strategy/metrics.d.ts +20 -0
  269. package/dist/strategy/metrics.js +1 -0
  270. package/dist/strategy/review.d.ts +48 -0
  271. package/dist/strategy/review.js +1 -0
  272. package/dist/strategy/scorecard.d.ts +32 -0
  273. package/dist/strategy/scorecard.js +1 -0
  274. package/dist/strategy/store.d.ts +26 -0
  275. package/dist/strategy/store.js +1 -0
  276. package/dist/tools/handlers/config.js +1 -1
  277. package/dist/tools/handlers/evaluation.js +1 -1
  278. package/dist/tools/handlers/goal.js +1 -1
  279. package/dist/tools/handlers/industry-pack.js +1 -1
  280. package/dist/tools/handlers/local.js +1 -1
  281. package/dist/tools/handlers/messenger.js +1 -1
  282. package/dist/tools/handlers/onchain.js +1 -1
  283. package/dist/tools/handlers/permission.js +1 -1
  284. package/dist/tools/handlers/persona.js +1 -1
  285. package/dist/tools/handlers/query.d.ts +6 -0
  286. package/dist/tools/handlers/query.js +1 -1
  287. package/dist/tools/handlers/schema-query.js +1 -1
  288. package/dist/tools/handlers/strategy-review.d.ts +2 -0
  289. package/dist/tools/handlers/strategy-review.js +1 -0
  290. package/dist/tools/handlers/watch.js +1 -1
  291. package/dist/tools/handlers/workflow.js +1 -1
  292. package/dist/tools/index.d.ts +3 -0
  293. package/dist/tools/index.js +1 -1
  294. package/dist/tools/registry/agent.js +1 -1
  295. package/dist/tools/registry/business.js +1 -1
  296. package/dist/tools/registry/local.js +1 -1
  297. package/dist/tools/registry/messenger.js +1 -1
  298. package/dist/tools/registry/onchain.js +1 -1
  299. package/dist/tools/registry/query.js +1 -1
  300. package/dist/tools/rules-hook.d.ts +2 -0
  301. package/dist/tools/rules-hook.js +1 -1
  302. package/dist/tools/shared.d.ts +2 -1
  303. package/dist/tools/shared.js +1 -1
  304. package/dist/tools/wrap.js +1 -1
  305. package/package.json +2 -2
@@ -1 +1 @@
1
- import{createHash}from'crypto';import{query_objects,query_events}from'@wowok/wowok';import{annotateEventsMonetaryFields}from'../../knowledge/fund-layer.js';import{batchQueryObjectsByIds}from'../../knowledge/workflow-guidance.js';import{buildDataSemantic}from'../../schema/call/semantic.js';import{recordSignature}from'../../experience/index.js';const STATE_TRANSITION_EVENTS=['NewOrderEvent','ProgressEvent','ArbEvent','DemandPresentEvent','DemandFeedbackEvent','NewEntityEvent'],MAX_OBJECTS_PER_QUERY=0x32;export async function assembleContext(a){const b=a['context_objects'];if(!b||b['length']===0x0)throw new Error('assemble_context\x20requires\x20\x27context_objects\x27\x20—\x20an\x20array\x20of\x20object\x20IDs\x20or\x20LocalMark\x20names.');const c=a['context_network']??'testnet',d=a['include_events']??![],e=Math['max'](0x0,Math['min'](0x5,a['context_depth']??0x0)),g=a['context_include']?.['length']?new Set(a['context_include']):null,h=await batchQueryObjectsByIds(b,c,![]),k=[],l=[];if(e>0x0){const z=new Set();for(const B of h){const C=B?.['object'];if(typeof C==='string')z['add'](C);}let A=[];for(const D of h){const E=safeExtractAddressFields(D);for(const F of E){if(g&&!g['has'](F['field']))continue;if(z['has'](F['address']))continue;A['push']({'id':F['address'],'parent':D?.['object']??'','viaField':F['field'],'viaType':F['type'],'depth':0x1});}}for(let G=0x1;G<=e&&A['length']>0x0;G++){const H=new Set(),I=[];for(const K of A){if(z['has'](K['id'])||H['has'](K['id']))continue;H['add'](K['id']),z['add'](K['id']),I['push'](K);}if(I['length']===0x0)break;const J=[];for(let L=0x0;L<I['length'];L+=MAX_OBJECTS_PER_QUERY){const M=I['slice'](L,L+MAX_OBJECTS_PER_QUERY);let N;try{N=await query_objects({'objects':M['map'](P=>P['id']),'no_cache':![],'network':c});}catch{continue;}const O=N?.['objects']??[];for(let P=0x0;P<M['length'];P++){const Q=M[P],R=O[P];if(!R)continue;k['push']({'object':Q['id'],'depth':Q['depth'],'via_field':Q['viaField'],'via_type':Q['viaType'],'parent':Q['parent']}),l['push'](R);if(G<e){const S=safeExtractAddressFields(R);for(const T of S){if(g&&!g['has'](T['field']))continue;if(z['has'](T['address']))continue;J['push']({'id':T['address'],'parent':Q['id'],'viaField':T['field'],'viaType':T['type'],'depth':G+0x1});}}}}A=J;}}const m=[...h,...l],n=extractEmbeddedHistory(m),p=Object['keys'](n)['length']>0x0;let q;if(d){q=[];for(const U of STATE_TRANSITION_EVENTS){try{const V=await query_events({'type':U,'limit':0x5,'order':'descending','network':c});V?.['data']&&V['data']['length']>0x0&&q['push'](...V['data']);}catch{}}if(q['length']===0x0)q=undefined;else try{await annotateEventsMonetaryFields(q,c);}catch{}}const s={'operation_type':'assemble_context','data':{'context_objects':h,'embedded_history':n,'events':q}},t=buildDataSemantic({'objects':h,'embedded_history':n,'events':q},s),u=h['map'](W=>(W?.['object']??W?.['data']?.['object']??'?')+':'+(W?.['version']??W?.['data']?.['version']??'?'));l['length']>0x0&&u['push']('deps:'+l['map'](W=>(W?.['object']??'?')+':'+(W?.['version']??'?'))['join'](','));u['push']('ts:'+Date['now']());const v=createHash('sha256')['update'](u['join']('|'))['digest']('hex')['substring'](0x0,0x10),w=k['length']>0x0,x=w?'Context\x20assembled\x20with\x20'+k['length']+'\x20dependency\x20object(s)\x20across\x20'+e+'\x20level(s).\x20'+'Use\x20onchain_transaction\x20with\x20a\x20specific\x20digest\x20to\x20verify\x20a\x20past\x20operation,\x20'+'or\x20proceed\x20with\x20onchain_operations\x20(consider\x20dry_run=true\x20first\x20to\x20validate).':p?'Context\x20assembled\x20with\x20embedded\x20operation\x20history.\x20Use\x20onchain_transaction\x20with\x20a\x20specific\x20digest\x20to\x20verify\x20a\x20past\x20operation,\x20or\x20proceed\x20with\x20onchain_operations\x20(consider\x20dry_run=true\x20first\x20to\x20validate).':q&&q['length']>0x0?'Context\x20assembled\x20with\x20recent\x20events.\x20Use\x20onchain_transaction\x20with\x20a\x20specific\x20digest\x20to\x20verify\x20any\x20event\x27s\x20tx,\x20or\x20proceed\x20with\x20onchain_operations.':'Context\x20assembled\x20(current\x20state\x20only).\x20Proceed\x20with\x20onchain_operations\x20(consider\x20dry_run=true\x20first\x20to\x20validate).';let y;try{y=collectContextExperience({'action':'assemble_context','objects':h,'events':q,'embedded_history':p?n:undefined,'semantic_summary':t,'context_digest':v,'next_action':x},c);}catch{}return{'action':'assemble_context','objects':h,'events':q,'embedded_history':p?n:undefined,'dependencies':w?k:undefined,'dependency_objects':w?l:undefined,'semantic_summary':t,'context_digest':v,'next_action':x,'flywheel_collected':y};}function collectContextExperience(a,b){const c=extractObjectTypes(a['objects']),d={'intent':'assemble_context','signals':{'object_types':c,'object_count':a['objects']['length'],'has_embedded_history':!!a['embedded_history'],'has_events':!!a['events']&&a['events']['length']>0x0,'context_digest':a['context_digest'],'network':b},'timestamp':Date['now'](),'outcome':'success'};let e=![];try{recordSignature(d),e=!![];}catch{}return{'signature_recorded':e};}function extractObjectTypes(a){const b=new Set();for(const c of a){const d=c?.['data']??c,e=d?.['type'];if(typeof e==='string'){const f=e['match'](/::(\w+)$/);f&&b['add'](f[0x1]);}}return Array['from'](b);}export function extractAddressFields(a){const b=[],c=a['type'];let d=c;if(c&&c['includes']('::')){const k=c['split']('::');d=k[k['length']-0x1];}const e=l=>typeof l==='string'&&l['startsWith']('0x')&&l['length']>=0xa,f=(l,m,n)=>{e(l)&&l!=='0x0'&&l!==a['object']&&b['push']({'address':l,'field':m,'type':n});},h=(l,m,n)=>{if(Array['isArray'](l))for(const o of l){f(o,m,n);}},i=(l,m,n)=>{l!==null&&l!==undefined&&f(l,m,n);},j=a;switch(d){case'Service':{i(j['machine'],'machine','bind'),i(j['buy_guard'],'buy_guard','validate'),i(j['um'],'um','bind'),f(j['permission'],'permission','validate'),h(j['repositories'],'repositories','consume'),h(j['arbitrations'],'arbitrations','trigger'),h(j['rewards'],'rewards','trigger');if(j['order_allocators']?.['allocators']){for(const m of j['order_allocators']['allocators']){f(m['guard'],'allocator_guard','validate');}const l=j['order_allocators']['allocators'][0x0]?.['guard'];f(l,'order_allocators','create');}break;}case'Machine':{f(j['permission'],'permission','validate'),h(j['consensus_repositories'],'consensus_repositories','consume');break;}case'Order':{f(j['service'],'service','consume'),i(j['machine'],'machine','consume'),i(j['progress'],'progress','trigger'),h(j['dispute'],'dispute','trigger'),i(j['allocation'],'allocation','bind');break;}case'Progress':{f(j['machine'],'machine','bind'),h(j['context_repositories'],'context_repositories','consume');break;}case'Treasury':{f(j['permission'],'permission','validate');if(Array['isArray'](j['external_deposit_guard'])){for(const n of j['external_deposit_guard'])f(n?.['guard'],'external_deposit_guard','validate');}if(Array['isArray'](j['external_withdraw_guard'])){for(const o of j['external_withdraw_guard'])f(o?.['guard'],'external_withdraw_guard','validate');}break;}case'Allocation':{if(Array['isArray'](j['allocators'])){for(const p of j['allocators'])f(p?.['guard'],'allocator_guard','validate');}i(j['payment_info']?.['for_object'],'for_object','bind'),i(j['payment_info']?.['for_guard'],'for_guard','validate'),h(j['payment'],'payment','trigger');break;}case'Arbitration':{f(j['permission'],'permission','validate');if(Array['isArray'](j['voting_guard'])){for(const q of j['voting_guard'])f(q?.['guard'],'voting_guard','validate');}i(j['usage_guard'],'usage_guard','validate');break;}case'Reward':{f(j['permission'],'permission','validate');if(Array['isArray'](j['guards'])){for(const s of j['guards'])f(s?.['guard'],'guard','validate');}break;}case'Repository':{f(j['permission'],'permission','validate'),h(j['rewards'],'rewards','trigger');if(Array['isArray'](j['policies']))for(const t of j['policies']){if(Array['isArray'](t?.['write_guard'])){for(const u of t['write_guard'])f(u?.['guard'],'write_guard','validate');}i(t?.['quote_guard'],'quote_guard','validate');}break;}case'Demand':{f(j['permission'],'permission','validate');if(Array['isArray'](j['guards'])){for(const v of j['guards'])f(v?.['guard'],'guard','validate');}h(j['rewards'],'rewards','trigger');break;}case'Contact':{f(j['permission'],'permission','validate');break;}case'Permission':{break;}case'Payment':{i(j['info']?.['for_object'],'for_object','bind'),i(j['info']?.['for_guard'],'for_guard','validate');if(Array['isArray'](j['record']))for(const w of j['record']){const x=w?.['recipient'];x&&typeof x==='object'&&typeof x['Entity']==='string'&&f(x['Entity'],'recipient_entity','consume');}break;}case'Guard':{break;}default:break;}return b;}function safeExtractAddressFields(a){if(!a||typeof a!=='object')return[];try{return extractAddressFields(a);}catch{return[];}}function extractEmbeddedHistory(a){const b={};for(const c of a){const d=c?.['data']??c,e=c?.['object']??d?.['object'];if(!e)continue;const f=d?.['type']??'',g={};f['includes']('Progress')&&d?.['session']?.['forwards']&&(g['operation_history']=d['session']['forwards']['map'](h=>({'operation':h['forward'],'operator':h['who'],'accomplished':h['accomplished'],'time':h['time'],'message':h['msg']})),g['next_node']=d['session']?.['next_node'],g['threshold']=d['session']?.['threshold']),f['includes']('Order')&&(d?.['dispute']&&Array['isArray'](d['dispute'])&&d['dispute']['length']>0x0&&(g['disputes']=d['dispute']),d?.['claimed_by']&&(g['claimed_by']=d['claimed_by']),d?.['progress']&&(g['progress_object']=d['progress'])),f['includes']('Service')&&d?.['sales']&&(g['sale_count']=Array['isArray'](d['sales'])?d['sales']['length']:0x0),Object['keys'](g)['length']>0x0&&(b[e]=g);}return b;}
1
+ import{createHash}from'crypto';import{query_events}from'@wowok/wowok';import{annotateEventsMonetaryFields}from'../../knowledge/fund-layer.js';import{batchQueryObjectsByIds}from'../../graph/onchain/sdk-batch.js';import{Config}from'@wowok/wowok/w/local';import{buildDataSemantic}from'../../schema/call/semantic.js';import{recordSignature}from'../../experience/index.js';const STATE_TRANSITION_EVENTS=['NewOrderEvent','ProgressEvent','ArbEvent','DemandPresentEvent','DemandFeedbackEvent','NewEntityEvent'];export async function assembleContext(a){const b=a['context_objects'];if(!b||b['length']===0x0)throw new Error('assemble_context\x20requires\x20\x27context_objects\x27\x20—\x20an\x20array\x20of\x20object\x20IDs\x20or\x20LocalMark\x20names.');const c=a['context_network']??await Config['Instance']()['network_get'](),d=a['include_events']??![],e=Math['max'](0x0,Math['min'](0x5,a['context_depth']??0x0)),g=a['context_include']?.['length']?new Set(a['context_include']):null,h=await batchQueryObjectsByIds(b,c,![]),i=[],j=[];if(e>0x0){const x=new Set();for(const z of h){const A=z?.['object'];if(typeof A==='string')x['add'](A);}let y=[];for(const B of h){const C=safeExtractAddressFields(B);for(const D of C){if(g&&!g['has'](D['field']))continue;if(x['has'](D['address']))continue;y['push']({'id':D['address'],'parent':B?.['object']??'','viaField':D['field'],'viaType':D['type'],'depth':0x1});}}for(let E=0x1;E<=e&&y['length']>0x0;E++){const F=new Set(),G=[];for(const K of y){if(x['has'](K['id'])||F['has'](K['id']))continue;F['add'](K['id']),x['add'](K['id']),G['push'](K);}if(G['length']===0x0)break;const H=[],I=await batchQueryObjectsByIds(G['map'](L=>L['id']),c,![]),J=new Map();for(const L of I){const M=L?.['object'];if(typeof M==='string')J['set'](M['toLowerCase'](),L);}for(const N of G){const O=J['get'](N['id']['toLowerCase']());if(!O)continue;i['push']({'object':N['id'],'depth':N['depth'],'via_field':N['viaField'],'via_type':N['viaType'],'parent':N['parent']}),j['push'](O);if(E<e){const P=safeExtractAddressFields(O);for(const Q of P){if(g&&!g['has'](Q['field']))continue;if(x['has'](Q['address']))continue;H['push']({'id':Q['address'],'parent':N['id'],'viaField':Q['field'],'viaType':Q['type'],'depth':E+0x1});}}}y=H;}}const k=[...h,...j],l=extractEmbeddedHistory(k),m=Object['keys'](l)['length']>0x0;let n;if(d){n=[];for(const R of STATE_TRANSITION_EVENTS){try{const S=await query_events({'type':R,'limit':0x5,'order':'descending','network':c});S?.['data']&&S['data']['length']>0x0&&n['push'](...S['data']);}catch{}}if(n['length']===0x0)n=undefined;else try{await annotateEventsMonetaryFields(n,c);}catch{}}const p={'operation_type':'assemble_context','data':{'context_objects':h,'embedded_history':l,'events':n}},q=buildDataSemantic({'objects':h,'embedded_history':l,'events':n},p),s=h['map'](T=>(T?.['object']??T?.['data']?.['object']??'?')+':'+(T?.['version']??T?.['data']?.['version']??'?'));j['length']>0x0&&s['push']('deps:'+j['map'](T=>(T?.['object']??'?')+':'+(T?.['version']??'?'))['join'](','));s['push']('ts:'+Date['now']());const t=createHash('sha256')['update'](s['join']('|'))['digest']('hex')['substring'](0x0,0x10),u=i['length']>0x0,v=u?'Context\x20assembled\x20with\x20'+i['length']+'\x20dependency\x20object(s)\x20across\x20'+e+'\x20level(s).\x20'+'Use\x20onchain_transaction\x20with\x20a\x20specific\x20digest\x20to\x20verify\x20a\x20past\x20operation,\x20'+'or\x20proceed\x20with\x20onchain_operations\x20(consider\x20dry_run=true\x20first\x20to\x20validate).':m?'Context\x20assembled\x20with\x20embedded\x20operation\x20history.\x20Use\x20onchain_transaction\x20with\x20a\x20specific\x20digest\x20to\x20verify\x20a\x20past\x20operation,\x20or\x20proceed\x20with\x20onchain_operations\x20(consider\x20dry_run=true\x20first\x20to\x20validate).':n&&n['length']>0x0?'Context\x20assembled\x20with\x20recent\x20events.\x20Use\x20onchain_transaction\x20with\x20a\x20specific\x20digest\x20to\x20verify\x20any\x20event\x27s\x20tx,\x20or\x20proceed\x20with\x20onchain_operations.':'Context\x20assembled\x20(current\x20state\x20only).\x20Proceed\x20with\x20onchain_operations\x20(consider\x20dry_run=true\x20first\x20to\x20validate).';let w;try{w=collectContextExperience({'action':'assemble_context','objects':h,'events':n,'embedded_history':m?l:undefined,'semantic_summary':q,'context_digest':t,'next_action':v},c);}catch{}return{'action':'assemble_context','objects':h,'events':n,'embedded_history':m?l:undefined,'dependencies':u?i:undefined,'dependency_objects':u?j:undefined,'semantic_summary':q,'context_digest':t,'next_action':v,'flywheel_collected':w};}function collectContextExperience(a,b){const c=extractObjectTypes(a['objects']),d={'intent':'assemble_context','signals':{'object_types':c,'object_count':a['objects']['length'],'has_embedded_history':!!a['embedded_history'],'has_events':!!a['events']&&a['events']['length']>0x0,'context_digest':a['context_digest'],'network':b},'timestamp':Date['now'](),'outcome':'success'};let e=![];try{recordSignature(d),e=!![];}catch{}return{'signature_recorded':e};}function extractObjectTypes(a){const b=new Set();for(const c of a){const d=c?.['data']??c,e=d?.['type'];if(typeof e==='string'){const f=e['match'](/::(\w+)$/);f&&b['add'](f[0x1]);}}return Array['from'](b);}export function extractAddressFields(a){const b=[],c=a['type'];let d=c;if(c&&c['includes']('::')){const k=c['split']('::');d=k[k['length']-0x1];}const e=l=>typeof l==='string'&&l['startsWith']('0x')&&l['length']>=0xa,f=(l,m,n)=>{e(l)&&l!=='0x0'&&l!==a['object']&&b['push']({'address':l,'field':m,'type':n});},h=(l,m,n)=>{if(Array['isArray'](l))for(const o of l){f(o,m,n);}},i=(l,m,n)=>{l!==null&&l!==undefined&&f(l,m,n);},j=a;switch(d){case'Service':{i(j['machine'],'machine','bind'),i(j['buy_guard'],'buy_guard','validate'),i(j['um'],'um','bind'),f(j['permission'],'permission','validate'),h(j['repositories'],'repositories','consume'),h(j['arbitrations'],'arbitrations','trigger'),h(j['rewards'],'rewards','trigger');if(j['order_allocators']?.['allocators']){for(const m of j['order_allocators']['allocators']){f(m['guard'],'allocator_guard','validate');}const l=j['order_allocators']['allocators'][0x0]?.['guard'];f(l,'order_allocators','create');}break;}case'Machine':{f(j['permission'],'permission','validate'),h(j['consensus_repositories'],'consensus_repositories','consume');break;}case'Order':{f(j['service'],'service','consume'),i(j['machine'],'machine','consume'),i(j['progress'],'progress','trigger'),h(j['dispute'],'dispute','trigger'),i(j['allocation'],'allocation','bind');break;}case'Progress':{f(j['machine'],'machine','bind'),h(j['context_repositories'],'context_repositories','consume');break;}case'Treasury':{f(j['permission'],'permission','validate');if(Array['isArray'](j['external_deposit_guard'])){for(const n of j['external_deposit_guard'])f(n?.['guard'],'external_deposit_guard','validate');}if(Array['isArray'](j['external_withdraw_guard'])){for(const o of j['external_withdraw_guard'])f(o?.['guard'],'external_withdraw_guard','validate');}break;}case'Allocation':{if(Array['isArray'](j['allocators'])){for(const p of j['allocators'])f(p?.['guard'],'allocator_guard','validate');}i(j['payment_info']?.['for_object'],'for_object','bind'),i(j['payment_info']?.['for_guard'],'for_guard','validate'),h(j['payment'],'payment','trigger');break;}case'Arbitration':{f(j['permission'],'permission','validate');if(Array['isArray'](j['voting_guard'])){for(const q of j['voting_guard'])f(q?.['guard'],'voting_guard','validate');}i(j['usage_guard'],'usage_guard','validate');break;}case'Reward':{f(j['permission'],'permission','validate');if(Array['isArray'](j['guards'])){for(const s of j['guards'])f(s?.['guard'],'guard','validate');}break;}case'Repository':{f(j['permission'],'permission','validate'),h(j['rewards'],'rewards','trigger');if(Array['isArray'](j['policies']))for(const t of j['policies']){if(Array['isArray'](t?.['write_guard'])){for(const u of t['write_guard'])f(u?.['guard'],'write_guard','validate');}i(t?.['quote_guard'],'quote_guard','validate');}break;}case'Demand':{f(j['permission'],'permission','validate');if(Array['isArray'](j['guards'])){for(const v of j['guards'])f(v?.['guard'],'guard','validate');}h(j['rewards'],'rewards','trigger');break;}case'Contact':{f(j['permission'],'permission','validate');break;}case'Permission':{break;}case'Payment':{i(j['info']?.['for_object'],'for_object','bind'),i(j['info']?.['for_guard'],'for_guard','validate');if(Array['isArray'](j['record']))for(const w of j['record']){const x=w?.['recipient'];x&&typeof x==='object'&&typeof x['Entity']==='string'&&f(x['Entity'],'recipient_entity','consume');}break;}case'Guard':{break;}default:break;}return b;}function safeExtractAddressFields(a){if(!a||typeof a!=='object')return[];try{return extractAddressFields(a);}catch{return[];}}function extractEmbeddedHistory(a){const b={};for(const c of a){const d=c?.['data']??c,e=c?.['object']??d?.['object'];if(!e)continue;const f=d?.['type']??'',g={};f['includes']('Progress')&&d?.['session']?.['forwards']&&(g['operation_history']=d['session']['forwards']['map'](h=>({'operation':h['forward'],'operator':h['who'],'accomplished':h['accomplished'],'time':h['time'],'message':h['msg']})),g['next_node']=d['session']?.['next_node'],g['threshold']=d['session']?.['threshold']),f['includes']('Order')&&(d?.['dispute']&&Array['isArray'](d['dispute'])&&d['dispute']['length']>0x0&&(g['disputes']=d['dispute']),d?.['claimed_by']&&(g['claimed_by']=d['claimed_by']),d?.['progress']&&(g['progress_object']=d['progress'])),f['includes']('Service')&&d?.['sales']&&(g['sale_count']=Array['isArray'](d['sales'])?d['sales']['length']:0x0),Object['keys'](g)['length']>0x0&&(b[e]=g);}return b;}
@@ -1 +1 @@
1
- import{batchQueryTableItems}from'../../knowledge/workflow-guidance.js';export async function fetchMachineNodes(a,b){const {items:c}=await batchQueryTableItems(a,{'network':b}),d=[];for(const e of c){e['object']?.['type']==='TableItem_MachineNode'&&d['push'](e['object']);}return d;}export const MACHINE_START_NODE='';export function normalizeForwards(a){if(!Array['isArray'](a))return[];return a['map'](b=>{const c=b?.['guard'],d=c&&typeof c==='object'&&typeof c['guard']==='string';return{'name':typeof b?.['name']==='string'?b['name']:'','weight':typeof b?.['weight']==='number'?b['weight']:0x0,'guard':d?c['guard']:typeof c==='string'?c:null,'retained_submission':d&&Array['isArray'](c['retained_submission'])?c['retained_submission']:null,'named_operator':typeof b?.['namedOperator']==='string'?b['namedOperator']:null,'permission_index':typeof b?.['permissionIndex']==='number'?b['permissionIndex']:null};});}export function buildMachineGraph(a){const b=new Map(),c=[];let d=![];for(const f of a){const g=f['name'];if(!g)continue;!b['has'](g)&&b['set'](g,{'name':g,'description':null});const h=Array['isArray'](f['value'])?f['value']:[];for(const i of h){if(!i||typeof i!=='object')continue;const j=typeof i['prev_node']==='string'?i['prev_node']:MACHINE_START_NODE;if(j===MACHINE_START_NODE)d=!![];c['push']({'from':j,'to':g,'threshold':typeof i['threshold']==='number'?i['threshold']:0x1,'forwards':normalizeForwards(i['forwards'])});}}const e=[];d&&e['push']({'name':MACHINE_START_NODE,'description':'Initial\x20node\x20—\x20the\x20workflow\x20entry\x20point.\x20Orders\x20start\x20here.','is_start':!![]});for(const k of c){k['from']!==MACHINE_START_NODE&&!b['has'](k['from'])&&b['set'](k['from'],{'name':k['from'],'description':null}),!b['has'](k['to'])&&b['set'](k['to'],{'name':k['to'],'description':null});}return e['push'](...b['values']()),{'nodes':e,'edges':c};}
1
+ import{batchQueryTableItems}from'../../graph/onchain/sdk-batch.js';export async function fetchMachineNodes(a,b){const {items:c}=await batchQueryTableItems(a,{'network':b}),d=[];for(const e of c){e['object']?.['type']==='TableItem_MachineNode'&&d['push'](e['object']);}return d;}export const MACHINE_START_NODE='';export function normalizeForwards(a){if(!Array['isArray'](a))return[];return a['map'](b=>{const c=b?.['guard'],d=c&&typeof c==='object'&&typeof c['guard']==='string';return{'name':typeof b?.['name']==='string'?b['name']:'','weight':typeof b?.['weight']==='number'?b['weight']:0x0,'guard':d?c['guard']:typeof c==='string'?c:null,'retained_submission':d&&Array['isArray'](c['retained_submission'])?c['retained_submission']:null,'named_operator':typeof b?.['namedOperator']==='string'?b['namedOperator']:null,'permission_index':typeof b?.['permissionIndex']==='number'?b['permissionIndex']:null};});}export function buildMachineGraph(a){const b=new Map(),c=[];let d=![];for(const f of a){const g=f['name'];if(!g)continue;!b['has'](g)&&b['set'](g,{'name':g,'description':null});const h=Array['isArray'](f['value'])?f['value']:[];for(const i of h){if(!i||typeof i!=='object')continue;const j=typeof i['prev_node']==='string'?i['prev_node']:MACHINE_START_NODE;if(j===MACHINE_START_NODE)d=!![];c['push']({'from':j,'to':g,'threshold':typeof i['threshold']==='number'?i['threshold']:0x1,'forwards':normalizeForwards(i['forwards'])});}}const e=[];d&&e['push']({'name':MACHINE_START_NODE,'description':'Initial\x20node\x20—\x20the\x20workflow\x20entry\x20point.\x20Orders\x20start\x20here.','is_start':!![]});for(const k of c){k['from']!==MACHINE_START_NODE&&!b['has'](k['from'])&&b['set'](k['from'],{'name':k['from'],'description':null}),!b['has'](k['to'])&&b['set'](k['to'],{'name':k['to'],'description':null});}return e['push'](...b['values']()),{'nodes':e,'edges':c};}
@@ -1 +1 @@
1
- import{Config,LocalMark,query_objects,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{fetchMachineNodes,buildMachineGraph}from'./machine-nodes.js';import{batchQueryObjectsByIds,fetchObjectLinkerTx}from'../../knowledge/workflow-guidance.js';export async function handleMachinePanorama(a){const b=a['object_address'];if(!b)throw new Error('\x27object_address\x27\x20is\x20required\x20for\x20machine_panorama');let c=a['context_network']??undefined;const d=[];let f=b;if(!/^0x[0-9a-fA-F]{32,64}$/['test'](b)){const q=await LocalMark['Instance']()['get_address'](b);if(!q)throw new Error('Cannot\x20resolve\x20machine\x20\x27'+b+'\x27\x20—\x20not\x20a\x20valid\x20address\x20and\x20no\x20LocalMark\x20entry\x20found.\x20'+'Pass\x20the\x200x\x20Machine\x20object\x20address\x20directly\x20or\x20register\x20the\x20name\x20via\x20local_mark_operation.');f=q;}let g=null;try{if(!c)c=await Config['Instance']()['network_get']();const s=await query_objects({'objects':[f],'network':c});g=s?.['objects']?.[0x0]??null;if(!g&&a['context_network']){const u=await Config['Instance']()['network_get']();if(u&&u!==c){const w=await query_objects({'objects':[f],'network':u,'no_cache':!![]}),x=w?.['objects']?.[0x0]??null;x&&(g=x,c=u);}}}catch(y){throw new Error('Failed\x20to\x20query\x20Machine\x20'+f+'\x20on\x20'+c+':\x20'+(''+(y instanceof Error?y['message']:String(y))));}if(!g)throw new Error('Machine\x20'+f+'\x20not\x20found\x20on\x20'+c+'.\x20It\x20may\x20not\x20exist\x20on\x20this\x20network.');f=g['object']??f;let h=null,j=[];try{const z=await LocalMark['Instance']()['list']({'address':f});z['length']>0x0&&(h=z[0x0]['name']??null,j=(z[0x0]['tags']??[])['map'](A=>String(A)));}catch{d['push']('head:\x20LocalMark\x20lookup\x20failed');}let k={'nodes':[],'edges':[]};try{const A=await fetchMachineNodes(f,c);k=buildMachineGraph(A);}catch{d['push']('graph:\x20node\x20fetch\x20failed\x20(non-blocking)');}const l=[];let m=0x0,n=0x0,p=[];try{const B=await fetchObjectLinkerTx(f,c,!![]),C=B?.['items']??[],D=new Map();for(const K of C){const L=typeof K?.['who']==='string'?K['who']['toLowerCase']():'';if(!L||L==='0x0')continue;if(!objectTypeFromAddress(L))continue;const M=typeof K?.['time']==='number'?K['time']:null,N=D['get'](L);D['set'](L,N==null?M:M==null?N:Math['max'](N,M));}n=D['size'];const E=new Map();for(const [O,P]of D){const Q=String(objectTypeFromAddress(O)),R=E['get'](Q)??[];R['push']({'address':O,'time':P}),E['set'](Q,R);}for(const S of E['values']()){S['sort']((T,U)=>(U['time']??0x0)-(T['time']??0x0));}const F=['Progress','Allocation','Payment','Guard'];p=[];for(const T of F){const U=E['get'](T);U&&U['length']>0x0&&(p['push']({'label':T,'items':U}),E['delete'](T));}for(const [V,W]of E){if(W['length']>0x0)p['push']({'label':V,'items':W});}const G=C['filter'](X=>objectTypeFromAddress(X['who'])===ObjectType['Progress']);m=G['length'];const H=G['slice'](-0x32)['reverse'](),I=H['map'](X=>X['who']),J=new Map();if(I['length']>0x0)try{const X=await batchQueryObjectsByIds(I,c,!![]);for(const Y of X){if(Y?.['object'])J['set'](Y['object'],Y);}}catch{d['push']('progresses:\x20detail\x20fetch\x20failed');}for(const Z of H){const a0=typeof Z?.['who']==='string'?Z['who']:'';if(!a0)continue;const a1=J['get'](a0);l['push']({'progress':a0,'name':null,'current':a1?.['current']??null,'task':a1?.['task']??null,'history_count':typeof a1?.['history_count']==='number'?a1['history_count']:null,'current_time':typeof a1?.['current_time']==='number'?a1['current_time']:null,'created_at':typeof Z?.['time']==='number'?Z['time']:null});}}catch{d['push']('progresses:\x20global-table\x20lookup\x20failed\x20(non-blocking)');}return{'action':'machine_panorama','machineAddress':f,'network':String(c),'head':{'name':h,'tags':j,'description':typeof g['description']==='string'?g['description']:null,'published':typeof g['bPublished']==='boolean'?g['bPublished']:null,'paused':typeof g['bPaused']==='boolean'?g['bPaused']:null},'fields':{'permission':g['permission']??null,'um':g['um']??null,'node_count':typeof g['node_count']==='number'?g['node_count']:null,'consensus_repositories':Array['isArray'](g['consensus_repositories'])?g['consensus_repositories']:[]},'graph':k,'progresses':{'count':m,'items':l},'related':{'count':n,'groups':p},'data_gaps':d};}
1
+ import{Config,LocalMark,query_objects,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{fetchMachineNodes,buildMachineGraph}from'./machine-nodes.js';import{batchQueryObjectsByIds,fetchObjectLinkerTx}from'../../graph/onchain/sdk-batch.js';export async function handleMachinePanorama(a){const b=a['object_address'];if(!b)throw new Error('\x27object_address\x27\x20is\x20required\x20for\x20machine_panorama');let c=a['context_network']??undefined;const d=[];let f=b;if(!/^0x[0-9a-fA-F]{32,64}$/['test'](b)){const q=await LocalMark['Instance']()['get_address'](b);if(!q)throw new Error('Cannot\x20resolve\x20machine\x20\x27'+b+'\x27\x20—\x20not\x20a\x20valid\x20address\x20and\x20no\x20LocalMark\x20entry\x20found.\x20'+'Pass\x20the\x200x\x20Machine\x20object\x20address\x20directly\x20or\x20register\x20the\x20name\x20via\x20local_mark_operation.');f=q;}let g=null;try{if(!c)c=await Config['Instance']()['network_get']();const s=await query_objects({'objects':[f],'network':c});g=s?.['objects']?.[0x0]??null;if(!g&&a['context_network']){const u=await Config['Instance']()['network_get']();if(u&&u!==c){const w=await query_objects({'objects':[f],'network':u,'no_cache':!![]}),x=w?.['objects']?.[0x0]??null;x&&(g=x,c=u);}}}catch(y){throw new Error('Failed\x20to\x20query\x20Machine\x20'+f+'\x20on\x20'+c+':\x20'+(''+(y instanceof Error?y['message']:String(y))));}if(!g)throw new Error('Machine\x20'+f+'\x20not\x20found\x20on\x20'+c+'.\x20It\x20may\x20not\x20exist\x20on\x20this\x20network.');f=g['object']??f;let h=null,j=[];try{const z=await LocalMark['Instance']()['list']({'address':f});z['length']>0x0&&(h=z[0x0]['name']??null,j=(z[0x0]['tags']??[])['map'](A=>String(A)));}catch{d['push']('head:\x20LocalMark\x20lookup\x20failed');}let k={'nodes':[],'edges':[]};try{const A=await fetchMachineNodes(f,c);k=buildMachineGraph(A);}catch{d['push']('graph:\x20node\x20fetch\x20failed\x20(non-blocking)');}const l=[];let m=0x0,n=0x0,p=[];try{const B=await fetchObjectLinkerTx(f,c,!![]),C=B?.['items']??[],D=new Map();for(const K of C){const L=typeof K?.['who']==='string'?K['who']['toLowerCase']():'';if(!L||L==='0x0')continue;if(!objectTypeFromAddress(L))continue;const M=typeof K?.['time']==='number'?K['time']:null,N=D['get'](L);D['set'](L,N==null?M:M==null?N:Math['max'](N,M));}n=D['size'];const E=new Map();for(const [O,P]of D){const Q=String(objectTypeFromAddress(O)),R=E['get'](Q)??[];R['push']({'address':O,'time':P}),E['set'](Q,R);}for(const S of E['values']()){S['sort']((T,U)=>(U['time']??0x0)-(T['time']??0x0));}const F=['Progress','Allocation','Payment','Guard'];p=[];for(const T of F){const U=E['get'](T);U&&U['length']>0x0&&(p['push']({'label':T,'items':U}),E['delete'](T));}for(const [V,W]of E){if(W['length']>0x0)p['push']({'label':V,'items':W});}const G=C['filter'](X=>objectTypeFromAddress(X['who'])===ObjectType['Progress']);m=G['length'];const H=G['slice'](-0x32)['reverse'](),I=H['map'](X=>X['who']),J=new Map();if(I['length']>0x0)try{const X=await batchQueryObjectsByIds(I,c,!![]);for(const Y of X){if(Y?.['object'])J['set'](Y['object'],Y);}}catch{d['push']('progresses:\x20detail\x20fetch\x20failed');}for(const Z of H){const a0=typeof Z?.['who']==='string'?Z['who']:'';if(!a0)continue;const a1=J['get'](a0);l['push']({'progress':a0,'name':null,'current':a1?.['current']??null,'task':a1?.['task']??null,'history_count':typeof a1?.['history_count']==='number'?a1['history_count']:null,'current_time':typeof a1?.['current_time']==='number'?a1['current_time']:null,'created_at':typeof Z?.['time']==='number'?Z['time']:null});}}catch{d['push']('progresses:\x20global-table\x20lookup\x20failed\x20(non-blocking)');}return{'action':'machine_panorama','machineAddress':f,'network':String(c),'head':{'name':h,'tags':j,'description':typeof g['description']==='string'?g['description']:null,'published':typeof g['bPublished']==='boolean'?g['bPublished']:null,'paused':typeof g['bPaused']==='boolean'?g['bPaused']:null},'fields':{'permission':g['permission']??null,'um':g['um']??null,'node_count':typeof g['node_count']==='number'?g['node_count']:null,'consensus_repositories':Array['isArray'](g['consensus_repositories'])?g['consensus_repositories']:[]},'graph':k,'progresses':{'count':m,'items':l},'related':{'count':n,'groups':p},'data_gaps':d};}
@@ -154,6 +154,13 @@ export declare function handleMerchantGuide(v: MerchantGuideInput): Promise<{
154
154
  fix: string | undefined;
155
155
  }[];
156
156
  deploy_time_checks: string[];
157
+ recipient_design_guidance: {
158
+ id: "entity" | "signer" | "submitted_object" | "constrained_submission";
159
+ move_recipient: string;
160
+ semantics: string;
161
+ required_constraints: string[];
162
+ finding_if_unmet: string | undefined;
163
+ }[] | undefined;
157
164
  };
158
165
  game_theory: {
159
166
  summary: string;
@@ -1 +1 @@
1
- import{analyzeIntent}from'./intent-analyzer.js';import{buildSemanticGraph,validateGraph}from'./semantic-graph.js';import{checkGameTheoryConstraints}from'./game-theory.js';import{assessWorkflowDesign}from'./workflow-design-assessment.js';import{CORE_BUSINESS_MODULES,getBusinessModule,recommendModules,checkModuleConstraints}from'../../extensions/business-modules.js';import{getIndustryModeRegistry}from'../../extensions/index.js';import{LOCAL_MODE_OWNER}from'./mode-actions.js';function derivePlanSatisfiedConstraints(a,b){const c=new Set(),d=h=>a['edges']['some'](i=>i['relation']===h),e=h=>a['nodes']['some'](i=>i['id']===h),f=h=>a['nodes']['some'](i=>i['type']===h),g=h=>a['adoptedModules']['includes'](h);if(d('has_order_allocators'))c['add']('order_allocators_bound');if(d('uses_machine'))c['add']('machine_bound_before_publish');if(d('has_arbitration'))c['add']('arbitration_bound_to_service');if(e('main_machine'))c['add']('machine_published');if(e('main_repository'))c['add']('repository_published');if(e('main_service'))c['add']('service_published');e('arb_permission')&&e('main_permission')&&c['add']('arbitration_permission_independent');g('independent_arbitration')&&e('guard_independent_arbitration')&&c['add']('voting_guard_configured');g('accept_timeout_protection')&&(c['add']('time_guard_configured'),c['add']('adminUnhold_permission'));g('milestone_escrow')&&f('guard')&&c['add']('milestone_forward_guarded');if(e('main_allocation')&&b['payment']['allocation']&&b['payment']['allocation']['length']>0x0){c['add']('allocators_configured');const h=b['payment']['allocation']['reduce']((j,k)=>j+k['percentage'],0x0);if(Math['abs'](h-0x64)<0.001)c['add']('sharing_sum_100');const i=b['payment']['allocation']['find'](j=>j['recipient']==='platform');if(i&&i['percentage']===0x0)c['add']('platform_fee_zero');g('supplier_collaboration')&&(c['add']('allocation_sharing_configured'),c['add']('demand_configured'));}return g('wip_provenance')&&e('main_repository')&&c['add']('wip_hash_before_delivery'),g('subscription_with_proof')&&e('main_repository')&&(c['add']('delivery_guard_per_cycle'),c['add']('repository_updated')),g('damage_attestation')&&(c['add']('pre_rental_hash'),c['add']('post_rental_hash')),g('refund_guarantee')&&(c['add']('compensation_fund_positive'),c['add']('refund_guard_configured')),c;}function deriveDeployTimeChecks(a){const b=[];return a['nodes']['some'](c=>c['id']==='main_machine')&&b['push']('Machine\x20published\x20AND\x20bound\x20to\x20Service\x20BEFORE\x20Service.publish\x20(machine\x20is\x20immutable\x20after\x20publish)'),a['edges']['some'](c=>c['relation']==='has_order_allocators')&&b['push']('Service.order_allocators\x20bound\x20(verify\x20via\x20query_objects\x20after\x20publish\x20—\x20order_allocators\x20is\x20FROZEN\x20at\x20publish)'),a['nodes']['some'](c=>c['id']==='main_arbitration')&&b['push']('Arbitration.permission\x20!=\x20Service.permission\x20on-chain\x20(E_ARBITRATION_PERMISSION_CONFLICT=33)'),a['nodes']['some'](c=>c['id']==='main_repository')&&b['push']('Repository\x20published\x20and\x20Guard\x20write\x20validation\x20configured'),b['push']('After\x20materialization,\x20confirm\x20the\x20on-chain\x20state\x20matches\x20this\x20plan\x20(query_toolkit\x20query_type=\x27service_panorama\x27)'),b;}function buildCreationPlan(a){const b=[],c=new Map(a['nodes']['map'](i=>[i['id'],i])),f=new Map();for(const i of a['nodes'])f['set'](i['id'],new Set());for(const j of a['edges']){j['required']&&f['has'](j['from'])&&c['has'](j['to'])&&f['get'](j['from'])['add'](j['to']);}const g=[],h=new Map(f);while(h['size']>0x0){const k=[...h['entries']()]['filter'](([,l])=>l['size']===0x0)['map'](([l])=>l);if(k['length']===0x0){g['push'](...h['keys']());break;}k['sort']();for(const l of k){g['push'](l),h['delete'](l);for(const m of h['values']())m['delete'](l);}}return g['forEach']((o,p)=>{const q=c['get'](o),r=q['config']['name'];b['push']({'order':p+0x1,'node_id':o,'object_type':q['type'],'suggested_name':r?.['type']==='string'?r['value']:o,'depends_on':[...f['get'](o)??[]],'operation_hint':'Create\x20'+q['type']+'\x20via\x20onchain_operations,\x20then\x20configure.\x20Purpose:\x20'+q['purpose']});}),b;}async function resolveModePrior(a){if(!a)return undefined;const b=getIndustryModeRegistry(),c=await b['getUserMode'](a,LOCAL_MODE_OWNER);return c??b['getMode'](a);}export async function handleMerchantGuide(a){const b=a['guide_state']??{'intent_text':''},c=a['guide_confirm']??{},d={'intent_text':(a['intent']??b['intent_text']??'')['trim'](),'confirmed_industry':c['industry']??b['confirmed_industry'],'currency':c['currency']??b['currency'],'deliverables':c['deliverables']??b['deliverables'],'payment_override':c['payment']??b['payment_override'],'trust_override':c['trust']??b['trust_override'],'adopted_module_ids':c['adopted_module_ids']??b['adopted_module_ids']};for(const s of Object['keys'](d)){if(d[s]===undefined)delete d[s];}if(!d['intent_text'])throw new Error('merchant_guide\x20requires\x20\x27intent\x27\x20(business\x20description)\x20for\x20Step\x201.\x20'+'Example:\x20intent=\x27I\x20want\x20to\x20offer\x20online\x20design\x20service\x20with\x20milestone\x20payments\x27.\x20'+'Pass\x20the\x20returned\x20guide_state\x20back\x20UNCHANGED\x20on\x20subsequent\x20calls,\x20plus\x20guide_confirm\x20for\x20merchant\x20decisions.');const e=await analyzeIntent(d['intent_text'],{'preferredIndustry':d['confirmed_industry'],'currency':d['currency']});if(!d['confirmed_industry'])return{'action':'merchant_guide','current_step':0x2,'step_name':'Industry\x20Matching','guide_state':d,'intent_draft':e['intent'],'industry_options':{'inferred':e['inferredIndustry'],'confidence':e['industryConfidence'],'similar':e['similarIndustries']},'warnings':e['warnings'],'next_action':'Confirm\x20the\x20industry\x20by\x20calling\x20merchant_guide\x20again\x20with\x20guide_state\x20(UNCHANGED)\x20'+('plus\x20guide_confirm={\x20industry:\x20\x27<one\x20of:\x20'+e['similarIndustries']['join'](',\x20')+'\x20—\x20or\x20any\x20other\x20industry\x20id>\x27\x20}')};const f={...e['intent'],'industry':d['confirmed_industry'],'deliverables':d['deliverables']??e['intent']['deliverables'],'payment':{...e['intent']['payment'],...d['payment_override']??{}},'trust':{...e['intent']['trust'],...d['trust_override']??{}}},g=d['adopted_module_ids']?d['adopted_module_ids']['map'](t=>getBusinessModule(t))['filter'](t=>!!t):recommendModules(d['confirmed_industry'],d['intent_text'],{'maxModules':0x5}),h=await resolveModePrior(d['confirmed_industry']),i=buildSemanticGraph(f,g,h,{'paymentExplicit':!!(d['payment_override']||d['trust_override'])}),j=validateGraph(i),l=derivePlanSatisfiedConstraints(i,f),m=g['map'](t=>checkModuleConstraints(t,l)),n=deriveDeployTimeChecks(i),o=m['filter'](t=>!t['adopted']),p=checkGameTheoryConstraints(i,f),q=assessWorkflowDesign(i),r=buildCreationPlan(i);return{'action':'merchant_guide','current_step':o['length']>0x0?0x9:0xa,'step_name':o['length']>0x0?'Harness\x20Check\x20(issues\x20found)':'Submission\x20Plan\x20Ready','guide_state':{...d,'adopted_module_ids':g['map'](t=>t['id'])},'intent':{'intent_type':f['intent'],'industry':f['industry'],'roles':f['roles'],'deliverables':f['deliverables'],'payment':f['payment'],'trust':f['trust']},'adopted_modules':g['map'](t=>({'id':t['id'],'name':t['name'],'description':t['description'],'requires_keeper':t['requiresKeeper'],'keeper_hint':t['keeperHint'],'user_protections':t['userProtections'],'merchant_obligations':t['merchantObligations']})),'mode_prior':h?{'name':h['name'],'display_name':h['display_name'],'source':h['source'],'risk_appetite':h['risk_appetite'],'key_risk':h['key_risk'],'machine_shape':h['machine_shape']['map'](t=>({'name':t['name'],'role':t['role']})),'guards':h['guards']['map'](t=>({'template_id':t['template_id'],'host':t['host'],'purpose':t['purpose']})),'allocator':h['allocator'],'risk_constraints':h['risk_constraints'],'build_notes':h['build_notes']??[]}:undefined,'blueprint':{'nodes':i['nodes']['map'](t=>({'id':t['id'],'type':t['type'],'purpose':t['purpose']})),'edges':i['edges']['map'](t=>({'from':t['from'],'to':t['to'],'relation':t['relation'],'required':t['required']}))},'evaluation_preview':i['evaluationPreview'],'graph_validation':{'valid':j['valid'],'hard_violations':j['hardViolations']['map'](t=>({'id':t['id'],'description':t['description'],'fix':t['fixSuggestion']})),'soft_notes':j['softViolations']['map'](t=>({'id':t['id'],'description':t['description']}))},'harness_check':{'module_constraints':m['map'](t=>({'module':t['module'],'plan_satisfied':t['adopted'],'missing':t['missingConstraints'],'reason':t['reason'],'estimated_score_boost':t['estimatedScoreBoost']})),'blocking_issues':o['map'](t=>({'module':t['module'],'missing_constraints':t['missingConstraints'],'fix':t['reason']})),'deploy_time_checks':n},'game_theory':{'summary':p['summary'],'coverage':p['coveredCount']+'/'+p['totalCount'],'exposed_scenarios':p['exposedScenarios'],'wow_alignments':p['wowAlignments'],'scenarios':p['results']['map'](t=>({'scenario':t['scenario'],'covered':t['covered'],'conflict':t['conflict'],'user_protection':t['userProtection'],'evaluation_metric':t['evaluationMetric'],'recommendation':t['recommendation']}))},'workflow_design_assessment':{'score':q['score'],'summary':q['summary'],'findings':q['findings']['map'](t=>({'kind':t['kind'],'severity':t['severity'],'message':t['message'],'fix':t['fix']})),'checks':q['checks']['map'](t=>({'id':t['id'],'dimension':t['dimension'],'passed':t['passed'],'severity':t['severity'],'message':t['message'],'fix':t['fix']}))},'creation_plan':r,'warnings':e['warnings'],'next_action':o['length']>0x0?'Resolve\x20the\x20blocking_issues\x20above\x20(adjust\x20guide_confirm\x20payment/trust/modules,\x20or\x20accept\x20and\x20drop\x20the\x20affected\x20module\x20via\x20guide_confirm.adopted_module_ids),\x20then\x20call\x20merchant_guide\x20again.':'Plan\x20ready.\x20Materialize:\x20create\x20the\x20objects\x20in\x20creation_plan\x20order\x20via\x20onchain_operations,\x20then\x20publish\x20the\x20Service\x20(machine\x20binding\x20is\x20immutable\x20after\x20publish).'};}export function listBusinessModules(){return CORE_BUSINESS_MODULES['map'](a=>({'id':a['id'],'name':a['name'],'description':a['description'],'industry_fit':a['industryFit'],'addresses_pain_points':a['addressesPainPoints'],'requires_keeper':a['requiresKeeper']}));}
1
+ import{analyzeIntent}from'./intent-analyzer.js';import{buildSemanticGraph,validateGraph}from'./semantic-graph.js';import{checkGameTheoryConstraints}from'./game-theory.js';import{assessWorkflowDesign}from'./workflow-design-assessment.js';import{CORE_BUSINESS_MODULES,getBusinessModule,recommendModules,checkModuleConstraints}from'../../extensions/business-modules.js';import{getIndustryModeRegistry}from'../../extensions/index.js';import{LOCAL_MODE_OWNER}from'./mode-actions.js';import{recipientDesignGuidance}from'../../knowledge/recipient-constraint.js';function derivePlanSatisfiedConstraints(a,b){const c=new Set(),d=h=>a['edges']['some'](i=>i['relation']===h),e=h=>a['nodes']['some'](i=>i['id']===h),f=h=>a['nodes']['some'](i=>i['type']===h),g=h=>a['adoptedModules']['includes'](h);if(d('has_order_allocators'))c['add']('order_allocators_bound');if(d('uses_machine'))c['add']('machine_bound_before_publish');if(d('has_arbitration'))c['add']('arbitration_bound_to_service');if(e('main_machine'))c['add']('machine_published');if(e('main_repository'))c['add']('repository_published');if(e('main_service'))c['add']('service_published');e('arb_permission')&&e('main_permission')&&c['add']('arbitration_permission_independent');g('independent_arbitration')&&e('guard_independent_arbitration')&&c['add']('voting_guard_configured');g('accept_timeout_protection')&&(c['add']('time_guard_configured'),c['add']('adminUnhold_permission'));g('milestone_escrow')&&f('guard')&&c['add']('milestone_forward_guarded');if(e('main_allocation')&&b['payment']['allocation']&&b['payment']['allocation']['length']>0x0){c['add']('allocators_configured');const h=b['payment']['allocation']['reduce']((j,k)=>j+k['percentage'],0x0);if(Math['abs'](h-0x64)<0.001)c['add']('sharing_sum_100');const i=b['payment']['allocation']['find'](j=>j['recipient']==='platform');if(i&&i['percentage']===0x0)c['add']('platform_fee_zero');g('supplier_collaboration')&&(c['add']('allocation_sharing_configured'),c['add']('demand_configured'));}return g('wip_provenance')&&e('main_repository')&&c['add']('wip_hash_before_delivery'),g('subscription_with_proof')&&e('main_repository')&&(c['add']('delivery_guard_per_cycle'),c['add']('repository_updated')),g('damage_attestation')&&(c['add']('pre_rental_hash'),c['add']('post_rental_hash')),g('refund_guarantee')&&(c['add']('compensation_fund_positive'),c['add']('refund_guard_configured')),c;}function deriveDeployTimeChecks(a){const b=[];return a['nodes']['some'](c=>c['id']==='main_machine')&&b['push']('Machine\x20published\x20AND\x20bound\x20to\x20Service\x20BEFORE\x20Service.publish\x20(machine\x20is\x20immutable\x20after\x20publish)'),a['edges']['some'](c=>c['relation']==='has_order_allocators')&&b['push']('Service.order_allocators\x20bound\x20(verify\x20via\x20query_objects\x20after\x20publish\x20—\x20order_allocators\x20is\x20FROZEN\x20at\x20publish)'),a['nodes']['some'](c=>c['id']==='main_arbitration')&&b['push']('Arbitration.permission\x20!=\x20Service.permission\x20on-chain\x20(E_ARBITRATION_PERMISSION_CONFLICT=33)'),a['nodes']['some'](c=>c['id']==='main_repository')&&b['push']('Repository\x20published\x20and\x20Guard\x20write\x20validation\x20configured'),b['push']('After\x20materialization,\x20confirm\x20the\x20on-chain\x20state\x20matches\x20this\x20plan\x20(query_toolkit\x20query_type=\x27service_panorama\x27)'),b;}function buildCreationPlan(a){const b=[],c=new Map(a['nodes']['map'](i=>[i['id'],i])),f=new Map();for(const i of a['nodes'])f['set'](i['id'],new Set());for(const j of a['edges']){j['required']&&f['has'](j['from'])&&c['has'](j['to'])&&f['get'](j['from'])['add'](j['to']);}const g=[],h=new Map(f);while(h['size']>0x0){const k=[...h['entries']()]['filter'](([,l])=>l['size']===0x0)['map'](([l])=>l);if(k['length']===0x0){g['push'](...h['keys']());break;}k['sort']();for(const l of k){g['push'](l),h['delete'](l);for(const m of h['values']())m['delete'](l);}}return g['forEach']((o,p)=>{const q=c['get'](o),r=q['config']['name'];b['push']({'order':p+0x1,'node_id':o,'object_type':q['type'],'suggested_name':r?.['type']==='string'?r['value']:o,'depends_on':[...f['get'](o)??[]],'operation_hint':'Create\x20'+q['type']+'\x20via\x20onchain_operations,\x20then\x20configure.\x20Purpose:\x20'+q['purpose']});}),b;}async function resolveModePrior(a){if(!a)return undefined;const b=getIndustryModeRegistry(),c=await b['getUserMode'](a,LOCAL_MODE_OWNER);return c??b['getMode'](a);}export async function handleMerchantGuide(a){const b=a['guide_state']??{'intent_text':''},c=a['guide_confirm']??{},d={'intent_text':(a['intent']??b['intent_text']??'')['trim'](),'confirmed_industry':c['industry']??b['confirmed_industry'],'currency':c['currency']??b['currency'],'deliverables':c['deliverables']??b['deliverables'],'payment_override':c['payment']??b['payment_override'],'trust_override':c['trust']??b['trust_override'],'adopted_module_ids':c['adopted_module_ids']??b['adopted_module_ids']};for(const t of Object['keys'](d)){if(d[t]===undefined)delete d[t];}if(!d['intent_text'])throw new Error('merchant_guide\x20requires\x20\x27intent\x27\x20(business\x20description)\x20for\x20Step\x201.\x20'+'Example:\x20intent=\x27I\x20want\x20to\x20offer\x20online\x20design\x20service\x20with\x20milestone\x20payments\x27.\x20'+'Pass\x20the\x20returned\x20guide_state\x20back\x20UNCHANGED\x20on\x20subsequent\x20calls,\x20plus\x20guide_confirm\x20for\x20merchant\x20decisions.');const e=await analyzeIntent(d['intent_text'],{'preferredIndustry':d['confirmed_industry'],'currency':d['currency']});if(!d['confirmed_industry'])return{'action':'merchant_guide','current_step':0x2,'step_name':'Industry\x20Matching','guide_state':d,'intent_draft':e['intent'],'industry_options':{'inferred':e['inferredIndustry'],'confidence':e['industryConfidence'],'similar':e['similarIndustries']},'warnings':e['warnings'],'next_action':'Confirm\x20the\x20industry\x20by\x20calling\x20merchant_guide\x20again\x20with\x20guide_state\x20(UNCHANGED)\x20'+('plus\x20guide_confirm={\x20industry:\x20\x27<one\x20of:\x20'+e['similarIndustries']['join'](',\x20')+'\x20—\x20or\x20any\x20other\x20industry\x20id>\x27\x20}')};const f={...e['intent'],'industry':d['confirmed_industry'],'deliverables':d['deliverables']??e['intent']['deliverables'],'payment':{...e['intent']['payment'],...d['payment_override']??{}},'trust':{...e['intent']['trust'],...d['trust_override']??{}}},g=d['adopted_module_ids']?d['adopted_module_ids']['map'](u=>getBusinessModule(u))['filter'](u=>!!u):recommendModules(d['confirmed_industry'],d['intent_text'],{'maxModules':0x5}),h=await resolveModePrior(d['confirmed_industry']),i=buildSemanticGraph(f,g,h,{'paymentExplicit':!!(d['payment_override']||d['trust_override'])}),j=validateGraph(i),l=derivePlanSatisfiedConstraints(i,f),m=g['map'](u=>checkModuleConstraints(u,l)),n=deriveDeployTimeChecks(i),o=i['edges']['some'](u=>u['relation']==='has_order_allocators')?recipientDesignGuidance()['map'](u=>({'id':u['id'],'move_recipient':u['move_recipient'],'semantics':u['semantics'],'required_constraints':u['required_constraints'],'finding_if_unmet':u['finding_if_unmet']})):undefined,p=m['filter'](u=>!u['adopted']),q=checkGameTheoryConstraints(i,f),r=assessWorkflowDesign(i),s=buildCreationPlan(i);return{'action':'merchant_guide','current_step':p['length']>0x0?0x9:0xa,'step_name':p['length']>0x0?'Harness\x20Check\x20(issues\x20found)':'Submission\x20Plan\x20Ready','guide_state':{...d,'adopted_module_ids':g['map'](u=>u['id'])},'intent':{'intent_type':f['intent'],'industry':f['industry'],'roles':f['roles'],'deliverables':f['deliverables'],'payment':f['payment'],'trust':f['trust']},'adopted_modules':g['map'](u=>({'id':u['id'],'name':u['name'],'description':u['description'],'requires_keeper':u['requiresKeeper'],'keeper_hint':u['keeperHint'],'user_protections':u['userProtections'],'merchant_obligations':u['merchantObligations']})),'mode_prior':h?{'name':h['name'],'display_name':h['display_name'],'source':h['source'],'risk_appetite':h['risk_appetite'],'key_risk':h['key_risk'],'machine_shape':h['machine_shape']['map'](u=>({'name':u['name'],'role':u['role']})),'guards':h['guards']['map'](u=>({'template_id':u['template_id'],'host':u['host'],'purpose':u['purpose']})),'allocator':h['allocator'],'risk_constraints':h['risk_constraints'],'build_notes':h['build_notes']??[]}:undefined,'blueprint':{'nodes':i['nodes']['map'](u=>({'id':u['id'],'type':u['type'],'purpose':u['purpose']})),'edges':i['edges']['map'](u=>({'from':u['from'],'to':u['to'],'relation':u['relation'],'required':u['required']}))},'evaluation_preview':i['evaluationPreview'],'graph_validation':{'valid':j['valid'],'hard_violations':j['hardViolations']['map'](u=>({'id':u['id'],'description':u['description'],'fix':u['fixSuggestion']})),'soft_notes':j['softViolations']['map'](u=>({'id':u['id'],'description':u['description']}))},'harness_check':{'module_constraints':m['map'](u=>({'module':u['module'],'plan_satisfied':u['adopted'],'missing':u['missingConstraints'],'reason':u['reason'],'estimated_score_boost':u['estimatedScoreBoost']})),'blocking_issues':p['map'](u=>({'module':u['module'],'missing_constraints':u['missingConstraints'],'fix':u['reason']})),'deploy_time_checks':n,'recipient_design_guidance':o},'game_theory':{'summary':q['summary'],'coverage':q['coveredCount']+'/'+q['totalCount'],'exposed_scenarios':q['exposedScenarios'],'wow_alignments':q['wowAlignments'],'scenarios':q['results']['map'](u=>({'scenario':u['scenario'],'covered':u['covered'],'conflict':u['conflict'],'user_protection':u['userProtection'],'evaluation_metric':u['evaluationMetric'],'recommendation':u['recommendation']}))},'workflow_design_assessment':{'score':r['score'],'summary':r['summary'],'findings':r['findings']['map'](u=>({'kind':u['kind'],'severity':u['severity'],'message':u['message'],'fix':u['fix']})),'checks':r['checks']['map'](u=>({'id':u['id'],'dimension':u['dimension'],'passed':u['passed'],'severity':u['severity'],'message':u['message'],'fix':u['fix']}))},'creation_plan':s,'warnings':e['warnings'],'next_action':p['length']>0x0?'Resolve\x20the\x20blocking_issues\x20above\x20(adjust\x20guide_confirm\x20payment/trust/modules,\x20or\x20accept\x20and\x20drop\x20the\x20affected\x20module\x20via\x20guide_confirm.adopted_module_ids),\x20then\x20call\x20merchant_guide\x20again.':'Plan\x20ready.\x20Materialize:\x20create\x20the\x20objects\x20in\x20creation_plan\x20order\x20via\x20onchain_operations,\x20then\x20publish\x20the\x20Service\x20(machine\x20binding\x20is\x20immutable\x20after\x20publish).'};}export function listBusinessModules(){return CORE_BUSINESS_MODULES['map'](a=>({'id':a['id'],'name':a['name'],'description':a['description'],'industry_fit':a['industryFit'],'addresses_pain_points':a['addressesPainPoints'],'requires_keeper':a['requiresKeeper']}));}
@@ -1 +1 @@
1
- import{Config,LocalMark,query_objects,query_object_last_updated,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{batchReadAddressKeyedFields,fetchObjectLinkerTx}from'../../knowledge/workflow-guidance.js';const js=a=>{if(typeof a==='bigint')return a['toString']();if(a&&typeof a==='object'&&!Array['isArray'](a)){const b={};for(const [c,d]of Object['entries'](a)){b[c]=js(d);}return b;}if(Array['isArray'](a))return a['map'](js);return a;},str=a=>a===null||a===undefined?null:String(a),ownerAddr=a=>{if(typeof a==='string')return a;const b=a;if(b&&typeof b==='object'){if(typeof b['AddressOwner']==='string')return b['AddressOwner'];if(typeof b['ObjectOwner']==='string')return b['ObjectOwner'];const c=Object['values'](b)['find'](d=>typeof d==='string'&&d['length']>0x14);if(typeof c==='string')return c;}return null;},num=a=>{if(typeof a==='bigint')return Number(a);if(typeof a==='number')return Number['isFinite'](a)?a:null;if(typeof a==='string'&&a['trim']()!==''){const b=Number(a);return Number['isFinite'](b)?b:null;}return null;},arr=a=>Array['isArray'](a)?a:[],ARB_STATUS_NAMES={0x0:'Principal_confirming',0x1:'Arbitrator_confirming',0x2:'Voting',0x3:'Arbitrated',0x4:'Objectionable',0x5:'Finished',0x6:'Withdrawn'};async function resolveObject(a,b){let c=a;if(!/^0x[0-9a-fA-F]{32,64}$/['test'](c)){const g=await LocalMark['Instance']()['get_address'](c);if(!g)throw new Error('Cannot\x20resolve\x20\x27'+c+'\x27\x20—\x20not\x20a\x20valid\x20address\x20and\x20no\x20LocalMark\x20entry\x20found.');c=g;}let d=b??undefined,f=null;if(!d)d=await Config['Instance']()['network_get']();try{const h=await query_objects({'objects':[c],'network':d});f=h?.['objects']?.[0x0]??null;if(!f&&b){const i=await Config['Instance']()['network_get']();if(i&&i!==d){const j=await query_objects({'objects':[c],'network':i,'no_cache':!![]}),k=j?.['objects']?.[0x0]??null;k&&(f=k,d=i);}}}catch(l){throw new Error('Failed\x20to\x20query\x20'+c+'\x20on\x20'+d+':\x20'+(l instanceof Error?l['message']:String(l)));}if(!f)throw new Error(c+'\x20not\x20found\x20on\x20'+d+'.\x20It\x20may\x20not\x20exist\x20on\x20this\x20network.');return f['object']=f['object']??c,{'network':String(d),'obj':f};}async function resolveHead(a,b,c){let d=null,e=[];try{const f=await LocalMark['Instance']()['list']({'address':a});f['length']>0x0&&(d=f[0x0]['name']??null,e=(f[0x0]['tags']??[])['map'](g=>String(g)));}catch{c['push']('head:\x20LocalMark\x20lookup\x20failed');}return{'name':d,'tags':e,'description':str(b['description'])};}async function buildPresenters(a,b,c){const d=[];let e=0x0;try{const f=await fetchObjectLinkerTx(a,b,!![]),g=(f?.['items']??[])['map'](j=>({'service':String(j?.['who']??''),'time':typeof j?.['time']==='number'?j['time']:null}))['filter'](j=>objectTypeFromAddress(j['service'])===ObjectType['Service']);e=g['length'];const h=g['slice'](-0x32)['reverse'](),i=await batchReadAddressKeyedFields(a,h['map'](j=>j['service']),b,!![]);for(const j of h){const k=i['get'](j['service']['toLowerCase']());d['push']({'service':j['service'],'recommend':str(k?.['recommend']),'acceptance_score':num(k?.['acceptance_score']),'feedback':str(k?.['feedback']),'feedback_time':num(k?.['feedback_time']),'update_time':num(k?.['update_time'])??j['time']});}}catch{c['push']('presenters:\x20global-table\x20lookup\x20failed\x20(non-blocking)');}return{'count':e,'items':d};}async function buildRepositoryData(a,b,c){return void a,void b,c['push']('data:\x20per-key\x20enumeration\x20requires\x20the\x20{entity,name}\x20pair\x20—\x20showing\x20count\x20only'),{'count':null,'items':[]};}export async function handleObjectPanorama(b){const c=b['object_address'];if(!c)throw new Error('\x27object_address\x27\x20is\x20required\x20for\x20object_panorama');const {network:d,obj:e}=await resolveObject(c,b['context_network']),f=String(e['object']),g=[],h=await resolveHead(f,e,g),j=String(e['type']??'');if(j==='Progress'){const k=arr(e['session'])[0x0],l=k?{'next_node':str(k['next_node']),'weights':num(k['weights']),'threshold':num(k['threshold']),'forwards':arr(k['forwards'])['map'](n=>{const o=n;return{'forward':str(o['forward'])??'','who':str(o['who']),'accomplished':o['accomplished']===!![],'msg':str(o['msg']),'time':num(o['time'])};})}:null,m={'key':typeof e['machine']==='string'?e['machine']:null,'items':[],'count':0x0};if(m['key'])try{const n=await fetchObjectLinkerTx(m['key'],d,!![]),o=n?.['items']??[];for(const q of o['slice'](-0x32)['reverse']()){const r=typeof q?.['who']==='string'?q['who']:'';if(!r||r['toLowerCase']()===f['toLowerCase']())continue;let s;try{s=objectTypeFromAddress(r);}catch{}if(!s)continue;m['items']['push']({'address':r,'object_type':s,'time':typeof q?.['time']==='number'?q['time']:null});}m['count']=m['items']['length'];}catch{g['push']('related:\x20ObjectLinkerTx(machine)\x20lookup\x20failed');}return{'action':'object_panorama','object':f,'object_type':'Progress','network':d,'head':h,'fields':{'machine':str(e['machine']),'current':str(e['current']),'task':str(e['task']),'history_count':num(e['history_count']),'current_time':num(e['current_time'])},'context_repositories':arr(e['context_repositories'])['map'](t=>String(t)),'operators':arr(e['namedOperator'])['map'](t=>{const u=t;return{'name':str(u['name'])??'','operators':arr(u['operators'])['map'](w=>String(w))};}),'session':l,'related':m,'data_gaps':g};}if(j==='Demand')return{'action':'object_panorama','object':f,'object_type':'Demand','network':d,'head':h,'fields':{'location':str(e['location']),'um':str(e['um']),'permission':str(e['permission']),'presenters_count':num(e['presenters_count'])},'rewards':arr(e['rewards'])['map'](t=>String(t)),'guards':arr(e['guards'])['map'](t=>({'guard':str(t['guard'])??''})),'presenters':await buildPresenters(f,d,g),'data_gaps':g};if(j==='Order'){let t=null;try{const C=await query_object_last_updated({'object':f,'network':d,'previous_transaction':str(e['previousTransaction'])});t=C?.['timestamp_ms']?Number(C['timestamp_ms'])||null:null;}catch{}let u='none',w=null,x=null;const y=str(e['allocation']),z=str(e['progress']),A=[y,z]['filter'](D=>!!D);if(A['length']>0x0)try{const D=await query_objects({'objects':A,'network':d}),E=D?.['objects']??[];if(y){u='pending';const F=E['find'](H=>H?.['object']===y),G=Number(F?.['balance']??NaN);if(Number['isFinite'](G)&&G===0x0)u='allocated';}if(z){const H=E['find'](I=>I?.['object']===z);w=str(H?.['current']),x=num(H?.['current_time']);}}catch{}const B={'key':f,'items':[],'count':0x0};try{const I=await fetchObjectLinkerTx(f,d,!![]),J=I?.['items']??[];for(const K of J['slice'](-0x32)['reverse']()){const L=typeof K?.['who']==='string'?K['who']:'';if(!L||L['toLowerCase']()===f['toLowerCase']())continue;let M;try{M=objectTypeFromAddress(L);}catch{}if(!M)continue;B['items']['push']({'address':L,'object_type':M,'time':typeof K?.['time']==='number'?K['time']:null});}B['count']=B['items']['length'];}catch{g['push']('related:\x20ObjectLinkerTx(order)\x20lookup\x20failed');}return{'action':'object_panorama','object':f,'object_type':'Order','network':d,'head':h,'fields':{'service':str(e['service']),'machine':str(e['machine']),'progress':z,'allocation':y,'discount':str(e['discount']),'amount':str(e['amount']),'owner':ownerAddr(e['builder']??e['owner']),'claimed_by':str(e['claimed_by']),'required_info':str(e['required_info']),'time':num(e['time'])},'updated_ms':t,'related':B,'allocation_state':u,'progress_next':w,'progress_since':x,'items':arr(e['items'])['map'](N=>{const O=N;return{'name':str(O['name']),'price':str(O['price']),'quantity':str(O['quantity']),'wip_hash':str(O['wip_hash'])};}),'disputes':arr(e['dispute'])['map'](N=>String(N)),'agents':arr(e['agent'])['map'](N=>String(N)),'data_gaps':g};}if(j==='Arb'){const N=e['indemnity'];let O=null;try{const S=await query_object_last_updated({'object':f,'network':d,'previous_transaction':str(e['previousTransaction'])});O=S?.['timestamp_ms']?Number(S['timestamp_ms'])||null:null;}catch{}const P=str(e['order']);let Q=null;if(P)try{const T=await query_objects({'objects':[P],'network':d}),U=T?.['objects']?.[0x0];Q=str(U?.['service']);}catch{}const R={'key':f,'items':[],'count':0x0};try{const V=await fetchObjectLinkerTx(f,d,!![]),W=V?.['items']??[];for(const X of W['slice'](-0x32)['reverse']()){const Y=typeof X?.['who']==='string'?X['who']:'';if(!Y||Y['toLowerCase']()===f['toLowerCase']())continue;let Z;try{Z=objectTypeFromAddress(Y);}catch{}if(!Z)continue;R['items']['push']({'address':Y,'object_type':Z,'time':typeof X?.['time']==='number'?X['time']:null});}R['count']=R['items']['length'];}catch{g['push']('related:\x20ObjectLinkerTx(arb)\x20lookup\x20failed');}return{'action':'object_panorama','object':f,'object_type':'Arb','network':d,'head':h,'fields':{'arbitration':str(e['arbitration']),'order':str(e['order']),'service':Q,'fee':str(e['fee']),'feedback':str(e['feedback']),'indemnity':N?{'amount':str(N['amount']),'time':num(N['time'])}:null,'voting_deadline':num(e['voting_deadline']),'objection':str(e['objection']),'status':ARB_STATUS_NAMES[num(e['status'])??-0x1]??str(e['status']),'compensation_time':num(e['compensation_time']),'time':num(e['time']),'type_raw':str(e['type_raw'])},'voted':arr(e['voted'])['map'](a0=>{const a1=a0;return{'voter':str(a1['voter'])??'','agrees':arr(a1['agrees'])['map'](a2=>Number(a2)),'weight':num(a1['weight'])??0x0,'time':num(a1['time'])??0x0};}),'proposition':arr(e['proposition'])['map'](a0=>{const a1=a0;return{'name':str(a1['name'])??'','votes':num(a1['votes'])??0x0};}),'related':R,'updated_ms':O,'data_gaps':g};}if(j==='Repository')return{'action':'object_panorama','object':f,'object_type':'Repository','network':d,'head':h,'fields':{'um':str(e['um']),'permission':str(e['permission']),'data_count':num(e['data_count'])},'policies':arr(e['policies'])['map'](a0=>{const a1=a0;return{'name':str(a1['name'])??'','description':str(a1['description']),'id_from':str(a1['id_from']),'value_type':str(a1['value_type']),'write_guards':arr(a1['write_guard'])['length'],'quote_guard':str(a1['quote_guard'])};}),'rewards':arr(e['rewards'])['map'](a0=>String(a0)),'data_entries':await buildRepositoryData(f,d,g),'data_gaps':g};throw new Error('object_panorama:\x20unsupported\x20object\x20type\x20\x27'+(j||'unknown')+'\x27\x20for\x20'+f+'.\x20'+'Supported:\x20Progress\x20/\x20Demand\x20/\x20Order\x20/\x20Arb\x20/\x20Repository.');}
1
+ import{Config,LocalMark,query_objects,query_object_last_updated,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{batchReadAddressKeyedFields,fetchObjectLinkerTx}from'../../graph/onchain/sdk-batch.js';const js=a=>{if(typeof a==='bigint')return a['toString']();if(a&&typeof a==='object'&&!Array['isArray'](a)){const b={};for(const [c,d]of Object['entries'](a)){b[c]=js(d);}return b;}if(Array['isArray'](a))return a['map'](js);return a;},str=a=>a===null||a===undefined?null:String(a),ownerAddr=a=>{if(typeof a==='string')return a;const b=a;if(b&&typeof b==='object'){if(typeof b['AddressOwner']==='string')return b['AddressOwner'];if(typeof b['ObjectOwner']==='string')return b['ObjectOwner'];const c=Object['values'](b)['find'](d=>typeof d==='string'&&d['length']>0x14);if(typeof c==='string')return c;}return null;},num=a=>{if(typeof a==='bigint')return Number(a);if(typeof a==='number')return Number['isFinite'](a)?a:null;if(typeof a==='string'&&a['trim']()!==''){const b=Number(a);return Number['isFinite'](b)?b:null;}return null;},arr=a=>Array['isArray'](a)?a:[],ARB_STATUS_NAMES={0x0:'Principal_confirming',0x1:'Arbitrator_confirming',0x2:'Voting',0x3:'Arbitrated',0x4:'Objectionable',0x5:'Finished',0x6:'Withdrawn'};async function resolveObject(a,b){let c=a;if(!/^0x[0-9a-fA-F]{32,64}$/['test'](c)){const g=await LocalMark['Instance']()['get_address'](c);if(!g)throw new Error('Cannot\x20resolve\x20\x27'+c+'\x27\x20—\x20not\x20a\x20valid\x20address\x20and\x20no\x20LocalMark\x20entry\x20found.');c=g;}let d=b??undefined,f=null;if(!d)d=await Config['Instance']()['network_get']();try{const h=await query_objects({'objects':[c],'network':d});f=h?.['objects']?.[0x0]??null;if(!f&&b){const i=await Config['Instance']()['network_get']();if(i&&i!==d){const j=await query_objects({'objects':[c],'network':i,'no_cache':!![]}),k=j?.['objects']?.[0x0]??null;k&&(f=k,d=i);}}}catch(l){throw new Error('Failed\x20to\x20query\x20'+c+'\x20on\x20'+d+':\x20'+(l instanceof Error?l['message']:String(l)));}if(!f)throw new Error(c+'\x20not\x20found\x20on\x20'+d+'.\x20It\x20may\x20not\x20exist\x20on\x20this\x20network.');return f['object']=f['object']??c,{'network':String(d),'obj':f};}async function resolveHead(a,b,c){let d=null,e=[];try{const f=await LocalMark['Instance']()['list']({'address':a});f['length']>0x0&&(d=f[0x0]['name']??null,e=(f[0x0]['tags']??[])['map'](g=>String(g)));}catch{c['push']('head:\x20LocalMark\x20lookup\x20failed');}return{'name':d,'tags':e,'description':str(b['description'])};}async function buildPresenters(a,b,c){const d=[];let e=0x0;try{const f=await fetchObjectLinkerTx(a,b,!![]),g=(f?.['items']??[])['map'](j=>({'service':String(j?.['who']??''),'time':typeof j?.['time']==='number'?j['time']:null}))['filter'](j=>objectTypeFromAddress(j['service'])===ObjectType['Service']);e=g['length'];const h=g['slice'](-0x32)['reverse'](),i=await batchReadAddressKeyedFields(a,h['map'](j=>j['service']),b,!![]);for(const j of h){const k=i['get'](j['service']['toLowerCase']());d['push']({'service':j['service'],'recommend':str(k?.['recommend']),'acceptance_score':num(k?.['acceptance_score']),'feedback':str(k?.['feedback']),'feedback_time':num(k?.['feedback_time']),'update_time':num(k?.['update_time'])??j['time']});}}catch{c['push']('presenters:\x20global-table\x20lookup\x20failed\x20(non-blocking)');}return{'count':e,'items':d};}async function buildRepositoryData(a,b,c){return void a,void b,c['push']('data:\x20per-key\x20enumeration\x20requires\x20the\x20{entity,name}\x20pair\x20—\x20showing\x20count\x20only'),{'count':null,'items':[]};}export async function handleObjectPanorama(b){const c=b['object_address'];if(!c)throw new Error('\x27object_address\x27\x20is\x20required\x20for\x20object_panorama');const {network:d,obj:e}=await resolveObject(c,b['context_network']),f=String(e['object']),g=[],h=await resolveHead(f,e,g),j=String(e['type']??'');if(j==='Progress'){const k=arr(e['session'])[0x0],l=k?{'next_node':str(k['next_node']),'weights':num(k['weights']),'threshold':num(k['threshold']),'forwards':arr(k['forwards'])['map'](n=>{const o=n;return{'forward':str(o['forward'])??'','who':str(o['who']),'accomplished':o['accomplished']===!![],'msg':str(o['msg']),'time':num(o['time'])};})}:null,m={'key':typeof e['machine']==='string'?e['machine']:null,'items':[],'count':0x0};if(m['key'])try{const n=await fetchObjectLinkerTx(m['key'],d,!![]),o=n?.['items']??[];for(const q of o['slice'](-0x32)['reverse']()){const r=typeof q?.['who']==='string'?q['who']:'';if(!r||r['toLowerCase']()===f['toLowerCase']())continue;let s;try{s=objectTypeFromAddress(r);}catch{}if(!s)continue;m['items']['push']({'address':r,'object_type':s,'time':typeof q?.['time']==='number'?q['time']:null});}m['count']=m['items']['length'];}catch{g['push']('related:\x20ObjectLinkerTx(machine)\x20lookup\x20failed');}return{'action':'object_panorama','object':f,'object_type':'Progress','network':d,'head':h,'fields':{'machine':str(e['machine']),'current':str(e['current']),'task':str(e['task']),'history_count':num(e['history_count']),'current_time':num(e['current_time'])},'context_repositories':arr(e['context_repositories'])['map'](t=>String(t)),'operators':arr(e['namedOperator'])['map'](t=>{const u=t;return{'name':str(u['name'])??'','operators':arr(u['operators'])['map'](w=>String(w))};}),'session':l,'related':m,'data_gaps':g};}if(j==='Demand')return{'action':'object_panorama','object':f,'object_type':'Demand','network':d,'head':h,'fields':{'location':str(e['location']),'um':str(e['um']),'permission':str(e['permission']),'presenters_count':num(e['presenters_count'])},'rewards':arr(e['rewards'])['map'](t=>String(t)),'guards':arr(e['guards'])['map'](t=>({'guard':str(t['guard'])??''})),'presenters':await buildPresenters(f,d,g),'data_gaps':g};if(j==='Order'){let t=null;try{const C=await query_object_last_updated({'object':f,'network':d,'previous_transaction':str(e['previousTransaction'])});t=C?.['timestamp_ms']?Number(C['timestamp_ms'])||null:null;}catch{}let u='none',w=null,x=null;const y=str(e['allocation']),z=str(e['progress']),A=[y,z]['filter'](D=>!!D);if(A['length']>0x0)try{const D=await query_objects({'objects':A,'network':d}),E=D?.['objects']??[];if(y){u='pending';const F=E['find'](H=>H?.['object']===y),G=Number(F?.['balance']??NaN);if(Number['isFinite'](G)&&G===0x0)u='allocated';}if(z){const H=E['find'](I=>I?.['object']===z);w=str(H?.['current']),x=num(H?.['current_time']);}}catch{}const B={'key':f,'items':[],'count':0x0};try{const I=await fetchObjectLinkerTx(f,d,!![]),J=I?.['items']??[];for(const K of J['slice'](-0x32)['reverse']()){const L=typeof K?.['who']==='string'?K['who']:'';if(!L||L['toLowerCase']()===f['toLowerCase']())continue;let M;try{M=objectTypeFromAddress(L);}catch{}if(!M)continue;B['items']['push']({'address':L,'object_type':M,'time':typeof K?.['time']==='number'?K['time']:null});}B['count']=B['items']['length'];}catch{g['push']('related:\x20ObjectLinkerTx(order)\x20lookup\x20failed');}return{'action':'object_panorama','object':f,'object_type':'Order','network':d,'head':h,'fields':{'service':str(e['service']),'machine':str(e['machine']),'progress':z,'allocation':y,'discount':str(e['discount']),'amount':str(e['amount']),'owner':ownerAddr(e['builder']??e['owner']),'claimed_by':str(e['claimed_by']),'required_info':str(e['required_info']),'time':num(e['time'])},'updated_ms':t,'related':B,'allocation_state':u,'progress_next':w,'progress_since':x,'items':arr(e['items'])['map'](N=>{const O=N;return{'name':str(O['name']),'price':str(O['price']),'quantity':str(O['quantity']),'wip_hash':str(O['wip_hash'])};}),'disputes':arr(e['dispute'])['map'](N=>String(N)),'agents':arr(e['agent'])['map'](N=>String(N)),'data_gaps':g};}if(j==='Arb'){const N=e['indemnity'];let O=null;try{const S=await query_object_last_updated({'object':f,'network':d,'previous_transaction':str(e['previousTransaction'])});O=S?.['timestamp_ms']?Number(S['timestamp_ms'])||null:null;}catch{}const P=str(e['order']);let Q=null;if(P)try{const T=await query_objects({'objects':[P],'network':d}),U=T?.['objects']?.[0x0];Q=str(U?.['service']);}catch{}const R={'key':f,'items':[],'count':0x0};try{const V=await fetchObjectLinkerTx(f,d,!![]),W=V?.['items']??[];for(const X of W['slice'](-0x32)['reverse']()){const Y=typeof X?.['who']==='string'?X['who']:'';if(!Y||Y['toLowerCase']()===f['toLowerCase']())continue;let Z;try{Z=objectTypeFromAddress(Y);}catch{}if(!Z)continue;R['items']['push']({'address':Y,'object_type':Z,'time':typeof X?.['time']==='number'?X['time']:null});}R['count']=R['items']['length'];}catch{g['push']('related:\x20ObjectLinkerTx(arb)\x20lookup\x20failed');}return{'action':'object_panorama','object':f,'object_type':'Arb','network':d,'head':h,'fields':{'arbitration':str(e['arbitration']),'order':str(e['order']),'service':Q,'fee':str(e['fee']),'feedback':str(e['feedback']),'indemnity':N?{'amount':str(N['amount']),'time':num(N['time'])}:null,'voting_deadline':num(e['voting_deadline']),'objection':str(e['objection']),'status':ARB_STATUS_NAMES[num(e['status'])??-0x1]??str(e['status']),'compensation_time':num(e['compensation_time']),'time':num(e['time']),'type_raw':str(e['type_raw'])},'voted':arr(e['voted'])['map'](a0=>{const a1=a0;return{'voter':str(a1['voter'])??'','agrees':arr(a1['agrees'])['map'](a2=>Number(a2)),'weight':num(a1['weight'])??0x0,'time':num(a1['time'])??0x0};}),'proposition':arr(e['proposition'])['map'](a0=>{const a1=a0;return{'name':str(a1['name'])??'','votes':num(a1['votes'])??0x0};}),'related':R,'updated_ms':O,'data_gaps':g};}if(j==='Repository')return{'action':'object_panorama','object':f,'object_type':'Repository','network':d,'head':h,'fields':{'um':str(e['um']),'permission':str(e['permission']),'data_count':num(e['data_count'])},'policies':arr(e['policies'])['map'](a0=>{const a1=a0;return{'name':str(a1['name'])??'','description':str(a1['description']),'id_from':str(a1['id_from']),'value_type':str(a1['value_type']),'write_guards':arr(a1['write_guard'])['length'],'quote_guard':str(a1['quote_guard'])};}),'rewards':arr(e['rewards'])['map'](a0=>String(a0)),'data_entries':await buildRepositoryData(f,d,g),'data_gaps':g};throw new Error('object_panorama:\x20unsupported\x20object\x20type\x20\x27'+(j||'unknown')+'\x27\x20for\x20'+f+'.\x20'+'Supported:\x20Progress\x20/\x20Demand\x20/\x20Order\x20/\x20Arb\x20/\x20Repository.');}
@@ -1 +1 @@
1
- import{LocalMark,watch_conversations}from'@wowok/wowok';import{analyzeOrderParticipation,aggregateRadar,isConsequenceNode}from'../../participation/radar-core.js';import{monitorOrder}from'../../customer/order-monitor.js';import{analyzeMerchantInterest}from'../../participation/merchant-interest.js';import{analyzeCustomerInterest}from'../../participation/customer-interest.js';import{analyzeSupplierInterest}from'../../participation/supplier-interest.js';import{analyzeCollaboratorInterest}from'../../participation/collaborator-interest.js';import{fetchMachineNodes}from'./machine-nodes.js';import{extractGenericTokenType,registryDisplayHint}from'../../knowledge/fund-layer.js';import{batchQueryObjectsByIds,batchQueryTableItems}from'../../knowledge/workflow-guidance.js';function fld(a,b){return a?.[b]??a?.['data']?.[b];}async function resolveAddress(a,b){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'+'Register\x20it\x20via\x20local_mark_operation\x20or\x20pass\x20the\x200x\x20address\x20directly.');return c;}function balanceStr(a){if(a==null)return undefined;if(typeof a==='object'&&'balance'in a)return String(a['balance']);return String(a);}function balanceToken(a){if(a!=null&&typeof a==='object'&&typeof a['token_type']==='string')return a['token_type'];return undefined;}function summarizeAllocation(a,b){const c=Array['isArray'](a)?a:Array['isArray'](a?.['allocators'])?a['allocators']:[];if(c['length']===0x0)return undefined;let d=0x0,e=0x0,f=0x0,g=0x0;const h=b['toLowerCase']();for(const i of c){for(const j of i?.['sharing']??[]){d++;const k=j?.['who'];if(k==null)continue;if(typeof k==='object'&&'GuardIdentifier'in k)e++;else{if(typeof k==='object'&&'Signer'in k)g++;else{if(typeof k==='object'&&'Entity'in k){const l=k['Entity'],m=typeof l==='string'?l:l?.['name_or_address'];if(typeof m==='string'&&m['toLowerCase']()===h)f++;}else typeof k==='string'&&k['toLowerCase']()===h&&f++;}}}}return{'recipient_slots':d,'guard_gated_slots':e,'direct_to_me_slots':f,'to_payer_slots':g};}async function fetchEntityPermissions(a,b){const c=new Map(),{items:d}=await batchQueryTableItems(a,{'network':b});for(const e of d){const f=e['object'];if(f?.['type']!=='TableItem_PermissionPerm')continue;const g=fld(f,'address'),h=fld(f,'perm')??[],i=h['map'](j=>typeof j==='number'?j:typeof j?.['index']==='number'?j['index']:null)['filter'](j=>j!==null);if(g)c['set'](g,i);}return c;}function toRadarMachineNodes(a){return a['map'](b=>({'name':b['name'],'pairs':(Array['isArray'](b['value'])?b['value']:[])['map'](c=>({'prev_node':c['prev_node'],'threshold':c['threshold']??undefined,'forwards':(c['forwards']??[])['map'](d=>({'name':d['name'],'permissionIndex':d['permissionIndex']??null,'namedOperator':d['namedOperator']??null,'guard':d['guard']?.['guard']??(typeof d['guard']==='string'?d['guard']:null),'weight':d['weight']??null}))}))}));}export async function handleParticipationRadar(a){if(!a['radar_account'])throw new Error('\x27radar_account\x27\x20is\x20required\x20for\x20participation_radar');if(!a['radar_targets']||a['radar_targets']['length']===0x0)throw new Error('\x27radar_targets\x27\x20(1-20\x20in-flight\x20orders)\x20is\x20required\x20for\x20participation_radar');const b=a['context_network']??'testnet',d=a['radar_include_alerts']??!![],f=[],g=await resolveAddress(a['radar_account'],'radar_account'),h=await Promise['all'](a['radar_targets']['map'](async I=>({'progress':await resolveAddress(I['progress'],'progress'),'order':I['order']?await resolveAddress(I['order'],'order'):undefined}))),i=h['flatMap'](I=>I['order']?[I['progress'],I['order']]:[I['progress']]),j=await batchQueryObjectsByIds(i,b),k=new Map();for(const I of j){const J=fld(I,'object');if(J)k['set'](J,I);}const l=new Map(),m=new Map();for(const K of h){const L=k['get'](K['progress']);if(!L){f['push']('Progress\x20'+K['progress']+'\x20not\x20found\x20on\x20'+b+'\x20—\x20target\x20skipped.');continue;}l['set'](K['progress'],L);if(K['order']){const M=k['get'](K['order']);if(M)m['set'](K['order'],M);else f['push']('Order\x20'+K['order']+'\x20not\x20found\x20on\x20'+b+'\x20—\x20order-holder\x20detection\x20disabled\x20for\x20'+K['progress']+'.');}}h['length']>0x0&&l['size']===0x0&&f['push']('NETWORK\x20MISMATCH\x20SUSPECTED:\x200/'+h['length']+'\x20radar\x20targets\x20exist\x20on\x20network=\x27'+b+'\x27.\x20'+'These\x20objects\x20most\x20likely\x20live\x20on\x20a\x20different\x20network\x20—\x20re-run\x20with\x20the\x20matching\x20\x27network\x27\x20parameter.');const q=[...new Set([...l['values']()]['map'](N=>fld(N,'machine'))['filter'](N=>!!N))],s=[...new Set([...m['values']()]['map'](N=>fld(N,'service'))['filter'](N=>!!N))],u=[...new Set([...m['values']()]['flatMap'](N=>{const O=fld(N,'dispute');return Array['isArray'](O)?O:[];}))],w=new Map(),x=new Map(),y=new Map(),z=new Map();await Promise['all']([...q['map'](async N=>{try{const [O,P]=await Promise['all']([batchQueryObjectsByIds([N],b),fetchMachineNodes(N,b)]);if(O[0x0])w['set'](N,O[0x0]);x['set'](N,toRadarMachineNodes(P));}catch(Q){f['push']('Machine\x20'+N+'\x20fetch\x20failed:\x20'+Q['message']+'\x20—\x20workflow\x20unknown\x20for\x20its\x20orders.');}}),((async()=>{if(s['length']===0x0)return;try{const N=await batchQueryObjectsByIds(s,b);for(const O of N){const P=fld(O,'object');if(P)y['set'](P,O);}}catch(Q){f['push']('Service\x20query\x20failed:\x20'+Q['message']+'\x20—\x20compensation/reward\x20context\x20degraded.');}})()),((async()=>{if(u['length']===0x0)return;try{const N=await batchQueryObjectsByIds(u,b);for(const O of N){const P=fld(O,'object');if(P)z['set'](P,O);}}catch(Q){f['push']('Arb\x20query\x20failed:\x20'+Q['message']+'\x20—\x20compensation\x20claim\x20detection\x20disabled.');}})())]);const A=new Map(),B=[...new Set(q['map'](N=>fld(w['get'](N),'permission'))['filter'](N=>!!N))],C=new Map();await Promise['all'](B['map'](async N=>{try{const [O,P]=await Promise['all']([batchQueryObjectsByIds([N],b),fetchEntityPermissions(N,b)]),Q=O[0x0];C['set'](N,{'address':N,'entity_count':fld(Q,'entity_count'),'perm_remark':fld(Q,'perm_remark'),'entityPermissions':P,'owner':fld(Q,'builder')});}catch(R){f['push']('Permission\x20'+N+'\x20fetch\x20failed:\x20'+R['message']+'\x20—\x20operator\x20permission\x20matching\x20degraded.');}}));for(const N of q){const O=fld(w['get'](N),'permission');if(O&&C['has'](O))A['set'](N,C['get'](O));}let D=0x0;const E=new Map();try{const P=await watch_conversations({'account':g,'unreadOnly':!![],'previewMessageCount':0x0,'skipAutoMarkViewed':!![]}),Q=Array['isArray'](P)?P:P?.['conversations']??[];for(const R of Q){const S=R?.['peerAddress'],T=typeof R?.['unreadCount']==='number'?R['unreadCount']:0x0;typeof S==='string'&&T>0x0&&(E['set'](S['toLowerCase'](),T),D+=T);}}catch{f['push']('Messenger\x20unread\x20unavailable\x20(radar\x20account\x20is\x20not\x20a\x20local\x20messenger\x20account,\x20or\x20messenger\x20storage\x20offline)\x20'+'—\x20unread_messages_total\x20reported\x20as\x200.');}const F=[],G=Date['now']();for(const U of h){const V=l['get'](U['progress']);if(!V)continue;const W=U['order']?m['get'](U['order']):undefined,X=fld(V,'machine'),Y=fld(V,'current')??'',Z=fld(V,'namedOperator')??[],a0={};for(const ae of Z){if(ae?.['name'])a0[ae['name']]=Array['isArray'](ae['operators'])?ae['operators']:[];}const a1=W?fld(W,'service'):undefined,a2=a1?y['get'](a1):undefined;let a3;const a4=W?fld(W,'builder'):undefined;if(W&&a4===g){const af=fld(W,'dispute')??[];for(const ag of af){const ah=z['get'](ag);if(!ah)continue;const ai=fld(ah,'indemnity');if(ai){a3={'arbitration':fld(ah,'arbitration')??ag,'note':'Arbitration\x20verdict\x20recorded\x20an\x20indemnity\x20(Arb\x20'+ag+').\x20'+'Claim\x20via\x20service\x20op=\x27compensation_claim\x27\x20—\x20paid\x20directly\x20from\x20the\x20Service\x20compensation_fund.\x20'+'(Claimed-status\x20is\x20not\x20readable\x20from\x20the\x20Arb\x20object;\x20the\x20contract\x20rejects\x20double-claims.)'};break;}}}const a5=[];if(a2&&a4===g){const aj=fld(a2,'rewards')??[];for(const ak of aj){a5['push']({'address':ak,'description':'Service\x20reward\x20'+ak+'\x20(guard-gated\x20—\x20eligibility\x20verified\x20at\x20claim\x20time)'});}}const a6=isConsequenceNode(Y,'completed'),a7=isConsequenceNode(Y,'refunded');let a8=0x0;if(E['size']>0x0){const al=new Set();if(a4)al['add'](a4['toLowerCase']());for(const am of Object['values'](a0)){for(const an of am)al['add'](an['toLowerCase']());}al['delete'](g['toLowerCase']());for(const ao of al){a8+=E['get'](ao)??0x0;}}const a9={'account':g,'progress_address':U['progress'],'order_address':U['order'],'current_node':Y,'order_holder':a4,'machine_nodes':X?x['get'](X):undefined,'permission':X?A['get'](X)??null:null,'named_accounts':a0,'claimable_rewards':a5['length']>0x0?a5:undefined,'pending_compensation':a3,'rating_pending':a6&&a4===g,'unread_messages':a8>0x0?a8:undefined,'last_progress_at':fld(V,'current_time')??undefined,'now':G},aa=analyzeOrderParticipation(a9),ab=(fld(a2,'arbitrations')??[])['length']>0x0,ac=a6?'completed':a7?'refunded':null,ad=a9['last_progress_at']!=null?(G-a9['last_progress_at'])/0x36ee80:undefined;if(aa['perspective']==='merchant')aa['interest_analysis']=analyzeMerchantInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'order_amount':balanceStr(fld(W,'amount')),'token_type':balanceToken(fld(W,'amount')),'allocation':summarizeAllocation(fld(a2,'order_allocators'),g),'compensation_fund':balanceStr(fld(a2,'compensation_fund')),'arbitration_bound':ab,'rewards_count':(fld(a2,'rewards')??[])['length'],'stalled_hours':ad,'terminal':ac,'unread_messages':a8>0x0?a8:undefined});else{if(aa['perspective']==='supplier')aa['interest_analysis']=analyzeSupplierInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'order_amount':balanceStr(fld(W,'amount')),'token_type':balanceToken(fld(W,'amount')),'arbitration_bound':ab,'compensation_fund':balanceStr(fld(a2,'compensation_fund')),'terminal':ac,'stalled_hours':ad,'unread_messages':a8>0x0?a8:undefined});else{if(aa['perspective']==='collaborator')aa['interest_analysis']=analyzeCollaboratorInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'collaborator_kind':aa['collaborator_kind'],'arbitration_bound':ab,'terminal':ac,'stalled_hours':ad,'unread_messages':a8>0x0?a8:undefined});else aa['perspective']==='customer'&&(aa['interest_analysis']=analyzeCustomerInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'order_amount':balanceStr(fld(W,'amount')),'token_type':balanceToken(fld(W,'amount')),'compensation_fund':balanceStr(fld(a2,'compensation_fund')),'arbitration_bound':ab,'terminal':ac,'stalled_hours':ad,'unread_messages':a8>0x0?a8:undefined}));}}if(d&&W){const ap={'order_id':U['order'],'service_id':a1??'','current_node':Y||undefined,'created_at':Number(fld(W,'time')??G)||G,'last_progress_at':fld(V,'current_time')??undefined,'now':G,'order_amount':((()=>{try{return BigInt(fld(W,'amount')??0x0);}catch{return undefined;}})()),'compensation_balance':((()=>{try{const aq=fld(a2,'compensation_fund');return aq!=null?BigInt(aq):undefined;}catch{return undefined;}})()),'token':registryDisplayHint(extractGenericTokenType(fld(a2,'type_raw'))),'has_arbitration':(fld(a2,'arbitrations')??[])['length']>0x0,'pending_user_action':aa['operable']['some'](aq=>aq['execution_path']==='order_holder'),'completed':a6,'refunded':a7};try{const aq=monitorOrder({'current':ap,'thresholds':a['radar_monitor_thresholds']});aq['length']>0x0&&(aa['attached_alerts']=aq);}catch(ar){f['push']('Order\x20monitor\x20failed\x20for\x20'+U['order']+':\x20'+ar['message']+'.');}}F['push'](aa);}const H=aggregateRadar(F,D);return{'action':'participation_radar','account':g,'orders_analyzed':H['orders_analyzed'],'actionable':H['actionable'],'waiting':H['waiting'],'all_pending_claims':H['all_pending_claims'],'unread_messages_total':H['unread_messages_total'],'data_gaps':f,'summary':H['summary']};}
1
+ import{LocalMark,watch_conversations}from'@wowok/wowok';import{analyzeOrderParticipation,aggregateRadar,isConsequenceNode}from'../../participation/radar-core.js';import{workflowSubgraphFromRows}from'../../graph/onchain/index.js';import{Config}from'@wowok/wowok/w/local';import{monitorOrder}from'../../customer/order-monitor.js';import{analyzeMerchantInterest}from'../../participation/merchant-interest.js';import{analyzeCustomerInterest}from'../../participation/customer-interest.js';import{analyzeSupplierInterest}from'../../participation/supplier-interest.js';import{analyzeCollaboratorInterest}from'../../participation/collaborator-interest.js';import{fetchMachineNodes}from'./machine-nodes.js';import{extractGenericTokenType,registryDisplayHint}from'../../knowledge/fund-layer.js';import{classifyRecipient,derivePayoffFromSharing}from'../../knowledge/recipient-constraint.js';import{batchQueryObjectsByIds,batchQueryTableItems}from'../../graph/onchain/sdk-batch.js';function fld(a,b){return a?.[b]??a?.['data']?.[b];}async function resolveAddress(a,b){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'+'Register\x20it\x20via\x20local_mark_operation\x20or\x20pass\x20the\x200x\x20address\x20directly.');return c;}function balanceStr(a){if(a==null)return undefined;if(typeof a==='object'&&'balance'in a)return String(a['balance']);return String(a);}function balanceToken(a){if(a!=null&&typeof a==='object'&&typeof a['token_type']==='string')return a['token_type'];return undefined;}function summarizeAllocation(a,b){const c=Array['isArray'](a)?a:Array['isArray'](a?.['allocators'])?a['allocators']:[];if(c['length']===0x0)return undefined;let d=0x0,e=0x0,f=0x0,g=0x0;const h=[],i=b['toLowerCase']();for(const j of c){const k=j?.['sharing']??[];for(const l of k){d++;const m=classifyRecipient(l['who']);if(!m)continue;if(m['kind']==='submission')e++;else{if(m['kind']==='signer')g++;else{if(m['kind']==='entity'&&m['address']['toLowerCase']()===i)f++;}}}h['push'](derivePayoffFromSharing(k,'service_order_allocators'));}return{'recipient_slots':d,'guard_gated_slots':e,'direct_to_me_slots':f,'to_payer_slots':g,'payoffs':h};}async function fetchEntityPermissions(a,b){const c=new Map(),{items:d}=await batchQueryTableItems(a,{'network':b});for(const e of d){const f=e['object'];if(f?.['type']!=='TableItem_PermissionPerm')continue;const g=fld(f,'address'),h=fld(f,'perm')??[],i=h['map'](j=>typeof j==='number'?j:typeof j?.['index']==='number'?j['index']:null)['filter'](j=>j!==null);if(g)c['set'](g,i);}return c;}function toWorkflowSubgraph(a,b){return workflowSubgraphFromRows(a,b);}export async function handleParticipationRadar(a){if(!a['radar_account'])throw new Error('\x27radar_account\x27\x20is\x20required\x20for\x20participation_radar');if(!a['radar_targets']||a['radar_targets']['length']===0x0)throw new Error('\x27radar_targets\x27\x20(1-20\x20in-flight\x20orders)\x20is\x20required\x20for\x20participation_radar');const b=a['context_network']??await Config['Instance']()['network_get'](),d=a['radar_include_alerts']??!![],f=[],g=await resolveAddress(a['radar_account'],'radar_account'),h=await Promise['all'](a['radar_targets']['map'](async I=>({'progress':await resolveAddress(I['progress'],'progress'),'order':I['order']?await resolveAddress(I['order'],'order'):undefined}))),i=h['flatMap'](I=>I['order']?[I['progress'],I['order']]:[I['progress']]),j=await batchQueryObjectsByIds(i,b),k=new Map();for(const I of j){const J=fld(I,'object');if(J)k['set'](J,I);}const l=new Map(),m=new Map();for(const K of h){const L=k['get'](K['progress']);if(!L){f['push']('Progress\x20'+K['progress']+'\x20not\x20found\x20on\x20'+b+'\x20—\x20target\x20skipped.');continue;}l['set'](K['progress'],L);if(K['order']){const M=k['get'](K['order']);if(M)m['set'](K['order'],M);else f['push']('Order\x20'+K['order']+'\x20not\x20found\x20on\x20'+b+'\x20—\x20order-holder\x20detection\x20disabled\x20for\x20'+K['progress']+'.');}}h['length']>0x0&&l['size']===0x0&&f['push']('NETWORK\x20MISMATCH\x20SUSPECTED:\x200/'+h['length']+'\x20radar\x20targets\x20exist\x20on\x20network=\x27'+b+'\x27.\x20'+'These\x20objects\x20most\x20likely\x20live\x20on\x20a\x20different\x20network\x20—\x20re-run\x20with\x20the\x20matching\x20\x27network\x27\x20parameter.');const q=[...new Set([...l['values']()]['map'](N=>fld(N,'machine'))['filter'](N=>!!N))],s=[...new Set([...m['values']()]['map'](N=>fld(N,'service'))['filter'](N=>!!N))],u=[...new Set([...m['values']()]['flatMap'](N=>{const O=fld(N,'dispute');return Array['isArray'](O)?O:[];}))],w=new Map(),x=new Map(),y=new Map(),z=new Map();await Promise['all']([...q['map'](async N=>{try{const [O,P]=await Promise['all']([batchQueryObjectsByIds([N],b),fetchMachineNodes(N,b)]);if(O[0x0])w['set'](N,O[0x0]);x['set'](N,toWorkflowSubgraph(P,N));}catch(Q){f['push']('Machine\x20'+N+'\x20fetch\x20failed:\x20'+Q['message']+'\x20—\x20workflow\x20unknown\x20for\x20its\x20orders.');}}),((async()=>{if(s['length']===0x0)return;try{const N=await batchQueryObjectsByIds(s,b);for(const O of N){const P=fld(O,'object');if(P)y['set'](P,O);}}catch(Q){f['push']('Service\x20query\x20failed:\x20'+Q['message']+'\x20—\x20compensation/reward\x20context\x20degraded.');}})()),((async()=>{if(u['length']===0x0)return;try{const N=await batchQueryObjectsByIds(u,b);for(const O of N){const P=fld(O,'object');if(P)z['set'](P,O);}}catch(Q){f['push']('Arb\x20query\x20failed:\x20'+Q['message']+'\x20—\x20compensation\x20claim\x20detection\x20disabled.');}})())]);const A=new Map(),B=[...new Set(q['map'](N=>fld(w['get'](N),'permission'))['filter'](N=>!!N))],C=new Map();await Promise['all'](B['map'](async N=>{try{const [O,P]=await Promise['all']([batchQueryObjectsByIds([N],b),fetchEntityPermissions(N,b)]),Q=O[0x0];C['set'](N,{'address':N,'entity_count':fld(Q,'entity_count'),'perm_remark':fld(Q,'perm_remark'),'entityPermissions':P,'owner':fld(Q,'builder')});}catch(R){f['push']('Permission\x20'+N+'\x20fetch\x20failed:\x20'+R['message']+'\x20—\x20operator\x20permission\x20matching\x20degraded.');}}));for(const N of q){const O=fld(w['get'](N),'permission');if(O&&C['has'](O))A['set'](N,C['get'](O));}let D=0x0;const E=new Map();try{const P=await watch_conversations({'account':g,'unreadOnly':!![],'previewMessageCount':0x0,'skipAutoMarkViewed':!![]}),Q=Array['isArray'](P)?P:P?.['conversations']??[];for(const R of Q){const S=R?.['peerAddress'],T=typeof R?.['unreadCount']==='number'?R['unreadCount']:0x0;typeof S==='string'&&T>0x0&&(E['set'](S['toLowerCase'](),T),D+=T);}}catch{f['push']('Messenger\x20unread\x20unavailable\x20(radar\x20account\x20is\x20not\x20a\x20local\x20messenger\x20account,\x20or\x20messenger\x20storage\x20offline)\x20'+'—\x20unread_messages_total\x20reported\x20as\x200.');}const F=[],G=Date['now']();for(const U of h){const V=l['get'](U['progress']);if(!V)continue;const W=U['order']?m['get'](U['order']):undefined,X=fld(V,'machine'),Y=fld(V,'current')??'',Z=fld(V,'namedOperator')??[],a0={};for(const af of Z){if(af?.['name'])a0[af['name']]=Array['isArray'](af['operators'])?af['operators']:[];}const a1=W?fld(W,'service'):undefined,a2=a1?y['get'](a1):undefined;let a3;const a4=W?fld(W,'builder'):undefined;if(W&&a4===g){const ag=fld(W,'dispute')??[];for(const ah of ag){const ai=z['get'](ah);if(!ai)continue;const aj=fld(ai,'indemnity');if(aj){a3={'arbitration':fld(ai,'arbitration')??ah,'note':'Arbitration\x20verdict\x20recorded\x20an\x20indemnity\x20(Arb\x20'+ah+').\x20'+'Claim\x20via\x20service\x20op=\x27compensation_claim\x27\x20—\x20paid\x20directly\x20from\x20the\x20Service\x20compensation_fund.\x20'+'(Claimed-status\x20is\x20not\x20readable\x20from\x20the\x20Arb\x20object;\x20the\x20contract\x20rejects\x20double-claims.)'};break;}}}const a5=[];if(a2&&a4===g){const ak=fld(a2,'rewards')??[];for(const al of ak){a5['push']({'address':al,'description':'Service\x20reward\x20'+al+'\x20(guard-gated\x20—\x20eligibility\x20verified\x20at\x20claim\x20time)'});}}const a6=isConsequenceNode(Y,'completed'),a7=isConsequenceNode(Y,'refunded');let a8=0x0;if(E['size']>0x0){const am=new Set();if(a4)am['add'](a4['toLowerCase']());for(const an of Object['values'](a0)){for(const ao of an)am['add'](ao['toLowerCase']());}am['delete'](g['toLowerCase']());for(const ap of am){a8+=E['get'](ap)??0x0;}}const a9={'account':g,'progress_address':U['progress'],'order_address':U['order'],'current_node':Y,'order_holder':a4,'workflow':X?x['get'](X):undefined,'permission':X?A['get'](X)??null:null,'named_accounts':a0,'claimable_rewards':a5['length']>0x0?a5:undefined,'pending_compensation':a3,'rating_pending':a6&&a4===g,'unread_messages':a8>0x0?a8:undefined,'last_progress_at':fld(V,'current_time')??undefined,'now':G},aa=analyzeOrderParticipation(a9),ab=(fld(a2,'arbitrations')??[])['length']>0x0,ac=a6?'completed':a7?'refunded':null,ad=a9['last_progress_at']!=null?(G-a9['last_progress_at'])/0x36ee80:undefined,ae=summarizeAllocation(fld(a2,'order_allocators'),g);if(aa['perspective']==='merchant')aa['interest_analysis']=analyzeMerchantInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'order_amount':balanceStr(fld(W,'amount')),'token_type':balanceToken(fld(W,'amount')),'allocation':ae,'compensation_fund':balanceStr(fld(a2,'compensation_fund')),'arbitration_bound':ab,'rewards_count':(fld(a2,'rewards')??[])['length'],'stalled_hours':ad,'terminal':ac,'unread_messages':a8>0x0?a8:undefined});else{if(aa['perspective']==='supplier')aa['interest_analysis']=analyzeSupplierInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'order_amount':balanceStr(fld(W,'amount')),'token_type':balanceToken(fld(W,'amount')),'arbitration_bound':ab,'compensation_fund':balanceStr(fld(a2,'compensation_fund')),'allocation_payoff':ae?.['payoffs'],'terminal':ac,'stalled_hours':ad,'unread_messages':a8>0x0?a8:undefined});else{if(aa['perspective']==='collaborator')aa['interest_analysis']=analyzeCollaboratorInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'collaborator_kind':aa['collaborator_kind'],'arbitration_bound':ab,'allocation_payoff':ae?.['payoffs'],'terminal':ac,'stalled_hours':ad,'unread_messages':a8>0x0?a8:undefined});else aa['perspective']==='customer'&&(aa['interest_analysis']=analyzeCustomerInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'order_amount':balanceStr(fld(W,'amount')),'token_type':balanceToken(fld(W,'amount')),'compensation_fund':balanceStr(fld(a2,'compensation_fund')),'arbitration_bound':ab,'allocation_payoff':ae?.['payoffs'],'terminal':ac,'stalled_hours':ad,'unread_messages':a8>0x0?a8:undefined}));}}if(d&&W){const aq={'order_id':U['order'],'service_id':a1??'','current_node':Y||undefined,'created_at':Number(fld(W,'time')??G)||G,'last_progress_at':fld(V,'current_time')??undefined,'now':G,'order_amount':((()=>{try{return BigInt(fld(W,'amount')??0x0);}catch{return undefined;}})()),'compensation_balance':((()=>{try{const ar=fld(a2,'compensation_fund');return ar!=null?BigInt(ar):undefined;}catch{return undefined;}})()),'token':registryDisplayHint(extractGenericTokenType(fld(a2,'type_raw'))),'has_arbitration':(fld(a2,'arbitrations')??[])['length']>0x0,'pending_user_action':aa['operable']['some'](ar=>ar['execution_path']==='order_holder'),'completed':a6,'refunded':a7};try{const ar=monitorOrder({'current':aq,'thresholds':a['radar_monitor_thresholds']});ar['length']>0x0&&(aa['attached_alerts']=ar);}catch(as){f['push']('Order\x20monitor\x20failed\x20for\x20'+U['order']+':\x20'+as['message']+'.');}}F['push'](aa);}const H=aggregateRadar(F,D);return{'action':'participation_radar','account':g,'orders_analyzed':H['orders_analyzed'],'actionable':H['actionable'],'waiting':H['waiting'],'all_pending_claims':H['all_pending_claims'],'unread_messages_total':H['unread_messages_total'],'data_gaps':f,'summary':H['summary']};}
@@ -83,7 +83,7 @@ export interface TraceSubstepsInput {
83
83
  substeps?: SubstepRecord[];
84
84
  substep_edges?: SubstepEdge[];
85
85
  }
86
- export declare function handleTraceSubsteps(v: TraceSubstepsInput): {
86
+ export declare function handleTraceSubsteps(v: TraceSubstepsInput): Promise<{
87
87
  namespace: {
88
88
  prefix: string;
89
89
  version: string;
@@ -98,4 +98,4 @@ export declare function handleTraceSubsteps(v: TraceSubstepsInput): {
98
98
  topological_order: string[];
99
99
  d10_check: import("../../task/substep-trace.js").D10CheckResult;
100
100
  action: "trace_substeps";
101
- };
101
+ }>;
@@ -1 +1 @@
1
- import{analyzeBusinessIntent}from'./business-puzzle.js';import{aggregateProjectRisks}from'./risk-aggregator.js';import{traceSubsteps}from'../../task/substep-trace.js';import{updateStageCache}from'./index.js';import{checkObjectReuseRules,checkImmutabilityRules}from'../../knowledge/safety-rules.js';export function handleAnalyzeIntent(a){const b=(a['intent']??a['project_description']??a['project_name']??'')['trim']();if(!b)throw new Error('analyze_intent\x20requires\x20\x27intent\x27\x20(business\x20description\x20text).\x20'+'Example:\x20intent=\x27I\x20want\x20to\x20open\x20an\x20online\x20toy\x20store\x20with\x20escrow\x20and\x20dispute\x20resolution\x27.');const c=analyzeBusinessIntent({'user_intent':b,'project_name':a['project_name'],'target_objects':a['target_objects'],'industry':a['project_industry']}),d=(a['project']??'')['trim']();return d&&updateStageCache(d,(a['version']??'v1')['trim'](),{'stage':'puzzle','puzzles':c['puzzles'],'business_intent':b,'industry':c['intent_parsed']['industry']}),{'action':'analyze_intent',...c};}export function handleAggregateRisks(a){const b=(a['project']??'')['trim']();if(!b)throw new Error('aggregate_risks\x20requires\x20\x27project\x27\x20(project\x20prefix,\x20e.g.\x20\x27myshop\x27).\x20'+'Use\x20one\x20stable\x20prefix\x20per\x20build\x20so\x20findings\x20map\x20to\x20the\x20service-build\x20stage\x20cache\x20namespace.');const c=(a['version']??'v1')['trim']();let d,e;if(a['puzzles'])d=Object['fromEntries'](Object['entries'](a['puzzles'])['map'](([h,i])=>[h,{'puzzle':i['puzzle'],'completeness':i['completeness'],'missing_dimensions':i['missing_dimensions']}]));else{const h=(a['intent']??a['project_description']??a['project_name']??'')['trim']();if(!h)throw new Error('aggregate_risks\x20requires\x20\x27puzzles\x27\x20(from\x20a\x20prior\x20analyze_intent\x20result)\x20'+'OR\x20\x27intent\x27\x20(business\x20description\x20—\x20analyze_intent\x20runs\x20automatically\x20first).');const i=analyzeBusinessIntent({'user_intent':h,'project_name':a['project_name'],'industry':a['project_industry']});d=i['puzzles'],e={'primary_object':i['intent_parsed']['primary_object'],'industry':i['intent_parsed']['industry'],'overall_completeness':i['overall_completeness']};}const f=aggregateProjectRisks({'project_prefix':b,'version':c,'industry':a['project_industry'],'puzzles':d,'severity_threshold':a['severity_threshold'],'user_confirmed_high_risks':a['user_confirmed_high_risks']}),g=[...a['planned_objects']?checkObjectReuseRules(a['planned_objects']):[],...a['planned_operations']?checkImmutabilityRules(a['planned_operations']):[]];return updateStageCache(b,c,{'stage':'risk','risk_status':f['status'],'risk_can_proceed':f['status']==='RISK_PASSED'}),{'action':'aggregate_risks',...f,...g['length']>0x0?{'safety_findings':g}:{},...e?{'intent_echo':e}:{}};}export function handleTraceSubsteps(a){const b=(a['project']??'')['trim']();if(!b)throw new Error('trace_substeps\x20requires\x20\x27project\x27\x20(project\x20prefix,\x20e.g.\x20\x27myshop\x27).');if(!a['substeps']||a['substeps']['length']===0x0)throw new Error('trace_substeps\x20requires\x20\x27substeps\x27\x20(non-empty\x20array\x20of\x20substep\x20execution\x20records,\x20'+'63-spec\x20§2.1).\x20Construct\x20them\x20from\x20your\x20deployment\x20execution\x20trace:\x20each\x20onchain_operations\x20'+'call\x20=\x20one\x20substep\x20with\x20step_id\x20\x27T<step>.<substep>\x27,\x20input_refs\x20pointing\x20at\x20upstream\x20substeps.');const c=traceSubsteps({'project_prefix':b,'version':(a['version']??'v1')['trim'](),'network':a['network']??'testnet','substeps':a['substeps'],'edges':a['substep_edges']});return updateStageCache(b,(a['version']??'v1')['trim'](),{'stage':'substeps','trace_coherent':c['coherent'],'trace_can_proceed':c['coherent']}),{'action':'trace_substeps',...c};}
1
+ import{analyzeBusinessIntent}from'./business-puzzle.js';import{Config}from'@wowok/wowok/w/local';import{aggregateProjectRisks}from'./risk-aggregator.js';import{traceSubsteps}from'../../task/substep-trace.js';import{updateStageCache}from'./index.js';import{checkObjectReuseRules,checkImmutabilityRules}from'../../knowledge/safety-rules.js';export function handleAnalyzeIntent(a){const b=(a['intent']??a['project_description']??a['project_name']??'')['trim']();if(!b)throw new Error('analyze_intent\x20requires\x20\x27intent\x27\x20(business\x20description\x20text).\x20'+'Example:\x20intent=\x27I\x20want\x20to\x20open\x20an\x20online\x20toy\x20store\x20with\x20escrow\x20and\x20dispute\x20resolution\x27.');const c=analyzeBusinessIntent({'user_intent':b,'project_name':a['project_name'],'target_objects':a['target_objects'],'industry':a['project_industry']}),d=(a['project']??'')['trim']();return d&&updateStageCache(d,(a['version']??'v1')['trim'](),{'stage':'puzzle','puzzles':c['puzzles'],'business_intent':b,'industry':c['intent_parsed']['industry']}),{'action':'analyze_intent',...c};}export function handleAggregateRisks(a){const b=(a['project']??'')['trim']();if(!b)throw new Error('aggregate_risks\x20requires\x20\x27project\x27\x20(project\x20prefix,\x20e.g.\x20\x27myshop\x27).\x20'+'Use\x20one\x20stable\x20prefix\x20per\x20build\x20so\x20findings\x20map\x20to\x20the\x20service-build\x20stage\x20cache\x20namespace.');const c=(a['version']??'v1')['trim']();let d,e;if(a['puzzles'])d=Object['fromEntries'](Object['entries'](a['puzzles'])['map'](([h,i])=>[h,{'puzzle':i['puzzle'],'completeness':i['completeness'],'missing_dimensions':i['missing_dimensions']}]));else{const h=(a['intent']??a['project_description']??a['project_name']??'')['trim']();if(!h)throw new Error('aggregate_risks\x20requires\x20\x27puzzles\x27\x20(from\x20a\x20prior\x20analyze_intent\x20result)\x20'+'OR\x20\x27intent\x27\x20(business\x20description\x20—\x20analyze_intent\x20runs\x20automatically\x20first).');const i=analyzeBusinessIntent({'user_intent':h,'project_name':a['project_name'],'industry':a['project_industry']});d=i['puzzles'],e={'primary_object':i['intent_parsed']['primary_object'],'industry':i['intent_parsed']['industry'],'overall_completeness':i['overall_completeness']};}const f=aggregateProjectRisks({'project_prefix':b,'version':c,'industry':a['project_industry'],'puzzles':d,'severity_threshold':a['severity_threshold'],'user_confirmed_high_risks':a['user_confirmed_high_risks']}),g=[...a['planned_objects']?checkObjectReuseRules(a['planned_objects']):[],...a['planned_operations']?checkImmutabilityRules(a['planned_operations']):[]];return updateStageCache(b,c,{'stage':'risk','risk_status':f['status'],'risk_can_proceed':f['status']==='RISK_PASSED'}),{'action':'aggregate_risks',...f,...g['length']>0x0?{'safety_findings':g}:{},...e?{'intent_echo':e}:{}};}export async function handleTraceSubsteps(a){const b=(a['project']??'')['trim']();if(!b)throw new Error('trace_substeps\x20requires\x20\x27project\x27\x20(project\x20prefix,\x20e.g.\x20\x27myshop\x27).');if(!a['substeps']||a['substeps']['length']===0x0)throw new Error('trace_substeps\x20requires\x20\x27substeps\x27\x20(non-empty\x20array\x20of\x20substep\x20execution\x20records,\x20'+'63-spec\x20§2.1).\x20Construct\x20them\x20from\x20your\x20deployment\x20execution\x20trace:\x20each\x20onchain_operations\x20'+'call\x20=\x20one\x20substep\x20with\x20step_id\x20\x27T<step>.<substep>\x27,\x20input_refs\x20pointing\x20at\x20upstream\x20substeps.');const c=traceSubsteps({'project_prefix':b,'version':(a['version']??'v1')['trim'](),'network':a['network']??await Config['Instance']()['network_get'](),'substeps':a['substeps'],'edges':a['substep_edges']});return updateStageCache(b,(a['version']??'v1')['trim'](),{'stage':'substeps','trace_coherent':c['coherent'],'trace_can_proceed':c['coherent']}),{'action':'trace_substeps',...c};}
@@ -1,2 +1,3 @@
1
1
  import type { RelationshipProfileInput, RelationshipProfileResult } from "../../schema/query/bi.js";
2
+ export declare function resolveAddress(nameOrAddress: string, what: string): Promise<string>;
2
3
  export declare function handleRelationshipProfile(v: RelationshipProfileInput): Promise<RelationshipProfileResult>;
@@ -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{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}:{}};}
1
+ import{LocalMark}from'@wowok/wowok';import{Config}from'@wowok/wowok/w/local';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{SdkDataPlane,expandTopology,projectRelationshipFacts}from'../../graph/onchain/index.js';export 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;}export async function handleRelationshipProfile(a){if(!a['radar_account'])throw new Error('\x27radar_account\x27\x20is\x20required\x20for\x20relationship_profile');const b=a['context_network']??await Config['Instance']()['network_get'](),c=await resolveAddress(a['radar_account'],'radar_account'),d=new SdkDataPlane(b),e=await expandTopology(d,{'network':b,'seed':c,'budget':{'maxDepth':0x4,'maxNodes':0x384,'maxRpcs':0xa0,'perKindCaps':{'eoa.permission':0x19,'permission.core_binding':0x3c,'permission.tx_binding':0x3c,'eoa.order':0x28,'service.order':0x28,'order.allocation':0x28,'demand.presenter':0x3c,'machine.node':0x78}},'edges':{'tableEdges':['permission.entity','demand.presenter','machine.node']}}),f=[...e['gaps']];for(const z of e['truncations']){f['push']('truncated\x20'+z['schema']+'\x20at\x20'+z['nodeId']+':\x20observed\x20at\x20least\x20'+z['observed']+'\x20edge(s)');}if(e['budgetExhausted']['rpcs'])f['push']('RPC\x20batch\x20budget\x20exhausted\x20—\x20topology\x20is\x20partial\x20(see\x20budget\x20settings).');if(e['budgetExhausted']['nodes'])f['push']('Node\x20budget\x20exhausted\x20—\x20topology\x20is\x20partial.');const g=projectRelationshipFacts(e,c),{machines:h,orders:i,demands:j,allocations:k,contacts:l,arbitrations:m}={'machines':g['machines']??[],'orders':g['orders']??[],'demands':g['demands']??[],'allocations':g['allocations']??[],'contacts':g['contacts']??[],'arbitrations':g['arbitrations']??[]},n=deriveRelationshipProfile(g),o=new Set();if(k['length']>0x0)o['add']('Allocation');if(j['length']>0x0)o['add']('Demand');if(h['some'](A=>(A['forwards']??[])['some'](B=>B['guard'])))o['add']('MachineForward');if(m['length']>0x0)o['add']('Arbitration');for(const A of o){const B=GUARD_BINDING_REGISTRY['filter'](D=>D['object']===A);if(B['length']===0x0)continue;const C=B['map'](D=>{const E=D['preset_kind']==='amount'&&D['object']==='Allocation'?'\x20(Rate\x20is\x20basis\x20points;\x20rates\x20must\x20complete\x2010000\x20unless\x20a\x20Surplus\x20entry\x20exists)':'';return''+D['slot']+E+'\x20['+D['preset_kind']+']\x20—\x20creator:\x20'+D['creator']['split']('\x20—\x20')[0x0]['split']('.\x20')[0x0]+';\x20user:\x20'+D['user'];})['join']('\x20|\x20');n['notes']['push']('Guard-preset\x20deep\x20context\x20on\x20the\x20'+A+'(s)\x20in\x20this\x20topology:\x20'+C+'.');}k['length']>0x0&&n['notes']['push']('Cognition\x20fixed:\x20'+OWNER_RECEIVE_COGNITION);m['some'](D=>D['object_kind']==='service')&&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 p=['Permission'];if(i['length']>0x0)p['push']('Order');if(h['length']>0x0)p['push']('Machine','Progress');if(k['length']>0x0)p['push']('Allocation','Payment');if(j['length']>0x0)p['push']('Demand');if(m['length']>0x0)p['push']('Arbitration','Arb');if(l['length']>0x0)p['push']('Contact');if(Object['keys'](g['service_owners']??{})['length']>0x0)p['push']('Service','Guard');const q=detectBridgesForObjects(p);if(q['length']>0x0){const D=q['slice'](0x0,0x8)['map'](E=>summarizeBridge(E))['join']('\x0a-\x20');n['notes']['push']('Scenario\x20topology\x20('+q['length']+'\x20bridge(s)\x20implied\x20by\x20the\x20touched\x20objects\x20—\x20capability\x20comes\x20from\x20the\x20'+('\x22integration,\x20not\x20from\x20any\x20single\x20object):\x0a-\x20'+D));}const r=a['relation_kinds']?new Set(a['relation_kinds']):undefined,s=r?n['edges']['filter'](E=>r['has'](E['kind'])):n['edges'],u=s['reduce']((E,F)=>{return E[F['kind']]=(E[F['kind']]??0x0)+0x1,E;},{});let w=c+'\x20holds\x20'+s['length']+'\x20relationship\x20edge(s)\x20across\x20'+Object['keys'](n['by_counterparty'])['length']+'\x20counterparty(ies)'+(Object['keys'](u)['length']>0x0?':\x20'+Object['entries'](u)['map'](([E,F])=>E+'×'+F)['join'](',\x20')+'.':'.');s['length']===0x0&&f['length']>0x0&&(w+='\x20No\x20edges\x20derived\x20—\x20check\x20data_gaps\x20(the\x20account\x20may\x20have\x20no\x20on-chain\x20power\x20carriers\x20on\x20this\x20network).');const x=(E,F)=>E['toLowerCase']()===F['toLowerCase'](),y=j['filter'](E=>E['owner']&&x(E['owner'],c))['map'](E=>({'demand':E['address'],...analyzeDemanderInterest({'account':c,'demand':E['address'],'presenters':E['presenters']??[],'rewards':(E['rewards']??[])['map'](F=>({'address':F})),'guards':E['guards']??[],'open':!(E['presenters']??[])['some'](F=>F['acceptance_score']!==undefined)})}));return y['length']>0x0&&(w+='\x20Anchor\x20demands\x20'+y['length']+'\x20demand(s)\x20—\x20demander-interest\x20analysis\x20attached.'),{'action':'relationship_profile','account':c,'edges':s,'by_counterparty':n['by_counterparty'],'notes':n['notes'],'data_gaps':f,'summary':w,...y['length']>0x0?{'demander_interest':y}:{}};}
@@ -1 +1 @@
1
- import{assessServiceRisks,assessMachineRisks,assessAllocationRisks,assessTreasuryRisks,assessArbitrationRisks,assessRewardRisks,assessProgressRisks,assessOrderRisks,assessGuardRisks,checkContactRisks,checkResourceRisks,checkPaymentRisks,checkArbRisks,checkPersonalRisks,checkUtilRisks,checkRegistrarRisks,checkBridgeRisks,checkProofRisks,checkRepositoryRisks,checkDemandRisks}from'../../knowledge/index.js';import{assessPermissionRisks}from'../../knowledge/permission-risk.js';const SEVERITY_ORDER={'CRITICAL':0x0,'HIGH':0x1,'MEDIUM':0x2,'LOW':0x3,'INFO':0x4},ALL_SEVERITIES=['CRITICAL','HIGH','MEDIUM','LOW','INFO'];function normalizeSeverity(a){if(typeof a!=='string')return'INFO';const b=a['toUpperCase']();return ALL_SEVERITIES['includes'](b)?b:'INFO';}function extractRiskId(a,b){if(!a||typeof a!=='object')return b;return String(a['id']??a['risk_rule_id']??a['rule_id']??b);}function extractRiskMessage(a){if(!a||typeof a!=='object')return'(no\x20message)';return String(a['title']??a['message']??a['description']??a['trigger']??'(no\x20message)');}function extractFixSuggestion(a){if(!a||typeof a!=='object')return'';return String(a['mitigation']??a['fix_suggestion']??a['suggestion']??'');}function toAggregatedRisk(a,b,c){return{'risk_rule_id':extractRiskId(a,'R-'+b['toUpperCase']()+'-?'),'object_type':b,'entry_id':c,'severity':normalizeSeverity(a?.['level']??a?.['severity']),'message':extractRiskMessage(a),'fix_suggestion':extractFixSuggestion(a),'details':a?.['evidence']?{'field_path':String(a['evidence'])}:undefined};}function isL1L2Object(a){return['service','machine','allocation','treasury','arb','reward','progress','order','permission','guard']['includes'](a);}function buildL1L2Dispatch(){const a=(b,c)=>{try{const d=b??{},e=c(d);if(Array['isArray'](e))return e;if(e&&typeof e==='object'){const f=e['risks'];if(Array['isArray'](f))return f;}return[];}catch{return[];}};return{'service':{'assess':b=>a(b,assessServiceRisks)},'machine':{'assess':b=>a(b,c=>assessMachineRisks(c,{}))},'allocation':{'assess':b=>a(b,assessAllocationRisks)},'treasury':{'assess':b=>a(b,assessTreasuryRisks)},'arb':{'assess':b=>a(b,assessArbitrationRisks)},'reward':{'assess':b=>a(b,c=>assessRewardRisks(c))},'progress':{'assess':b=>a(b,c=>assessProgressRisks(c))},'order':{'assess':b=>a(b,assessOrderRisks)},'permission':{'assess':b=>a(b,assessPermissionRisks)},'guard':{'assess':b=>{try{const c=assessGuardRisks({'table':[],'root':undefined});if(Array['isArray'](c))return c;if(c&&typeof c==='object'){const d=c['risks'];if(Array['isArray'](d))return d;}return[];}catch{return[];}}}};}function buildL3Dispatch(){const a=(b,c)=>{try{const d=b??{},e=c(d);if(Array['isArray'](e))return e;return[];}catch{return[];}};return{'contact':{'check':b=>a(b,checkContactRisks)},'resource':{'check':b=>a(b,checkResourceRisks)},'payment':{'check':b=>a(b,checkPaymentRisks)},'arb':{'check':b=>a(b,checkArbRisks)},'personal':{'check':b=>a(b,checkPersonalRisks)},'util':{'check':b=>a(b,checkUtilRisks)},'registrar':{'check':b=>a(b,checkRegistrarRisks)},'bridge':{'check':b=>a(b,checkBridgeRisks)},'proof':{'check':b=>a(b,checkProofRisks)},'repository':{'check':b=>a(b,checkRepositoryRisks)},'demand':{'check':b=>a(b,checkDemandRisks)}};}export function aggregateProjectRisks(a){const b=[];(!a||!a['project_prefix'])&&b['push']('input.project_prefix\x20is\x20empty');const c=a?.['puzzles']??{},e=[],f=buildL1L2Dispatch(),g=buildL3Dispatch();for(const [m,n]of Object['entries'](c)){const o=m,p=(a['project_prefix']??'project')+'_'+o,q=n?.['puzzle'];if(isL1L2Object(o)){const s=f[o];if(!s){b['push']('No\x20L1/L2\x20risk\x20dispatcher\x20for\x20\x27'+o+'\x27');continue;}const t=s['assess'](q);for(const u of t){e['push'](toAggregatedRisk(u,o,p));}}else{const v=g[o];if(!v){b['push']('No\x20L3\x20risk\x20dispatcher\x20for\x20\x27'+o+'\x27');continue;}const w=v['check'](q);for(const x of w){e['push'](toAggregatedRisk(x,o,p));}}}sortFindings(e);const h=countBySeverity(e),i=a['severity_threshold']??'HIGH',j=determineStatus(h,i,a['user_confirmed_high_risks']??[],e);let k;j==='RISK_PENDING_CONFIRM'&&(k=e['filter'](y=>y['severity']==='HIGH')['filter'](y=>!(a['user_confirmed_high_risks']??[])['includes'](y['risk_rule_id']))['map'](y=>({'risk_rule_id':y['risk_rule_id'],'description':y['message'],'fix_suggestion':y['fix_suggestion'],'object_type':y['object_type'],'entry_id':y['entry_id']})));const l={};for(const y of e){const z=y['object_type'];!l[z]&&(l[z]=[]),l[z]['push']({'risk_rule_id':y['risk_rule_id'],'severity':y['severity'],'message':y['message'],'fix_suggestion':y['fix_suggestion'],'entry_id':y['entry_id']});}return{'namespace':{'prefix':a['project_prefix']??'','version':a['version']??'','industry':a['industry']??'general'},'findings':e,'severity_summary':h,'status':j,'pending_confirmations':k,'calibrated_at':Date['now'](),'fix_suggestions_grouped':l,'warnings':b};}export function sortFindings(a){return a['sort']((c,d)=>{const e=SEVERITY_ORDER[c['severity']]-SEVERITY_ORDER[d['severity']];if(e!==0x0)return e;if(c['object_type']!==d['object_type'])return c['object_type']['localeCompare'](d['object_type']);return c['risk_rule_id']['localeCompare'](d['risk_rule_id']);});}export function countBySeverity(a){const b={'CRITICAL':0x0,'HIGH':0x0,'MEDIUM':0x0,'LOW':0x0,'INFO':0x0};for(const c of a){b[c['severity']]++;}return b;}export function determineStatus(a,b,c,d){if(a['CRITICAL']>0x0)return'RISK_BLOCKED';const e=SEVERITY_ORDER[b];if(a['HIGH']>0x0&&e<=SEVERITY_ORDER['HIGH']){const f=d['filter'](g=>g['severity']==='HIGH'&&!c['includes'](g['risk_rule_id']));if(f['length']>0x0)return'RISK_PENDING_CONFIRM';}if(a['MEDIUM']>0x0&&e<=SEVERITY_ORDER['MEDIUM'])return'RISK_BLOCKED';if(a['LOW']>0x0&&e<=SEVERITY_ORDER['LOW'])return'RISK_BLOCKED';return'RISK_PASSED';}export function getCriticalRisks(a){if(!a?.['findings'])return[];return a['findings']['filter'](b=>b['severity']==='CRITICAL');}export function summarizeRiskReport(a){if(!a)return'(no\x20result)';const b=[];b['push']('#\x20Risk\x20Aggregation\x20Report'),b['push'](''),b['push']('-\x20Project:\x20'+a['namespace']['prefix']+'_'+a['namespace']['version']),b['push']('-\x20Status:\x20'+a['status']),b['push']('-\x20Calibrated\x20at:\x20'+new Date(a['calibrated_at'])['toISOString']()),b['push'](''),b['push']('##\x20Severity\x20Summary'),b['push'](''),b['push']('|\x20Severity\x20|\x20Count\x20|'),b['push']('|----------|-------|');for(const c of ALL_SEVERITIES){b['push']('|\x20'+c+'\x20|\x20'+(a['severity_summary'][c]??0x0)+'\x20|');}b['push']('');if(a['findings']['length']===0x0)return b['push']('No\x20risks\x20found.'),b['join']('\x0a');b['push']('##\x20Findings\x20(sorted\x20by\x20severity)'),b['push']('');for(const d of a['findings']){b['push']('-\x20**['+d['severity']+']\x20'+d['risk_rule_id']+'**\x20('+d['object_type']+'\x20/\x20'+d['entry_id']+')'),b['push']('\x20\x20-\x20'+d['message']),d['fix_suggestion']&&b['push']('\x20\x20-\x20Fix:\x20'+d['fix_suggestion']);}if(a['warnings']['length']>0x0){b['push'](''),b['push']('##\x20Warnings');for(const e of a['warnings'])b['push']('-\x20'+e);}return b['join']('\x0a');}
1
+ import{assessServiceRisks,assessMachineRisks,assessAllocationRisks,assessTreasuryRisks,assessArbitrationRisks,assessRewardRisks,assessProgressRisks,assessOrderRisks,assessGuardRisks,checkContactRisks,checkResourceRisks,checkPaymentRisks,checkArbRisks,checkPersonalRisks,checkUtilRisks,checkRegistrarRisks,checkBridgeRisks,checkProofRisks,checkRepositoryRisks,checkDemandRisks}from'../../knowledge/index.js';import{assessPermissionRisks}from'../../knowledge/permission-risk.js';import{analyzeRecipientConstraints}from'../../knowledge/recipient-constraint.js';const SEVERITY_ORDER={'CRITICAL':0x0,'HIGH':0x1,'MEDIUM':0x2,'LOW':0x3,'INFO':0x4},ALL_SEVERITIES=['CRITICAL','HIGH','MEDIUM','LOW','INFO'];function normalizeSeverity(a){if(typeof a!=='string')return'INFO';const b=a['toUpperCase']();return ALL_SEVERITIES['includes'](b)?b:'INFO';}function extractRiskId(a,b){if(!a||typeof a!=='object')return b;return String(a['id']??a['risk_rule_id']??a['rule_id']??b);}function extractRiskMessage(a){if(!a||typeof a!=='object')return'(no\x20message)';return String(a['title']??a['message']??a['description']??a['trigger']??'(no\x20message)');}function extractFixSuggestion(a){if(!a||typeof a!=='object')return'';return String(a['mitigation']??a['fix_suggestion']??a['suggestion']??'');}function toAggregatedRisk(a,b,c){return{'risk_rule_id':extractRiskId(a,'R-'+b['toUpperCase']()+'-?'),'object_type':b,'entry_id':c,'severity':normalizeSeverity(a?.['level']??a?.['severity']),'message':extractRiskMessage(a),'fix_suggestion':extractFixSuggestion(a),'details':a?.['evidence']?{'field_path':String(a['evidence'])}:undefined};}function safeRecipientAudit(a){try{const b=a??{},c=b['allocators_config'],d=c?.['allocators'];if(!Array['isArray'](d)||d['length']===0x0)return[];const e=analyzeRecipientConstraints({'trigger_source':b['trigger_source']??'service_order_allocators',...typeof b['host_service']==='string'?{'host_service':b['host_service']}:{},...typeof b['allocation']==='string'?{'allocation':b['allocation']}:{},'allocators':d['map'](f=>({'guard':f['guard'],'sharing':f['sharing']??[]})),'guards':b['guards']??{}});return e['findings']['map'](g=>({'id':g['code'],'level':g['severity'],'title':g['title'],'description':g['explanation'],'mitigation':g['mitigation'],'evidence':g['evidence_paths']['join'](',')}));}catch{return[];}}function isL1L2Object(a){return['service','machine','allocation','treasury','arb','reward','progress','order','permission','guard']['includes'](a);}function buildL1L2Dispatch(){const a=(b,c)=>{try{const d=b??{},e=c(d);if(Array['isArray'](e))return e;if(e&&typeof e==='object'){const f=e['risks'];if(Array['isArray'](f))return f;}return[];}catch{return[];}};return{'service':{'assess':b=>a(b,assessServiceRisks)},'machine':{'assess':b=>a(b,c=>assessMachineRisks(c,{}))},'allocation':{'assess':b=>[...a(b,assessAllocationRisks),safeRecipientAudit(b)]['flat']()},'treasury':{'assess':b=>a(b,assessTreasuryRisks)},'arb':{'assess':b=>a(b,assessArbitrationRisks)},'reward':{'assess':b=>a(b,c=>assessRewardRisks(c))},'progress':{'assess':b=>a(b,c=>assessProgressRisks(c))},'order':{'assess':b=>a(b,assessOrderRisks)},'permission':{'assess':b=>a(b,assessPermissionRisks)},'guard':{'assess':b=>{try{const c=assessGuardRisks({'table':[],'root':undefined});if(Array['isArray'](c))return c;if(c&&typeof c==='object'){const d=c['risks'];if(Array['isArray'](d))return d;}return[];}catch{return[];}}}};}function buildL3Dispatch(){const a=(b,c)=>{try{const d=b??{},e=c(d);if(Array['isArray'](e))return e;return[];}catch{return[];}};return{'contact':{'check':b=>a(b,checkContactRisks)},'resource':{'check':b=>a(b,checkResourceRisks)},'payment':{'check':b=>a(b,checkPaymentRisks)},'arb':{'check':b=>a(b,checkArbRisks)},'personal':{'check':b=>a(b,checkPersonalRisks)},'util':{'check':b=>a(b,checkUtilRisks)},'registrar':{'check':b=>a(b,checkRegistrarRisks)},'bridge':{'check':b=>a(b,checkBridgeRisks)},'proof':{'check':b=>a(b,checkProofRisks)},'repository':{'check':b=>a(b,checkRepositoryRisks)},'demand':{'check':b=>a(b,checkDemandRisks)}};}export function aggregateProjectRisks(a){const b=[];(!a||!a['project_prefix'])&&b['push']('input.project_prefix\x20is\x20empty');const c=a?.['puzzles']??{},e=[],f=buildL1L2Dispatch(),g=buildL3Dispatch();for(const [m,n]of Object['entries'](c)){const o=m,p=(a['project_prefix']??'project')+'_'+o,q=n?.['puzzle'];if(isL1L2Object(o)){const s=f[o];if(!s){b['push']('No\x20L1/L2\x20risk\x20dispatcher\x20for\x20\x27'+o+'\x27');continue;}const t=s['assess'](q);for(const u of t){e['push'](toAggregatedRisk(u,o,p));}}else{const v=g[o];if(!v){b['push']('No\x20L3\x20risk\x20dispatcher\x20for\x20\x27'+o+'\x27');continue;}const w=v['check'](q);for(const x of w){e['push'](toAggregatedRisk(x,o,p));}}}sortFindings(e);const h=countBySeverity(e),i=a['severity_threshold']??'HIGH',j=determineStatus(h,i,a['user_confirmed_high_risks']??[],e);let k;j==='RISK_PENDING_CONFIRM'&&(k=e['filter'](y=>y['severity']==='HIGH')['filter'](y=>!(a['user_confirmed_high_risks']??[])['includes'](y['risk_rule_id']))['map'](y=>({'risk_rule_id':y['risk_rule_id'],'description':y['message'],'fix_suggestion':y['fix_suggestion'],'object_type':y['object_type'],'entry_id':y['entry_id']})));const l={};for(const y of e){const z=y['object_type'];!l[z]&&(l[z]=[]),l[z]['push']({'risk_rule_id':y['risk_rule_id'],'severity':y['severity'],'message':y['message'],'fix_suggestion':y['fix_suggestion'],'entry_id':y['entry_id']});}return{'namespace':{'prefix':a['project_prefix']??'','version':a['version']??'','industry':a['industry']??'general'},'findings':e,'severity_summary':h,'status':j,'pending_confirmations':k,'calibrated_at':Date['now'](),'fix_suggestions_grouped':l,'warnings':b};}export function sortFindings(a){return a['sort']((c,d)=>{const e=SEVERITY_ORDER[c['severity']]-SEVERITY_ORDER[d['severity']];if(e!==0x0)return e;if(c['object_type']!==d['object_type'])return c['object_type']['localeCompare'](d['object_type']);return c['risk_rule_id']['localeCompare'](d['risk_rule_id']);});}export function countBySeverity(a){const b={'CRITICAL':0x0,'HIGH':0x0,'MEDIUM':0x0,'LOW':0x0,'INFO':0x0};for(const c of a){b[c['severity']]++;}return b;}export function determineStatus(a,b,c,d){if(a['CRITICAL']>0x0)return'RISK_BLOCKED';const e=SEVERITY_ORDER[b];if(a['HIGH']>0x0&&e<=SEVERITY_ORDER['HIGH']){const f=d['filter'](g=>g['severity']==='HIGH'&&!c['includes'](g['risk_rule_id']));if(f['length']>0x0)return'RISK_PENDING_CONFIRM';}if(a['MEDIUM']>0x0&&e<=SEVERITY_ORDER['MEDIUM'])return'RISK_BLOCKED';if(a['LOW']>0x0&&e<=SEVERITY_ORDER['LOW'])return'RISK_BLOCKED';return'RISK_PASSED';}export function getCriticalRisks(a){if(!a?.['findings'])return[];return a['findings']['filter'](b=>b['severity']==='CRITICAL');}export function summarizeRiskReport(a){if(!a)return'(no\x20result)';const b=[];b['push']('#\x20Risk\x20Aggregation\x20Report'),b['push'](''),b['push']('-\x20Project:\x20'+a['namespace']['prefix']+'_'+a['namespace']['version']),b['push']('-\x20Status:\x20'+a['status']),b['push']('-\x20Calibrated\x20at:\x20'+new Date(a['calibrated_at'])['toISOString']()),b['push'](''),b['push']('##\x20Severity\x20Summary'),b['push'](''),b['push']('|\x20Severity\x20|\x20Count\x20|'),b['push']('|----------|-------|');for(const c of ALL_SEVERITIES){b['push']('|\x20'+c+'\x20|\x20'+(a['severity_summary'][c]??0x0)+'\x20|');}b['push']('');if(a['findings']['length']===0x0)return b['push']('No\x20risks\x20found.'),b['join']('\x0a');b['push']('##\x20Findings\x20(sorted\x20by\x20severity)'),b['push']('');for(const d of a['findings']){b['push']('-\x20**['+d['severity']+']\x20'+d['risk_rule_id']+'**\x20('+d['object_type']+'\x20/\x20'+d['entry_id']+')'),b['push']('\x20\x20-\x20'+d['message']),d['fix_suggestion']&&b['push']('\x20\x20-\x20Fix:\x20'+d['fix_suggestion']);}if(a['warnings']['length']>0x0){b['push'](''),b['push']('##\x20Warnings');for(const e of a['warnings'])b['push']('-\x20'+e);}return b['join']('\x0a');}
@@ -130,6 +130,10 @@ export interface ServicePanoramaResult {
130
130
  max: string | null;
131
131
  }[];
132
132
  } | null;
133
+ payment_token: {
134
+ coin_type: string | null;
135
+ guidance: string;
136
+ };
133
137
  onchain_last_updated: {
134
138
  timestamp_ms: string;
135
139
  digest: string | null;