@wowok/agent-mcp 3.2.4 → 3.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. package/dist/chain-semantics/field-capability.js +1 -1
  2. package/dist/chain-semantics/freeze-map.js +1 -1
  3. package/dist/chain-semantics/object-graph.js +1 -1
  4. package/dist/communication/wts-attestation.js +1 -1
  5. package/dist/composition/audit.js +1 -1
  6. package/dist/composition/blueprint-view.d.ts +64 -0
  7. package/dist/composition/blueprint-view.js +1 -0
  8. package/dist/composition/compile.d.ts +3 -2
  9. package/dist/composition/compile.js +1 -1
  10. package/dist/composition/inflight.d.ts +17 -0
  11. package/dist/composition/inflight.js +1 -0
  12. package/dist/config/config-audit.spec.js +1 -1
  13. package/dist/customer/account-events.js +1 -1
  14. package/dist/customer/order-monitor.js +1 -1
  15. package/dist/evaluation/builtins/graph-service.spec.js +1 -1
  16. package/dist/evaluation/engine.js +1 -1
  17. package/dist/experience/realtime-feedback.js +1 -1
  18. package/dist/extensions/constraint-registry.d.ts +6 -1
  19. package/dist/extensions/constraint-registry.js +1 -1
  20. package/dist/extensions/index.d.ts +1 -1
  21. package/dist/extensions/index.js +1 -1
  22. package/dist/extensions/industry-pack.d.ts +6 -0
  23. package/dist/extensions/industry-pack.js +1 -1
  24. package/dist/extensions/mode-evaluator.d.ts +3 -2
  25. package/dist/extensions/mode-evaluator.js +1 -1
  26. package/dist/extensions/modes.js +1 -1
  27. package/dist/extensions/registry.d.ts +1 -2
  28. package/dist/extensions/registry.js +1 -1
  29. package/dist/graph/onchain/analyze.js +1 -1
  30. package/dist/graph/onchain/analyze.spec.js +1 -1
  31. package/dist/graph/onchain/anti-cheat.d.ts +32 -2
  32. package/dist/graph/onchain/anti-cheat.js +1 -1
  33. package/dist/graph/onchain/anti-cheat.spec.js +1 -1
  34. package/dist/graph/onchain/expand.js +1 -1
  35. package/dist/graph/onchain/exposure.js +1 -1
  36. package/dist/graph/onchain/extract.js +1 -1
  37. package/dist/graph/onchain/facts.js +1 -1
  38. package/dist/graph/onchain/graph-policy.spec.js +1 -1
  39. package/dist/graph/onchain/index.d.ts +2 -2
  40. package/dist/graph/onchain/index.js +1 -1
  41. package/dist/graph/onchain/project-relationship.js +1 -1
  42. package/dist/graph/onchain/table-ledger.spec.js +1 -1
  43. package/dist/graph/onchain/types.d.ts +3 -0
  44. package/dist/harness/recover.js +1 -1
  45. package/dist/index.js +1 -1
  46. package/dist/knowledge/arbitration-venue-order.d.ts +25 -0
  47. package/dist/knowledge/arbitration-venue-order.js +1 -0
  48. package/dist/knowledge/audit-rules.d.ts +12 -0
  49. package/dist/knowledge/audit-rules.js +1 -1
  50. package/dist/knowledge/baselines/risk-baselines.spec.js +1 -1
  51. package/dist/knowledge/baselines/rules/allocation.json +5 -5
  52. package/dist/knowledge/baselines/rules/arb.json +1 -1
  53. package/dist/knowledge/baselines/rules/graph.json +81 -0
  54. package/dist/knowledge/baselines/rules/guard.json +9 -9
  55. package/dist/knowledge/baselines/rules/machine.json +5 -5
  56. package/dist/knowledge/baselines/rules/order.json +1 -1
  57. package/dist/knowledge/baselines/rules/plan.json +80 -2
  58. package/dist/knowledge/builtin-templates.d.ts +18 -2
  59. package/dist/knowledge/builtin-templates.js +1 -1
  60. package/dist/knowledge/discount-threshold.js +1 -1
  61. package/dist/knowledge/entity-recipient-guard.js +1 -1
  62. package/dist/knowledge/event-semantics.js +1 -1
  63. package/dist/knowledge/getting-started.js +1 -1
  64. package/dist/knowledge/guard-bindings.js +1 -1
  65. package/dist/knowledge/guard-design-patterns.js +1 -1
  66. package/dist/knowledge/guard-field-cognition.js +1 -1
  67. package/dist/knowledge/guard-ledger.js +1 -1
  68. package/dist/knowledge/guard-lint.d.ts +1 -0
  69. package/dist/knowledge/guard-lint.js +1 -1
  70. package/dist/knowledge/guard-node-gates.d.ts +4 -0
  71. package/dist/knowledge/guard-node-gates.js +1 -0
  72. package/dist/knowledge/guard-puzzle.js +1 -1
  73. package/dist/knowledge/guard-risk.js +1 -1
  74. package/dist/knowledge/guard-submission-prompt.d.ts +1 -0
  75. package/dist/knowledge/guard-submission-prompt.js +1 -1
  76. package/dist/knowledge/guard-templates.d.ts +2 -1
  77. package/dist/knowledge/guard-templates.js +1 -1
  78. package/dist/knowledge/guard-translation.js +1 -1
  79. package/dist/knowledge/index.d.ts +2 -2
  80. package/dist/knowledge/index.js +1 -1
  81. package/dist/knowledge/industry-generalizer.js +1 -1
  82. package/dist/knowledge/industry-registry.js +1 -1
  83. package/dist/knowledge/jsonrpc-enum.js +1 -1
  84. package/dist/knowledge/machine-topology.d.ts +6 -0
  85. package/dist/knowledge/machine-topology.js +1 -1
  86. package/dist/knowledge/order-ledger.js +1 -1
  87. package/dist/knowledge/reputation-rules.d.ts +3 -9
  88. package/dist/knowledge/reputation-rules.js +1 -1
  89. package/dist/knowledge/safety-rules.d.ts +10 -1
  90. package/dist/knowledge/safety-rules.js +1 -1
  91. package/dist/knowledge/scenario-modes.d.ts +2 -4
  92. package/dist/knowledge/scenario-modes.js +1 -1
  93. package/dist/knowledge/service-ledger.js +1 -1
  94. package/dist/knowledge/service-templates.js +1 -1
  95. package/dist/knowledge/settlement-semantics.d.ts +1 -0
  96. package/dist/knowledge/settlement-semantics.js +1 -0
  97. package/dist/knowledge/template-loader.d.ts +29 -2
  98. package/dist/knowledge/template-loader.js +1 -1
  99. package/dist/knowledge/template-registry.js +1 -1
  100. package/dist/knowledge/template-scanner.d.ts +14 -0
  101. package/dist/knowledge/template-scanner.js +1 -1
  102. package/dist/knowledge/template-validation.d.ts +2 -0
  103. package/dist/knowledge/template-validation.js +1 -0
  104. package/dist/knowledge/tools-reference.js +1 -1
  105. package/dist/knowledge/workflow-guidance.d.ts +1 -0
  106. package/dist/knowledge/workflow-guidance.js +1 -1
  107. package/dist/monitor/MonitorLoop.js +1 -1
  108. package/dist/participation/allocation-advice.js +1 -1
  109. package/dist/participation/customer-interest.js +1 -1
  110. package/dist/participation/radar-core.d.ts +6 -1
  111. package/dist/participation/radar-core.js +1 -1
  112. package/dist/playbooks/service-build/business-puzzle.js +1 -1
  113. package/dist/playbooks/service-build/game-theory.d.ts +2 -2
  114. package/dist/playbooks/service-build/game-theory.js +1 -1
  115. package/dist/playbooks/service-build/machine-panorama.js +1 -1
  116. package/dist/playbooks/service-build/merchant-guide.d.ts +79 -13
  117. package/dist/playbooks/service-build/merchant-guide.js +1 -1
  118. package/dist/playbooks/service-build/migration-planner.d.ts +7 -0
  119. package/dist/playbooks/service-build/migration-planner.js +1 -1
  120. package/dist/playbooks/service-build/mode-actions.js +1 -1
  121. package/dist/playbooks/service-build/object-panorama.js +1 -1
  122. package/dist/playbooks/service-build/participation-radar.js +1 -1
  123. package/dist/playbooks/service-build/pipeline-actions.d.ts +1 -1
  124. package/dist/playbooks/service-build/pipeline-actions.js +1 -1
  125. package/dist/playbooks/service-build/relationship-profile.js +1 -1
  126. package/dist/playbooks/service-build/reverse-mapping-nk4.spec.d.ts +1 -0
  127. package/dist/playbooks/service-build/reverse-mapping-nk4.spec.js +1 -0
  128. package/dist/playbooks/service-build/reverse-mapping.d.ts +24 -0
  129. package/dist/playbooks/service-build/reverse-mapping.js +1 -1
  130. package/dist/playbooks/service-build/risk-aggregator.d.ts +1 -1
  131. package/dist/playbooks/service-build/risk-aggregator.js +1 -1
  132. package/dist/playbooks/service-build/service-panorama.js +1 -1
  133. package/dist/playbooks/service-build/service-quote.js +1 -1
  134. package/dist/playbooks/service-build/service-quote.spec.js +1 -1
  135. package/dist/playbooks/service-build/workflow-design-assessment.d.ts +2 -2
  136. package/dist/playbooks/service-build/workflow-design-assessment.js +1 -1
  137. package/dist/relationship/derivation.d.ts +1 -0
  138. package/dist/review/index.js +1 -1
  139. package/dist/runtime/instance-registry.d.ts +8 -0
  140. package/dist/runtime/instance-registry.js +1 -0
  141. package/dist/safety/confirm-gate.js +1 -1
  142. package/dist/schema/benchmark-migration/index.d.ts +14 -0
  143. package/dist/schema/benchmark-migration/index.js +1 -1
  144. package/dist/schema/call/arbitration.js +1 -1
  145. package/dist/schema/call/base.d.ts +109 -0
  146. package/dist/schema/call/base.js +1 -1
  147. package/dist/schema/call/bridge.d.ts +14 -0
  148. package/dist/schema/call/contact.js +1 -1
  149. package/dist/schema/call/error-codes.d.ts +1 -1
  150. package/dist/schema/call/error-codes.js +1 -1
  151. package/dist/schema/call/guard.d.ts +7 -0
  152. package/dist/schema/call/guard.js +1 -1
  153. package/dist/schema/call/handler.js +1 -1
  154. package/dist/schema/call/machine.d.ts +7 -0
  155. package/dist/schema/call/machine.js +1 -1
  156. package/dist/schema/call/payment.js +1 -1
  157. package/dist/schema/call/permission-handler.js +1 -1
  158. package/dist/schema/call/progress.d.ts +46 -0
  159. package/dist/schema/call/progress.js +1 -1
  160. package/dist/schema/call/semantic.js +1 -1
  161. package/dist/schema/call/service.d.ts +22 -8
  162. package/dist/schema/call/service.js +1 -1
  163. package/dist/schema/common/index.js +1 -1
  164. package/dist/schema/goal/index.d.ts +11 -0
  165. package/dist/schema/goal/planning.d.ts +32 -1
  166. package/dist/schema/goal/planning.js +1 -1
  167. package/dist/schema/industry-pack/index.d.ts +40 -0
  168. package/dist/schema/industry-pack/index.js +1 -1
  169. package/dist/schema/keeper/index.d.ts +13 -0
  170. package/dist/schema/local/index.d.ts +75 -0
  171. package/dist/schema/local/index.js +1 -1
  172. package/dist/schema/messenger/index.d.ts +17 -0
  173. package/dist/schema/messenger/index.js +1 -1
  174. package/dist/schema/operations.d.ts +46 -2
  175. package/dist/schema/operations.js +1 -1
  176. package/dist/schema/query/bi.d.ts +64 -0
  177. package/dist/schema/query/bi.js +1 -1
  178. package/dist/schema/query/index.d.ts +94 -0
  179. package/dist/schema/query/index.js +1 -1
  180. package/dist/schema/schema-version.d.ts +1 -1
  181. package/dist/schema/schema-version.js +1 -1
  182. package/dist/schema/utils/permission-machine-check.js +1 -1
  183. package/dist/schema/workspace/index.d.ts +1 -1
  184. package/dist/schema-query-impl/index.js +1 -1
  185. package/dist/schemas/account_operation.output.json +45 -0
  186. package/dist/schemas/benchmark_migration_operation.output.json +24 -4
  187. package/dist/schemas/benchmark_migration_operation.schema.json +70 -0
  188. package/dist/schemas/bridge_operation.output.json +45 -0
  189. package/dist/schemas/goal_operation.schema.json +79 -1
  190. package/dist/schemas/guard2file.output.json +6 -1
  191. package/dist/schemas/guard2file.schema.json +9 -0
  192. package/dist/schemas/index.json +1 -1
  193. package/dist/schemas/industry_pack_operation.output.json +91 -0
  194. package/dist/schemas/industry_pack_operation.schema.json +19 -1
  195. package/dist/schemas/keeper_operation.output.json +44 -0
  196. package/dist/schemas/local_cache_operation.output.json +45 -0
  197. package/dist/schemas/local_history_operation.output.json +45 -0
  198. package/dist/schemas/local_info_operation.output.json +45 -0
  199. package/dist/schemas/local_mark_operation.output.json +45 -0
  200. package/dist/schemas/machineNode2file.output.json +6 -1
  201. package/dist/schemas/machineNode2file.schema.json +9 -0
  202. package/dist/schemas/messenger_operation.output.json +52 -0
  203. package/dist/schemas/monitor_events.output.json +44 -0
  204. package/dist/schemas/monitor_subscription.output.json +44 -0
  205. package/dist/schemas/onchain_events.output.json +44 -0
  206. package/dist/schemas/onchain_operations.output.json +133 -0
  207. package/dist/schemas/onchain_operations.schema.json +110 -18
  208. package/dist/schemas/onchain_operations_arbitration.schema.json +2 -1
  209. package/dist/schemas/onchain_operations_contact.schema.json +2 -2
  210. package/dist/schemas/onchain_operations_guard.schema.json +2 -2
  211. package/dist/schemas/onchain_operations_machine.schema.json +2 -2
  212. package/dist/schemas/onchain_operations_payment.schema.json +1 -1
  213. package/dist/schemas/onchain_operations_progress.schema.json +57 -0
  214. package/dist/schemas/onchain_operations_service.schema.json +44 -10
  215. package/dist/schemas/onchain_table_data.output.json +81 -13
  216. package/dist/schemas/onchain_table_data.schema.json +21 -21
  217. package/dist/schemas/query_toolkit.output.json +218 -9
  218. package/dist/schemas/query_toolkit.schema.json +50 -26
  219. package/dist/schemas/wowok_buildin_info.output.json +80 -1
  220. package/dist/schemas/wowok_buildin_info.schema.json +1 -1
  221. package/dist/tools/handlers/benchmark-migration.d.ts +3 -13
  222. package/dist/tools/handlers/benchmark-migration.js +1 -1
  223. package/dist/tools/handlers/config.js +1 -1
  224. package/dist/tools/handlers/file-export.js +1 -1
  225. package/dist/tools/handlers/industry-pack.js +1 -1
  226. package/dist/tools/handlers/messenger.js +1 -1
  227. package/dist/tools/handlers/onchain.js +1 -1
  228. package/dist/tools/handlers/query.js +1 -1
  229. package/dist/tools/handlers/review-chain.d.ts +22 -0
  230. package/dist/tools/handlers/review-chain.js +1 -0
  231. package/dist/tools/registry/agent.js +1 -1
  232. package/dist/tools/registry/business.js +1 -1
  233. package/dist/tools/registry/config.js +1 -1
  234. package/dist/tools/registry/evaluation.js +1 -1
  235. package/dist/tools/registry/files.js +1 -1
  236. package/dist/tools/registry/identity.js +1 -1
  237. package/dist/tools/registry/local.js +1 -1
  238. package/dist/tools/registry/messenger.js +1 -1
  239. package/dist/tools/registry/monitor.js +1 -1
  240. package/dist/tools/registry/onchain.js +1 -1
  241. package/dist/tools/registry/query.js +1 -1
  242. package/dist/tools/rules-hook.js +1 -1
  243. package/dist/tools/runtime-health.d.ts +10 -0
  244. package/dist/tools/runtime-health.js +1 -0
  245. package/dist/tools/upgrade-check.d.ts +10 -1
  246. package/dist/tools/upgrade-check.js +1 -1
  247. package/dist/tools/wip-deploy-assist.js +1 -1
  248. package/dist/tools/wrap.d.ts +3 -0
  249. package/dist/tools/wrap.js +1 -1
  250. package/package.json +2 -2
  251. package/dist/playbooks/service-build/semantic-graph.d.ts +0 -99
  252. package/dist/playbooks/service-build/semantic-graph.js +0 -1
@@ -1 +1 @@
1
- export function analyzeCustomerInterest(a){const b=[],c=[],d=[],e=[],f=a['token_type']?'\x20('+a['token_type']+')':'';if(a['terminal']==='completed')b['push']('Order\x20reached\x20a\x20completion\x20terminal:\x20escrowed\x20funds\x20were\x20released\x20to\x20the\x20merchant.\x20'+'Verify\x20the\x20deliverable\x20matched\x20the\x20agreement\x20BEFORE\x20confirming\x20—\x20after\x20release,\x20refunds\x20are\x20harder.');else{if(a['terminal']==='refunded')b['push']('Order\x20reached\x20a\x20refund\x20terminal:\x20escrowed\x20funds\x20return\x20to\x20you\x20per\x20the\x20Allocation\x20configuration.');else a['order_amount']!=null&&b['push'](a['order_amount']+'\x20raw\x20units'+f+'\x20of\x20YOUR\x20money\x20sit\x20escrowed\x20in\x20the\x20Order\x20—\x20'+'released\x20to\x20the\x20merchant\x20ONLY\x20when\x20the\x20workflow\x20advances\x20to\x20completion;\x20returned\x20to\x20you\x20ONLY\x20via\x20a\x20refund\x20path.');}a['compensation_fund']!=null&&a['compensation_fund']!=='0'?b['push']('Merchant\x20compensation_fund\x20holds\x20'+a['compensation_fund']+'\x20raw\x20units'+f+'\x20—\x20your\x20recourse\x20if\x20arbitration\x20awards\x20indemnity\x20(paid\x20FROM\x20it).\x20'+'An\x20award\x20is\x20capped\x20at\x203x\x20the\x20order\x20amount\x20(MAX_INDEMNITY_MULTIPLE),\x20so\x20treat\x20the\x20fund\x20above\x203x\x20as\x20the\x20'+'merchant\x27s\x20real\x20exposure\x20and\x20below\x203x\x20as\x20an\x20under-funded\x20promise\x20you\x20should\x20not\x20rely\x20on.'):b['push']('Merchant\x20compensation_fund\x20is\x20EMPTY\x20—\x20arbitration\x20indemnity\x20is\x20unenforceable;\x20your\x20protection\x20is\x20the\x20refund\x20path\x20+\x20on-chain\x20reputation\x20only.');a['operable']['length']>0x0&&c['push']('YOU\x20can\x20execute\x20'+a['operable']['map'](j=>'\x27'+j['name']+'\x27')['join'](',\x20')+'\x20right\x20now\x20—\x20'+'your\x20confirmation\x20is\x20the\x20fund-release\x20trigger:\x20only\x20confirm\x20when\x20the\x20deliverable\x20matches\x20the\x20agreement.');a['terminal']==null&&a['operable']['length']===0x0&&a['waiting_on']['length']>0x0&&c['push']('No\x20forward\x20is\x20yours\x20at\x20this\x20node\x20—\x20you\x20carry\x20no\x20execution\x20responsibility\x20here;\x20'+'delivery\x20depends\x20on\x20the\x20merchant-side\x20roles\x20in\x20waiting_on.');a['operable']['length']>0x0&&a['terminal']==null&&d['push']('Your\x20confirmation\x20is\x20your\x20LEVERAGE:\x20escrowed\x20money\x20stays\x20locked\x20until\x20YOU\x20act\x20—\x20'+'do\x20not\x20confirm\x20before\x20verifying\x20the\x20deliverable\x20(WIP\x20hash\x20/\x20receipt).');const g=a['waiting_on']['some'](j=>j['role']!=='OrderHolder\x20(customer)');g&&a['terminal']==null&&d['push']('The\x20workflow\x20waits\x20on\x20merchant-side\x20roles:\x20a\x20Messenger\x20nudge\x20accelerates\x20delivery\x20'+'and\x20the\x20conversation\x20is\x20recorded\x20as\x20WTS\x20evidence\x20protecting\x20you\x20in\x20a\x20dispute.');a['arbitration_bound']&&a['terminal']==null&&(d['push']('A\x20dispute\x20path\x20exists:\x20if\x20the\x20merchant\x20stalls\x20or\x20under-delivers,\x20open\x20arbitration\x20—\x20'+'your\x20evidence\x20(WTS\x20+\x20WIP\x20hash)\x20decides\x20the\x20outcome.'),d['push']('Pick\x20your\x20dispute\x20track\x20BEFORE\x20you\x20collect\x20anything.\x20The\x20refund\x20rail\x20(escrow\x20→\x20you)\x20and\x20the\x20'+'compensation\x20rail\x20(merchant\x27s\x20fund\x20→\x20you)\x20are\x20independent\x20chains,\x20but\x20the\x20indemnity\x20is\x20NET\x20of\x20what\x20'+'you\x20have\x20already\x20recovered\x20—\x20so\x20if\x20you\x20take\x20a\x20full\x20refund\x20first,\x20a\x20well-advised\x20arbitrator\x20will\x20'+'typically\x20award\x20~0\x20on\x20top\x20of\x20it.\x20Decide\x20refund-only\x20vs\x20arbitration\x20first;\x20chasing\x20both\x20usually\x20nets\x20'+'you\x20the\x20same\x20money\x20with\x20a\x20weaker,\x20more\x20challengeable\x20case.'),d['push']('File\x20through\x20an\x20arbitrator\x20the\x20MERCHANT\x20already\x20accepts\x20(the\x20Service\x27s\x20arbitration\x20list).\x20A\x20buyer\x20'+'cannot\x20add\x20its\x20own\x20venue:\x20an\x20award\x20from\x20an\x20unlisted\x20arbitrator\x20is\x20uncollectable\x20(claim\x20aborts\x2039),\x20so\x20'+'the\x20fee\x20you\x20pay\x20buys\x20a\x20ruling\x20nobody\x20has\x20to\x20honour.'));(a['unread_messages']??0x0)>0x0&&d['push'](a['unread_messages']+'\x20unread\x20Messenger\x20message(s)\x20—\x20timely\x20replies\x20protect\x20your\x20position\x20(WTS\x20record).');a['allocation_payoff']?.['some'](j=>j['positions']['caller']==='gains')&&e['push']('An\x20allocator\x20entry\x20has\x20an\x20unbound\x20Signer\x20recipient\x20(conservative\x20payoff:\x20caller\x20gains\x20—\x20RC-FIND-01):\x20'+'a\x20third\x20party\x20passing\x20that\x20guard\x20could\x20receive\x20settlement\x20funds.\x20Verify\x20whether\x20the\x20guard\x20binds\x20the\x20Signer.');a['allocation_payoff']?.['some'](j=>j['positions']['customer']==='conditional')&&b['push']('Object-address\x20slots\x20settle\x20to\x20the\x20submitted\x20order\x20itself:\x20you\x20receive\x20them\x20as\x20the\x20order\x20owner\x20'+'(object\x20receipt\x20=\x20owner\x20receipt).');a['order_amount']!=null&&a['terminal']==null&&e['push'](a['order_amount']+'\x20raw\x20units'+f+'\x20are\x20at\x20risk\x20while\x20escrowed\x20—\x20if\x20the\x20merchant\x20stalls\x20beyond\x20the\x20timeout,\x20'+'pursue\x20refund/arbitration\x20rather\x20than\x20letting\x20the\x20order\x20stall\x20indefinitely.');a['stalled_hours']!=null&&a['stalled_hours']>0x18&&a['terminal']==null&&e['push']('Order\x20stalled\x20'+Math['round'](a['stalled_hours'])+'h:\x20your\x20leverage\x20is\x20compensation_fund\x20(if\x20any)\x20+\x20arbitration\x20+\x20on-chain\x20reputation\x20(dislike)\x20—\x20in\x20that\x20order.');a['terminal']==='refunded'&&e['push']('Refund\x20executed:\x20funds\x20returned.\x20Remaining\x20stakes\x20are\x20reputational\x20—\x20a\x20dislike\x20vote\x20is\x20your\x20residual\x20recourse\x20if\x20the\x20merchant\x20behaved\x20unfairly.');const h=a['terminal']==='completed'?'order\x20completed\x20—\x20funds\x20released\x20(verify\x20deliverable\x20matched\x20before\x20confirming\x20next\x20time)':a['terminal']==='refunded'?'order\x20refunded\x20—\x20funds\x20returned':a['operable']['length']>0x0?'YOU\x20can\x20act\x20('+a['operable']['length']+'\x20forward(s))\x20—\x20your\x20confirmation\x20releases\x20funds,\x20verify\x20first':'waiting\x20on\x20'+(a['waiting_on']['map'](j=>j['role'])['join'](',\x20')||'others')+'\x20—\x20monitor\x20and\x20nudge',i='Customer\x20interest\x20at\x20node\x20\x27'+(a['current_node']||'(entry)')+'\x27:\x20'+h+'.\x20'+'All\x20options\x20above\x20are\x20informational\x20—\x20the\x20decision\x20is\x20yours.';return{'fund_flow':b,'responsibility':c,'leverage':d,'stakes':e,'summary':i};}
1
+ export function analyzeCustomerInterest(a){const b=[],c=[],d=[],e=[],f=a['token_type']?'\x20('+a['token_type']+')':'';if(a['terminal']==='completed')b['push']('Order\x20reached\x20a\x20completion\x20terminal:\x20escrowed\x20funds\x20were\x20released\x20to\x20the\x20merchant.\x20'+'Verify\x20the\x20deliverable\x20matched\x20the\x20agreement\x20BEFORE\x20confirming\x20—\x20after\x20release,\x20refunds\x20are\x20harder.');else{if(a['terminal']==='refunded')b['push']('Order\x20reached\x20a\x20refund\x20terminal:\x20escrowed\x20funds\x20return\x20to\x20you\x20per\x20the\x20Allocation\x20configuration.');else a['order_amount']!=null&&b['push'](a['order_amount']+'\x20raw\x20units'+f+'\x20of\x20YOUR\x20money\x20sit\x20escrowed\x20in\x20the\x20Order\x20—\x20'+'released\x20to\x20the\x20merchant\x20ONLY\x20when\x20the\x20workflow\x20advances\x20to\x20completion;\x20returned\x20to\x20you\x20ONLY\x20via\x20a\x20refund\x20path.');}if(a['compensation_fund']!=null&&a['compensation_fund']!=='0'){b['push']('Merchant\x20compensation_fund\x20holds\x20'+a['compensation_fund']+'\x20raw\x20units'+f+'\x20—\x20your\x20recourse\x20if\x20arbitration\x20awards\x20indemnity\x20(paid\x20FROM\x20it).\x20'+'An\x20award\x20is\x20capped\x20at\x203x\x20the\x20order\x20amount\x20(MAX_INDEMNITY_MULTIPLE),\x20so\x20treat\x20the\x20fund\x20above\x203x\x20as\x20the\x20'+'merchant\x27s\x20real\x20exposure\x20and\x20below\x203x\x20as\x20an\x20under-funded\x20promise\x20you\x20should\x20not\x20rely\x20on.');if(a['order_amount']!=null){const j=BigInt(a['order_amount']),k=BigInt(a['compensation_fund']),l=j*0x3n;k<l&&b['push']('⚠️\x20Fund\x20under-coverage:\x20compensation_fund\x20'+a['compensation_fund']+'\x20<\x203x\x20this\x20order\x20('+l['toString']()+').\x20'+'If\x20you\x20win\x20arbitration\x20at\x20the\x20full\x203x\x20ceiling,\x20the\x20claim\x20aborts\x20unpayable\x20until\x20the\x20merchant\x20tops\x20up.\x20'+'Consider\x20a\x20smaller\x20order\x20or\x20confirm\x20the\x20merchant\x20has\x20topped\x20up\x20before\x20relying\x20on\x20arbitration.');}}else b['push']('Merchant\x20compensation_fund\x20is\x20EMPTY\x20—\x20arbitration\x20indemnity\x20is\x20unenforceable;\x20your\x20protection\x20is\x20the\x20refund\x20path\x20+\x20on-chain\x20reputation\x20only.');a['operable']['length']>0x0&&c['push']('YOU\x20can\x20execute\x20'+a['operable']['map'](m=>'\x27'+m['name']+'\x27')['join'](',\x20')+'\x20right\x20now\x20—\x20'+'your\x20confirmation\x20is\x20the\x20fund-release\x20trigger:\x20only\x20confirm\x20when\x20the\x20deliverable\x20matches\x20the\x20agreement.');a['terminal']==null&&a['operable']['length']===0x0&&a['waiting_on']['length']>0x0&&c['push']('No\x20forward\x20is\x20yours\x20at\x20this\x20node\x20—\x20you\x20carry\x20no\x20execution\x20responsibility\x20here;\x20'+'delivery\x20depends\x20on\x20the\x20merchant-side\x20roles\x20in\x20waiting_on.');a['operable']['length']>0x0&&a['terminal']==null&&d['push']('Your\x20confirmation\x20is\x20your\x20LEVERAGE:\x20escrowed\x20money\x20stays\x20locked\x20until\x20YOU\x20act\x20—\x20'+'do\x20not\x20confirm\x20before\x20verifying\x20the\x20deliverable\x20(WIP\x20hash\x20/\x20receipt).');const g=a['waiting_on']['some'](m=>m['role']!=='OrderHolder\x20(customer)');g&&a['terminal']==null&&d['push']('The\x20workflow\x20waits\x20on\x20merchant-side\x20roles:\x20a\x20Messenger\x20nudge\x20accelerates\x20delivery\x20'+'and\x20the\x20conversation\x20is\x20recorded\x20as\x20WTS\x20evidence\x20protecting\x20you\x20in\x20a\x20dispute.');a['arbitration_bound']&&a['terminal']==null&&(d['push']('A\x20dispute\x20path\x20exists:\x20if\x20the\x20merchant\x20stalls\x20or\x20under-delivers,\x20open\x20arbitration\x20—\x20'+'your\x20evidence\x20(WTS\x20+\x20WIP\x20hash)\x20decides\x20the\x20outcome.'),d['push']('Pick\x20your\x20dispute\x20track\x20BEFORE\x20you\x20collect\x20anything.\x20The\x20refund\x20rail\x20(escrow\x20→\x20you)\x20and\x20the\x20'+'compensation\x20rail\x20(merchant\x27s\x20fund\x20→\x20you)\x20are\x20independent\x20chains,\x20but\x20the\x20indemnity\x20is\x20NET\x20of\x20what\x20'+'you\x20have\x20already\x20recovered\x20—\x20so\x20if\x20you\x20take\x20a\x20full\x20refund\x20first,\x20a\x20well-advised\x20arbitrator\x20will\x20'+'typically\x20award\x20~0\x20on\x20top\x20of\x20it.\x20Decide\x20refund-only\x20vs\x20arbitration\x20first;\x20chasing\x20both\x20usually\x20nets\x20'+'you\x20the\x20same\x20money\x20with\x20a\x20weaker,\x20more\x20challengeable\x20case.'),d['push']('File\x20through\x20an\x20arbitrator\x20the\x20MERCHANT\x20already\x20accepts\x20(the\x20Service\x27s\x20arbitration\x20list).\x20A\x20buyer\x20'+'cannot\x20add\x20its\x20own\x20venue:\x20an\x20award\x20from\x20an\x20unlisted\x20arbitrator\x20is\x20uncollectable\x20(claim\x20aborts\x2039),\x20so\x20'+'the\x20fee\x20you\x20pay\x20buys\x20a\x20ruling\x20nobody\x20has\x20to\x20honour.'));(a['unread_messages']??0x0)>0x0&&d['push'](a['unread_messages']+'\x20unread\x20Messenger\x20message(s)\x20—\x20timely\x20replies\x20protect\x20your\x20position\x20(WTS\x20record).');a['allocation_payoff']?.['some'](m=>m['positions']['caller']==='gains')&&e['push']('An\x20allocator\x20entry\x20has\x20an\x20unbound\x20Signer\x20recipient\x20(conservative\x20payoff:\x20caller\x20gains\x20—\x20RC-FIND-01):\x20'+'a\x20third\x20party\x20passing\x20that\x20guard\x20could\x20receive\x20settlement\x20funds.\x20Verify\x20whether\x20the\x20guard\x20binds\x20the\x20Signer.');a['allocation_payoff']?.['some'](m=>m['positions']['customer']==='conditional')&&b['push']('Object-address\x20slots\x20settle\x20to\x20the\x20submitted\x20order\x20itself:\x20you\x20receive\x20them\x20as\x20the\x20order\x20owner\x20'+'(object\x20receipt\x20=\x20owner\x20receipt).');a['order_amount']!=null&&a['terminal']==null&&e['push'](a['order_amount']+'\x20raw\x20units'+f+'\x20are\x20at\x20risk\x20while\x20escrowed\x20—\x20if\x20the\x20merchant\x20stalls\x20beyond\x20the\x20timeout,\x20'+'pursue\x20refund/arbitration\x20rather\x20than\x20letting\x20the\x20order\x20stall\x20indefinitely.');a['stalled_hours']!=null&&a['stalled_hours']>0x18&&a['terminal']==null&&e['push']('Order\x20stalled\x20'+Math['round'](a['stalled_hours'])+'h:\x20your\x20leverage\x20is\x20compensation_fund\x20(if\x20any)\x20+\x20arbitration\x20+\x20on-chain\x20reputation\x20(dislike)\x20—\x20in\x20that\x20order.');a['terminal']==='refunded'&&e['push']('Refund\x20executed:\x20funds\x20returned.\x20Remaining\x20stakes\x20are\x20reputational\x20—\x20a\x20dislike\x20vote\x20is\x20your\x20residual\x20recourse\x20if\x20the\x20merchant\x20behaved\x20unfairly.');const h=a['terminal']==='completed'?'order\x20completed\x20—\x20funds\x20released\x20(verify\x20deliverable\x20matched\x20before\x20confirming\x20next\x20time)':a['terminal']==='refunded'?'order\x20refunded\x20—\x20funds\x20returned':a['operable']['length']>0x0?'YOU\x20can\x20act\x20('+a['operable']['length']+'\x20forward(s))\x20—\x20your\x20confirmation\x20releases\x20funds,\x20verify\x20first':'waiting\x20on\x20'+(a['waiting_on']['map'](m=>m['role'])['join'](',\x20')||'others')+'\x20—\x20monitor\x20and\x20nudge',i='Customer\x20interest\x20at\x20node\x20\x27'+(a['current_node']||'(entry)')+'\x27:\x20'+h+'.\x20'+'All\x20options\x20above\x20are\x20informational\x20—\x20the\x20decision\x20is\x20yours.';return{'fund_flow':b,'responsibility':c,'leverage':d,'stakes':e,'summary':i};}
@@ -32,6 +32,11 @@ export interface OrderRadarInput {
32
32
  };
33
33
  rating_pending?: boolean;
34
34
  discount_available?: string;
35
+ review_summary?: {
36
+ orders_completed: number;
37
+ reviews_written: number;
38
+ reward_bound?: boolean;
39
+ };
35
40
  last_progress_at?: number;
36
41
  now?: number;
37
42
  unread_messages?: number;
@@ -67,7 +72,7 @@ export interface RadarForward {
67
72
  recommended_call?: RecommendedCall;
68
73
  }
69
74
  export interface PendingClaim {
70
- kind: "reward" | "discount" | "compensation" | "rating";
75
+ kind: "reward" | "discount" | "compensation" | "rating" | "review";
71
76
  label: string;
72
77
  how: string;
73
78
  }
@@ -1 +1 @@
1
- import{deriveCommercialRole,CORE_PERMISSION_INDEX}from'../role/derivation.js';import{annotateNodeName}from'../graph/onchain/order-status.js';const ORDER_HOLDER_CALL={'tool':'onchain_operations','path':'data.progress','reason':'namedOperator=\x22\x22\x20=\x20OrderHolder:\x20execute\x20via\x20onchain_operations\x20operation_type=\x22order\x22\x20data.progress\x20—\x20order::progress\x20runs\x20with\x20the\x20Order\x20as\x20holder\x20(OrderHolder\x20short-circuit\x20established\x20at\x20purchase).\x20workflow_operation\x20operate\x20auto-routes\x20to\x20the\x20same\x20order-bound\x20path\x20when\x20the\x20Progress\x20task\x20is\x20an\x20Order;\x20on\x20a\x20standalone\x20Progress\x20empty-namedOperator\x20forwards\x20are\x20un-executable\x20(abort\x208).'},ORDER_RENEW_CALL={'tool':'onchain_operations','path':'data.order_renew','reason':'Renewal\x20forward\x20(order-holder\x20loop\x20into\x20a\x20charging\x20node):\x20execute\x20via\x20onchain_operations\x20operation_type=\x22order\x22\x20data.order_renew\x20—\x20ONE\x20PTB\x20pays\x20the\x20period\x20amount\x20into\x20the\x20Allocation\x20AND\x20advances\x20the\x20renew\x20forward\x20atomically.\x20Plain\x20data.progress\x20would\x20advance\x20the\x20loop\x20WITHOUT\x20funding\x20it\x20(zero-value\x20period).'},RENEWAL_NODE_RE=/(charg|billing|renew)/i,POST_PERIOD_NODE_RE=/(deliver|complet|expir|ship|sent)/i;export function isRenewalLoopEdge(a,b){return RENEWAL_NODE_RE['test'](b)&&POST_PERIOD_NODE_RE['test'](a);}export function recommendedCallForOrderHolder(a){const b=a['currentNode']!==undefined&&a['targetNode']!==undefined&&isRenewalLoopEdge(a['currentNode'],a['targetNode']),c=b?ORDER_RENEW_CALL:ORDER_HOLDER_CALL;return a['hasGuard']?{...c,'reason':c['reason']+GUARD_PASSPORT_SUFFIX}:c;}const PROGRESS_OPERATE_CALL={'tool':'workflow_operation','path':'data.operate','reason':'Forward\x20requires\x20a\x20permission\x20index\x20or\x20a\x20named\x20operator:\x20execute\x20on\x20the\x20Progress\x20object\x20via\x20workflow_operation\x20action=operate.\x20The\x20OrderHolder\x20short-circuit\x20(order.data.progress)\x20does\x20not\x20apply\x20to\x20this\x20forward.'},GUARD_PASSPORT_SUFFIX='\x20The\x20forward\x20binds\x20a\x20Guard:\x20a\x20validated\x20passport\x20is\x20mandatory\x20on\x20either\x20route\x20(progress#9\x20\x22Passport\x20required\x22)\x20and\x20cannot\x20be\x20bypassed.';export function recommendedCallForExecutionPath(a,b){const c=a==='order_holder'?ORDER_HOLDER_CALL:a==='permission'||a==='named_operator'?PROGRESS_OPERATE_CALL:undefined;if(!c)return undefined;return b?{...c,'reason':c['reason']+GUARD_PASSPORT_SUFFIX}:c;}export function recommendedCallForForwardBinding(a){const b=a['permissionIndex']!=null?'permission':a['namedOperator']===''?'order_holder':a['namedOperator']!=null?'named_operator':'not_available';return recommendedCallForExecutionPath(b,a['hasGuard']);}export function analyzeOrderParticipation(a){const b=a['node_annotations'],c=a['current_node']??'',d=!!a['order_holder']&&a['order_holder']===a['account'],e=new Set();if(a['permission']?.['entityPermissions'])for(const [u,v]of a['permission']['entityPermissions']){if(u===a['account']){for(const w of v)e['add'](w);}}if(a['permission']){const x=a['permission']['admin']??[],y=a['permission']['owner'];(x['some'](z=>z['toLowerCase']()===a['account']['toLowerCase']())||y&&y['toLowerCase']()===a['account']['toLowerCase']())&&e['add'](CORE_PERMISSION_INDEX['service']);}const f=[];if(a['named_accounts'])for(const [z,A]of Object['entries'](a['named_accounts'])){if(nameResolvesTo(A,a['account']))f['push'](z);}const g=deriveCommercialRole({'account':a['account'],'order_holder':a['order_holder'],'held_permission_indexes':Array['from'](e),'named_operator_names':f,'demand_presenters':a['demand_presenters'],'has_active_order':!![]}),h=g['role'],i=g['collaborator_kind'],j=[],k=[],l=!a['workflow'];let m;if(a['workflow'])for(const B of a['workflow']['transitions']){if(B['prevNode']!==c)continue;m=B['threshold'];const C={'name':B['forward']??'(unnamed)','permissionIndex':B['permissionIndex']??null,'namedOperator':B['namedOperator']??null,'guard':B['guard']??null,'weight':B['weight']??null},D=resolveForward(C,B['node'],a,d,e,b);if(D['execution_path']==='not_available'){const E=C['permissionIndex']!=null?'permission\x20index\x20'+C['permissionIndex']:C['namedOperator']===''?'OrderHolder\x20(customer)':'named\x20operator\x20\x27'+C['namedOperator']+'\x27',F=k['find'](G=>G['role']===E);if(F)F['forwards']['push'](D['name']);else k['push']({'role':E,'forwards':[D['name']]});}else j['push'](D);}const n=[];d&&n['push']({'label':'OrderHolder\x20(customer)','can_act_now':j['some'](G=>G['execution_path']==='order_holder')});for(const G of[...e]['sort']((H,I)=>H-I)){n['push']({'label':'permission\x20index\x20'+G,'can_act_now':j['some'](H=>H['permission_index']===G)});}if(a['named_accounts'])for(const [H,I]of Object['entries'](a['named_accounts'])){nameResolvesTo(I,a['account'])&&n['push']({'label':'named\x20operator\x20\x27'+H+'\x27','can_act_now':j['some'](J=>J['named_operator']===H)});}let o;j['length']>0x1&&(o={'message':j['length']+'\x20operations\x20are\x20available\x20to\x20you\x20at\x20node\x20\x27'+(c||'(entry)')+'\x27.\x20'+'Each\x20leads\x20to\x20a\x20different\x20outcome\x20—\x20review\x20the\x20consequences\x20and\x20choose;\x20no\x20one\x20else\x20can\x20make\x20this\x20decision\x20for\x20you.','options':j['map'](J=>({'forward':J['name'],'to_node':J['to_node'],'consequence':J['consequence']}))});const p=[];for(const J of a['claimable_rewards']??[]){if(J['already_claimed'])continue;p['push']({'kind':'reward','label':J['description']??'Reward\x20'+J['address'],'how':'onchain_operations\x20reward\x20op=\x27claim\x27\x20(object=\x27'+J['address']+'\x27)'});}a['pending_compensation']&&p['push']({'kind':'compensation','label':a['pending_compensation']['note']??'Arbitration\x20indemnity\x20awarded\x20to\x20you','how':'onchain_operations\x20order\x20op=\x27arb_claim_compensation\x27\x20(arb=\x27'+a['pending_compensation']['arbitration']+'\x27)\x20—\x20paid\x20directly\x20from\x20the\x20Service\x20compensation_fund'});a['discount_available']&&p['push']({'kind':'discount','label':a['discount_available'],'how':'Mention\x20the\x20discount\x20when\x20placing\x20the\x20next\x20order\x20(reward\x20discount\x20config\x20applies\x20at\x20purchase)'});a['rating_pending']&&p['push']({'kind':'rating','label':'Rate\x20this\x20transaction\x20(like/dislike)\x20—\x20builds\x20on-chain\x20reputation\x20for\x20both\x20sides','how':'onchain_operations\x20operation_type=\x27personal\x27,\x20data.mark={op:\x27like\x27|\x27dislike\x27,\x20address:\x27<merchant\x20address>\x27}\x20—\x20counts\x20into\x20the\x20PUBLIC\x20aggregate\x20via\x20the\x20on-chain\x20reputation\x20registry'});const q=buildInterestHints(a,h,j,k,c),s=buildSummary(a,h,n,j,k,p,l,c);return{'account':a['account'],'progress':a['progress_address'],'order':a['order_address'],'current_node':c,'perspective':h,'collaborator_kind':i,'roles':n,'operable':j,'branch_choice':o,'waiting_on':k,'pending_claims':p,'interest_hints':q,'workflow_unknown':l,'threshold':m,'summary':s};}export function aggregateRadar(a,b){const c=a['filter'](g=>g['operable']['length']>0x0||g['pending_claims']['length']>0x0)['sort']((g,h)=>(g['perspective']==='customer'?0x0:0x1)-(h['perspective']==='customer'?0x0:0x1)),d=a['filter'](g=>g['operable']['length']===0x0&&g['pending_claims']['length']===0x0),e=a['flatMap'](g=>g['pending_claims']['map'](h=>({...h,'progress':g['progress']}))),f=a['length']===0x0?'No\x20in-flight\x20orders\x20found\x20for\x20this\x20account.':a['length']+'\x20in-flight\x20order(s):\x20'+c['length']+'\x20need\x20your\x20action\x20or\x20have\x20claims,\x20'+d['length']+'\x20are\x20waiting\x20on\x20other\x20roles.\x20'+(e['length']>0x0?e['length']+'\x20unclaimed\x20benefit(s)\x20detected.\x20':'')+(c['length']>0x0?'Top\x20priority:\x20'+c[0x0]['summary']:'Nothing\x20requires\x20your\x20action\x20right\x20now.');return{'account':a[0x0]?.['account']??'','orders_analyzed':a['length'],'actionable':c,'waiting':d,'all_pending_claims':e,'unread_messages_total':b??0x0,'summary':f};}function nameResolvesTo(a,b){if(!a)return![];return Array['isArray'](a)?a['includes'](b):a===b;}export function isConsequenceNode(a,b,c){const d=(a??'')['toLowerCase'](),e=c?.[b];if(e?.['some'](g=>!!g&&d['includes'](g['toLowerCase']())))return!![];const f=annotateNodeName(a??'');return b==='completed'?f==='completion':f==='refund'||f==='exception';}function resolveForward(a,b,c,d,e,f){let g='not_available';if(a['permissionIndex']!=null){if(e['has'](a['permissionIndex']))g='permission';}else{if(a['namedOperator']===''){if(d)g='order_holder';}else{if(a['namedOperator']!=null){const l=c['named_accounts']?.[a['namedOperator']];if(nameResolvesTo(l,c['account']))g='named_operator';}}}const h=b,i=describeForward(a['name']??'',h,g,a['permissionIndex'],a['namedOperator']),j=consequenceOf(h,f),k=g==='order_holder'?recommendedCallForOrderHolder({'hasGuard':!!a['guard'],'currentNode':c['current_node']??'','targetNode':h}):recommendedCallForExecutionPath(g,!!a['guard']);return{'name':a['name']??'(unnamed)','to_node':h,'execution_path':g,'permission_index':a['permissionIndex']??undefined,'named_operator':a['namedOperator']??undefined,'guard':a['guard']??undefined,'semantics':i,'consequence':j,'weight':a['weight']??undefined,'recommended_call':k};}function describeForward(a,b,c,d,e){const f=d!=null?'requires\x20permission\x20index\x20'+d:e===''?'executable\x20by\x20the\x20order\x20holder\x20(customer)':'executable\x20by\x20named\x20operator\x20\x27'+e+'\x27',g=c==='not_available'?'You\x20CANNOT\x20execute\x20this':'You\x20CAN\x20execute\x20this';return'\x27'+a+'\x27\x20advances\x20the\x20order\x20to\x20node\x20\x27'+b+'\x27\x20('+f+').\x20'+g+'.';}export function consequenceOf(a,b){if(isConsequenceNode(a,'completed',b))return'Completion\x20path\x20—\x20funds\x20are\x20released\x20to\x20the\x20merchant\x20per\x20the\x20Allocation\x20waterfall;\x20refunds\x20become\x20harder\x20after\x20this\x20point.';if(isConsequenceNode(a,'refunded',b))return'Refund/cancellation\x20path\x20—\x20escrowed\x20funds\x20return\x20to\x20the\x20buyer\x20per\x20the\x20Allocation\x20configuration.';return undefined;}function buildInterestHints(a,b,c,d,e){const f=[],g=a['now']??Date['now'](),h=a['last_progress_at']!=null?(g-a['last_progress_at'])/0x36ee80:undefined;if(b==='customer')c['length']>0x0&&f['push']('Your\x20confirmation\x20is\x20the\x20fund-release\x20trigger:\x20escrowed\x20money\x20stays\x20locked\x20until\x20YOU\x20act\x20—\x20only\x20confirm\x20when\x20the\x20deliverable\x20matches\x20the\x20agreement.'),d['some'](i=>i['role']!=='OrderHolder\x20(customer)')&&f['push']('Delivery\x20depends\x20on\x20the\x20merchant-side\x20roles\x20listed\x20in\x20waiting_on;\x20if\x20they\x20stall,\x20Messenger\x20first,\x20then\x20consider\x20dispute\x20via\x20the\x20bound\x20Arbitration.'),h!=null&&h>0x18&&f['push']('Order\x20has\x20not\x20advanced\x20for\x20'+Math['round'](h)+'h.\x20Your\x20leverage:\x20compensation_fund\x20(if\x20any)\x20+\x20arbitration\x20+\x20on-chain\x20reputation\x20(dislike)\x20—\x20in\x20that\x20order.');else{if(b==='supplier')c['length']>0x0&&f['push']('Advancing\x20your\x20sub-order\x20NOW\x20unlocks\x20YOUR\x20settlement\x20—\x20upload\x20delivery\x20evidence\x20first\x20to\x20protect\x20your\x20payment\x20claim\x20against\x20the\x20upstream\x20merchant.'),d['some'](i=>i['role']!=='OrderHolder\x20(customer)')&&f['push']('Your\x20settlement\x20depends\x20on\x20upstream\x20roles\x20in\x20waiting_on;\x20if\x20they\x20stall,\x20a\x20Messenger\x20nudge\x20first,\x20then\x20arbitration\x20via\x20the\x20bound\x20Arbitration.'),h!=null&&h>0x30&&f['push']('Sub-order\x20stalled\x20'+Math['round'](h)+'h:\x20your\x20claim\x20erodes\x20with\x20time\x20—\x20evidence\x20+\x20a\x20Messenger\x20nudge\x20are\x20your\x20cheapest\x20protections.');else{if(b==='collaborator'||b==='merchant'){const i=d['filter'](j=>j['role']['startsWith']('permission\x20index'));c['length']>0x0&&f['push']('Advancing\x20the\x20workflow\x20NOW\x20improves\x20flow\x20efficiency\x20and\x20shortens\x20your\x20fund-settlement\x20cycle;\x20stalled\x20orders\x20degrade\x20your\x20on-chain\x20reputation\x20metrics\x20(dispute\x20rate,\x20stall\x20statistics).'),i['length']>0x0&&f['push']('Nodes\x20waiting\x20on\x20YOUR\x20permission\x20indexes\x20are\x20your\x20responsibility\x20surface:\x20prolonged\x20inaction\x20may\x20trigger\x20timeout\x20penalties\x20or\x20disputes\x20recorded\x20permanently\x20on-chain.'),e&&c['length']===0x0&&f['push']('Nothing\x20for\x20you\x20to\x20execute\x20at\x20this\x20node\x20—\x20monitor\x20only;\x20avoid\x20unnecessary\x20interference\x20that\x20creates\x20semantic\x20responsibility.');}else f['push']('You\x20hold\x20no\x20operative\x20role\x20on\x20this\x20order\x20(neutral).\x20On-chain\x20data\x20remains\x20transparent\x20to\x20you\x20for\x20auditing.');}}return(a['unread_messages']??0x0)>0x0&&f['push'](a['unread_messages']+'\x20unread\x20Messenger\x20message(s)\x20—\x20negotiation\x20evidence\x20(WTS)\x20forms\x20the\x20arbitration\x20record;\x20timely\x20replies\x20protect\x20your\x20position.'),f;}function buildSummary(a,b,c,d,e,f,g,h){const i=c['length']>0x0?c['map'](m=>m['label'])['join'](',\x20'):'no\x20operative\x20role',j=h===''?'(entry,\x20not\x20started)':'\x27'+h+'\x27';if(g)return'Order\x20'+a['progress_address']+'\x20is\x20at\x20'+j+';\x20you\x20are\x20'+b+'\x20('+i+').\x20Machine\x20workflow\x20data\x20unavailable\x20—\x20fetch\x20the\x20bound\x20Machine\x20to\x20see\x20executable\x20operations.';const k=d['length']>0x0?'you\x20can\x20execute:\x20'+d['map'](m=>'\x27'+m['name']+'\x27→\x27'+m['to_node']+'\x27')['join'](',\x20'):e['length']>0x0?'waiting\x20on\x20'+e['map'](m=>m['role'])['join'](',\x20'):'no\x20pending\x20operations\x20at\x20this\x20node',l=f['length']>0x0?'\x20'+f['length']+'\x20unclaimed\x20benefit(s).':'';return'Order\x20at\x20'+j+';\x20you\x20are\x20'+b+'\x20('+i+')\x20—\x20'+k+'.'+l;}
1
+ import{deriveCommercialRole,CORE_PERMISSION_INDEX}from'../role/derivation.js';import{annotateNodeName}from'../graph/onchain/order-status.js';const ORDER_HOLDER_CALL={'tool':'onchain_operations','path':'data.progress','reason':'namedOperator=\x22\x22\x20=\x20OrderHolder:\x20execute\x20via\x20onchain_operations\x20operation_type=\x22order\x22\x20data.progress\x20—\x20order::progress\x20runs\x20with\x20the\x20Order\x20as\x20holder\x20(OrderHolder\x20short-circuit\x20established\x20at\x20purchase).\x20workflow_operation\x20operate\x20auto-routes\x20to\x20the\x20same\x20order-bound\x20path\x20when\x20the\x20Progress\x20task\x20is\x20an\x20Order;\x20on\x20a\x20standalone\x20Progress\x20empty-namedOperator\x20forwards\x20are\x20un-executable\x20(abort\x208).'},ORDER_RENEW_CALL={'tool':'onchain_operations','path':'data.order_renew','reason':'Renewal\x20forward\x20(order-holder\x20loop\x20into\x20a\x20charging\x20node):\x20execute\x20via\x20onchain_operations\x20operation_type=\x22order\x22\x20data.order_renew\x20—\x20ONE\x20PTB\x20pays\x20the\x20period\x20amount\x20into\x20the\x20Allocation\x20AND\x20advances\x20the\x20renew\x20forward\x20atomically.\x20Plain\x20data.progress\x20would\x20advance\x20the\x20loop\x20WITHOUT\x20funding\x20it\x20(zero-value\x20period).'},RENEWAL_NODE_RE=/(charg|billing|renew)/i,POST_PERIOD_NODE_RE=/(deliver|complet|expir|ship|sent)/i;export function isRenewalLoopEdge(a,b){return RENEWAL_NODE_RE['test'](b)&&POST_PERIOD_NODE_RE['test'](a);}export function recommendedCallForOrderHolder(a){const b=a['currentNode']!==undefined&&a['targetNode']!==undefined&&isRenewalLoopEdge(a['currentNode'],a['targetNode']),c=b?ORDER_RENEW_CALL:ORDER_HOLDER_CALL;return a['hasGuard']?{...c,'reason':c['reason']+GUARD_PASSPORT_SUFFIX}:c;}const PROGRESS_OPERATE_CALL={'tool':'workflow_operation','path':'data.operate','reason':'Forward\x20requires\x20a\x20permission\x20index\x20or\x20a\x20named\x20operator:\x20execute\x20on\x20the\x20Progress\x20object\x20via\x20workflow_operation\x20action=operate.\x20The\x20OrderHolder\x20short-circuit\x20(order.data.progress)\x20does\x20not\x20apply\x20to\x20this\x20forward.'},GUARD_PASSPORT_SUFFIX='\x20The\x20forward\x20binds\x20a\x20Guard:\x20a\x20validated\x20passport\x20is\x20mandatory\x20on\x20either\x20route\x20(progress#9\x20\x22Passport\x20required\x22)\x20and\x20cannot\x20be\x20bypassed.';export function recommendedCallForExecutionPath(a,b){const c=a==='order_holder'?ORDER_HOLDER_CALL:a==='permission'||a==='named_operator'?PROGRESS_OPERATE_CALL:undefined;if(!c)return undefined;return b?{...c,'reason':c['reason']+GUARD_PASSPORT_SUFFIX}:c;}export function recommendedCallForForwardBinding(a){const b=a['permissionIndex']!=null?'permission':a['namedOperator']===''?'order_holder':a['namedOperator']!=null?'named_operator':'not_available';return recommendedCallForExecutionPath(b,a['hasGuard']);}export function analyzeOrderParticipation(a){const b=a['node_annotations'],c=a['current_node']??'',d=!!a['order_holder']&&a['order_holder']===a['account'],e=new Set();if(a['permission']?.['entityPermissions'])for(const [v,w]of a['permission']['entityPermissions']){if(v===a['account']){for(const x of w)e['add'](x);}}if(a['permission']){const y=a['permission']['admin']??[],z=a['permission']['owner'];(y['some'](A=>A['toLowerCase']()===a['account']['toLowerCase']())||z&&z['toLowerCase']()===a['account']['toLowerCase']())&&e['add'](CORE_PERMISSION_INDEX['service']);}const f=[];if(a['named_accounts'])for(const [A,B]of Object['entries'](a['named_accounts'])){if(nameResolvesTo(B,a['account']))f['push'](A);}const g=deriveCommercialRole({'account':a['account'],'order_holder':a['order_holder'],'held_permission_indexes':Array['from'](e),'named_operator_names':f,'demand_presenters':a['demand_presenters'],'has_active_order':!![]}),h=g['role'],i=g['collaborator_kind'],j=[],k=[],l=!a['workflow'];let m;if(a['workflow'])for(const C of a['workflow']['transitions']){if(C['prevNode']!==c)continue;m=C['threshold'];const D={'name':C['forward']??'(unnamed)','permissionIndex':C['permissionIndex']??null,'namedOperator':C['namedOperator']??null,'guard':C['guard']??null,'weight':C['weight']??null},E=resolveForward(D,C['node'],a,d,e,b);if(E['execution_path']==='not_available'){const F=D['permissionIndex']!=null?'permission\x20index\x20'+D['permissionIndex']:D['namedOperator']===''?'OrderHolder\x20(customer)':'named\x20operator\x20\x27'+D['namedOperator']+'\x27',G=k['find'](H=>H['role']===F);if(G)G['forwards']['push'](E['name']);else k['push']({'role':F,'forwards':[E['name']]});}else j['push'](E);}const n=[];d&&n['push']({'label':'OrderHolder\x20(customer)','can_act_now':j['some'](H=>H['execution_path']==='order_holder')});for(const H of[...e]['sort']((I,J)=>I-J)){n['push']({'label':'permission\x20index\x20'+H,'can_act_now':j['some'](I=>I['permission_index']===H)});}if(a['named_accounts'])for(const [I,J]of Object['entries'](a['named_accounts'])){nameResolvesTo(J,a['account'])&&n['push']({'label':'named\x20operator\x20\x27'+I+'\x27','can_act_now':j['some'](K=>K['named_operator']===I)});}let o;j['length']>0x1&&(o={'message':j['length']+'\x20operations\x20are\x20available\x20to\x20you\x20at\x20node\x20\x27'+(c||'(entry)')+'\x27.\x20'+'Each\x20leads\x20to\x20a\x20different\x20outcome\x20—\x20review\x20the\x20consequences\x20and\x20choose;\x20no\x20one\x20else\x20can\x20make\x20this\x20decision\x20for\x20you.','options':j['map'](K=>({'forward':K['name'],'to_node':K['to_node'],'consequence':K['consequence']}))});const p=[];for(const K of a['claimable_rewards']??[]){if(K['already_claimed'])continue;p['push']({'kind':'reward','label':K['description']??'Reward\x20'+K['address'],'how':'onchain_operations\x20reward\x20op=\x27claim\x27\x20(object=\x27'+K['address']+'\x27)'});}a['pending_compensation']&&p['push']({'kind':'compensation','label':a['pending_compensation']['note']??'Arbitration\x20indemnity\x20awarded\x20to\x20you','how':'onchain_operations\x20order\x20op=\x27arb_claim_compensation\x27\x20(arb=\x27'+a['pending_compensation']['arbitration']+'\x27)\x20—\x20paid\x20directly\x20from\x20the\x20Service\x20compensation_fund'});a['discount_available']&&p['push']({'kind':'discount','label':a['discount_available'],'how':'Mention\x20the\x20discount\x20when\x20placing\x20the\x20next\x20order\x20(reward\x20discount\x20config\x20applies\x20at\x20purchase)'});a['rating_pending']&&p['push']({'kind':'rating','label':'Rate\x20this\x20transaction\x20(like/dislike)\x20—\x20builds\x20on-chain\x20reputation\x20for\x20both\x20sides','how':'onchain_operations\x20operation_type=\x27personal\x27,\x20data.mark={op:\x27like\x27|\x27dislike\x27,\x20address:\x27<merchant\x20address>\x27}\x20—\x20counts\x20into\x20the\x20PUBLIC\x20aggregate\x20via\x20the\x20on-chain\x20reputation\x20registry'});const q=d?j['find'](L=>/review/i['test'](L['to_node'])):undefined;if(q){const L=(a['claimable_rewards']??[])['some'](M=>!M['already_claimed'])?'\x20A\x20guard-gated\x20service\x20reward\x20is\x20attached\x20to\x20this\x20order\x20—\x20its\x20claim\x20rides\x20the\x20SAME\x20passport\x20as\x20the\x20review\x20forward.':'';p['push']({'kind':'review','label':'Review\x20this\x20transaction:\x20advancing\x20\x27'+q['name']+'\x27\x20→\x20\x27'+q['to_node']+'\x27\x20carries\x20your\x20review.\x20'+'Your\x20review\x20TEXT\x20rides\x20the\x20forward\x20message\x20(permanent\x20on-chain\x20history,\x20signed\x20by\x20you);\x20the\x20structured\x20'+'like/dislike\x20+\x20tags\x20ride\x20the\x20review\x20repository\x20in\x20the\x20same\x20transaction.\x20Reviewing\x20does\x20NOT\x20affect\x20your\x20'+'refund/settlement\x20rights\x20—\x20settlement\x20is\x20anchored\x20on\x20delivery\x20time,\x20not\x20on\x20whether\x20or\x20how\x20you\x20review.'+L,'how':'onchain_operations\x20operation_type=\x22progress\x22\x20data.progress\x20(forward\x20\x27'+q['name']+'\x27)\x20with\x20'+'data.message\x20=\x20review\x20text;\x20optional\x20data.review\x20=\x20{\x20repository:\x20\x27<review\x20repository>\x27,\x20'+'rating:\x20\x27like\x27|\x27dislike\x27,\x20tags?:\x20[...],\x20reward_claim?:\x20{\x20reward,\x20guard\x20}\x20}\x20—\x20the\x20chained\x20repository\x20'+'write\x20+\x20reward\x20claim\x20reuse\x20the\x20forward\x27s\x20passport'});}const s=buildInterestHints(a,h,j,k,c),u=buildSummary(a,h,n,j,k,p,l,c);return{'account':a['account'],'progress':a['progress_address'],'order':a['order_address'],'current_node':c,'perspective':h,'collaborator_kind':i,'roles':n,'operable':j,'branch_choice':o,'waiting_on':k,'pending_claims':p,'interest_hints':s,'workflow_unknown':l,'threshold':m,'summary':u};}export function aggregateRadar(a,b){const c=a['filter'](g=>g['operable']['length']>0x0||g['pending_claims']['length']>0x0)['sort']((g,h)=>(g['perspective']==='customer'?0x0:0x1)-(h['perspective']==='customer'?0x0:0x1)),d=a['filter'](g=>g['operable']['length']===0x0&&g['pending_claims']['length']===0x0),e=a['flatMap'](g=>g['pending_claims']['map'](h=>({...h,'progress':g['progress']}))),f=a['length']===0x0?'No\x20in-flight\x20orders\x20found\x20for\x20this\x20account.':a['length']+'\x20in-flight\x20order(s):\x20'+c['length']+'\x20need\x20your\x20action\x20or\x20have\x20claims,\x20'+d['length']+'\x20are\x20waiting\x20on\x20other\x20roles.\x20'+(e['length']>0x0?e['length']+'\x20unclaimed\x20benefit(s)\x20detected.\x20':'')+(c['length']>0x0?'Top\x20priority:\x20'+c[0x0]['summary']:'Nothing\x20requires\x20your\x20action\x20right\x20now.');return{'account':a[0x0]?.['account']??'','orders_analyzed':a['length'],'actionable':c,'waiting':d,'all_pending_claims':e,'unread_messages_total':b??0x0,'summary':f};}function nameResolvesTo(a,b){if(!a)return![];return Array['isArray'](a)?a['includes'](b):a===b;}export function isConsequenceNode(a,b,c){const d=(a??'')['toLowerCase'](),e=c?.[b];if(e?.['some'](g=>!!g&&d['includes'](g['toLowerCase']())))return!![];const f=annotateNodeName(a??'');return b==='completed'?f==='completion':f==='refund'||f==='exception';}function resolveForward(a,b,c,d,e,f){let g='not_available';if(a['permissionIndex']!=null){if(e['has'](a['permissionIndex']))g='permission';}else{if(a['namedOperator']===''){if(d)g='order_holder';}else{if(a['namedOperator']!=null){const l=c['named_accounts']?.[a['namedOperator']];if(nameResolvesTo(l,c['account']))g='named_operator';}}}const h=b,i=describeForward(a['name']??'',h,g,a['permissionIndex'],a['namedOperator']),j=consequenceOf(h,f),k=g==='order_holder'?recommendedCallForOrderHolder({'hasGuard':!!a['guard'],'currentNode':c['current_node']??'','targetNode':h}):recommendedCallForExecutionPath(g,!!a['guard']);return{'name':a['name']??'(unnamed)','to_node':h,'execution_path':g,'permission_index':a['permissionIndex']??undefined,'named_operator':a['namedOperator']??undefined,'guard':a['guard']??undefined,'semantics':i,'consequence':j,'weight':a['weight']??undefined,'recommended_call':k};}function describeForward(a,b,c,d,e){const f=d!=null?'requires\x20permission\x20index\x20'+d:e===''?'executable\x20by\x20the\x20order\x20holder\x20(customer)':'executable\x20by\x20named\x20operator\x20\x27'+e+'\x27',g=c==='not_available'?'You\x20CANNOT\x20execute\x20this':'You\x20CAN\x20execute\x20this';return'\x27'+a+'\x27\x20advances\x20the\x20order\x20to\x20node\x20\x27'+b+'\x27\x20('+f+').\x20'+g+'.';}export function consequenceOf(a,b){if(isConsequenceNode(a,'completed',b))return'Completion\x20path\x20—\x20funds\x20are\x20released\x20to\x20the\x20merchant\x20per\x20the\x20Allocation\x20waterfall;\x20refunds\x20become\x20harder\x20after\x20this\x20point.';if(isConsequenceNode(a,'refunded',b))return'Refund/cancellation\x20path\x20—\x20escrowed\x20funds\x20return\x20to\x20the\x20buyer\x20per\x20the\x20Allocation\x20configuration.';return undefined;}function buildInterestHints(a,b,c,d,e){const f=[],g=a['now']??Date['now'](),h=a['last_progress_at']!=null?(g-a['last_progress_at'])/0x36ee80:undefined;if(b==='customer')c['length']>0x0&&f['push']('Your\x20confirmation\x20is\x20the\x20fund-release\x20trigger:\x20escrowed\x20money\x20stays\x20locked\x20until\x20YOU\x20act\x20—\x20only\x20confirm\x20when\x20the\x20deliverable\x20matches\x20the\x20agreement.'),d['some'](i=>i['role']!=='OrderHolder\x20(customer)')&&f['push']('Delivery\x20depends\x20on\x20the\x20merchant-side\x20roles\x20listed\x20in\x20waiting_on;\x20if\x20they\x20stall,\x20Messenger\x20first,\x20then\x20consider\x20dispute\x20via\x20the\x20bound\x20Arbitration.'),h!=null&&h>0x18&&f['push']('Order\x20has\x20not\x20advanced\x20for\x20'+Math['round'](h)+'h.\x20Your\x20leverage:\x20compensation_fund\x20(if\x20any)\x20+\x20arbitration\x20+\x20on-chain\x20reputation\x20(dislike)\x20—\x20in\x20that\x20order.');else{if(b==='supplier')c['length']>0x0&&f['push']('Advancing\x20your\x20sub-order\x20NOW\x20unlocks\x20YOUR\x20settlement\x20—\x20upload\x20delivery\x20evidence\x20first\x20to\x20protect\x20your\x20payment\x20claim\x20against\x20the\x20upstream\x20merchant.'),d['some'](i=>i['role']!=='OrderHolder\x20(customer)')&&f['push']('Your\x20settlement\x20depends\x20on\x20upstream\x20roles\x20in\x20waiting_on;\x20if\x20they\x20stall,\x20a\x20Messenger\x20nudge\x20first,\x20then\x20arbitration\x20via\x20the\x20bound\x20Arbitration.'),h!=null&&h>0x30&&f['push']('Sub-order\x20stalled\x20'+Math['round'](h)+'h:\x20your\x20claim\x20erodes\x20with\x20time\x20—\x20evidence\x20+\x20a\x20Messenger\x20nudge\x20are\x20your\x20cheapest\x20protections.');else{if(b==='collaborator'||b==='merchant'){const i=d['filter'](j=>j['role']['startsWith']('permission\x20index'));c['length']>0x0&&f['push']('Advancing\x20the\x20workflow\x20NOW\x20improves\x20flow\x20efficiency\x20and\x20shortens\x20your\x20fund-settlement\x20cycle;\x20stalled\x20orders\x20degrade\x20your\x20on-chain\x20reputation\x20metrics\x20(dispute\x20rate,\x20stall\x20statistics).');i['length']>0x0&&f['push']('Nodes\x20waiting\x20on\x20YOUR\x20permission\x20indexes\x20are\x20your\x20responsibility\x20surface:\x20prolonged\x20inaction\x20may\x20trigger\x20timeout\x20penalties\x20or\x20disputes\x20recorded\x20permanently\x20on-chain.');e&&c['length']===0x0&&f['push']('Nothing\x20for\x20you\x20to\x20execute\x20at\x20this\x20node\x20—\x20monitor\x20only;\x20avoid\x20unnecessary\x20interference\x20that\x20creates\x20semantic\x20responsibility.');if(b==='merchant'&&a['review_summary']){const {orders_completed:j,reviews_written:k,reward_bound:l}=a['review_summary'];if(j>0x0&&k<j){const m=j-k,n=m/j;n>=0.3&&f['push']('Review\x20coverage\x20is\x20low:\x20'+k+'/'+j+'\x20completed\x20orders\x20carry\x20a\x20structured\x20review\x20('+m+'\x20missing).'+(l?'\x20With\x20a\x20review\x20reward\x20attached,\x20a\x20high\x20missing\x20rate\x20usually\x20means\x20the\x20reward\x20expired,\x20its\x20window\x20is\x20too\x20short,\x20or\x20the\x20reward\x20is\x20hard\x20to\x20discover\x20at\x20quote\x20time\x20—\x20review\x20the\x20reward\x20terms\x20and\x20window.':'\x20Consider\x20whether\x20a\x20review\x20incentive\x20(review_reward\x20mode)\x20or\x20a\x20longer\x20review\x20window\x20fits\x20this\x20service.'));}}}else f['push']('You\x20hold\x20no\x20operative\x20role\x20on\x20this\x20order\x20(neutral).\x20On-chain\x20data\x20remains\x20transparent\x20to\x20you\x20for\x20auditing.');}}return(a['unread_messages']??0x0)>0x0&&f['push'](a['unread_messages']+'\x20unread\x20Messenger\x20message(s)\x20—\x20negotiation\x20evidence\x20(WTS)\x20forms\x20the\x20arbitration\x20record;\x20timely\x20replies\x20protect\x20your\x20position.'),f;}function buildSummary(a,b,c,d,e,f,g,h){const i=c['length']>0x0?c['map'](m=>m['label'])['join'](',\x20'):'no\x20operative\x20role',j=h===''?'(entry,\x20not\x20started)':'\x27'+h+'\x27';if(g)return'Order\x20'+a['progress_address']+'\x20is\x20at\x20'+j+';\x20you\x20are\x20'+b+'\x20('+i+').\x20Machine\x20workflow\x20data\x20unavailable\x20—\x20fetch\x20the\x20bound\x20Machine\x20to\x20see\x20executable\x20operations.';const k=d['length']>0x0?'you\x20can\x20execute:\x20'+d['map'](m=>'\x27'+m['name']+'\x27→\x27'+m['to_node']+'\x27')['join'](',\x20'):e['length']>0x0?'waiting\x20on\x20'+e['map'](m=>m['role'])['join'](',\x20'):'no\x20pending\x20operations\x20at\x20this\x20node',l=f['length']>0x0?'\x20'+f['length']+'\x20unclaimed\x20benefit(s).':'';return'Order\x20at\x20'+j+';\x20you\x20are\x20'+b+'\x20('+i+')\x20—\x20'+k+'.'+l;}
@@ -1 +1 @@
1
- import{initServicePuzzleFromIntent,initMachinePuzzleFromIntent,initAllocationPuzzleFromIntent,initTreasuryPuzzleFromIntent,initArbitrationPuzzleFromIntent,initRewardPuzzleFromIntent,initProgressPuzzleFromIntent,initOrderPuzzleFromIntent,initPuzzleFromIntent as a311a,checkServicePuzzleCompleteness,checkMachinePuzzleCompleteness,checkAllocationPuzzleCompleteness,checkTreasuryPuzzleCompleteness,checkArbitrationPuzzleCompleteness,checkRewardPuzzleCompleteness,checkProgressPuzzleCompleteness,checkOrderPuzzleCompleteness,checkPuzzleCompleteness as a311b}from'../../knowledge/index.js';import{initPuzzleFromIntent as a311c,checkPuzzleCompleteness as a311d}from'../../knowledge/permission-puzzle.js';const KEYWORD_TABLE=[{'category':'Product/Service','keywords_zh':['product','selling','sell','sales','store','open\x20shop'],'keywords_en':['sell','product','sale','shop','store'],'objects':['service','order','progress'],'required_level':'R','scene_id':'retail'},{'category':'Subscription','keywords_zh':['subscription','cycle','renewal'],'keywords_en':['subscribe','recurring','subscription'],'objects':['service','machine','reward'],'required_level':'C','scene_id':'subscription'},{'category':'Rental','keywords_zh':['rent','lease','return'],'keywords_en':['rent','lease','return'],'objects':['service','machine','arb'],'required_level':'C','scene_id':'rental_return'},{'category':'Trust','keywords_zh':['deposit','pledge','verify','trust'],'keywords_en':['deposit','trust','verify'],'objects':['guard','permission','treasury'],'required_level':'R','scene_id':'trust_deposit'},{'category':'Funds','keywords_zh':['split','collect','share\x20profit','income','incentive'],'keywords_en':['split','revenue','reward'],'objects':['allocation','treasury','reward'],'required_level':'R','scene_id':'revenue_split'},{'category':'Workflow','keywords_zh':['node','stage','process','workflow'],'keywords_en':['workflow','stage','node'],'objects':['machine','progress'],'required_level':'R','scene_id':'workflow'},{'category':'Dispute','keywords_zh':['arbitration','refund','conflict','rights\x20protection'],'keywords_en':['arbitration','refund','dispute'],'objects':['arb','proof'],'required_level':'C','scene_id':'arbitration_dispute'},{'category':'Contact','keywords_zh':['customer\x20service','contact','communication'],'keywords_en':['contact','support','im'],'objects':['contact'],'required_level':'C','scene_id':'contact_im'},{'category':'Data','keywords_zh':['evidence','record','data'],'keywords_en':['evidence','record','data'],'objects':['repository','proof'],'required_level':'C','scene_id':'evidence_record'},{'category':'User\x20Profile','keywords_zh':['personal\x20info','preference','privacy'],'keywords_en':['personal','profile','privacy'],'objects':['personal','contact'],'required_level':'OPTIONAL','scene_id':'user_profile'},{'category':'Demand\x20Submission','keywords_zh':['demand','publish','inquiry'],'keywords_en':['demand','request','inquiry'],'objects':['demand'],'required_level':'OPTIONAL','scene_id':'demand_inquiry'}],INDUSTRY_KEYWORDS=[{'industry':'freelance','words':['freelance','outsourcing','freelance','gig']},{'industry':'rental','words':['rental','lease','rental','rent']},{'industry':'education','words':['education','course','training','education','course']},{'industry':'travel','words':['travel','tour','itinerary','travel','trip']},{'industry':'subscription','words':['subscription','cycle','subscription','recurring']}];function buildPuzzleDispatch(){const a=(c,d)=>{try{return c(d);}catch{return undefined;}},b=(c,d)=>{if(!c)return{'missing':[],'complete':![],'next_step':'init\x20failed'};try{return d(c);}catch{return{'missing':[],'complete':![],'next_step':'check\x20failed'};}};return{'service':{'init':c=>a(initServicePuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkServicePuzzleCompleteness)},'machine':{'init':c=>a(initMachinePuzzleFromIntent,c),'check':c=>b(c,checkMachinePuzzleCompleteness)},'allocation':{'init':c=>a(initAllocationPuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkAllocationPuzzleCompleteness)},'treasury':{'init':c=>a(initTreasuryPuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkTreasuryPuzzleCompleteness)},'arb':{'init':c=>a(initArbitrationPuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkArbitrationPuzzleCompleteness)},'reward':{'init':c=>a(initRewardPuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkRewardPuzzleCompleteness)},'progress':{'init':c=>a(initProgressPuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkProgressPuzzleCompleteness)},'order':{'init':c=>a(initOrderPuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkOrderPuzzleCompleteness)},'permission':{'init':c=>a(a311c,{'primary_goal':c}),'check':c=>b(c,a311d)},'guard':{'init':c=>a(a311a,{'primary_goal':c}),'check':c=>b(c,a311b)}};}export function extractKeywords(a){if(!a||typeof a!=='string')return[];const b=[];for(const c of KEYWORD_TABLE){const d=[...c['keywords_zh'],...c['keywords_en']];for(const e of d){try{const f=new RegExp(escapeRegex(e),'gi'),g=(a['match'](f)||[])['length'];g>0x0&&b['push']({'keyword':e,'category':c['category'],'matched_objects':[...c['objects']],'required_level':c['required_level'],'match_count':g});}catch{}}}return b['sort']((h,i)=>i['match_count']-h['match_count']),b;}function escapeRegex(a){return a['replace'](/[.*+?^${}()|[\]\\]/g,'\x5c$&');}export function resolveIndustry(a,b){const c=((a??'')+'\x20'+(b??''))['toLowerCase']();for(const d of INDUSTRY_KEYWORDS){for(const e of d['words']){if(c['includes'](e['toLowerCase']()))return d['industry'];}}return'general';}export function identifyObjects(a,b){if(b['length']===0x0)return{'primary':'service','secondary':['permission','machine','progress'],'scenes':[{'object':'service','scene_id':'general'}]};const c=b['find'](i=>i['required_level']==='R'),d=(c??b[0x0])['matched_objects'][0x0],e=new Set([d]),f=[];for(const i of b){for(const j of i['matched_objects']){!e['has'](j)&&(e['add'](j),f['push'](j));}}const g=[],h=new Set();for(const k of KEYWORD_TABLE){const l=b['find'](n=>n['category']===k['category']);if(!l)continue;if(h['has'](k['scene_id']))continue;h['add'](k['scene_id']),g['push']({'object':k['objects'][0x0],'scene_id':k['scene_id']});}return{'primary':d,'secondary':f,'scenes':g};}export function analyzeBusinessIntent(a){const b=[];if(!a||!a['user_intent']||typeof a['user_intent']!=='string')return{'intent_parsed':{'primary_object':'service','secondary_objects':[],'detected_scenes':[],'industry':'general','keyword_matches':[]},'puzzles':{},'overall_completeness':'empty','next_step':'Please\x20provide\x20a\x20non-empty\x20business\x20intent.','recommended_creation_order':[],'warnings':['input.user_intent\x20is\x20empty']};const c=a['user_intent'],e=extractKeywords(c),f=resolveIndustry(c,a['industry']),{primary:g,secondary:h,scenes:i}=identifyObjects(c,e);let j=[g,...h];if(a['target_objects']&&a['target_objects']['length']>0x0){const p=a['target_objects']['filter'](q=>['service','machine','guard','permission','reward','arb','progress','treasury','demand','repository','contact','order','allocation','personal','payment','proof']['includes'](q));if(p['length']>0x0)j=p;}const k=buildPuzzleDispatch(),l={};for(const q of j){const r=k[q];if(!r){b['push']('No\x20puzzle\x20module\x20for\x20\x27'+q+'\x27\x20—\x20skipped\x20(L3\x20object)');continue;}const s=r['init'](c),t=s?r['check'](s):undefined,u=extractMissingDimensions(t);l[q]={'puzzle':s,'completeness':t,'missing_dimensions':u},!s&&b['push']('Puzzle\x20init\x20failed\x20for\x20\x27'+q+'\x27');}const m=aggregatePuzzleCompleteness(l),n=suggestNextPuzzleStep({'intent_parsed':{'primary_object':g,'secondary_objects':h,'detected_scenes':i,'industry':f,'keyword_matches':e},'puzzles':l,'overall_completeness':m,'next_step':'','recommended_creation_order':[],'warnings':b}),o=['permission','progress','machine','guard','allocation','service'];return{'intent_parsed':{'primary_object':g,'secondary_objects':h,'detected_scenes':i,'industry':f,'keyword_matches':e},'puzzles':l,'overall_completeness':m,'next_step':n,'recommended_creation_order':o,'warnings':b};}function extractMissingDimensions(a){if(!a||typeof a!=='object')return[];const b=a,d=b['missing'];if(Array['isArray'](d))return d['map'](f=>String(f));const e=b['missing_details'];if(Array['isArray'](e))return e['map'](f=>String(f?.['dimension']??f));return[];}export function aggregatePuzzleCompleteness(a){const b=Object['values'](a??{});if(b['length']===0x0)return'empty';const c=b['filter'](f=>!f['puzzle'])['length'];if(c===b['length'])return'empty';const d=b['reduce']((f,g)=>f+(g['missing_dimensions']?.['length']??0x0),0x0);if(d===0x0)return'complete';return'partial';}export function suggestNextPuzzleStep(a){if(!a)return'No\x20result\x20to\x20suggest\x20from.';if(a['overall_completeness']==='complete')return'All\x20puzzle\x20dimensions\x20are\x20complete\x20—\x20ready\x20for\x20risk\x20calibration\x20(stage\x203).';if(a['overall_completeness']==='empty')return'No\x20puzzle\x20has\x20been\x20initialized.\x20Provide\x20more\x20concrete\x20business\x20intent\x20so\x20the\x20primary\x20object\x20can\x20be\x20identified.';const b=['permission','treasury','allocation','guard','machine','service','order','progress','arb','reward','proof','repository','demand','contact','personal','payment'],d=a['puzzles']??{},e=b['filter'](f=>d[f]);for(const f of e){const g=d[f];if(!g)continue;const h=g['missing_dimensions']??[];if(h['length']===0x0)continue;const i=g['completeness'],j=i&&typeof i==='object'?i['next_step']:undefined;if(typeof j==='string'&&j['trim']())return'['+f+']\x20'+j;return'['+f+']\x20Complete\x20dimension'+(h['length']>0x1?'s':'')+'\x20'+h['join'](',\x20')+'\x20to\x20advance\x20the\x20puzzle.';}return'Continue\x20dialog\x20to\x20fill\x20remaining\x20pending\x20fields.';}
1
+ import{initServicePuzzleFromIntent,initMachinePuzzleFromIntent,initAllocationPuzzleFromIntent,initTreasuryPuzzleFromIntent,initArbitrationPuzzleFromIntent,initRewardPuzzleFromIntent,initProgressPuzzleFromIntent,initOrderPuzzleFromIntent,initPuzzleFromIntent as a317a,checkServicePuzzleCompleteness,checkMachinePuzzleCompleteness,checkAllocationPuzzleCompleteness,checkTreasuryPuzzleCompleteness,checkArbitrationPuzzleCompleteness,checkRewardPuzzleCompleteness,checkProgressPuzzleCompleteness,checkOrderPuzzleCompleteness,checkPuzzleCompleteness as a317b}from'../../knowledge/index.js';import{initPuzzleFromIntent as a317c,checkPuzzleCompleteness as a317d}from'../../knowledge/permission-puzzle.js';const KEYWORD_TABLE=[{'category':'Product/Service','keywords_zh':['product','selling','sell','sales','store','open\x20shop'],'keywords_en':['sell','product','sale','shop','store'],'objects':['service','order','progress'],'required_level':'R','scene_id':'retail'},{'category':'Subscription','keywords_zh':['subscription','cycle','renewal'],'keywords_en':['subscribe','recurring','subscription'],'objects':['service','machine','reward'],'required_level':'C','scene_id':'subscription'},{'category':'Rental','keywords_zh':['rent','lease','return'],'keywords_en':['rent','lease','return'],'objects':['service','machine','arb'],'required_level':'C','scene_id':'rental_return'},{'category':'Trust','keywords_zh':['deposit','pledge','verify','trust'],'keywords_en':['deposit','trust','verify'],'objects':['guard','permission','treasury'],'required_level':'R','scene_id':'trust_deposit'},{'category':'Funds','keywords_zh':['split','collect','share\x20profit','income','incentive'],'keywords_en':['split','revenue','reward'],'objects':['allocation','treasury','reward'],'required_level':'R','scene_id':'revenue_split'},{'category':'Workflow','keywords_zh':['node','stage','process','workflow'],'keywords_en':['workflow','stage','node'],'objects':['machine','progress'],'required_level':'R','scene_id':'workflow'},{'category':'Dispute','keywords_zh':['arbitration','refund','conflict','rights\x20protection'],'keywords_en':['arbitration','refund','dispute'],'objects':['arb','proof'],'required_level':'C','scene_id':'arbitration_dispute'},{'category':'Contact','keywords_zh':['customer\x20service','contact','communication'],'keywords_en':['contact','support','im'],'objects':['contact'],'required_level':'C','scene_id':'contact_im'},{'category':'Data','keywords_zh':['evidence','record','data'],'keywords_en':['evidence','record','data'],'objects':['repository','proof'],'required_level':'C','scene_id':'evidence_record'},{'category':'User\x20Profile','keywords_zh':['personal\x20info','preference','privacy'],'keywords_en':['personal','profile','privacy'],'objects':['personal','contact'],'required_level':'OPTIONAL','scene_id':'user_profile'},{'category':'Demand\x20Submission','keywords_zh':['demand','publish','inquiry'],'keywords_en':['demand','request','inquiry'],'objects':['demand'],'required_level':'OPTIONAL','scene_id':'demand_inquiry'}],INDUSTRY_KEYWORDS=[{'industry':'freelance','words':['freelance','outsourcing','freelance','gig']},{'industry':'rental','words':['rental','lease','rental','rent']},{'industry':'education','words':['education','course','training','education','course']},{'industry':'travel','words':['travel','tour','itinerary','travel','trip']},{'industry':'subscription','words':['subscription','cycle','subscription','recurring']}];function buildPuzzleDispatch(){const a=(c,d)=>{try{return c(d);}catch{return undefined;}},b=(c,d)=>{if(!c)return{'missing':[],'complete':![],'next_step':'init\x20failed'};try{return d(c);}catch{return{'missing':[],'complete':![],'next_step':'check\x20failed'};}};return{'service':{'init':c=>a(initServicePuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkServicePuzzleCompleteness)},'machine':{'init':c=>a(initMachinePuzzleFromIntent,c),'check':c=>b(c,checkMachinePuzzleCompleteness)},'allocation':{'init':c=>a(initAllocationPuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkAllocationPuzzleCompleteness)},'treasury':{'init':c=>a(initTreasuryPuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkTreasuryPuzzleCompleteness)},'arb':{'init':c=>a(initArbitrationPuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkArbitrationPuzzleCompleteness)},'reward':{'init':c=>a(initRewardPuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkRewardPuzzleCompleteness)},'progress':{'init':c=>a(initProgressPuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkProgressPuzzleCompleteness)},'order':{'init':c=>a(initOrderPuzzleFromIntent,{'primary_goal':c}),'check':c=>b(c,checkOrderPuzzleCompleteness)},'permission':{'init':c=>a(a317c,{'primary_goal':c}),'check':c=>b(c,a317d)},'guard':{'init':c=>a(a317a,{'primary_goal':c}),'check':c=>b(c,a317b)}};}export function extractKeywords(a){if(!a||typeof a!=='string')return[];const b=[];for(const c of KEYWORD_TABLE){const d=[...c['keywords_zh'],...c['keywords_en']];for(const e of d){try{const f=new RegExp(escapeRegex(e),'gi'),g=(a['match'](f)||[])['length'];g>0x0&&b['push']({'keyword':e,'category':c['category'],'matched_objects':[...c['objects']],'required_level':c['required_level'],'match_count':g});}catch{}}}return b['sort']((h,i)=>i['match_count']-h['match_count']),b;}function escapeRegex(a){return a['replace'](/[.*+?^${}()|[\]\\]/g,'\x5c$&');}export function resolveIndustry(a,b){const c=((a??'')+'\x20'+(b??''))['toLowerCase']();for(const d of INDUSTRY_KEYWORDS){for(const e of d['words']){if(c['includes'](e['toLowerCase']()))return d['industry'];}}return'general';}export function identifyObjects(a,b){if(b['length']===0x0)return{'primary':'service','secondary':['permission','machine','progress'],'scenes':[{'object':'service','scene_id':'general'}]};const c=b['find'](i=>i['required_level']==='R'),d=(c??b[0x0])['matched_objects'][0x0],e=new Set([d]),f=[];for(const i of b){for(const j of i['matched_objects']){!e['has'](j)&&(e['add'](j),f['push'](j));}}const g=[],h=new Set();for(const k of KEYWORD_TABLE){const l=b['find'](n=>n['category']===k['category']);if(!l)continue;if(h['has'](k['scene_id']))continue;h['add'](k['scene_id']),g['push']({'object':k['objects'][0x0],'scene_id':k['scene_id']});}return{'primary':d,'secondary':f,'scenes':g};}export function analyzeBusinessIntent(a){const b=[];if(!a||!a['user_intent']||typeof a['user_intent']!=='string')return{'intent_parsed':{'primary_object':'service','secondary_objects':[],'detected_scenes':[],'industry':'general','keyword_matches':[]},'puzzles':{},'overall_completeness':'empty','next_step':'Please\x20provide\x20a\x20non-empty\x20business\x20intent.','recommended_creation_order':[],'warnings':['input.user_intent\x20is\x20empty']};const c=a['user_intent'],e=extractKeywords(c),f=resolveIndustry(c,a['industry']),{primary:g,secondary:h,scenes:i}=identifyObjects(c,e);let j=[g,...h];if(a['target_objects']&&a['target_objects']['length']>0x0){const p=a['target_objects']['filter'](q=>['service','machine','guard','permission','reward','arb','progress','treasury','demand','repository','contact','order','allocation','personal','payment','proof']['includes'](q));if(p['length']>0x0)j=p;}const k=buildPuzzleDispatch(),l={};for(const q of j){const r=k[q];if(!r){b['push']('No\x20puzzle\x20module\x20for\x20\x27'+q+'\x27\x20—\x20skipped\x20(L3\x20object)');continue;}const s=r['init'](c),t=s?r['check'](s):undefined,u=extractMissingDimensions(t);l[q]={'puzzle':s,'completeness':t,'missing_dimensions':u},!s&&b['push']('Puzzle\x20init\x20failed\x20for\x20\x27'+q+'\x27');}const m=aggregatePuzzleCompleteness(l),n=suggestNextPuzzleStep({'intent_parsed':{'primary_object':g,'secondary_objects':h,'detected_scenes':i,'industry':f,'keyword_matches':e},'puzzles':l,'overall_completeness':m,'next_step':'','recommended_creation_order':[],'warnings':b}),o=['permission','progress','machine','guard','allocation','service'];return{'intent_parsed':{'primary_object':g,'secondary_objects':h,'detected_scenes':i,'industry':f,'keyword_matches':e},'puzzles':l,'overall_completeness':m,'next_step':n,'recommended_creation_order':o,'warnings':b};}function extractMissingDimensions(a){if(!a||typeof a!=='object')return[];const b=a,d=b['missing'];if(Array['isArray'](d))return d['map'](f=>String(f));const e=b['missing_details'];if(Array['isArray'](e))return e['map'](f=>String(f?.['dimension']??f));return[];}export function aggregatePuzzleCompleteness(a){const b=Object['values'](a??{});if(b['length']===0x0)return'empty';const c=b['filter'](f=>!f['puzzle'])['length'];if(c===b['length'])return'empty';const d=b['reduce']((f,g)=>f+(g['missing_dimensions']?.['length']??0x0),0x0);if(d===0x0)return'complete';return'partial';}export function suggestNextPuzzleStep(a){if(!a)return'No\x20result\x20to\x20suggest\x20from.';if(a['overall_completeness']==='complete')return'All\x20puzzle\x20dimensions\x20are\x20complete\x20—\x20ready\x20for\x20risk\x20calibration\x20(stage\x203).';if(a['overall_completeness']==='empty')return'No\x20puzzle\x20has\x20been\x20initialized.\x20Provide\x20more\x20concrete\x20business\x20intent\x20so\x20the\x20primary\x20object\x20can\x20be\x20identified.';const b=['permission','treasury','allocation','guard','machine','service','order','progress','arb','reward','proof','repository','demand','contact','personal','payment'],d=a['puzzles']??{},e=b['filter'](f=>d[f]);for(const f of e){const g=d[f];if(!g)continue;const h=g['missing_dimensions']??[];if(h['length']===0x0)continue;const i=g['completeness'],j=i&&typeof i==='object'?i['next_step']:undefined;if(typeof j==='string'&&j['trim']())return'['+f+']\x20'+j;return'['+f+']\x20Complete\x20dimension'+(h['length']>0x1?'s':'')+'\x20'+h['join'](',\x20')+'\x20to\x20advance\x20the\x20puzzle.';}return'Continue\x20dialog\x20to\x20fill\x20remaining\x20pending\x20fields.';}
@@ -1,4 +1,4 @@
1
- import type { SemanticObjectGraph } from "./semantic-graph.js";
1
+ import type { Blueprint } from "../../composition/blueprint-view.js";
2
2
  import type { BusinessIntent } from "./intent-analyzer.js";
3
3
  import type { BusinessModuleId } from "../../extensions/business-modules.js";
4
4
  export type GameScenario = "merchant_may_deliver_late" | "merchant_may_abandon" | "customer_may_deny_acceptance" | "customer_may_false_claim" | "supplier_may_not_deliver";
@@ -40,4 +40,4 @@ export interface GameTheoryReport {
40
40
  summary: string;
41
41
  }
42
42
  export declare const GAME_THEORY_CONSTRAINTS: GameTheoryConstraint[];
43
- export declare function checkGameTheoryConstraints(graph: SemanticObjectGraph, intent: BusinessIntent): GameTheoryReport;
43
+ export declare function checkGameTheoryConstraints(graph: Blueprint, intent: BusinessIntent): GameTheoryReport;
@@ -1 +1 @@
1
- export const GAME_THEORY_CONSTRAINTS=[{'scenario':'merchant_may_deliver_late','conflict':'Merchant\x20incentive:\x20collect\x20payment\x20fast,\x20deliver\x20at\x20own\x20pace\x20(or\x20never).\x20User\x20bears\x20schedule\x20risk\x20with\x20no\x20leverage\x20once\x20funds\x20leave\x20their\x20wallet.','userProtection':{'mechanism':'Milestone\x20escrow\x20—\x20funds\x20locked\x20in\x20Order,\x20released\x20per\x20verified\x20milestone','object':'Order\x20+\x20Allocation','guard':'milestone\x20forward\x20guard\x20verifies\x20deliverable\x20before\x20release'},'merchantConstraint':{'requiredDeposit':!![],'timeoutPenalty':'compensation_fund\x20covers\x20refund\x20for\x20unstarted\x20milestones'},'evaluationMetric':'timeout_protection','mitigationSignals':[['edge:has_order_allocators','node:main_machine'],['module:milestone_escrow']],'mitigatingModules':['milestone_escrow','refund_guarantee'],'recommendation':'Adopt\x20milestone_escrow\x20module:\x20bind\x20order_allocators\x20+\x20Machine\x20so\x20funds\x20release\x20only\x20per\x20verified\x20milestone.\x20Add\x20compensation_fund\x20for\x20late-delivery\x20refunds.'},{'scenario':'merchant_may_abandon','conflict':'Merchant\x20incentive:\x20maximize\x20intake\x20then\x20abandon\x20the\x20service\x20(exit\x20scam).\x20User\x20has\x20no\x20recourse\x20without\x20locked\x20funds\x20or\x20deposit.','userProtection':{'mechanism':'Escrow\x20+\x20compensation\x20fund\x20—\x20user\x20refunds\x20from\x20on-chain\x20fund\x20even\x20if\x20merchant\x20vanishes','object':'Service.compensation_fund\x20+\x20Order','guard':'refund_guard\x20validates\x20claim\x20conditions'},'merchantConstraint':{'requiredDeposit':!![],'requiredArbitration':!![]},'evaluationMetric':'escrow_quality','mitigationSignals':[['edge:has_order_allocators','module:refund_guarantee'],['module:refund_guarantee','node:main_arbitration']],'mitigatingModules':['refund_guarantee','milestone_escrow','reputation_on_chain'],'recommendation':'Adopt\x20refund_guarantee\x20module:\x20compensation_fund_add\x20>\x200\x20with\x20refund_guard.\x20Escrow\x20via\x20order_allocators\x20prevents\x20merchant\x20from\x20touching\x20funds\x20before\x20delivery.'},{'scenario':'customer_may_deny_acceptance','conflict':'Customer\x20incentive:\x20withhold\x20acceptance\x20confirmation\x20to\x20delay\x20payment\x20indefinitely\x20while\x20using\x20the\x20deliverable.\x20Merchant\x27s\x20funds\x20stay\x20locked.','userProtection':{'mechanism':'Accept\x20timeout\x20—\x20after\x20N\x20days\x20without\x20response,\x20order\x20auto-advances\x20(adminUnhold)\x20and\x20merchant\x20gets\x20paid','object':'Machine\x20forward\x20+\x20Progress','guard':'time_guard\x20on\x20accept\x20forward'},'merchantConstraint':{'timeoutPenalty':'user\x20silence\x20past\x20timeout\x20=\x20implicit\x20acceptance'},'evaluationMetric':'timeout_protection','mitigationSignals':[['module:accept_timeout_protection'],['node:guard_accept_timeout_protection']],'mitigatingModules':['accept_timeout_protection'],'recommendation':'Adopt\x20accept_timeout_protection\x20module:\x20time_guard\x20on\x20the\x20accept\x20forward\x20(e.g.\x207\x20days)\x20+\x20PROGRESS_UNHOLD\x20permission\x20so\x20the\x20workflow\x20auto-advances\x20on\x20customer\x20silence.'},{'scenario':'customer_may_false_claim','conflict':'Customer\x20incentive:\x20claim\x20non-delivery\x20or\x20defect\x20to\x20obtain\x20refund\x20while\x20keeping\x20the\x20goods/service.\x20Merchant\x20loses\x20both\x20deliverable\x20and\x20payment.','userProtection':{'mechanism':'WIP\x20provenance\x20—\x20delivery\x20hash\x20committed\x20on-chain\x20before/at\x20delivery;\x20independent\x20arbitration\x20verifies\x20evidence','object':'Repository\x20+\x20Arbitration','guard':'Guard\x20compares\x20proof.signer/proof.time\x20against\x20committed\x20WIP\x20hash'},'merchantConstraint':{'requiredProof':'wip_hash\x20committed\x20to\x20Repository\x20before\x20fund\x20release','requiredArbitration':!![]},'evaluationMetric':'proof_integrity','mitigationSignals':[['node:main_repository','node:main_arbitration'],['module:wip_provenance','node:main_arbitration']],'mitigatingModules':['wip_provenance','independent_arbitration','damage_attestation'],'recommendation':'Adopt\x20wip_provenance\x20+\x20independent_arbitration\x20modules:\x20Repository\x20stores\x20WIP\x20hashes\x20as\x20tamper-proof\x20delivery\x20evidence;\x20Arbitration\x20(independent\x20Permission)\x20resolves\x20false\x20claims\x20against\x20on-chain\x20proof.'},{'scenario':'supplier_may_not_deliver','conflict':'Supplier\x20incentive:\x20accept\x20sub-order\x20payment\x20terms\x20then\x20under-deliver,\x20leaving\x20the\x20merchant\x20liable\x20to\x20the\x20end\x20customer.\x20Multi-party\x20opacity\x20hides\x20the\x20failure\x20point.','userProtection':{'mechanism':'Supplier\x20visibility\x20—\x20Demand\x20+\x20sub-order\x20flow\x20with\x20multi-tier\x20Allocation;\x20each\x20tier\x20paid\x20only\x20on\x20its\x20own\x20verified\x20delivery','object':'Demand\x20+\x20Allocation\x20(multi-tier)','guard':'per-tier\x20release\x20guard'},'merchantConstraint':{'requiredProof':'sub-delivery\x20proof\x20per\x20Allocation\x20tier'},'evaluationMetric':'supplier_visibility','mitigationSignals':[['module:supplier_collaboration'],['module:multi_tier_allocation']],'mitigatingModules':['supplier_collaboration','multi_tier_allocation'],'recommendation':'Adopt\x20supplier_collaboration\x20module:\x20publish\x20Demand\x20referencing\x20the\x20main\x20Service,\x20split\x20Allocation\x20across\x20tiers\x20so\x20each\x20supplier\x20is\x20paid\x20only\x20for\x20verified\x20sub-delivery.'}];function evalSignal(a,b,c){const [d,e]=a['split'](':',0x2);switch(d){case'node':return b['nodes']['some'](f=>f['id']===e);case'edge':return b['edges']['some'](f=>f['relation']===e);case'module':return b['adoptedModules']['includes'](e);case'type':return b['nodes']['some'](f=>f['type']===e);case'trust':{const f=c['trust'];return f[e]===!![]||typeof f[e]==='string'&&f[e]!=='none';}default:return![];}}export function checkGameTheoryConstraints(a,b){const d=[];for(const h of GAME_THEORY_CONSTRAINTS){let i=null,j=[],k=-0x1;for(const l of h['mitigationSignals']){const m=l['filter'](o=>evalSignal(o,a,b));if(m['length']===l['length']){i=l;break;}const n=m['length']/l['length'];m['length']>0x0&&n>k&&(k=n,j=m);}d['push']({'scenario':h['scenario'],'conflict':h['conflict'],'covered':i!==null,'matchedSignals':i??[],'partialSignals':i?[]:j,'userProtection':h['userProtection']['mechanism']+'\x20('+h['userProtection']['object']+(h['userProtection']['guard']?',\x20guard:\x20'+h['userProtection']['guard']:'')+')','evaluationMetric':h['evaluationMetric'],'recommendation':i?undefined:h['recommendation']});}const e=d['filter'](o=>o['covered']),f=d['filter'](o=>!o['covered']),g=[];return a['edges']['some'](o=>o['relation']==='has_order_allocators')&&g['push']('Milestone\x20escrow:\x20funds\x20locked\x20in\x20Order,\x20released\x20per\x20verified\x20milestone\x20—\x20merchant\x20paid\x20for\x20delivery,\x20user\x20pays\x20for\x20value'),a['adoptedModules']['includes']('accept_timeout_protection')&&g['push']('Accept\x20timeout:\x20customer\x20silence\x20past\x20N\x20days\x20=\x20implicit\x20acceptance\x20—\x20merchant\x20protected\x20from\x20payment\x20stalling'),a['nodes']['some'](o=>o['id']==='main_repository')&&g['push']('WIP\x20provenance:\x20delivery\x20hash\x20on-chain\x20—\x20false\x20claims\x20verifiable\x20against\x20tamper-proof\x20evidence'),a['nodes']['some'](o=>o['id']==='main_arbitration')&&g['push']('Micro-arbitration:\x20Guard-weighted\x20voting\x20with\x20independent\x20Permission\x20—\x20low-cost\x20dispute\x20resolution\x20without\x20platform\x20fees'),a['adoptedModules']['includes']('reputation_on_chain')&&g['push']('On-chain\x20reputation:\x20both\x20sides\x27\x20behavior\x20permanently\x20recorded\x20—\x20future\x20transactions\x20price\x20the\x20risk'),{'results':d,'coveredCount':e['length'],'totalCount':d['length'],'exposedScenarios':f['map'](o=>o['scenario']),'wowAlignments':g,'summary':f['length']===0x0?'All\x20'+d['length']+'\x20adversarial\x20scenarios\x20have\x20on-chain\x20mitigations.':f['length']+'/'+d['length']+'\x20adversarial\x20scenarios\x20EXPOSED:\x20'+f['map'](o=>o['scenario'])['join'](',\x20')+'.\x20Apply\x20the\x20recommendations\x20to\x20align\x20incentives.'};}
1
+ export const GAME_THEORY_CONSTRAINTS=[{'scenario':'merchant_may_deliver_late','conflict':'Merchant\x20incentive:\x20collect\x20payment\x20fast,\x20deliver\x20at\x20own\x20pace\x20(or\x20never).\x20User\x20bears\x20schedule\x20risk\x20with\x20no\x20leverage\x20once\x20funds\x20leave\x20their\x20wallet.','userProtection':{'mechanism':'Milestone\x20escrow\x20—\x20funds\x20locked\x20in\x20Order,\x20released\x20per\x20verified\x20milestone','object':'Order\x20+\x20Allocation','guard':'milestone\x20forward\x20guard\x20verifies\x20deliverable\x20before\x20release'},'merchantConstraint':{'requiredDeposit':!![],'timeoutPenalty':'compensation_fund\x20covers\x20refund\x20for\x20unstarted\x20milestones'},'evaluationMetric':'timeout_protection','mitigationSignals':[['edge:has_order_allocators','node:main_machine'],['module:milestone_escrow']],'mitigatingModules':['milestone_escrow','refund_guarantee'],'recommendation':'Adopt\x20milestone_escrow\x20module:\x20bind\x20order_allocators\x20+\x20Machine\x20so\x20funds\x20release\x20only\x20per\x20verified\x20milestone.\x20Add\x20compensation_fund\x20for\x20late-delivery\x20refunds.'},{'scenario':'merchant_may_abandon','conflict':'Merchant\x20incentive:\x20maximize\x20intake\x20then\x20abandon\x20the\x20service\x20(exit\x20scam).\x20User\x20has\x20no\x20recourse\x20without\x20locked\x20funds\x20or\x20deposit.','userProtection':{'mechanism':'Escrow\x20+\x20compensation\x20fund\x20—\x20user\x20refunds\x20from\x20on-chain\x20fund\x20even\x20if\x20merchant\x20vanishes','object':'Service.compensation_fund\x20+\x20Order','guard':'refund_guard\x20validates\x20claim\x20conditions'},'merchantConstraint':{'requiredDeposit':!![],'requiredArbitration':!![]},'evaluationMetric':'escrow_quality','mitigationSignals':[['edge:has_order_allocators','module:refund_guarantee'],['module:refund_guarantee','node:main_arbitration']],'mitigatingModules':['refund_guarantee','milestone_escrow','reputation_on_chain'],'recommendation':'Adopt\x20refund_guarantee\x20module:\x20compensation_fund_add\x20>\x200\x20with\x20refund_guard.\x20Escrow\x20via\x20order_allocators\x20prevents\x20merchant\x20from\x20touching\x20funds\x20before\x20delivery.'},{'scenario':'customer_may_deny_acceptance','conflict':'Customer\x20incentive:\x20withhold\x20acceptance\x20confirmation\x20to\x20delay\x20payment\x20indefinitely\x20while\x20using\x20the\x20deliverable.\x20Merchant\x27s\x20funds\x20stay\x20locked.','userProtection':{'mechanism':'Accept\x20timeout\x20—\x20after\x20N\x20days\x20without\x20response,\x20order\x20auto-advances\x20(adminUnhold)\x20and\x20merchant\x20gets\x20paid','object':'Machine\x20forward\x20+\x20Progress','guard':'time_guard\x20on\x20accept\x20forward'},'merchantConstraint':{'timeoutPenalty':'user\x20silence\x20past\x20timeout\x20=\x20implicit\x20acceptance'},'evaluationMetric':'timeout_protection','mitigationSignals':[['module:accept_timeout_protection'],['node:guard_accept_timeout_protection']],'mitigatingModules':['accept_timeout_protection'],'recommendation':'Adopt\x20accept_timeout_protection\x20module:\x20time_guard\x20on\x20the\x20accept\x20forward\x20(e.g.\x207\x20days)\x20+\x20PROGRESS_UNHOLD\x20permission\x20so\x20the\x20workflow\x20auto-advances\x20on\x20customer\x20silence.'},{'scenario':'customer_may_false_claim','conflict':'Customer\x20incentive:\x20claim\x20non-delivery\x20or\x20defect\x20to\x20obtain\x20refund\x20while\x20keeping\x20the\x20goods/service.\x20Merchant\x20loses\x20both\x20deliverable\x20and\x20payment.','userProtection':{'mechanism':'WIP\x20provenance\x20—\x20delivery\x20hash\x20committed\x20on-chain\x20before/at\x20delivery;\x20independent\x20arbitration\x20verifies\x20evidence','object':'Repository\x20+\x20Arbitration','guard':'Guard\x20compares\x20proof.signer/proof.time\x20against\x20committed\x20WIP\x20hash'},'merchantConstraint':{'requiredProof':'wip_hash\x20committed\x20to\x20Repository\x20before\x20fund\x20release','requiredArbitration':!![]},'evaluationMetric':'proof_integrity','mitigationSignals':[['node:main_repository','node:main_arbitration'],['module:wip_provenance','node:main_arbitration']],'mitigatingModules':['wip_provenance','independent_arbitration','damage_attestation'],'recommendation':'Adopt\x20wip_provenance\x20+\x20independent_arbitration\x20modules:\x20Repository\x20stores\x20WIP\x20hashes\x20as\x20tamper-proof\x20delivery\x20evidence;\x20Arbitration\x20(independent\x20Permission)\x20resolves\x20false\x20claims\x20against\x20on-chain\x20proof.'},{'scenario':'supplier_may_not_deliver','conflict':'Supplier\x20incentive:\x20accept\x20sub-order\x20payment\x20terms\x20then\x20under-deliver,\x20leaving\x20the\x20merchant\x20liable\x20to\x20the\x20end\x20customer.\x20Multi-party\x20opacity\x20hides\x20the\x20failure\x20point.','userProtection':{'mechanism':'Supplier\x20visibility\x20—\x20Demand\x20+\x20sub-order\x20flow\x20with\x20multi-tier\x20Allocation;\x20each\x20tier\x20paid\x20only\x20on\x20its\x20own\x20verified\x20delivery','object':'Demand\x20+\x20Allocation\x20(multi-tier)','guard':'per-tier\x20release\x20guard'},'merchantConstraint':{'requiredProof':'sub-delivery\x20proof\x20per\x20Allocation\x20tier'},'evaluationMetric':'supplier_visibility','mitigationSignals':[['module:supplier_collaboration'],['module:multi_tier_allocation']],'mitigatingModules':['supplier_collaboration','multi_tier_allocation'],'recommendation':'Adopt\x20supplier_collaboration\x20module:\x20publish\x20Demand\x20referencing\x20the\x20main\x20Service,\x20split\x20Allocation\x20across\x20tiers\x20so\x20each\x20supplier\x20is\x20paid\x20only\x20for\x20verified\x20sub-delivery.'}];function evalSignal(a,b,c){const [d,e]=a['split'](':',0x2);switch(d){case'node':return b['nodes']['some'](f=>f['id']===e||f['id']===e['replace'](/^main_/,''));case'edge':return b['edges']['some'](f=>f['relation']===e);case'module':return b['adoptedModules']['includes'](e);case'type':return b['nodes']['some'](f=>f['type']===e);case'trust':{const f=c['trust'];return f[e]===!![]||typeof f[e]==='string'&&f[e]!=='none';}default:return![];}}export function checkGameTheoryConstraints(a,b){const d=[];for(const h of GAME_THEORY_CONSTRAINTS){let i=null,j=[],k=-0x1;for(const l of h['mitigationSignals']){const m=l['filter'](o=>evalSignal(o,a,b));if(m['length']===l['length']){i=l;break;}const n=m['length']/l['length'];m['length']>0x0&&n>k&&(k=n,j=m);}d['push']({'scenario':h['scenario'],'conflict':h['conflict'],'covered':i!==null,'matchedSignals':i??[],'partialSignals':i?[]:j,'userProtection':h['userProtection']['mechanism']+'\x20('+h['userProtection']['object']+(h['userProtection']['guard']?',\x20guard:\x20'+h['userProtection']['guard']:'')+')','evaluationMetric':h['evaluationMetric'],'recommendation':i?undefined:h['recommendation']});}const e=d['filter'](o=>o['covered']),f=d['filter'](o=>!o['covered']),g=[];return a['edges']['some'](o=>o['relation']==='has_order_allocators')&&g['push']('Milestone\x20escrow:\x20funds\x20locked\x20in\x20Order,\x20released\x20per\x20verified\x20milestone\x20—\x20merchant\x20paid\x20for\x20delivery,\x20user\x20pays\x20for\x20value'),a['adoptedModules']['includes']('accept_timeout_protection')&&g['push']('Accept\x20timeout:\x20customer\x20silence\x20past\x20N\x20days\x20=\x20implicit\x20acceptance\x20—\x20merchant\x20protected\x20from\x20payment\x20stalling'),a['nodes']['some'](o=>o['id']==='repository')&&g['push']('WIP\x20provenance:\x20delivery\x20hash\x20on-chain\x20—\x20false\x20claims\x20verifiable\x20against\x20tamper-proof\x20evidence'),a['nodes']['some'](o=>o['id']==='arbitration')&&g['push']('Micro-arbitration:\x20Guard-weighted\x20voting\x20with\x20independent\x20Permission\x20—\x20low-cost\x20dispute\x20resolution\x20without\x20platform\x20fees'),a['adoptedModules']['includes']('reputation_on_chain')&&g['push']('On-chain\x20reputation:\x20both\x20sides\x27\x20behavior\x20permanently\x20recorded\x20—\x20future\x20transactions\x20price\x20the\x20risk'),{'results':d,'coveredCount':e['length'],'totalCount':d['length'],'exposedScenarios':f['map'](o=>o['scenario']),'wowAlignments':g,'summary':f['length']===0x0?'All\x20'+d['length']+'\x20adversarial\x20scenarios\x20have\x20on-chain\x20mitigations.':f['length']+'/'+d['length']+'\x20adversarial\x20scenarios\x20EXPOSED:\x20'+f['map'](o=>o['scenario'])['join'](',\x20')+'.\x20Apply\x20the\x20recommendations\x20to\x20align\x20incentives.'};}
@@ -1 +1 @@
1
- import{Config,LocalMark,query_objects,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{resolveAddress as a319a}from'../../tools/handlers/name-resolution.js';import{fetchMachineNodes,buildMachineGraph}from'./machine-nodes.js';import{batchQueryObjectsByIds,fetchObjectLinkerTx,ringWindowSaturated}from'../../graph/onchain/sdk-batch.js';export async function handleMachinePanorama(a){const b=a['object_address'];if(!b)throw new Error('\x27object_address\x27\x20is\x20required\x20for\x20machine_panorama');let c=a['context_network']??undefined;const d=[];let f=await a319a(b,'machine'),g=null;try{if(!c)c=await Config['Instance']()['network_get']();const x=await query_objects({'objects':[f],'network':c});g=x?.['objects']?.[0x0]??null;if(!g&&a['context_network']){const y=await Config['Instance']()['network_get']();if(y&&y!==c){const z=await query_objects({'objects':[f],'network':y,'no_cache':!![]}),A=z?.['objects']?.[0x0]??null;A&&(g=A,c=y);}}}catch(B){throw new Error('Failed\x20to\x20query\x20Machine\x20'+f+'\x20on\x20'+c+':\x20'+(''+(B instanceof Error?B['message']:String(B))));}if(!g)throw new Error('Machine\x20'+f+'\x20not\x20found\x20on\x20'+c+'.\x20It\x20may\x20not\x20exist\x20on\x20this\x20network.');f=g['object']??f;let h=null,j=[];try{const C=await LocalMark['Instance']()['list']({'address':f});C['length']>0x0&&(h=C[0x0]['name']??null,j=(C[0x0]['tags']??[])['map'](D=>String(D)));}catch{d['push']('head:\x20LocalMark\x20lookup\x20failed');}let k={'nodes':[],'edges':[]};try{const D=await fetchMachineNodes(f,c,!![]);k=buildMachineGraph(D);}catch{d['push']('graph:\x20node\x20fetch\x20failed\x20(non-blocking)');}if(typeof g['permission']==='string'&&g['permission'])try{const E=await query_objects({'objects':[g['permission']],'network':c}),F=E?.['objects']?.[0x0]??null,G=Array['isArray'](F?.['perm_remark'])?F['perm_remark']:Array['isArray'](F?.['remark'])?F['remark']:[],H=G['map'](I=>({'index':typeof I?.['index']==='number'?I['index']:parseInt(I?.['index'],0xa),'remark':typeof I?.['remark']==='string'?I['remark']:''}))['filter'](I=>Number['isFinite'](I['index']));k['permission']={'address':g['permission'],'remarks':H};}catch{d['push']('graph:\x20permission\x20read\x20failed\x20(non-blocking)');}const l=[];let m=0x0,n=null,p=null,q=0x0,s=![],u=[];try{const I=await fetchObjectLinkerTx(f,c,!![]),J=I?.['items']??[];s=ringWindowSaturated(J['length']);const K=new Map();for(const R of J){const S=typeof R?.['who']==='string'?R['who']['toLowerCase']():'';if(!S||S==='0x0')continue;if(!objectTypeFromAddress(S))continue;const T=typeof R?.['time']==='number'?R['time']:null,U=K['get'](S);K['set'](S,U==null?T:T==null?U:Math['max'](U,T));}q=K['size'];const L=new Map();for(const [V,W]of K){const X=String(objectTypeFromAddress(V)),Y=L['get'](X)??[];Y['push']({'address':V,'time':W}),L['set'](X,Y);}for(const Z of L['values']()){Z['sort']((a0,a1)=>(a1['time']??0x0)-(a0['time']??0x0));}const M=['Progress','Allocation','Payment','Guard'];u=[];for(const a0 of M){const a1=L['get'](a0);a1&&a1['length']>0x0&&(u['push']({'label':a0,'items':a1}),L['delete'](a0));}for(const [a2,a3]of L){if(a3['length']>0x0)u['push']({'label':a2,'items':a3});}const N=J['filter'](a4=>objectTypeFromAddress(a4['who'])===ObjectType['Progress']);m=N['length'];for(const a4 of N){if(typeof a4?.['time']==='number'){if(n===null||a4['time']<n)n=a4['time'];if(p===null||a4['time']>p)p=a4['time'];}}const O=N['slice'](-0x3)['reverse'](),P=O['map'](a5=>a5['who']),Q=new Map();if(P['length']>0x0)try{const a5=await batchQueryObjectsByIds(P,c,!![]);for(const a6 of a5){if(a6?.['object'])Q['set'](a6['object'],a6);}}catch{d['push']('progresses:\x20detail\x20fetch\x20failed');}for(const a7 of O){const a8=typeof a7?.['who']==='string'?a7['who']:'';if(!a8)continue;const a9=Q['get'](a8);l['push']({'progress':a8,'name':null,'current':a9?.['current']??null,'task':a9?.['task']??null,'history_count':typeof a9?.['history_count']==='number'?a9['history_count']:null,'current_time':typeof a9?.['current_time']==='number'?a9['current_time']:null,'created_at':typeof a7?.['time']==='number'?a7['time']:null});}}catch{d['push']('progresses:\x20global-table\x20lookup\x20failed\x20(non-blocking)');}const w='Analyze\x20ALL\x20workflow\x20progresses\x20of\x20Machine\x20'+f+'\x20('+c+')\x20one\x20by\x20one,\x20newest\x20first.\x20'+('The\x20progresses\x20live\x20in\x20the\x20machine\x27s\x20FIFO\x20tx-linker\x20window\x20holding\x20at\x20most\x205200\x20newest\x20entries\x20—\x20the\x20retained\x20count\x20is\x20a\x20lower\x20bound\x20when\x20the\x20window\x20is\x20saturated\x20(currently\x20'+m+(s?',\x20saturated':'')+').\x20')+'For\x20each\x20progress\x20call\x20object_panorama\x20with\x20the\x20progress\x27s\x20FULL\x200x\x20address\x20(collect\x20the\x20addresses\x20from\x20the\x20same\x20reverse-index\x20source;\x20work\x20newest-first)\x20and\x20render\x20ONE\x20table\x20row\x20per\x20progress:\x20'+'progress\x20address\x20chip\x20(first\x20column)\x20|\x20current\x20node\x20|\x20task\x20|\x20history\x20events\x20|\x20last\x20activity\x20(local\x20date)\x20|\x20registered\x20(local\x20date).\x20'+'Close\x20with\x20the\x203\x20most\x20valuable\x20patterns\x20across\x20the\x20rows\x20(stuck\x20nodes,\x20age\x20of\x20active\x20progresses,\x20throughput).\x20Progresses\x20only\x20—\x20do\x20not\x20re-analyze\x20the\x20Machine\x20graph\x20itself.';return{'action':'machine_panorama','machineAddress':f,'network':String(c),'head':{'name':h,'tags':j,'description':typeof g['description']==='string'?g['description']:null,'published':typeof g['bPublished']==='boolean'?g['bPublished']:null,'paused':typeof g['bPaused']==='boolean'?g['bPaused']:null},'fields':{'permission':g['permission']??null,'um':g['um']??null,'node_count':k['nodes']['length']>0x0?k['nodes']['length']:typeof g['node_count']==='number'?g['node_count']+0x1:null,'onchain_table_node_count':typeof g['node_count']==='number'?g['node_count']:k['nodes']['length']>0x0?k['nodes']['length']-0x1:null,'consensus_repositories':Array['isArray'](g['consensus_repositories'])?g['consensus_repositories']:[]},'graph':k,'progresses':{'count':m,'window_saturated':s,'preview_truncated':m>l['length'],'stats':{'first_created_ms':n,'last_created_ms':p},...m>l['length']?{'drilldown':{'total_count':m,'analyzed_count':l['length'],'prompt':w}}:{},'items':l},'related':{'count':q,'window_saturated':s,'groups':u},'data_gaps':d};}
1
+ import{Config,LocalMark,query_objects,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{resolveAddress as a325a}from'../../tools/handlers/name-resolution.js';import{fetchMachineNodes,buildMachineGraph}from'./machine-nodes.js';import{batchQueryObjectsByIds,fetchObjectLinkerTx,ringWindowSaturated}from'../../graph/onchain/sdk-batch.js';export async function handleMachinePanorama(a){const b=a['object_address'];if(!b)throw new Error('\x27object_address\x27\x20is\x20required\x20for\x20machine_panorama');let c=a['context_network']??undefined;const d=[];let f=await a325a(b,'machine'),g=null;try{if(!c)c=await Config['Instance']()['network_get']();const x=await query_objects({'objects':[f],'network':c});g=x?.['objects']?.[0x0]??null;if(!g&&a['context_network']){const y=await Config['Instance']()['network_get']();if(y&&y!==c){const z=await query_objects({'objects':[f],'network':y,'no_cache':!![]}),A=z?.['objects']?.[0x0]??null;A&&(g=A,c=y);}}}catch(B){throw new Error('Failed\x20to\x20query\x20Machine\x20'+f+'\x20on\x20'+c+':\x20'+(''+(B instanceof Error?B['message']:String(B))));}if(!g)throw new Error('Machine\x20'+f+'\x20not\x20found\x20on\x20'+c+'.\x20It\x20may\x20not\x20exist\x20on\x20this\x20network.');f=g['object']??f;let h=null,j=[];try{const C=await LocalMark['Instance']()['list']({'address':f});C['length']>0x0&&(h=C[0x0]['name']??null,j=(C[0x0]['tags']??[])['map'](D=>String(D)));}catch{d['push']('head:\x20LocalMark\x20lookup\x20failed');}let k={'nodes':[],'edges':[]};try{const D=await fetchMachineNodes(f,c,!![]);k=buildMachineGraph(D);}catch{d['push']('graph:\x20node\x20fetch\x20failed\x20(non-blocking)');}if(typeof g['permission']==='string'&&g['permission'])try{const E=await query_objects({'objects':[g['permission']],'network':c}),F=E?.['objects']?.[0x0]??null,G=Array['isArray'](F?.['perm_remark'])?F['perm_remark']:Array['isArray'](F?.['remark'])?F['remark']:[],H=G['map'](I=>({'index':typeof I?.['index']==='number'?I['index']:parseInt(I?.['index'],0xa),'remark':typeof I?.['remark']==='string'?I['remark']:''}))['filter'](I=>Number['isFinite'](I['index']));k['permission']={'address':g['permission'],'remarks':H};}catch{d['push']('graph:\x20permission\x20read\x20failed\x20(non-blocking)');}const l=[];let m=0x0,n=null,p=null,q=0x0,s=![],u=[];try{const I=await fetchObjectLinkerTx(f,c,!![]),J=I?.['items']??[];s=ringWindowSaturated(J['length']);const K=new Map();for(const R of J){const S=typeof R?.['who']==='string'?R['who']['toLowerCase']():'';if(!S||S==='0x0')continue;if(!objectTypeFromAddress(S))continue;const T=typeof R?.['time']==='number'?R['time']:null,U=K['get'](S);K['set'](S,U==null?T:T==null?U:Math['max'](U,T));}q=K['size'];const L=new Map();for(const [V,W]of K){const X=String(objectTypeFromAddress(V)),Y=L['get'](X)??[];Y['push']({'address':V,'time':W}),L['set'](X,Y);}for(const Z of L['values']()){Z['sort']((a0,a1)=>(a1['time']??0x0)-(a0['time']??0x0));}const M=['Progress','Allocation','Payment','Guard'];u=[];for(const a0 of M){const a1=L['get'](a0);a1&&a1['length']>0x0&&(u['push']({'label':a0,'items':a1}),L['delete'](a0));}for(const [a2,a3]of L){if(a3['length']>0x0)u['push']({'label':a2,'items':a3});}const N=J['filter'](a4=>objectTypeFromAddress(a4['who'])===ObjectType['Progress']);m=N['length'];for(const a4 of N){if(typeof a4?.['time']==='number'){if(n===null||a4['time']<n)n=a4['time'];if(p===null||a4['time']>p)p=a4['time'];}}const O=N['slice'](-0x3)['reverse'](),P=O['map'](a5=>a5['who']),Q=new Map();if(P['length']>0x0)try{const a5=await batchQueryObjectsByIds(P,c,!![]);for(const a6 of a5){if(a6?.['object'])Q['set'](a6['object'],a6);}}catch{d['push']('progresses:\x20detail\x20fetch\x20failed');}for(const a7 of O){const a8=typeof a7?.['who']==='string'?a7['who']:'';if(!a8)continue;const a9=Q['get'](a8);l['push']({'progress':a8,'name':null,'current':a9?.['current']??null,'task':a9?.['task']??null,'history_count':typeof a9?.['history_count']==='number'?a9['history_count']:null,'current_time':typeof a9?.['current_time']==='number'?a9['current_time']:null,'created_at':typeof a7?.['time']==='number'?a7['time']:null});}}catch{d['push']('progresses:\x20global-table\x20lookup\x20failed\x20(non-blocking)');}const w='Analyze\x20ALL\x20workflow\x20progresses\x20of\x20Machine\x20'+f+'\x20('+c+')\x20one\x20by\x20one,\x20newest\x20first.\x20'+('The\x20progresses\x20live\x20in\x20the\x20machine\x27s\x20FIFO\x20tx-linker\x20window\x20holding\x20at\x20most\x205200\x20newest\x20entries\x20—\x20the\x20retained\x20count\x20is\x20a\x20lower\x20bound\x20when\x20the\x20window\x20is\x20saturated\x20(currently\x20'+m+(s?',\x20saturated':'')+').\x20')+'For\x20each\x20progress\x20call\x20object_panorama\x20with\x20the\x20progress\x27s\x20FULL\x200x\x20address\x20(collect\x20the\x20addresses\x20from\x20the\x20same\x20reverse-index\x20source;\x20work\x20newest-first)\x20and\x20render\x20ONE\x20table\x20row\x20per\x20progress:\x20'+'progress\x20address\x20chip\x20(first\x20column)\x20|\x20current\x20node\x20|\x20task\x20|\x20history\x20events\x20|\x20last\x20activity\x20(local\x20date)\x20|\x20registered\x20(local\x20date).\x20'+'Close\x20with\x20the\x203\x20most\x20valuable\x20patterns\x20across\x20the\x20rows\x20(stuck\x20nodes,\x20age\x20of\x20active\x20progresses,\x20throughput).\x20Progresses\x20only\x20—\x20do\x20not\x20re-analyze\x20the\x20Machine\x20graph\x20itself.';return{'action':'machine_panorama','machineAddress':f,'network':String(c),'head':{'name':h,'tags':j,'description':typeof g['description']==='string'?g['description']:null,'published':typeof g['bPublished']==='boolean'?g['bPublished']:null,'paused':typeof g['bPaused']==='boolean'?g['bPaused']:null},'fields':{'permission':g['permission']??null,'um':g['um']??null,'node_count':k['nodes']['length']>0x0?k['nodes']['length']:typeof g['node_count']==='number'?g['node_count']+0x1:null,'onchain_table_node_count':typeof g['node_count']==='number'?g['node_count']:k['nodes']['length']>0x0?k['nodes']['length']-0x1:null,'consensus_repositories':Array['isArray'](g['consensus_repositories'])?g['consensus_repositories']:[]},'graph':k,'progresses':{'count':m,'window_saturated':s,'preview_truncated':m>l['length'],'stats':{'first_created_ms':n,'last_created_ms':p},...m>l['length']?{'drilldown':{'total_count':m,'analyzed_count':l['length'],'prompt':w}}:{},'items':l},'related':{'count':q,'window_saturated':s,'groups':u},'data_gaps':d};}
@@ -1,6 +1,6 @@
1
1
  import { type BusinessIntent, type DeliverableDefinition, type PaymentIntent, type TrustIntent } from "./intent-analyzer.js";
2
2
  import { type BusinessModuleId } from "../../extensions/business-modules.js";
3
- import type { IndustryMode } from "../../extensions/index.js";
3
+ import type { IndustryTemplate } from "../../knowledge/template-loader.js";
4
4
  export interface GuideState {
5
5
  intent_text: string;
6
6
  confirmed_industry?: string;
@@ -9,6 +9,7 @@ export interface GuideState {
9
9
  payment_override?: Partial<PaymentIntent>;
10
10
  trust_override?: Partial<TrustIntent>;
11
11
  adopted_module_ids?: BusinessModuleId[];
12
+ guard_resolutions?: Record<string, unknown>;
12
13
  }
13
14
  export interface MerchantGuideInput {
14
15
  intent?: string;
@@ -20,6 +21,7 @@ export interface MerchantGuideInput {
20
21
  payment_override?: Record<string, unknown>;
21
22
  trust_override?: Record<string, unknown>;
22
23
  adopted_module_ids?: string[];
24
+ guard_resolutions?: Record<string, unknown>;
23
25
  };
24
26
  guide_confirm?: {
25
27
  industry?: string;
@@ -28,8 +30,9 @@ export interface MerchantGuideInput {
28
30
  payment?: Record<string, unknown>;
29
31
  trust?: Record<string, unknown>;
30
32
  adopted_module_ids?: string[];
33
+ guard_resolutions?: Record<string, unknown>;
31
34
  };
32
- mode_prior_override?: IndustryMode;
35
+ template_override?: IndustryTemplate;
33
36
  name_base?: string;
34
37
  }
35
38
  export interface PostDeployStep {
@@ -63,10 +66,43 @@ export declare function handleMerchantGuide(v: MerchantGuideInput): Promise<{
63
66
  warnings: string[];
64
67
  next_action: string;
65
68
  } | {
69
+ warnings: string[];
70
+ next_action: string;
71
+ plan: import("../../composition/plan.js").Plan;
72
+ audit: {
73
+ issues: import("../../composition/plan.js").PlanIssue[];
74
+ findings: import("../../config/rule-engine.js").RuleBookFinding[];
75
+ blocking: boolean;
76
+ score: number;
77
+ };
78
+ reflux: {
79
+ applied: import("../../composition/reflux.js").PlanPatch[];
80
+ blocks: import("../../composition/reflux.js").RefluxBlock[];
81
+ iterations: number;
82
+ };
83
+ pending_guard_designs?: {
84
+ how_to_resolve: string;
85
+ suggested_templates?: {
86
+ template_id: string;
87
+ name: string;
88
+ parameters: {
89
+ description: string;
90
+ default?: string | undefined;
91
+ name: string;
92
+ required: boolean;
93
+ }[];
94
+ }[] | undefined;
95
+ key_queries?: string[] | undefined;
96
+ logic_summary?: string | undefined;
97
+ key: string;
98
+ template_id: string;
99
+ host: "reward" | "service" | "arbitration" | "machine" | "repository";
100
+ purpose: string;
101
+ }[] | undefined;
66
102
  blueprint: {
67
103
  nodes: {
68
104
  id: string;
69
- type: import("./namespace.js").ProjectObjectType;
105
+ type: string;
70
106
  purpose: string;
71
107
  }[];
72
108
  edges: {
@@ -76,11 +112,18 @@ export declare function handleMerchantGuide(v: MerchantGuideInput): Promise<{
76
112
  required: boolean;
77
113
  }[];
78
114
  };
79
- evaluation_preview: import("./semantic-graph.js").EvaluationPreview | undefined;
115
+ evaluation_preview: {
116
+ estimatedRiskScore: number;
117
+ estimatedTrustScore: number;
118
+ estimatedCompletenessScore: number;
119
+ keyRisks: string[];
120
+ strengths: string[];
121
+ moduleBoosts: {};
122
+ };
80
123
  graph_validation: {
81
124
  valid: boolean;
82
125
  hard_violations: {
83
- id: string;
126
+ id: "PLAN_DUP_STEP" | "PLAN_UNKNOWN_KIND" | "PLAN_REF_UNKNOWN" | "PLAN_REF_FORWARD" | "PLAN_PUBLISH_TARGET" | "PLAN_PROSE_GUARD" | "PLAN_MACHINE_NODES" | "PLAN_REQUIRES_UNKNOWN";
84
127
  description: string;
85
128
  fix: string;
86
129
  }[];
@@ -97,11 +140,15 @@ export declare function handleMerchantGuide(v: MerchantGuideInput): Promise<{
97
140
  reason: string | undefined;
98
141
  estimated_score_boost: number;
99
142
  }[];
100
- blocking_issues: {
143
+ blocking_issues: ({
101
144
  module: BusinessModuleId;
102
145
  missing_constraints: string[] | undefined;
103
146
  fix: string | undefined;
104
- }[];
147
+ } | {
148
+ module: string;
149
+ missing_constraints: string[];
150
+ fix: string;
151
+ })[];
105
152
  deploy_time_checks: string[];
106
153
  recipient_design_guidance: {
107
154
  id: "entity" | "signer" | "submitted_object" | "constrained_submission";
@@ -145,8 +192,6 @@ export declare function handleMerchantGuide(v: MerchantGuideInput): Promise<{
145
192
  };
146
193
  creation_plan: CreationPlanEntry[];
147
194
  post_deploy_steps: PostDeployStep[];
148
- warnings: string[];
149
- next_action: string;
150
195
  time_anchor_instructions?: string[] | undefined;
151
196
  action: "merchant_guide";
152
197
  current_step: number;
@@ -159,6 +204,7 @@ export declare function handleMerchantGuide(v: MerchantGuideInput): Promise<{
159
204
  deliverables?: DeliverableDefinition[];
160
205
  payment_override?: Partial<PaymentIntent>;
161
206
  trust_override?: Partial<TrustIntent>;
207
+ guard_resolutions?: Record<string, unknown>;
162
208
  };
163
209
  intent: {
164
210
  intent_type: import("./intent-analyzer.js").BusinessIntentType;
@@ -186,8 +232,8 @@ export declare function handleMerchantGuide(v: MerchantGuideInput): Promise<{
186
232
  time_anchors?: Record<string, string> | undefined;
187
233
  name: string;
188
234
  display_name: string;
189
- source: import("../../knowledge/industry-registry.js").IndustrySource;
190
- risk_appetite: import("../../extensions/types.js").RiskAppetite;
235
+ source: "builtin" | "custom";
236
+ risk_appetite: "medium";
191
237
  key_risk: string;
192
238
  machine_shape: {
193
239
  semantic_role?: "active" | "draft" | "delivered" | "final" | "cancelled" | undefined;
@@ -200,8 +246,28 @@ export declare function handleMerchantGuide(v: MerchantGuideInput): Promise<{
200
246
  host: "reward" | "service" | "arbitration" | "machine" | "repository";
201
247
  purpose: string;
202
248
  }[];
203
- allocator: import("../../knowledge/scenario-modes.js").ModeAllocatorStrategy;
204
- risk_constraints: import("../../extensions/types.js").ModeRiskConstraints;
249
+ allocator: {
250
+ recipient: "fixed" | "entity" | "signer";
251
+ count: number;
252
+ mode: "amount" | "surplus" | "rate";
253
+ description: string;
254
+ recipient_key?: string | undefined;
255
+ refund_track?: "order_anchored" | undefined;
256
+ once_per_order?: boolean | undefined;
257
+ rows?: {
258
+ track: "refund" | "settlement";
259
+ recipient: "entity" | "signer" | "guard_identifier";
260
+ mode: "amount" | "surplus" | "rate";
261
+ recipient_key?: string | undefined;
262
+ value?: string | number | undefined;
263
+ value_from?: string | undefined;
264
+ fix?: string | number | undefined;
265
+ fix_from?: string | undefined;
266
+ guard_key?: string | undefined;
267
+ note?: string | undefined;
268
+ }[] | undefined;
269
+ };
270
+ risk_constraints: Record<string, unknown>;
205
271
  build_notes: string[];
206
272
  } | undefined;
207
273
  intent_draft?: undefined;