@wowok/agent-mcp 3.1.3 → 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 (379) 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/severity.d.ts +7 -0
  16. package/dist/config/severity.js +1 -0
  17. package/dist/customer/order-monitor.d.ts +3 -1
  18. package/dist/customer/order-monitor.js +1 -1
  19. package/dist/evaluation/acceptance.d.ts +1 -0
  20. package/dist/evaluation/acceptance.js +1 -1
  21. package/dist/evaluation/arbitration-game.js +1 -1
  22. package/dist/evaluation/builtins/demand-match.js +1 -1
  23. package/dist/evaluation/builtins/graph-service.js +1 -1
  24. package/dist/evaluation/builtins/graph-service.spec.js +1 -1
  25. package/dist/evaluation/engine.js +1 -1
  26. package/dist/evaluation/game-strategy.d.ts +2 -2
  27. package/dist/evaluation/game-strategy.js +1 -1
  28. package/dist/evaluation/match-operation.d.ts +2 -2
  29. package/dist/evaluation/match-operation.js +1 -1
  30. package/dist/evaluation/standards.d.ts +3 -25
  31. package/dist/evaluation/standards.js +1 -1
  32. package/dist/evaluation/types.d.ts +2 -1
  33. package/dist/experience/realtime-feedback.js +1 -1
  34. package/dist/extensions/business-modules.js +1 -1
  35. package/dist/extensions/custom-registry-file.js +1 -1
  36. package/dist/extensions/industry-audit.spec.d.ts +1 -0
  37. package/dist/extensions/industry-audit.spec.js +1 -0
  38. package/dist/extensions/industry-layers.d.ts +8 -0
  39. package/dist/extensions/industry-layers.js +1 -1
  40. package/dist/extensions/industry-pack.d.ts +2 -0
  41. package/dist/extensions/industry-pack.js +1 -1
  42. package/dist/extensions/mode-evaluator.js +1 -1
  43. package/dist/extensions/modes.js +1 -1
  44. package/dist/graph/onchain/analyze.d.ts +3 -1
  45. package/dist/graph/onchain/analyze.js +1 -1
  46. package/dist/graph/onchain/analyze.spec.js +1 -1
  47. package/dist/graph/onchain/edge-schema.d.ts +1 -0
  48. package/dist/graph/onchain/edge-schema.js +1 -1
  49. package/dist/graph/onchain/expand.js +1 -1
  50. package/dist/graph/onchain/exploration.d.ts +28 -0
  51. package/dist/graph/onchain/exploration.js +1 -0
  52. package/dist/graph/onchain/exploration.spec.d.ts +1 -0
  53. package/dist/graph/onchain/exploration.spec.js +1 -0
  54. package/dist/graph/onchain/exposure.d.ts +18 -0
  55. package/dist/graph/onchain/exposure.js +1 -0
  56. package/dist/graph/onchain/exposure.spec.d.ts +1 -0
  57. package/dist/graph/onchain/exposure.spec.js +1 -0
  58. package/dist/graph/onchain/graph-policy.spec.d.ts +1 -0
  59. package/dist/graph/onchain/graph-policy.spec.js +1 -0
  60. package/dist/graph/onchain/index.d.ts +6 -0
  61. package/dist/graph/onchain/index.js +1 -1
  62. package/dist/graph/onchain/interest.js +1 -1
  63. package/dist/graph/onchain/interest.spec.js +1 -1
  64. package/dist/graph/onchain/names.js +1 -1
  65. package/dist/graph/onchain/names.spec.js +1 -1
  66. package/dist/graph/onchain/policy.d.ts +8 -0
  67. package/dist/graph/onchain/policy.js +1 -0
  68. package/dist/graph/onchain/proposal-graph.js +1 -1
  69. package/dist/graph/onchain/proposal-graph.spec.js +1 -1
  70. package/dist/graph/onchain/synthesis.d.ts +20 -0
  71. package/dist/graph/onchain/synthesis.js +1 -0
  72. package/dist/graph/onchain/synthesis.spec.d.ts +1 -0
  73. package/dist/graph/onchain/synthesis.spec.js +1 -0
  74. package/dist/graph/onchain/types.d.ts +11 -1
  75. package/dist/keeper/keeper.spec.js +1 -1
  76. package/dist/knowledge/alloc-audit-policy.spec.d.ts +1 -0
  77. package/dist/knowledge/alloc-audit-policy.spec.js +1 -0
  78. package/dist/knowledge/allocation-ledger.js +1 -1
  79. package/dist/knowledge/allocation-puzzle.d.ts +1 -1
  80. package/dist/knowledge/allocation-puzzle.js +1 -1
  81. package/dist/knowledge/allocation-risk.d.ts +4 -1
  82. package/dist/knowledge/allocation-risk.js +1 -1
  83. package/dist/knowledge/allocation-templates.js +1 -1
  84. package/dist/knowledge/arb-risk.d.ts +6 -5
  85. package/dist/knowledge/arb-risk.js +1 -1
  86. package/dist/knowledge/arbitration-ledger.d.ts +4 -4
  87. package/dist/knowledge/arbitration-ledger.js +1 -1
  88. package/dist/knowledge/arbitration-puzzle.d.ts +1 -1
  89. package/dist/knowledge/arbitration-puzzle.js +1 -1
  90. package/dist/knowledge/arbitration-risk.d.ts +4 -1
  91. package/dist/knowledge/arbitration-risk.js +1 -1
  92. package/dist/knowledge/arbitration-templates.js +1 -1
  93. package/dist/knowledge/baselines/judgment-baselines.json +289 -0
  94. package/dist/knowledge/baselines/risk-baselines.spec.js +1 -1
  95. package/dist/knowledge/baselines/rules/alloc_audit.json +290 -0
  96. package/dist/knowledge/baselines/rules/allocation.json +492 -0
  97. package/dist/knowledge/baselines/rules/arb.json +155 -0
  98. package/dist/knowledge/baselines/rules/arbitration.json +366 -0
  99. package/dist/knowledge/baselines/rules/bridge.json +197 -0
  100. package/dist/knowledge/baselines/rules/contact.json +152 -0
  101. package/dist/knowledge/baselines/rules/demand.json +158 -0
  102. package/dist/knowledge/baselines/rules/graph.json +453 -0
  103. package/dist/knowledge/baselines/rules/guard.json +981 -0
  104. package/dist/knowledge/baselines/rules/machine.json +706 -0
  105. package/dist/knowledge/baselines/rules/order.json +549 -0
  106. package/dist/knowledge/baselines/rules/payment.json +205 -0
  107. package/dist/knowledge/baselines/rules/permission.json +330 -0
  108. package/dist/knowledge/baselines/rules/personal.json +139 -0
  109. package/dist/knowledge/baselines/rules/progress.json +346 -0
  110. package/dist/knowledge/baselines/rules/proof.json +158 -0
  111. package/dist/knowledge/baselines/rules/registrar.json +159 -0
  112. package/dist/knowledge/baselines/rules/repository.json +244 -0
  113. package/dist/knowledge/baselines/rules/resource.json +117 -0
  114. package/dist/knowledge/baselines/rules/reward.json +471 -0
  115. package/dist/knowledge/baselines/rules/service.json +595 -0
  116. package/dist/knowledge/baselines/rules/treasury.json +440 -0
  117. package/dist/knowledge/baselines/rules/util.json +101 -0
  118. package/dist/knowledge/bridge-risk.d.ts +6 -5
  119. package/dist/knowledge/bridge-risk.js +1 -1
  120. package/dist/knowledge/builtin-templates.d.ts +26 -0
  121. package/dist/knowledge/builtin-templates.js +1 -0
  122. package/dist/knowledge/contact-risk.d.ts +6 -5
  123. package/dist/knowledge/contact-risk.js +1 -1
  124. package/dist/knowledge/demand-risk.d.ts +6 -5
  125. package/dist/knowledge/demand-risk.js +1 -1
  126. package/dist/knowledge/event-semantics.js +1 -1
  127. package/dist/knowledge/facts-sync.spec.d.ts +1 -0
  128. package/dist/knowledge/facts-sync.spec.js +1 -0
  129. package/dist/knowledge/getting-started.js +1 -1
  130. package/dist/knowledge/guard-design-patterns.js +1 -1
  131. package/dist/knowledge/guard-field-cognition.d.ts +1 -1
  132. package/dist/knowledge/guard-field-cognition.js +1 -1
  133. package/dist/knowledge/guard-ledger.js +1 -1
  134. package/dist/knowledge/guard-risk.d.ts +4 -1
  135. package/dist/knowledge/guard-risk.js +1 -1
  136. package/dist/knowledge/guard-templates.js +1 -1
  137. package/dist/knowledge/guard-translation.js +1 -1
  138. package/dist/knowledge/index.d.ts +10 -2
  139. package/dist/knowledge/index.js +1 -1
  140. package/dist/knowledge/industry-registry.js +1 -1
  141. package/dist/knowledge/industry-strategy.js +1 -1
  142. package/dist/knowledge/jsonrpc-enum.js +1 -1
  143. package/dist/knowledge/machine-ledger.js +1 -1
  144. package/dist/knowledge/machine-risk.d.ts +4 -1
  145. package/dist/knowledge/machine-risk.js +1 -1
  146. package/dist/knowledge/machine-templates.js +1 -1
  147. package/dist/knowledge/machine-translation.js +1 -1
  148. package/dist/knowledge/migration-preflight.js +1 -1
  149. package/dist/knowledge/operation-dictionary.js +1 -1
  150. package/dist/knowledge/order-ledger.js +1 -1
  151. package/dist/knowledge/order-puzzle.d.ts +3 -3
  152. package/dist/knowledge/order-puzzle.js +1 -1
  153. package/dist/knowledge/order-risk.d.ts +6 -3
  154. package/dist/knowledge/order-risk.js +1 -1
  155. package/dist/knowledge/order-templates.js +1 -1
  156. package/dist/knowledge/passport-ledger.js +1 -1
  157. package/dist/knowledge/passport-templates.js +1 -1
  158. package/dist/knowledge/payment-risk.d.ts +8 -6
  159. package/dist/knowledge/payment-risk.js +1 -1
  160. package/dist/knowledge/payment-tracker.js +1 -1
  161. package/dist/knowledge/permission-ledger.js +1 -1
  162. package/dist/knowledge/permission-puzzle.d.ts +12 -12
  163. package/dist/knowledge/permission-puzzle.js +1 -1
  164. package/dist/knowledge/permission-risk.d.ts +4 -7
  165. package/dist/knowledge/permission-risk.js +1 -1
  166. package/dist/knowledge/permission-templates.js +1 -1
  167. package/dist/knowledge/personal-risk.d.ts +6 -5
  168. package/dist/knowledge/personal-risk.js +1 -1
  169. package/dist/knowledge/progress-ledger.js +1 -1
  170. package/dist/knowledge/progress-puzzle.d.ts +2 -2
  171. package/dist/knowledge/progress-puzzle.js +1 -1
  172. package/dist/knowledge/progress-risk.d.ts +4 -1
  173. package/dist/knowledge/progress-risk.js +1 -1
  174. package/dist/knowledge/progress-templates.js +1 -1
  175. package/dist/knowledge/proof-risk.d.ts +6 -5
  176. package/dist/knowledge/proof-risk.js +1 -1
  177. package/dist/knowledge/puzzle-projections.js +1 -1
  178. package/dist/knowledge/recipient-constraint.d.ts +20 -1
  179. package/dist/knowledge/recipient-constraint.js +1 -1
  180. package/dist/knowledge/registrar-risk.d.ts +6 -5
  181. package/dist/knowledge/registrar-risk.js +1 -1
  182. package/dist/knowledge/repository-risk.d.ts +7 -6
  183. package/dist/knowledge/repository-risk.js +1 -1
  184. package/dist/knowledge/resource-risk.d.ts +6 -5
  185. package/dist/knowledge/resource-risk.js +1 -1
  186. package/dist/knowledge/reward-ledger.d.ts +1 -1
  187. package/dist/knowledge/reward-ledger.js +1 -1
  188. package/dist/knowledge/reward-puzzle.d.ts +2 -2
  189. package/dist/knowledge/reward-puzzle.js +1 -1
  190. package/dist/knowledge/reward-risk.d.ts +4 -1
  191. package/dist/knowledge/reward-risk.js +1 -1
  192. package/dist/knowledge/rule-node-analyzers.spec.js +1 -1
  193. package/dist/knowledge/rule-outcome.js +1 -1
  194. package/dist/knowledge/scenario-modes.d.ts +2 -2
  195. package/dist/knowledge/scenario-modes.js +1 -1
  196. package/dist/knowledge/scenario-topology.js +1 -1
  197. package/dist/knowledge/service-allocator-audit-node.js +1 -1
  198. package/dist/knowledge/service-ledger.js +1 -1
  199. package/dist/knowledge/service-puzzle.d.ts +2 -2
  200. package/dist/knowledge/service-puzzle.js +1 -1
  201. package/dist/knowledge/service-risk-node.js +1 -1
  202. package/dist/knowledge/service-risk.d.ts +4 -1
  203. package/dist/knowledge/service-risk.js +1 -1
  204. package/dist/knowledge/service-templates.js +1 -1
  205. package/dist/knowledge/strategy-manuals.d.ts +1 -1
  206. package/dist/knowledge/strategy-manuals.js +1 -1
  207. package/dist/knowledge/template-loader.d.ts +84 -0
  208. package/dist/knowledge/template-loader.js +1 -0
  209. package/dist/knowledge/template-loader.spec.d.ts +1 -0
  210. package/dist/knowledge/template-loader.spec.js +1 -0
  211. package/dist/knowledge/template-registry.js +1 -1
  212. package/dist/knowledge/template-scanner.d.ts +17 -0
  213. package/dist/knowledge/template-scanner.js +1 -0
  214. package/dist/knowledge/template-scanner.spec.d.ts +1 -0
  215. package/dist/knowledge/template-scanner.spec.js +1 -0
  216. package/dist/knowledge/tools-reference.js +1 -1
  217. package/dist/knowledge/treasury-ledger.d.ts +1 -1
  218. package/dist/knowledge/treasury-ledger.js +1 -1
  219. package/dist/knowledge/treasury-puzzle.d.ts +3 -3
  220. package/dist/knowledge/treasury-puzzle.js +1 -1
  221. package/dist/knowledge/treasury-risk.d.ts +4 -1
  222. package/dist/knowledge/treasury-risk.js +1 -1
  223. package/dist/knowledge/treasury-templates.js +1 -1
  224. package/dist/knowledge/util-risk.d.ts +6 -5
  225. package/dist/knowledge/util-risk.js +1 -1
  226. package/dist/knowledge/workflow-guidance.d.ts +4 -0
  227. package/dist/knowledge/workflow-guidance.js +1 -1
  228. package/dist/knowledge/workspace-lists.js +1 -1
  229. package/dist/monitor/MonitorLoop.js +1 -1
  230. package/dist/participation/arbitrator-interest.js +1 -1
  231. package/dist/participation/radar-core.js +1 -1
  232. package/dist/persona/analyzer.js +1 -1
  233. package/dist/persona/index.js +1 -1
  234. package/dist/persona/model.js +1 -1
  235. package/dist/persona/persona-audit.spec.d.ts +1 -0
  236. package/dist/persona/persona-audit.spec.js +1 -0
  237. package/dist/persona/types.d.ts +2 -0
  238. package/dist/playbooks/service-build/business-puzzle.js +1 -1
  239. package/dist/playbooks/service-build/facet-money.d.ts +11 -0
  240. package/dist/playbooks/service-build/facet-money.js +1 -1
  241. package/dist/playbooks/service-build/machine-panorama.d.ts +17 -0
  242. package/dist/playbooks/service-build/machine-panorama.js +1 -1
  243. package/dist/playbooks/service-build/merchant-guide.d.ts +2 -2
  244. package/dist/playbooks/service-build/migration-planner.d.ts +43 -0
  245. package/dist/playbooks/service-build/migration-planner.js +1 -0
  246. package/dist/playbooks/service-build/object-panorama.d.ts +42 -1
  247. package/dist/playbooks/service-build/object-panorama.js +1 -1
  248. package/dist/playbooks/service-build/participation-radar.js +1 -1
  249. package/dist/playbooks/service-build/pipeline-actions.d.ts +1 -1
  250. package/dist/playbooks/service-build/reverse-mapping.d.ts +1 -0
  251. package/dist/playbooks/service-build/reverse-mapping.js +1 -1
  252. package/dist/playbooks/service-build/risk-aggregator.d.ts +2 -1
  253. package/dist/playbooks/service-build/risk-aggregator.js +1 -1
  254. package/dist/playbooks/service-build/semantic-graph.js +1 -1
  255. package/dist/playbooks/service-build/service-panorama.d.ts +53 -1
  256. package/dist/playbooks/service-build/service-panorama.js +1 -1
  257. package/dist/playbooks/service-build/topology-evaluation.spec.js +1 -1
  258. package/dist/playbooks/service-build/topology-query.js +1 -1
  259. package/dist/playbooks/service-build/workflow-design-assessment.d.ts +2 -2
  260. package/dist/playbooks/service-build/workflow-design-assessment.js +1 -1
  261. package/dist/relationship/registry.js +1 -1
  262. package/dist/review/machine.js +1 -1
  263. package/dist/review/order.js +1 -1
  264. package/dist/review/service.js +1 -1
  265. package/dist/review/types.d.ts +7 -0
  266. package/dist/safety/confirm-gate.js +1 -1
  267. package/dist/schema/benchmark-migration/index.d.ts +207 -0
  268. package/dist/schema/benchmark-migration/index.js +1 -0
  269. package/dist/schema/call/allocation.d.ts +1 -1
  270. package/dist/schema/call/allocation.js +1 -1
  271. package/dist/schema/call/arbitration.d.ts +1 -1
  272. package/dist/schema/call/arbitration.js +1 -1
  273. package/dist/schema/call/base.d.ts +5 -5
  274. package/dist/schema/call/base.js +1 -1
  275. package/dist/schema/call/contact.d.ts +1 -1
  276. package/dist/schema/call/demand.d.ts +1 -1
  277. package/dist/schema/call/guard.d.ts +3 -3
  278. package/dist/schema/call/machine.d.ts +5 -5
  279. package/dist/schema/call/order.d.ts +3 -3
  280. package/dist/schema/call/payment.js +1 -1
  281. package/dist/schema/call/permission-handler.d.ts +1 -1
  282. package/dist/schema/call/permission-handler.js +1 -1
  283. package/dist/schema/call/permission.d.ts +16 -16
  284. package/dist/schema/call/permission.js +1 -1
  285. package/dist/schema/call/personal.d.ts +8 -8
  286. package/dist/schema/call/personal.js +1 -1
  287. package/dist/schema/call/progress.d.ts +3 -3
  288. package/dist/schema/call/repository.d.ts +11 -11
  289. package/dist/schema/call/repository.js +1 -1
  290. package/dist/schema/call/reward.d.ts +1 -1
  291. package/dist/schema/call/semantic.js +1 -1
  292. package/dist/schema/call/service.d.ts +7 -7
  293. package/dist/schema/call/service.js +1 -1
  294. package/dist/schema/call/treasury.d.ts +1 -1
  295. package/dist/schema/common/index.d.ts +6 -6
  296. package/dist/schema/common/index.js +1 -1
  297. package/dist/schema/config/index.d.ts +50 -1
  298. package/dist/schema/config/index.js +1 -1
  299. package/dist/schema/evaluation/index.d.ts +27 -11
  300. package/dist/schema/evaluation/index.js +1 -1
  301. package/dist/schema/goal/index.d.ts +5 -5
  302. package/dist/schema/goal/planning.d.ts +15 -15
  303. package/dist/schema/goal/planning.js +1 -1
  304. package/dist/schema/index.d.ts +1 -0
  305. package/dist/schema/index.js +1 -1
  306. package/dist/schema/interaction/index.d.ts +1 -1
  307. package/dist/schema/local/index.js +1 -1
  308. package/dist/schema/messenger/index.d.ts +26 -26
  309. package/dist/schema/operations.d.ts +33 -33
  310. package/dist/schema/operations.js +1 -1
  311. package/dist/schema/persona/index.d.ts +4708 -0
  312. package/dist/schema/persona/index.js +1 -1
  313. package/dist/schema/query/bi.d.ts +232 -25
  314. package/dist/schema/query/bi.js +1 -1
  315. package/dist/schema/query/index.d.ts +35 -35
  316. package/dist/schema/query/index.js +1 -1
  317. package/dist/schema/schema-version.js +1 -1
  318. package/dist/schema/workflow/index.d.ts +1 -1
  319. package/dist/schema-query-impl/index.d.ts +9 -0
  320. package/dist/schema-query-impl/index.js +1 -1
  321. package/dist/schemas/benchmark_migration_operation.output.json +793 -0
  322. package/dist/schemas/benchmark_migration_operation.schema.json +83 -0
  323. package/dist/schemas/bridge_operation.schema.json +5 -5
  324. package/dist/schemas/config_operation.output.json +252 -0
  325. package/dist/schemas/config_operation.schema.json +21 -1
  326. package/dist/schemas/evaluation_operation.output.json +22 -10
  327. package/dist/schemas/goal_operation.schema.json +8 -8
  328. package/dist/schemas/guard2file.schema.json +1 -1
  329. package/dist/schemas/index.json +7 -1
  330. package/dist/schemas/machineNode2file.schema.json +1 -1
  331. package/dist/schemas/messenger_operation.schema.json +24 -12
  332. package/dist/schemas/onchain_events.output.json +1 -1
  333. package/dist/schemas/onchain_operations.output.json +4 -2
  334. package/dist/schemas/onchain_operations.schema.json +189 -139
  335. package/dist/schemas/onchain_operations_allocation.schema.json +13 -11
  336. package/dist/schemas/onchain_operations_arbitration.schema.json +10 -8
  337. package/dist/schemas/onchain_operations_contact.schema.json +7 -5
  338. package/dist/schemas/onchain_operations_demand.schema.json +7 -5
  339. package/dist/schemas/onchain_operations_gen_passport.schema.json +5 -3
  340. package/dist/schemas/onchain_operations_gen_proof.schema.json +1 -1
  341. package/dist/schemas/onchain_operations_guard.schema.json +5 -3
  342. package/dist/schemas/onchain_operations_machine.schema.json +22 -18
  343. package/dist/schemas/onchain_operations_order.schema.json +11 -7
  344. package/dist/schemas/onchain_operations_payment.schema.json +3 -3
  345. package/dist/schemas/onchain_operations_permission.schema.json +19 -11
  346. package/dist/schemas/onchain_operations_personal.schema.json +16 -10
  347. package/dist/schemas/onchain_operations_progress.schema.json +11 -7
  348. package/dist/schemas/onchain_operations_proof.schema.json +5 -3
  349. package/dist/schemas/onchain_operations_repository.schema.json +12 -8
  350. package/dist/schemas/onchain_operations_reward.schema.json +11 -9
  351. package/dist/schemas/onchain_operations_service.schema.json +28 -22
  352. package/dist/schemas/onchain_operations_treasury.schema.json +11 -9
  353. package/dist/schemas/onchain_table_data.output.json +27 -17
  354. package/dist/schemas/persona_operation.output.json +15875 -1
  355. package/dist/schemas/persona_operation.schema.json +3056 -478
  356. package/dist/schemas/query_toolkit.output.json +343 -63
  357. package/dist/schemas/query_toolkit.schema.json +1 -1
  358. package/dist/schemas/workflow_operation.schema.json +4 -2
  359. package/dist/strategy/scorecard.js +1 -1
  360. package/dist/tools/handlers/benchmark-migration.d.ts +2 -0
  361. package/dist/tools/handlers/benchmark-migration.js +1 -0
  362. package/dist/tools/handlers/config.js +1 -1
  363. package/dist/tools/handlers/industry-pack.js +1 -1
  364. package/dist/tools/handlers/onchain.js +1 -1
  365. package/dist/tools/handlers/query.js +1 -1
  366. package/dist/tools/handlers/schema-query.js +1 -1
  367. package/dist/tools/index.js +1 -1
  368. package/dist/tools/move-fn-index.gen.d.ts +3 -0
  369. package/dist/tools/move-fn-index.gen.js +1 -0
  370. package/dist/tools/registry/business.js +1 -1
  371. package/dist/tools/registry/config.js +1 -1
  372. package/dist/tools/registry/evaluation.js +1 -1
  373. package/dist/tools/registry/onchain.js +1 -1
  374. package/dist/tools/sanitize-output.d.ts +3 -0
  375. package/dist/tools/sanitize-output.js +1 -0
  376. package/dist/tools/sanitize-output.spec.d.ts +1 -0
  377. package/dist/tools/sanitize-output.spec.js +1 -0
  378. package/package.json +9 -4
  379. package/dist/knowledge/baselines/evaluation-baselines.json +0 -79
@@ -1 +1 @@
1
- import{CUSTOMER_INTELLIGENCE_VERSION}from'./types.js';import{formatAmountText}from'../knowledge/fund-layer.js';const DEFAULT_THRESHOLDS={'progress_stall_hours':0x0,'compensation_drop_ratio':0.3,'compensation_coverage_min':0x1,'messenger_timeout_hours':0x18,'review_window_closing_days':0x3,'arb_window_closing_days':0x3};export function monitorOrder(a){const b=[],c={...DEFAULT_THRESHOLDS,...a['thresholds']??{}},d=a['current'];if(d['completed'])return b['push'](...detectPostCompletionAlerts(d,c)),sortAlerts(b);if(d['refunded'])return b['push']({'id':'refund_received','category':'refund_received','severity':'info','title':'Refund\x20received','message':'Order\x20'+d['order_id']+'\x20refund\x20has\x20been\x20received','timestamp':d['now'],'order_id':d['order_id'],'service_id':d['service_id']}),sortAlerts(b);return b['push'](...detectProgressStall(d,a['previous'],c)),b['push'](...detectCompensationChange(d,a['previous'],c)),b['push'](...detectMessengerTimeout(d,c)),d['pending_user_action']&&b['push']({'id':'user_action_required','category':'user_action_required','severity':'info','title':'Waiting\x20for\x20user\x20action','message':'Order\x20'+d['order_id']+'\x20advanced\x20to\x20node\x20'+(d['current_node']??'unknown')+';\x20your\x20action\x20is\x20required\x20to\x20continue','action':'View\x20the\x20Machine\x20node\x20requirements\x20and\x20submit\x20the\x20corresponding\x20Guard\x20submission','timestamp':d['now'],'order_id':d['order_id'],'service_id':d['service_id'],'node':d['current_node']}),sortAlerts(b);}function detectProgressStall(a,b,c){const d=[];if(!a['current_node'])return d;const e=a['last_progress_at']??a['created_at'],f=a['now']-e,g=f/0x36ee80,h=a['expected_progress_hours']??0x18,i=c['progress_stall_hours']>0x0?c['progress_stall_hours']:h*0x2;if(g>i){const j=g>i*0x2?'critical':'warning';d['push']({'id':'progress_stall','category':'progress_stall','severity':j,'title':j==='critical'?'Order\x20severely\x20stalled':'Order\x20progress\x20stalled','message':'Order\x20has\x20been\x20stuck\x20at\x20node\x20'+a['current_node']+'\x20for\x20over\x20'+Math['round'](g)+'\x20hours\x20(expected\x20'+h+'\x20hours)','action':j==='critical'?'Recommend\x20contacting\x20the\x20merchant\x20immediately\x20via\x20Messenger;\x20if\x20the\x20merchant\x20remains\x20unresponsive,\x20consider\x20initiating\x20arbitration':'Recommend\x20contacting\x20the\x20merchant\x20via\x20Messenger\x20to\x20ask\x20about\x20progress','timestamp':a['now'],'order_id':a['order_id'],'service_id':a['service_id'],'node':a['current_node'],'metric':{'label':'Stall\x20duration','value':Math['round'](g),'threshold':Math['round'](i),'unit':'hours'}});}if(b&&b['previous_node']===a['current_node']){const k=a['now']-b['snapshot_at'],l=k/0x36ee80;l>h&&d['push']({'id':'node_unchanged','category':'progress_stall','severity':'warning','title':'Node\x20unchanged','message':'Since\x20the\x20last\x20check\x20('+Math['round'](l)+'\x20hours),\x20the\x20order\x20is\x20still\x20at\x20'+a['current_node'],'action':'Confirm\x20whether\x20this\x20is\x20expected;\x20if\x20not,\x20contact\x20the\x20merchant','timestamp':a['now'],'order_id':a['order_id'],'service_id':a['service_id'],'node':a['current_node'],'metric':{'label':'Node\x20stay\x20duration','value':Math['round'](l),'threshold':Math['round'](h),'unit':'hours'}});}return d;}function detectCompensationChange(a,b,c){const d=[];if(a['compensation_balance']===undefined)return d;if(a['order_amount']!==undefined&&a['order_amount']>0x0n){const e=Number(a['compensation_balance']*0x64n/a['order_amount'])/0x64;if(e<c['compensation_coverage_min']){const f=e<0.5?'critical':'warning';d['push']({'id':'compensation_insufficient','category':'compensation_insufficient','severity':f,'title':'Compensation\x20fund\x20coverage\x20insufficient','message':'Merchant\x20compensation\x20fund\x20covers\x20only\x20'+Math['round'](e*0x64)+'%\x20of\x20the\x20order\x20amount\x20(required\x20'+Math['round'](c['compensation_coverage_min']*0x64)+'%):\x20fund\x20'+formatAmountText(a['compensation_balance'],a['token']?.['decimals'],a['token']?.['symbol'])+'\x20vs\x20order\x20'+formatAmountText(a['order_amount'],a['token']?.['decimals'],a['token']?.['symbol']),'action':'Require\x20the\x20merchant\x20to\x20top\x20up\x20the\x20compensation\x20fund\x20before\x20ordering,\x20or\x20negotiate\x20higher\x20coverage\x20via\x20Messenger','timestamp':a['now'],'order_id':a['order_id'],'service_id':a['service_id'],'metric':{'label':'Compensation\x20coverage','value':Math['round'](e*0x64),'threshold':Math['round'](c['compensation_coverage_min']*0x64),'unit':'%'}});}}if(b&&b['previous_compensation_balance']!==undefined){const g=b['previous_compensation_balance'];if(g>0x0n&&a['compensation_balance']<g){const h=Number((g-a['compensation_balance'])*0x64n/g)/0x64;if(h>=c['compensation_drop_ratio']){const i=h>=0.5?'critical':'warning';d['push']({'id':'compensation_drop','category':'compensation_drop','severity':i,'title':'Compensation\x20fund\x20balance\x20dropped\x20significantly','message':'Merchant\x20compensation\x20fund\x20dropped\x20from\x20'+formatAmountText(g,a['token']?.['decimals'],a['token']?.['symbol'])+'\x20to\x20'+formatAmountText(a['compensation_balance'],a['token']?.['decimals'],a['token']?.['symbol'])+'\x20(down\x20'+Math['round'](h*0x64)+'%)','action':'Immediately\x20ask\x20the\x20merchant\x20for\x20the\x20reason;\x20if\x20it\x20keeps\x20dropping,\x20the\x20merchant\x20may\x20be\x20processing\x20payouts\x20for\x20other\x20orders,\x20which\x20is\x20a\x20risk','timestamp':a['now'],'order_id':a['order_id'],'service_id':a['service_id'],'metric':{'label':'Compensation\x20drop\x20ratio','value':Math['round'](h*0x64),'threshold':Math['round'](c['compensation_drop_ratio']*0x64),'unit':'%'}});}}}return d;}function detectMessengerTimeout(a,b){const c=[];if(a['has_messenger']===![])return c['push']({'id':'no_messenger_channel','category':'messenger_timeout','severity':'info','title':'Merchant\x20has\x20no\x20Messenger\x20channel','message':'Merchant\x20has\x20not\x20configured\x20Messenger;\x20no\x20way\x20to\x20negotiate\x20online\x20or\x20get\x20post-sale\x20support','action':'Confirm\x20other\x20contact\x20methods\x20before\x20ordering;\x20recommend\x20requiring\x20the\x20merchant\x20to\x20configure\x20Messenger','timestamp':a['now'],'order_id':a['order_id'],'service_id':a['service_id']}),c;if(a['last_user_message_at']&&!a['last_merchant_reply_at']){const d=a['now']-a['last_user_message_at'],e=d/0x36ee80;if(e>b['messenger_timeout_hours']){const f=e>b['messenger_timeout_hours']*0x2?'critical':'warning';c['push']({'id':'messenger_unanswered','category':'messenger_timeout','severity':f,'title':'Merchant\x20Messenger\x20no\x20reply','message':'Merchant\x20has\x20not\x20replied\x20to\x20your\x20Messenger\x20message\x20for\x20'+Math['round'](e)+'\x20hours','action':a['has_arbitration']?'Consider\x20initiating\x20an\x20arbitration\x20application\x20(arbitration\x20window\x20is\x20limited)':'Merchant\x20has\x20no\x20arbitration\x20configured;\x20recommend\x20urging\x20via\x20other\x20contact\x20methods;\x20if\x20there\x20is\x20no\x20response,\x20funds\x20may\x20be\x20frozen','timestamp':a['now'],'order_id':a['order_id'],'service_id':a['service_id'],'metric':{'label':'No-reply\x20duration','value':Math['round'](e),'threshold':Math['round'](b['messenger_timeout_hours']),'unit':'hours'}});}}if(a['last_merchant_reply_at']&&a['last_user_message_at']&&a['last_user_message_at']>a['last_merchant_reply_at']){const g=a['now']-a['last_user_message_at'],h=g/0x36ee80;h>b['messenger_timeout_hours']&&c['push']({'id':'messenger_re_unanswered','category':'messenger_timeout','severity':'warning','title':'Merchant\x20did\x20not\x20reply\x20again','message':'The\x20merchant\x20has\x20not\x20replied\x20to\x20your\x20message\x20from\x20'+Math['round'](h)+'\x20hours\x20ago','action':'Send\x20a\x20follow-up\x20message;\x20if\x20the\x20merchant\x20remains\x20unresponsive,\x20consider\x20arbitration','timestamp':a['now'],'order_id':a['order_id'],'service_id':a['service_id'],'metric':{'label':'Re-no-reply\x20duration','value':Math['round'](h),'threshold':Math['round'](b['messenger_timeout_hours']),'unit':'hours'}});}return c;}function detectPostCompletionAlerts(a,b){const c=[];return a['review_window_days']!==undefined&&a['review_window_days']>0x0&&(a['review_window_days']<=b['review_window_closing_days']?c['push']({'id':'review_window_closing','category':'review_window','severity':'info','title':'Review\x20window\x20about\x20to\x20close','message':'The\x20review\x20window\x20will\x20close\x20in\x20'+a['review_window_days']+'\x20day(s)','action':'Submit\x20a\x20review\x20as\x20soon\x20as\x20possible\x20(evidence\x20can\x20be\x20submitted\x20together\x20if\x20available)','timestamp':a['now'],'order_id':a['order_id'],'service_id':a['service_id'],'metric':{'label':'Remaining\x20days','value':a['review_window_days'],'threshold':b['review_window_closing_days'],'unit':'days'}}):c['push']({'id':'review_reminder','category':'review_window','severity':'info','title':'Order\x20completed','message':'Order\x20completed;\x20review\x20window\x20has\x20'+a['review_window_days']+'\x20day(s)\x20remaining','action':'Submit\x20a\x20review\x20to\x20help\x20other\x20users\x20decide','timestamp':a['now'],'order_id':a['order_id'],'service_id':a['service_id']})),a['arb_window_days']!==undefined&&a['arb_window_days']>0x0&&(a['arb_window_days']<=b['arb_window_closing_days']&&c['push']({'id':'arb_window_closing','category':'arb_window','severity':'warning','title':'Arbitration\x20application\x20window\x20about\x20to\x20close','message':'The\x20arbitration\x20application\x20window\x20will\x20close\x20in\x20'+a['arb_window_days']+'\x20day(s)','action':'If\x20there\x20are\x20unresolved\x20disputes,\x20initiate\x20an\x20arbitration\x20application\x20immediately','timestamp':a['now'],'order_id':a['order_id'],'service_id':a['service_id'],'metric':{'label':'Remaining\x20days','value':a['arb_window_days'],'threshold':b['arb_window_closing_days'],'unit':'days'}})),c;}export function sortAlerts(a){const b={'critical':0x3,'warning':0x2,'info':0x1};return[...a]['sort']((c,d)=>b[d['severity']]-b[c['severity']]);}export{CUSTOMER_INTELLIGENCE_VERSION};
1
+ import{CUSTOMER_INTELLIGENCE_VERSION}from'./types.js';import{severityRank}from'../config/severity.js';import{getJudgmentDoc}from'../config/judgment.js';import{formatAmountText}from'../knowledge/fund-layer.js';function monitorParams(){return getJudgmentDoc()['monitor'];}export function monitorOrder(a){const b=[],c=monitorParams(),d={...c['thresholds'],...a['thresholds']??{}},e=c['escalation'],f=a['current'];if(f['completed'])return b['push'](...detectPostCompletionAlerts(f,d)),sortAlerts(b);if(f['refunded'])return b['push']({'id':'refund_received','category':'refund_received','severity':'info','title':'Refund\x20received','message':'Order\x20'+f['order_id']+'\x20refund\x20has\x20been\x20received','timestamp':f['now'],'order_id':f['order_id'],'service_id':f['service_id']}),sortAlerts(b);return b['push'](...detectProgressStall(f,a['previous'],d,e)),b['push'](...detectCompensationChange(f,a['previous'],d,e)),b['push'](...detectMessengerTimeout(f,d,e)),f['pending_user_action']&&b['push']({'id':'user_action_required','category':'user_action_required','severity':'info','title':'Waiting\x20for\x20user\x20action','message':'Order\x20'+f['order_id']+'\x20advanced\x20to\x20node\x20'+(f['current_node']??'unknown')+';\x20your\x20action\x20is\x20required\x20to\x20continue','action':'View\x20the\x20Machine\x20node\x20requirements\x20and\x20submit\x20the\x20corresponding\x20Guard\x20submission','timestamp':f['now'],'order_id':f['order_id'],'service_id':f['service_id'],'node':f['current_node']}),sortAlerts(b);}function detectProgressStall(a,b,c,d){const e=[];if(!a['current_node'])return e;const f=a['last_progress_at']??a['created_at'],g=a['now']-f,h=g/0x36ee80,i=a['expected_progress_hours']??d['default_expected_progress_hours'],j=c['progress_stall_hours']>0x0?c['progress_stall_hours']:i*d['stall_expected_multiplier'];if(h>j){const k=h>j*d['stall_escalation_multiplier']?'critical':'high';e['push']({'id':'progress_stall','category':'progress_stall','severity':k,'title':k==='critical'?'Order\x20severely\x20stalled':'Order\x20progress\x20stalled','message':'Order\x20has\x20been\x20stuck\x20at\x20node\x20'+a['current_node']+'\x20for\x20over\x20'+Math['round'](h)+'\x20hours\x20(expected\x20'+i+'\x20hours)','action':k==='critical'?'Recommend\x20contacting\x20the\x20merchant\x20immediately\x20via\x20Messenger;\x20if\x20the\x20merchant\x20remains\x20unresponsive,\x20consider\x20initiating\x20arbitration':'Recommend\x20contacting\x20the\x20merchant\x20via\x20Messenger\x20to\x20ask\x20about\x20progress','timestamp':a['now'],'order_id':a['order_id'],'service_id':a['service_id'],'node':a['current_node'],'metric':{'label':'Stall\x20duration','value':Math['round'](h),'threshold':Math['round'](j),'unit':'hours'}});}if(b&&b['previous_node']===a['current_node']){const l=a['now']-b['snapshot_at'],m=l/0x36ee80;m>i&&e['push']({'id':'node_unchanged','category':'progress_stall','severity':'high','title':'Node\x20unchanged','message':'Since\x20the\x20last\x20check\x20('+Math['round'](m)+'\x20hours),\x20the\x20order\x20is\x20still\x20at\x20'+a['current_node'],'action':'Confirm\x20whether\x20this\x20is\x20expected;\x20if\x20not,\x20contact\x20the\x20merchant','timestamp':a['now'],'order_id':a['order_id'],'service_id':a['service_id'],'node':a['current_node'],'metric':{'label':'Node\x20stay\x20duration','value':Math['round'](m),'threshold':Math['round'](i),'unit':'hours'}});}return e;}function detectCompensationChange(a,b,c,d){const e=[];if(a['compensation_balance']===undefined)return e;if(a['order_amount']!==undefined&&a['order_amount']>0x0n){const f=Number(a['compensation_balance']*0x64n/a['order_amount'])/0x64;if(f<c['compensation_coverage_min']){const g=f<d['ratio_critical_threshold']?'critical':'high';e['push']({'id':'compensation_insufficient','category':'compensation_insufficient','severity':g,'title':'Compensation\x20fund\x20coverage\x20insufficient','message':'Merchant\x20compensation\x20fund\x20covers\x20only\x20'+Math['round'](f*0x64)+'%\x20of\x20the\x20order\x20amount\x20(required\x20'+Math['round'](c['compensation_coverage_min']*0x64)+'%):\x20fund\x20'+formatAmountText(a['compensation_balance'],a['token']?.['decimals'],a['token']?.['symbol'])+'\x20vs\x20order\x20'+formatAmountText(a['order_amount'],a['token']?.['decimals'],a['token']?.['symbol']),'action':'Require\x20the\x20merchant\x20to\x20top\x20up\x20the\x20compensation\x20fund\x20before\x20ordering,\x20or\x20negotiate\x20higher\x20coverage\x20via\x20Messenger','timestamp':a['now'],'order_id':a['order_id'],'service_id':a['service_id'],'metric':{'label':'Compensation\x20coverage','value':Math['round'](f*0x64),'threshold':Math['round'](c['compensation_coverage_min']*0x64),'unit':'%'}});}}if(b&&b['previous_compensation_balance']!==undefined){const h=b['previous_compensation_balance'];if(h>0x0n&&a['compensation_balance']<h){const i=Number((h-a['compensation_balance'])*0x64n/h)/0x64;if(i>=c['compensation_drop_ratio']){const j=i>=d['ratio_critical_threshold']?'critical':'high';e['push']({'id':'compensation_drop','category':'compensation_drop','severity':j,'title':'Compensation\x20fund\x20balance\x20dropped\x20significantly','message':'Merchant\x20compensation\x20fund\x20dropped\x20from\x20'+formatAmountText(h,a['token']?.['decimals'],a['token']?.['symbol'])+'\x20to\x20'+formatAmountText(a['compensation_balance'],a['token']?.['decimals'],a['token']?.['symbol'])+'\x20(down\x20'+Math['round'](i*0x64)+'%)','action':'Immediately\x20ask\x20the\x20merchant\x20for\x20the\x20reason;\x20if\x20it\x20keeps\x20dropping,\x20the\x20merchant\x20may\x20be\x20processing\x20payouts\x20for\x20other\x20orders,\x20which\x20is\x20a\x20risk','timestamp':a['now'],'order_id':a['order_id'],'service_id':a['service_id'],'metric':{'label':'Compensation\x20drop\x20ratio','value':Math['round'](i*0x64),'threshold':Math['round'](c['compensation_drop_ratio']*0x64),'unit':'%'}});}}}return e;}function detectMessengerTimeout(a,b,c){const d=[];if(a['has_messenger']===![])return d['push']({'id':'no_messenger_channel','category':'messenger_timeout','severity':'info','title':'Merchant\x20has\x20no\x20Messenger\x20channel','message':'Merchant\x20has\x20not\x20configured\x20Messenger;\x20no\x20way\x20to\x20negotiate\x20online\x20or\x20get\x20post-sale\x20support','action':'Confirm\x20other\x20contact\x20methods\x20before\x20ordering;\x20recommend\x20requiring\x20the\x20merchant\x20to\x20configure\x20Messenger','timestamp':a['now'],'order_id':a['order_id'],'service_id':a['service_id']}),d;if(a['last_user_message_at']&&!a['last_merchant_reply_at']){const e=a['now']-a['last_user_message_at'],f=e/0x36ee80;if(f>b['messenger_timeout_hours']){const g=f>b['messenger_timeout_hours']*c['messenger_escalation_multiplier']?'critical':'high';d['push']({'id':'messenger_unanswered','category':'messenger_timeout','severity':g,'title':'Merchant\x20Messenger\x20no\x20reply','message':'Merchant\x20has\x20not\x20replied\x20to\x20your\x20Messenger\x20message\x20for\x20'+Math['round'](f)+'\x20hours','action':a['has_arbitration']?'Consider\x20initiating\x20an\x20arbitration\x20application\x20(arbitration\x20window\x20is\x20limited)':'Merchant\x20has\x20no\x20arbitration\x20configured;\x20recommend\x20urging\x20via\x20other\x20contact\x20methods;\x20if\x20there\x20is\x20no\x20response,\x20funds\x20may\x20be\x20frozen','timestamp':a['now'],'order_id':a['order_id'],'service_id':a['service_id'],'metric':{'label':'No-reply\x20duration','value':Math['round'](f),'threshold':Math['round'](b['messenger_timeout_hours']),'unit':'hours'}});}}if(a['last_merchant_reply_at']&&a['last_user_message_at']&&a['last_user_message_at']>a['last_merchant_reply_at']){const h=a['now']-a['last_user_message_at'],i=h/0x36ee80;i>b['messenger_timeout_hours']&&d['push']({'id':'messenger_re_unanswered','category':'messenger_timeout','severity':'high','title':'Merchant\x20did\x20not\x20reply\x20again','message':'The\x20merchant\x20has\x20not\x20replied\x20to\x20your\x20message\x20from\x20'+Math['round'](i)+'\x20hours\x20ago','action':'Send\x20a\x20follow-up\x20message;\x20if\x20the\x20merchant\x20remains\x20unresponsive,\x20consider\x20arbitration','timestamp':a['now'],'order_id':a['order_id'],'service_id':a['service_id'],'metric':{'label':'Re-no-reply\x20duration','value':Math['round'](i),'threshold':Math['round'](b['messenger_timeout_hours']),'unit':'hours'}});}return d;}function detectPostCompletionAlerts(a,b){const c=[];return a['review_window_days']!==undefined&&a['review_window_days']>0x0&&(a['review_window_days']<=b['review_window_closing_days']?c['push']({'id':'review_window_closing','category':'review_window','severity':'info','title':'Review\x20window\x20about\x20to\x20close','message':'The\x20review\x20window\x20will\x20close\x20in\x20'+a['review_window_days']+'\x20day(s)','action':'Submit\x20a\x20review\x20as\x20soon\x20as\x20possible\x20(evidence\x20can\x20be\x20submitted\x20together\x20if\x20available)','timestamp':a['now'],'order_id':a['order_id'],'service_id':a['service_id'],'metric':{'label':'Remaining\x20days','value':a['review_window_days'],'threshold':b['review_window_closing_days'],'unit':'days'}}):c['push']({'id':'review_reminder','category':'review_window','severity':'info','title':'Order\x20completed','message':'Order\x20completed;\x20review\x20window\x20has\x20'+a['review_window_days']+'\x20day(s)\x20remaining','action':'Submit\x20a\x20review\x20to\x20help\x20other\x20users\x20decide','timestamp':a['now'],'order_id':a['order_id'],'service_id':a['service_id']})),a['arb_window_days']!==undefined&&a['arb_window_days']>0x0&&(a['arb_window_days']<=b['arb_window_closing_days']&&c['push']({'id':'arb_window_closing','category':'arb_window','severity':'high','title':'Arbitration\x20application\x20window\x20about\x20to\x20close','message':'The\x20arbitration\x20application\x20window\x20will\x20close\x20in\x20'+a['arb_window_days']+'\x20day(s)','action':'If\x20there\x20are\x20unresolved\x20disputes,\x20initiate\x20an\x20arbitration\x20application\x20immediately','timestamp':a['now'],'order_id':a['order_id'],'service_id':a['service_id'],'metric':{'label':'Remaining\x20days','value':a['arb_window_days'],'threshold':b['arb_window_closing_days'],'unit':'days'}})),c;}export function sortAlerts(a){return[...a]['sort']((c,d)=>severityRank(d['severity'])-severityRank(c['severity']));}export{CUSTOMER_INTELLIGENCE_VERSION};
@@ -15,6 +15,7 @@ export declare function summarizeAcceptance(records: PresenterAcceptanceRecord[]
15
15
  export declare function presenterHistoryFromEntities(entities: Record<string, unknown>): PresenterAcceptanceRecord[];
16
16
  export interface AcceptanceRuleOptions {
17
17
  weight: number;
18
+ weightOf?: () => number;
18
19
  dimension?: string;
19
20
  redFlag?: {
20
21
  below: number;
@@ -1 +1 @@
1
- export const PRESENTER_HISTORY_KEY='presenter_history';export function summarizeAcceptance(a){const b=a['map'](d=>d['acceptance_score'])['filter'](d=>typeof d==='number'&&Number['isFinite'](d))['map'](d=>Math['max'](0x0,Math['min'](0x64,d)));if(b['length']===0x0)return{'score':null,'rated':0x0,'total':a['length'],'average':null};const c=b['reduce']((d,e)=>d+e,0x0)/b['length'];return{'score':Math['round'](c),'rated':b['length'],'total':a['length'],'average':Math['round'](c*0x64)/0x64};}export function presenterHistoryFromEntities(a){const b=a[PRESENTER_HISTORY_KEY];if(!Array['isArray'](b))return[];return b['filter'](c=>typeof c==='object'&&c!==null&&c['acceptance_score']!==undefined);}export function createAcceptanceRule(a,b){return{'id':'acceptance','description':'Presenter\x20historical\x20acceptance\x20score\x20backflow\x20(demand-side\x20feedback)','dimension':b['dimension']??'acceptance','weight':b['weight'],'evaluation_ids':[a],'evaluate':c=>{const d=summarizeAcceptance(presenterHistoryFromEntities(c['entities']));if(d['score']===null)return{'score':0x32,'weight':b['weight'],'reason':d['total']>0x0?'acceptance:\x20'+d['total']+'\x20presentation(s),\x20none\x20rated\x20(neutral)':'acceptance:\x20no\x20history\x20(neutral)'};const e=b['redFlag']!==undefined&&d['rated']>=b['redFlag']['minRated']&&d['average']!==null&&d['average']<b['redFlag']['below'];return{'score':d['score'],'weight':b['weight'],'reason':'acceptance\x20avg\x20'+d['average']+'\x20over\x20'+d['rated']+'\x20rated\x20presentation(s)','red_flag':e||undefined};}};}
1
+ export const PRESENTER_HISTORY_KEY='presenter_history';export function summarizeAcceptance(a){const b=a['map'](d=>d['acceptance_score'])['filter'](d=>typeof d==='number'&&Number['isFinite'](d))['map'](d=>Math['max'](0x0,Math['min'](0x64,d)));if(b['length']===0x0)return{'score':null,'rated':0x0,'total':a['length'],'average':null};const c=b['reduce']((d,e)=>d+e,0x0)/b['length'];return{'score':Math['round'](c),'rated':b['length'],'total':a['length'],'average':Math['round'](c*0x64)/0x64};}export function presenterHistoryFromEntities(a){const b=a[PRESENTER_HISTORY_KEY];if(!Array['isArray'](b))return[];return b['filter'](c=>typeof c==='object'&&c!==null&&c['acceptance_score']!==undefined);}export function createAcceptanceRule(a,b){return{'id':'acceptance','description':'Presenter\x20historical\x20acceptance\x20score\x20backflow\x20(demand-side\x20feedback)','dimension':b['dimension']??'acceptance',get 'weight'(){return b['weightOf']?.()??b['weight'];},'evaluation_ids':[a],'evaluate':c=>{const d=b['weightOf']?.()??b['weight'],e=summarizeAcceptance(presenterHistoryFromEntities(c['entities']));if(e['score']===null)return{'score':0x32,'weight':d,'reason':e['total']>0x0?'acceptance:\x20'+e['total']+'\x20presentation(s),\x20none\x20rated\x20(neutral)':'acceptance:\x20no\x20history\x20(neutral)'};const f=b['redFlag']!==undefined&&e['rated']>=b['redFlag']['minRated']&&e['average']!==null&&e['average']<b['redFlag']['below'];return{'score':e['score'],'weight':d,'reason':'acceptance\x20avg\x20'+e['average']+'\x20over\x20'+e['rated']+'\x20rated\x20presentation(s)','red_flag':f||undefined};}};}
@@ -1 +1 @@
1
- import{appetiteMultiplier}from'./game-strategy.js';const ARB_ROLE_INTERESTS={'arbitrator':{'prefer':['case_advanced','fees_received','case_closed'],'avoid':['case_extended'],'sensitivity':0x1},'customer':{'prefer':['reversal_chance','case_closed'],'avoid':['adverse_ruling','case_extended'],'sensitivity':0x1},'merchant':{'prefer':['case_closed','fees_received'],'avoid':['adverse_ruling','reversal_chance','case_extended'],'sensitivity':0x1}},ARB_MOVE_SEMANTICS={'Principal_confirming':[{'action':'principal_confirm','perspective':'customer','gain':['case_advanced'],'risk':[],'payoff':'confirm\x20the\x20proposition\x20to\x20move\x20to\x20arbitrator\x20confirmation','base_risk':'low'},{'action':'proposition_change','perspective':'customer','gain':[],'risk':['case_extended'],'payoff':'modify\x20the\x20proposition\x20before\x20confirming\x20(extends\x20the\x20case)','base_risk':'medium'}],'Arbitrator_confirming':[{'action':'confirm','perspective':'arbitrator','gain':['case_advanced'],'risk':[],'payoff':'confirm\x20to\x20open\x20voting','base_risk':'low'},{'action':'reset','perspective':'arbitrator','gain':[],'risk':['case_extended'],'payoff':'reset\x20back\x20to\x20principal\x20confirmation\x20(extends\x20the\x20case)','base_risk':'high'}],'Voting':[{'action':'vote','perspective':'arbitrator','gain':['case_advanced'],'risk':[],'payoff':'vote\x20before\x20the\x20deadline','base_risk':'low'}],'Arbitrated':[{'action':'objection','perspective':'customer','gain':['reversal_chance'],'risk':[],'payoff':'object\x20the\x20ruling\x20(only\x20window\x20to\x20overturn)','base_risk':'medium'},{'action':'accept','perspective':'customer','gain':['case_closed'],'risk':['adverse_ruling'],'payoff':'accept\x20and\x20await\x20compensation','base_risk':'low'}],'Objectionable':[{'action':'reset','perspective':'arbitrator','gain':['case_advanced'],'risk':['case_extended'],'payoff':'reset\x20to\x20re-review\x20(extends\x20the\x20case)','base_risk':'medium'}],'Finished':[{'action':'arb_withdraw','perspective':'all','gain':['fees_received','case_closed'],'risk':[],'payoff':'withdraw\x20fees\x20/\x20compensation','base_risk':'low'}],'Withdrawn':[{'action':'done','perspective':'all','gain':['case_closed'],'risk':[],'payoff':'case\x20closed','base_risk':'low'}]};function dedupe(a){return Array['from'](new Set(a));}function resolveArbInterests(a,b){const c=ARB_ROLE_INTERESTS[a],d=c['sensitivity']*appetiteMultiplier(b?.['risk_appetite']),e=[...c['prefer']],f=[...c['avoid']];for(const g of b?.['requirements']??[]){const h=g['toLowerCase'](),i=/forbid|never|\bno\b/['test'](h);if(h['includes']('arbitration')&&i)f['push']('case_extended');if(h['includes']('refund')&&!i)e['push']('reversal_chance');if(h['includes']('prolong')||h['includes']('delay'))f['push']('case_extended');}return{'prefer':dedupe(e),'avoid':dedupe(f),'sensitivity':d};}function scoreMove(a,b,c){const d=resolveArbInterests(b,c),e=a['gain']['filter'](j=>d['prefer']['includes'](j)),f=a['risk']['filter'](j=>d['avoid']['includes'](j)),g=e['length']*0x14,h=Math['round'](f['length']*0x19*d['sensitivity']),i=Math['max'](0x0,Math['min'](0x64,0x3c+g-h));return{'favorability':i,'gain_score':g,'risk_score':h};}export function evaluateArbGame(a,b,c){const d=ARB_MOVE_SEMANTICS[a]??[],e=d['filter'](g=>g['perspective']==='all'||g['perspective']===b),f=e['map'](g=>{const h=scoreMove(g,b,c);return{'action':g['action'],'favorability':h['favorability'],'gain_score':h['gain_score'],'risk_score':h['risk_score'],'is_optimal':![],'payoff_note':g['payoff'],'risk':g['base_risk']};})['sort']((g,h)=>h['favorability']-g['favorability']);return f['length']>0x0&&(f[0x0]['is_optimal']=!![]),{'status':a,'perspective':b,'actions':f,'summary':f['length']===0x0?'No\x20recommended\x20moves\x20for\x20'+b+'\x20in\x20status\x20\x27'+a+'\x27':'Optimal\x20for\x20'+b+'\x20in\x20\x27'+a+'\x27:\x20\x27'+f[0x0]['action']+'\x27\x20('+f[0x0]['payoff_note']+')'};}
1
+ import{getJudgmentDoc}from'../config/judgment.js';import{appetiteMultiplier}from'./game-strategy.js';function arbParams(){return getJudgmentDoc()['game']['arb'];}const ARB_MOVE_SEMANTICS={'Principal_confirming':[{'action':'principal\x20confirm','perspective':'customer','gain':['case_advanced'],'risk':[],'payoff':'confirm\x20the\x20proposition\x20to\x20move\x20to\x20arbitrator\x20confirmation','base_risk':'low'},{'action':'proposition\x20update','perspective':'customer','gain':[],'risk':['case_extended'],'payoff':'modify\x20the\x20proposition\x20before\x20confirming\x20(extends\x20the\x20case)','base_risk':'medium'}],'Arbitrator_confirming':[{'action':'confirm','perspective':'arbitrator','gain':['case_advanced'],'risk':[],'payoff':'confirm\x20to\x20open\x20voting','base_risk':'low'},{'action':'reset','perspective':'arbitrator','gain':[],'risk':['case_extended'],'payoff':'reset\x20back\x20to\x20principal\x20confirmation\x20(extends\x20the\x20case)','base_risk':'high'}],'Voting':[{'action':'vote','perspective':'arbitrator','gain':['case_advanced'],'risk':[],'payoff':'vote\x20before\x20the\x20deadline','base_risk':'low'},{'action':'deadline\x20change','perspective':'arbitrator','gain':[],'risk':['case_extended'],'payoff':'adjust\x20or\x20clear\x20the\x20voting\x20window\x20(prolongs\x20or\x20reopens\x20the\x20case)','base_risk':'medium'}],'Arbitrated':[{'action':'objection','perspective':'customer','gain':['reversal_chance'],'risk':[],'payoff':'object\x20the\x20ruling\x20(only\x20window\x20to\x20overturn)','base_risk':'medium'},{'action':'accept','perspective':'customer','gain':['case_closed'],'risk':['adverse_ruling'],'payoff':'accept\x20and\x20await\x20compensation','base_risk':'low'},{'action':'arb_withdraw','perspective':'all','gain':['fees_received','case_closed'],'risk':[],'payoff':'withdraw\x20the\x20fee\x20balance\x2030\x20days\x20after\x20the\x20ruling\x20(closes\x20the\x20case)','base_risk':'low'}],'Objectionable':[{'action':'reset','perspective':'arbitrator','gain':['case_advanced'],'risk':['case_extended'],'payoff':'reset\x20to\x20re-review\x20(extends\x20the\x20case)','base_risk':'medium'},{'action':'arb_withdraw','perspective':'all','gain':['fees_received','case_closed'],'risk':[],'payoff':'withdraw\x20the\x20fee\x20balance\x2030\x20days\x20after\x20the\x20ruling\x20(closes\x20the\x20case)','base_risk':'low'}],'Finished':[{'action':'arb_withdraw','perspective':'all','gain':['fees_received','case_closed'],'risk':[],'payoff':'withdraw\x20fees\x20/\x20compensation','base_risk':'low'}],'Withdrawn':[{'action':'done','perspective':'all','gain':['case_closed'],'risk':[],'payoff':'case\x20closed','base_risk':'low'}]};function dedupe(a){return Array['from'](new Set(a));}function resolveArbInterests(a,b){const c=arbParams(),d=c['role_interests'][a]??{'prefer':[],'avoid':[],'sensitivity':0x1},e=d['sensitivity']*appetiteMultiplier(b?.['risk_appetite']),f=[...d['prefer']],g=[...d['avoid']];for(const h of b?.['requirements']??[]){const i=h['toLowerCase'](),j=new RegExp(c['forbid_pattern'],'i')['test'](i);for(const k of c['keyword_rules']){if(k['when_forbidden']!==j)continue;k['keywords']['some'](l=>i['includes'](l['toLowerCase']()))&&(k['anchor']==='prefer'?f:g)['push'](k['effect']);}}return{'prefer':dedupe(f),'avoid':dedupe(g),'sensitivity':e};}function scoreMove(a,b,c){const {scoring:d}=arbParams(),e=resolveArbInterests(b,c),f=a['gain']['filter'](k=>e['prefer']['includes'](k)),g=a['risk']['filter'](k=>e['avoid']['includes'](k)),h=f['length']*d['per_gain'],i=Math['round'](g['length']*d['per_risk']*e['sensitivity']),j=Math['max'](0x0,Math['min'](0x64,d['base']+h-i));return{'favorability':j,'gain_score':h,'risk_score':i};}export function evaluateArbGame(a,b,c){const d=ARB_MOVE_SEMANTICS[a]??[],e=d['filter'](g=>g['perspective']==='all'||g['perspective']===b),f=e['map'](g=>{const h=scoreMove(g,b,c);return{'action':g['action'],'favorability':h['favorability'],'gain_score':h['gain_score'],'risk_score':h['risk_score'],'is_optimal':![],'payoff_note':g['payoff'],'risk':g['base_risk']};})['sort']((g,h)=>h['favorability']-g['favorability']);return f['length']>0x0&&(f[0x0]['is_optimal']=!![]),{'status':a,'perspective':b,'actions':f,'summary':f['length']===0x0?'No\x20recommended\x20moves\x20for\x20'+b+'\x20in\x20status\x20\x27'+a+'\x27':'Optimal\x20for\x20'+b+'\x20in\x20\x27'+a+'\x27:\x20\x27'+f[0x0]['action']+'\x27\x20('+f[0x0]['payoff_note']+')'};}
@@ -1 +1 @@
1
- import{createAcceptanceRule}from'../acceptance.js';import{requiredCapabilities}from'../capability.js';import{getEvaluationEngine}from'../engine.js';import{extractDemandCapability,extractServiceCapability}from'../extract.js';import{relateRegion}from'../region.js';export const DEMAND_MATCH_EVALUATION='demand_match';const REGION_SCORE={'exact':0x64,'contains':0x55,'compatible':0x3c,'overlap':0x28,'mismatch':0x0},dsCaps={'id':'ds_caps','description':'Extract\x20demand\x20+\x20service\x20capability\x20vectors\x20(either\x20may\x20be\x20pre-computed\x20or\x20raw)','evaluation_ids':[DEMAND_MATCH_EVALUATION],'extract':a=>({'demand_cap':a['entities']['demand_cap']??extractDemandCapability(a['entities']['demand']),'service_cap':a['entities']['service_cap']??extractServiceCapability(a['entities']['service'])})},regionRule={'id':'region','description':'Geographic\x20region\x20relation\x20between\x20demand\x20and\x20service','dimension':'region','weight':0xf,'evaluation_ids':[DEMAND_MATCH_EVALUATION],'evaluate':a=>{const b=a['facts']['demand_cap'],c=a['facts']['service_cap'],e=relateRegion(b['region'],c['region']);return{'score':REGION_SCORE[e],'weight':0xf,'reason':'region\x20'+e};}},industryRule={'id':'industry','description':'Industry\x20scenario\x20match','dimension':'industry','weight':0x14,'evaluation_ids':[DEMAND_MATCH_EVALUATION],'evaluate':a=>{const b=a['facts']['demand_cap'],c=a['facts']['service_cap'];if(b['industry']==='general'||c['industry']==='general')return{'score':0x32,'weight':0x14,'reason':'industry\x20unknown\x20(neutral)'};const e=b['industry']===c['industry']?0x64:0x0;return{'score':e,'weight':0x14,'reason':b['industry']+'\x20vs\x20'+c['industry']};}},priceRule={'id':'price','description':'Service\x20price\x20within\x20demand\x20budget','dimension':'price','weight':0xf,'evaluation_ids':[DEMAND_MATCH_EVALUATION],'evaluate':a=>{const b=a['facts']['demand_cap'],c=a['facts']['service_cap'];if(b['price_max']===undefined||c['price_min']===undefined)return{'score':0x32,'weight':0xf,'reason':'price\x20unknown\x20(neutral)'};if(c['price_min']<=b['price_max'])return{'score':0x64,'weight':0xf,'reason':'within\x20budget'};if(c['price_min']<=b['price_max']*0x6en/0x64n)return{'score':0x32,'weight':0xf,'reason':'slightly\x20over\x20budget'};return{'score':0x0,'weight':0xf,'reason':'over\x20budget'};}},trustRule={'id':'trust','description':'Service\x20trust\x20score','dimension':'trust','weight':0xf,'evaluation_ids':[DEMAND_MATCH_EVALUATION],'evaluate':a=>{const b=a['facts']['service_cap'],c=b['trust_score'],d=c>=0x4b?0x64:c>=0x32?0x3c:c>=0x19?0x1e:0x0;return{'score':d,'weight':0xf,'reason':'trust\x20'+c};}},capabilitiesRule={'id':'capabilities','description':'Demand\x20capability\x20requirements\x20covered\x20by\x20the\x20service','dimension':'capabilities','weight':0x1e,'evaluation_ids':[DEMAND_MATCH_EVALUATION],'evaluate':a=>{const b=a['facts']['demand_cap'],c=a['facts']['service_cap'],e=requiredCapabilities(b['capabilities']);if(e['length']===0x0)return{'score':0x32,'weight':0x1e,'reason':'no\x20capability\x20requirement\x20(neutral)'};const f=e['filter'](g=>c['capabilities'][g]);return{'score':Math['round'](f['length']/e['length']*0x64),'weight':0x1e,'matched':f,'mismatched':e['filter'](g=>!c['capabilities'][g]),'reason':f['length']+'/'+e['length']+'\x20required\x20capabilities\x20covered'};}},tagsRule={'id':'tags','description':'Keyword/tag\x20overlap','dimension':'tags','weight':0x5,'evaluation_ids':[DEMAND_MATCH_EVALUATION],'evaluate':a=>{const b=a['facts']['demand_cap'],c=a['facts']['service_cap'],e=new Set((b['keywords']??[])['map'](h=>h['toLowerCase']())),f=new Set([...c['tags']??[],...c['keywords']??[]]['map'](h=>h['toLowerCase']()));if(e['size']===0x0)return{'score':0x32,'weight':0x5,'reason':'no\x20keywords\x20(neutral)'};const g=[...e]['filter'](h=>f['has'](h))['length'];return{'score':Math['round'](g/e['size']*0x64),'weight':0x5,'reason':g+'/'+e['size']+'\x20keywords'};}},acceptanceRule=createAcceptanceRule(DEMAND_MATCH_EVALUATION,{'weight':0xa});export function registerDemandMatchEvaluation(a=getEvaluationEngine()){a['registerDataSource'](dsCaps);for(const b of[regionRule,industryRule,priceRule,trustRule,capabilitiesRule,tagsRule,acceptanceRule]){a['registerRule'](b);}}export async function matchDemandToServices(a,b,c,d=0x5,e){const f=getEvaluationEngine(),g=[];for(const h of b){const i=await f['evaluate'](DEMAND_MATCH_EVALUATION,{'demand_cap':a,'service':h,'presenter_history':e??[]},c);g['push']({'service':h,'result':i});}return g['sort']((j,k)=>k['result']['total']-j['result']['total']),g['slice'](0x0,d);}export async function matchServiceToDemands(a,b,c,d=0x5,e){const f=getEvaluationEngine(),g=[];for(const h of b){const i=await f['evaluate'](DEMAND_MATCH_EVALUATION,{'service_cap':a,'demand':h,'presenter_history':e??[]},c);g['push']({'demand':h,'result':i});}return g['sort']((j,k)=>k['result']['total']-j['result']['total']),g['slice'](0x0,d);}
1
+ import{createAcceptanceRule}from'../acceptance.js';import{requiredCapabilities}from'../capability.js';import{getEvaluationEngine}from'../engine.js';import{extractDemandCapability,extractServiceCapability}from'../extract.js';import{relateRegion}from'../region.js';import{getJudgmentDoc}from'../../config/judgment.js';export const DEMAND_MATCH_EVALUATION='demand_match';function matchParams(){return getJudgmentDoc()['match'];}const dsCaps={'id':'ds_caps','description':'Extract\x20demand\x20+\x20service\x20capability\x20vectors\x20(either\x20may\x20be\x20pre-computed\x20or\x20raw)','evaluation_ids':[DEMAND_MATCH_EVALUATION],'extract':a=>({'demand_cap':a['entities']['demand_cap']??extractDemandCapability(a['entities']['demand']),'service_cap':a['entities']['service_cap']??extractServiceCapability(a['entities']['service'])})},regionRule={'id':'region','description':'Geographic\x20region\x20relation\x20between\x20demand\x20and\x20service','dimension':'region',get 'weight'(){return matchParams()['weights']['region'];},'evaluation_ids':[DEMAND_MATCH_EVALUATION],'evaluate':a=>{const b=matchParams(),c=a['facts']['demand_cap'],e=a['facts']['service_cap'],f=relateRegion(c['region'],e['region']);return{'score':b['region_scores'][f],'weight':b['weights']['region'],'reason':'region\x20'+f};}},industryRule={'id':'industry','description':'Industry\x20scenario\x20match','dimension':'industry',get 'weight'(){return matchParams()['weights']['industry'];},'evaluation_ids':[DEMAND_MATCH_EVALUATION],'evaluate':a=>{const b=matchParams(),c=a['facts']['demand_cap'],e=a['facts']['service_cap'];if(c['industry']==='general'||e['industry']==='general')return{'score':b['neutral_score'],'weight':b['weights']['industry'],'reason':'industry\x20unknown\x20(neutral)'};const f=c['industry']===e['industry']?0x64:0x0;return{'score':f,'weight':b['weights']['industry'],'reason':c['industry']+'\x20vs\x20'+e['industry']};}},priceRule={'id':'price','description':'Service\x20price\x20within\x20demand\x20budget','dimension':'price',get 'weight'(){return matchParams()['weights']['price'];},'evaluation_ids':[DEMAND_MATCH_EVALUATION],'evaluate':a=>{const b=matchParams(),c=a['facts']['demand_cap'],e=a['facts']['service_cap'];if(c['price_max']===undefined||e['price_min']===undefined)return{'score':b['neutral_score'],'weight':b['weights']['price'],'reason':'price\x20unknown\x20(neutral)'};if(e['price_min']<=c['price_max'])return{'score':0x64,'weight':b['weights']['price'],'reason':'within\x20budget'};const f=c['price_max']*BigInt(Math['round'](0x64+b['price_over_budget_tolerance_pct']))/0x64n;if(e['price_min']<=f)return{'score':b['neutral_score'],'weight':b['weights']['price'],'reason':'slightly\x20over\x20budget'};return{'score':0x0,'weight':b['weights']['price'],'reason':'over\x20budget'};}},trustRule={'id':'trust','description':'Service\x20trust\x20score','dimension':'trust',get 'weight'(){return matchParams()['weights']['trust'];},'evaluation_ids':[DEMAND_MATCH_EVALUATION],'evaluate':a=>{const b=matchParams(),c=a['facts']['service_cap'],d=c['trust_score'],e=b['trust_bands']['find'](g=>d>=g['min']),f=e?e['score']:0x0;return{'score':f,'weight':b['weights']['trust'],'reason':'trust\x20'+d};}},capabilitiesRule={'id':'capabilities','description':'Demand\x20capability\x20requirements\x20covered\x20by\x20the\x20service','dimension':'capabilities',get 'weight'(){return matchParams()['weights']['capabilities'];},'evaluation_ids':[DEMAND_MATCH_EVALUATION],'evaluate':a=>{const b=matchParams(),c=a['facts']['demand_cap'],e=a['facts']['service_cap'],f=requiredCapabilities(c['capabilities']);if(f['length']===0x0)return{'score':b['neutral_score'],'weight':b['weights']['capabilities'],'reason':'no\x20capability\x20requirement\x20(neutral)'};const g=f['filter'](h=>e['capabilities'][h]);return{'score':Math['round'](g['length']/f['length']*0x64),'weight':b['weights']['capabilities'],'matched':g,'mismatched':f['filter'](h=>!e['capabilities'][h]),'reason':g['length']+'/'+f['length']+'\x20required\x20capabilities\x20covered'};}},tagsRule={'id':'tags','description':'Keyword/tag\x20overlap','dimension':'tags',get 'weight'(){return matchParams()['weights']['tags'];},'evaluation_ids':[DEMAND_MATCH_EVALUATION],'evaluate':a=>{const b=matchParams(),c=a['facts']['demand_cap'],e=a['facts']['service_cap'],f=new Set((c['keywords']??[])['map'](i=>i['toLowerCase']())),g=new Set([...e['tags']??[],...e['keywords']??[]]['map'](i=>i['toLowerCase']()));if(f['size']===0x0)return{'score':b['neutral_score'],'weight':b['weights']['tags'],'reason':'no\x20keywords\x20(neutral)'};const h=[...f]['filter'](i=>g['has'](i))['length'];return{'score':Math['round'](h/f['size']*0x64),'weight':b['weights']['tags'],'reason':h+'/'+f['size']+'\x20keywords'};}},acceptanceRule=createAcceptanceRule(DEMAND_MATCH_EVALUATION,{'weight':matchParams()['weights']['acceptance'],'weightOf':()=>matchParams()['weights']['acceptance']});export function registerDemandMatchEvaluation(a=getEvaluationEngine()){a['registerDataSource'](dsCaps);for(const b of[regionRule,industryRule,priceRule,trustRule,capabilitiesRule,tagsRule,acceptanceRule]){a['registerRule'](b);}}export async function matchDemandToServices(a,b,c,d,e){const f=d??matchParams()['top_n'],g=getEvaluationEngine(),h=[];for(const i of b){const j=await g['evaluate'](DEMAND_MATCH_EVALUATION,{'demand_cap':a,'service':i,'presenter_history':e??[]},c);h['push']({'service':i,'result':j});}return h['sort']((k,l)=>l['result']['total']-k['result']['total']),h['slice'](0x0,f);}export async function matchServiceToDemands(a,b,c,d,e){const f=d??matchParams()['top_n'],g=getEvaluationEngine(),h=[];for(const i of b){const j=await g['evaluate'](DEMAND_MATCH_EVALUATION,{'service_cap':a,'demand':i,'presenter_history':e??[]},c);h['push']({'demand':i,'result':j});}return h['sort']((k,l)=>l['result']['total']-k['result']['total']),h['slice'](0x0,f);}
@@ -1 +1 @@
1
- import{COVERAGE_VOCABULARY}from'../../graph/onchain/facts.js';import{getEvaluationEngine}from'../engine.js';import{defaultWeights,dimensionLabel,gradeWord,severityDeduction}from'../standards.js';export const GRAPH_TRUST_EVALUATION='graph_service_trust';export const GRAPH_RISK_EVALUATION='graph_service_risk';export const GRAPH_RULE_INPUT_FACTS={'trust_arbitration':['arbitration.binding'],'trust_reviews':['reviews.votes'],'trust_fulfillment':['fulfillment.orders'],'trust_fund_safety':['fund.compensation','fund.exposure'],'trust_transparency':['transparency.profile'],'risk_workflow':['risk_workflow.findings'],'risk_fund':['risk_fund.findings'],'risk_trust':['risk_trust.findings'],'risk_behavior':['risk_behavior.findings']};const WEIGHTS=defaultWeights(),dsGraphFacts={'id':'ds_graph_facts','description':'Unpack\x20the\x20graph-projected\x20evaluation\x20facts\x20(Task\x2013\x20projection)\x20into\x20the\x20rule\x20context','evaluation_ids':[GRAPH_TRUST_EVALUATION,GRAPH_RISK_EVALUATION],'extract':a=>{const b=a['entities']['graph_facts'],c={'target':b['target'],'completeness':b['completeness']};for(const d of b['facts'])c[d['key']]=d;return c;}};function inputFact(a,b){const c=GRAPH_RULE_INPUT_FACTS[b];return c?a['facts'][c[0x0]]:undefined;}function factOf(a,b){return a['facts']['find'](c=>c['key']===b);}function trustArbitrationRule(){const a='trust_arbitration';return{'id':a,'description':'Arbitration\x20trust\x20dimension\x20(binding\x20material\x20from\x20the\x20graph\x20facts)','dimension':dimensionLabel(a),'weight':WEIGHTS['trust_arbitration'],'evaluation_ids':[GRAPH_TRUST_EVALUATION],'evaluate':b=>{const c=inputFact(b,a);if(!c||c['state']==='gap')return null;const d=c['value']??[];if(d['length']===0x0)return{'score':0x0,'weight':WEIGHTS['trust_arbitration'],'reason':'No\x20arbitration\x20binding\x20configured\x20(verified\x20absence)\x20—\x20'+c['evidence'],'mismatched':['arbitration_binding']};let e=0x0;const f=[],g=[];if(d['every'](h=>h['votingGuards']>0x0))e+=0x8,f['push']('arbitrator\x20roster\x20configured');else g['push']('no\x20arbitrator\x20roster');if(d['every'](h=>BigInt(h['fee']||'0')>0x0n))e+=0x6,f['push']('arbitration\x20fee\x20funded');else g['push']('arbitration\x20fee\x20unfunded');if(!d['some'](h=>h['paused']))e+=0x6,f['push']('arbitration\x20active');else g['push']('arbitration\x20paused');return{'score':Math['round'](e/0x14*0x64),'weight':WEIGHTS['trust_arbitration'],'reason':'Arbitration\x20'+e+'/20\x20—\x20'+c['evidence'],'matched':f,'mismatched':g};}};}function trustReviewsRule(){const a='trust_reviews';return{'id':a,'description':'Review\x20reputation\x20dimension\x20(registrar\x20votes\x20from\x20the\x20graph\x20facts)','dimension':dimensionLabel(a),'weight':WEIGHTS['trust_reviews'],'evaluation_ids':[GRAPH_TRUST_EVALUATION],'evaluate':b=>{const c=inputFact(b,a);if(!c||c['state']==='gap')return null;const d=c['value']??{'total':0x0,'like':0x0,'dislike':0x0,'favor':0x0};if(c['state']==='empty'||d['total']===0x0)return{'score':0x32,'weight':WEIGHTS['trust_reviews'],'reason':'No\x20reputation\x20signal\x20(verified\x20empty\x20window)\x20—\x20'+c['evidence']};const e=d['like']/d['total'],f=Math['min'](0x23,Math['round'](e*0x19)+Math['min'](0xa,d['favor']));return{'score':Math['round'](f/0x23*0x64),'weight':WEIGHTS['trust_reviews'],'reason':'Reviews\x20'+f+'/35\x20(like\x20rate\x20'+Math['round'](e*0x64)+'%)\x20—\x20'+c['evidence'],'matched':['vote\x20window\x20read\x20without\x20truncation'],'mismatched':d['like']<d['dislike']?['dislike\x20majority']:[]};}};}function trustFulfillmentRule(){const a='trust_fulfillment';return{'id':a,'description':'Fulfillment\x20dimension\x20(windowed\x20order\x20record\x20from\x20the\x20graph\x20facts)','dimension':dimensionLabel(a),'weight':WEIGHTS['trust_fulfillment'],'evaluation_ids':[GRAPH_TRUST_EVALUATION],'evaluate':b=>{const c=inputFact(b,a);if(!c||c['state']==='gap')return null;const d=c['value'];if(c['state']==='empty'||!d||d['observed']===0x0)return{'score':0x32,'weight':WEIGHTS['trust_fulfillment'],'reason':'No\x20fulfillment\x20record\x20yet\x20(verified\x20empty\x20window)\x20—\x20'+c['evidence']};const e=Math['min'](0xa,Math['floor'](d['observed']/0x5)),f=d['completed']+d['inProgress'],g=f>0x0?Math['round'](d['completed']/f*0xa):0x5,h=Math['min'](0x14,e+g);return{'score':Math['round'](h/0x14*0x64),'weight':WEIGHTS['trust_fulfillment'],'reason':'Fulfillment\x20'+h+'/20\x20(recent\x20orders:\x20'+d['observed']+')\x20—\x20'+c['evidence'],'matched':['completion\x20'+d['completed']+'/'+(f||d['observed'])+'\x20resolved'],'mismatched':d['completed']===0x0?['no\x20completed\x20order\x20in\x20window']:[]};}};}function trustFundSafetyRule(){const a='trust_fund_safety';return{'id':a,'description':'Fund\x20safety\x20dimension\x20(compensation\x20fund\x20vs\x20windowed\x20exposure\x20from\x20the\x20graph\x20facts)','dimension':dimensionLabel(a),'weight':WEIGHTS['trust_fund_safety'],'evaluation_ids':[GRAPH_TRUST_EVALUATION],'evaluate':b=>{const c=GRAPH_RULE_INPUT_FACTS[a],d=b['facts'][c[0x0]],e=b['facts'][c[0x1]];if(!d||!e||d['state']==='gap'||e['state']==='gap')return null;const f=BigInt(d['value']?.['fund']??'0'),g=[];let h;const i=e['value'],j=BigInt(i?.['windowedAmount']??'0');if(e['state']==='empty'||j===0x0n){h=f>0x0n?0xf:0x0;if(f===0x0n)g['push']('no\x20compensation\x20fund');}else{if(i['coverageMet'])h=0xf;else{const k=BigInt(i['neededCeiling']||'1');if(f>=j){const l=Number(f*0x3e8n/k)/0x3e8;h=0xa+Math['round']((l-0x1/0x3)/(0x2/0x3)*0x5);}else h=Math['round'](Number(f*0x3e8n/j)/0x3e8*0xa);g['push']('compensation\x20fund\x20below\x20the\x20statutory\x203x\x20exposure\x20ceiling');}}return{'score':Math['round'](Math['max'](0x0,h)/0xf*0x64),'weight':WEIGHTS['trust_fund_safety'],'reason':'Fund\x20safety\x20'+Math['max'](0x0,h)+'/15\x20—\x20'+d['evidence']+'\x20'+e['evidence'],'matched':g['length']===0x0?['exposure\x20covered']:[],'mismatched':g};}};}function trustTransparencyRule(){const a='trust_transparency';return{'id':a,'description':'Transparency\x20dimension\x20(snapshot\x20self-description\x20from\x20the\x20graph\x20facts)','dimension':dimensionLabel(a),'weight':WEIGHTS['trust_transparency'],'evaluation_ids':[GRAPH_TRUST_EVALUATION],'evaluate':b=>{const c=inputFact(b,a);if(!c||c['state']==='gap')return null;const d=c['value'];if(c['state']==='empty'||!d)return{'score':0x32,'weight':WEIGHTS['trust_transparency'],'reason':'No\x20transparency\x20profile\x20material\x20—\x20'+c['evidence']};let e=0x0;const f=[],g=[];if(d['published'])e+=0x4,f['push']('service\x20published');else g['push']('service\x20unpublished');if(d['description']!=='')e+=0x3,f['push']('description\x20present');else g['push']('empty\x20description');if(d['location']!=='')e+=0x3,f['push']('location\x20present');else g['push']('empty\x20location');return{'score':Math['round'](e/0xa*0x64),'weight':WEIGHTS['trust_transparency'],'reason':'Transparency\x20'+e+'/10\x20—\x20'+c['evidence'],'matched':f,'mismatched':g};}};}function riskRule(a,b){const c=dimensionLabel(a);return{'id':a,'description':c+'\x20structural\x20risk\x20dimension\x20(analyzer\x20findings\x20reused\x20by\x20reference)','dimension':c,'weight':b,'evaluation_ids':[GRAPH_RISK_EVALUATION],'evaluate':d=>{const e=inputFact(d,a);if(!e||e['state']==='gap')return null;const f=e['value']?.['findings']??[];if(e['state']==='empty')return{'score':0x32,'weight':b,'reason':'No\x20'+c+'\x20material\x20configured\x20(verified\x20absence)\x20—\x20'+e['evidence']};const g=f['reduce']((i,j)=>i+severityDeduction(j['severity']),0x0),h=Math['max'](0x0,0x64-g);return{'score':h,'weight':b,'reason':f['length']>0x0?f['length']+'\x20structural\x20finding(s):\x20'+f['map'](i=>'['+i['severity']+']\x20'+i['title'])['join'](';\x20')+'\x20—\x20'+e['evidence']:'No\x20structural\x20risk\x20fired\x20—\x20'+e['evidence'],'matched':f['length']===0x0?['no\x20structural\x20findings']:[],'mismatched':[...new Set(f['map'](i=>i['title']))],'finding_refs':f['map'](i=>({'id':i['id'],'title':i['title'],'severity':i['severity']})),'red_flag':f['some'](i=>i['severity']==='critical')};}};}export function registerGraphServiceEvaluations(a=getEvaluationEngine()){a['registerDataSource'](dsGraphFacts);const b=[trustArbitrationRule(),trustReviewsRule(),trustFulfillmentRule(),trustFundSafetyRule(),trustTransparencyRule(),riskRule('risk_workflow',WEIGHTS['risk_workflow']),riskRule('risk_fund',WEIGHTS['risk_fund']),riskRule('risk_trust',WEIGHTS['risk_trust']),riskRule('risk_behavior',WEIGHTS['risk_behavior'])];for(const c of b)a['registerRule'](c);}function collectUnverified(a){const b=new Map(a['facts']['map'](d=>[d['key'],d['state']])),c=[];for(const [d,e]of Object['entries'](GRAPH_RULE_INPUT_FACTS)){if(e['some'](f=>b['get'](f)==='gap'))c['push'](d);}return c;}function summarize(a,b,c,d){const e=['Service\x20'+b+'\x20'+a['total']+'/100\x20(grade:\x20'+gradeWord(b,a['total'])+')'],f=[...a['breakdown']]['sort']((g,h)=>g['score']-h['score'])[0x0];if(f){const g=(GRAPH_RULE_INPUT_FACTS[f['rule_id']]??[])['map'](h=>factOf(c,h)?.['evidence'])['filter'](Boolean)['join']('\x20');if(g)e['push']('weakest\x20'+dimensionLabel(f['rule_id'])+'\x20'+f['score']+'/100\x20—\x20'+g);}if(d['length']>0x0)e['push']('unverifiable\x20(excluded\x20from\x20aggregation):\x20'+d['map'](dimensionLabel)['join'](',\x20'));if(a['blocked'])e['push']('blocked:\x20'+(a['red_flags'][0x0]??'red\x20flag'));return e['join']('\x20—\x20');}export async function evaluateGraphServiceFacts(a,b){const c=getEvaluationEngine(),d={'graph_facts':a},e=await c['evaluate'](GRAPH_TRUST_EVALUATION,d,b),f=await c['evaluate'](GRAPH_RISK_EVALUATION,d,b),g=collectUnverified(a);return e['unverified']=g,f['unverified']=g,e['summary']=summarize(e,'trust',a,g),f['summary']=summarize(f,'risk',a,g),{'target':a['target'],'trust':e,'risk':f,'completeness':a['completeness'],'coverage':a['slots'],'unverified':g,'vocabulary':COVERAGE_VOCABULARY};}
1
+ import{COVERAGE_VOCABULARY}from'../../graph/onchain/facts.js';import{getEvaluationEngine}from'../engine.js';import{defaultWeight,dimensionLabel,gradeWord,severityDeduction}from'../standards.js';export const GRAPH_TRUST_EVALUATION='graph_service_trust';export const GRAPH_RISK_EVALUATION='graph_service_risk';export const GRAPH_RULE_INPUT_FACTS={'trust_arbitration':['arbitration.binding'],'trust_reviews':['reviews.votes'],'trust_fulfillment':['fulfillment.orders'],'trust_fund_safety':['fund.compensation','fund.exposure'],'trust_transparency':['transparency.profile'],'risk_workflow':['risk_workflow.findings'],'risk_fund':['risk_fund.findings'],'risk_trust':['risk_trust.findings'],'risk_behavior':['risk_behavior.findings']};const dsGraphFacts={'id':'ds_graph_facts','description':'Unpack\x20the\x20graph-projected\x20evaluation\x20facts\x20(Task\x2013\x20projection)\x20into\x20the\x20rule\x20context','evaluation_ids':[GRAPH_TRUST_EVALUATION,GRAPH_RISK_EVALUATION],'extract':a=>{const b=a['entities']['graph_facts'],c={'target':b['target'],'completeness':b['completeness']};for(const d of b['facts'])c[d['key']]=d;return c;}};function inputFact(a,b){const c=GRAPH_RULE_INPUT_FACTS[b];return c?a['facts'][c[0x0]]:undefined;}function factOf(a,b){return a['facts']['find'](c=>c['key']===b);}function trustArbitrationRule(){const a='trust_arbitration';return{'id':a,'description':'Arbitration\x20trust\x20dimension\x20(binding\x20material\x20from\x20the\x20graph\x20facts)',get 'dimension'(){return dimensionLabel(a);},get 'weight'(){return defaultWeight(a);},'evaluation_ids':[GRAPH_TRUST_EVALUATION],'evaluate':b=>{const c=inputFact(b,a);if(!c||c['state']==='gap')return null;const d=c['value']??[];if(d['length']===0x0)return{'score':0x0,'weight':defaultWeight(a),'reason':'No\x20arbitration\x20binding\x20configured\x20(verified\x20absence)\x20—\x20'+c['evidence'],'mismatched':['arbitration_binding']};let e=0x0;const f=[],g=[];if(d['every'](h=>h['votingGuards']>0x0))e+=0x8,f['push']('arbitrator\x20roster\x20configured');else g['push']('no\x20arbitrator\x20roster');if(d['every'](h=>BigInt(h['fee']||'0')>0x0n))e+=0x6,f['push']('arbitration\x20fee\x20funded');else g['push']('arbitration\x20fee\x20unfunded');if(!d['some'](h=>h['paused']))e+=0x6,f['push']('arbitration\x20active');else g['push']('arbitration\x20paused');return{'score':Math['round'](e/0x14*0x64),'weight':defaultWeight(a),'reason':'Arbitration\x20'+e+'/20\x20—\x20'+c['evidence'],'matched':f,'mismatched':g};}};}function trustReviewsRule(){const a='trust_reviews';return{'id':a,'description':'Review\x20reputation\x20dimension\x20(registrar\x20votes\x20from\x20the\x20graph\x20facts)',get 'dimension'(){return dimensionLabel(a);},get 'weight'(){return defaultWeight(a);},'evaluation_ids':[GRAPH_TRUST_EVALUATION],'evaluate':b=>{const c=inputFact(b,a);if(!c||c['state']==='gap')return null;const d=c['value']??{'total':0x0,'like':0x0,'dislike':0x0,'favor':0x0};if(c['state']==='empty'||d['total']===0x0)return{'score':0x32,'weight':defaultWeight(a),'reason':'No\x20reputation\x20signal\x20(verified\x20empty\x20window)\x20—\x20'+c['evidence']};const e=d['like']/d['total'],f=Math['min'](0x23,Math['round'](e*0x19)+Math['min'](0xa,d['favor']));return{'score':Math['round'](f/0x23*0x64),'weight':defaultWeight(a),'reason':'Reviews\x20'+f+'/35\x20(like\x20rate\x20'+Math['round'](e*0x64)+'%)\x20—\x20'+c['evidence'],'matched':['vote\x20window\x20read\x20without\x20truncation'],'mismatched':d['like']<d['dislike']?['dislike\x20majority']:[]};}};}function trustFulfillmentRule(){const a='trust_fulfillment';return{'id':a,'description':'Fulfillment\x20dimension\x20(windowed\x20order\x20record\x20from\x20the\x20graph\x20facts)',get 'dimension'(){return dimensionLabel(a);},get 'weight'(){return defaultWeight(a);},'evaluation_ids':[GRAPH_TRUST_EVALUATION],'evaluate':b=>{const c=inputFact(b,a);if(!c||c['state']==='gap')return null;const d=c['value'];if(c['state']==='empty'||!d||d['observed']===0x0)return{'score':0x32,'weight':defaultWeight(a),'reason':'No\x20fulfillment\x20record\x20yet\x20(verified\x20empty\x20window)\x20—\x20'+c['evidence']};const e=Math['min'](0xa,Math['floor'](d['observed']/0x5)),f=d['completed']+d['inProgress'],g=f>0x0?Math['round'](d['completed']/f*0xa):0x5,h=Math['min'](0x14,e+g);return{'score':Math['round'](h/0x14*0x64),'weight':defaultWeight(a),'reason':'Fulfillment\x20'+h+'/20\x20(recent\x20orders:\x20'+d['observed']+')\x20—\x20'+c['evidence'],'matched':['completion\x20'+d['completed']+'/'+(f||d['observed'])+'\x20resolved'],'mismatched':d['completed']===0x0?['no\x20completed\x20order\x20in\x20window']:[]};}};}function trustFundSafetyRule(){const a='trust_fund_safety';return{'id':a,'description':'Fund\x20safety\x20dimension\x20(compensation\x20fund\x20vs\x20windowed\x20exposure\x20from\x20the\x20graph\x20facts)',get 'dimension'(){return dimensionLabel(a);},get 'weight'(){return defaultWeight(a);},'evaluation_ids':[GRAPH_TRUST_EVALUATION],'evaluate':b=>{const c=GRAPH_RULE_INPUT_FACTS[a],d=b['facts'][c[0x0]],e=b['facts'][c[0x1]];if(!d||!e||d['state']==='gap'||e['state']==='gap')return null;const f=BigInt(d['value']?.['fund']??'0'),g=[];let h;const i=e['value'],j=BigInt(i?.['windowedAmount']??'0');if(e['state']==='empty'||j===0x0n){h=f>0x0n?0xf:0x0;if(f===0x0n)g['push']('no\x20compensation\x20fund');}else{if(i['coverageMet'])h=0xf;else{const k=BigInt(i['neededCeiling']||'1');if(f>=j){const l=Number(f*0x3e8n/k)/0x3e8;h=0xa+Math['round']((l-0x1/0x3)/(0x2/0x3)*0x5);}else h=Math['round'](Number(f*0x3e8n/j)/0x3e8*0xa);g['push']('compensation\x20fund\x20below\x20the\x20statutory\x203x\x20exposure\x20ceiling');}}return{'score':Math['round'](Math['max'](0x0,h)/0xf*0x64),'weight':defaultWeight(a),'reason':'Fund\x20safety\x20'+Math['max'](0x0,h)+'/15\x20—\x20'+d['evidence']+'\x20'+e['evidence'],'matched':g['length']===0x0?['exposure\x20covered']:[],'mismatched':g};}};}function trustTransparencyRule(){const a='trust_transparency';return{'id':a,'description':'Transparency\x20dimension\x20(snapshot\x20self-description\x20from\x20the\x20graph\x20facts)',get 'dimension'(){return dimensionLabel(a);},get 'weight'(){return defaultWeight(a);},'evaluation_ids':[GRAPH_TRUST_EVALUATION],'evaluate':b=>{const c=inputFact(b,a);if(!c||c['state']==='gap')return null;const d=c['value'];if(c['state']==='empty'||!d)return{'score':0x32,'weight':defaultWeight(a),'reason':'No\x20transparency\x20profile\x20material\x20—\x20'+c['evidence']};let e=0x0;const f=[],g=[];if(d['published'])e+=0x4,f['push']('service\x20published');else g['push']('service\x20unpublished');if(d['description']!=='')e+=0x3,f['push']('description\x20present');else g['push']('empty\x20description');if(d['location']!=='')e+=0x3,f['push']('location\x20present');else g['push']('empty\x20location');return{'score':Math['round'](e/0xa*0x64),'weight':defaultWeight(a),'reason':'Transparency\x20'+e+'/10\x20—\x20'+c['evidence'],'matched':f,'mismatched':g};}};}function riskRule(a){const b=dimensionLabel(a);return{'id':a,'description':b+'\x20structural\x20risk\x20dimension\x20(analyzer\x20findings\x20reused\x20by\x20reference)','dimension':b,get 'weight'(){return defaultWeight(a);},'evaluation_ids':[GRAPH_RISK_EVALUATION],'evaluate':c=>{const d=inputFact(c,a);if(!d||d['state']==='gap')return null;const e=d['value']?.['findings']??[];if(d['state']==='empty')return{'score':0x32,'weight':defaultWeight(a),'reason':'No\x20'+b+'\x20material\x20configured\x20(verified\x20absence)\x20—\x20'+d['evidence']};const f=e['reduce']((h,i)=>h+severityDeduction(i['severity']),0x0),g=Math['max'](0x0,0x64-f);return{'score':g,'weight':defaultWeight(a),'reason':e['length']>0x0?e['length']+'\x20structural\x20finding(s):\x20'+e['map'](h=>'['+h['severity']+']\x20'+h['title'])['join'](';\x20')+'\x20—\x20'+d['evidence']:'No\x20structural\x20risk\x20fired\x20—\x20'+d['evidence'],'matched':e['length']===0x0?['no\x20structural\x20findings']:[],'mismatched':[...new Set(e['map'](h=>h['title']))],'finding_refs':e['map'](h=>({'id':h['id'],'title':h['title'],'severity':h['severity']})),'red_flag':e['some'](h=>h['severity']==='critical')};}};}export function registerGraphServiceEvaluations(a=getEvaluationEngine()){a['registerDataSource'](dsGraphFacts);const b=[trustArbitrationRule(),trustReviewsRule(),trustFulfillmentRule(),trustFundSafetyRule(),trustTransparencyRule(),riskRule('risk_workflow'),riskRule('risk_fund'),riskRule('risk_trust'),riskRule('risk_behavior')];for(const c of b)a['registerRule'](c);}function collectUnverified(a){const b=new Map(a['facts']['map'](d=>[d['key'],d['state']])),c=[];for(const [d,e]of Object['entries'](GRAPH_RULE_INPUT_FACTS)){if(e['some'](f=>b['get'](f)==='gap'))c['push'](d);}return c;}function summarize(a,b,c,d){const e=['Service\x20'+b+'\x20'+a['total']+'/100\x20(grade:\x20'+gradeWord(b,a['total'])+')'],f=[...a['breakdown']]['sort']((g,h)=>g['score']-h['score'])[0x0];if(f){const g=(GRAPH_RULE_INPUT_FACTS[f['rule_id']]??[])['map'](h=>factOf(c,h)?.['evidence'])['filter'](Boolean)['join']('\x20');if(g)e['push']('weakest\x20'+dimensionLabel(f['rule_id'])+'\x20'+f['score']+'/100\x20—\x20'+g);}if(d['length']>0x0)e['push']('unverifiable\x20(excluded\x20from\x20aggregation):\x20'+d['map'](dimensionLabel)['join'](',\x20'));if(a['blocked'])e['push']('blocked:\x20'+(a['red_flags'][0x0]??'red\x20flag'));return e['join']('\x20—\x20');}export async function evaluateGraphServiceFacts(a,b){const c=getEvaluationEngine(),d={'graph_facts':a},e=await c['evaluate'](GRAPH_TRUST_EVALUATION,d,b),f=await c['evaluate'](GRAPH_RISK_EVALUATION,d,b),g=collectUnverified(a);return e['unverified']=g,f['unverified']=g,e['summary']=summarize(e,'trust',a,g),f['summary']=summarize(f,'risk',a,g),{'target':a['target'],'trust':e,'risk':f,'completeness':a['completeness'],'coverage':a['slots'],'unverified':g,'vocabulary':COVERAGE_VOCABULARY};}
@@ -1 +1 @@
1
- import{describe,expect,it}from'vitest';import{ENTRYPOINT}from'@wowok/wowok';import{FakeDataPlane}from'../../graph/onchain/dataplane.js';import{expandTopology}from'../../graph/onchain/expand.js';import{FULL,GAP,fullServiceState,gapServiceState,truncatedServiceState}from'../../graph/onchain/fixtures.js';import{buildViewport}from'../../graph/onchain/viewport.js';import{runAnalyzers}from'../../graph/onchain/analyze.js';import{EVALUATION_SERVICE_INTENTS,resolveExpansionStrategy,withEvaluationBundle}from'../../graph/onchain/strategy.js';import{projectEvaluationFacts as a15a}from'../../graph/onchain/facts.js';import{evaluateGraphServiceFacts,GRAPH_RULE_INPUT_FACTS,registerGraphServiceEvaluations}from'./graph-service.js';async function evalState(a,b){registerGraphServiceEvaluations();const c=withEvaluationBundle(resolveExpansionStrategy({'intents':[...EVALUATION_SERVICE_INTENTS]})),d=await expandTopology(new FakeDataPlane(a),{'network':ENTRYPOINT['Mainnet'],'seed':b,'edges':c['edges'],'budget':c['budget']}),e=buildViewport(d,b,'neutral'),f=a15a(e,b,runAnalyzers(e));return{'projected':f,'r':await evaluateGraphServiceFacts(f)};}const scoreOf=(a,b,c)=>a[b]['breakdown']['find'](d=>d['rule_id']===c);describe('graph\x20service\x20evaluation\x20—\x20fully\x20hooked\x20shop\x20(TR-14.1)',()=>{it('scores\x20all\x20nine\x20dimensions\x20from\x20material\x20facts\x20with\x20no\x20default-low\x20deductions',async()=>{const {r:a}=await evalState(fullServiceState(),FULL['svc']);expect(a['unverified'])['toEqual']([]),expect(a['completeness'])['toBe'](0x64);const c=scoreOf(a,'trust','trust_arbitration');expect(c['score'])['toBe'](0x64),expect(c['matched'])['toEqual'](expect['arrayContaining'](['arbitrator\x20roster\x20configured','arbitration\x20fee\x20funded','arbitration\x20active'])),expect(c['reason'])['toContain']('Arbitration\x2020/20'),expect(scoreOf(a,'trust','trust_reviews')['score'])['toBe'](0x28),expect(scoreOf(a,'trust','trust_fulfillment')['score'])['toBe'](0x19);const d=scoreOf(a,'trust','trust_fund_safety');expect(d['score'])['toBe'](0x0),expect(d['mismatched'])['toContain']('compensation\x20fund\x20below\x20the\x20statutory\x203x\x20exposure\x20ceiling'),expect(scoreOf(a,'trust','trust_transparency')['score'])['toBe'](0x64),expect(a['trust']['total'])['toBe'](0x31);const e=scoreOf(a,'risk','risk_fund');expect(e['score'])['toBeLessThan'](0x64),expect(e['mismatched'])['toContain']('Payout\x20exposure:\x20compensation\x20fund\x20is\x20below\x20the\x203x\x20ceiling\x20of\x20windowed\x20order\x20amounts'),expect(e['mismatched']?.['some'](h=>h['startsWith']('R2:')))['toBe'](![]),expect(e['finding_refs']?.['map'](h=>h['id']))['toContain']('R2:'+FULL['svc']['toLowerCase']());const f=scoreOf(a,'risk','risk_trust');expect(f['score'])['toBeLessThan'](0x64),expect(f['mismatched']?.['some'](h=>h['startsWith']('R1:')))['toBe'](![]),expect(f['mismatched']?.['length'])['toBeGreaterThan'](0x0),expect(f['finding_refs']?.['some'](h=>h['id']['startsWith']('R1:')))['toBe'](!![]);for(const h of[...a['trust']['breakdown'],...a['risk']['breakdown']]){for(const i of h['mismatched']??[])expect(i)['not']['toContain']('::node::');}expect(scoreOf(a,'risk','risk_workflow')['score'])['toBe'](0x64),expect(scoreOf(a,'risk','risk_behavior')['score'])['toBe'](0x64);for(const j of[...a['trust']['breakdown'],...a['risk']['breakdown']]){const k=(j['reason']??'')['toLowerCase']();expect(k)['not']['toContain']('no\x20data'),expect(k)['not']['toContain']('default\x20low');}const g=a['trust']['trace']['filter'](l=>l['kind']==='rule'&&l['detail']['startsWith']('score='));expect(g['map'](l=>l['id']))['toEqual'](expect['arrayContaining'](Object['keys'](GRAPH_RULE_INPUT_FACTS)['filter'](l=>l['startsWith']('trust_'))));}),it('keeps\x20the\x20injection\x20+\x20requirement\x20mechanisms\x20working',async()=>{const {projected:a}=await evalState(fullServiceState(),FULL['svc']),b=await evaluateGraphServiceFacts(a,{'overrides':{'rules':{'trust_arbitration':{'weight':0x28}}}});expect(b['trust']['total'])['toBe'](0x3a);const c=await evaluateGraphServiceFacts(a,{'requirements':[{'rule_id':'trust_fund_safety','condition':'require'}]});expect(c['trust']['blocked'])['toBe'](!![]),expect(c['trust']['red_flags']['length'])['toBeGreaterThan'](0x0);});}),describe('graph\x20service\x20evaluation\x20—\x20configured-empty\x20shell\x20(TR-14.1)',()=>{it('scores\x20verified\x20absence\x20as\x20a\x20configured\x20fact\x20and\x20excludes\x20only\x20the\x20gap\x20dimension',async()=>{const {r:a}=await evalState(gapServiceState(),GAP['svc']),b=scoreOf(a,'trust','trust_arbitration');expect(b['score'])['toBe'](0x0),expect(b['reason'])['toContain']('verified\x20absence'),expect(scoreOf(a,'trust','trust_reviews')['score'])['toBe'](0x32),expect(a['unverified'])['toEqual'](['risk_workflow']),expect(scoreOf(a,'risk','risk_workflow'))['toBeUndefined'](),expect(a['risk']['unverified'])['toEqual'](['risk_workflow']),expect(a['trust']['unverified'])['toEqual'](['risk_workflow']);const c=a['risk']['trace']['find'](d=>d['kind']==='rule'&&d['id']==='risk_workflow');expect(c?.['detail'])['toContain']('not\x20applicable'),expect(scoreOf(a,'trust','trust_transparency')['score'])['toBe'](0x28),expect(scoreOf(a,'trust','trust_fund_safety')['score'])['toBe'](0x0);});}),describe('graph\x20service\x20evaluation\x20—\x20truncated\x20order\x20window\x20(TR-14.1)',()=>{it('excludes\x20the\x20unverifiable\x20dimensions\x20and\x20renormalizes\x20the\x20weighted\x20total',async()=>{const {r:a}=await evalState(truncatedServiceState(),FULL['svc']);expect(a['unverified'])['toEqual'](expect['arrayContaining'](['trust_fulfillment','trust_fund_safety','risk_fund','risk_behavior'])),expect(scoreOf(a,'trust','trust_fulfillment'))['toBeUndefined'](),expect(scoreOf(a,'trust','trust_fund_safety'))['toBeUndefined'](),expect(scoreOf(a,'risk','risk_fund'))['toBeUndefined'](),expect(scoreOf(a,'risk','risk_behavior'))['toBeUndefined'](),expect(a['trust']['total'])['toBe'](0x44);for(const b of['trust_fulfillment','trust_fund_safety']){expect(a['trust']['trace']['find'](c=>c['kind']==='rule'&&c['id']===b)?.['detail'])['toContain']('not\x20applicable');}for(const c of['risk_fund','risk_behavior']){expect(a['risk']['trace']['find'](d=>d['kind']==='rule'&&d['id']===c)?.['detail'])['toContain']('not\x20applicable');}});}),describe('graph\x20service\x20evaluation\x20—\x20scoring\x20report\x20(TR-14.2)',()=>{it('renders\x20a\x20per-dimension\x20report\x20with\x20score,\x20weight,\x20state,\x20confidence\x20and\x20evidence',async()=>{const {projected:a,r:c}=await evalState(fullServiceState(),FULL['svc']),d=new Map(a['facts']['map'](g=>[g['key'],g])),e=[];for(const g of['trust','risk']){const h=c[g];e['push'](g['toUpperCase']()+'\x20'+h['total']+'/100\x20('+h['level']+')\x20—\x20'+h['summary']);for(const i of h['breakdown']){const j=GRAPH_RULE_INPUT_FACTS[i['rule_id']]??[],k=j['map'](o=>o+':state='+(d['get'](o)?.['state']??'missing')),l=j['map'](o=>d['get'](o)?.['provenance']['confidence']??'missing'),n=j['map'](o=>d['get'](o)?.['evidence']??'missing')['join']('\x20');e['push'](i['rule_id']+':\x20score='+i['score']+'\x20weight='+i['weight']+'\x20'+k['join'](',')+'\x20confidence='+[...new Set(l)]['join']('+')+'\x20evidence=\x22'+n+'\x22');}}expect(e)['toHaveLength'](0xb);const f=e['filter'](o=>o['includes']('score='));expect(f)['toHaveLength'](0x9);for(const o of f){expect(o)['toMatch'](/weight=\d+/),expect(o)['toContain']('state=present'),expect(o)['toMatch'](/confidence=(exact|bounded|windowed|derived)/);const p=o['match'](/evidence="(.*)"/);expect(p,o)['not']['toBeNull'](),expect(p[0x1]['length'],o)['toBeGreaterThan'](0x0);}expect(c['trust']['summary'])['toContain']('weakest\x20Fund\x20safety'),expect(c['trust']['summary'])['not']['toContain']('trust_fund_safety'),expect(c['trust']['summary'])['toMatch'](/grade: (strong|fair|weak)/),expect(c['trust']['summary'])['toContain']('Compensation\x20fund');});});
1
+ import{describe,expect,it}from'vitest';import{ENTRYPOINT}from'@wowok/wowok';import{FakeDataPlane}from'../../graph/onchain/dataplane.js';import{expandTopology}from'../../graph/onchain/expand.js';import{FULL,GAP,fullServiceState,gapServiceState,truncatedServiceState}from'../../graph/onchain/fixtures.js';import{buildViewport}from'../../graph/onchain/viewport.js';import{runAnalyzers}from'../../graph/onchain/analyze.js';import{EVALUATION_SERVICE_INTENTS,resolveExpansionStrategy,withEvaluationBundle}from'../../graph/onchain/strategy.js';import{projectEvaluationFacts as a22a}from'../../graph/onchain/facts.js';import{evaluateGraphServiceFacts,GRAPH_RULE_INPUT_FACTS,registerGraphServiceEvaluations}from'./graph-service.js';async function evalState(a,b){registerGraphServiceEvaluations();const c=withEvaluationBundle(resolveExpansionStrategy({'intents':[...EVALUATION_SERVICE_INTENTS]})),d=await expandTopology(new FakeDataPlane(a),{'network':ENTRYPOINT['Mainnet'],'seed':b,'edges':c['edges'],'budget':c['budget']}),e=buildViewport(d,b,'neutral'),f=a22a(e,b,runAnalyzers(e));return{'projected':f,'r':await evaluateGraphServiceFacts(f)};}const scoreOf=(a,b,c)=>a[b]['breakdown']['find'](d=>d['rule_id']===c);describe('graph\x20service\x20evaluation\x20—\x20fully\x20hooked\x20shop\x20(TR-14.1)',()=>{it('scores\x20all\x20nine\x20dimensions\x20from\x20material\x20facts\x20with\x20no\x20default-low\x20deductions',async()=>{const {r:a}=await evalState(fullServiceState(),FULL['svc']);expect(a['unverified'])['toEqual']([]),expect(a['completeness'])['toBe'](0x64);const c=scoreOf(a,'trust','trust_arbitration');expect(c['score'])['toBe'](0x64),expect(c['matched'])['toEqual'](expect['arrayContaining'](['arbitrator\x20roster\x20configured','arbitration\x20fee\x20funded','arbitration\x20active'])),expect(c['reason'])['toContain']('Arbitration\x2020/20'),expect(scoreOf(a,'trust','trust_reviews')['score'])['toBe'](0x28),expect(scoreOf(a,'trust','trust_fulfillment')['score'])['toBe'](0x19);const d=scoreOf(a,'trust','trust_fund_safety');expect(d['score'])['toBe'](0x0),expect(d['mismatched'])['toContain']('compensation\x20fund\x20below\x20the\x20statutory\x203x\x20exposure\x20ceiling'),expect(scoreOf(a,'trust','trust_transparency')['score'])['toBe'](0x64),expect(a['trust']['total'])['toBe'](0x31);const e=scoreOf(a,'risk','risk_fund');expect(e['score'])['toBeLessThan'](0x64),expect(e['mismatched'])['toContain']('Payout\x20exposure:\x20compensation\x20fund\x20is\x20below\x20the\x203x\x20ceiling\x20of\x20windowed\x20order\x20amounts'),expect(e['mismatched']?.['some'](h=>h['startsWith']('R2:')))['toBe'](![]),expect(e['finding_refs']?.['map'](h=>h['id']))['toContain']('R2:'+FULL['svc']['toLowerCase']());const f=scoreOf(a,'risk','risk_trust');expect(f['score'])['toBeLessThan'](0x64),expect(f['mismatched']?.['some'](h=>h['startsWith']('R1:')))['toBe'](![]),expect(f['mismatched']?.['length'])['toBeGreaterThan'](0x0),expect(f['finding_refs']?.['some'](h=>h['id']['startsWith']('R1:')))['toBe'](!![]);for(const h of[...a['trust']['breakdown'],...a['risk']['breakdown']]){for(const i of h['mismatched']??[])expect(i)['not']['toContain']('::node::');}expect(scoreOf(a,'risk','risk_workflow')['score'])['toBe'](0x64),expect(scoreOf(a,'risk','risk_behavior')['score'])['toBe'](0x64);for(const j of[...a['trust']['breakdown'],...a['risk']['breakdown']]){const k=(j['reason']??'')['toLowerCase']();expect(k)['not']['toContain']('no\x20data'),expect(k)['not']['toContain']('default\x20low');}const g=a['trust']['trace']['filter'](l=>l['kind']==='rule'&&l['detail']['startsWith']('score='));expect(g['map'](l=>l['id']))['toEqual'](expect['arrayContaining'](Object['keys'](GRAPH_RULE_INPUT_FACTS)['filter'](l=>l['startsWith']('trust_'))));}),it('keeps\x20the\x20injection\x20+\x20requirement\x20mechanisms\x20working',async()=>{const {projected:a}=await evalState(fullServiceState(),FULL['svc']),b=await evaluateGraphServiceFacts(a,{'overrides':{'rules':{'trust_arbitration':{'weight':0x28}}}});expect(b['trust']['total'])['toBe'](0x3a);const c=await evaluateGraphServiceFacts(a,{'requirements':[{'rule_id':'trust_fund_safety','condition':'require'}]});expect(c['trust']['blocked'])['toBe'](!![]),expect(c['trust']['red_flags']['length'])['toBeGreaterThan'](0x0);});}),describe('graph\x20service\x20evaluation\x20—\x20configured-empty\x20shell\x20(TR-14.1)',()=>{it('scores\x20verified\x20absence\x20as\x20a\x20configured\x20fact\x20and\x20excludes\x20only\x20the\x20gap\x20dimension',async()=>{const {r:a}=await evalState(gapServiceState(),GAP['svc']),b=scoreOf(a,'trust','trust_arbitration');expect(b['score'])['toBe'](0x0),expect(b['reason'])['toContain']('verified\x20absence'),expect(scoreOf(a,'trust','trust_reviews')['score'])['toBe'](0x32),expect(a['unverified'])['toEqual'](['risk_workflow']),expect(scoreOf(a,'risk','risk_workflow'))['toBeUndefined'](),expect(a['risk']['unverified'])['toEqual'](['risk_workflow']),expect(a['trust']['unverified'])['toEqual'](['risk_workflow']);const c=a['risk']['trace']['find'](d=>d['kind']==='rule'&&d['id']==='risk_workflow');expect(c?.['detail'])['toContain']('not\x20applicable'),expect(scoreOf(a,'trust','trust_transparency')['score'])['toBe'](0x28),expect(scoreOf(a,'trust','trust_fund_safety')['score'])['toBe'](0x0);});}),describe('graph\x20service\x20evaluation\x20—\x20truncated\x20order\x20window\x20(TR-14.1)',()=>{it('excludes\x20the\x20unverifiable\x20dimensions\x20and\x20renormalizes\x20the\x20weighted\x20total',async()=>{const {r:a}=await evalState(truncatedServiceState(),FULL['svc']);expect(a['unverified'])['toEqual'](expect['arrayContaining'](['trust_fulfillment','trust_fund_safety','risk_fund','risk_behavior'])),expect(scoreOf(a,'trust','trust_fulfillment'))['toBeUndefined'](),expect(scoreOf(a,'trust','trust_fund_safety'))['toBeUndefined'](),expect(scoreOf(a,'risk','risk_fund'))['toBeUndefined'](),expect(scoreOf(a,'risk','risk_behavior'))['toBeUndefined'](),expect(a['trust']['total'])['toBe'](0x44);for(const b of['trust_fulfillment','trust_fund_safety']){expect(a['trust']['trace']['find'](c=>c['kind']==='rule'&&c['id']===b)?.['detail'])['toContain']('not\x20applicable');}for(const c of['risk_fund','risk_behavior']){expect(a['risk']['trace']['find'](d=>d['kind']==='rule'&&d['id']===c)?.['detail'])['toContain']('not\x20applicable');}});}),describe('graph\x20service\x20evaluation\x20—\x20scoring\x20report\x20(TR-14.2)',()=>{it('renders\x20a\x20per-dimension\x20report\x20with\x20score,\x20weight,\x20state,\x20confidence\x20and\x20evidence',async()=>{const {projected:a,r:c}=await evalState(fullServiceState(),FULL['svc']),d=new Map(a['facts']['map'](g=>[g['key'],g])),e=[];for(const g of['trust','risk']){const h=c[g];e['push'](g['toUpperCase']()+'\x20'+h['total']+'/100\x20('+h['level']+')\x20—\x20'+h['summary']);for(const i of h['breakdown']){const j=GRAPH_RULE_INPUT_FACTS[i['rule_id']]??[],k=j['map'](o=>o+':state='+(d['get'](o)?.['state']??'missing')),l=j['map'](o=>d['get'](o)?.['provenance']['confidence']??'missing'),n=j['map'](o=>d['get'](o)?.['evidence']??'missing')['join']('\x20');e['push'](i['rule_id']+':\x20score='+i['score']+'\x20weight='+i['weight']+'\x20'+k['join'](',')+'\x20confidence='+[...new Set(l)]['join']('+')+'\x20evidence=\x22'+n+'\x22');}}expect(e)['toHaveLength'](0xb);const f=e['filter'](o=>o['includes']('score='));expect(f)['toHaveLength'](0x9);for(const o of f){expect(o)['toMatch'](/weight=\d+/),expect(o)['toContain']('state=present'),expect(o)['toMatch'](/confidence=(exact|bounded|windowed|derived)/);const p=o['match'](/evidence="(.*)"/);expect(p,o)['not']['toBeNull'](),expect(p[0x1]['length'],o)['toBeGreaterThan'](0x0);}expect(c['trust']['summary'])['toContain']('weakest\x20Fund\x20safety'),expect(c['trust']['summary'])['not']['toContain']('trust_fund_safety'),expect(c['trust']['summary'])['toMatch'](/grade: (strong|fair|weak)/),expect(c['trust']['summary'])['toContain']('Compensation\x20fund');});});
@@ -1 +1 @@
1
- import{REQUIREMENT_PASS_THRESHOLD,effectiveWeight,isDataSourceEnabled,isRuleEnabled,normalizeInjection}from'./user-injection.js';import{levelFromScore as a21a}from'./standards.js';export function levelFromScore(a){return a21a(a);}function appliesTo(a,b){if(!a||a['length']===0x0)return!![];return a['includes'](b);}export class EvaluationEngine{static ['instance']=null;['dataSources']=new Map();['rules']=new Map();static['Instance'](){return!EvaluationEngine['instance']&&(EvaluationEngine['instance']=new EvaluationEngine()),EvaluationEngine['instance'];}['registerDataSource'](a){if(!a['id']||this['dataSources']['has'](a['id']))return![];return this['dataSources']['set'](a['id'],a),!![];}['unregisterDataSource'](a){return this['dataSources']['delete'](a);}['registerRule'](a){if(!a['id']||this['rules']['has'](a['id']))return![];return this['rules']['set'](a['id'],a),!![];}['unregisterRule'](a){return this['rules']['delete'](a);}['getRule'](a){return this['rules']['get'](a);}['listRules'](){return Array['from'](this['rules']['values']());}['getDataSource'](a){return this['dataSources']['get'](a);}['listDataSources'](){return Array['from'](this['dataSources']['values']());}async['evaluate'](a,b,c){const d=normalizeInjection(c),e={'evaluation_id':a,'entities':b,'facts':{},'injection':d,'now':Date['now']()},f=[],g=Array['from'](this['dataSources']['values']())['filter'](m=>appliesTo(m['evaluation_ids'],a))['sort']((m,n)=>(m['priority']??0x0)-(n['priority']??0x0));for(const m of g){if(!isDataSourceEnabled(m['id'],d)){f['push']({'kind':'override','id':m['id'],'detail':'data\x20source\x20disabled\x20by\x20user\x20override'});continue;}if(m['isEnabled']&&!m['isEnabled'](e))continue;const n=await m['extract'](e);Object['assign'](e['facts'],n),f['push']({'kind':'data_source','id':m['id'],'detail':'extracted\x20'+Object['keys'](n)['length']+'\x20fact(s)'});}const h=[],i=[];for(const o of this['rules']['values']()){if(!appliesTo(o['evaluation_ids'],a))continue;if(!isRuleEnabled(o['id'],d)){f['push']({'kind':'override','id':o['id'],'detail':'rule\x20disabled\x20by\x20user\x20override'});continue;}if(o['isEnabled']&&!o['isEnabled'](e))continue;const p=o['evaluate'](e);if(!p){f['push']({'kind':'rule','id':o['id'],'detail':'not\x20applicable\x20—\x20excluded\x20from\x20weighted\x20aggregation'});continue;}const q=effectiveWeight(o,d);h['push']({'rule_id':o['id'],'dimension':o['dimension'],'score':p['score'],'weight':q,'weight_source':q!==o['weight']?'override':'default','reason':p['reason'],'matched':p['matched'],'mismatched':p['mismatched'],'finding_refs':p['finding_refs'],'red_flag':p['red_flag']}),p['red_flag']&&i['push'](p['reason']??o['id']+'\x20triggered\x20a\x20hard\x20block'),f['push']({'kind':'rule','id':o['id'],'detail':'score='+p['score']+'\x20weight='+q});}const j=aggregateScore(h);let k=i['length']>0x0;for(const r of d['requirements']??[]){const s=h['find'](t=>t['rule_id']===r['rule_id']);if(r['condition']==='require')(!s||s['score']<REQUIREMENT_PASS_THRESHOLD||s['red_flag'])&&(k=!![],i['push'](r['note']??'Requirement\x20requires\x20rule\x20\x27'+r['rule_id']+'\x27\x20to\x20pass'));else r['condition']==='forbid'&&(s&&s['red_flag']&&(k=!![],i['push'](r['note']??'Requirement\x20forbids\x20rule\x20\x27'+r['rule_id']+'\x27\x20from\x20triggering')));}const l=e['facts']['summary']??buildSummary(a,j,h,i,k);return{'evaluation_id':a,'total':j,'level':levelFromScore(j),'breakdown':h,'red_flags':i,'blocked':k,'trace':f,'summary':l,'criterionScores':e['facts']['criterionScores'],'findings':e['facts']['findings'],'strengths':e['facts']['strengths'],'needsLlm':e['facts']['needsLlm'],'llmPrompt':e['facts']['llmPrompt']};}}function aggregateScore(a){if(a['length']===0x0)return 0x0;let c=0x0,d=0x0;for(const e of a){c+=e['score']*e['weight'],d+=e['weight'];}if(d<=0x0)return 0x0;return clamp(Math['round'](c/d),0x0,0x64);}function clamp(a,b,c){return Math['max'](b,Math['min'](c,a));}function buildSummary(a,b,c,d,e){const f=['Evaluation\x20\x27'+a+'\x27:\x20score\x20'+b+'/100'];return e?f['push']('BLOCKED\x20('+d['length']+'\x20red\x20flag(s))'):f['push'](c['length']+'\x20rule(s)\x20evaluated'),f['join']('\x20—\x20');}export function getEvaluationEngine(){return EvaluationEngine['Instance']();}
1
+ import{REQUIREMENT_PASS_THRESHOLD,effectiveWeight,isDataSourceEnabled,isRuleEnabled,normalizeInjection}from'./user-injection.js';import{levelFromScore as a28a}from'./standards.js';export function levelFromScore(a){return a28a(a);}function appliesTo(a,b){if(!a||a['length']===0x0)return!![];return a['includes'](b);}export class EvaluationEngine{static ['instance']=null;['dataSources']=new Map();['rules']=new Map();static['Instance'](){return!EvaluationEngine['instance']&&(EvaluationEngine['instance']=new EvaluationEngine()),EvaluationEngine['instance'];}['registerDataSource'](a){if(!a['id']||this['dataSources']['has'](a['id']))return![];return this['dataSources']['set'](a['id'],a),!![];}['unregisterDataSource'](a){return this['dataSources']['delete'](a);}['registerRule'](a){if(!a['id']||this['rules']['has'](a['id']))return![];return this['rules']['set'](a['id'],a),!![];}['unregisterRule'](a){return this['rules']['delete'](a);}['getRule'](a){return this['rules']['get'](a);}['listRules'](){return Array['from'](this['rules']['values']());}['getDataSource'](a){return this['dataSources']['get'](a);}['listDataSources'](){return Array['from'](this['dataSources']['values']());}async['evaluate'](a,b,c){const d=normalizeInjection(c),e={'evaluation_id':a,'entities':b,'facts':{},'injection':d,'now':Date['now']()},f=[],g=Array['from'](this['dataSources']['values']())['filter'](m=>appliesTo(m['evaluation_ids'],a))['sort']((m,n)=>(m['priority']??0x0)-(n['priority']??0x0));for(const m of g){if(!isDataSourceEnabled(m['id'],d)){f['push']({'kind':'override','id':m['id'],'detail':'data\x20source\x20disabled\x20by\x20user\x20override'});continue;}if(m['isEnabled']&&!m['isEnabled'](e))continue;const n=await m['extract'](e);Object['assign'](e['facts'],n),f['push']({'kind':'data_source','id':m['id'],'detail':'extracted\x20'+Object['keys'](n)['length']+'\x20fact(s)'});}const h=[],i=[];for(const o of this['rules']['values']()){if(!appliesTo(o['evaluation_ids'],a))continue;if(!isRuleEnabled(o['id'],d)){f['push']({'kind':'override','id':o['id'],'detail':'rule\x20disabled\x20by\x20user\x20override'});continue;}if(o['isEnabled']&&!o['isEnabled'](e))continue;const p=o['evaluate'](e);if(!p){f['push']({'kind':'rule','id':o['id'],'detail':'not\x20applicable\x20—\x20excluded\x20from\x20weighted\x20aggregation'});continue;}const q=effectiveWeight(o,d);h['push']({'rule_id':o['id'],'dimension':o['dimension'],'score':p['score'],'weight':q,'weight_source':q!==o['weight']?'override':'default','reason':p['reason'],'matched':p['matched'],'mismatched':p['mismatched'],'finding_refs':p['finding_refs'],'red_flag':p['red_flag']}),p['red_flag']&&i['push'](p['reason']??o['id']+'\x20triggered\x20a\x20hard\x20block'),f['push']({'kind':'rule','id':o['id'],'detail':'score='+p['score']+'\x20weight='+q});}const j=aggregateScore(h);let k=i['length']>0x0;for(const r of d['requirements']??[]){const s=h['find'](t=>t['rule_id']===r['rule_id']);if(r['condition']==='require')(!s||s['score']<REQUIREMENT_PASS_THRESHOLD||s['red_flag'])&&(k=!![],i['push'](r['note']??'Requirement\x20requires\x20rule\x20\x27'+r['rule_id']+'\x27\x20to\x20pass'));else r['condition']==='forbid'&&(s&&s['red_flag']&&(k=!![],i['push'](r['note']??'Requirement\x20forbids\x20rule\x20\x27'+r['rule_id']+'\x27\x20from\x20triggering')));}const l=e['facts']['summary']??buildSummary(a,j,h,i,k);return{'evaluation_id':a,'total':j,'level':levelFromScore(j),'breakdown':h,'red_flags':i,'blocked':k,'trace':f,'summary':l,'criterionScores':e['facts']['criterionScores'],'findings':e['facts']['findings'],'strengths':e['facts']['strengths'],'needsLlm':e['facts']['needsLlm'],'llmPrompt':e['facts']['llmPrompt']};}}function aggregateScore(a){if(a['length']===0x0)return 0x0;let c=0x0,d=0x0;for(const e of a){c+=e['score']*e['weight'],d+=e['weight'];}if(d<=0x0)return 0x0;return clamp(Math['round'](c/d),0x0,0x64);}function clamp(a,b,c){return Math['max'](b,Math['min'](c,a));}function buildSummary(a,b,c,d,e){const f=['Evaluation\x20\x27'+a+'\x27:\x20score\x20'+b+'/100'];return e?f['push']('BLOCKED\x20('+d['length']+'\x20red\x20flag(s))'):f['push'](c['length']+'\x20rule(s)\x20evaluated'),f['join']('\x20—\x20');}export function getEvaluationEngine(){return EvaluationEngine['Instance']();}
@@ -1,13 +1,13 @@
1
1
  import type { CommercialRole } from "../role/types.js";
2
2
  export type OperationOutcome = "completion" | "refund" | "advance";
3
3
  export type RiskAppetite = "conservative" | "balanced" | "aggressive";
4
- export declare const OUTCOME_SEMANTICS: Record<OperationOutcome, string[]>;
5
4
  export interface RoleInterests {
6
5
  prefer: string[];
7
6
  avoid: string[];
8
7
  sensitivity: number;
9
8
  }
10
- export declare const ROLE_INTERESTS: Record<CommercialRole, RoleInterests>;
9
+ export declare function outcomeSemantics(): Record<OperationOutcome, string[]>;
10
+ export declare function roleInterests(): Record<string, RoleInterests>;
11
11
  export declare function classifyOutcome(consequence?: string): OperationOutcome;
12
12
  export declare function appetiteMultiplier(appetite?: RiskAppetite): number;
13
13
  export declare function interestsOf(role: CommercialRole): RoleInterests;
@@ -1 +1 @@
1
- export const OUTCOME_SEMANTICS={'completion':['fund_released_to_merchant','refund_leverage_given_up'],'refund':['fund_returned_to_buyer','arbitration_review_triggered'],'advance':['node_advanced']};export const ROLE_INTERESTS={'customer':{'prefer':['fund_returned_to_buyer'],'avoid':['fund_released_to_merchant','refund_leverage_given_up'],'sensitivity':0x1},'merchant':{'prefer':['fund_released_to_merchant'],'avoid':['fund_returned_to_buyer','arbitration_review_triggered'],'sensitivity':0x1},'demander':{'prefer':['node_advanced'],'avoid':[],'sensitivity':0x1},'collaborator':{'prefer':['node_advanced'],'avoid':[],'sensitivity':0x1},'supplier':{'prefer':['fund_released_to_merchant','node_advanced'],'avoid':['fund_returned_to_buyer'],'sensitivity':0x1},'prospect':{'prefer':['fund_returned_to_buyer'],'avoid':['fund_released_to_merchant','arbitration_review_triggered','refund_leverage_given_up'],'sensitivity':0x1},'arbitrator':{'prefer':[],'avoid':['arbitration_review_triggered'],'sensitivity':0x1},'neutral':{'prefer':[],'avoid':[],'sensitivity':0x1},'system':{'prefer':[],'avoid':[],'sensitivity':0x1}};export function classifyOutcome(a){if(a?.['startsWith']('Completion'))return'completion';if(a?.['startsWith']('Refund'))return'refund';return'advance';}export function appetiteMultiplier(a){switch(a){case'conservative':return 1.5;case'aggressive':return 0.6;default:return 0x1;}}export function interestsOf(a){return ROLE_INTERESTS[a]??{'prefer':[],'avoid':[],'sensitivity':0x1};}function dedupe(a){return Array['from'](new Set(a));}export function resolveInterests(a,b){const c=interestsOf(a),d=c['sensitivity']*appetiteMultiplier(b?.['risk_appetite']),e=[...c['prefer']],f=[...c['avoid']];for(const g of b?.['requirements']??[]){const h=g['toLowerCase'](),i=/forbid|never|\bno\b/['test'](h);if(h['includes']('arbitration')&&i)f['push']('arbitration_review_triggered');if(h['includes']('refund')&&!i)e['push']('fund_returned_to_buyer');if((h['includes']('upfront')||h['includes']('before\x20delivery'))&&i)f['push']('fund_released_to_merchant');if(h['includes']('milestone')&&!i)e['push']('node_advanced');}return{'prefer':dedupe(e),'avoid':dedupe(f),'sensitivity':d};}export function evaluateOutcome(a,b,c){const d=OUTCOME_SEMANTICS[a]??[],e=resolveInterests(b,c),f=e['sensitivity'],g=[],h=[];for(const l of d){if(e['prefer']['includes'](l))g['push'](l);if(e['avoid']['includes'](l))h['push'](l);}const i=g['length']*0x14,j=Math['round'](h['length']*0x19*f),k=Math['max'](0x0,Math['min'](0x64,0x3c+i-j));return{'gain_score':i,'risk_score':j,'net_score':k,'gains':g,'risks':h};}export function consistencyScore(a,b){return evaluateOutcome(a,b)['net_score'];}
1
+ import{getJudgmentDoc}from'../config/judgment.js';function gameParams(){return getJudgmentDoc()['game'];}export function outcomeSemantics(){return gameParams()['outcome_semantics'];}export function roleInterests(){return gameParams()['role_interests'];}export function classifyOutcome(a){if(a?.['startsWith']('Completion'))return'completion';if(a?.['startsWith']('Refund'))return'refund';return'advance';}export function appetiteMultiplier(a){const b=gameParams()['appetite_multipliers'];if(a==='conservative')return b['conservative'];if(a==='aggressive')return b['aggressive'];return b['balanced'];}export function interestsOf(a){return gameParams()['role_interests'][a]??{'prefer':[],'avoid':[],'sensitivity':0x1};}function dedupe(a){return Array['from'](new Set(a));}export function resolveInterests(a,b){const c=gameParams(),d=interestsOf(a),e=d['sensitivity']*appetiteMultiplier(b?.['risk_appetite']),f=[...d['prefer']],g=[...d['avoid']];for(const h of b?.['requirements']??[]){const i=h['toLowerCase'](),j=new RegExp(c['forbid_pattern'],'i')['test'](i);for(const k of c['keyword_rules']){if(k['when_forbidden']!==j)continue;k['keywords']['some'](l=>i['includes'](l['toLowerCase']()))&&(k['anchor']==='prefer'?f:g)['push'](k['effect']);}}return{'prefer':dedupe(f),'avoid':dedupe(g),'sensitivity':e};}export function evaluateOutcome(a,b,c){const d=gameParams(),e=d['outcome_semantics'][a]??[],f=resolveInterests(b,c),g=f['sensitivity'],h=[],i=[];for(const m of e){if(f['prefer']['includes'](m))h['push'](m);if(f['avoid']['includes'](m))i['push'](m);}const j=h['length']*d['scoring']['per_gain'],k=Math['round'](i['length']*d['scoring']['per_risk']*g),l=Math['max'](0x0,Math['min'](0x64,d['scoring']['base']+j-k));return{'gain_score':j,'risk_score':k,'net_score':l,'gains':h,'risks':i};}export function consistencyScore(a,b){return evaluateOutcome(a,b)['net_score'];}
@@ -1,6 +1,6 @@
1
1
  import type { DemandExtractInput, ServiceExtractInput } from "./extract.js";
2
- export declare const OP_DEMAND_PRESENT_SERVICE = "demand.present_service";
3
- export declare const OP_DEMAND_PRESENT_SERVICE_WITH_PASSPORT = "demand.present_service_with_passport";
2
+ export declare const OP_DEMAND_PRESENT_SERVICE = "demand.present";
3
+ export declare const OP_DEMAND_PRESENT_SERVICE_WITH_PASSPORT = "demand.present_guarded";
4
4
  export declare const OP_DEMAND_PUBLISH = "demand.publish";
5
5
  export declare const OP_SERVICE_ORDER_NEW = "service.order_new";
6
6
  export interface OperationBridge {
@@ -1 +1 @@
1
- export const OP_DEMAND_PRESENT_SERVICE='demand.present_service';export const OP_DEMAND_PRESENT_SERVICE_WITH_PASSPORT='demand.present_service_with_passport';export const OP_DEMAND_PUBLISH='demand.publish';export const OP_SERVICE_ORDER_NEW='service.order_new';export function nextOperationForServiceMatch(a,b){return{'operation':b===!![]?OP_DEMAND_PRESENT_SERVICE_WITH_PASSPORT:OP_DEMAND_PRESENT_SERVICE,'operation_type':'demand','preconditions':['Demand\x20is\x20still\x20open\x20(not\x20expired)\x20and\x20this\x20supplier\x20has\x20not\x20already\x20presented.','Service\x20is\x20published\x20and\x20not\x20paused.',b===null?'Verify\x20Demand.guards:\x20if\x20non-empty\x20use\x20present_with_passport\x20with\x20a\x20by_guard\x20from\x20Demand.guards;\x20if\x20empty\x20use\x20plain\x20present.':b?'Select\x20a\x20by_guard\x20present\x20in\x20Demand.guards\x20for\x20present_with_passport\x20(guard\x20verification\x20runs\x20at\x20present\x20time).':'Demand.guards\x20is\x20empty\x20→\x20plain\x20present\x20is\x20valid.'],'rationale':'Present\x20this\x20service\x20to\x20demand\x20'+a['object']+';\x20the\x20demander\x20then\x20gives\x20feedback\x20(acceptance_score)\x20and\x20selects\x20→\x20Order\x20via\x20'+OP_SERVICE_ORDER_NEW+'\x20(see\x20nextOperationForServiceOrder).'};}export function nextOperationForDemandMatch(a){return{'operation':OP_DEMAND_PUBLISH,'operation_type':'demand','preconditions':['Service\x20is\x20published\x20and\x20not\x20paused\x20(eligible\x20to\x20be\x20presented\x20into\x20the\x20Demand).','This\x20account\x20holds\x20the\x20Demand\x27s\x20Permission\x20(owner)\x20to\x20publish\x20and\x20later\x20score/select\x20presenters.'],'rationale':'Publish\x20a\x20Demand\x20encoding\x20the\x20requirement\x20so\x20'+a['object']+'\x20(and\x20peers)\x20can\x20present\x20(demand.present_service*);\x20then\x20feedback\x20(acceptance_score)\x20+\x20select\x20forms\x20the\x20Order\x20via\x20'+OP_SERVICE_ORDER_NEW+'\x20(see\x20nextOperationForServiceOrder).'};}export function nextOperationForServiceOrder(a){return{'operation':OP_SERVICE_ORDER_NEW,'operation_type':'service','preconditions':['Service\x20is\x20published\x20and\x20not\x20paused\x20(E1\x20gate\x20of\x20pre-purchase\x20due\x20diligence).','Pin\x20each\x20sale\x20item\x27s\x20wip_hash\x20in\x20the\x20buy\x20items\x20—\x20prevents\x20WIP\x20swap\x20between\x20viewing\x20and\x20ordering.','If\x20Service.buy_guard\x20is\x20non-empty,\x20obtain\x20a\x20valid\x20passport\x20first\x20(buy\x20requires\x20guard\x20validation).','If\x20Service.customer_required\x20is\x20non-empty,\x20deliver\x20the\x20required\x20info\x20to\x20the\x20Service\x27s\x20Contact\x20via\x20Messenger\x20and\x20attach\x20the\x20Contact\x20/\x20WTS\x20Proof\x20as\x20order_required_info.','If\x20this\x20selection\x20follows\x20a\x20Demand\x20you\x20published\x20with\x20presenters:\x20score\x20the\x20presenters\x20first\x20(demand\x20feedback\x20→\x20acceptance_score)\x20—\x20skipping\x20feedback\x20damages\x20your\x20acceptance_score\x20reputation.','Sufficient\x20balance\x20for\x20the\x20total\x20price\x20plus\x20gas;\x20payment\x20is\x20escrowed\x20in\x20the\x20Order\x20until\x20Allocation\x20settlement.'],'rationale':'Create\x20the\x20Order\x20on\x20the\x20chosen\x20service\x20'+a['object']+'\x20('+OP_SERVICE_ORDER_NEW+')\x20—\x20the\x20transaction-formation\x20step:\x20Order\x20+\x20Progress\x20+\x20Allocation\x20are\x20created\x20atomically,\x20then\x20Progress\x20advances\x20through\x20the\x20Machine\x20and\x20Allocation\x20settles\x20the\x20payment.'};}
1
+ export const OP_DEMAND_PRESENT_SERVICE='demand.present';export const OP_DEMAND_PRESENT_SERVICE_WITH_PASSPORT='demand.present_guarded';export const OP_DEMAND_PUBLISH='demand.publish';export const OP_SERVICE_ORDER_NEW='service.order_new';export function nextOperationForServiceMatch(a,b){return{'operation':b===!![]?OP_DEMAND_PRESENT_SERVICE_WITH_PASSPORT:OP_DEMAND_PRESENT_SERVICE,'operation_type':'demand','preconditions':['Demand\x20is\x20still\x20open\x20(not\x20expired)\x20and\x20this\x20supplier\x20has\x20not\x20already\x20presented.','Service\x20is\x20published\x20and\x20not\x20paused.',b===null?'Verify\x20Demand.guards:\x20if\x20non-empty\x20present\x20through\x20one\x20of\x20them\x20(by_guard\x20from\x20Demand.guards);\x20if\x20empty\x20use\x20plain\x20present.':b?'Select\x20a\x20by_guard\x20present\x20in\x20Demand.guards\x20for\x20the\x20guarded\x20present\x20(guard\x20verification\x20runs\x20at\x20present\x20time).':'Demand.guards\x20is\x20empty\x20→\x20plain\x20present\x20is\x20valid.'],'rationale':'Present\x20this\x20service\x20to\x20demand\x20'+a['object']+';\x20the\x20demander\x20then\x20gives\x20feedback\x20(acceptance_score)\x20and\x20selects\x20→\x20Order\x20via\x20'+OP_SERVICE_ORDER_NEW+'\x20(see\x20nextOperationForServiceOrder).'};}export function nextOperationForDemandMatch(a){return{'operation':OP_DEMAND_PUBLISH,'operation_type':'demand','preconditions':['Service\x20is\x20published\x20and\x20not\x20paused\x20(eligible\x20to\x20be\x20presented\x20into\x20the\x20Demand).','This\x20account\x20holds\x20the\x20Demand\x27s\x20Permission\x20(owner)\x20to\x20publish\x20and\x20later\x20score/select\x20presenters.'],'rationale':'Publish\x20a\x20Demand\x20encoding\x20the\x20requirement\x20so\x20'+a['object']+'\x20(and\x20peers)\x20can\x20present\x20(demand.present*);\x20then\x20feedback\x20(acceptance_score)\x20+\x20select\x20forms\x20the\x20Order\x20via\x20'+OP_SERVICE_ORDER_NEW+'\x20(see\x20nextOperationForServiceOrder).'};}export function nextOperationForServiceOrder(a){return{'operation':OP_SERVICE_ORDER_NEW,'operation_type':'service','preconditions':['Service\x20is\x20published\x20and\x20not\x20paused\x20(E1\x20gate\x20of\x20pre-purchase\x20due\x20diligence).','Pin\x20each\x20sale\x20item\x27s\x20wip_hash\x20in\x20the\x20buy\x20items\x20—\x20prevents\x20WIP\x20swap\x20between\x20viewing\x20and\x20ordering.','If\x20Service.buy_guard\x20is\x20non-empty,\x20obtain\x20a\x20valid\x20passport\x20first\x20(buy\x20requires\x20guard\x20validation).','If\x20Service.customer_required\x20is\x20non-empty,\x20deliver\x20the\x20required\x20info\x20to\x20the\x20Service\x27s\x20Contact\x20via\x20Messenger\x20and\x20attach\x20the\x20Contact\x20/\x20WTS\x20Proof\x20as\x20order_required_info.','If\x20this\x20selection\x20follows\x20a\x20Demand\x20you\x20published\x20with\x20presenters:\x20score\x20the\x20presenters\x20first\x20(demand\x20feedback\x20→\x20acceptance_score)\x20—\x20skipping\x20feedback\x20damages\x20your\x20acceptance_score\x20reputation.','Sufficient\x20balance\x20for\x20the\x20total\x20price\x20plus\x20gas;\x20payment\x20is\x20escrowed\x20in\x20the\x20Order\x20until\x20Allocation\x20settlement.'],'rationale':'Create\x20the\x20Order\x20on\x20the\x20chosen\x20service\x20'+a['object']+'\x20('+OP_SERVICE_ORDER_NEW+')\x20—\x20the\x20transaction-formation\x20step:\x20Order\x20+\x20Progress\x20+\x20Allocation\x20are\x20created\x20atomically,\x20then\x20Progress\x20advances\x20through\x20the\x20Machine\x20and\x20Allocation\x20settles\x20the\x20payment.'};}
@@ -1,28 +1,6 @@
1
- export interface DimensionStandard {
2
- label: string;
3
- description: string;
4
- }
5
- export interface EvaluationBaselines {
6
- version: number;
7
- description: string;
8
- weights: Record<string, number>;
9
- dimensions: Record<string, DimensionStandard>;
10
- severity_deduction: Record<string, number>;
11
- level_bands: Array<{
12
- min: number;
13
- level: string;
14
- }>;
15
- grade_words: {
16
- trust: Array<{
17
- min: number;
18
- word: string;
19
- }>;
20
- risk: Array<{
21
- min: number;
22
- word: string;
23
- }>;
24
- };
25
- }
1
+ import { type DimensionStandard, type EvaluationSection } from "../config/judgment.js";
2
+ export type { DimensionStandard, EvaluationSection };
3
+ export type EvaluationBaselines = EvaluationSection;
26
4
  export declare function defaultWeight(ruleId: string): number;
27
5
  export declare function defaultWeights(): Record<string, number>;
28
6
  export declare function dimensionLabel(ruleId: string): string;
@@ -1 +1 @@
1
- import{readFileSync}from'node:fs';const DOC_PATH='knowledge/baselines/evaluation-baselines.json';function loadDoc(){const a=[new URL('../../'+DOC_PATH,import.meta.url),new URL('../'+DOC_PATH,import.meta.url)];for(const b of a){try{return JSON['parse'](readFileSync(b,'utf-8'));}catch{}}throw new Error('Evaluation\x20standards\x20document\x20not\x20found\x20('+DOC_PATH+')\x20—\x20broken\x20installation.');}const DOC=loadDoc();export function defaultWeight(a){return DOC['weights'][a]??0x0;}export function defaultWeights(){return{...DOC['weights']};}export function dimensionLabel(a){return DOC['dimensions'][a]?.['label']??a;}export function severityDeduction(a){return DOC['severity_deduction'][a]??0x0;}export function levelFromScore(a){for(const b of DOC['level_bands']){if(a>=b['min'])return b['level'];}return DOC['level_bands'][DOC['level_bands']['length']-0x1]?.['level']??'high';}export function gradeWord(a,b){const c=DOC['grade_words'][a];for(const d of c){if(b>=d['min'])return d['word'];}return c[c['length']-0x1]?.['word']??'unknown';}
1
+ import{evaluationSection}from'../config/judgment.js';import{normalizeSeverity}from'../config/severity.js';export function defaultWeight(a){return evaluationSection()['weights'][a]??0x0;}export function defaultWeights(){return{...evaluationSection()['weights']};}export function dimensionLabel(a){return evaluationSection()['dimensions'][a]?.['label']??a;}export function severityDeduction(a){return evaluationSection()['severity_deduction'][normalizeSeverity(a)]??0x0;}export function levelFromScore(a){const b=evaluationSection()['level_bands'];for(const c of b){if(a>=c['min'])return c['level'];}return b[b['length']-0x1]?.['level']??'high';}export function gradeWord(a,b){const c=evaluationSection()['grade_words'][a];for(const d of c){if(b>=d['min'])return d['word'];}return c[c['length']-0x1]?.['word']??'unknown';}
@@ -1,3 +1,4 @@
1
+ import type { Severity } from "../config/severity.js";
1
2
  export interface DataSource {
2
3
  id: string;
3
4
  description: string;
@@ -81,7 +82,7 @@ export interface CriterionScore {
81
82
  }
82
83
  export interface EvaluationFinding {
83
84
  criterion: string;
84
- severity: "critical" | "warning" | "info";
85
+ severity: Severity;
85
86
  message: string;
86
87
  deduction: number;
87
88
  }
@@ -1 +1 @@
1
- import{distillIntent,extractSignals}from'./intent-distill.js';import{getProfile,updateFromOperation}from'./user-profile.js';import{findMatches,recordSignature}from'./experience-reuse.js';import{EXPERIENCE_LAYER_VERSION}from'./types.js';import{isEnabled as a43a}from'../config/index.js';import{recordIndustrySignal}from'../knowledge/flywheel-loop.js';export{EXPERIENCE_LAYER_VERSION};export function getExperienceFeedback(a,b,c){try{const d=distillIntent(a,b,c),e=findMatches(d['primary_intent'],a,b,0x3);if(e['length']===0x0)return undefined;const f=e[0x0],g=getProfile();return formatFeedback(f,e,d['scenario'],g);}catch{return undefined;}}export function recordOperationOutcome(a,b,c,d,e,f=[]){try{const g=distillIntent(a,b,c),h=extractSignals(a,b);recordSignature({'intent':g['primary_intent'],'scenario':g['scenario'],'signals':h,'timestamp':Date['now'](),'outcome':d,'error_code':e}),updateFromOperation(g['primary_intent'],g['scenario'],d,e,f);try{if(a43a('industry_evolution')){const i=typeof b?.['industry']==='string'&&b['industry']['trim']()?b['industry']['trim']():undefined;if(i){const j=d==='success'?{'success':!![]}:{'success':![],'error_code':e};recordIndustrySignal(i,{'type':a,'data':b},j);}}}catch{}}catch{}}function formatFeedback(a,b,c,d){const e=buildAdviceText(a,b,d),f=collectAvoidList(b,d),g=a['relevance'],h=c??a['signature']['scenario'],i={};if(e)i['advice']=e;if(f['length']>0x0)i['avoid']=f;if(g>0x0)i['relevance']=Math['round'](g*0x64)/0x64;if(h)i['matched_scenario']=h;return i;}function buildAdviceText(a,b,c){const d=[];if(a['signature']['outcome']==='success')d['push']('Historically,\x20'+a['signature']['intent']+'\x20operation\x20succeeded');else a['signature']['outcome']==='failed'&&d['push']('Historically,\x20'+a['signature']['intent']+'\x20operation\x20failed\x20('+(a['signature']['error_code']??'unknown\x20error')+'),\x20pay\x20special\x20attention\x20to\x20parameters');return c['expertise_tier']==='novice'&&b['length']>0x0&&d['push']('It\x20is\x20recommended\x20to\x20carefully\x20check\x20parameters\x20before\x20executing'),d['join'](';\x20')||a['advice'];}function collectAvoidList(b,c){const d=new Set();for(const e of b){for(const f of e['avoid']){d['add'](f);}}for(const g of c['frequent_pitfalls']){d['add']('You\x20often\x20make\x20mistakes\x20at\x20the\x20'+g+'\x20step,\x20please\x20be\x20especially\x20careful');}return Array['from'](d)['slice'](0x0,0x5);}
1
+ import{distillIntent,extractSignals}from'./intent-distill.js';import{getProfile,updateFromOperation}from'./user-profile.js';import{findMatches,recordSignature}from'./experience-reuse.js';import{EXPERIENCE_LAYER_VERSION}from'./types.js';import{isEnabled as a50a}from'../config/index.js';import{recordIndustrySignal}from'../knowledge/flywheel-loop.js';export{EXPERIENCE_LAYER_VERSION};export function getExperienceFeedback(a,b,c){try{const d=distillIntent(a,b,c),e=findMatches(d['primary_intent'],a,b,0x3);if(e['length']===0x0)return undefined;const f=e[0x0],g=getProfile();return formatFeedback(f,e,d['scenario'],g);}catch{return undefined;}}export function recordOperationOutcome(a,b,c,d,e,f=[]){try{const g=distillIntent(a,b,c),h=extractSignals(a,b);recordSignature({'intent':g['primary_intent'],'scenario':g['scenario'],'signals':h,'timestamp':Date['now'](),'outcome':d,'error_code':e}),updateFromOperation(g['primary_intent'],g['scenario'],d,e,f);try{if(a50a('industry_evolution')){const i=typeof b?.['industry']==='string'&&b['industry']['trim']()?b['industry']['trim']():undefined;if(i){const j=d==='success'?{'success':!![]}:{'success':![],'error_code':e};recordIndustrySignal(i,{'type':a,'data':b},j);}}}catch{}}catch{}}function formatFeedback(a,b,c,d){const e=buildAdviceText(a,b,d),f=collectAvoidList(b,d),g=a['relevance'],h=c??a['signature']['scenario'],i={};if(e)i['advice']=e;if(f['length']>0x0)i['avoid']=f;if(g>0x0)i['relevance']=Math['round'](g*0x64)/0x64;if(h)i['matched_scenario']=h;return i;}function buildAdviceText(a,b,c){const d=[];if(a['signature']['outcome']==='success')d['push']('Historically,\x20'+a['signature']['intent']+'\x20operation\x20succeeded');else a['signature']['outcome']==='failed'&&d['push']('Historically,\x20'+a['signature']['intent']+'\x20operation\x20failed\x20('+(a['signature']['error_code']??'unknown\x20error')+'),\x20pay\x20special\x20attention\x20to\x20parameters');return c['expertise_tier']==='novice'&&b['length']>0x0&&d['push']('It\x20is\x20recommended\x20to\x20carefully\x20check\x20parameters\x20before\x20executing'),d['join'](';\x20')||a['advice'];}function collectAvoidList(b,c){const d=new Set();for(const e of b){for(const f of e['avoid']){d['add'](f);}}for(const g of c['frequent_pitfalls']){d['add']('You\x20often\x20make\x20mistakes\x20at\x20the\x20'+g+'\x20step,\x20please\x20be\x20especially\x20careful');}return Array['from'](d)['slice'](0x0,0x5);}