@wowok/agent-mcp 3.1.2 → 3.1.4

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 (544) hide show
  1. package/dist/config/config-audit.spec.d.ts +1 -0
  2. package/dist/config/config-audit.spec.js +1 -0
  3. package/dist/config/exposure.d.ts +108 -0
  4. package/dist/config/exposure.js +1 -0
  5. package/dist/config/index.d.ts +2 -0
  6. package/dist/config/index.js +1 -1
  7. package/dist/config/judgment.d.ts +1228 -0
  8. package/dist/config/judgment.js +1 -0
  9. package/dist/config/judgment.spec.d.ts +1 -0
  10. package/dist/config/judgment.spec.js +1 -0
  11. package/dist/config/rule-engine.d.ts +299 -0
  12. package/dist/config/rule-engine.js +1 -0
  13. package/dist/config/rule-engine.spec.d.ts +1 -0
  14. package/dist/config/rule-engine.spec.js +1 -0
  15. package/dist/config/runtime.js +1 -1
  16. package/dist/config/severity.d.ts +7 -0
  17. package/dist/config/severity.js +1 -0
  18. package/dist/customer/index.d.ts +3 -9
  19. package/dist/customer/index.js +1 -1
  20. package/dist/customer/industry-risks.d.ts +3 -17
  21. package/dist/customer/industry-risks.js +1 -1
  22. package/dist/customer/order-monitor.d.ts +3 -1
  23. package/dist/customer/order-monitor.js +1 -1
  24. package/dist/customer/types.d.ts +1 -165
  25. package/dist/customer/types.js +1 -1
  26. package/dist/customer/user-preferences.d.ts +0 -49
  27. package/dist/customer/user-preferences.js +1 -1
  28. package/dist/evaluation/acceptance.d.ts +1 -0
  29. package/dist/evaluation/acceptance.js +1 -1
  30. package/dist/evaluation/arbitration-game.js +1 -1
  31. package/dist/evaluation/architecture.spec.d.ts +1 -0
  32. package/dist/evaluation/architecture.spec.js +1 -0
  33. package/dist/evaluation/builtins/demand-match.js +1 -1
  34. package/dist/evaluation/builtins/graph-service.d.ts +16 -0
  35. package/dist/evaluation/builtins/graph-service.js +1 -0
  36. package/dist/evaluation/builtins/graph-service.spec.d.ts +1 -0
  37. package/dist/evaluation/builtins/graph-service.spec.js +1 -0
  38. package/dist/evaluation/builtins/index.d.ts +1 -1
  39. package/dist/evaluation/builtins/index.js +1 -1
  40. package/dist/evaluation/builtins/purity.spec.d.ts +1 -0
  41. package/dist/evaluation/builtins/purity.spec.js +1 -0
  42. package/dist/evaluation/engine.js +1 -1
  43. package/dist/evaluation/facets/catalog.d.ts +19 -0
  44. package/dist/evaluation/facets/catalog.js +1 -0
  45. package/dist/evaluation/game-strategy.d.ts +2 -2
  46. package/dist/evaluation/game-strategy.js +1 -1
  47. package/dist/evaluation/guard-scan.d.ts +10 -0
  48. package/dist/evaluation/guard-scan.js +1 -0
  49. package/dist/evaluation/match-operation.d.ts +2 -2
  50. package/dist/evaluation/match-operation.js +1 -1
  51. package/dist/evaluation/standards.d.ts +9 -0
  52. package/dist/evaluation/standards.js +1 -0
  53. package/dist/evaluation/standards.spec.d.ts +1 -0
  54. package/dist/evaluation/standards.spec.js +1 -0
  55. package/dist/evaluation/types.d.ts +11 -1
  56. package/dist/experience/realtime-feedback.js +1 -1
  57. package/dist/extensions/business-modules.js +1 -1
  58. package/dist/extensions/custom-registry-file.js +1 -1
  59. package/dist/extensions/index.d.ts +1 -1
  60. package/dist/extensions/index.js +1 -1
  61. package/dist/extensions/industry-audit.spec.d.ts +1 -0
  62. package/dist/extensions/industry-audit.spec.js +1 -0
  63. package/dist/extensions/industry-layers.d.ts +14 -5
  64. package/dist/extensions/industry-layers.js +1 -1
  65. package/dist/extensions/industry-pack.d.ts +2 -0
  66. package/dist/extensions/industry-pack.js +1 -1
  67. package/dist/extensions/mode-evaluator.js +1 -1
  68. package/dist/extensions/modes.js +1 -1
  69. package/dist/graph/onchain/analyze.d.ts +16 -1
  70. package/dist/graph/onchain/analyze.js +1 -1
  71. package/dist/graph/onchain/analyze.spec.js +1 -1
  72. package/dist/graph/onchain/dataplane.d.ts +1 -1
  73. package/dist/graph/onchain/dataplane.js +1 -1
  74. package/dist/graph/onchain/edge-batch.spec.d.ts +1 -0
  75. package/dist/graph/onchain/edge-batch.spec.js +1 -0
  76. package/dist/graph/onchain/edge-schema.d.ts +11 -2
  77. package/dist/graph/onchain/edge-schema.js +1 -1
  78. package/dist/graph/onchain/entity-profile.spec.d.ts +1 -0
  79. package/dist/graph/onchain/entity-profile.spec.js +1 -0
  80. package/dist/graph/onchain/event-history.spec.d.ts +1 -0
  81. package/dist/graph/onchain/event-history.spec.js +1 -0
  82. package/dist/graph/onchain/expand.js +1 -1
  83. package/dist/graph/onchain/exploration.d.ts +28 -0
  84. package/dist/graph/onchain/exploration.js +1 -0
  85. package/dist/graph/onchain/exploration.spec.d.ts +1 -0
  86. package/dist/graph/onchain/exploration.spec.js +1 -0
  87. package/dist/graph/onchain/exposure.d.ts +18 -0
  88. package/dist/graph/onchain/exposure.js +1 -0
  89. package/dist/graph/onchain/exposure.spec.d.ts +1 -0
  90. package/dist/graph/onchain/exposure.spec.js +1 -0
  91. package/dist/graph/onchain/extract-deep.spec.d.ts +1 -0
  92. package/dist/graph/onchain/extract-deep.spec.js +1 -0
  93. package/dist/graph/onchain/extract.d.ts +11 -3
  94. package/dist/graph/onchain/extract.js +1 -1
  95. package/dist/graph/onchain/facet-projection.d.ts +99 -0
  96. package/dist/graph/onchain/facet-projection.js +1 -0
  97. package/dist/graph/onchain/facet-projection.spec.d.ts +1 -0
  98. package/dist/graph/onchain/facet-projection.spec.js +1 -0
  99. package/dist/graph/onchain/facts.d.ts +103 -0
  100. package/dist/graph/onchain/facts.js +1 -0
  101. package/dist/graph/onchain/facts.spec.d.ts +1 -0
  102. package/dist/graph/onchain/facts.spec.js +1 -0
  103. package/dist/graph/onchain/field-manifest.d.ts +29 -0
  104. package/dist/graph/onchain/field-manifest.js +1 -0
  105. package/dist/graph/onchain/field-manifest.spec.d.ts +1 -0
  106. package/dist/graph/onchain/field-manifest.spec.js +1 -0
  107. package/dist/graph/onchain/fixtures.d.ts +80 -0
  108. package/dist/graph/onchain/fixtures.js +1 -0
  109. package/dist/graph/onchain/fixtures.spec.d.ts +1 -0
  110. package/dist/graph/onchain/fixtures.spec.js +1 -0
  111. package/dist/graph/onchain/graph-policy.spec.d.ts +1 -0
  112. package/dist/graph/onchain/graph-policy.spec.js +1 -0
  113. package/dist/graph/onchain/index.d.ts +14 -2
  114. package/dist/graph/onchain/index.js +1 -1
  115. package/dist/graph/onchain/interest.js +1 -1
  116. package/dist/graph/onchain/interest.spec.js +1 -1
  117. package/dist/graph/onchain/label-lint.spec.d.ts +1 -0
  118. package/dist/graph/onchain/label-lint.spec.js +1 -0
  119. package/dist/graph/onchain/names.d.ts +23 -0
  120. package/dist/graph/onchain/names.js +1 -0
  121. package/dist/graph/onchain/names.spec.d.ts +1 -0
  122. package/dist/graph/onchain/names.spec.js +1 -0
  123. package/dist/graph/onchain/onchain.spec.js +1 -1
  124. package/dist/graph/onchain/policy.d.ts +8 -0
  125. package/dist/graph/onchain/policy.js +1 -0
  126. package/dist/graph/onchain/proposal-graph.d.ts +11 -0
  127. package/dist/graph/onchain/proposal-graph.js +1 -0
  128. package/dist/graph/onchain/proposal-graph.spec.d.ts +1 -0
  129. package/dist/graph/onchain/proposal-graph.spec.js +1 -0
  130. package/dist/graph/onchain/sdk-batch.d.ts +5 -1
  131. package/dist/graph/onchain/sdk-batch.js +1 -1
  132. package/dist/graph/onchain/strategy.d.ts +16 -0
  133. package/dist/graph/onchain/strategy.js +1 -1
  134. package/dist/graph/onchain/strategy.spec.js +1 -1
  135. package/dist/graph/onchain/synthesis.d.ts +20 -0
  136. package/dist/graph/onchain/synthesis.js +1 -0
  137. package/dist/graph/onchain/synthesis.spec.d.ts +1 -0
  138. package/dist/graph/onchain/synthesis.spec.js +1 -0
  139. package/dist/graph/onchain/table-ledger.spec.d.ts +1 -0
  140. package/dist/graph/onchain/table-ledger.spec.js +1 -0
  141. package/dist/graph/onchain/types.d.ts +57 -7
  142. package/dist/graph/onchain/viewport.d.ts +1 -0
  143. package/dist/graph/onchain/viewport.js +1 -1
  144. package/dist/harness/index.d.ts +1 -5
  145. package/dist/harness/index.js +1 -1
  146. package/dist/harness/verify.d.ts +6 -1
  147. package/dist/harness/verify.js +1 -1
  148. package/dist/index.js +1 -1
  149. package/dist/keeper/keeper.spec.js +1 -1
  150. package/dist/knowledge/alloc-audit-policy.spec.d.ts +1 -0
  151. package/dist/knowledge/alloc-audit-policy.spec.js +1 -0
  152. package/dist/knowledge/allocation-ledger.js +1 -1
  153. package/dist/knowledge/allocation-puzzle.d.ts +1 -1
  154. package/dist/knowledge/allocation-puzzle.js +1 -1
  155. package/dist/knowledge/allocation-risk.d.ts +4 -3
  156. package/dist/knowledge/allocation-risk.js +1 -1
  157. package/dist/knowledge/allocation-templates.js +1 -1
  158. package/dist/knowledge/arb-risk.d.ts +6 -6
  159. package/dist/knowledge/arb-risk.js +1 -1
  160. package/dist/knowledge/arbitration-ledger.d.ts +4 -4
  161. package/dist/knowledge/arbitration-ledger.js +1 -1
  162. package/dist/knowledge/arbitration-puzzle.d.ts +1 -1
  163. package/dist/knowledge/arbitration-puzzle.js +1 -1
  164. package/dist/knowledge/arbitration-risk.d.ts +4 -3
  165. package/dist/knowledge/arbitration-risk.js +1 -1
  166. package/dist/knowledge/arbitration-templates.js +1 -1
  167. package/dist/knowledge/baselines/guard-lint-baseline.spec.d.ts +1 -0
  168. package/dist/knowledge/baselines/guard-lint-baseline.spec.js +1 -0
  169. package/dist/knowledge/baselines/judgment-baselines.json +289 -0
  170. package/dist/knowledge/baselines/risk-baselines.spec.d.ts +1 -0
  171. package/dist/knowledge/baselines/risk-baselines.spec.js +1 -0
  172. package/dist/knowledge/baselines/risk-cases.d.ts +8 -0
  173. package/dist/knowledge/baselines/risk-cases.js +1 -0
  174. package/dist/knowledge/baselines/rules/alloc_audit.json +290 -0
  175. package/dist/knowledge/baselines/rules/allocation.json +492 -0
  176. package/dist/knowledge/baselines/rules/arb.json +155 -0
  177. package/dist/knowledge/baselines/rules/arbitration.json +366 -0
  178. package/dist/knowledge/baselines/rules/bridge.json +197 -0
  179. package/dist/knowledge/baselines/rules/contact.json +152 -0
  180. package/dist/knowledge/baselines/rules/demand.json +158 -0
  181. package/dist/knowledge/baselines/rules/graph.json +453 -0
  182. package/dist/knowledge/baselines/rules/guard.json +981 -0
  183. package/dist/knowledge/baselines/rules/machine.json +706 -0
  184. package/dist/knowledge/baselines/rules/order.json +549 -0
  185. package/dist/knowledge/baselines/rules/payment.json +205 -0
  186. package/dist/knowledge/baselines/rules/permission.json +330 -0
  187. package/dist/knowledge/baselines/rules/personal.json +139 -0
  188. package/dist/knowledge/baselines/rules/progress.json +346 -0
  189. package/dist/knowledge/baselines/rules/proof.json +158 -0
  190. package/dist/knowledge/baselines/rules/registrar.json +159 -0
  191. package/dist/knowledge/baselines/rules/repository.json +244 -0
  192. package/dist/knowledge/baselines/rules/resource.json +117 -0
  193. package/dist/knowledge/baselines/rules/reward.json +471 -0
  194. package/dist/knowledge/baselines/rules/service.json +595 -0
  195. package/dist/knowledge/baselines/rules/treasury.json +440 -0
  196. package/dist/knowledge/baselines/rules/util.json +101 -0
  197. package/dist/knowledge/bridge-risk.d.ts +6 -6
  198. package/dist/knowledge/bridge-risk.js +1 -1
  199. package/dist/knowledge/builtin-templates.d.ts +26 -0
  200. package/dist/knowledge/builtin-templates.js +1 -0
  201. package/dist/knowledge/contact-risk.d.ts +6 -6
  202. package/dist/knowledge/contact-risk.js +1 -1
  203. package/dist/knowledge/contract-invariants.d.ts +1 -0
  204. package/dist/knowledge/contract-invariants.js +1 -1
  205. package/dist/knowledge/demand-risk.d.ts +6 -6
  206. package/dist/knowledge/demand-risk.js +1 -1
  207. package/dist/knowledge/event-semantics.js +1 -1
  208. package/dist/knowledge/facts-sync.spec.d.ts +1 -0
  209. package/dist/knowledge/facts-sync.spec.js +1 -0
  210. package/dist/knowledge/getting-started.js +1 -1
  211. package/dist/knowledge/guard-design-patterns.js +1 -1
  212. package/dist/knowledge/guard-eval.d.ts +15 -0
  213. package/dist/knowledge/guard-eval.js +1 -0
  214. package/dist/knowledge/guard-eval.spec.d.ts +1 -0
  215. package/dist/knowledge/guard-eval.spec.js +1 -0
  216. package/dist/knowledge/guard-field-cognition.d.ts +1 -1
  217. package/dist/knowledge/guard-field-cognition.js +1 -1
  218. package/dist/knowledge/guard-ledger.js +1 -1
  219. package/dist/knowledge/guard-lint.d.ts +1 -1
  220. package/dist/knowledge/guard-lint.js +1 -1
  221. package/dist/knowledge/guard-risk.d.ts +7 -19
  222. package/dist/knowledge/guard-risk.js +1 -1
  223. package/dist/knowledge/guard-templates.js +1 -1
  224. package/dist/knowledge/guard-translation.js +1 -1
  225. package/dist/knowledge/index.d.ts +51 -45
  226. package/dist/knowledge/index.js +1 -1
  227. package/dist/knowledge/industry-registry.js +1 -1
  228. package/dist/knowledge/industry-rule-node.d.ts +7 -0
  229. package/dist/knowledge/industry-rule-node.js +1 -0
  230. package/dist/knowledge/industry-strategy.js +1 -1
  231. package/dist/knowledge/jsonrpc-enum.js +1 -1
  232. package/dist/knowledge/machine-ledger.js +1 -1
  233. package/dist/knowledge/machine-risk.d.ts +4 -7
  234. package/dist/knowledge/machine-risk.js +1 -1
  235. package/dist/knowledge/machine-templates.js +1 -1
  236. package/dist/knowledge/machine-translation.js +1 -1
  237. package/dist/knowledge/migration-preflight.js +1 -1
  238. package/dist/knowledge/operation-dictionary.js +1 -1
  239. package/dist/knowledge/order-ledger.js +1 -1
  240. package/dist/knowledge/order-puzzle.d.ts +3 -3
  241. package/dist/knowledge/order-puzzle.js +1 -1
  242. package/dist/knowledge/order-risk.d.ts +7 -12
  243. package/dist/knowledge/order-risk.js +1 -1
  244. package/dist/knowledge/order-templates.js +1 -1
  245. package/dist/knowledge/passport-ledger.js +1 -1
  246. package/dist/knowledge/passport-templates.js +1 -1
  247. package/dist/knowledge/payment-risk.d.ts +8 -7
  248. package/dist/knowledge/payment-risk.js +1 -1
  249. package/dist/knowledge/payment-tracker.js +1 -1
  250. package/dist/knowledge/permission-ledger.js +1 -1
  251. package/dist/knowledge/permission-puzzle.d.ts +12 -12
  252. package/dist/knowledge/permission-puzzle.js +1 -1
  253. package/dist/knowledge/permission-risk.d.ts +4 -10
  254. package/dist/knowledge/permission-risk.js +1 -1
  255. package/dist/knowledge/permission-templates.js +1 -1
  256. package/dist/knowledge/personal-risk.d.ts +6 -6
  257. package/dist/knowledge/personal-risk.js +1 -1
  258. package/dist/knowledge/progress-ledger.js +1 -1
  259. package/dist/knowledge/progress-puzzle.d.ts +2 -2
  260. package/dist/knowledge/progress-puzzle.js +1 -1
  261. package/dist/knowledge/progress-risk.d.ts +4 -3
  262. package/dist/knowledge/progress-risk.js +1 -1
  263. package/dist/knowledge/progress-templates.js +1 -1
  264. package/dist/knowledge/proof-risk.d.ts +6 -6
  265. package/dist/knowledge/proof-risk.js +1 -1
  266. package/dist/knowledge/puzzle-projections.d.ts +11 -0
  267. package/dist/knowledge/puzzle-projections.js +1 -0
  268. package/dist/knowledge/recipient-constraint.d.ts +20 -1
  269. package/dist/knowledge/recipient-constraint.js +1 -1
  270. package/dist/knowledge/registrar-risk.d.ts +6 -6
  271. package/dist/knowledge/registrar-risk.js +1 -1
  272. package/dist/knowledge/repository-risk.d.ts +7 -7
  273. package/dist/knowledge/repository-risk.js +1 -1
  274. package/dist/knowledge/resource-risk.d.ts +6 -6
  275. package/dist/knowledge/resource-risk.js +1 -1
  276. package/dist/knowledge/reward-ledger.d.ts +1 -1
  277. package/dist/knowledge/reward-ledger.js +1 -1
  278. package/dist/knowledge/reward-puzzle.d.ts +2 -2
  279. package/dist/knowledge/reward-puzzle.js +1 -1
  280. package/dist/knowledge/reward-risk.d.ts +5 -6
  281. package/dist/knowledge/reward-risk.js +1 -1
  282. package/dist/knowledge/rule-node-analyzers.d.ts +43 -0
  283. package/dist/knowledge/rule-node-analyzers.js +1 -0
  284. package/dist/knowledge/rule-node-analyzers.spec.d.ts +1 -0
  285. package/dist/knowledge/rule-node-analyzers.spec.js +1 -0
  286. package/dist/knowledge/rule-outcome.d.ts +5 -0
  287. package/dist/knowledge/rule-outcome.js +1 -0
  288. package/dist/knowledge/safety-rules.js +1 -1
  289. package/dist/knowledge/scenario-modes.d.ts +2 -2
  290. package/dist/knowledge/scenario-modes.js +1 -1
  291. package/dist/knowledge/scenario-topology.js +1 -1
  292. package/dist/knowledge/service-allocator-audit-node.js +1 -1
  293. package/dist/knowledge/service-ledger.js +1 -1
  294. package/dist/knowledge/service-puzzle.d.ts +2 -2
  295. package/dist/knowledge/service-puzzle.js +1 -1
  296. package/dist/knowledge/service-risk-node.js +1 -1
  297. package/dist/knowledge/service-risk.d.ts +4 -4
  298. package/dist/knowledge/service-risk.js +1 -1
  299. package/dist/knowledge/service-templates.js +1 -1
  300. package/dist/knowledge/strategy-manuals.d.ts +1 -1
  301. package/dist/knowledge/strategy-manuals.js +1 -1
  302. package/dist/knowledge/template-loader.d.ts +84 -0
  303. package/dist/knowledge/template-loader.js +1 -0
  304. package/dist/knowledge/template-loader.spec.d.ts +1 -0
  305. package/dist/knowledge/template-loader.spec.js +1 -0
  306. package/dist/knowledge/template-registry.js +1 -1
  307. package/dist/knowledge/template-scanner.d.ts +17 -0
  308. package/dist/knowledge/template-scanner.js +1 -0
  309. package/dist/knowledge/template-scanner.spec.d.ts +1 -0
  310. package/dist/knowledge/template-scanner.spec.js +1 -0
  311. package/dist/knowledge/tools-reference.js +1 -1
  312. package/dist/knowledge/treasury-ledger.d.ts +1 -1
  313. package/dist/knowledge/treasury-ledger.js +1 -1
  314. package/dist/knowledge/treasury-puzzle.d.ts +3 -3
  315. package/dist/knowledge/treasury-puzzle.js +1 -1
  316. package/dist/knowledge/treasury-risk.d.ts +6 -4
  317. package/dist/knowledge/treasury-risk.js +1 -1
  318. package/dist/knowledge/treasury-templates.js +1 -1
  319. package/dist/knowledge/util-risk.d.ts +6 -6
  320. package/dist/knowledge/util-risk.js +1 -1
  321. package/dist/knowledge/workflow-guidance.d.ts +4 -0
  322. package/dist/knowledge/workflow-guidance.js +1 -1
  323. package/dist/knowledge/workspace-lists.js +1 -1
  324. package/dist/monitor/MonitorLoop.js +1 -1
  325. package/dist/participation/arbitrator-interest.js +1 -1
  326. package/dist/participation/radar-core.js +1 -1
  327. package/dist/persona/analyzer.js +1 -1
  328. package/dist/persona/bridge.js +1 -1
  329. package/dist/persona/facet-profile.d.ts +33 -0
  330. package/dist/persona/facet-profile.js +1 -0
  331. package/dist/persona/index.js +1 -1
  332. package/dist/persona/model.d.ts +2 -1
  333. package/dist/persona/model.js +1 -1
  334. package/dist/persona/persona-audit.spec.d.ts +1 -0
  335. package/dist/persona/persona-audit.spec.js +1 -0
  336. package/dist/persona/topology-focus.d.ts +2 -2
  337. package/dist/persona/topology-focus.js +1 -1
  338. package/dist/persona/types.d.ts +14 -0
  339. package/dist/playbooks/service-build/business-puzzle.js +1 -1
  340. package/dist/playbooks/service-build/facet-money.d.ts +33 -0
  341. package/dist/playbooks/service-build/facet-money.js +1 -0
  342. package/dist/playbooks/service-build/facet-money.spec.d.ts +1 -0
  343. package/dist/playbooks/service-build/facet-money.spec.js +1 -0
  344. package/dist/playbooks/service-build/machine-panorama.d.ts +20 -0
  345. package/dist/playbooks/service-build/machine-panorama.js +1 -1
  346. package/dist/playbooks/service-build/merchant-guide.d.ts +2 -2
  347. package/dist/playbooks/service-build/migration-planner.d.ts +43 -0
  348. package/dist/playbooks/service-build/migration-planner.js +1 -0
  349. package/dist/playbooks/service-build/object-panorama.d.ts +65 -24
  350. package/dist/playbooks/service-build/object-panorama.js +1 -1
  351. package/dist/playbooks/service-build/participation-radar.js +1 -1
  352. package/dist/playbooks/service-build/pipeline-actions.d.ts +3 -3
  353. package/dist/playbooks/service-build/pipeline-actions.js +1 -1
  354. package/dist/playbooks/service-build/reverse-mapping.d.ts +1 -0
  355. package/dist/playbooks/service-build/reverse-mapping.js +1 -1
  356. package/dist/playbooks/service-build/risk-aggregator.d.ts +4 -2
  357. package/dist/playbooks/service-build/risk-aggregator.js +1 -1
  358. package/dist/playbooks/service-build/semantic-graph.js +1 -1
  359. package/dist/playbooks/service-build/service-panorama.d.ts +56 -9
  360. package/dist/playbooks/service-build/service-panorama.js +1 -1
  361. package/dist/playbooks/service-build/topology-evaluation.spec.d.ts +1 -0
  362. package/dist/playbooks/service-build/topology-evaluation.spec.js +1 -0
  363. package/dist/playbooks/service-build/topology-query.d.ts +13 -2
  364. package/dist/playbooks/service-build/topology-query.js +1 -1
  365. package/dist/playbooks/service-build/workflow-design-assessment.d.ts +2 -2
  366. package/dist/playbooks/service-build/workflow-design-assessment.js +1 -1
  367. package/dist/relationship/registry.js +1 -1
  368. package/dist/review/arb.d.ts +0 -2
  369. package/dist/review/arb.js +1 -1
  370. package/dist/review/machine.js +1 -1
  371. package/dist/review/order.d.ts +0 -1
  372. package/dist/review/order.js +1 -1
  373. package/dist/review/service.js +1 -1
  374. package/dist/review/types.d.ts +7 -0
  375. package/dist/role/profiles.js +1 -1
  376. package/dist/rules.d.ts +1 -2
  377. package/dist/rules.js +1 -1
  378. package/dist/safety/confirm-gate.js +1 -1
  379. package/dist/schema/benchmark-migration/index.d.ts +207 -0
  380. package/dist/schema/benchmark-migration/index.js +1 -0
  381. package/dist/schema/call/allocation.d.ts +1 -1
  382. package/dist/schema/call/allocation.js +1 -1
  383. package/dist/schema/call/arbitration.d.ts +1 -1
  384. package/dist/schema/call/arbitration.js +1 -1
  385. package/dist/schema/call/base.d.ts +3374 -670
  386. package/dist/schema/call/base.js +1 -1
  387. package/dist/schema/call/contact.d.ts +1 -1
  388. package/dist/schema/call/demand.d.ts +1 -1
  389. package/dist/schema/call/guard.d.ts +3 -3
  390. package/dist/schema/call/handler.js +1 -1
  391. package/dist/schema/call/machine.d.ts +5 -5
  392. package/dist/schema/call/order.d.ts +3 -3
  393. package/dist/schema/call/payment.js +1 -1
  394. package/dist/schema/call/permission-handler.d.ts +1 -1
  395. package/dist/schema/call/permission-handler.js +1 -1
  396. package/dist/schema/call/permission.d.ts +16 -16
  397. package/dist/schema/call/permission.js +1 -1
  398. package/dist/schema/call/personal.d.ts +8 -8
  399. package/dist/schema/call/personal.js +1 -1
  400. package/dist/schema/call/progress.d.ts +3 -3
  401. package/dist/schema/call/receipt.d.ts +28 -0
  402. package/dist/schema/call/receipt.js +1 -0
  403. package/dist/schema/call/repository.d.ts +11 -11
  404. package/dist/schema/call/repository.js +1 -1
  405. package/dist/schema/call/reward.d.ts +1 -1
  406. package/dist/schema/call/semantic-customer-advice.spec.d.ts +1 -0
  407. package/dist/schema/call/semantic-customer-advice.spec.js +1 -0
  408. package/dist/schema/call/semantic.d.ts +5 -2
  409. package/dist/schema/call/semantic.js +1 -1
  410. package/dist/schema/call/service.d.ts +7 -7
  411. package/dist/schema/call/service.js +1 -1
  412. package/dist/schema/call/treasury.d.ts +1 -1
  413. package/dist/schema/call/treasury.js +1 -1
  414. package/dist/schema/common/index.d.ts +6 -6
  415. package/dist/schema/common/index.js +1 -1
  416. package/dist/schema/config/index.d.ts +50 -1
  417. package/dist/schema/config/index.js +1 -1
  418. package/dist/schema/evaluation/index.d.ts +307 -213
  419. package/dist/schema/evaluation/index.js +1 -1
  420. package/dist/schema/goal/index.d.ts +6 -6
  421. package/dist/schema/goal/planning.d.ts +17 -17
  422. package/dist/schema/goal/planning.js +1 -1
  423. package/dist/schema/index.d.ts +1 -1
  424. package/dist/schema/index.js +1 -1
  425. package/dist/schema/industry-pack/index.d.ts +1 -1
  426. package/dist/schema/interaction/index.d.ts +1 -1
  427. package/dist/schema/keeper/index.d.ts +1 -1
  428. package/dist/schema/local/index.js +1 -1
  429. package/dist/schema/messenger/index.d.ts +26 -26
  430. package/dist/schema/operations.d.ts +59 -43
  431. package/dist/schema/operations.js +1 -1
  432. package/dist/schema/persona/index.d.ts +4732 -24
  433. package/dist/schema/persona/index.js +1 -1
  434. package/dist/schema/query/bi.d.ts +830 -10
  435. package/dist/schema/query/bi.js +1 -1
  436. package/dist/schema/query/index.d.ts +44 -44
  437. package/dist/schema/query/index.js +1 -1
  438. package/dist/schema/schema-version.js +1 -1
  439. package/dist/schema/workflow/index.d.ts +1 -1
  440. package/dist/schema/workspace/index.d.ts +2 -2
  441. package/dist/schema-query-impl/index.d.ts +9 -0
  442. package/dist/schema-query-impl/index.js +1 -1
  443. package/dist/schemas/account_operation.output.json +1 -1
  444. package/dist/schemas/benchmark_migration_operation.output.json +793 -0
  445. package/dist/schemas/benchmark_migration_operation.schema.json +83 -0
  446. package/dist/schemas/bridge_operation.output.json +1 -1
  447. package/dist/schemas/bridge_operation.schema.json +5 -5
  448. package/dist/schemas/config_operation.output.json +252 -0
  449. package/dist/schemas/config_operation.schema.json +21 -1
  450. package/dist/schemas/evaluation_operation.output.json +702 -162
  451. package/dist/schemas/evaluation_operation.schema.json +0 -429
  452. package/dist/schemas/goal_operation.schema.json +8 -8
  453. package/dist/schemas/guard2file.schema.json +1 -1
  454. package/dist/schemas/index.json +7 -7
  455. package/dist/schemas/keeper_operation.output.json +1 -1
  456. package/dist/schemas/local_history_operation.output.json +1 -1
  457. package/dist/schemas/local_info_operation.output.json +1 -1
  458. package/dist/schemas/local_mark_operation.output.json +1 -1
  459. package/dist/schemas/machineNode2file.schema.json +1 -1
  460. package/dist/schemas/messenger_operation.output.json +1 -1
  461. package/dist/schemas/messenger_operation.schema.json +24 -12
  462. package/dist/schemas/monitor_events.output.json +1 -1
  463. package/dist/schemas/monitor_subscription.output.json +1 -1
  464. package/dist/schemas/onchain_events.output.json +2 -2
  465. package/dist/schemas/onchain_operations.output.json +6359 -3724
  466. package/dist/schemas/onchain_operations.schema.json +191 -141
  467. package/dist/schemas/onchain_operations_allocation.schema.json +13 -11
  468. package/dist/schemas/onchain_operations_arbitration.schema.json +10 -8
  469. package/dist/schemas/onchain_operations_contact.schema.json +7 -5
  470. package/dist/schemas/onchain_operations_demand.schema.json +7 -5
  471. package/dist/schemas/onchain_operations_gen_passport.schema.json +5 -3
  472. package/dist/schemas/onchain_operations_gen_proof.schema.json +1 -1
  473. package/dist/schemas/onchain_operations_guard.schema.json +5 -3
  474. package/dist/schemas/onchain_operations_machine.schema.json +22 -18
  475. package/dist/schemas/onchain_operations_order.schema.json +11 -7
  476. package/dist/schemas/onchain_operations_payment.schema.json +3 -3
  477. package/dist/schemas/onchain_operations_permission.schema.json +19 -11
  478. package/dist/schemas/onchain_operations_personal.schema.json +16 -10
  479. package/dist/schemas/onchain_operations_progress.schema.json +11 -7
  480. package/dist/schemas/onchain_operations_proof.schema.json +5 -3
  481. package/dist/schemas/onchain_operations_repository.schema.json +12 -8
  482. package/dist/schemas/onchain_operations_reward.schema.json +11 -9
  483. package/dist/schemas/onchain_operations_service.schema.json +28 -22
  484. package/dist/schemas/onchain_operations_treasury.schema.json +13 -11
  485. package/dist/schemas/onchain_table_data.output.json +88 -88
  486. package/dist/schemas/persona_operation.output.json +15875 -1
  487. package/dist/schemas/persona_operation.schema.json +3056 -478
  488. package/dist/schemas/query_toolkit.output.json +1325 -212
  489. package/dist/schemas/query_toolkit.schema.json +60 -2
  490. package/dist/schemas/workflow_operation.schema.json +4 -2
  491. package/dist/strategy/metrics.js +1 -1
  492. package/dist/strategy/scorecard.js +1 -1
  493. package/dist/tools/handlers/benchmark-migration.d.ts +2 -0
  494. package/dist/tools/handlers/benchmark-migration.js +1 -0
  495. package/dist/tools/handlers/bridge.js +1 -1
  496. package/dist/tools/handlers/config.js +1 -1
  497. package/dist/tools/handlers/dispatch-expectations.d.ts +3 -0
  498. package/dist/tools/handlers/dispatch-expectations.js +1 -0
  499. package/dist/tools/handlers/evaluation.js +1 -1
  500. package/dist/tools/handlers/industry-pack.js +1 -1
  501. package/dist/tools/handlers/onchain.js +1 -1
  502. package/dist/tools/handlers/query.js +1 -1
  503. package/dist/tools/handlers/schema-query.js +1 -1
  504. package/dist/tools/index.js +1 -1
  505. package/dist/tools/move-fn-index.gen.d.ts +3 -0
  506. package/dist/tools/move-fn-index.gen.js +1 -0
  507. package/dist/tools/registry/business.js +1 -1
  508. package/dist/tools/registry/config.js +1 -1
  509. package/dist/tools/registry/evaluation.d.ts +2 -0
  510. package/dist/tools/registry/evaluation.js +1 -0
  511. package/dist/tools/registry/onchain.js +1 -1
  512. package/dist/tools/registry/query.js +1 -1
  513. package/dist/tools/sanitize-output.d.ts +3 -0
  514. package/dist/tools/sanitize-output.js +1 -0
  515. package/dist/tools/sanitize-output.spec.d.ts +1 -0
  516. package/dist/tools/sanitize-output.spec.js +1 -0
  517. package/dist/tools/shared.d.ts +0 -1
  518. package/dist/tools/shared.js +1 -1
  519. package/dist/tools/wrap.js +1 -1
  520. package/package.json +9 -3
  521. package/dist/customer/customer-advice.d.ts +0 -32
  522. package/dist/customer/customer-advice.js +0 -1
  523. package/dist/customer/info-puzzle.d.ts +0 -146
  524. package/dist/customer/info-puzzle.js +0 -1
  525. package/dist/customer/order-strategy.d.ts +0 -17
  526. package/dist/customer/order-strategy.js +0 -1
  527. package/dist/customer/preorder-compare.d.ts +0 -24
  528. package/dist/customer/preorder-compare.js +0 -1
  529. package/dist/customer/reminder-system.d.ts +0 -42
  530. package/dist/customer/reminder-system.js +0 -1
  531. package/dist/customer/risk-assessment.d.ts +0 -13
  532. package/dist/customer/risk-assessment.js +0 -1
  533. package/dist/evaluation/builtins/service-risk.d.ts +0 -7
  534. package/dist/evaluation/builtins/service-risk.js +0 -1
  535. package/dist/knowledge/trust-metrics.d.ts +0 -66
  536. package/dist/knowledge/trust-metrics.js +0 -1
  537. package/dist/schema/trust/index.d.ts +0 -334
  538. package/dist/schema/trust/index.js +0 -1
  539. package/dist/schemas/trust_score.output.json +0 -847
  540. package/dist/schemas/trust_score.schema.json +0 -364
  541. package/dist/tools/handlers/trust.d.ts +0 -16
  542. package/dist/tools/handlers/trust.js +0 -1
  543. package/dist/tools/registry/trust.d.ts +0 -2
  544. package/dist/tools/registry/trust.js +0 -1
@@ -0,0 +1,80 @@
1
+ import type { RawObject, TableItem } from "./types.js";
2
+ import type { FakePlaneState } from "./dataplane.js";
3
+ export declare const T_USDT = "0x2::wow::coins::USDT";
4
+ export interface FullAddrs {
5
+ merchant: string;
6
+ buyer: string;
7
+ agent: string;
8
+ voter1: string;
9
+ voter2: string;
10
+ member: string;
11
+ supplier: string;
12
+ claimant: string;
13
+ signer: string;
14
+ buyer2: string;
15
+ svc: string;
16
+ mac: string;
17
+ perm: string;
18
+ permArb: string;
19
+ permRew: string;
20
+ permRepo: string;
21
+ permT: string;
22
+ permDem: string;
23
+ ctShop: string;
24
+ ctMac: string;
25
+ ctArb: string;
26
+ ctRew: string;
27
+ ctRepo: string;
28
+ ctT: string;
29
+ ctDem: string;
30
+ gBuy: string;
31
+ gAlloc: string;
32
+ gShip: string;
33
+ gRel: string;
34
+ gDeep: string;
35
+ gVote: string;
36
+ gUsage: string;
37
+ gClaim: string;
38
+ gWrite: string;
39
+ gQuote: string;
40
+ gSub: string;
41
+ gDep: string;
42
+ gWd: string;
43
+ arbsvc: string;
44
+ arb1: string;
45
+ rew: string;
46
+ repo: string;
47
+ tres: string;
48
+ alloc: string;
49
+ disc: string;
50
+ o1: string;
51
+ o2: string;
52
+ pr1: string;
53
+ pr2: string;
54
+ pay1: string;
55
+ pay2: string;
56
+ proof1: string;
57
+ pp: string;
58
+ dem: string;
59
+ resource: string;
60
+ }
61
+ export declare const FULL: FullAddrs;
62
+ export declare function rowObject(type: string, data: Record<string, unknown>): {
63
+ objectId: string;
64
+ object: RawObject;
65
+ };
66
+ export declare function fullServiceObjects(): RawObject[];
67
+ export declare function fullServiceTables(): Map<string, TableItem[]>;
68
+ export declare function fullServiceKeyedFields(): Map<string, Map<string, unknown>>;
69
+ export declare function fullServiceState(): FakePlaneState;
70
+ export interface GapAddrs {
71
+ merchant: string;
72
+ svc: string;
73
+ perm: string;
74
+ macMissing: string;
75
+ bareOrder: string;
76
+ }
77
+ export declare const GAP: GapAddrs;
78
+ export declare function gapServiceState(): FakePlaneState;
79
+ export declare const TRUNC_EXTRA_ORDERS = 250;
80
+ export declare function truncatedServiceState(): FakePlaneState;
@@ -0,0 +1 @@
1
+ function mk(a,b){return'0x'+a['toString'](0x10)['padStart'](0x2,'0')+b['toString'](0x10)['padStart'](0x3e,'0');}const eoa=a=>mk(0x0,a),obj=(a,b)=>mk(0x10+a,b);export const T_USDT='0x2::wow::coins::USDT';export const FULL={'merchant':eoa(0x1),'buyer':eoa(0x2),'agent':eoa(0x3),'voter1':eoa(0x4),'voter2':eoa(0x5),'member':eoa(0x6),'supplier':eoa(0x7),'claimant':eoa(0x8),'signer':eoa(0x9),'buyer2':eoa(0xa),'svc':obj(0x4,0xa),'mac':obj(0x5,0xb),'perm':obj(0x0,0x33),'permArb':obj(0x0,0x34),'permRew':obj(0x0,0x35),'permRepo':obj(0x0,0x36),'permT':obj(0x0,0x37),'permDem':obj(0x0,0x38),'ctShop':obj(0x14,0x3c),'ctMac':obj(0x14,0x3d),'ctArb':obj(0x14,0x3e),'ctRew':obj(0x14,0x3f),'ctRepo':obj(0x14,0x40),'ctT':obj(0x14,0x41),'ctDem':obj(0x14,0x42),'gBuy':obj(0xa,0x46),'gAlloc':obj(0xa,0x47),'gShip':obj(0xa,0x48),'gRel':obj(0xa,0x49),'gDeep':obj(0xa,0x4a),'gVote':obj(0xa,0x4b),'gUsage':obj(0xa,0x4c),'gClaim':obj(0xa,0x4d),'gWrite':obj(0xa,0x4e),'gQuote':obj(0xa,0x4f),'gSub':obj(0xa,0x50),'gDep':obj(0xa,0x51),'gWd':obj(0xa,0x52),'arbsvc':obj(0x3,0x5a),'arb1':obj(0x2,0x5b),'rew':obj(0xf,0x5c),'repo':obj(0x1,0x5d),'tres':obj(0x9,0x5e),'alloc':obj(0xd,0x5f),'disc':obj(0x10,0x60),'o1':obj(0x6,0x15),'o2':obj(0x6,0x16),'pr1':obj(0x7,0x1f),'pr2':obj(0x7,0x20),'pay1':obj(0x8,0x29),'pay2':obj(0x8,0x2a),'proof1':obj(0x13,0x2d),'pp':obj(0xc,0x2e),'dem':obj(0xb,0x2f),'resource':obj(0xe,0x61)};function raw(a,b,c,d){return{'object':a,'type':b,'data':c,...d?{'type_raw':d}:{}};}let tableSeq=0x0;export function rowObject(a,b){tableSeq+=0x1;const c='0x9'+tableSeq['toString'](0x10)['padStart'](0x3f,'0');return{'objectId':c,'object':raw(c,a,b)};}function nodeRow(a,b,c){return{'key':a,...rowObject('TableItem_MachineNode',{'name':b,'value':c})};}function permRow(a,b){return{'key':a,...rowObject('TableItem_PermissionPerm',{'address':a,'perm':b})};}export function fullServiceObjects(){const a=FULL;return[raw(a['svc'],'Service',{'permission':a['perm'],'machine':a['mac'],'buy_guard':a['gBuy'],'arbitrations':[a['arbsvc']],'rewards':[a['rew']],'repositories':[a['repo']],'um':a['ctShop'],'order_allocators':{'allocators':[{'guard':a['gAlloc'],'mode':0x0}]},'bPublished':!![],'bPaused':![],'sales':'1000000','description':'three-body\x20signature\x20service\x20(fixture)','location':'test-location','customer_required':[],'balances':{'available':'500000'}},'0x2::service::Service<'+T_USDT+'>'),raw(a['mac'],'Machine',{'permission':a['perm'],'consensus_repositories':[a['repo']],'um':a['ctMac'],'bPublished':!![]}),raw(a['gBuy'],'Guard',{'relies':[],'identifier':0x0,'table':[]}),raw(a['gAlloc'],'Guard',{'relies':[],'identifier':0x1,'table':[]}),raw(a['gShip'],'Guard',{'relies':[a['gRel']],'identifier':0x2,'table':[]}),raw(a['gRel'],'Guard',{'relies':[a['gDeep']],'identifier':0x3,'table':[]}),raw(a['gDeep'],'Guard',{'relies':[],'identifier':0x4,'table':[]}),raw(a['gVote'],'Guard',{'relies':[],'identifier':0x5,'table':[]}),raw(a['gUsage'],'Guard',{'relies':[],'identifier':0x6,'table':[]}),raw(a['gClaim'],'Guard',{'relies':[],'identifier':0x7,'table':[]}),raw(a['gWrite'],'Guard',{'relies':[],'identifier':0x8,'table':[]}),raw(a['gQuote'],'Guard',{'relies':[],'identifier':0x9,'table':[]}),raw(a['gSub'],'Guard',{'relies':[],'identifier':0xa,'table':[]}),raw(a['gDep'],'Guard',{'relies':[],'identifier':0xb,'table':[]}),raw(a['gWd'],'Guard',{'relies':[],'identifier':0xc,'table':[]}),raw(a['perm'],'Permission',{'admin':[a['merchant']],'owner':a['merchant'],'um':a['ctShop'],'remark':'shop'}),raw(a['permArb'],'Permission',{'admin':[a['merchant']],'owner':a['merchant'],'um':a['ctArb'],'remark':'arb'}),raw(a['permRew'],'Permission',{'admin':[a['merchant']],'owner':a['merchant'],'um':a['ctRew'],'remark':'reward'}),raw(a['permRepo'],'Permission',{'admin':[a['merchant']],'owner':a['merchant'],'um':a['ctRepo'],'remark':'repo'}),raw(a['permT'],'Permission',{'admin':[a['merchant']],'owner':a['merchant'],'um':a['ctT'],'remark':'treasury'}),raw(a['permDem'],'Permission',{'admin':[a['supplier']],'owner':a['supplier'],'um':a['ctDem'],'remark':'demand'}),...[a['ctShop'],a['ctMac'],a['ctArb'],a['ctRew'],a['ctRepo'],a['ctT'],a['ctDem']]['map']((b,d)=>raw(b,'Contact',{'permission':[a['perm'],a['permArb'],a['permRew'],a['permRepo'],a['permT'],a['permDem']][d]??a['perm'],'description':'contact\x20book\x20'+d,'location':'','ims':[{'at':a['member'],'status':'active','join_time':0x18bcfe56800+d,'description':'ops\x20im'}]})),raw(a['arbsvc'],'Arbitration',{'permission':a['permArb'],'voting_guard':[{'guard':a['gVote'],'vote_weight':0x1}],'usage_guard':a['gUsage'],'um':a['ctArb'],'bPaused':![],'fee':'1000'},'0x2::arbitration::Arbitration<'+T_USDT+'>'),raw(a['arb1'],'Arb',{'order':a['o1'],'arbitration':a['arbsvc'],'voted':[{'voter':a['voter1'],'weight':0x3,'agrees':[0x1]},{'voter':a['voter2'],'weight':0x1,'agrees':[0x0]}],'status':0x2,'proposition':'fixture\x20case','indemnity':'100000'},'0x2::arb::Arb<'+T_USDT+'>'),raw(a['rew'],'Reward',{'permission':a['permRew'],'guards':[{'guard':a['gClaim'],'recipient':a['supplier'],'amount':'1000','expiration':null}],'um':a['ctRew'],'balance':'200000'},'0x2::reward::Reward<'+T_USDT+'>'),raw(a['repo'],'Repository',{'permission':a['permRepo'],'rewards':[a['rew']],'um':a['ctRepo'],'policies':[{'name':'default','write_guard':[{'guard':a['gWrite'],'retained_submission':[]}],'quote_guard':a['gQuote']}]}),raw(a['tres'],'Treasury',{'permission':a['permT'],'external_deposit_guard':[{'guard':a['gDep'],'identifier':0x1,'store_from_id':null}],'external_withdraw_guard':[{'guard':a['gWd'],'recipient':0x0,'identifier':0x1,'store_from_id':null}],'um':a['ctT'],'balance':'1000000','inflow':'5000000','outflow':'4000000'},'0x2::treasury::Treasury<'+T_USDT+'>'),raw(a['alloc'],'Allocation',{'allocators':{'threshold':0x1,'allocators':[{'guard':a['gAlloc'],'mode':0x0,'sharing':[{'who':a['merchant'],'sharing':'10000'}]}]},'payment':[a['pay1'],a['pay2']],'payment_info':{'for_object':a['o1'],'for_guard':a['gAlloc'],'remark':'order\x20split','index':0x0},'balance':'0'},'0x2::allocation::Allocation<'+T_USDT+'>'),raw(a['o1'],'Order',{'builder':a['buyer'],'agent':[a['agent']],'service':a['svc'],'machine':a['mac'],'progress':a['pr1'],'allocation':a['alloc'],'discount':a['disc'],'dispute':[a['arb1']],'claimed_by':a['claimant'],'required_info':a['proof1'],'items':[{'name':'signature','amount':'1000000','quantity':0x1}],'amount':'1000000','time':0x18bcfe56800}),raw(a['o2'],'Order',{'builder':a['buyer'],'agent':[],'service':a['svc'],'machine':a['mac'],'progress':a['pr2'],'dispute':[],'items':[],'amount':'0','time':0x18bcfe6eea0}),raw(a['pr1'],'Progress',{'machine':a['mac'],'task':a['o1'],'current':'done','namedOperator':[{'name':'ops','operators':[a['member']]}],'context_repositories':[a['repo']],'session':[],'history':[]}),raw(a['pr2'],'Progress',{'machine':a['mac'],'task':a['o2'],'current':'shipping','namedOperator':[],'context_repositories':[]}),raw(a['disc'],'Discount',{'service':a['svc'],'rules':{'amount':'1000','transferable':![],'time_window':0x7,'benchmark':!![]}}),raw(a['pay1'],'Payment',{'record':[{'recipient':a['merchant'],'amount':'990000'},{'recipient':a['supplier'],'amount':'10000'}],'from_object':a['alloc'],'signer':a['buyer'],'info':{'for_object':a['o1'],'for_guard':a['gAlloc'],'remark':'split','index':0x0},'amount':'1000000','time':0x18bcfe58f10},'0x2::payment::Payment<'+T_USDT+'>'),raw(a['pay2'],'Payment',{'record':[{'recipient':a['merchant'],'amount':'50000'}],'from_object':a['tres'],'signer':a['merchant'],'info':{'for_object':a['tres'],'for_guard':a['gWd'],'remark':'withdraw','index':0x0},'amount':'50000','time':0x18bcfe5b620},'0x2::payment::Payment<'+T_USDT+'>'),raw(a['proof1'],'Proof',{'signer':a['signer'],'about':a['o1'],'proof':'0x'+'ab'['repeat'](0x20),'urls':['https://example.test/proof/1'],'timestamps':[0x18bcfe56800]}),raw(a['pp'],'Passport',{'signer':a['buyer'],'guard':[{'guard':a['gVote'],'relies':[a['gSub']],'retained_submission':[]}],'impack':[a['o1']],'result':0x1,'tx_hash':'0xdeadbeef','time':0x18bcfe56800}),raw(a['dem'],'Demand',{'permission':a['permDem'],'guards':[{'guard':a['gQuote'],'service_identifier':0x9}],'rewards':[a['rew']],'um':a['ctDem'],'description':'need\x20three\x20signatures','location':'test-location'}),raw(a['resource'],'Resource',{})];}export function fullServiceTables(){const a=FULL;return new Map([[a['mac']['toLowerCase'](),[nodeRow('start','start',[]),nodeRow('shipping','shipping',[{'prev_node':'start','threshold':0x0,'forwards':[{'name':'f_ship','weight':0x1,'guard':a['gShip']}]}]),nodeRow('done','done',[{'prev_node':'shipping','threshold':0x0,'forwards':[{'name':'f_done','weight':0x1}]}])]],[a['perm']['toLowerCase'](),[permRow(a['merchant'],[0x1,0x2]),permRow(a['member'],[0x2])]],[a['permArb']['toLowerCase'](),[permRow(a['merchant'],[0x1,0x2])]],[a['permRew']['toLowerCase'](),[permRow(a['merchant'],[0x1,0x2])]],[a['permRepo']['toLowerCase'](),[permRow(a['merchant'],[0x1,0x2])]],[a['permT']['toLowerCase'](),[permRow(a['merchant'],[0x1,0x2])]],[a['permDem']['toLowerCase'](),[permRow(a['supplier'],[0x1,0x2])]],[a['dem']['toLowerCase'](),[{'key':a['supplier'],...rowObject('TableItem_DemandPresenter',{'address':a['supplier'],'recommend':'can\x20deliver\x20via\x20sub-service','service':a['svc'],'update_time':0x18bcfe56800,'acceptance_score':0x5a,'feedback':'','feedback_time':0x0})},{'key':a['member'],...rowObject('TableItem_DemandPresenter',{'address':a['member'],'recommend':'bare\x20present','service':null,'update_time':0x18bcfe58f10,'acceptance_score':null,'feedback':'','feedback_time':0x0})}]],[a['tres']['toLowerCase'](),[{'key':a['pay2'],...rowObject('TableItem_TreasuryHistory',{'op':0x0,'signer':a['merchant'],'external_guard':a['gWd'],'amount':'50000','time':0x18bcfe5b620,'store_from_id':null})}]],[a['rew']['toLowerCase'](),[{'key':a['claimant'],...rowObject('TableItem_RewardRecord',{'total':'1000','amount':[{'guard':a['gClaim'],'amount':'1000','time':0x18bcfe5dd30,'store_from_id':null}]})}]],[a['repo']['toLowerCase'](),[{'key':'01',...rowObject('TableItem_RepositoryData',{'id':a['o1'],'name':'delivery-proof','data':'0x'+'cd'['repeat'](0x20)})}]]]);}export function fullServiceKeyedFields(){const a=FULL,b=new Map();return b['set']('0xaa8',new Map([[a['buyer'],{'items':[{'role':0x1,'order':a['o1'],'time':0x18bcfe56800},{'role':0x1,'order':a['o2'],'time':0x18bcfe6eea0}]}]])),b['set']('0xaa9',new Map([[a['member'],{'items':[{'contact':a['ctShop'],'time':0x18bcfe56800}]}]])),b['set']('0xaaa',new Map([[a['svc'],{'votes':[{'who':a['voter1'],'like':!![],'dislike':![],'favor':!![]},{'who':a['voter2'],'like':![],'dislike':!![],'favor':![]}]}]])),b['set']('0xaad',new Map([[a['merchant'],{'items':[{'role':0x1,'permission':a['perm'],'time':0x1},{'role':0x1,'permission':a['permArb'],'time':0x2}]}]])),b['set']('0xaae',new Map([[a['perm'],{'items':[{'who':a['svc'],'time':0x1}]}],[a['permArb'],{'items':[{'who':a['arbsvc'],'time':0x1}]}],[a['permT'],{'items':[{'who':a['tres'],'time':0x1}]}]])),b['set']('0xaaf',new Map([[a['svc'],{'items':[{'who':a['o1'],'time':0x18bcfe56800},{'who':a['o2'],'time':0x18bcfe6eea0}]}]])),b['set']('0xaab',new Map([[a['supplier'],{'description':'Acme\x20logistics\x20co.','time':0x18bcfe57b88,'referrer':a['merchant'],'mark_object':a['resource'],'records':[{'name':'region','value_type':0x1,'value':'cn-east'}]}],[a['member'],{'description':'warehouse\x20member','time':0x18bcfe57f70,'referrer':null,'resource':null,'records':[]}]])),b;}export function fullServiceState(){return{'objects':new Map(fullServiceObjects()['map'](a=>[a['object']['toLowerCase'](),a])),'keyedFields':fullServiceKeyedFields(),'tables':fullServiceTables(),'events':new Map()};}export const GAP={'merchant':eoa(0x14),'svc':obj(0x4,0x6e),'perm':obj(0x0,0x97),'macMissing':obj(0x5,0x6f),'bareOrder':obj(0x6,0x79)};export function gapServiceState(){const a=GAP,b=[raw(a['svc'],'Service',{'permission':a['perm'],'machine':a['macMissing'],'arbitrations':[],'rewards':[],'repositories':[],'order_allocators':{'allocators':[]},'bPublished':!![],'bPaused':![],'sales':'','description':'','location':''},'0x2::service::Service<'+T_USDT+'>'),raw(a['perm'],'Permission',{'admin':[a['merchant']],'owner':a['merchant']}),raw(a['bareOrder'],'Order',{'builder':a['merchant'],'agent':[],'service':a['svc'],'dispute':[],'items':[],'amount':'0'})],c=new Map();return c['set']('0xaaf',new Map([[a['svc'],{'items':[{'who':a['bareOrder'],'time':0x18bcfe56800}]}]])),{'objects':new Map(b['map'](d=>[d['object']['toLowerCase'](),d])),'keyedFields':c,'tables':new Map(),'events':new Map()};}export const TRUNC_EXTRA_ORDERS=0xfa;export function truncatedServiceState(){const a=fullServiceState(),b=FULL,c=[],d=[{'who':b['o1'],'time':0x1},{'who':b['o2'],'time':0x2}],e=[];for(let f=0x0;f<TRUNC_EXTRA_ORDERS;f+=0x1){const g=obj(0x6,0x3e8+f);c['push'](raw(g,'Order',{'builder':b['buyer2'],'agent':[],'service':b['svc'],'dispute':[],'items':[],'amount':'1000','time':0x18bcfe56800+f})),d['push']({'who':g,'time':0x18bcfe56800+f}),e['push']({'role':0x1,'order':g,'time':0x18bcfe56800+f});}for(const h of c)a['objects']['set'](h['object']['toLowerCase'](),h);return a['keyedFields']['set']('0xaaf',new Map([[b['svc'],{'items':d}]])),a['keyedFields']['set']('0xaa8',new Map([[b['buyer2'],{'items':e}]])),a;}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ import{describe,expect,it}from'vitest';import{ENTRYPOINT}from'@wowok/wowok';import{FakeDataPlane}from'./dataplane.js';import{expandTopology}from'./expand.js';import{FULL,GAP,TRUNC_EXTRA_ORDERS,fullServiceState,gapServiceState,truncatedServiceState}from'./fixtures.js';const TABLE_EDGES={'tableEdges':['machine.node','permission.entity','demand.presenter']};describe('fixtures\x20—\x20fully\x20hooked\x20shop',()=>{it('expands\x20service→machine→wfnode→guard(relies)\x20and\x20the\x20arbitration/order/payment\x20subtree',async()=>{const a=new FakeDataPlane(fullServiceState()),b=await expandTopology(a,{'network':ENTRYPOINT['Mainnet'],'seed':FULL['svc'],'edges':TABLE_EDGES}),c=new Set(b['edges']['map'](f=>f['schema']));for(const f of['service.machine','service.buy_guard','service.arbitration','service.reward','service.repository','service.um','service.order_allocator_guard','machine.permission','machine.consensus_repository','machine.um','machine.node','wf.transition','wf.forward_guard','guard.relies','arbitration.permission','arbitration.voting_guard','arbitration.usage_guard','arb.order','arb.voter','reward.guard','repository.reward','service.order','order.progress','order.allocation','order.dispute','allocation.guard','permission.admin','permission.entity']){expect(c['has'](f),'missing\x20edge\x20'+f)['toBe'](!![]);}const d=b['edges']['filter'](g=>g['schema']==='guard.relies');expect(d['some'](g=>g['from']===FULL['gShip']&&g['to']===FULL['gRel']))['toBe'](!![]),expect(d['some'](g=>g['from']===FULL['gRel']&&g['to']===FULL['gDeep']))['toBe'](![]),expect(b['nodes']['has'](FULL['gDeep']),'second-hop\x20relied\x20guard\x20must\x20not\x20be\x20fetched')['toBe'](![]);const e=b['truncations']['filter'](g=>g['reason']==='schema_hops');expect(e)['toEqual']([{'nodeId':FULL['gRel'],'schema':'guard.relies','observed':0x1,'limit':0x1,'reason':'schema_hops'}]),expect(b['gaps'])['toEqual']([]);});}),describe('fixtures\x20—\x20shell\x20merchant\x20with\x20gaps',()=>{it('distinguishes\x20configured-empty\x20lists\x20from\x20a\x20dangling\x20machine\x20fetch',async()=>{const a=new FakeDataPlane(gapServiceState()),b=await expandTopology(a,{'network':ENTRYPOINT['Mainnet'],'seed':GAP['svc']});expect(b['nodes']['get'](GAP['macMissing'])?.['state']??'absent')['not']['toBe']('ok'),expect(b['gaps'])['toContain'](GAP['macMissing']),expect(b['edges']['some'](d=>d['schema']==='service.order'&&d['to']===GAP['bareOrder']))['toBe'](!![]);const c=new Set(b['edges']['map'](d=>d['schema']));for(const d of['service.arbitration','service.reward','service.repository']){expect(c['has'](d))['toBe'](![]);}});}),describe('fixtures\x20—\x20window\x20truncation',()=>{it('caps\x20service\x20order\x20fanout\x20under\x20the\x20default\x20budget\x20and\x20records\x20truncation',async()=>{const a=new FakeDataPlane(truncatedServiceState()),b=await expandTopology(a,{'network':ENTRYPOINT['Mainnet'],'seed':FULL['svc']}),c=b['edges']['filter'](d=>d['schema']==='service.order');expect(c['length'])['toBeLessThan'](0x2+TRUNC_EXTRA_ORDERS),expect(b['truncations']['some'](d=>d['schema']==='service.order'))['toBe'](!![]),expect(c['every'](d=>d['truncated']))['toBe'](!![]);}),it('caps\x20buyer\x20order\x20fanout\x20(eoa.order=100)\x20when\x20seeded\x20from\x20the\x20EOA',async()=>{const a=new FakeDataPlane(truncatedServiceState()),b=await expandTopology(a,{'network':ENTRYPOINT['Mainnet'],'seed':FULL['buyer2'],'budget':{'maxFanoutPerNode':0xc8}}),c=b['edges']['filter'](d=>d['schema']==='eoa.order');expect(c['length'])['toBe'](0x64),expect(b['truncations']['some'](d=>d['schema']==='eoa.order'))['toBe'](!![]);});});
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ import{mkdtempSync,writeFileSync}from'node:fs';import{tmpdir}from'node:os';import{join}from'node:path';import{afterAll,beforeAll,describe,expect,it}from'vitest';import{beginPolicyRun,endPolicyRun,factoryRulePack,getJudgmentDoc,judgmentStatus}from'../../config/judgment.js';import{evaluateRuleBook}from'../../config/rule-engine.js';import{graphFindingPolicy}from'./policy.js';const CONFIG_DIR=mkdtempSync(join(tmpdir(),'wowok-graph-policy-'));process['env']['WOWOK_CONFIG_DIR']=CONFIG_DIR;const GRAPH_IDS=['R1','R2','R3','R4','R6','R7-treasury','R7-reward','A1','A2','A3','G2','AC1','AC2','AC3','AC4'];beforeAll(()=>{beginPolicyRun();}),afterAll(()=>{endPolicyRun();}),describe('graph\x20finding\x20policy\x20—\x20factory\x20parity',()=>{it('factory\x20pack\x20carries\x20exactly\x20the\x20kernel\x20emission\x20ids',()=>{const a=factoryRulePack('graph');expect(a)['not']['toBeNull'](),expect(a['rules']['map'](b=>b['rule_id'])['sort']())['toEqual']([...GRAPH_IDS]['sort']());}),it('static\x20literals\x20resolve\x20to\x20the\x20kernel\x20severities',()=>{expect(graphFindingPolicy('R1',{'eoa':'0xa'})['severity'])['toBe']('high'),expect(graphFindingPolicy('R4',{'only':'name:ops'})['severity'])['toBe']('medium'),expect(graphFindingPolicy('R6',{})['severity'])['toBe']('medium'),expect(graphFindingPolicy('R7-treasury',{})['severity'])['toBe']('critical'),expect(graphFindingPolicy('A1',{})['severity'])['toBe']('medium'),expect(graphFindingPolicy('A2',{})['severity'])['toBe']('low'),expect(graphFindingPolicy('A3',{})['severity'])['toBe']('medium'),expect(graphFindingPolicy('G2',{})['severity'])['toBe']('low'),expect(graphFindingPolicy('AC1',{})['severity'])['toBe']('high');}),it('dynamic\x20fact:\x20levels\x20resolve\x20through\x20the\x20extractor\x20facts',()=>{expect(graphFindingPolicy('R2',{'r2_level':'high'})['severity'])['toBe']('high'),expect(graphFindingPolicy('R2',{'r2_level':'medium'})['severity'])['toBe']('medium'),expect(graphFindingPolicy('R3',{'r3_level':'medium'})['severity'])['toBe']('medium'),expect(graphFindingPolicy('R3',{'r3_level':'low'})['severity'])['toBe']('low');for(const a of['high','medium','low']){expect(graphFindingPolicy('AC2',{'ac_signal_level':a})['severity'])['toBe'](a),expect(graphFindingPolicy('AC3',{'ac_signal_level':a})['severity'])['toBe'](a),expect(graphFindingPolicy('AC4',{'ac_shell_code':'shell_no_machine','ac_signal_level':a})['severity'])['toBe'](a);}}),it('R7-reward\x20mirrors\x20the\x20viability\x20gate:\x20viable\x20→\x20critical\x20confirmed',()=>{const a=graphFindingPolicy('R7-reward',{'r7_slot_viability':'viable','r7_slot_audit':'#0\x20viable\x20—\x20no\x20binding'});expect(a['severity'])['toBe']('critical'),expect(a['exposure']?.['verdict'])['toBe']('confirmed'),expect(a['exposure']?.['gainPaths'][0x0]?.['gate'])['toContain']('#0\x20viable\x20—\x20no\x20binding'),expect(a['exposure']?.['gainPaths'][0x0]?.['viability'])['toBe']('viable');}),it('R7-reward\x20all-blocked\x20downgrades\x20to\x20info\x20with\x20baseSeverity\x20kept',()=>{const a=graphFindingPolicy('R7-reward',{'r7_slot_viability':'blocked','r7_slot_audit':'#0\x20blocked\x20—\x20Entity\x20recipient'});expect(a['severity'])['toBe']('info'),expect(a['exposure']?.['verdict'])['toBe']('downgraded'),expect(a['exposure']?.['baseSeverity'])['toBe']('critical');}),it('R7-reward\x20undecided\x20keeps\x20critical\x20as\x20pending-disclosure',()=>{const a=graphFindingPolicy('R7-reward',{'r7_slot_viability':'unverifiable','r7_slot_audit':'#0\x20unverifiable\x20—\x20guard\x20not\x20fetched'});expect(a['severity'])['toBe']('critical'),expect(a['exposure']?.['verdict'])['toBe']('pending-disclosure');}),it('AC4\x20selects\x20the\x20attribution\x20case\x20by\x20shell\x20code',()=>{const a=graphFindingPolicy('AC4',{'ac_shell_code':'shell_no_arbitration','ac_signal_level':'high'});expect(a['exposure']?.['lossParties']['map'](d=>d['role']))['toEqual'](['buyer']),expect(a['exposure']?.['gainPaths'][0x0]?.['role'])['toBe']('merchant');const b=graphFindingPolicy('AC4',{'ac_shell_code':'shell_no_machine','ac_signal_level':'low'});expect(b['exposure']?.['verdict'])['toBe']('confirmed');const c=graphFindingPolicy('AC4',{'ac_shell_code':'other','ac_signal_level':'high'});expect(c['enabled'])['toBe'](!![]),expect(c['severity'])['toBeNull']();}),it('an\x20emission\x20id\x20outside\x20the\x20pack\x20leaves\x20the\x20kernel\x20default\x20intact',()=>{expect(graphFindingPolicy('R5',{}))['toEqual']({'enabled':!![],'severity':null});});}),describe('graph\x20finding\x20policy\x20—\x20pack-driven\x20behavior\x20change',()=>{it('a\x20disabled\x20rule\x20id\x20suppresses\x20the\x20emission\x20with\x20a\x20trace',()=>{const {findings:a,disabled_traces:b}=evaluateRuleBook([{'rule_id':'R6','dimension':'structural','cases':[{'when':{'field':'kernel_fired','op':'truthy'},'level':'medium','title':'t','description':'d'}],'enabled':![]}],{'kernel_fired':!![]});expect(a)['toHaveLength'](0x0),expect(b)['toEqual'](['R6']);}),it('a\x20user\x20fact:\x20reference\x20outside\x20the\x20factory\x20vocabulary\x20is\x20rejected',async()=>{const a={'version':0x1,'rules':{'domains':{'graph':{'rules':[{'rule_id':'R1','cases':[{'when':{'field':'kernel_fired','op':'truthy'},'level':'fact:not_a_kernel_fact','title':'t','description':'d'}]}]}}}};writeFileSync(join(CONFIG_DIR,'judgment.json'),JSON['stringify'](a),'utf-8');const b=getJudgmentDoc();expect(factoryRulePack('graph'))['not']['toBeNull']();const c=judgmentStatus();expect(c['user_doc_loaded'])['toBe'](![]),expect(c['last_reload_error'])['toContain']('fact:not_a_kernel_fact'),expect(c['last_reload_error'])['toContain']('R1'),expect(graphFindingPolicy('R1',{'eoa':'0xa'})['severity'])['toBe']('high'),void b;});});
@@ -7,11 +7,23 @@ export type { FakePlaneState } from "./dataplane.js";
7
7
  export { SdkDataPlane } from "./sdk-dataplane.js";
8
8
  export * from "./sdk-batch.js";
9
9
  export { expandTopology, orderCompletionInGraph } from "./expand.js";
10
- export { TOPOLOGY_INTENTS, INTENT_PRESETS, resolveExpansionStrategy, isTopologyIntent, normalizeTopologyFocusPref, type TopologyIntent, type IntentPreset, type StrategyFragment, type ExpansionStrategy, type StrategyResolutionInput, type ExplicitExpansionParams, type TopologyFocusPref, } from "./strategy.js";
10
+ export { TOPOLOGY_INTENTS, INTENT_PRESETS, EVALUATION_SERVICE_INTENTS, EVALUATION_SERVICE_BUDGET, EVALUATION_SERVICE_EDGES, resolveExpansionStrategy, withEvaluationBundle, isTopologyIntent, normalizeTopologyFocusPref, normalizeSchemaHops, type TopologyIntent, type IntentPreset, type StrategyFragment, type ExpansionStrategy, type StrategyResolutionInput, type ExplicitExpansionParams, type TopologyFocusPref, } from "./strategy.js";
11
11
  export { detectFakeOrders, detectFakeReviews, detectShellMerchant, reputationTradeNote, assessAntiCheat, } from "./anti-cheat.js";
12
12
  export type { AntiCheatSeverity, AntiCheatSignal, OrderEvidence, ReviewEvidence, MerchantEvidence, } from "./anti-cheat.js";
13
13
  export { buildViewport, edgesOut, edgesInc, nodeOf } from "./viewport.js";
14
14
  export { buildRoleInterest, toCommercialRole, viewerRoleOf, type RoleInterestResult, } from "./interest.js";
15
15
  export { buildControlIndex } from "./analyze.js";
16
+ export { projectExploration } from "./exploration.js";
17
+ export type { ExplorationBlock, ExplorationContext, OpenQuestion, OpenQuestionKind, } from "./exploration.js";
18
+ export { synthesizeVerdicts } from "./synthesis.js";
19
+ export type { RoleVerdict, SynthesisBlock, SynthesisInput, SynthesisPosture, } from "./synthesis.js";
20
+ export { applyExposureGate, gainPath, lossParty, EXPOSURE_ROLES } from "./exposure.js";
21
+ export type { ExposureParty, ExposureVerdict, FindingExposure, GainPath, GainPathViability, } from "./exposure.js";
22
+ export { projectEvaluationFacts } from "./facts.js";
23
+ export { projectFacets } from "./facet-projection.js";
24
+ export type { FacetState, FacetMoney, FacetAmount, FacetSignal, FacetScoreRef, FacetGraphRef, FacetGraph, FacetResult, FacetsBlock, FacetProjectionProfile, FacetWorkflowShape, ProjectFacetsInput, } from "./facet-projection.js";
25
+ export type { FactState, EvaluationDimension, FactProvenance, Fact, CoverageSlot, EntityProfileAttributes, GraphEvaluationFacts, ArbitrationBinding, VoteCounts, OrderWindowStats, WorkflowShape, FundPosition, FundExposure, TransparencyProfile, RiskFindingRefs, } from "./facts.js";
16
26
  export { projectRelationshipFacts } from "./project-relationship.js";
17
- export { DEFAULT_ANALYZERS, registerAnalyzer, getAnalyzer, listAnalyzers, runAnalyzers, adaptNodeAnalyzer, runNodeAnalyzers, pathConfidence, type NodeRuleBinding, type NodeRuleOutcome, } from "./analyze.js";
27
+ export { DEFAULT_ANALYZERS, registerAnalyzer, getAnalyzer, listAnalyzers, runAnalyzers, adaptNodeAnalyzer, runNodeAnalyzers, pathConfidence, findingWhere, findingWhereResolved, type NodeRuleBinding, type NodeRuleOutcome, } from "./analyze.js";
28
+ export { buildNameIndex, createNameResolver, humanizeStoredName, humanizeTypeTag, isWfNodeId, shortAddress, wfMachineOf, wfNodeName, type NameIndex, type NameResolver, type ResolvedName, } from "./names.js";
29
+ export { buildProposalGraph, PROPOSAL_GAP_ANALYZER, type ProposalGraphOptions } from "./proposal-graph.js";
@@ -1 +1 @@
1
- export*from'./types.js';export*from'./edge-schema.js';export*from'./extract.js';export*from'./order-status.js';export{MAX_OBJECTS_PER_QUERY,DEFAULT_BUDGET,mergeBudget,chunk50,mapPool,FakeDataPlane}from'./dataplane.js';export{SdkDataPlane}from'./sdk-dataplane.js';export*from'./sdk-batch.js';export{expandTopology,orderCompletionInGraph}from'./expand.js';export{TOPOLOGY_INTENTS,INTENT_PRESETS,resolveExpansionStrategy,isTopologyIntent,normalizeTopologyFocusPref}from'./strategy.js';export{detectFakeOrders,detectFakeReviews,detectShellMerchant,reputationTradeNote,assessAntiCheat}from'./anti-cheat.js';export{buildViewport,edgesOut,edgesInc,nodeOf}from'./viewport.js';export{buildRoleInterest,toCommercialRole,viewerRoleOf}from'./interest.js';export{buildControlIndex}from'./analyze.js';export{projectRelationshipFacts}from'./project-relationship.js';export{DEFAULT_ANALYZERS,registerAnalyzer,getAnalyzer,listAnalyzers,runAnalyzers,adaptNodeAnalyzer,runNodeAnalyzers,pathConfidence}from'./analyze.js';
1
+ export*from'./types.js';export*from'./edge-schema.js';export*from'./extract.js';export*from'./order-status.js';export{MAX_OBJECTS_PER_QUERY,DEFAULT_BUDGET,mergeBudget,chunk50,mapPool,FakeDataPlane}from'./dataplane.js';export{SdkDataPlane}from'./sdk-dataplane.js';export*from'./sdk-batch.js';export{expandTopology,orderCompletionInGraph}from'./expand.js';export{TOPOLOGY_INTENTS,INTENT_PRESETS,EVALUATION_SERVICE_INTENTS,EVALUATION_SERVICE_BUDGET,EVALUATION_SERVICE_EDGES,resolveExpansionStrategy,withEvaluationBundle,isTopologyIntent,normalizeTopologyFocusPref,normalizeSchemaHops}from'./strategy.js';export{detectFakeOrders,detectFakeReviews,detectShellMerchant,reputationTradeNote,assessAntiCheat}from'./anti-cheat.js';export{buildViewport,edgesOut,edgesInc,nodeOf}from'./viewport.js';export{buildRoleInterest,toCommercialRole,viewerRoleOf}from'./interest.js';export{buildControlIndex}from'./analyze.js';export{projectExploration}from'./exploration.js';export{synthesizeVerdicts}from'./synthesis.js';export{applyExposureGate,gainPath,lossParty,EXPOSURE_ROLES}from'./exposure.js';export{projectEvaluationFacts}from'./facts.js';export{projectFacets}from'./facet-projection.js';export{projectRelationshipFacts}from'./project-relationship.js';export{DEFAULT_ANALYZERS,registerAnalyzer,getAnalyzer,listAnalyzers,runAnalyzers,adaptNodeAnalyzer,runNodeAnalyzers,pathConfidence,findingWhere,findingWhereResolved}from'./analyze.js';export{buildNameIndex,createNameResolver,humanizeStoredName,humanizeTypeTag,isWfNodeId,shortAddress,wfMachineOf,wfNodeName}from'./names.js';export{buildProposalGraph,PROPOSAL_GAP_ANALYZER}from'./proposal-graph.js';
@@ -1 +1 @@
1
- import{COMMERCIAL_ROLES}from'../../role/types.js';import{resolveInterests,ROLE_INTERESTS}from'../../evaluation/game-strategy.js';import{evaluateNodeGame}from'../../evaluation/node-game.js';import{evaluateArbGame}from'../../evaluation/arbitration-game.js';import{consequenceOf,recommendedCallForExecutionPath}from'../../participation/radar-core.js';import{buildViewport}from'./viewport.js';import{buildControlIndex,pathConfidence,runAnalyzers}from'./analyze.js';import{orderCompletionInGraph}from'./expand.js';const VIEWER_OF={'customer':'buyer','prospect':'buyer','demander':'demander','merchant':'merchant','collaborator':'collaborator','supplier':'supplier','arbitrator':'arbitrator','neutral':'neutral','system':'system'},COMMERCIAL_ROLE_SET=new Set(COMMERCIAL_ROLES);export function toCommercialRole(a){if(a==='buyer')return'customer';return COMMERCIAL_ROLE_SET['has'](a)?a:'neutral';}export function viewerRoleOf(a){return VIEWER_OF[a];}function root(a){const b=a?.['raw'],c=b?.['data']??b;return c&&typeof c==='object'?c:undefined;}function str(a){return typeof a==='string'&&a!=='0x0'?a:undefined;}function objNode(a,b){const c=a['graph']['nodes']['get'](b['toLowerCase']());return c&&a['visibleNodes']['has'](c['id'])&&c['kind']==='object'&&c['raw']?c:undefined;}function visible(a,b){return a['visibleEdges']['filter'](c=>c['schema']===b);}function outEdges(a,b,c){const d=b['toLowerCase']();return a['visibleEdges']['filter'](f=>f['schema']===c&&f['from']===d);}function incEdges(a,b,c){const d=b['toLowerCase']();return a['visibleEdges']['filter'](f=>f['schema']===c&&f['to']===d);}function wfMachineOf(a){const b=a['indexOf']('::node::');return b>=0x0?a['slice'](0x0,b):'';}function wfNodeName(a){const b=a['indexOf']('::node::');return b>=0x0?a['slice'](b+'::node::'['length']):a;}function heldPermissionIndices(a,c){const d=new Map();for(const f of outEdges(a,c,'eoa.permission')){const g=new Set();d['set'](f['to'],g);for(const h of outEdges(a,f['to'],'permission.entity')){for(const i of Array['isArray'](h['payload']?.['permIndices'])?h['payload']['permIndices']:[]){const j=Number(i);if(Number['isInteger'](j))g['add'](j);}}}return d;}const MAX_STAKES=0x10;function orderStake(a,b,c,e){const f=objNode(a,b),g=root(f)??{},h=orderCompletionInGraph(a['graph'],b);return{'object':b['toLowerCase'](),'object_type':f?.['objectType']??'Order','positions':c,...str(g['amount'])?{'amount':String(g['amount'])}:{},...f?.['coinType']?{'coin_type':f['coinType']}:{},...h['status']!=='unknown'||f?{'state':h['status']}:{},'evidence':e};}function arbState(a,b){return str(root(objNode(a,b))?.['status']);}function collectStakes(a,b,c,d){const f=new Map(),g=(j,k,l,m)=>{const n=j['toLowerCase'](),o=f['get'](n);if(o){if(!o['positions']['includes'](k))o['positions']['push'](k);for(const p of l)if(!o['evidence']['includes'](p))o['evidence']['push'](p);return;}if(f['size']>=MAX_STAKES)return;f['set'](n,m([k],l));},h=new Set();for(const j of outEdges(a,b,'eoa.order'))h['add'](j['to']);for(const k of incEdges(a,b,'order.builder'))h['add'](k['from']);for(const l of h){g(l,'buyer',['eoa.order','order.builder'],(m,n)=>orderStake(a,l,m,n));}const i=new Set(d['keys']());for(const m of outEdges(a,b,'eoa.permission'))i['add'](m['to']);for(const [n,o]of c['objectsByEoa']){if(n!==b)continue;for(const p of o){const q=a['graph']['nodes']['get'](p);q?.['objectType']==='Demand'?g(p,'demand_owner',['eoa.permission','demand.permission'],(r,s)=>{const t=outEdges(a,p,'demand.presenter')['length'];return{'object':p['toLowerCase'](),'object_type':'Demand','positions':r,'state':t+'\x20presenter(s)','evidence':s};}):g(p,'controller',['eoa.permission','permission.core_binding'],(r,s)=>({'object':p['toLowerCase'](),'object_type':q?.['objectType']??'object','positions':r,'evidence':s}));}}for(const r of visible(a,'demand.permission')){if(!i['has'](r['to']))continue;g(r['from'],'demand_owner',['demand.permission'],(s,t)=>{const u=outEdges(a,r['from'],'demand.presenter')['length'];return{'object':r['from']['toLowerCase'](),'object_type':'Demand','positions':s,'state':u+'\x20presenter(s)','evidence':t};});}for(const [s,t]of c['objectsByEoa']){if(s!==b)continue;for(const u of t){if(a['graph']['nodes']['get'](u)?.['objectType']!=='Service')continue;for(const w of outEdges(a,u,'service.order')){g(w['to'],'seller',['service.order'],(x,y)=>orderStake(a,w['to'],x,y));}}}for(const x of incEdges(a,b,'demand.presenter')){g(x['from'],'presenter',['demand.presenter'],(y,z)=>({'object':x['from']['toLowerCase'](),'object_type':a['graph']['nodes']['get'](x['from'])?.['objectType']??'Demand','positions':y,'evidence':z}));}for(const y of incEdges(a,b,'arb.voter')){g(y['from'],'voter',['arb.voter'],(z,A)=>{const B=arbState(a,y['from']);return{'object':y['from']['toLowerCase'](),'object_type':'Arb','positions':z,...B?{'state':B}:{},'evidence':A};});}for(const [z,A]of c['objectsByEoa']){if(z!==b)continue;for(const B of A){if(a['graph']['nodes']['get'](B)?.['objectType']!=='Arbitration')continue;for(const C of incEdges(a,B,'arb.arbitration_service')){g(C['from'],'arbitration_owner',['arb.arbitration_service'],(D,E)=>{const F=arbState(a,C['from']);return{'object':C['from']['toLowerCase'](),'object_type':'Arb','positions':D,...F?{'state':F}:{},'evidence':E};});}}}for(const [D,E]of f){if(a['graph']['nodes']['get'](D)?.['objectType']!=='Order')continue;if(outEdges(a,D,'order.dispute')['length']>0x0&&!E['positions']['includes']('disputant')){E['positions']['push']('disputant');if(!E['evidence']['includes']('order.dispute'))E['evidence']['push']('order.dispute');}}return[...f['values']()];}const MAX_ACTION_GROUPS=0x8;function forwardsAt(a,b,c){const d=b['toLowerCase']()+'::node::',f=[];for(const g of a['visibleEdges']){if(g['schema']!=='wf.transition'||!g['from']['startsWith'](d))continue;if(wfNodeName(g['from'])!==c)continue;f['push']({'edge':g,'name':String(g['payload']?.['forward']??g['payload']?.['prevNode']+'→'+g['payload']?.['node']),'toNode':String(g['payload']?.['node']??wfNodeName(g['to'])),'permissionIndex':typeof g['payload']?.['permissionIndex']==='number'?g['payload']['permissionIndex']:null,'namedOperator':typeof g['payload']?.['namedOperator']==='string'?g['payload']['namedOperator']:null,'guard':str(g['payload']?.['guard']),'weight':typeof g['payload']?.['weight']==='number'?g['payload']['weight']:undefined,'threshold':typeof g['payload']?.['threshold']==='number'?g['payload']['threshold']:undefined});}return f;}function executionPathOf(a,b,c){if(a['permissionIndex']!=null)return c['has'](a['permissionIndex'])?'permission':'not_available';if(a['namedOperator']==='')return b?'order_holder':'not_available';return'not_available';}function allocationSummaryOf(a,b,c,e){const f=outEdges(a,b,'order.allocation')[0x0]?.['to'];if(!f)return undefined;const g=root(objNode(a,f)),h=Array['isArray'](g?.['allocators'])?g['allocators']:[];if(h['length']===0x0)return undefined;let i=0x0,j=0x0,k=0x0,l=0x0;const m=o=>{if(typeof o==='string')return o['startsWith']('0x')||o['startsWith']('00')?o['toLowerCase']():undefined;if(o&&typeof o==='object'){const p=o;if('Entity'in p)return typeof p['Entity']==='string'?p['Entity']['toLowerCase']():undefined;}return undefined;},n=o=>(o&&typeof o==='object'&&'GuardIdentifier'in o)===!![];for(const o of h){const p=o??{};for(const q of Array['isArray'](p['sharing'])?p['sharing']:[]){const r=q??{};i++;const t=m(r['who']);if(t===c['toLowerCase']())k++;else{if(e&&t===e['toLowerCase']())l++;else{if(r['who']==='Signer')l++;else{if(n(r['who']))j++;}}}}}if(i===0x0)return undefined;return{'recipient_slots':i,'guard_gated_slots':j,'direct_to_me_slots':k,'to_payer_slots':l};}function actionGroupFor(a,b,c,e,g,h,i){const j=objNode(a,g),k=root(j)??{},l=str(k['progress']),m=str(k['machine'])??wfMachineOf(l??''),n=l?root(objNode(a,l)):undefined,o=str(n?.['current'])??'';if(!m||!o||!l)return undefined;const p=forwardsAt(a,m,o);if(p['length']===0x0)return undefined;const q=outEdges(a,g,'order.service')[0x0]?.['to'],r=q?root(objNode(a,q)):undefined,s=outEdges(a,g,'order.builder')[0x0]?.['to'],t=[],u=[],w=new Map(),x=[];for(const A of p){const B=executionPathOf(A,h,i);if(B==='not_available'){const D=A['permissionIndex']!=null?'requires\x20permission\x20index\x20'+A['permissionIndex']+'\x20(not\x20held\x20by\x20the\x20observer\x20in\x20this\x20view)':A['namedOperator']!=null&&A['namedOperator']!==''?'named\x20operator\x20\x27'+A['namedOperator']+'\x27\x20resolves\x20off-chain\x20(LocalMark)\x20—\x20not\x20decidable\x20from\x20graph\x20evidence':'unbound\x20forward\x20—\x20only\x20a\x20guard\x20or\x20the\x20payer\x27s\x20transaction\x20can\x20advance\x20it';u['push']({'forward':A['name'],'reason':D});const E=A['permissionIndex']!=null?'permission\x20index\x20'+A['permissionIndex']:A['namedOperator']!=null&&A['namedOperator']!==''?'named\x20operator\x20\x27'+A['namedOperator']+'\x27':'guard/payer-direct\x20only',F=w['get'](E)??[];F['push'](A['name']),w['set'](E,F);continue;}const C=recommendedCallForExecutionPath(B,A['guard']!=null);t['push']({'name':A['name'],'to_node':A['toNode'],'execution_path':B,...A['guard']?{'guard':A['guard']}:{},'consequence':consequenceOf(A['toNode'],undefined),...A['weight']!==undefined?{'weight':A['weight']}:{}});if(C)x['push']({'forward':A['name'],'call':C});}const y=Math['max'](0x1,...p['map'](G=>G['threshold']??0x1)),z=evaluateNodeGame({'current_node':o,'perspective':c,...e?.['risk_appetite']?{'appetite':e['risk_appetite']}:{},...y>0x1?{'threshold':y}:{},'allocation':allocationSummaryOf(a,g,b,s),...e?.['requirements']?{'requirements':e['requirements']}:{},...str(k['amount'])?{'order_amount':String(k['amount'])}:{},...r&&str(r['compensation_fund'])?{'compensation_fund':String(r['compensation_fund'])}:{},'operable':t,'waiting_on':[...w['entries']()]['map'](([G,H])=>({'role':G,'forwards':H}))});return{'order':g['toLowerCase'](),'machine':m['toLowerCase'](),'current_node':o,'advice':z,'recommended_calls':x,'blocked_forwards':u};}function collectActions(a,c,d,e,f,g){const h=new Set();for(const j of g['values']())for(const k of j)h['add'](k);const i=[];for(const l of f){if(i['length']>=MAX_ACTION_GROUPS)break;if(a['graph']['nodes']['get'](l['object'])?.['objectType']!=='Order')continue;const m=l['positions']['includes']('buyer'),n=actionGroupFor(a,c,d,e,l['object'],m,h);n&&(n['advice']['actions']['length']>0x0||n['blocked_forwards']['length']>0x0)&&i['push'](n);}return i;}function arbPerspectiveOf(a,b,c){if(c['positions']['includes']('voter')||c['positions']['includes']('arbitration_owner'))return'arbitrator';if(c['positions']['includes']('buyer')||c['positions']['includes']('disputant'))return'customer';if(c['positions']['includes']('seller'))return'merchant';return undefined;}function collectArbActions(a,b,c,d){const e=[];for(const f of d){if(a['graph']['nodes']['get'](f['object'])?.['objectType']!=='Arb')continue;const g=arbPerspectiveOf(a,b,f),h=arbState(a,f['object']);if(!g||!h)continue;e['push'](evaluateArbGame(h,g,{...c?.['risk_appetite']?{'risk_appetite':c['risk_appetite']}:{},...c?.['requirements']?{'requirements':c['requirements']}:{}}));}return e;}const SEVERITY_RANK={'info':0x0,'low':0x1,'medium':0x2,'high':0x3},MAX_COUNTERPARTIES=0x8;function collectCounterparties(a,b,c,d,e,f){const g=resolveInterests(c,d),h=[],i=(j,k,l)=>{if(h['length']>=MAX_COUNTERPARTIES)return;const m=ROLE_INTERESTS[k],n=[...g['prefer']['filter'](r=>m['avoid']['includes'](r)),...g['avoid']['filter'](r=>m['prefer']['includes'](r))],o=g['prefer']['filter'](r=>m['prefer']['includes'](r)),p=n['length']>0x0?'conflict':o['length']>0x0?'aligned':'neutral',q=p==='conflict'?'Structural\x20conflict\x20of\x20interest:\x20you\x20prefer\x20'+(g['prefer']['filter'](r=>m['avoid']['includes'](r))['join'](',\x20')||'(none)')+',\x20which\x20'+k+'\x20treats\x20as\x20a\x20risk;\x20they\x20pursue\x20'+(m['prefer']['join'](',\x20')||'(none)')+'.':p==='aligned'?'Aligned\x20interests:\x20both\x20sides\x20prefer\x20'+o['join'](',\x20')+'.':'No\x20direct\x20interest\x20overlap\x20('+k+'\x20prefers\x20'+(m['prefer']['join'](',\x20')||'none')+'\x20and\x20avoids\x20'+(m['avoid']['join'](',\x20')||'none')+').';h['push']({'object':j['toLowerCase'](),'counter_role':k,'who':l,'their_prefer':m['prefer'],'their_avoid':m['avoid'],'alignment':p,'note':q});};for(const j of e){if(a['graph']['nodes']['get'](j['object'])?.['objectType']!=='Order')continue;const k=outEdges(a,j['object'],'order.service')[0x0]?.['to'],l=k?[...f['controllers']['get'](k['toLowerCase']())??[]]:[];i(j['object'],'merchant',l);const m=outEdges(a,j['object'],'order.builder')[0x0]?.['to'];if(m&&m!==b['toLowerCase']())i(j['object'],'customer',[m]);if(outEdges(a,j['object'],'order.dispute')['length']>0x0)i(j['object'],'arbitrator',[]);}return h;}const MAX_RISK_REMINDERS=0xa;function collectRiskReminders(a,b){try{return runAnalyzers(a,{'kinds':['risk']})['filter'](c=>c['roles']['includes'](b)||c['roles']['includes']('neutral'))['sort']((c,d)=>SEVERITY_RANK[d['severity']]-SEVERITY_RANK[c['severity']])['slice'](0x0,MAX_RISK_REMINDERS);}catch{return[];}}export function buildRoleInterest(a,b,c,d){const e=b['toLowerCase'](),f=VIEWER_OF[c],g=buildViewport(a,e,f),h=buildControlIndex(g),i=heldPermissionIndices(g,e),j=collectStakes(g,e,h,i),k=collectActions(g,e,c,d,j,i),l=collectArbActions(g,e,d,j),m=collectCounterparties(g,e,c,d,j,h),n=collectRiskReminders(g,f),o=k['find'](y=>y['advice']['actions']['length']>0x0)?.['advice']['actions'][0x0],p=m['find'](y=>y['alignment']==='conflict'),q='Viewing\x20'+e+'\x20as\x20'+c+':\x20'+(j['length']+'\x20stake(s)\x20in\x20flight\x20('+j['map'](y=>y['object_type']+':'+y['positions']['join']('/'))['slice'](0x0,0x4)['join'](',\x20')+(j['length']>0x4?'\x20etc.':'')+');\x20')+(o?'the\x20best\x20currently\x20operable\x20action\x20is\x20\x27'+o['forward']+'\x27\x20on\x20order\x20'+(k['find'](y=>y['advice']['actions'][0x0]===o)?.['order']??'')+'\x20('+o['payoff_note']+');\x20':k['length']>0x0?'orders\x20in\x20flight\x20but\x20no\x20action\x20operable\x20from\x20this\x20view\x20(waiting\x20on\x20others\x20or\x20off-chain\x20resolution);\x20':'no\x20operable\x20in-flight\x20orders;\x20')+(l['length']>0x0?l['length']+'\x20arbitration\x20case\x20action\x20suggestion(s);\x20':'')+(p?'largest\x20structural\x20counterparty\x20tension:\x20'+p['counter_role']+'\x20('+p['note']+')':'no\x20notable\x20counterparty\x20tension')+(n['length']>0x0?'\x20'+n['length']+'\x20role-relevant\x20risk\x20reminder(s).':''),r={'role':c,'observer':e,...d&&(d['risk_appetite']||d['requirements']?.['length'])?{'drive':d}:{},'stakes':j,'actions':k,'arb_actions':l,'counterparties':m,'risk_finding_ids':n['map'](y=>y['id']),'summary':q},s=g['visibleEdges']['filter'](y=>['eoa.order','service.order','demand.presenter','arb.voter','order.dispute']['includes'](y['schema'])),{confidence:t,window:u}=pathConfidence(g,s),w=n['length']>0x0&&SEVERITY_RANK[n[0x0]['severity']]>=SEVERITY_RANK['medium']?n[0x0]['severity']:'info',x={'id':'IR:'+c+':'+e,'kind':'game','severity':w,'title':'Role\x20interest\x20view\x20('+c+'):\x20'+j['length']+'\x20stake(s)\x20in\x20flight'+(o?',\x20best\x20action\x20\x27'+o['forward']+'\x27':''),'path':[e,...j['map'](y=>y['object'])],'confidence':t,...u?{'window':u}:{},'roles':[f],'detail':q,'suggestion':o?'Execute\x20in\x20advice\x20order\x20(\x27'+o['forward']+'\x27\x20'+(o['guard']?'requires\x20Guard\x20passport\x20verification\x20first\x20and\x20':'')+'goes\x20through\x20the\x20tool\x20routing\x20in\x20recommended_calls);\x20see\x20the\x20payload\x20for\x20counterparty\x20tension\x20and\x20risk\x20reminders.':'When\x20no\x20action\x20is\x20operable:\x20watch\x20blocked_forwards\x20waiting\x20conditions\x20and\x20counterparty\x20tension\x20changes,\x20or\x20re-project\x20with\x20a\x20different\x20role/context_account.','interest':r};return{'finding':x,'view':r};}
1
+ import{COMMERCIAL_ROLES}from'../../role/types.js';import{resolveInterests,interestsOf}from'../../evaluation/game-strategy.js';import{evaluateNodeGame}from'../../evaluation/node-game.js';import{evaluateArbGame}from'../../evaluation/arbitration-game.js';import{consequenceOf,recommendedCallForExecutionPath}from'../../participation/radar-core.js';import{buildViewport}from'./viewport.js';import{buildControlIndex,pathConfidence,runAnalyzers}from'./analyze.js';import{orderCompletionInGraph}from'./expand.js';const VIEWER_OF={'customer':'buyer','prospect':'buyer','demander':'demander','merchant':'merchant','collaborator':'collaborator','supplier':'supplier','arbitrator':'arbitrator','neutral':'neutral','system':'system'},COMMERCIAL_ROLE_SET=new Set(COMMERCIAL_ROLES);export function toCommercialRole(a){if(a==='buyer')return'customer';return COMMERCIAL_ROLE_SET['has'](a)?a:'neutral';}export function viewerRoleOf(a){return VIEWER_OF[a];}function root(a){const b=a?.['raw'],c=b?.['data']??b;return c&&typeof c==='object'?c:undefined;}function str(a){return typeof a==='string'&&a!=='0x0'?a:undefined;}function objNode(a,b){const c=a['graph']['nodes']['get'](b['toLowerCase']());return c&&a['visibleNodes']['has'](c['id'])&&c['kind']==='object'&&c['raw']?c:undefined;}function visible(a,b){return a['visibleEdges']['filter'](c=>c['schema']===b);}function outEdges(a,b,c){const d=b['toLowerCase']();return a['visibleEdges']['filter'](f=>f['schema']===c&&f['from']===d);}function incEdges(a,b,c){const d=b['toLowerCase']();return a['visibleEdges']['filter'](f=>f['schema']===c&&f['to']===d);}function wfMachineOf(a){const b=a['indexOf']('::node::');return b>=0x0?a['slice'](0x0,b):'';}function wfNodeName(a){const b=a['indexOf']('::node::');return b>=0x0?a['slice'](b+'::node::'['length']):a;}function heldPermissionIndices(a,c){const d=new Map();for(const f of outEdges(a,c,'eoa.permission')){const g=new Set();d['set'](f['to'],g);for(const h of outEdges(a,f['to'],'permission.entity')){for(const i of Array['isArray'](h['payload']?.['permIndices'])?h['payload']['permIndices']:[]){const j=Number(i);if(Number['isInteger'](j))g['add'](j);}}}return d;}const MAX_STAKES=0x10;function orderStake(a,b,c,e){const f=objNode(a,b),g=root(f)??{},h=orderCompletionInGraph(a['graph'],b);return{'object':b['toLowerCase'](),'object_type':f?.['objectType']??'Order','positions':c,...str(g['amount'])?{'amount':String(g['amount'])}:{},...f?.['coinType']?{'coin_type':f['coinType']}:{},...h['status']!=='unknown'||f?{'state':h['status']}:{},'evidence':e};}function arbState(a,b){return str(root(objNode(a,b))?.['status']);}function collectStakes(a,b,c,d){const f=new Map(),g=(j,k,l,m)=>{const n=j['toLowerCase'](),o=f['get'](n);if(o){if(!o['positions']['includes'](k))o['positions']['push'](k);for(const p of l)if(!o['evidence']['includes'](p))o['evidence']['push'](p);return;}if(f['size']>=MAX_STAKES)return;f['set'](n,m([k],l));},h=new Set();for(const j of outEdges(a,b,'eoa.order'))h['add'](j['to']);for(const k of incEdges(a,b,'order.builder'))h['add'](k['from']);for(const l of h){g(l,'buyer',['eoa.order','order.builder'],(m,n)=>orderStake(a,l,m,n));}const i=new Set(d['keys']());for(const m of outEdges(a,b,'eoa.permission'))i['add'](m['to']);for(const [n,o]of c['objectsByEoa']){if(n!==b)continue;for(const p of o){const q=a['graph']['nodes']['get'](p);q?.['objectType']==='Demand'?g(p,'demand_owner',['eoa.permission','demand.permission'],(r,s)=>{const t=outEdges(a,p,'demand.presenter')['length'];return{'object':p['toLowerCase'](),'object_type':'Demand','positions':r,'state':t+'\x20presenter(s)','evidence':s};}):g(p,'controller',['eoa.permission','permission.core_binding'],(r,s)=>({'object':p['toLowerCase'](),'object_type':q?.['objectType']??'object','positions':r,'evidence':s}));}}for(const r of visible(a,'demand.permission')){if(!i['has'](r['to']))continue;g(r['from'],'demand_owner',['demand.permission'],(s,t)=>{const u=outEdges(a,r['from'],'demand.presenter')['length'];return{'object':r['from']['toLowerCase'](),'object_type':'Demand','positions':s,'state':u+'\x20presenter(s)','evidence':t};});}for(const [s,t]of c['objectsByEoa']){if(s!==b)continue;for(const u of t){if(a['graph']['nodes']['get'](u)?.['objectType']!=='Service')continue;for(const w of outEdges(a,u,'service.order')){g(w['to'],'seller',['service.order'],(x,y)=>orderStake(a,w['to'],x,y));}}}for(const x of incEdges(a,b,'demand.presenter')){g(x['from'],'presenter',['demand.presenter'],(y,z)=>({'object':x['from']['toLowerCase'](),'object_type':a['graph']['nodes']['get'](x['from'])?.['objectType']??'Demand','positions':y,'evidence':z}));}for(const y of incEdges(a,b,'arb.voter')){g(y['from'],'voter',['arb.voter'],(z,A)=>{const B=arbState(a,y['from']);return{'object':y['from']['toLowerCase'](),'object_type':'Arb','positions':z,...B?{'state':B}:{},'evidence':A};});}for(const [z,A]of c['objectsByEoa']){if(z!==b)continue;for(const B of A){if(a['graph']['nodes']['get'](B)?.['objectType']!=='Arbitration')continue;for(const C of incEdges(a,B,'arb.arbitration_service')){g(C['from'],'arbitration_owner',['arb.arbitration_service'],(D,E)=>{const F=arbState(a,C['from']);return{'object':C['from']['toLowerCase'](),'object_type':'Arb','positions':D,...F?{'state':F}:{},'evidence':E};});}}}for(const [D,E]of f){if(a['graph']['nodes']['get'](D)?.['objectType']!=='Order')continue;if(outEdges(a,D,'order.dispute')['length']>0x0&&!E['positions']['includes']('disputant')){E['positions']['push']('disputant');if(!E['evidence']['includes']('order.dispute'))E['evidence']['push']('order.dispute');}}return[...f['values']()];}const MAX_ACTION_GROUPS=0x8;function forwardsAt(a,b,c){const d=b['toLowerCase']()+'::node::',f=[];for(const g of a['visibleEdges']){if(g['schema']!=='wf.transition'||!g['from']['startsWith'](d))continue;if(wfNodeName(g['from'])!==c)continue;f['push']({'edge':g,'name':String(g['payload']?.['forward']??g['payload']?.['prevNode']+'→'+g['payload']?.['node']),'toNode':String(g['payload']?.['node']??wfNodeName(g['to'])),'permissionIndex':typeof g['payload']?.['permissionIndex']==='number'?g['payload']['permissionIndex']:null,'namedOperator':typeof g['payload']?.['namedOperator']==='string'?g['payload']['namedOperator']:null,'guard':str(g['payload']?.['guard']),'weight':typeof g['payload']?.['weight']==='number'?g['payload']['weight']:undefined,'threshold':typeof g['payload']?.['threshold']==='number'?g['payload']['threshold']:undefined});}return f;}function executionPathOf(a,b,c){if(a['permissionIndex']!=null)return c['has'](a['permissionIndex'])?'permission':'not_available';if(a['namedOperator']==='')return b?'order_holder':'not_available';return'not_available';}function allocationSummaryOf(a,b,c,e){const f=outEdges(a,b,'order.allocation')[0x0]?.['to'];if(!f)return undefined;const g=root(objNode(a,f)),h=Array['isArray'](g?.['allocators'])?g['allocators']:[];if(h['length']===0x0)return undefined;let i=0x0,j=0x0,k=0x0,l=0x0;const m=o=>{if(typeof o==='string')return o['startsWith']('0x')||o['startsWith']('00')?o['toLowerCase']():undefined;if(o&&typeof o==='object'){const p=o;if('Entity'in p)return typeof p['Entity']==='string'?p['Entity']['toLowerCase']():undefined;}return undefined;},n=o=>(o&&typeof o==='object'&&'GuardIdentifier'in o)===!![];for(const o of h){const p=o??{};for(const q of Array['isArray'](p['sharing'])?p['sharing']:[]){const r=q??{};i++;const t=m(r['who']);if(t===c['toLowerCase']())k++;else{if(e&&t===e['toLowerCase']())l++;else{if(r['who']==='Signer')l++;else{if(n(r['who']))j++;}}}}}if(i===0x0)return undefined;return{'recipient_slots':i,'guard_gated_slots':j,'direct_to_me_slots':k,'to_payer_slots':l};}function actionGroupFor(a,b,c,e,g,h,i){const j=objNode(a,g),k=root(j)??{},l=str(k['progress']),m=str(k['machine'])??wfMachineOf(l??''),n=l?root(objNode(a,l)):undefined,o=str(n?.['current'])??'';if(!m||!o||!l)return undefined;const p=forwardsAt(a,m,o);if(p['length']===0x0)return undefined;const q=outEdges(a,g,'order.service')[0x0]?.['to'],r=q?root(objNode(a,q)):undefined,s=outEdges(a,g,'order.builder')[0x0]?.['to'],t=[],u=[],w=new Map(),x=[];for(const A of p){const B=executionPathOf(A,h,i);if(B==='not_available'){const D=A['permissionIndex']!=null?'requires\x20permission\x20index\x20'+A['permissionIndex']+'\x20(not\x20held\x20by\x20the\x20observer\x20in\x20this\x20view)':A['namedOperator']!=null&&A['namedOperator']!==''?'named\x20operator\x20\x27'+A['namedOperator']+'\x27\x20resolves\x20off-chain\x20(LocalMark)\x20—\x20not\x20decidable\x20from\x20graph\x20evidence':'unbound\x20forward\x20—\x20only\x20a\x20guard\x20or\x20the\x20payer\x27s\x20transaction\x20can\x20advance\x20it';u['push']({'forward':A['name'],'reason':D});const E=A['permissionIndex']!=null?'permission\x20index\x20'+A['permissionIndex']:A['namedOperator']!=null&&A['namedOperator']!==''?'named\x20operator\x20\x27'+A['namedOperator']+'\x27':'guard/payer-direct\x20only',F=w['get'](E)??[];F['push'](A['name']),w['set'](E,F);continue;}const C=recommendedCallForExecutionPath(B,A['guard']!=null);t['push']({'name':A['name'],'to_node':A['toNode'],'execution_path':B,...A['guard']?{'guard':A['guard']}:{},'consequence':consequenceOf(A['toNode'],undefined),...A['weight']!==undefined?{'weight':A['weight']}:{}});if(C)x['push']({'forward':A['name'],'call':C});}const y=Math['max'](0x1,...p['map'](G=>G['threshold']??0x1)),z=evaluateNodeGame({'current_node':o,'perspective':c,...e?.['risk_appetite']?{'appetite':e['risk_appetite']}:{},...y>0x1?{'threshold':y}:{},'allocation':allocationSummaryOf(a,g,b,s),...e?.['requirements']?{'requirements':e['requirements']}:{},...str(k['amount'])?{'order_amount':String(k['amount'])}:{},...r&&str(r['compensation_fund'])?{'compensation_fund':String(r['compensation_fund'])}:{},'operable':t,'waiting_on':[...w['entries']()]['map'](([G,H])=>({'role':G,'forwards':H}))});return{'order':g['toLowerCase'](),'machine':m['toLowerCase'](),'current_node':o,'advice':z,'recommended_calls':x,'blocked_forwards':u};}function collectActions(a,c,d,e,f,g){const h=new Set();for(const j of g['values']())for(const k of j)h['add'](k);const i=[];for(const l of f){if(i['length']>=MAX_ACTION_GROUPS)break;if(a['graph']['nodes']['get'](l['object'])?.['objectType']!=='Order')continue;const m=l['positions']['includes']('buyer'),n=actionGroupFor(a,c,d,e,l['object'],m,h);n&&(n['advice']['actions']['length']>0x0||n['blocked_forwards']['length']>0x0)&&i['push'](n);}return i;}function arbPerspectiveOf(a,b,c){if(c['positions']['includes']('voter')||c['positions']['includes']('arbitration_owner'))return'arbitrator';if(c['positions']['includes']('buyer')||c['positions']['includes']('disputant'))return'customer';if(c['positions']['includes']('seller'))return'merchant';return undefined;}function collectArbActions(a,b,c,d){const e=[];for(const f of d){if(a['graph']['nodes']['get'](f['object'])?.['objectType']!=='Arb')continue;const g=arbPerspectiveOf(a,b,f),h=arbState(a,f['object']);if(!g||!h)continue;e['push'](evaluateArbGame(h,g,{...c?.['risk_appetite']?{'risk_appetite':c['risk_appetite']}:{},...c?.['requirements']?{'requirements':c['requirements']}:{}}));}return e;}const SEVERITY_RANK={'info':0x0,'low':0x1,'medium':0x2,'high':0x3,'critical':0x4},MAX_COUNTERPARTIES=0x8;function collectCounterparties(a,b,c,d,e,f){const g=resolveInterests(c,d),h=[],i=(j,k,l)=>{if(h['length']>=MAX_COUNTERPARTIES)return;const m=interestsOf(k),n=[...g['prefer']['filter'](r=>m['avoid']['includes'](r)),...g['avoid']['filter'](r=>m['prefer']['includes'](r))],o=g['prefer']['filter'](r=>m['prefer']['includes'](r)),p=n['length']>0x0?'conflict':o['length']>0x0?'aligned':'neutral',q=p==='conflict'?'Structural\x20conflict\x20of\x20interest:\x20you\x20prefer\x20'+(g['prefer']['filter'](r=>m['avoid']['includes'](r))['join'](',\x20')||'(none)')+',\x20which\x20'+k+'\x20treats\x20as\x20a\x20risk;\x20they\x20pursue\x20'+(m['prefer']['join'](',\x20')||'(none)')+'.':p==='aligned'?'Aligned\x20interests:\x20both\x20sides\x20prefer\x20'+o['join'](',\x20')+'.':'No\x20direct\x20interest\x20overlap\x20('+k+'\x20prefers\x20'+(m['prefer']['join'](',\x20')||'none')+'\x20and\x20avoids\x20'+(m['avoid']['join'](',\x20')||'none')+').';h['push']({'object':j['toLowerCase'](),'counter_role':k,'who':l,'their_prefer':m['prefer'],'their_avoid':m['avoid'],'alignment':p,'note':q});};for(const j of e){if(a['graph']['nodes']['get'](j['object'])?.['objectType']!=='Order')continue;const k=outEdges(a,j['object'],'order.service')[0x0]?.['to'],l=k?[...f['controllers']['get'](k['toLowerCase']())??[]]:[];i(j['object'],'merchant',l);const m=outEdges(a,j['object'],'order.builder')[0x0]?.['to'];if(m&&m!==b['toLowerCase']())i(j['object'],'customer',[m]);if(outEdges(a,j['object'],'order.dispute')['length']>0x0)i(j['object'],'arbitrator',[]);}return h;}const MAX_RISK_REMINDERS=0xa;function collectRiskReminders(a,b){try{return runAnalyzers(a,{'kinds':['risk']})['filter'](c=>c['roles']['includes'](b)||c['roles']['includes']('neutral'))['sort']((c,d)=>SEVERITY_RANK[d['severity']]-SEVERITY_RANK[c['severity']])['slice'](0x0,MAX_RISK_REMINDERS);}catch{return[];}}export function buildRoleInterest(a,b,c,d){const e=b['toLowerCase'](),f=VIEWER_OF[c],g=buildViewport(a,e,f),h=buildControlIndex(g),i=heldPermissionIndices(g,e),j=collectStakes(g,e,h,i),k=collectActions(g,e,c,d,j,i),l=collectArbActions(g,e,d,j),m=collectCounterparties(g,e,c,d,j,h),n=collectRiskReminders(g,f),o=k['find'](y=>y['advice']['actions']['length']>0x0)?.['advice']['actions'][0x0],p=m['find'](y=>y['alignment']==='conflict'),q='Viewing\x20'+e+'\x20as\x20'+c+':\x20'+(j['length']+'\x20stake(s)\x20in\x20flight\x20('+j['map'](y=>y['object_type']+':'+y['positions']['join']('/'))['slice'](0x0,0x4)['join'](',\x20')+(j['length']>0x4?'\x20etc.':'')+');\x20')+(o?'the\x20best\x20currently\x20operable\x20action\x20is\x20\x27'+o['forward']+'\x27\x20on\x20order\x20'+(k['find'](y=>y['advice']['actions'][0x0]===o)?.['order']??'')+'\x20('+o['payoff_note']+');\x20':k['length']>0x0?'orders\x20in\x20flight\x20but\x20no\x20action\x20operable\x20from\x20this\x20view\x20(waiting\x20on\x20others\x20or\x20off-chain\x20resolution);\x20':'no\x20operable\x20in-flight\x20orders;\x20')+(l['length']>0x0?l['length']+'\x20arbitration\x20case\x20action\x20suggestion(s);\x20':'')+(p?'largest\x20structural\x20counterparty\x20tension:\x20'+p['counter_role']+'\x20('+p['note']+')':'no\x20notable\x20counterparty\x20tension')+(n['length']>0x0?'\x20'+n['length']+'\x20role-relevant\x20risk\x20reminder(s).':''),r={'role':c,'observer':e,...d&&(d['risk_appetite']||d['requirements']?.['length'])?{'drive':d}:{},'stakes':j,'actions':k,'arb_actions':l,'counterparties':m,'risk_finding_ids':n['map'](y=>y['id']),'summary':q},s=g['visibleEdges']['filter'](y=>['eoa.order','service.order','demand.presenter','arb.voter','order.dispute']['includes'](y['schema'])),{confidence:t,window:u}=pathConfidence(g,s),w=n['length']>0x0&&SEVERITY_RANK[n[0x0]['severity']]>=SEVERITY_RANK['medium']?n[0x0]['severity']:'info',x={'id':'IR:'+c+':'+e,'kind':'game','severity':w,'title':'Role\x20interest\x20view\x20('+c+'):\x20'+j['length']+'\x20stake(s)\x20in\x20flight'+(o?',\x20best\x20action\x20\x27'+o['forward']+'\x27':''),'path':[e,...j['map'](y=>y['object'])],'confidence':t,...u?{'window':u}:{},'roles':[f],'detail':q,'suggestion':o?'Execute\x20in\x20advice\x20order\x20(\x27'+o['forward']+'\x27\x20'+(o['guard']?'requires\x20Guard\x20passport\x20verification\x20first\x20and\x20':'')+'goes\x20through\x20the\x20tool\x20routing\x20in\x20recommended_calls);\x20see\x20the\x20payload\x20for\x20counterparty\x20tension\x20and\x20risk\x20reminders.':'When\x20no\x20action\x20is\x20operable:\x20watch\x20blocked_forwards\x20waiting\x20conditions\x20and\x20counterparty\x20tension\x20changes,\x20or\x20re-project\x20with\x20a\x20different\x20role/context_account.','interest':r};return{'finding':x,'view':r};}
@@ -1 +1 @@
1
- import{describe,expect,it}from'vitest';import{buildRoleInterest,toCommercialRole,viewerRoleOf}from'./interest.js';function mkNode(a,b,c){return{'id':a['toLowerCase'](),'kind':b?'object':'eoa',...b?{'objectType':b}:{},...c?{'raw':{'object':a,'data':c}}:{},'state':'fetched','origins':[{'depth':0x0}],'depth':0x0};}function mkEdge(a,b,c,d,e,f='complete'){return{'id':a+'|'+c['toLowerCase']()+'→'+d['toLowerCase'](),'schema':a,'family':b,'from':c['toLowerCase'](),'to':d['toLowerCase'](),'retention':f,'evidence':'spec','observedAt':0x0,...e?{'payload':e}:{}};}function mkGraph(a,b){const c=new Map(),d=new Map(),f=(g,h,i)=>{const j=g['get'](h)??[];j['push'](i),g['set'](h,j);};for(const g of b){f(c,g['from'],g),f(d,g['to'],g);}return{'network':'testnet','seed':'spec','builtAt':0x0,'nodes':new Map(a['map'](h=>[h['id'],h])),'edges':b,'out':c,'inc':d,'gaps':[],'truncations':[],'rpcReport':{'batches':0x0,'byChannel':{'objects':0x0,'keyedFields':0x0,'tables':0x0,'events':0x0},'dedupHits':0x0},'budgetExhausted':{}};}const CUSTOMER='00customer',MERCHANT='00merchant',ARB_EOA='00arb',DEMANDER='00demander',SUPPLIER='00supplier',SERVICE='0xservice',MACHINE='0xmachine',PROGRESS='0xprogress',ORDER='0xorder1',ALLOC='0xalloc',PERM_M='0xpermm',PERM_A='0xperma',PERM_D='0xpermd',ARB_SVC='0xarbsvc',ARB_CASE='0xarbcase',DEMAND='0xdemand';function machineEdges(a=MACHINE){const b=a['toLowerCase']();return[mkEdge('machine.node','W',b,b+'::node::shipping'),mkEdge('machine.node','W',b,b+'::node::done'),mkEdge('machine.node','W',b,b+'::node::refunded'),mkEdge('machine.node','W',b,b+'::node::pack'),mkEdge('wf.transition','W',b+'::node::shipping',b+'::node::done',{'node':'done','prevNode':'shipping','forward':'confirm','namedOperator':''}),mkEdge('wf.transition','W',b+'::node::shipping',b+'::node::refunded',{'node':'refunded','prevNode':'shipping','forward':'cancel','namedOperator':''}),mkEdge('wf.transition','W',b+'::node::shipping',b+'::node::pack',{'node':'pack','prevNode':'shipping','forward':'op','permissionIndex':0x7,'threshold':0x2,'weight':0x1})];}function orderGraphNodes(){return[mkNode(CUSTOMER),mkNode(MERCHANT),mkNode(SERVICE,'Service',{'compensation_fund':'500','bPublished':!![]}),mkNode(MACHINE,'Machine'),mkNode(PROGRESS,'Progress',{'current':'shipping','machine':MACHINE}),mkNode(ORDER,'Order',{'amount':'1000','builder':CUSTOMER,'service':SERVICE,'machine':MACHINE,'progress':PROGRESS}),mkNode(ALLOC,'Allocation',{'allocators':[{'guard':'0x0','sharing':[{'who':{'Entity':MERCHANT},'sharing':'10000','mode':0x1},{'who':'Signer','sharing':'0','mode':0x0},{'who':{'GuardIdentifier':0x1},'sharing':'0','mode':0x0}]}]}),mkNode(PERM_M,'Permission')];}function orderGraphEdges(){return[...machineEdges(),mkEdge('eoa.order','R',CUSTOMER,ORDER,undefined,'bounded_window'),mkEdge('order.builder','F',ORDER,CUSTOMER),mkEdge('order.service','F',ORDER,SERVICE),mkEdge('order.machine','F',ORDER,MACHINE),mkEdge('order.progress','F',ORDER,PROGRESS),mkEdge('order.allocation','F',ORDER,ALLOC),mkEdge('eoa.permission','R',MERCHANT,PERM_M,{'roleBits':0x1}),mkEdge('permission.core_binding','F',PERM_M,SERVICE),mkEdge('service.order','R',SERVICE,'0xorder2',undefined,'bounded_window'),mkEdge('order.builder','F','0xorder2','00someoneelse')];}describe('role\x20coordinate\x20mapping\x20(single\x20system)',()=>{it('maps\x20the\x20viewport\x20alias\x20and\x20persona\x20roles\x20onto\x20CommercialRole',()=>{expect(toCommercialRole('buyer'))['toBe']('customer'),expect(toCommercialRole('customer'))['toBe']('customer'),expect(toCommercialRole('demander'))['toBe']('demander'),expect(toCommercialRole('merchant'))['toBe']('merchant'),expect(toCommercialRole('arbitrator'))['toBe']('arbitrator'),expect(toCommercialRole('who-knows'))['toBe']('neutral');}),it('maps\x20every\x20CommercialRole\x20onto\x20a\x20viewer\x20role',()=>{expect(viewerRoleOf('customer'))['toBe']('buyer'),expect(viewerRoleOf('demander'))['toBe']('demander'),expect(viewerRoleOf('neutral'))['toBe']('neutral');});}),describe('buildRoleInterest\x20—\x20customer',()=>{const a=mkGraph(orderGraphNodes(),orderGraphEdges());it('projects\x20buyer\x20stakes\x20with\x20amount\x20and\x20completion\x20state',()=>{const {view:b}=buildRoleInterest(a,CUSTOMER,'customer'),c=b['stakes']['find'](d=>d['object']===ORDER);expect(c)['toBeDefined'](),expect(c['positions'])['toContain']('buyer'),expect(c['amount'])['toBe']('1000'),expect(c['state'])['toBe']('in_progress'),expect(b['stakes']['some'](d=>d['object']==='0xorder2'))['toBe'](![]);}),it('ranks\x20operable\x20forwards\x20via\x20node-game\x20(order_holder\x20path)',()=>{const {view:b}=buildRoleInterest(a,CUSTOMER,'customer');expect(b['actions'])['toHaveLength'](0x1);const c=b['actions'][0x0];expect(c['order'])['toBe'](ORDER),expect(c['current_node'])['toBe']('shipping');const d=c['advice']['actions']['map'](e=>e['forward']);expect(d)['toContain']('confirm'),expect(d)['toContain']('cancel'),expect(c['advice']['actions'][0x0]['forward'])['toBe']('cancel'),expect(c['advice']['actions'][0x0]['execution_path'])['toBe']('order_holder'),expect(c['blocked_forwards']['map'](e=>e['forward']))['toContain']('op'),expect(c['recommended_calls']['length'])['toBeGreaterThan'](0x0),expect(c['recommended_calls'][0x0]['call']['tool'])['toBe']('onchain_operations');}),it('derives\x20merchant\x20counterparty\x20tension\x20from\x20ROLE_INTERESTS\x20(conflict)',()=>{const {view:b}=buildRoleInterest(a,CUSTOMER,'customer'),c=b['counterparties']['find'](d=>d['counter_role']==='merchant');expect(c)['toBeDefined'](),expect(c['alignment'])['toBe']('conflict'),expect(c['their_prefer'])['toContain']('fund_released_to_merchant');}),it('emits\x20one\x20IR\x20finding\x20carrying\x20the\x20structured\x20payload',()=>{const {finding:b,view:c}=buildRoleInterest(a,CUSTOMER,'customer');expect(b['id'])['toBe']('IR:customer:'+CUSTOMER),expect(b['kind'])['toBe']('game'),expect(b['interest'])['toBe'](c),expect(b['path'][0x0])['toBe'](CUSTOMER),expect(b['confidence'])['toBe']('windowed');}),it('re-anchors\x20scoring\x20with\x20a\x20conservative\x20persona\x20drive',()=>{const b=buildRoleInterest(a,CUSTOMER,'customer')['view'],c=buildRoleInterest(a,CUSTOMER,'customer',{'risk_appetite':'conservative'})['view'],d=b['actions'][0x0]['advice']['actions']['find'](f=>f['forward']==='confirm'),e=c['actions'][0x0]['advice']['actions']['find'](f=>f['forward']==='confirm');expect(e['risk_score'])['toBeGreaterThan'](d['risk_score']),expect(e['favorability'])['toBeLessThan'](d['favorability']);});}),describe('buildRoleInterest\x20—\x20merchant',()=>{const a=[...orderGraphNodes(),mkNode('0xorder2','Order',{'amount':'2000','builder':'00someoneelse','service':SERVICE,'machine':MACHINE,'progress':PROGRESS}),mkNode('00someoneelse')],b=[...orderGraphEdges()['filter'](d=>!(d['schema']==='order.builder'&&d['from']==='0xorder2')),mkEdge('order.builder','F','0xorder2','00someoneelse'),mkEdge('service.order','R',SERVICE,ORDER,undefined,'bounded_window'),mkEdge('permission.entity','W',PERM_M,MERCHANT,{'permIndices':[0x7]})],c=mkGraph(a,b);it('projects\x20controller\x20+\x20seller\x20stakes',()=>{const {view:d}=buildRoleInterest(c,MERCHANT,'merchant'),e=d['stakes']['find'](g=>g['object']===SERVICE);expect(e?.['positions'])['toContain']('controller');const f=d['stakes']['find'](g=>g['object']===ORDER);expect(f?.['positions'])['toContain']('seller');}),it('executes\x20permission-gated\x20forwards\x20only\x20(OrderHolder\x20forwards\x20stay\x20blocked)',()=>{const {view:d}=buildRoleInterest(c,MERCHANT,'merchant'),e=d['actions']['find'](h=>h['order']===ORDER);expect(e)['toBeDefined']();const f=e['advice']['actions']['find'](g=>g['forward']==='op');expect(f)['toBeDefined'](),expect(f['execution_path'])['toBe']('permission'),expect(e['recommended_calls']['find'](g=>g['forward']==='op')['call']['tool'])['toBe']('workflow_operation'),expect(e['blocked_forwards']['map'](g=>g['forward'])['sort']())['toEqual'](['cancel','confirm']),expect(e['advice']['actions'])['toHaveLength'](0x1),expect(e['advice']['actions'][0x0]['forward'])['toBe']('op'),expect(e['advice']['actions'][0x0]['is_optimal'])['toBe'](!![]);}),it('projects\x20the\x20allocation\x20waterfall\x20(direct_to_me\x20slots)',()=>{const {view:d}=buildRoleInterest(c,MERCHANT,'merchant'),e=d['actions']['find'](h=>h['order']===ORDER),f=e['advice']['cooperation'];expect(f)['toBeDefined'](),expect(f['needed_from_others'])['toBeGreaterThan'](0x0);}),it('surfaces\x20role-relevant\x20R/AC\x20risk\x20reminders\x20(R2\x20exposure\x20fires\x20for\x20the\x20merchant\x20view)',()=>{const {view:d,finding:e}=buildRoleInterest(c,MERCHANT,'merchant');expect(d['risk_finding_ids']['some'](f=>f['startsWith']('R2:')))['toBe'](!![]),expect(e['severity'])['toBe']('high');});}),describe('buildRoleInterest\x20—\x20demander',()=>{const a=[mkNode(DEMANDER),mkNode(SUPPLIER),mkNode(PERM_D,'Permission'),mkNode(DEMAND,'Demand',{'description':'car\x20wash\x20in\x20london'})],b=[mkEdge('eoa.permission','R',DEMANDER,PERM_D,{'roleBits':0x1}),mkEdge('demand.permission','F',DEMAND,PERM_D),mkEdge('demand.presenter','R',DEMAND,SUPPLIER),mkEdge('demand.permission','F','0xdemand2','0xpermother')],c=mkGraph(a,b);it('anchors\x20own\x20demands\x20through\x20the\x20permission\x20(demand_owner\x20stake,\x20presenter\x20count)',()=>{const {view:d}=buildRoleInterest(c,DEMANDER,'demander'),e=d['stakes']['find'](f=>f['object']===DEMAND);expect(e)['toBeDefined'](),expect(e['positions'])['toContain']('demand_owner'),expect(e['state'])['toBe']('1\x20presenter(s)'),expect(d['stakes']['some'](f=>f['object']==='0xdemand2'))['toBe'](![]);});}),describe('buildRoleInterest\x20—\x20arbitrator',()=>{const a=[mkNode(ARB_EOA),mkNode(PERM_A,'Permission'),mkNode(ARB_SVC,'Arbitration',{'voting_guard':[]}),mkNode(ARB_CASE,'Arb',{'status':'Voting','order':ORDER}),...orderGraphNodes()],b=[mkEdge('eoa.permission','R',ARB_EOA,PERM_A,{'roleBits':0x1}),mkEdge('permission.core_binding','F',PERM_A,ARB_SVC),mkEdge('arb.arbitration_service','F',ARB_CASE,ARB_SVC),mkEdge('arb.voter','S',ARB_CASE,ARB_EOA,{'weight':0x1}),...orderGraphEdges()],c=mkGraph(a,b);it('collects\x20voter\x20stakes\x20and\x20arbitration-game\x20advice\x20(Voting\x20→\x20vote\x20is\x20optimal)',()=>{const {view:d}=buildRoleInterest(c,ARB_EOA,'arbitrator'),e=d['stakes']['find'](f=>f['object']===ARB_CASE);expect(e?.['positions'])['toContain']('voter'),expect(e?.['positions'])['toContain']('arbitration_owner'),expect(e?.['state'])['toBe']('Voting'),expect(d['arb_actions'])['toHaveLength'](0x1),expect(d['arb_actions'][0x0]['perspective'])['toBe']('arbitrator'),expect(d['arb_actions'][0x0]['actions'][0x0]['action'])['toBe']('vote'),expect(d['arb_actions'][0x0]['actions'][0x0]['is_optimal'])['toBe'](!![]);});}),describe('buildRoleInterest\x20—\x20prospect\x20(no\x20on-chain\x20stake)',()=>{it('returns\x20an\x20honest\x20empty\x20view\x20instead\x20of\x20guessing',()=>{const a=mkGraph(orderGraphNodes(),orderGraphEdges()),{view:b,finding:c}=buildRoleInterest(a,'00stranger','prospect');expect(b['stakes'])['toHaveLength'](0x0),expect(b['actions'])['toHaveLength'](0x0),expect(c['interest'])['toBe'](b),expect(c['kind'])['toBe']('game');});});
1
+ import{describe,expect,it}from'vitest';import{buildRoleInterest,toCommercialRole,viewerRoleOf}from'./interest.js';function mkNode(a,b,c){return{'id':a['toLowerCase'](),'kind':b?'object':'eoa',...b?{'objectType':b}:{},...c?{'raw':{'object':a,'data':c}}:{},'state':'fetched','origins':[{'depth':0x0}],'depth':0x0};}function mkEdge(a,b,c,d,e,f='complete'){return{'id':a+'|'+c['toLowerCase']()+'→'+d['toLowerCase'](),'schema':a,'family':b,'from':c['toLowerCase'](),'to':d['toLowerCase'](),'retention':f,'observedAt':0x0,...e?{'payload':e}:{}};}function mkGraph(a,b){const c=new Map(),d=new Map(),f=(g,h,i)=>{const j=g['get'](h)??[];j['push'](i),g['set'](h,j);};for(const g of b){f(c,g['from'],g),f(d,g['to'],g);}return{'network':'testnet','seed':'spec','builtAt':0x0,'nodes':new Map(a['map'](h=>[h['id'],h])),'edges':b,'out':c,'inc':d,'gaps':[],'truncations':[],'rpcReport':{'batches':0x0,'byChannel':{'objects':0x0,'keyedFields':0x0,'tables':0x0,'events':0x0},'dedupHits':0x0},'budgetExhausted':{}};}const CUSTOMER='00customer',MERCHANT='00merchant',ARB_EOA='00arb',DEMANDER='00demander',SUPPLIER='00supplier',SERVICE='0xservice',MACHINE='0xmachine',PROGRESS='0xprogress',ORDER='0xorder1',ALLOC='0xalloc',PERM_M='0xpermm',PERM_A='0xperma',PERM_D='0xpermd',ARB_SVC='0xarbsvc',ARB_CASE='0xarbcase',DEMAND='0xdemand';function machineEdges(a=MACHINE){const b=a['toLowerCase']();return[mkEdge('machine.node','W',b,b+'::node::shipping'),mkEdge('machine.node','W',b,b+'::node::done'),mkEdge('machine.node','W',b,b+'::node::refunded'),mkEdge('machine.node','W',b,b+'::node::pack'),mkEdge('wf.transition','W',b+'::node::shipping',b+'::node::done',{'node':'done','prevNode':'shipping','forward':'confirm','namedOperator':''}),mkEdge('wf.transition','W',b+'::node::shipping',b+'::node::refunded',{'node':'refunded','prevNode':'shipping','forward':'cancel','namedOperator':''}),mkEdge('wf.transition','W',b+'::node::shipping',b+'::node::pack',{'node':'pack','prevNode':'shipping','forward':'op','permissionIndex':0x7,'threshold':0x2,'weight':0x1})];}function orderGraphNodes(){return[mkNode(CUSTOMER),mkNode(MERCHANT),mkNode(SERVICE,'Service',{'compensation_fund':'500','bPublished':!![]}),mkNode(MACHINE,'Machine'),mkNode(PROGRESS,'Progress',{'current':'shipping','machine':MACHINE}),mkNode(ORDER,'Order',{'amount':'1000','builder':CUSTOMER,'service':SERVICE,'machine':MACHINE,'progress':PROGRESS}),mkNode(ALLOC,'Allocation',{'allocators':[{'guard':'0x0','sharing':[{'who':{'Entity':MERCHANT},'sharing':'10000','mode':0x1},{'who':'Signer','sharing':'0','mode':0x0},{'who':{'GuardIdentifier':0x1},'sharing':'0','mode':0x0}]}]}),mkNode(PERM_M,'Permission')];}function orderGraphEdges(){return[...machineEdges(),mkEdge('eoa.order','R',CUSTOMER,ORDER,undefined,'bounded_window'),mkEdge('order.builder','F',ORDER,CUSTOMER),mkEdge('order.service','F',ORDER,SERVICE),mkEdge('order.machine','F',ORDER,MACHINE),mkEdge('order.progress','F',ORDER,PROGRESS),mkEdge('order.allocation','F',ORDER,ALLOC),mkEdge('eoa.permission','R',MERCHANT,PERM_M,{'roleBits':0x1}),mkEdge('permission.core_binding','F',PERM_M,SERVICE),mkEdge('service.order','R',SERVICE,'0xorder2',undefined,'bounded_window'),mkEdge('order.builder','F','0xorder2','00someoneelse')];}describe('role\x20coordinate\x20mapping\x20(single\x20system)',()=>{it('maps\x20the\x20viewport\x20alias\x20and\x20persona\x20roles\x20onto\x20CommercialRole',()=>{expect(toCommercialRole('buyer'))['toBe']('customer'),expect(toCommercialRole('customer'))['toBe']('customer'),expect(toCommercialRole('demander'))['toBe']('demander'),expect(toCommercialRole('merchant'))['toBe']('merchant'),expect(toCommercialRole('arbitrator'))['toBe']('arbitrator'),expect(toCommercialRole('who-knows'))['toBe']('neutral');}),it('maps\x20every\x20CommercialRole\x20onto\x20a\x20viewer\x20role',()=>{expect(viewerRoleOf('customer'))['toBe']('buyer'),expect(viewerRoleOf('demander'))['toBe']('demander'),expect(viewerRoleOf('neutral'))['toBe']('neutral');});}),describe('buildRoleInterest\x20—\x20customer',()=>{const a=mkGraph(orderGraphNodes(),orderGraphEdges());it('projects\x20buyer\x20stakes\x20with\x20amount\x20and\x20completion\x20state',()=>{const {view:b}=buildRoleInterest(a,CUSTOMER,'customer'),c=b['stakes']['find'](d=>d['object']===ORDER);expect(c)['toBeDefined'](),expect(c['positions'])['toContain']('buyer'),expect(c['amount'])['toBe']('1000'),expect(c['state'])['toBe']('in_progress'),expect(b['stakes']['some'](d=>d['object']==='0xorder2'))['toBe'](![]);}),it('ranks\x20operable\x20forwards\x20via\x20node-game\x20(order_holder\x20path)',()=>{const {view:b}=buildRoleInterest(a,CUSTOMER,'customer');expect(b['actions'])['toHaveLength'](0x1);const c=b['actions'][0x0];expect(c['order'])['toBe'](ORDER),expect(c['current_node'])['toBe']('shipping');const d=c['advice']['actions']['map'](e=>e['forward']);expect(d)['toContain']('confirm'),expect(d)['toContain']('cancel'),expect(c['advice']['actions'][0x0]['forward'])['toBe']('cancel'),expect(c['advice']['actions'][0x0]['execution_path'])['toBe']('order_holder'),expect(c['blocked_forwards']['map'](e=>e['forward']))['toContain']('op'),expect(c['recommended_calls']['length'])['toBeGreaterThan'](0x0),expect(c['recommended_calls'][0x0]['call']['tool'])['toBe']('onchain_operations');}),it('derives\x20merchant\x20counterparty\x20tension\x20from\x20the\x20role-interests\x20table\x20(conflict)',()=>{const {view:b}=buildRoleInterest(a,CUSTOMER,'customer'),c=b['counterparties']['find'](d=>d['counter_role']==='merchant');expect(c)['toBeDefined'](),expect(c['alignment'])['toBe']('conflict'),expect(c['their_prefer'])['toContain']('fund_released_to_merchant');}),it('emits\x20one\x20IR\x20finding\x20carrying\x20the\x20structured\x20payload',()=>{const {finding:b,view:c}=buildRoleInterest(a,CUSTOMER,'customer');expect(b['id'])['toBe']('IR:customer:'+CUSTOMER),expect(b['kind'])['toBe']('game'),expect(b['interest'])['toBe'](c),expect(b['path'][0x0])['toBe'](CUSTOMER),expect(b['confidence'])['toBe']('windowed');}),it('re-anchors\x20scoring\x20with\x20a\x20conservative\x20persona\x20drive',()=>{const b=buildRoleInterest(a,CUSTOMER,'customer')['view'],c=buildRoleInterest(a,CUSTOMER,'customer',{'risk_appetite':'conservative'})['view'],d=b['actions'][0x0]['advice']['actions']['find'](f=>f['forward']==='confirm'),e=c['actions'][0x0]['advice']['actions']['find'](f=>f['forward']==='confirm');expect(e['risk_score'])['toBeGreaterThan'](d['risk_score']),expect(e['favorability'])['toBeLessThan'](d['favorability']);});}),describe('buildRoleInterest\x20—\x20merchant',()=>{const a=[...orderGraphNodes(),mkNode('0xorder2','Order',{'amount':'2000','builder':'00someoneelse','service':SERVICE,'machine':MACHINE,'progress':PROGRESS}),mkNode('00someoneelse')],b=[...orderGraphEdges()['filter'](d=>!(d['schema']==='order.builder'&&d['from']==='0xorder2')),mkEdge('order.builder','F','0xorder2','00someoneelse'),mkEdge('service.order','R',SERVICE,ORDER,undefined,'bounded_window'),mkEdge('permission.entity','W',PERM_M,MERCHANT,{'permIndices':[0x7]})],c=mkGraph(a,b);it('projects\x20controller\x20+\x20seller\x20stakes',()=>{const {view:d}=buildRoleInterest(c,MERCHANT,'merchant'),e=d['stakes']['find'](g=>g['object']===SERVICE);expect(e?.['positions'])['toContain']('controller');const f=d['stakes']['find'](g=>g['object']===ORDER);expect(f?.['positions'])['toContain']('seller');}),it('executes\x20permission-gated\x20forwards\x20only\x20(OrderHolder\x20forwards\x20stay\x20blocked)',()=>{const {view:d}=buildRoleInterest(c,MERCHANT,'merchant'),e=d['actions']['find'](h=>h['order']===ORDER);expect(e)['toBeDefined']();const f=e['advice']['actions']['find'](g=>g['forward']==='op');expect(f)['toBeDefined'](),expect(f['execution_path'])['toBe']('permission'),expect(e['recommended_calls']['find'](g=>g['forward']==='op')['call']['tool'])['toBe']('workflow_operation'),expect(e['blocked_forwards']['map'](g=>g['forward'])['sort']())['toEqual'](['cancel','confirm']),expect(e['advice']['actions'])['toHaveLength'](0x1),expect(e['advice']['actions'][0x0]['forward'])['toBe']('op'),expect(e['advice']['actions'][0x0]['is_optimal'])['toBe'](!![]);}),it('projects\x20the\x20allocation\x20waterfall\x20(direct_to_me\x20slots)',()=>{const {view:d}=buildRoleInterest(c,MERCHANT,'merchant'),e=d['actions']['find'](h=>h['order']===ORDER),f=e['advice']['cooperation'];expect(f)['toBeDefined'](),expect(f['needed_from_others'])['toBeGreaterThan'](0x0);}),it('surfaces\x20role-relevant\x20R/AC\x20risk\x20reminders\x20(R2\x20exposure\x20fires\x20for\x20the\x20merchant\x20view)',()=>{const {view:d,finding:e}=buildRoleInterest(c,MERCHANT,'merchant');expect(d['risk_finding_ids']['some'](f=>f['startsWith']('R2:')))['toBe'](!![]),expect(e['severity'])['toBe']('high');});}),describe('buildRoleInterest\x20—\x20demander',()=>{const a=[mkNode(DEMANDER),mkNode(SUPPLIER),mkNode(PERM_D,'Permission'),mkNode(DEMAND,'Demand',{'description':'car\x20wash\x20in\x20london'})],b=[mkEdge('eoa.permission','R',DEMANDER,PERM_D,{'roleBits':0x1}),mkEdge('demand.permission','F',DEMAND,PERM_D),mkEdge('demand.presenter','R',DEMAND,SUPPLIER),mkEdge('demand.permission','F','0xdemand2','0xpermother')],c=mkGraph(a,b);it('anchors\x20own\x20demands\x20through\x20the\x20permission\x20(demand_owner\x20stake,\x20presenter\x20count)',()=>{const {view:d}=buildRoleInterest(c,DEMANDER,'demander'),e=d['stakes']['find'](f=>f['object']===DEMAND);expect(e)['toBeDefined'](),expect(e['positions'])['toContain']('demand_owner'),expect(e['state'])['toBe']('1\x20presenter(s)'),expect(d['stakes']['some'](f=>f['object']==='0xdemand2'))['toBe'](![]);});}),describe('buildRoleInterest\x20—\x20arbitrator',()=>{const a=[mkNode(ARB_EOA),mkNode(PERM_A,'Permission'),mkNode(ARB_SVC,'Arbitration',{'voting_guard':[]}),mkNode(ARB_CASE,'Arb',{'status':'Voting','order':ORDER}),...orderGraphNodes()],b=[mkEdge('eoa.permission','R',ARB_EOA,PERM_A,{'roleBits':0x1}),mkEdge('permission.core_binding','F',PERM_A,ARB_SVC),mkEdge('arb.arbitration_service','F',ARB_CASE,ARB_SVC),mkEdge('arb.voter','S',ARB_CASE,ARB_EOA,{'weight':0x1}),...orderGraphEdges()],c=mkGraph(a,b);it('collects\x20voter\x20stakes\x20and\x20arbitration-game\x20advice\x20(Voting\x20→\x20vote\x20is\x20optimal)',()=>{const {view:d}=buildRoleInterest(c,ARB_EOA,'arbitrator'),e=d['stakes']['find'](f=>f['object']===ARB_CASE);expect(e?.['positions'])['toContain']('voter'),expect(e?.['positions'])['toContain']('arbitration_owner'),expect(e?.['state'])['toBe']('Voting'),expect(d['arb_actions'])['toHaveLength'](0x1),expect(d['arb_actions'][0x0]['perspective'])['toBe']('arbitrator'),expect(d['arb_actions'][0x0]['actions'][0x0]['action'])['toBe']('vote'),expect(d['arb_actions'][0x0]['actions'][0x0]['is_optimal'])['toBe'](!![]);});}),describe('buildRoleInterest\x20—\x20prospect\x20(no\x20on-chain\x20stake)',()=>{it('returns\x20an\x20honest\x20empty\x20view\x20instead\x20of\x20guessing',()=>{const a=mkGraph(orderGraphNodes(),orderGraphEdges()),{view:b,finding:c}=buildRoleInterest(a,'00stranger','prospect');expect(b['stakes'])['toHaveLength'](0x0),expect(b['actions'])['toHaveLength'](0x0),expect(c['interest'])['toBe'](b),expect(c['kind'])['toBe']('game');});});
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ import{describe,expect,it}from'vitest';import{EDGE_SCHEMAS}from'./edge-schema.js';const BANNED_LABEL_WORDS=/\b(bound|attached|linked?|track(ed|ing)?)\b/i,MIN_LABEL_LENGTH=0x1e;describe('edge\x20labels\x20—\x20semantic\x20lint\x20(TR-11.2)',()=>{it('every\x20schema\x20has\x20a\x20non-empty\x20label',()=>{for(const a of EDGE_SCHEMAS){expect(a['label']['trim']()['length'],a['id']+'\x20label\x20empty')['toBeGreaterThan'](0x0);}}),it('labels\x20avoid\x20generic\x20wiring\x20verbs\x20(bound/attached/link/track)',()=>{for(const a of EDGE_SCHEMAS){const b=BANNED_LABEL_WORDS['exec'](a['label']);expect(b,a['id']+':\x20label\x20uses\x20banned\x20word\x20\x22'+b?.[0x0]+'\x22:\x20\x22'+a['label']+'\x22')['toBeNull']();}}),it('labels\x20are\x20unique\x20across\x20the\x20registry\x20(dupes\x20signal\x20copy-paste\x20genericism)',()=>{const a=new Map();for(const b of EDGE_SCHEMAS){const c=a['get'](b['label']);expect(c,'label\x20\x22'+b['label']+'\x22\x20shared\x20by\x20'+c+'\x20and\x20'+b['id'])['toBeUndefined'](),a['set'](b['label'],b['id']);}}),it('labels\x20meet\x20the\x20semantic\x20richness\x20floor',()=>{for(const a of EDGE_SCHEMAS){expect(a['label']['length'],a['id']+':\x20label\x20too\x20terse:\x20\x22'+a['label']+'\x22')['toBeGreaterThanOrEqual'](MIN_LABEL_LENGTH);}});});
@@ -0,0 +1,23 @@
1
+ import type { TopologyGraph } from "./types.js";
2
+ export interface ResolvedName {
3
+ label: string;
4
+ full?: string;
5
+ }
6
+ export declare function shortAddress(addr: string): string;
7
+ export declare function isWfNodeId(id: string): boolean;
8
+ export declare function wfMachineOf(id: string): string;
9
+ export declare function wfNodeName(id: string): string;
10
+ export declare function humanizeTypeTag(name: string): string | null;
11
+ export declare function humanizeStoredName(name: string): ResolvedName;
12
+ export interface NameIndex {
13
+ objects: Map<string, string>;
14
+ }
15
+ export declare function buildNameIndex(graph: TopologyGraph): NameIndex;
16
+ export interface NameResolver {
17
+ resolve(ref: string): ResolvedName;
18
+ resolveWf(ref: string): {
19
+ machine: ResolvedName;
20
+ node: ResolvedName;
21
+ } | undefined;
22
+ }
23
+ export declare function createNameResolver(index: NameIndex): NameResolver;
@@ -0,0 +1 @@
1
+ const WF_NODE_MARK='::node::';export function shortAddress(a){const b=a['trim']();if(!b['startsWith']('0x')||b['length']<0xe)return b;const c=b['slice'](0x2);return(c['slice'](0x0,0x4)+'-'+c['slice'](-0x3))['toUpperCase']();}export function isWfNodeId(a){return a['includes'](WF_NODE_MARK);}export function wfMachineOf(a){const b=a['indexOf'](WF_NODE_MARK);return b>=0x0?a['slice'](0x0,b):'';}export function wfNodeName(a){const b=a['indexOf'](WF_NODE_MARK);return b>=0x0?a['slice'](b+WF_NODE_MARK['length']):a;}const TYPE_TAG_RE=/^(0x[0-9a-fA-F]+)::([A-Za-z0-9_]+)::([A-Za-z0-9_]+)(?:<(.*)>)?$/;export function humanizeTypeTag(a){const b=TYPE_TAG_RE['exec'](a['trim']());if(!b)return null;const [,,,c,d]=b;if(!d)return c;const e=[];let f=0x0,g='';for(const i of d){if(i==='<')f++;else{if(i==='>')f--;}if(i===','&&f===0x0)e['push'](g['trim']()),g='';else g+=i;}if(g['trim']())e['push'](g['trim']());const h=e['map'](j=>humanizeTypeTag(j)??j);return h['length']?c+'<'+h['join'](',\x20')+'>':c;}export function humanizeStoredName(a){const b=humanizeTypeTag(a);return b?{'label':b,'full':a}:{'label':a};}function rootData(a){if(!a||typeof a!=='object')return undefined;const b=a,c=b['data']??b;return c&&typeof c==='object'?c:undefined;}export function buildNameIndex(a){const b=new Map();for(const c of a['nodes']['values']()){if(c['kind']!=='object'||!c['raw'])continue;const e=rootData(c['raw']),f=e?.['name'];if(typeof f==='string'&&f['trim']())b['set'](c['id'],f['trim']());}return{'objects':b};}export function createNameResolver(a){const b=d=>{const e=a['objects']['get'](d);return e?{'label':e}:{'label':shortAddress(d),'full':d};},c=d=>{if(isWfNodeId(d)){const e=wfMachineOf(d),f=humanizeStoredName(wfNodeName(d)),g=a['objects']['get'](e);if(g)return{'label':g+'\x20›\x20'+f['label'],'full':f['full']};return f;}if(d['startsWith']('0x')&&d['length']>=0xe)return b(d['toLowerCase']());return{'label':d};};return{'resolve':c,'resolveWf'(d){if(!isWfNodeId(d))return undefined;return{'machine':b(wfMachineOf(d)),'node':humanizeStoredName(wfNodeName(d))};}};}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ import{describe,expect,it}from'vitest';import{ENTRYPOINT}from'@wowok/wowok';import{findingWhereResolved}from'./analyze.js';import{buildNameIndex,createNameResolver,humanizeStoredName,humanizeTypeTag,shortAddress}from'./names.js';const MACHINE='0x14b474d65159538031a75d37e4eb2367971fd30743df75e4472894be4f3c0e8f',TYPE_TAG_NODE='0x2::machine::Node<0x2::wow::WOW>';function graphWith(a){return{'network':ENTRYPOINT['Mainnet'],'seed':MACHINE,'builtAt':0x1,'nodes':new Map(a['map'](b=>[b['id'],b])),'edges':[],'out':new Map(),'inc':new Map(),'gaps':[],'truncations':[],'rpcReport':{'batches':0x0,'byChannel':{'objects':0x0,'keyedFields':0x0,'tables':0x0,'events':0x0},'dedupHits':0x0},'budgetExhausted':{}};}function objectNode(a,b){return{'id':a,'kind':'object','objectType':'Machine','state':'fetched','origins':[],'depth':0x0,'raw':{'object':a,'type':'Machine',...b!==undefined?{'data':{'name':b}}:{}}};}describe('humanizeTypeTag',()=>{it('shortens\x20a\x20Move\x20type\x20tag\x20to\x20its\x20struct\x20+\x20generic-param\x20last\x20segments',()=>{expect(humanizeTypeTag(TYPE_TAG_NODE))['toBe']('Node<WOW>'),expect(humanizeTypeTag('0x2::machine::Node'))['toBe']('Node');}),it('passes\x20plain\x20business\x20names\x20through\x20as\x20null',()=>{expect(humanizeTypeTag('Order\x20Confirmed'))['toBeNull'](),expect(humanizeTypeTag('paid'))['toBeNull']();}),it('keeps\x20nested\x20generics\x20depth-correct',()=>{expect(humanizeTypeTag('0x1::a::Box<0x2::b::C<0x3::d::E>,\x200x4::f::G>'))['toBe']('Box<C<E>,\x20G>');});}),describe('humanizeStoredName',()=>{it('carries\x20the\x20verbatim\x20tag\x20as\x20full\x20when\x20humanized',()=>{expect(humanizeStoredName(TYPE_TAG_NODE))['toEqual']({'label':'Node<WOW>','full':TYPE_TAG_NODE}),expect(humanizeStoredName('Order\x20Confirmed'))['toEqual']({'label':'Order\x20Confirmed'});});}),describe('buildNameIndex\x20+\x20createNameResolver',()=>{it('resolves\x20named\x20machines\x20by\x20on-chain\x20name\x20and\x20unnamed\x20to\x20a\x20short\x20address',()=>{const a='0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',b=graphWith([objectNode(MACHINE,'travel_shop_machine'),objectNode(a)]),c=createNameResolver(buildNameIndex(b));expect(c['resolve'](MACHINE)['label'])['toBe']('travel_shop_machine');const d=c['resolve'](a);expect(d['label'])['toBe'](shortAddress(a)),expect(d['label'])['toBe']('AAAA-AAA'),expect(d['full'])['toBe'](a);}),it('resolves\x20synthetic\x20wf\x20node\x20ids:\x20machine\x20name\x20+\x20humanized\x20type-tag\x20node\x20(AC-6)',()=>{const a=graphWith([objectNode(MACHINE,'travel_shop_machine')]),b=createNameResolver(buildNameIndex(a)),c=MACHINE+'::node::'+TYPE_TAG_NODE,d=b['resolveWf'](c);expect(d['machine']['label'])['toBe']('travel_shop_machine'),expect(d['node'])['toEqual']({'label':'Node<WOW>','full':TYPE_TAG_NODE}),expect(b['resolve'](c)['label'])['toContain']('Node<WOW>'),expect(b['resolve'](c)['label'])['not']['toContain']('::node::');}),it('findingWhereResolved\x20renders\x20machine\x20name\x20+\x20node\x20labels\x20in\x20R4\x20lines',()=>{const a=graphWith([objectNode(MACHINE,'travel_shop_machine')]),b=createNameResolver(buildNameIndex(a)),c='R4:'+MACHINE+':'+MACHINE+'::node::'+TYPE_TAG_NODE+'→'+MACHINE+'::node::'+TYPE_TAG_NODE,d=findingWhereResolved({'id':c},b);expect(d)['toBe']('travel_shop_machine:\x20Node<WOW>\x20→\x20Node<WOW>'),expect(d)['not']['toContain']('::node::'),expect(d)['not']['toContain']('0x2::machine::Node');}),it('findingWhereResolved\x20resolves\x20R2/R7\x20object\x20addresses\x20to\x20names',()=>{const a='0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',b=graphWith([objectNode(MACHINE,'svc'),objectNode(a,'reserve_treasury')]),c=createNameResolver(buildNameIndex(b));expect(findingWhereResolved({'id':'R2:'+MACHINE},c))['toBe']('svc'),expect(findingWhereResolved({'id':'R7:treasury:'+a},c))['toBe']('Treasury\x20reserve_treasury');});});
@@ -1 +1 @@
1
- import{describe,expect,it}from'vitest';import{ENTRYPOINT}from'@wowok/wowok';import{FakeDataPlane}from'./dataplane.js';import{expandTopology,orderCompletionInGraph}from'./expand.js';import{extractObjectEdges,extractReverseRefs,extractTableRefs}from'./extract.js';import{annotateNodeName,deriveOrderCompletion,terminalNamesOfEdges,terminalNamesOfRows,workflowSubgraphFromRows,workflowSubgraphFromEdges}from'./order-status.js';import{COVERED_OBJECT_TYPES,EDGE_SCHEMAS}from'./edge-schema.js';import{FIELD_MUTABILITY_RULES,fieldMutabilityOf,isActionForbidden}from'../../knowledge/contract-invariants.js';import{buildViewport}from'./viewport.js';function mk(a,b){return'0x'+a['toString'](0x10)['padStart'](0x2,'0')+b['toString'](0x10)['padStart'](0x3e,'0');}const eoa=a=>mk(0x0,a),obj=(a,b)=>mk(0x10+a,b),T_USDT='0x2::wow::coins::USDT',buyer=eoa(0x1),otherBuyer=eoa(0x2),merchant=eoa(0x3),collaborator=eoa(0x4),voter1=eoa(0x5),svc=obj(0x4,0xa),mac=obj(0x5,0xb),o1=obj(0x6,0x15),o2=obj(0x6,0x16),o3=obj(0x6,0x17),o4=obj(0x6,0x18),pr1=obj(0x7,0x1f),pr2=obj(0x7,0x20),pay=obj(0x8,0x29),perm=obj(0x0,0x33),g1=obj(0xa,0x3d),g2=obj(0xa,0x3e),gShip=obj(0xa,0x3f),gOther=obj(0xa,0x45),alloc=obj(0xd,0x47),arbsvc=obj(0x3,0x51),arb=obj(0x2,0x52);function raw(a,b,c,d){return{'object':a,'type':b,'data':c,...d?{'type_raw':d}:{}};}const OBJECTS=[raw(svc,'Service',{'permission':perm,'machine':mac,'arbitrations':[arbsvc],'order_allocators':{'allocators':[{'guard':g1}]}},'0x2::service::Service<'+T_USDT+'>'),raw(o1,'Order',{'builder':buyer,'agent':[],'service':svc,'machine':mac,'progress':pr1,'allocation':alloc,'dispute':[arb]}),raw(o2,'Order',{'builder':buyer,'agent':[],'service':svc,'machine':mac,'progress':pr2,'allocation':alloc,'dispute':[]}),raw(o3,'Order',{'builder':buyer,'agent':[],'service':svc,'dispute':[]}),raw(o4,'Order',{'builder':otherBuyer,'agent':[],'service':svc,'machine':mac,'progress':undefined,'dispute':[]}),raw(mac,'Machine',{'permission':perm,'consensus_repositories':[]}),raw(pr1,'Progress',{'machine':mac,'task':o1,'current':'done'}),raw(pr2,'Progress',{'machine':mac,'task':o2,'current':'shipping'}),raw(alloc,'Allocation',{'allocators':{'threshold':0x1,'allocators':[{'guard':g1,'mode':0x0}]}},'0x2::allocation::Allocation<'+T_USDT+'>'),raw(perm,'Permission',{'admin':[merchant]}),raw(g1,'Guard',{'relies':[g2]}),raw(g2,'Guard',{'relies':[]}),raw(gShip,'Guard',{'relies':[]}),raw(arbsvc,'Arbitration',{'permission':perm,'voting_guard':[{'guard':g1}]}),raw(arb,'Arb',{'order':o1,'arbitration':arbsvc,'voted':[{'voter':voter1,'weight':0x3}]}),raw(pay,'Payment',{'record':[{'recipient':merchant,'amount':'99900'}],'from_object':alloc,'info':{'for_object':o1,'for_guard':g1}},'0x2::payment::Payment<'+T_USDT+'>')];let TABLE_SEQ=0x0;function nodeTableItem(a,b,c){TABLE_SEQ++;const d='0x9'+TABLE_SEQ['toString'](0x10)['padStart'](0x3f,'0');return{'key':a,'objectId':d,'object':raw(d,'TableItem_MachineNode',{'name':b,'value':c})};}function permTableItem(a,b){const c='0x9'+a['slice'](0x2,0x1e)['padEnd'](0x3f,'0')['slice'](0x0,0x3f);return{'key':a,'objectId':c,'object':raw(c,'TableItem_PermissionPerm',{'address':a,'perm':b})};}function makePlane(){const a=[nodeTableItem('start','start',[]),nodeTableItem('shipping','shipping',[{'prev_node':'start','threshold':0x0,'forwards':[{'name':'f_ship','weight':0x1,'guard':gShip}]}]),nodeTableItem('done','done',[{'prev_node':'shipping','threshold':0x0,'forwards':[{'name':'f_done','weight':0x1}]}])],b=new Map(OBJECTS['map'](e=>[e['object']['toLowerCase'](),e])),c=new Map();c['set']('0xaa8',new Map([[buyer,{'items':[{'role':0x1,'order':o1,'time':0x1},{'role':0x2,'order':o2,'time':0x2},{'role':0x1,'order':o3,'time':0x3}]}]])),c['set']('0xaad',new Map([[merchant,{'items':[{'role':0x1,'permission':perm,'time':0x1}]}]])),c['set']('0xaae',new Map([[perm,{'items':[{'who':svc,'time':0x1}]}]])),c['set']('0xaaf',new Map([[svc,{'items':[{'who':o1,'time':0x1},{'who':o2,'time':0x2},{'who':o4,'time':0x3},{'who':gOther,'time':0x4}]}]]));const d=new Map([[mac['toLowerCase'](),a],[perm['toLowerCase'](),[permTableItem(collaborator,[0x1,0x2])]]]);return new FakeDataPlane({'objects':b,'keyedFields':c,'tables':d});}const FULL_EDGES={'tableEdges':['machine.node','permission.entity']};async function buildBuyerGraph(a){const b=makePlane(),c=await expandTopology(b,{'network':ENTRYPOINT['Mainnet'],'seed':buyer,'edges':FULL_EDGES,...a?{'budget':a}:{}});return{'graph':c,'plane':b};}describe('extract\x20—\x20field\x20edges',()=>{it('reads\x20scalar,\x20vector,\x20struct\x20and\x20deep\x20nested\x20refs\x20defensively',()=>{const a=extractObjectEdges('Service',OBJECTS[0x0]),b=new Map(a['map'](c=>[c['schemaId'],c['refs']['map'](d=>d['to'])]));expect(b['get']('service.permission'))['toEqual']([perm]),expect(b['get']('service.machine'))['toEqual']([mac]),expect(b['get']('service.arbitration'))['toEqual']([arbsvc]),expect(b['get']('service.order_allocator_guard'))['toEqual']([g1]);}),it('parses\x20coin\x20type\x20T\x20and\x20money\x20payloads\x20on\x20Payment',()=>{const a=extractObjectEdges('Payment',OBJECTS['find'](d=>d['object']===pay)),b=new Map(a['map'](d=>[d['schemaId'],d])),c=b['get']('payment.recipient')['refs'][0x0];expect(c['to'])['toBe'](merchant),expect(c['payload']?.['amount'])['toBe']('99900'),expect(c['payload']?.['coinType'])['toBe'](T_USDT),expect(b['get']('payment.from_object')['refs'][0x0]['to'])['toBe'](alloc),expect(b['get']('payment.for_guard')['refs'][0x0]['to'])['toBe'](g1);}),it('reverse\x20field\x20shapes:\x20items[]\x20and\x20votes[]\x20with\x20role/vote\x20payloads',()=>{expect(extractReverseRefs('0xaa8',{'items':[{'role':0x3,'order':o1}]})[0x0]['payload']?.['roleBits'])['toBe'](0x3);const a=extractReverseRefs('0xaaa',{'votes':[{'who':voter1,'like':!![],'favor':!![]}]});expect(a[0x0]['payload']?.['voteBits'])['toBe'](0x2|0x8);}),it('machine\x20table\x20rows\x20produce\x20node\x20+\x20transition\x20+\x20guard\x20edges',()=>{const a=makePlane()['state']['tables']['get'](mac['toLowerCase']()),b=extractTableRefs('machine.node',mac,a),c=new Map(b['map'](e=>[e['schemaId'],e['refs']]));expect(c['get']('machine.node')?.['length'])['toBe'](0x3);const d=c['get']('wf.transition');expect(d['map'](e=>[e['from']['includes']('start'),e['to']['includes']('shipping')]))['toContainEqual']([!![],!![]]),expect(c['get']('wf.forward_guard')?.[0x0]['to'])['toBe'](gShip);});}),describe('order-status\x20—\x20structural\x20authority',()=>{it('terminal\x20=\x20names\x20never\x20appearing\x20as\x20prev_node',()=>{const a=terminalNamesOfEdges([{'node':'shipping','prev_node':'start'},{'node':'done','prev_node':'shipping'}]);expect([...a])['toEqual'](['done']),expect([...terminalNamesOfRows([{'name':'a','value':[]},{'name':'b','value':[{'prev_node':'a'}]}])])['toEqual'](['b']);}),it('four\x20completion\x20states',()=>{const a=new Set(['done']);expect(deriveOrderCompletion({'machine':null})['status'])['toBe']('completed'),expect(deriveOrderCompletion({'machine':mac,'progress':null})['status'])['toBe']('in_progress'),expect(deriveOrderCompletion({'machine':mac,'progress':pr1,'currentNode':'shipping','terminalNames':a})['status'])['toBe']('in_progress'),expect(deriveOrderCompletion({'machine':mac,'progress':pr1,'currentNode':'done','terminalNames':a})['status'])['toBe']('completed'),expect(deriveOrderCompletion({'machine':mac,'progress':pr1,'currentNode':'done','terminalNames':null})['status'])['toBe']('unknown');}),it('name\x20vocabulary\x20is\x20annotation\x20only',()=>{expect(annotateNodeName('order_refunded'))['toBe']('refund'),expect(annotateNodeName('dispute_node'))['toBe']('exception'),expect(annotateNodeName('shipping'))['toBeNull']();}),it('workflowSubgraphFromRows\x20flattens\x20pairs/forwards\x20and\x20keeps\x20structural\x20terminals',()=>{const a=workflowSubgraphFromRows([{'name':'shipped','value':[{'prev_node':'paid','threshold':0x2,'forwards':[{'name':'ship','guard':{'guard':'0xg','retained_submission':[]},'weight':0x1},{'name':'airdrop','namedOperator':'op','permissionIndex':0x3}]}]},{'name':'done','value':[{'prev_node':'shipped','forwards':[{'name':'confirm'}]}]}],'0xm');expect(a['machine'])['toBe']('0xm'),expect(a['transitions']['map'](b=>b['prevNode']+'>'+b['forward']+'>'+b['node']))['toEqual'](['paid>ship>shipped','paid>airdrop>shipped','shipped>confirm>done']),expect(a['transitions'][0x0]['guard'])['toBe']('0xg'),expect(a['transitions'][0x0]['threshold'])['toBe'](0x2),expect(a['transitions'][0x1]['namedOperator'])['toBe']('op'),expect(a['transitions'][0x1]['permissionIndex'])['toBe'](0x3),expect([...a['terminalNames']])['toEqual'](['done']);}),it('workflowSubgraphFromEdges\x20reads\x20wf.transition\x20payloads\x20and\x20filters\x20by\x20machine',()=>{const a=[{'schema':'wf.transition','from':'0xm1::node::paid','to':'0xm1::node::done','payload':{'node':'done','prevNode':'paid','forward':'confirm','guard':'0xg'}},{'schema':'wf.transition','from':'0xm2::node::paid','to':'0xm2::node::done','payload':{'node':'done','prevNode':'paid','forward':'confirm'}},{'schema':'machine.node','from':'0xm1','to':'0xm1::node::paid'}],b=workflowSubgraphFromEdges(a);expect(b['transitions'])['toHaveLength'](0x2);const c=workflowSubgraphFromEdges(a,'0xm1');expect(c['transitions'])['toHaveLength'](0x1),expect(c['transitions'][0x0])['toMatchObject']({'node':'done','prevNode':'paid','forward':'confirm','guard':'0xg'}),expect([...c['terminalNames']])['toEqual'](['done']);});}),describe('expandTopology\x20—\x20wave\x20BFS\x20over\x20DataPlane',()=>{it('connects\x20F/R/W/S/M\x20edges\x20with\x20dedupe\x20and\x20no\x20per-id\x20fan-out',async()=>{const {graph:a,plane:b}=await buildBuyerGraph(),c=new Set(a['edges']['map'](f=>f['schema']));for(const e of['eoa.order','order.service','order.progress','order.allocation','service.permission','service.machine','service.order_allocator_guard','service.arbitration','machine.permission','progress.machine','machine.node','wf.transition','wf.forward_guard','guard.relies','arb.order','arb.voter','allocation.guard']){expect(c['has'](e),'missing\x20edge\x20'+e)['toBe'](!![]);}const d=a['edges']['filter'](f=>f['schema']==='service.order')['map'](f=>f['to']);expect(new Set(d))['toEqual'](new Set([o1,o2,o4])),expect(a['nodes']['get'](svc)?.['objectType'])['toBe']('Service'),expect(a['edges']['length'])['toBe'](new Set(a['edges']['map'](f=>f['id']))['size']),expect(b['batches']['objects'])['toBeLessThanOrEqual'](0x6),expect(a['gaps'])['toEqual']([]);}),it('resolves\x20completion\x20from\x20the\x20graph;\x20unknown\x20when\x20machine\x20table\x20not\x20expanded',async()=>{const {graph:a}=await buildBuyerGraph();expect(orderCompletionInGraph(a,o1)['status'])['toBe']('completed'),expect(orderCompletionInGraph(a,o2)['status'])['toBe']('in_progress'),expect(orderCompletionInGraph(a,o3)['status'])['toBe']('completed');const b=makePlane(),c=await expandTopology(b,{'network':ENTRYPOINT['Mainnet'],'seed':buyer});expect(orderCompletionInGraph(c,o1)['status'])['toBe']('unknown');}),it('caps\x20per-kind\x20fanout\x20and\x20records\x20truncation;\x20window\x20edges\x20flagged',async()=>{const {graph:a}=await buildBuyerGraph({'perKindCaps':{'eoa.order':0x1}});expect(a['edges']['filter'](b=>b['schema']==='eoa.order'))['toHaveLength'](0x1),expect(a['truncations']['some'](b=>b['schema']==='eoa.order'))['toBe'](!![]),expect(a['edges']['find'](b=>b['schema']==='eoa.order')?.['truncated'])['toBe'](!![]);}),it('fail-soft:\x20missing\x20objects\x20become\x20gaps,\x20build\x20still\x20succeeds',async()=>{const a=makePlane();a['state']['objects']['delete'](mac['toLowerCase']());const b=await expandTopology(a,{'network':ENTRYPOINT['Mainnet'],'seed':buyer,'edges':FULL_EDGES});expect(b['nodes']['get'](mac)?.['state'])['toBe']('error'),expect(b['gaps'])['toContain'](mac),expect(b['edges']['some'](c=>c['schema']==='order.service'))['toBe'](!![]);}),it('enforces\x20maxDepth',async()=>{const {graph:a}=await buildBuyerGraph({'maxDepth':0x1});expect(a['nodes']['has'](o1))['toBe'](!![]),expect(a['nodes']['has'](svc))['toBe'](![]),expect(a['budgetExhausted']['depth'])['toBe'](!![]);});}),describe('DataPlane\x20batching',()=>{it('chunks\x20at\x2050\x20and\x20counts\x20logical\x20RPC\x20batches',async()=>{const a=new FakeDataPlane({});await a['getObjects'](Array['from']({'length':0x65},(b,c)=>obj(0x6,0x3e8+c))),expect(a['batches']['objects'])['toBe'](0x3),await a['getObjects'](Array['from']({'length':0x65},(b,c)=>obj(0x6,0x3e8+c))),expect(a['batches']['objects'])['toBe'](0x3),expect(a['dedupHits'])['toBe'](0x65);});}),describe('viewport',()=>{it('buyer\x20never\x20sees\x20other\x20customers\x20through\x20service.order',async()=>{const {graph:a}=await buildBuyerGraph(),b=buildViewport(a,buyer,'buyer');expect(b['visibleNodes']['has'](o1))['toBe'](!![]),expect(b['visibleNodes']['has'](svc))['toBe'](!![]),expect(b['visibleNodes']['has'](o4))['toBe'](![]),expect(b['visibleNodes']['has'](otherBuyer))['toBe'](![]),expect(b['visibleEdges']['some'](c=>c['schema']==='service.order'))['toBe'](![]);}),it('merchant\x20sees\x20shop\x20orders\x20and\x20their\x20parties',async()=>{const {graph:a}=await buildBuyerGraph(),b=buildViewport(a,merchant,'merchant');expect(b['visibleNodes']['has'](perm))['toBe'](!![]),expect(b['visibleNodes']['has'](svc))['toBe'](!![]),expect(b['visibleNodes']['has'](o4))['toBe'](!![]),expect(b['visibleNodes']['has'](otherBuyer))['toBe'](!![]),expect(b['visibleNodes']['has'](collaborator))['toBe'](!![]),expect(b['visibleEdges']['some'](c=>c['schema']==='service.order'))['toBe'](!![]);}),it('neutral\x20role\x20sees\x20the\x20full\x20canon\x20graph',async()=>{const {graph:a}=await buildBuyerGraph(),b=buildViewport(a,buyer,'neutral');expect(b['visibleNodes']['size'])['toBe'](a['nodes']['size']);});}),describe('edge\x20schema\x20registry',()=>{it('covers\x20the\x20core\x20commercial\x20object\x20types',()=>{for(const a of['Service','Order','Machine','Progress','Payment','Allocation','Arbitration','Arb','Permission','Guard','Demand','Reward','Contact','Treasury']){expect(COVERED_OBJECT_TYPES)['toContain'](a);}});}),describe('EdgeSchema.contract\x20—\x20field\x20mutability\x20ground\x20truth',()=>{const a=['service.machine','service.buy_guard','service.arbitration','service.reward','service.repository','progress.machine','progress.task','machine.consensus_repository','machine.node','allocation.guard'];it('marks\x20exactly\x20the\x20address-field\x20edges\x20with\x20mutability\x20metadata',()=>{const b=EDGE_SCHEMAS['filter'](c=>c['contract'])['map'](c=>c['id'])['sort']();expect(b)['toEqual']([...a]['sort']());}),it('carries\x20the\x20publish-freeze\x20distinction\x20(machine\x20frozen,\x20buy_guard\x20mutable)',()=>{const b=EDGE_SCHEMAS['find'](d=>d['id']==='service.machine')['contract'];expect(b['frozenWhen'])['toBe']('after\x20publish'),expect(b['forbiddenActions'])['toContain']('set'),expect(b['unfreeze'])['toBeNull']();const c=EDGE_SCHEMAS['find'](d=>d['id']==='service.buy_guard')['contract'];expect(c['frozenWhen'])['toBeNull'](),expect(c['allowedActions'])['toContain']('set');}),it('derives\x20the\x20knowledge\x20field-rule\x20table\x20without\x20duplicating\x20facts',()=>{expect(fieldMutabilityOf('Service','machine')?.['frozen_when'])['toBe']('after\x20publish'),expect(fieldMutabilityOf('Machine','nodes')?.['forbidden_actions'])['toContain']('update'),expect(fieldMutabilityOf('Allocation','allocators')?.['frozen_when'])['toBe']('after\x20create\x20(share)'),expect(EDGE_SCHEMAS['find'](c=>c['id']==='allocation.guard')['contract']['field'])['toBe']('allocators');const b=FIELD_MUTABILITY_RULES['map'](c=>c['object_type']+'.'+c['field']);expect(new Set(b)['size'])['toBe'](b['length']),expect(FIELD_MUTABILITY_RULES)['toHaveLength'](0x14),expect(isActionForbidden('Service','machine','set',!![]))['toBe'](!![]),expect(isActionForbidden('Service','machine','set',![]))['toBe'](![]),expect(isActionForbidden('Service','buy_guard','set',!![]))['toBe'](![]);});});
1
+ import{describe,expect,it}from'vitest';import{ENTRYPOINT}from'@wowok/wowok';import{FakeDataPlane}from'./dataplane.js';import{expandTopology,orderCompletionInGraph}from'./expand.js';import{extractObjectEdges,extractReverseRefs,extractTableRefs}from'./extract.js';import{annotateNodeName,deriveOrderCompletion,terminalNamesOfEdges,terminalNamesOfRows,workflowSubgraphFromRows,workflowSubgraphFromEdges}from'./order-status.js';import{COVERED_OBJECT_TYPES,EDGE_SCHEMAS}from'./edge-schema.js';import{FIELD_MUTABILITY_RULES,fieldMutabilityOf,isActionForbidden}from'../../knowledge/contract-invariants.js';import{buildViewport}from'./viewport.js';function mk(a,b){return'0x'+a['toString'](0x10)['padStart'](0x2,'0')+b['toString'](0x10)['padStart'](0x3e,'0');}const eoa=a=>mk(0x0,a),obj=(a,b)=>mk(0x10+a,b),T_USDT='0x2::wow::coins::USDT',buyer=eoa(0x1),otherBuyer=eoa(0x2),merchant=eoa(0x3),collaborator=eoa(0x4),voter1=eoa(0x5),svc=obj(0x4,0xa),mac=obj(0x5,0xb),o1=obj(0x6,0x15),o2=obj(0x6,0x16),o3=obj(0x6,0x17),o4=obj(0x6,0x18),pr1=obj(0x7,0x1f),pr2=obj(0x7,0x20),pay=obj(0x8,0x29),perm=obj(0x0,0x33),g1=obj(0xa,0x3d),g2=obj(0xa,0x3e),gShip=obj(0xa,0x3f),gOther=obj(0xa,0x45),alloc=obj(0xd,0x47),arbsvc=obj(0x3,0x51),arb=obj(0x2,0x52);function raw(a,b,c,d){return{'object':a,'type':b,'data':c,...d?{'type_raw':d}:{}};}const OBJECTS=[raw(svc,'Service',{'permission':perm,'machine':mac,'arbitrations':[arbsvc],'order_allocators':{'allocators':[{'guard':g1}]}},'0x2::service::Service<'+T_USDT+'>'),raw(o1,'Order',{'builder':buyer,'agent':[],'service':svc,'machine':mac,'progress':pr1,'allocation':alloc,'dispute':[arb]}),raw(o2,'Order',{'builder':buyer,'agent':[],'service':svc,'machine':mac,'progress':pr2,'allocation':alloc,'dispute':[]}),raw(o3,'Order',{'builder':buyer,'agent':[],'service':svc,'dispute':[]}),raw(o4,'Order',{'builder':otherBuyer,'agent':[],'service':svc,'machine':mac,'progress':undefined,'dispute':[]}),raw(mac,'Machine',{'permission':perm,'consensus_repositories':[]}),raw(pr1,'Progress',{'machine':mac,'task':o1,'current':'done'}),raw(pr2,'Progress',{'machine':mac,'task':o2,'current':'shipping'}),raw(alloc,'Allocation',{'allocators':{'threshold':0x1,'allocators':[{'guard':g1,'mode':0x0}]}},'0x2::allocation::Allocation<'+T_USDT+'>'),raw(perm,'Permission',{'admin':[merchant]}),raw(g1,'Guard',{'relies':[g2]}),raw(g2,'Guard',{'relies':[]}),raw(gShip,'Guard',{'relies':[]}),raw(arbsvc,'Arbitration',{'permission':perm,'voting_guard':[{'guard':g1}]}),raw(arb,'Arb',{'order':o1,'arbitration':arbsvc,'voted':[{'voter':voter1,'weight':0x3}]}),raw(pay,'Payment',{'record':[{'recipient':merchant,'amount':'99900'}],'from_object':alloc,'info':{'for_object':o1,'for_guard':g1}},'0x2::payment::Payment<'+T_USDT+'>')];let TABLE_SEQ=0x0;function nodeTableItem(a,b,c){TABLE_SEQ++;const d='0x9'+TABLE_SEQ['toString'](0x10)['padStart'](0x3f,'0');return{'key':a,'objectId':d,'object':raw(d,'TableItem_MachineNode',{'name':b,'value':c})};}function permTableItem(a,b){const c='0x9'+a['slice'](0x2,0x1e)['padEnd'](0x3f,'0')['slice'](0x0,0x3f);return{'key':a,'objectId':c,'object':raw(c,'TableItem_PermissionPerm',{'address':a,'perm':b})};}function makePlane(){const a=[nodeTableItem('start','start',[]),nodeTableItem('shipping','shipping',[{'prev_node':'start','threshold':0x0,'forwards':[{'name':'f_ship','weight':0x1,'guard':gShip}]}]),nodeTableItem('done','done',[{'prev_node':'shipping','threshold':0x0,'forwards':[{'name':'f_done','weight':0x1}]}])],b=new Map(OBJECTS['map'](e=>[e['object']['toLowerCase'](),e])),c=new Map();c['set']('0xaa8',new Map([[buyer,{'items':[{'role':0x1,'order':o1,'time':0x1},{'role':0x2,'order':o2,'time':0x2},{'role':0x1,'order':o3,'time':0x3}]}]])),c['set']('0xaad',new Map([[merchant,{'items':[{'role':0x1,'permission':perm,'time':0x1}]}]])),c['set']('0xaae',new Map([[perm,{'items':[{'who':svc,'time':0x1}]}]])),c['set']('0xaaf',new Map([[svc,{'items':[{'who':o1,'time':0x1},{'who':o2,'time':0x2},{'who':o4,'time':0x3},{'who':gOther,'time':0x4}]}]]));const d=new Map([[mac['toLowerCase'](),a],[perm['toLowerCase'](),[permTableItem(collaborator,[0x1,0x2])]]]);return new FakeDataPlane({'objects':b,'keyedFields':c,'tables':d});}const FULL_EDGES={'tableEdges':['machine.node','permission.entity']};async function buildBuyerGraph(a){const b=makePlane(),c=await expandTopology(b,{'network':ENTRYPOINT['Mainnet'],'seed':buyer,'edges':FULL_EDGES,...a?{'budget':a}:{}});return{'graph':c,'plane':b};}describe('extract\x20—\x20field\x20edges',()=>{it('reads\x20scalar,\x20vector,\x20struct\x20and\x20deep\x20nested\x20refs\x20defensively',()=>{const a=extractObjectEdges('Service',OBJECTS[0x0]),b=new Map(a['map'](c=>[c['schemaId'],c['refs']['map'](d=>d['to'])]));expect(b['get']('service.permission'))['toEqual']([perm]),expect(b['get']('service.machine'))['toEqual']([mac]),expect(b['get']('service.arbitration'))['toEqual']([arbsvc]),expect(b['get']('service.order_allocator_guard'))['toEqual']([g1]);}),it('parses\x20coin\x20type\x20T\x20and\x20money\x20payloads\x20on\x20Payment',()=>{const a=extractObjectEdges('Payment',OBJECTS['find'](d=>d['object']===pay)),b=new Map(a['map'](d=>[d['schemaId'],d])),c=b['get']('payment.recipient')['refs'][0x0];expect(c['to'])['toBe'](merchant),expect(c['payload']?.['amount'])['toBe']('99900'),expect(c['payload']?.['coinType'])['toBe'](T_USDT),expect(b['get']('payment.from_object')['refs'][0x0]['to'])['toBe'](alloc),expect(b['get']('payment.for_guard')['refs'][0x0]['to'])['toBe'](g1);}),it('reverse\x20field\x20shapes:\x20items[]\x20and\x20votes[]\x20with\x20role/vote\x20payloads',()=>{const a=extractReverseRefs('0xaa8',{'items':[{'role':0x3,'order':o1}]});expect(a[0x0]['refs'][0x0]['payload']?.['roleBits'])['toBe'](0x3);const b=extractReverseRefs('0xaaa',{'votes':[{'who':voter1,'like':!![],'favor':!![]}]});expect(b[0x0]['refs'][0x0]['payload']?.['voteBits'])['toBe'](0x2|0x8);}),it('machine\x20table\x20rows\x20produce\x20node\x20+\x20transition\x20+\x20guard\x20edges',()=>{const a=makePlane()['state']['tables']['get'](mac['toLowerCase']()),b=extractTableRefs('MachineNode',mac,a),c=new Map(b['map'](e=>[e['schemaId'],e['refs']]));expect(c['get']('machine.node')?.['length'])['toBe'](0x3);const d=c['get']('wf.transition');expect(d['map'](e=>[e['from']['includes']('start'),e['to']['includes']('shipping')]))['toContainEqual']([!![],!![]]),expect(c['get']('wf.forward_guard')?.[0x0]['to'])['toBe'](gShip);});}),describe('order-status\x20—\x20structural\x20authority',()=>{it('terminal\x20=\x20names\x20never\x20appearing\x20as\x20prev_node',()=>{const a=terminalNamesOfEdges([{'node':'shipping','prev_node':'start'},{'node':'done','prev_node':'shipping'}]);expect([...a])['toEqual'](['done']),expect([...terminalNamesOfRows([{'name':'a','value':[]},{'name':'b','value':[{'prev_node':'a'}]}])])['toEqual'](['b']);}),it('four\x20completion\x20states',()=>{const a=new Set(['done']);expect(deriveOrderCompletion({'machine':null})['status'])['toBe']('completed'),expect(deriveOrderCompletion({'machine':mac,'progress':null})['status'])['toBe']('in_progress'),expect(deriveOrderCompletion({'machine':mac,'progress':pr1,'currentNode':'shipping','terminalNames':a})['status'])['toBe']('in_progress'),expect(deriveOrderCompletion({'machine':mac,'progress':pr1,'currentNode':'done','terminalNames':a})['status'])['toBe']('completed'),expect(deriveOrderCompletion({'machine':mac,'progress':pr1,'currentNode':'done','terminalNames':null})['status'])['toBe']('unknown');}),it('name\x20vocabulary\x20is\x20annotation\x20only',()=>{expect(annotateNodeName('order_refunded'))['toBe']('refund'),expect(annotateNodeName('dispute_node'))['toBe']('exception'),expect(annotateNodeName('shipping'))['toBeNull']();}),it('workflowSubgraphFromRows\x20flattens\x20pairs/forwards\x20and\x20keeps\x20structural\x20terminals',()=>{const a=workflowSubgraphFromRows([{'name':'shipped','value':[{'prev_node':'paid','threshold':0x2,'forwards':[{'name':'ship','guard':{'guard':'0xg','retained_submission':[]},'weight':0x1},{'name':'airdrop','namedOperator':'op','permissionIndex':0x3}]}]},{'name':'done','value':[{'prev_node':'shipped','forwards':[{'name':'confirm'}]}]}],'0xm');expect(a['machine'])['toBe']('0xm'),expect(a['transitions']['map'](b=>b['prevNode']+'>'+b['forward']+'>'+b['node']))['toEqual'](['paid>ship>shipped','paid>airdrop>shipped','shipped>confirm>done']),expect(a['transitions'][0x0]['guard'])['toBe']('0xg'),expect(a['transitions'][0x0]['threshold'])['toBe'](0x2),expect(a['transitions'][0x1]['namedOperator'])['toBe']('op'),expect(a['transitions'][0x1]['permissionIndex'])['toBe'](0x3),expect([...a['terminalNames']])['toEqual'](['done']);}),it('workflowSubgraphFromEdges\x20reads\x20wf.transition\x20payloads\x20and\x20filters\x20by\x20machine',()=>{const a=[{'schema':'wf.transition','from':'0xm1::node::paid','to':'0xm1::node::done','payload':{'node':'done','prevNode':'paid','forward':'confirm','guard':'0xg'}},{'schema':'wf.transition','from':'0xm2::node::paid','to':'0xm2::node::done','payload':{'node':'done','prevNode':'paid','forward':'confirm'}},{'schema':'machine.node','from':'0xm1','to':'0xm1::node::paid'}],b=workflowSubgraphFromEdges(a);expect(b['transitions'])['toHaveLength'](0x2);const c=workflowSubgraphFromEdges(a,'0xm1');expect(c['transitions'])['toHaveLength'](0x1),expect(c['transitions'][0x0])['toMatchObject']({'node':'done','prevNode':'paid','forward':'confirm','guard':'0xg'}),expect([...c['terminalNames']])['toEqual'](['done']);});}),describe('expandTopology\x20—\x20wave\x20BFS\x20over\x20DataPlane',()=>{it('connects\x20F/R/W/S/M\x20edges\x20with\x20dedupe\x20and\x20no\x20per-id\x20fan-out',async()=>{const {graph:a,plane:b}=await buildBuyerGraph(),c=new Set(a['edges']['map'](f=>f['schema']));for(const e of['eoa.order','order.service','order.progress','order.allocation','service.permission','service.machine','service.order_allocator_guard','service.arbitration','machine.permission','progress.machine','machine.node','wf.transition','wf.forward_guard','guard.relies','arb.order','arb.voter','allocation.guard']){expect(c['has'](e),'missing\x20edge\x20'+e)['toBe'](!![]);}const d=a['edges']['filter'](f=>f['schema']==='service.order')['map'](f=>f['to']);expect(new Set(d))['toEqual'](new Set([o1,o2,o4])),expect(a['nodes']['get'](svc)?.['objectType'])['toBe']('Service'),expect(a['edges']['length'])['toBe'](new Set(a['edges']['map'](f=>f['id']))['size']),expect(b['batches']['objects'])['toBeLessThanOrEqual'](0x6),expect(a['gaps'])['toEqual']([]);}),it('resolves\x20completion\x20from\x20the\x20graph;\x20unknown\x20when\x20machine\x20table\x20not\x20expanded',async()=>{const {graph:a}=await buildBuyerGraph();expect(orderCompletionInGraph(a,o1)['status'])['toBe']('completed'),expect(orderCompletionInGraph(a,o2)['status'])['toBe']('in_progress'),expect(orderCompletionInGraph(a,o3)['status'])['toBe']('completed');const b=makePlane(),c=await expandTopology(b,{'network':ENTRYPOINT['Mainnet'],'seed':buyer});expect(orderCompletionInGraph(c,o1)['status'])['toBe']('unknown');}),it('caps\x20per-kind\x20fanout\x20and\x20records\x20truncation;\x20window\x20edges\x20flagged',async()=>{const {graph:a}=await buildBuyerGraph({'perKindCaps':{'eoa.order':0x1}});expect(a['edges']['filter'](b=>b['schema']==='eoa.order'))['toHaveLength'](0x1),expect(a['truncations']['some'](b=>b['schema']==='eoa.order'))['toBe'](!![]),expect(a['edges']['find'](b=>b['schema']==='eoa.order')?.['truncated'])['toBe'](!![]);}),it('fail-soft:\x20missing\x20objects\x20become\x20gaps,\x20build\x20still\x20succeeds',async()=>{const a=makePlane();a['state']['objects']['delete'](mac['toLowerCase']());const b=await expandTopology(a,{'network':ENTRYPOINT['Mainnet'],'seed':buyer,'edges':FULL_EDGES});expect(b['nodes']['get'](mac)?.['state'])['toBe']('error'),expect(b['gaps'])['toContain'](mac),expect(b['edges']['some'](c=>c['schema']==='order.service'))['toBe'](!![]);}),it('enforces\x20maxDepth',async()=>{const {graph:a}=await buildBuyerGraph({'maxDepth':0x1});expect(a['nodes']['has'](o1))['toBe'](!![]),expect(a['nodes']['has'](svc))['toBe'](![]),expect(a['budgetExhausted']['depth'])['toBe'](!![]);});}),describe('DataPlane\x20batching',()=>{it('chunks\x20at\x2050\x20and\x20counts\x20logical\x20RPC\x20batches',async()=>{const a=new FakeDataPlane({});await a['getObjects'](Array['from']({'length':0x65},(b,c)=>obj(0x6,0x3e8+c))),expect(a['batches']['objects'])['toBe'](0x3),await a['getObjects'](Array['from']({'length':0x65},(b,c)=>obj(0x6,0x3e8+c))),expect(a['batches']['objects'])['toBe'](0x3),expect(a['dedupHits'])['toBe'](0x65);});}),describe('viewport',()=>{it('buyer\x20never\x20sees\x20other\x20customers\x20through\x20service.order',async()=>{const {graph:a}=await buildBuyerGraph(),b=buildViewport(a,buyer,'buyer');expect(b['visibleNodes']['has'](o1))['toBe'](!![]),expect(b['visibleNodes']['has'](svc))['toBe'](!![]),expect(b['visibleNodes']['has'](o4))['toBe'](![]),expect(b['visibleNodes']['has'](otherBuyer))['toBe'](![]),expect(b['visibleEdges']['some'](c=>c['schema']==='service.order'))['toBe'](![]);}),it('merchant\x20sees\x20shop\x20orders\x20and\x20their\x20parties',async()=>{const {graph:a}=await buildBuyerGraph(),b=buildViewport(a,merchant,'merchant');expect(b['visibleNodes']['has'](perm))['toBe'](!![]),expect(b['visibleNodes']['has'](svc))['toBe'](!![]),expect(b['visibleNodes']['has'](o4))['toBe'](!![]),expect(b['visibleNodes']['has'](otherBuyer))['toBe'](!![]),expect(b['visibleNodes']['has'](collaborator))['toBe'](!![]),expect(b['visibleEdges']['some'](c=>c['schema']==='service.order'))['toBe'](!![]);}),it('neutral\x20role\x20sees\x20the\x20full\x20canon\x20graph',async()=>{const {graph:a}=await buildBuyerGraph(),b=buildViewport(a,buyer,'neutral');expect(b['visibleNodes']['size'])['toBe'](a['nodes']['size']);});}),describe('edge\x20schema\x20registry',()=>{it('covers\x20the\x20core\x20commercial\x20object\x20types',()=>{for(const a of['Service','Order','Machine','Progress','Payment','Allocation','Arbitration','Arb','Permission','Guard','Demand','Reward','Contact','Treasury']){expect(COVERED_OBJECT_TYPES)['toContain'](a);}});}),describe('EdgeSchema.contract\x20—\x20field\x20mutability\x20ground\x20truth',()=>{const a=['service.machine','service.buy_guard','service.arbitration','service.reward','service.repository','progress.machine','progress.task','machine.consensus_repository','machine.node','allocation.guard','permission.owner','contact.im','payment.signer'];it('marks\x20exactly\x20the\x20address-field\x20edges\x20with\x20mutability\x20metadata',()=>{const b=EDGE_SCHEMAS['filter'](c=>c['contract'])['map'](c=>c['id'])['sort']();expect(b)['toEqual']([...a]['sort']());}),it('carries\x20the\x20publish-freeze\x20distinction\x20(machine\x20frozen,\x20buy_guard\x20mutable)',()=>{const b=EDGE_SCHEMAS['find'](d=>d['id']==='service.machine')['contract'];expect(b['frozenWhen'])['toBe']('after\x20publish'),expect(b['forbiddenActions'])['toContain']('set'),expect(b['unfreeze'])['toBeNull']();const c=EDGE_SCHEMAS['find'](d=>d['id']==='service.buy_guard')['contract'];expect(c['frozenWhen'])['toBeNull'](),expect(c['allowedActions'])['toContain']('set');}),it('derives\x20the\x20knowledge\x20field-rule\x20table\x20without\x20duplicating\x20facts',()=>{expect(fieldMutabilityOf('Service','machine')?.['frozen_when'])['toBe']('after\x20publish'),expect(fieldMutabilityOf('Machine','nodes')?.['forbidden_actions'])['toContain']('update'),expect(fieldMutabilityOf('Allocation','allocators')?.['frozen_when'])['toBe']('after\x20create\x20(share)'),expect(EDGE_SCHEMAS['find'](c=>c['id']==='allocation.guard')['contract']['field'])['toBe']('allocators');const b=FIELD_MUTABILITY_RULES['map'](c=>c['object_type']+'.'+c['field']);expect(new Set(b)['size'])['toBe'](b['length']),expect(FIELD_MUTABILITY_RULES)['toHaveLength'](0x17),expect(isActionForbidden('Service','machine','set',!![]))['toBe'](!![]),expect(isActionForbidden('Service','machine','set',![]))['toBe'](![]),expect(isActionForbidden('Service','buy_guard','set',!![]))['toBe'](![]);});}),describe('expand\x20—\x20per-schema\x20hop\x20cap',()=>{const a=obj(0xa,0x5b),b=obj(0xa,0x5c),c=obj(0xa,0x5d),d=obj(0xa,0x5e);function e(){const f=new Map([raw(a,'Guard',{'relies':[b,d]}),raw(b,'Guard',{'relies':[c,d]}),raw(c,'Guard',{'relies':[]}),raw(d,'Guard',{'relies':[]})]['map'](g=>[g['object']['toLowerCase'](),g]));return new FakeDataPlane({'objects':f,'keyedFields':new Map(),'tables':new Map()});}it('cuts\x20guard.relies\x20beyond\x20one\x20hop,\x20keeps\x20closure\x20edges,\x20reports\x20schema_hops',async()=>{const f=await expandTopology(e(),{'network':ENTRYPOINT['Mainnet'],'seed':a}),g=f['edges']['filter'](i=>i['schema']==='guard.relies'),h=(i,j)=>g['some'](k=>k['from']===i&&k['to']===j);expect(h(a,b))['toBe'](!![]),expect(h(a,d))['toBe'](!![]),expect(h(b,d))['toBe'](!![]),expect(h(b,c))['toBe'](![]),expect(f['nodes']['has'](c))['toBe'](![]),expect(f['truncations'])['toEqual']([{'nodeId':b,'schema':'guard.relies','observed':0x1,'limit':0x1,'reason':'schema_hops'}]),expect(f['gaps'])['toEqual']([]);}),it('declares\x20maxHops=1\x20on\x20guard.relies\x20and\x20nowhere\x20else',()=>{const f=EDGE_SCHEMAS['filter'](g=>g['maxHops']!==undefined)['map'](g=>g['id']);expect(f)['toEqual'](['guard.relies']);});});
@@ -0,0 +1,8 @@
1
+ import type { FindingExposure, FindingSeverity } from "./types.js";
2
+ import { type Facts } from "../../config/rule-engine.js";
3
+ export interface GraphFindingPolicy {
4
+ enabled: boolean;
5
+ severity: FindingSeverity | null;
6
+ exposure?: FindingExposure;
7
+ }
8
+ export declare function graphFindingPolicy(ruleId: string, facts: Facts): GraphFindingPolicy;
@@ -0,0 +1 @@
1
+ import{evaluateRuleBook}from'../../config/rule-engine.js';import{policyJudgmentDoc}from'../../config/judgment.js';const GRAPH_DOMAIN='graph';export function graphFindingPolicy(a,b){try{const c=policyJudgmentDoc()['rules']?.['domains']?.[GRAPH_DOMAIN]?.['rules']['find'](g=>g['rule_id']===a);if(!c)return{'enabled':!![],'severity':null};if(c['enabled']===![])return{'enabled':![],'severity':null};const {findings:d}=evaluateRuleBook([c],{'kernel_fired':!![],...b});if(d['length']===0x0)return{'enabled':!![],'severity':null};const e=d[0x0];return{'enabled':!![],'severity':e['level'],...e['exposure']?{'exposure':e['exposure']}:{}};}catch{return{'enabled':!![],'severity':null};}}