@wowok/agent-mcp 3.2.9 → 3.3.1

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 (207) hide show
  1. package/README.md +2 -2
  2. package/dist/chain-semantics/field-capability.js +1 -1
  3. package/dist/chain-semantics/freeze-map.js +1 -1
  4. package/dist/chain-semantics/fund-flow.js +1 -1
  5. package/dist/chain-semantics/object-graph.js +1 -1
  6. package/dist/composition/audit.js +1 -1
  7. package/dist/composition/compile.d.ts +10 -1
  8. package/dist/composition/compile.js +1 -1
  9. package/dist/composition/inflight.js +1 -1
  10. package/dist/extensions/capability-manifest.js +1 -1
  11. package/dist/extensions/industry-audit.spec.js +1 -1
  12. package/dist/extensions/industry-pack.js +1 -1
  13. package/dist/graph/onchain/facts.spec.js +1 -1
  14. package/dist/graph/onchain/field-manifest.js +1 -1
  15. package/dist/harness/recover.js +1 -1
  16. package/dist/intent/types.d.ts +1 -1
  17. package/dist/intent/types.js +1 -1
  18. package/dist/keeper/KeeperScan.d.ts +2 -1
  19. package/dist/keeper/KeeperScan.js +1 -1
  20. package/dist/keeper/keeper.spec.js +1 -1
  21. package/dist/keeper/types.d.ts +3 -0
  22. package/dist/keeper/types.js +1 -1
  23. package/dist/knowledge/allocator-rail-verifier.d.ts +34 -0
  24. package/dist/knowledge/allocator-rail-verifier.js +1 -0
  25. package/dist/knowledge/arbitration-ledger.js +1 -1
  26. package/dist/knowledge/arbitration-templates.js +1 -1
  27. package/dist/knowledge/arbitration-venue-order.js +1 -1
  28. package/dist/knowledge/audit-rules.d.ts +19 -1
  29. package/dist/knowledge/audit-rules.js +1 -1
  30. package/dist/knowledge/baselines/rules/alloc_audit.json +1 -1
  31. package/dist/knowledge/baselines/rules/arb.json +1 -1
  32. package/dist/knowledge/baselines/rules/guard.json +15 -5
  33. package/dist/knowledge/baselines/rules/machine.json +9 -6
  34. package/dist/knowledge/baselines/rules/plan.json +12 -12
  35. package/dist/knowledge/baselines/semantic-facts.js +1 -1
  36. package/dist/knowledge/builtin-templates.d.ts +1 -1
  37. package/dist/knowledge/builtin-templates.js +1 -1
  38. package/dist/knowledge/contract-invariants.js +1 -1
  39. package/dist/knowledge/event-semantics.js +1 -1
  40. package/dist/knowledge/fund-layer.js +1 -1
  41. package/dist/knowledge/getting-started.js +1 -1
  42. package/dist/knowledge/guard-anchor-reach.d.ts +1 -1
  43. package/dist/knowledge/guard-anchor-reach.js +1 -1
  44. package/dist/knowledge/guard-bindings.js +1 -1
  45. package/dist/knowledge/guard-design-patterns.d.ts +1 -1
  46. package/dist/knowledge/guard-design-patterns.js +1 -1
  47. package/dist/knowledge/guard-field-cognition.js +1 -1
  48. package/dist/knowledge/guard-render.js +1 -1
  49. package/dist/knowledge/guard-risk.js +1 -1
  50. package/dist/knowledge/guard-templates.d.ts +1 -1
  51. package/dist/knowledge/guard-templates.js +1 -1
  52. package/dist/knowledge/index.js +1 -1
  53. package/dist/knowledge/industry-registry.js +1 -1
  54. package/dist/knowledge/industry-strategy.js +1 -1
  55. package/dist/knowledge/jsonrpc-enum.js +1 -1
  56. package/dist/knowledge/machine-ledger.js +1 -1
  57. package/dist/knowledge/machine-puzzle.d.ts +1 -1
  58. package/dist/knowledge/machine-puzzle.js +1 -1
  59. package/dist/knowledge/machine-risk.js +1 -1
  60. package/dist/knowledge/machine-templates.js +1 -1
  61. package/dist/knowledge/machine-topology.d.ts +8 -0
  62. package/dist/knowledge/machine-topology.js +1 -1
  63. package/dist/knowledge/machine-translation.js +1 -1
  64. package/dist/knowledge/permission-ledger.js +1 -1
  65. package/dist/knowledge/protocol-facts.d.ts +16 -0
  66. package/dist/knowledge/protocol-facts.js +1 -0
  67. package/dist/knowledge/recipient-constraint.js +1 -1
  68. package/dist/knowledge/reward-ledger.d.ts +2 -1
  69. package/dist/knowledge/reward-ledger.js +1 -1
  70. package/dist/knowledge/reward-templates.js +1 -1
  71. package/dist/knowledge/safety-rules.d.ts +0 -2
  72. package/dist/knowledge/safety-rules.js +1 -1
  73. package/dist/knowledge/scenario-modes.d.ts +7 -0
  74. package/dist/knowledge/scenario-modes.js +1 -1
  75. package/dist/knowledge/strategy-manuals.js +1 -1
  76. package/dist/knowledge/template-loader.d.ts +13 -1
  77. package/dist/knowledge/template-loader.js +1 -1
  78. package/dist/knowledge/template-registry.js +1 -1
  79. package/dist/knowledge/template-scanner.js +1 -1
  80. package/dist/knowledge/tool-constraints.js +1 -1
  81. package/dist/knowledge/tools-reference.js +1 -1
  82. package/dist/monitor/MonitorLoop.js +1 -1
  83. package/dist/monitor/normalize.d.ts +1 -1
  84. package/dist/monitor/normalize.js +1 -1
  85. package/dist/monitor/types.d.ts +1 -1
  86. package/dist/monitor/types.js +1 -1
  87. package/dist/playbooks/service-build/business-puzzle.js +1 -1
  88. package/dist/playbooks/service-build/game-theory.d.ts +1 -0
  89. package/dist/playbooks/service-build/game-theory.js +1 -1
  90. package/dist/playbooks/service-build/intent-analyzer.js +1 -1
  91. package/dist/playbooks/service-build/machine-panorama.js +1 -1
  92. package/dist/playbooks/service-build/merchant-guide.js +1 -1
  93. package/dist/playbooks/service-build/object-panorama.js +1 -1
  94. package/dist/playbooks/service-build/participation-radar.js +1 -1
  95. package/dist/playbooks/service-build/relationship-profile.js +1 -1
  96. package/dist/playbooks/service-build/service-panorama.js +1 -1
  97. package/dist/playbooks/service-build/service-quote.js +1 -1
  98. package/dist/playbooks/service-build/service-quote.spec.js +1 -1
  99. package/dist/relationship/registry.js +1 -1
  100. package/dist/review/index.js +1 -1
  101. package/dist/role/profiles.js +1 -1
  102. package/dist/rules.js +1 -1
  103. package/dist/safety/confirm-gate.js +1 -1
  104. package/dist/schema/benchmark-migration/index.d.ts +5 -1
  105. package/dist/schema/benchmark-migration/index.js +1 -1
  106. package/dist/schema/call/arbitration.d.ts +4 -4
  107. package/dist/schema/call/arbitration.js +1 -1
  108. package/dist/schema/call/base.d.ts +39 -0
  109. package/dist/schema/call/base.js +1 -1
  110. package/dist/schema/call/bridge.d.ts +1 -0
  111. package/dist/schema/call/contact.d.ts +4 -4
  112. package/dist/schema/call/demand.d.ts +4 -4
  113. package/dist/schema/call/error-codes.d.ts +1 -1
  114. package/dist/schema/call/error-codes.js +1 -1
  115. package/dist/schema/call/handler.js +1 -1
  116. package/dist/schema/call/machine.d.ts +12 -4
  117. package/dist/schema/call/order.d.ts +4 -4
  118. package/dist/schema/call/permission.d.ts +4 -4
  119. package/dist/schema/call/progress.d.ts +4 -4
  120. package/dist/schema/call/receipt.d.ts +8 -0
  121. package/dist/schema/call/receipt.js +1 -1
  122. package/dist/schema/call/repository.d.ts +4 -4
  123. package/dist/schema/call/reward.d.ts +24 -4
  124. package/dist/schema/call/reward.js +1 -1
  125. package/dist/schema/call/semantic.js +1 -1
  126. package/dist/schema/call/service.d.ts +6 -4
  127. package/dist/schema/call/service.js +1 -1
  128. package/dist/schema/call/treasury.d.ts +4 -4
  129. package/dist/schema/common/index.d.ts +2 -2
  130. package/dist/schema/common/index.js +1 -1
  131. package/dist/schema/goal/index.d.ts +5 -1
  132. package/dist/schema/goal/planning.d.ts +10 -2
  133. package/dist/schema/goal/planning.js +1 -1
  134. package/dist/schema/industry-pack/index.d.ts +3 -0
  135. package/dist/schema/industry-pack/index.js +1 -1
  136. package/dist/schema/intent-radar/index.d.ts +9 -0
  137. package/dist/schema/intent-radar/index.js +1 -1
  138. package/dist/schema/local/index.d.ts +10 -0
  139. package/dist/schema/local/index.js +1 -1
  140. package/dist/schema/operations.d.ts +35 -22
  141. package/dist/schema/operations.js +1 -1
  142. package/dist/schema/query/bi.d.ts +16 -0
  143. package/dist/schema/query/bi.js +1 -1
  144. package/dist/schema/query/index.d.ts +52 -48
  145. package/dist/schema/query/index.js +1 -1
  146. package/dist/schema/schema-query/index.d.ts +1 -0
  147. package/dist/schema/schema-query/index.js +1 -1
  148. package/dist/schema/schema-version.js +1 -1
  149. package/dist/schema/workspace/index.d.ts +9 -0
  150. package/dist/schema/workspace/index.js +1 -1
  151. package/dist/schema-query-impl/index.d.ts +1 -1
  152. package/dist/schema-query-impl/index.js +1 -1
  153. package/dist/schemas/account_operation.output.json +1 -0
  154. package/dist/schemas/account_operation.schema.json +1 -1
  155. package/dist/schemas/benchmark_migration_operation.schema.json +27 -3
  156. package/dist/schemas/bridge_operation.output.json +1 -0
  157. package/dist/schemas/goal_operation.schema.json +26 -2
  158. package/dist/schemas/index.json +1 -1
  159. package/dist/schemas/industry_pack_operation.output.json +8 -0
  160. package/dist/schemas/industry_pack_operation.schema.json +9 -0
  161. package/dist/schemas/intent_radar.output.json +8 -2
  162. package/dist/schemas/intent_radar.schema.json +4 -1
  163. package/dist/schemas/local_cache_operation.output.json +1 -0
  164. package/dist/schemas/local_history_operation.output.json +1 -0
  165. package/dist/schemas/local_info_operation.output.json +1 -0
  166. package/dist/schemas/local_mark_operation.output.json +1 -0
  167. package/dist/schemas/monitor_events.schema.json +3 -1
  168. package/dist/schemas/onchain_events.output.json +275 -11
  169. package/dist/schemas/onchain_events.schema.json +25 -1
  170. package/dist/schemas/onchain_operations.output.json +40 -0
  171. package/dist/schemas/onchain_operations.schema.json +573 -104
  172. package/dist/schemas/onchain_operations_allocation.schema.json +2 -2
  173. package/dist/schemas/onchain_operations_arbitration.schema.json +11 -7
  174. package/dist/schemas/onchain_operations_contact.schema.json +9 -5
  175. package/dist/schemas/onchain_operations_demand.schema.json +9 -5
  176. package/dist/schemas/onchain_operations_guard.schema.json +342 -4
  177. package/dist/schemas/onchain_operations_machine.schema.json +17 -5
  178. package/dist/schemas/onchain_operations_order.schema.json +9 -5
  179. package/dist/schemas/onchain_operations_permission.schema.json +9 -5
  180. package/dist/schemas/onchain_operations_progress.schema.json +9 -5
  181. package/dist/schemas/onchain_operations_repository.schema.json +9 -5
  182. package/dist/schemas/onchain_operations_reward.schema.json +89 -9
  183. package/dist/schemas/onchain_operations_service.schema.json +18 -11
  184. package/dist/schemas/onchain_operations_treasury.schema.json +9 -5
  185. package/dist/schemas/query_toolkit.output.json +237 -14
  186. package/dist/schemas/schema_query.schema.json +3 -2
  187. package/dist/schemas/workspace_operation.output.json +23 -3
  188. package/dist/schemas/workspace_operation.schema.json +3 -3
  189. package/dist/tools/handlers/benchmark-migration.d.ts +45 -1
  190. package/dist/tools/handlers/benchmark-migration.js +1 -1
  191. package/dist/tools/handlers/config.js +1 -1
  192. package/dist/tools/handlers/industry-pack.js +1 -1
  193. package/dist/tools/handlers/intent-radar.js +1 -1
  194. package/dist/tools/handlers/keeper.d.ts +1 -1
  195. package/dist/tools/handlers/onchain.d.ts +12 -0
  196. package/dist/tools/handlers/onchain.js +1 -1
  197. package/dist/tools/handlers/schema-query.js +1 -1
  198. package/dist/tools/handlers/workflow.js +1 -1
  199. package/dist/tools/handlers/workspace.js +1 -1
  200. package/dist/tools/index.js +1 -1
  201. package/dist/tools/registry/agent.js +1 -1
  202. package/dist/tools/registry/business.js +1 -1
  203. package/dist/tools/registry/local.js +1 -1
  204. package/dist/tools/registry/query.js +1 -1
  205. package/dist/tools/rules-hook.js +1 -1
  206. package/dist/tools/wrap.js +1 -1
  207. package/package.json +2 -2
@@ -1 +1 @@
1
- import{checkEntityRecipientsSync,describeEntityRecipients}from'./entity-recipient-guard.js';import{runGuardRulePack}from'./guard-risk.js';import{findScene}from'./guard-ledger.js';const GUARD_DETERMINISTIC_FAILURE_RULES=new Map([['R-C2-05','any'],['R-C2-06','critical'],['R-C2-07','any'],['R-X1-19','any']]);function guardDeterministicRulesSatisfied(a){try{const b=a?.['root'];if(!b||typeof b!=='object'||b['type']==='file')return!![];const c=a?.['binding_hint'],d=findScene(c?.['host_object']??'',c?.['binding_field']??''),e=(Array['isArray'](a?.['table'])?a['table']:[])['map'](g=>({'identifier':g?.['identifier'],'b_submission':g?.['b_submission']??![],'value_type':g?.['value_type'],'value':g?.['value'],'name':g?.['name'],'object_type':g?.['object_type']})),f=runGuardRulePack({'table':e,'root':b,'scene':d??undefined});return!f['some'](g=>{const h=GUARD_DETERMINISTIC_FAILURE_RULES['get'](g['id']);if(!h)return![];return h==='any'||g['level']==='critical';});}catch{return!![];}}function guardDeterministicBlockMessage(a){let b='';try{const c=a?.['root'];if(c&&typeof c==='object'&&c['type']!=='file'){const d=a?.['binding_hint'],e=findScene(d?.['host_object']??'',d?.['binding_field']??''),f=(Array['isArray'](a?.['table'])?a['table']:[])['map'](h=>({'identifier':h?.['identifier'],'b_submission':h?.['b_submission']??![],'value_type':h?.['value_type'],'value':h?.['value'],'name':h?.['name'],'object_type':h?.['object_type']})),g=runGuardRulePack({'table':f,'root':c,'scene':e??undefined})['filter'](h=>{const i=GUARD_DETERMINISTIC_FAILURE_RULES['get'](h['id']);if(!i)return![];return i==='any'||h['level']==='critical';})['map'](h=>h['id']+'\x20('+h['title']+')');b=g['join'](';\x20');}}catch{}return'Guard\x20draft\x20blocked:\x20deterministic-failure\x20rule(s)\x20fired'+(b?'\x20—\x20'+b:'')+'.\x20These\x20shapes\x20cannot\x20succeed\x20on-chain:\x20witness\x20edges\x20are\x20directional\x20(no\x20PROGRESS→ORDER\x20reverse\x20edge\x20—\x20derive\x20Progress\x20via\x20convert_witness\x20100),\x20repository.data\x20\x27keys\x20where\x27\x20aborts\x20in\x20the\x20native\x20verifier\x20(use\x20the\x20write-side\x20threshold\x20policy\x20pattern),\x20and\x20order.*\x20queries\x20in\x20a\x20buy\x20guard\x20are\x20circular\x20(the\x20Order\x20does\x20not\x20exist\x20at\x20buy\x20time\x20—\x20query\x20service.*\x20instead).\x20Fix\x20the\x20flagged\x20nodes\x20and\x20re-create;\x20run\x20guard\x20lint\x20/\x20analyze_guard_semantics\x20for\x20exact\x20node\x20paths.';}function entityRecipientsSatisfied(a){try{const b=a?.['allocators']??a?.['order_allocators'];if(!b)return!![];return checkEntityRecipientsSync(b)['length']===0x0;}catch{return!![];}}export const TOOL_CONSTRAINTS=[{'operation_type':'service','constraints':[{'field':'namedNew.name','description':'Service\x20should\x20have\x20a\x20name\x20for\x20easy\x20reference','severity':'warning','check':a=>!!a?.['namedNew']?.['name']||typeof a?.['object']==='string','message':()=>'Service\x20without\x20a\x20name\x20is\x20hard\x20to\x20reference\x20later.\x20Consider\x20setting\x20namedNew.name.'},{'field':'price','description':'Service\x20price\x20should\x20be\x20set\x20before\x20publish','severity':'warning','check':a=>a?.['price']!==undefined||!a?.['publish'],'message':()=>'Publishing\x20a\x20service\x20without\x20a\x20price\x20—\x20customers\x20won\x27t\x20know\x20the\x20cost.'},{'field':'allocators.allocators[].sharing[].who.Entity.name_or_address','description':'R-RECIPIENT-03\x20—\x20an\x20Entity\x20recipient\x20may\x20not\x20be\x20empty,\x20omitted,\x20unresolved,\x20or\x20the\x20deploying\x20account\x20(direct-sales\x20invariant)','severity':'error','check':entityRecipientsSatisfied,'message':a=>describeEntityRecipients(checkEntityRecipientsSync(a?.['allocators']??a?.['order_allocators']))}],'requireOneOf':[{'fields':['object','namedNew'],'reason':'Must\x20specify\x20either\x20an\x20existing\x20object\x20(string)\x20or\x20create\x20new\x20(namedNew)'}]},{'operation_type':'machine','constraints':[{'field':'node.nodes','description':'Machine\x20must\x20have\x20at\x20least\x20one\x20node\x20when\x20published','severity':'error','check':a=>{if(typeof a?.['object']==='string')return!![];if(!a?.['publish'])return!![];if(Array['isArray'](a?.['node']?.['nodes'])&&a['node']['nodes']['length']>0x0)return!![];if(typeof a?.['node']?.['json_or_markdown_file']==='string'&&a['node']['json_or_markdown_file']['length']>0x0)return!![];return![];},'message':()=>'Publishing\x20a\x20Machine\x20without\x20nodes\x20—\x20a\x20workflow\x20template\x20requires\x20at\x20least\x20one\x20node.\x20Provide\x20nodes\x20via\x20inline\x20`node.nodes`\x20array\x20OR\x20`node.json_or_markdown_file`\x20path\x20(file\x20contains\x20JSON\x20or\x20Markdown\x20node\x20definitions).\x20Consider\x20adding\x20nodes\x20before\x20publish,\x20or\x20publish\x20later\x20after\x20adding\x20nodes.'}]},{'operation_type':'payment','constraints':[{'field':'revenue','description':'Payment\x20requires\x20at\x20least\x20one\x20revenue\x20entry\x20(CREATE\x20mode\x20only)','severity':'error','check':a=>a?.['receive']===!![]||Array['isArray'](a?.['revenue'])&&a['revenue']['length']>0x0,'message':()=>'Payment\x20requires\x20a\x20non-empty\x20\x27revenue\x27\x20array\x20(payment\x20recipients\x20and\x20amounts).\x20For\x20RECEIVE\x20mode\x20(unwrap\x20CoinWrapper),\x20use\x20{object:\x20\x27<coinwrapper_id>\x27,\x20receive:\x20true,\x20type_parameter:\x20\x270x2::wow::WOW\x27}.'},{'field':'revenue[0].amount','description':'Payment\x20revenue\x20amount\x20must\x20be\x20specified\x20(CREATE\x20mode\x20only)','severity':'error','check':a=>a?.['receive']===!![]||Array['isArray'](a?.['revenue'])&&a['revenue']['length']>0x0&&(!!a['revenue'][0x0]?.['amount']?.['balance']||!!a['revenue'][0x0]?.['amount']?.['coin']),'message':()=>'Payment\x20revenue[0].amount\x20must\x20specify\x20either\x20\x27balance\x27\x20value\x20or\x20\x27coin\x27\x20object\x20(see\x20CoinParamSchema).'}]},{'operation_type':'allocation','constraints':[{'field':'payment_info.for_object','description':'Unanchored\x20allocation\x20with\x20GuardIdentifier\x20recipients\x20is\x20blocked\x20by\x20default\x20(docs#11)','severity':'error','check':a=>{if(!a?.['allocators'])return!![];if(a?.['allow_unanchored']===!![])return!![];if(a?.['payment_info']?.['for_object'])return!![];const b=a?.['allocators']?.['allocators'];if(!Array['isArray'](b))return!![];return!b['some'](c=>Array['isArray'](c?.['sharing'])&&c['sharing']['some'](e=>e?.['who']&&'GuardIdentifier'in e['who']));},'message':()=>'Unanchored\x20allocation\x20(payment_info.for_object\x20not\x20set)\x20with\x20GuardIdentifier\x20recipients\x20lets\x20any\x20guard-passing\x20caller\x20redirect\x20the\x20submitted\x20payout\x20address\x20to\x20an\x20arbitrary\x20address\x20(docs#11).\x20Anchor\x20it\x20with\x20payment_info.for_object,\x20or\x20pass\x20allow_unanchored:true\x20to\x20proceed.'},{'field':'allocators.allocators[].sharing[].who.Entity.name_or_address','description':'R-RECIPIENT-03\x20—\x20an\x20Entity\x20recipient\x20may\x20not\x20be\x20empty,\x20omitted,\x20unresolved,\x20or\x20the\x20deploying\x20account\x20(direct-sales\x20invariant)','severity':'error','check':entityRecipientsSatisfied,'message':a=>describeEntityRecipients(checkEntityRecipientsSync(a?.['allocators']??a?.['order_allocators']))}]},{'operation_type':'order','constraints':[{'field':'object','description':'Order\x20requires\x20an\x20existing\x20Order\x20object\x20reference','severity':'error','check':a=>!!a?.['object'],'message':()=>'Order\x20requires\x20\x27object\x27\x20field\x20(Order\x20object\x20ID\x20or\x20name).'}]},{'operation_type':'reward','constraints':[{'field':'coin_add','description':'Reward\x20funding\x20requires\x20coin_add','severity':'warning','check':a=>{if(a?.['claim']||a?.['guard_add']||a?.['guard_remove_expired']||a?.['owner_receive']||a?.['receive'])return!![];return!!a?.['coin_add']?.['balance']||!!a?.['coin_add']?.['coin'];},'message':()=>'Reward\x20funding\x20requires\x20\x27coin_add\x27\x20with\x20either\x20\x27balance\x27\x20value\x20or\x20\x27coin\x27\x20object\x20(see\x20CoinParamSchema).\x20Other\x20operations\x20(claim,\x20guard_add,\x20etc.)\x20don\x27t\x20need\x20coin_add.'}]},{'operation_type':'guard','constraints':[{'field':'root','description':'Guard\x20must\x20specify\x20root\x20(node\x20tree\x20or\x20file)','severity':'error','check':a=>!!a?.['root'],'message':()=>'Guard\x20requires\x20a\x20\x27root\x27\x20field\x20(type=\x27node\x27\x20for\x20tree\x20or\x20type=\x27file\x27\x20to\x20load\x20from\x20file).'},{'field':'root','description':'Guard\x20draft\x20must\x20pass\x20the\x20deterministic-failure\x20rules\x20(witness\x20matrix,\x20reverse-edge,\x20keys-where\x20native\x20abort,\x20buy-time\x20circularity)','severity':'error','check':guardDeterministicRulesSatisfied,'message':guardDeterministicBlockMessage}]},{'operation_type':'permission','constraints':[{'field':'with_forbidden','description':'Permission\x20should\x20have\x20at\x20least\x20one\x20rule','severity':'warning','check':a=>Array['isArray'](a?.['with_forbidden'])&&a['with_forbidden']['length']>0x0||Array['isArray'](a?.['with_allowed'])&&a['with_allowed']['length']>0x0,'message':()=>'Permission\x20has\x20no\x20rules\x20(with_forbidden/with_allowed).\x20An\x20empty\x20permission\x20allows\x20nothing.'}]},{'operation_type':'demand','constraints':[{'field':'reward','description':'Demand\x20should\x20have\x20a\x20reward\x20to\x20attract\x20solutions','severity':'warning','check':a=>!!a?.['reward'],'message':()=>'Demand\x20without\x20a\x20reward\x20pool\x20may\x20not\x20attract\x20solution\x20providers.'}]},{'operation_type':'progress','constraints':[{'field':'object','description':'Progress\x20requires\x20an\x20existing\x20Progress\x20object\x20reference','severity':'error','check':a=>!!a?.['object'],'message':()=>'Progress\x20requires\x20\x27object\x27\x20field\x20(Progress\x20object\x20ID\x20or\x20name).'}]}];const CONSTRAINT_INDEX=new Map(TOOL_CONSTRAINTS['map'](a=>[a['operation_type'],a]));export function validateOperation(a,b){const d=CONSTRAINT_INDEX['get'](a);if(!d)return[];const e=[];for(const f of d['constraints']){try{!f['check'](b)&&e['push']({'field':f['field'],'severity':f['severity'],'message':f['message'](b)});}catch{}}if(d['requireOneOf'])for(const g of d['requireOneOf']){const h=g['fields']['some'](i=>b?.[i]!==undefined&&b?.[i]!==null);!h&&e['push']({'field':g['fields']['join']('|'),'severity':'error','message':g['reason']});}if(d['mutuallyExclusive'])for(const i of d['mutuallyExclusive']){const j=i['fields']['filter'](k=>b?.[k]!==undefined&&b?.[k]!==null);j['length']>0x1&&e['push']({'field':j['join']('|'),'severity':'error','message':'Fields\x20are\x20mutually\x20exclusive:\x20'+j['join'](',\x20')+'.\x20'+i['reason']});}return e;}export function hasBlockingViolations(a){return a['some'](b=>b['severity']==='error');}export function getWarningViolations(a){return a['filter'](b=>b['severity']==='warning');}export const TOOL_CONSTRAINTS_VERSION=0x1;
1
+ import{checkEntityRecipientsSync,describeEntityRecipients}from'./entity-recipient-guard.js';import{runGuardRulePack}from'./guard-risk.js';import{findScene}from'./guard-ledger.js';const GUARD_DETERMINISTIC_FAILURE_RULES=new Map([['R-C2-05','any'],['R-C2-06','critical'],['R-C2-07','any'],['R-X1-19','any']]);function guardDeterministicRulesSatisfied(a){try{const b=a?.['root'];if(!b||typeof b!=='object'||b['type']==='file')return!![];const c=a?.['binding_hint'],d=findScene(c?.['host_object']??'',c?.['binding_field']??''),e=(Array['isArray'](a?.['table'])?a['table']:[])['map'](g=>({'identifier':g?.['identifier'],'b_submission':g?.['b_submission']??![],'value_type':g?.['value_type'],'value':g?.['value'],'name':g?.['name'],'object_type':g?.['object_type']})),f=runGuardRulePack({'table':e,'root':b,'scene':d??undefined});return!f['some'](g=>{const h=GUARD_DETERMINISTIC_FAILURE_RULES['get'](g['id']);if(!h)return![];return h==='any'||g['level']==='critical';});}catch{return!![];}}function guardDeterministicBlockMessage(a){let b='';try{const c=a?.['root'];if(c&&typeof c==='object'&&c['type']!=='file'){const d=a?.['binding_hint'],e=findScene(d?.['host_object']??'',d?.['binding_field']??''),f=(Array['isArray'](a?.['table'])?a['table']:[])['map'](h=>({'identifier':h?.['identifier'],'b_submission':h?.['b_submission']??![],'value_type':h?.['value_type'],'value':h?.['value'],'name':h?.['name'],'object_type':h?.['object_type']})),g=runGuardRulePack({'table':f,'root':c,'scene':e??undefined})['filter'](h=>{const i=GUARD_DETERMINISTIC_FAILURE_RULES['get'](h['id']);if(!i)return![];return i==='any'||h['level']==='critical';})['map'](h=>h['id']+'\x20('+h['title']+')');b=g['join'](';\x20');}}catch{}return'Guard\x20draft\x20blocked:\x20deterministic-failure\x20rule(s)\x20fired'+(b?'\x20—\x20'+b:'')+'.\x20These\x20shapes\x20cannot\x20succeed\x20on-chain:\x20witness\x20edges\x20are\x20directional\x20(no\x20PROGRESS→ORDER\x20reverse\x20edge\x20—\x20derive\x20Progress\x20via\x20convert_witness\x20100),\x20repository.data\x20keys-where\x20nodes\x20must\x20use\x20the\x20parameters-free\x20query-1177\x20shape\x20(the\x20Range-gte\x20predicate\x20lives\x20in\x20the\x20BCS\x20conditions\x20blob\x20—\x20a\x20parameter-carrying\x20keys-where\x20node\x20aborts\x20natively,\x20upw\x20F-28),\x20and\x20order.*\x20queries\x20in\x20a\x20buy\x20guard\x20are\x20circular\x20(the\x20Order\x20does\x20not\x20exist\x20at\x20buy\x20time\x20—\x20query\x20service.*\x20instead).\x20Fix\x20the\x20flagged\x20nodes\x20and\x20re-create;\x20run\x20guard\x20lint\x20/\x20analyze_guard_semantics\x20for\x20exact\x20node\x20paths.';}function entityRecipientsSatisfied(a){try{const b=a?.['allocators']??a?.['order_allocators'];if(!b)return!![];return checkEntityRecipientsSync(b)['length']===0x0;}catch{return!![];}}export const TOOL_CONSTRAINTS=[{'operation_type':'service','constraints':[{'field':'namedNew.name','description':'Service\x20should\x20have\x20a\x20name\x20for\x20easy\x20reference','severity':'warning','check':a=>!!a?.['namedNew']?.['name']||typeof a?.['object']==='string','message':()=>'Service\x20without\x20a\x20name\x20is\x20hard\x20to\x20reference\x20later.\x20Consider\x20setting\x20namedNew.name.'},{'field':'price','description':'Service\x20price\x20should\x20be\x20set\x20before\x20publish','severity':'warning','check':a=>a?.['price']!==undefined||!a?.['publish'],'message':()=>'Publishing\x20a\x20service\x20without\x20a\x20price\x20—\x20customers\x20won\x27t\x20know\x20the\x20cost.'},{'field':'allocators.allocators[].sharing[].who.Entity.name_or_address','description':'R-RECIPIENT-03\x20—\x20an\x20Entity\x20recipient\x20may\x20not\x20be\x20empty,\x20omitted,\x20unresolved,\x20or\x20the\x20deploying\x20account\x20(direct-sales\x20invariant)','severity':'error','check':entityRecipientsSatisfied,'message':a=>describeEntityRecipients(checkEntityRecipientsSync(a?.['allocators']??a?.['order_allocators']))}],'requireOneOf':[{'fields':['object','namedNew'],'reason':'Must\x20specify\x20either\x20an\x20existing\x20object\x20(string)\x20or\x20create\x20new\x20(namedNew)'}]},{'operation_type':'machine','constraints':[{'field':'node.nodes','description':'Machine\x20must\x20have\x20at\x20least\x20one\x20node\x20when\x20published','severity':'error','check':a=>{if(typeof a?.['object']==='string')return!![];if(!a?.['publish'])return!![];if(Array['isArray'](a?.['node']?.['nodes'])&&a['node']['nodes']['length']>0x0)return!![];if(typeof a?.['node']?.['json_or_markdown_file']==='string'&&a['node']['json_or_markdown_file']['length']>0x0)return!![];return![];},'message':()=>'Publishing\x20a\x20Machine\x20without\x20nodes\x20—\x20a\x20workflow\x20template\x20requires\x20at\x20least\x20one\x20node.\x20Provide\x20nodes\x20via\x20inline\x20`node.nodes`\x20array\x20OR\x20`node.json_or_markdown_file`\x20path\x20(file\x20contains\x20JSON\x20or\x20Markdown\x20node\x20definitions).\x20Consider\x20adding\x20nodes\x20before\x20publish,\x20or\x20publish\x20later\x20after\x20adding\x20nodes.'}]},{'operation_type':'payment','constraints':[{'field':'revenue','description':'Payment\x20requires\x20at\x20least\x20one\x20revenue\x20entry\x20(CREATE\x20mode\x20only)','severity':'error','check':a=>a?.['receive']===!![]||Array['isArray'](a?.['revenue'])&&a['revenue']['length']>0x0,'message':()=>'Payment\x20requires\x20a\x20non-empty\x20\x27revenue\x27\x20array\x20(payment\x20recipients\x20and\x20amounts).\x20For\x20RECEIVE\x20mode\x20(unwrap\x20CoinWrapper),\x20use\x20{object:\x20\x27<coinwrapper_id>\x27,\x20receive:\x20true,\x20type_parameter:\x20\x270x2::wow::WOW\x27}.'},{'field':'revenue[0].amount','description':'Payment\x20revenue\x20amount\x20must\x20be\x20specified\x20(CREATE\x20mode\x20only)','severity':'error','check':a=>a?.['receive']===!![]||Array['isArray'](a?.['revenue'])&&a['revenue']['length']>0x0&&(!!a['revenue'][0x0]?.['amount']?.['balance']||!!a['revenue'][0x0]?.['amount']?.['coin']),'message':()=>'Payment\x20revenue[0].amount\x20must\x20specify\x20either\x20\x27balance\x27\x20value\x20or\x20\x27coin\x27\x20object\x20(see\x20CoinParamSchema).'}]},{'operation_type':'allocation','constraints':[{'field':'payment_info.for_object','description':'Unanchored\x20allocation\x20with\x20GuardIdentifier\x20recipients\x20is\x20blocked\x20by\x20default\x20(docs#11)','severity':'error','check':a=>{if(!a?.['allocators'])return!![];if(a?.['allow_unanchored']===!![])return!![];if(a?.['payment_info']?.['for_object'])return!![];const b=a?.['allocators']?.['allocators'];if(!Array['isArray'](b))return!![];return!b['some'](c=>Array['isArray'](c?.['sharing'])&&c['sharing']['some'](e=>e?.['who']&&'GuardIdentifier'in e['who']));},'message':()=>'Unanchored\x20allocation\x20(payment_info.for_object\x20not\x20set)\x20with\x20GuardIdentifier\x20recipients\x20lets\x20any\x20guard-passing\x20caller\x20redirect\x20the\x20submitted\x20payout\x20address\x20to\x20an\x20arbitrary\x20address\x20(docs#11).\x20Anchor\x20it\x20with\x20payment_info.for_object,\x20or\x20pass\x20allow_unanchored:true\x20to\x20proceed.'},{'field':'allocators.allocators[].sharing[].who.Entity.name_or_address','description':'R-RECIPIENT-03\x20—\x20an\x20Entity\x20recipient\x20may\x20not\x20be\x20empty,\x20omitted,\x20unresolved,\x20or\x20the\x20deploying\x20account\x20(direct-sales\x20invariant)','severity':'error','check':entityRecipientsSatisfied,'message':a=>describeEntityRecipients(checkEntityRecipientsSync(a?.['allocators']??a?.['order_allocators']))}]},{'operation_type':'order','constraints':[{'field':'object','description':'Order\x20requires\x20an\x20existing\x20Order\x20object\x20reference','severity':'error','check':a=>!!a?.['object'],'message':()=>'Order\x20requires\x20\x27object\x27\x20field\x20(Order\x20object\x20ID\x20or\x20name).'}]},{'operation_type':'reward','constraints':[{'field':'coin_add','description':'Reward\x20funding\x20requires\x20coin_add','severity':'warning','check':a=>{if(a?.['claim']||a?.['guard_add']||a?.['guard_remove_expired']||a?.['owner_receive']||a?.['receive'])return!![];return!!a?.['coin_add']?.['balance']||!!a?.['coin_add']?.['coin'];},'message':()=>'Reward\x20funding\x20requires\x20\x27coin_add\x27\x20with\x20either\x20\x27balance\x27\x20value\x20or\x20\x27coin\x27\x20object\x20(see\x20CoinParamSchema).\x20Other\x20operations\x20(claim,\x20guard_add,\x20etc.)\x20don\x27t\x20need\x20coin_add.'}]},{'operation_type':'guard','constraints':[{'field':'root','description':'Guard\x20must\x20specify\x20root\x20(node\x20tree\x20or\x20file)','severity':'error','check':a=>!!a?.['root'],'message':()=>'Guard\x20requires\x20a\x20\x27root\x27\x20field\x20(type=\x27node\x27\x20for\x20tree\x20or\x20type=\x27file\x27\x20to\x20load\x20from\x20file).'},{'field':'root','description':'Guard\x20draft\x20must\x20pass\x20the\x20deterministic-failure\x20rules\x20(witness\x20matrix,\x20reverse-edge,\x20keys-where\x20native\x20abort,\x20buy-time\x20circularity)','severity':'error','check':guardDeterministicRulesSatisfied,'message':guardDeterministicBlockMessage}]},{'operation_type':'permission','constraints':[{'field':'with_forbidden','description':'Permission\x20should\x20have\x20at\x20least\x20one\x20rule','severity':'warning','check':a=>Array['isArray'](a?.['with_forbidden'])&&a['with_forbidden']['length']>0x0||Array['isArray'](a?.['with_allowed'])&&a['with_allowed']['length']>0x0,'message':()=>'Permission\x20has\x20no\x20rules\x20(with_forbidden/with_allowed).\x20An\x20empty\x20permission\x20allows\x20nothing.'}]},{'operation_type':'demand','constraints':[{'field':'reward','description':'Demand\x20should\x20have\x20a\x20reward\x20to\x20attract\x20solutions','severity':'warning','check':a=>!!a?.['reward'],'message':()=>'Demand\x20without\x20a\x20reward\x20pool\x20may\x20not\x20attract\x20solution\x20providers.'}]},{'operation_type':'progress','constraints':[{'field':'object','description':'Progress\x20requires\x20an\x20existing\x20Progress\x20object\x20reference','severity':'error','check':a=>!!a?.['object'],'message':()=>'Progress\x20requires\x20\x27object\x27\x20field\x20(Progress\x20object\x20ID\x20or\x20name).'}]}];const CONSTRAINT_INDEX=new Map(TOOL_CONSTRAINTS['map'](a=>[a['operation_type'],a]));export function validateOperation(a,b){const d=CONSTRAINT_INDEX['get'](a);if(!d)return[];const e=[];for(const f of d['constraints']){try{!f['check'](b)&&e['push']({'field':f['field'],'severity':f['severity'],'message':f['message'](b)});}catch{}}if(d['requireOneOf'])for(const g of d['requireOneOf']){const h=g['fields']['some'](i=>b?.[i]!==undefined&&b?.[i]!==null);!h&&e['push']({'field':g['fields']['join']('|'),'severity':'error','message':g['reason']});}if(d['mutuallyExclusive'])for(const i of d['mutuallyExclusive']){const j=i['fields']['filter'](k=>b?.[k]!==undefined&&b?.[k]!==null);j['length']>0x1&&e['push']({'field':j['join']('|'),'severity':'error','message':'Fields\x20are\x20mutually\x20exclusive:\x20'+j['join'](',\x20')+'.\x20'+i['reason']});}return e;}export function hasBlockingViolations(a){return a['some'](b=>b['severity']==='error');}export function getWarningViolations(a){return a['filter'](b=>b['severity']==='warning');}export const TOOL_CONSTRAINTS_VERSION=0x1;
@@ -1 +1 @@
1
- import{BUILTIN_TEMPLATES}from'./builtin-templates.js';export const TOOLS_REFERENCE=[{'name':'onchain_operations','summary':'On-chain\x20object\x20creation,\x20modification,\x20and\x20publish\x20for\x20all\x2016\x20Wowok\x20object\x20types.','actions':['service','machine','guard','permission','reward','arb','progress','treasury','demand','repository','contact','order','allocation','personal','payment','proof','gen_passport','gen_proof'],'common_params':{'operation_type':'Object\x20type\x20to\x20create/modify\x20(string\x20enum).','data':'Operation\x20payload\x20—\x20shape\x20varies\x20by\x20operation_type.','object':'Object\x20name\x20or\x20address\x20(for\x20modify-by-id).','namedNew':'New\x20object\x20spec\x20(name,\x20description,\x20tags)\x20for\x20create.','env':'Execution\x20environment\x20(account,\x20network,\x20gas_budget).'},'prerequisites':['account_operation\x20(for\x20account\x20setup)'],'follow_ups':['query_toolkit\x20(verify\x20result)','local_mark_operation\x20(tag\x20object)'],'notes':['publish=true\x20is\x20irreversible\x20—\x20use\x20confirm_gate.','Service/Machine\x20require\x20publish\x20after\x20create\x20before\x20they\x20are\x20visible\x20on-chain.','Use\x20schema_query\x20with\x20action=\x27list_operations\x27\x20to\x20see\x20all\x20operation\x20schemas.','NETWORK:\x20by\x20default\x20omit\x20env.network\x20—\x20the\x20operation\x20runs\x20on\x20the\x20user\x27s\x20CURRENT\x20network\x20(the\x20app\x27s\x20active\x20selection);\x20the\x20confirmation\x20card\x20echoes\x20the\x20actual\x20network.\x20Never\x20guess\x20or\x20invent\x20a\x20network\x20on\x20your\x20own\x20initiative.','NETWORK\x20SWITCH\x20(explicit\x20user\x20intent\x20only):\x20when\x20the\x20user\x27s\x20request\x20clearly\x20targets\x20a\x20DIFFERENT\x20network\x20(e.g.\x20\x22create\x20this\x20permission\x20on\x20testnet\x22\x20while\x20the\x20app\x20is\x20on\x20mainnet),\x20set\x20env.network\x20to\x20that\x20network\x20in\x20THIS\x20call\x20—\x20the\x20client\x20pops\x20a\x20mandatory\x20network-switch\x20confirmation\x20card;\x20only\x20after\x20the\x20user\x20approves\x20does\x20the\x20call\x20(and\x20the\x20whole\x20app)\x20run\x20on\x20the\x20new\x20network.\x20If\x20the\x20user\x20declines,\x20do\x20NOT\x20retry\x20on\x20that\x20network\x20—\x20continue\x20on\x20the\x20current\x20one.\x20Read-only\x20queries\x20(query_toolkit\x20context_network)\x20never\x20need\x20this\x20—\x20they\x20select\x20a\x20network\x20per\x20call\x20without\x20switching.']},{'name':'account_operation','summary':'Local\x20wallet\x20management\x20—\x20generate,\x20suspend,\x20resume,\x20faucet,\x20sign\x20data.','actions':['gen','resume','suspend','faucet','operate','sign','list','info'],'common_params':{'name':'Account\x20name\x20(local\x20identifier).','network':'mainnet\x20|\x20testnet\x20(determines\x20RPC).'},'prerequisites':[],'follow_ups':['onchain_operations\x20(use\x20account\x20for\x20signing)'],'notes':['100%\x20LOCAL\x20—\x20keys\x20never\x20leave\x20the\x20device.','faucet\x20only\x20works\x20on\x20testnet.']},{'name':'local_mark_operation','summary':'Local\x20address\x20book\x20—\x20map\x20human-readable\x20names\x20to\x20blockchain\x20addresses\x20with\x20tags.','actions':['add','remove','update','list','query'],'common_params':{'name':'Local\x20name.','address':'Blockchain\x20address.','tags':'Tag\x20array.'},'notes':['100%\x20LOCAL\x20—\x20never\x20on-chain.','Names\x20are\x20accepted\x20by\x20most\x20on-chain\x20query/panorama\x20tools\x20in\x20place\x20of\x20raw\x20addresses.']},{'name':'local_info_operation','summary':'Local\x20private\x20data\x20management\x20—\x20delivery\x20addresses,\x20phone\x20numbers,\x20contacts.','actions':['add','remove','update','list'],'notes':['100%\x20LOCAL\x20—\x20sensitive\x20data,\x20never\x20on-chain.']},{'name':'local_history_operation','summary':'Local\x20Explorer\x20visit\x20history\x20—\x20recently\x20viewed\x20objects,\x20newest\x20first.','actions':['list\x20(default)','add\x20(upsert\x20by\x20key)','remove\x20(by\x20keys)','clear'],'common_params':{'add':'Record\x20visits:\x20{op:\x27add\x27,\x20data:[{key,\x20address,\x20object_type?,\x20network,\x20time}]}.','remove':'Delete\x20entries:\x20{op:\x27remove\x27,\x20keys:[...]}.','clear':'Erase\x20all\x20history:\x20{op:\x27clear\x27}.'},'notes':['100%\x20LOCAL\x20—\x20visit\x20records\x20never\x20leave\x20the\x20device;\x20display\x20names\x20are\x20never\x20stored\x20(resolved\x20live\x20at\x20render).','Omit\x20every\x20operation\x20field\x20to\x20list\x20history\x20(newest\x20first,\x20auto-pruned\x20to\x20last\x2030\x20days\x20/\x20300\x20entries).','detail\x20visits\x20keep\x20the\x20object\x20type\x20tag;\x20each\x20entry\x20stores\x20the\x20stable\x20object\x20key\x20+\x20canonical\x200x\x20address\x20+\x20network\x20+\x20timestamp.']},{'name':'local_cache_operation','summary':'Device-local\x20SDK\x20read\x20cache\x20—\x20report\x20diagnostics,\x20clear\x20a\x20prefix\x20or\x20everything,\x20re-detect\x20chain\x20identity\x20after\x20a\x20node\x20reset.','actions':['status\x20(read-only)','clear_prefix','clear','refresh_chain_scope'],'common_params':{'status':'Report\x20diagnostics\x20(active\x20chain\x20identity,\x20memory\x20entries,\x20persisted\x20rows):\x20{status:{op:\x27status\x27}}.','clear_prefix':'Drop\x20one\x20cache\x20family:\x20{clear_prefix:{op:\x27clear_prefix\x27,\x20prefix:\x27objectv2\x27}}.','clear':'Drop\x20the\x20whole\x20read\x20cache:\x20{clear:{op:\x27clear\x27}}.','refresh_chain_scope':'Force\x20chain-identity\x20re-detection:\x20{refresh_chain_scope:{op:\x27refresh_chain_scope\x27,\x20network?}}.'},'notes':['100%\x20LOCAL\x20—\x20never\x20on-chain;\x20does\x20NOT\x20touch\x20accounts,\x20marks,\x20info\x20or\x20history\x20(separate\x20stores,\x20separate\x20tools).','USE\x20AFTER\x20A\x20NODE\x20RESET\x20/\x20RESTART,\x20or\x20on\x20\x27object\x200x…\x20version\x200x…\x20is\x20unavailable\x27:\x20the\x20SDK\x20namespaces\x20its\x20cache\x20by\x20chain\x20identity\x20(genesis\x20checkpoint\x20digest),\x20so\x20a\x20reset\x20normally\x20self-heals;\x20refresh_chain_scope\x20forces\x20it\x20when\x20the\x20node\x20was\x20unreachable\x20at\x20startup.','A\x20chain_identity\x20of\x20null\x20in\x20`status`\x20means\x20the\x20cache\x20is\x20NOT\x20reset-safe\x20—\x20run\x20refresh_chain_scope.','Only\x20`status`\x20is\x20read-only;\x20the\x20other\x20sub-ops\x20discard\x20cached\x20reads\x20and\x20re-read\x20from\x20the\x20node\x20next\x20call.']},{'name':'wip_file','summary':'Witness\x20Immutable\x20Promise\x20file\x20operations\x20—\x20generate,\x20verify,\x20sign,\x20convert,\x20and\x20storage\x20(upload/list/delete\x20on\x20the\x20free\x20official\x20store\x20or\x20a\x20custom\x20service).','actions':['generate','verify','sign','wip2html','upload','storage_list','storage_delete'],'notes':['WIP\x20hash\x20must\x20be\x20non-empty\x20—\x20compute\x20actual\x20hash\x20before\x20calling.','Storage\x20decision:\x20storage=\x27store\x27\x20(default)\x20=\x20official\x20FREE\x20store\x20wip.store.wowok.net,\x2010\x20files\x20per\x20account,\x20files\x20retained\x206\x20months\x20(free\x20best-effort\x20service\x20—\x20force\x20majeure\x20excepted;\x20expired\x20files\x20are\x20deleted\x20ONLY\x20by\x20manual\x20admin\x20purge,\x20never\x20automatically);\x20storage=\x27custom\x27\x20+\x20customBaseUrl\x20=\x20your\x20own\x20or\x20a\x20third-party\x20wip\x20storage\x20service\x20(recommended:\x20no\x20store\x20quota,\x20full\x20control).','Network\x20independence:\x20WIP\x20files\x20are\x20off-chain\x20—\x20one\x20upload\x20serves\x20BOTH\x20testnet\x20and\x20mainnet,\x20and\x20storage_list/storage_delete\x20never\x20touch\x20the\x20chain.','Large\x20WIP\x20files\x20(multi-MB,\x20image-heavy)\x20are\x20network-sensitive:\x20compress\x20images\x20before\x20generate,\x20retry\x20transient\x20upload\x20failures,\x20and\x20verify\x20the\x20returned\x20public\x20URL\x20afterwards\x20with\x20type=\x27verify\x27.']},{'name':'messenger_operation','summary':'Encrypted\x20messenger\x20—\x20watch/send\x20messages,\x20WTS,\x20friendslist,\x20blacklist,\x20guardlist.','actions':['watch_conversations','send_message','send_file','send_required_info','watch_messages','save_attachment','generate_wts','verify_wts','sign_wts','wts2html','proof_message','blacklist','friendslist','guardlist','settings','mark_messages_as_viewed','mark_conversation_as_viewed','pull_messages'],'notes':['Requires\x20messenger-enabled\x20account.','30s\x20timeout\x20—\x20network\x20operations.','Attachment\x20messages\x20return\x20byte-free\x20descriptors\x20(msg.attachment;\x20plaintext\x20is\x20undefined).\x20Use\x20save_attachment\x20{messageId}\x20to\x20persist\x20the\x20file\x20(e.g.\x20before\x20verify_wts);\x20bytes\x20are\x20never\x20embedded\x20in\x20message\x20outputs.','send_required_info\x20assembles\x20selected\x20LocalInfo\x20fields\x20into\x20one\x20E2E\x20message\x20(\x27field:\x20value\x27\x20lines)\x20—\x20the\x20dedicated\x20path\x20for\x20delivering\x20customer_required\x20info.','pull_messages\x20supports\x20allAccounts/accounts\x20for\x20one\x20bounded-concurrency\x20fan-out\x20across\x20accounts.']},{'name':'guard2file','summary':'Export\x20a\x20Guard\x20object\x27s\x20definition\x20to\x20local\x20JSON/Markdown\x20for\x20editing.','notes':['Read-only\x20—\x20use\x20query_toolkit\x20for\x20on-chain\x20queries.']},{'name':'machineNode2file','summary':'Export\x20a\x20Machine\x20object\x27s\x20node\x20definition\x20to\x20local\x20JSON/Markdown\x20for\x20editing.','notes':['Read-only\x20—\x20use\x20query_toolkit\x20for\x20on-chain\x20queries.']},{'name':'query_toolkit','summary':'Query\x20toolkit\x20covering\x20local\x20device\x20data,\x20on-chain\x20blockchain\x20data,\x20and\x20one-call\x20business-intelligence\x20panoramas/review\x20packs.','actions':['local_mark_list','account_list','local_info_list','local_names','token_list','account_balance','onchain_personal_profile','onchain_objects','onchain_received','onchain_transaction','onchain_block','onchain_object_history','onchain_address_activity','address_profile','address_profiles','migration_preflight','token_value_convert','onchain_last_updated','service_panorama','machine_panorama','object_panorama','review_pack','assemble_context','reverse_map','participation_radar','onchain_topology'],'notes':['Read-only\x20—\x20safe\x20to\x20call\x20without\x20confirmation.','local_names\x20resolves\x20a\x20batch\x20of\x20addresses\x20to\x20account/local_mark\x20names\x20(canonical\x20name\x20source\x20for\x20display);\x20address_profile(s)\x20is\x20the\x20one-stop\x20\x27who/what\x20is\x20this\x20address\x27\x20query\x20(classification\x20+\x20reputation\x20+\x20memberships\x20+\x20reverse\x20bindings;\x20batch\x20up\x20to\x2050);\x20migration_preflight\x20detects\x20existing\x20builds\x20on\x20another\x20network\x20and\x20returns\x20the\x20testnet→mainnet\x20migration\x20checklist.','BI\x20query\x20types\x20(one-call\x20panoramas):\x20service_panorama\x20(full\x20Service\x20context:\x20workflow\x20graph\x20+\x20guards\x20+\x20trust\x20+\x20supply\x20chain\x20+\x20BusinessReport\x20+\x20recent\x20orders),\x20machine_panorama\x20(head\x20+\x20fields\x20+\x20workflow\x20graph\x20+\x20Progress\x20list),\x20object_panorama\x20(Progress/Demand/Order/Arb/Repository/Proof\x20detail\x20page\x20—\x20a\x20Proof\x20returns\x20its\x20frozen\x20Merkle\x20root\x20and,\x20with\x20wts_file_path,\x20cross-checks\x20a\x20.wts\x20packet\x20against\x20that\x20anchor),\x20review_pack\x20(typed\x20ReviewPack\x20for\x20the\x20client\x27s\x20ReviewPackRenderer),\x20assemble_context\x20(semantic\x20context\x20from\x20on-chain\x20objects),\x20reverse_map\x20(deterministic\x20L4→L1\x20business\x20report\x20—\x20merchant\x20profile\x20/\x20user\x20risk\x20/\x20game\x20theory),\x20participation_radar\x20(in-flight\x20order\x20participation\x20analysis\x20for\x20ONE\x20account).','onchain_topology\x20=\x20graph\x20evaluation\x20of\x20ONE\x20object\x20(trust\x20+\x20risk\x20+\x20completeness\x20+\x20coverage\x20+\x20unverified\x20over\x20its\x20workflow/guard/fund\x20topology)\x20—\x20the\x20unified\x20read-side\x20trust/risk\x20surface;\x20use\x20when\x20the\x20user\x20asks\x20\x27is\x20this\x20service\x20trustworthy?\x27\x20or\x20\x27should\x20I\x20buy?\x27.','REVIEW\x20SIGNAL\x20GLOSSARY\x20(three\x20layers,\x20never\x20mix):\x20(1)\x20Order\x20review\x20=\x20Repository\x20\x27review\x27\x20key\x20rows,\x20written\x20under\x20the\x20reviewed-edge\x20guard\x20so\x20only\x20completed-order\x20buyers\x20qualify\x20—\x20the\x20ONLY\x20face\x20market\x20exposure\x20consumes.\x20(2)\x20Account-level\x20vote\x20=\x20registrar\x20like/dislike/favor\x20on\x20an\x20Entity\x20(entity_linker\x20votes[])\x20—\x20an\x20account-level\x20signal,\x20NOT\x20the\x20order\x20review\x20channel;\x20show\x20only\x20as\x20auxiliary\x20display\x20with\x20the\x20voter-credibility\x20projection\x20(AC5\x20fresh-account\x20bursts\x20/\x20AC6\x20mutual\x20rings\x20/\x20AC7\x20flooded\x20targets).\x20(3)\x20Demand-side\x20feedback\x20=\x20DemandPresenter\x20acceptance_score\x20(0-100,\x20null\x20=\x20unrated)\x20—\x20the\x20demander\x27s\x20own\x20judgment\x20of\x20presenters,\x20consumed\x20via\x20O4\x20due-diligence\x20projection;\x20sparse\x20by\x20nature,\x20never\x20weighted\x20by\x20the\x20platform.']},{'name':'onchain_table_data','summary':'Dynamic\x20table\x20data\x20queries\x20—\x20paginated\x20table\x20queries\x20and\x20specific\x20table\x20item\x20lookups.','actions':['onchain_table','onchain_table_item_repository_data','onchain_table_item_permission_perm','onchain_table_item_entity_registrar','onchain_table_item_entity_linker','onchain_table_item_entity_contact','onchain_table_item_object_linker_core','onchain_table_item_object_linker_tx','onchain_table_item_reward_record','onchain_table_item_demand_presenter','onchain_table_item_treasury_history','onchain_table_item_machine_node','onchain_table_item_progress_history','onchain_table_item_address_mark','onchain_table_item_entity_order','onchain_orders_of_user','onchain_orders_of_users','onchain_affiliations_of_object','onchain_table_item_generic'],'notes':['Read-only\x20—\x20safe\x20for\x20exploration.','object_linker\x20core\x20(0xaae)\x20=\x20default\x20reverse\x20lookup\x20(bounded\x20core\x20objects);\x20object_linker\x20tx\x20(0xaaf)\x20=\x20operational\x20reverse\x20lookup\x20(orders/progress,\x20lossy\x20FIFO).','entity_order\x20(0xaa8)\x20=\x20global\x20entity->orders\x20reverse\x20index;\x20onchain_orders_of_user\x20resolves\x20each\x20order\x20to\x20its\x20full\x20on-chain\x20Order\x20object\x20with\x20role\x20attributes\x20(is_owner/is_agent).']},{'name':'onchain_events','summary':'Watch\x20on-chain\x20events\x20by\x20type\x20—\x20arbitration,\x20order,\x20progress,\x20demand,\x20entity.','notes':['Read-only\x20—\x20use\x20cursor\x20for\x20pagination.']},{'name':'wowok_buildin_info','summary':'Protocol\x20info\x20—\x20constants,\x20built-in\x20permissions,\x20common\x20mistakes,\x20guard\x20instructions,\x20network,\x20value\x20types,\x20bridge\x20tokens.','actions':['constants','built-in\x20permissions','common\x20mistakes','guard\x20instructions','current\x20network','value\x20types','mainnet\x20bridge\x20tokens'],'notes':['Read-only\x20—\x20authoritative\x20protocol\x20reference.','Use\x20\x27common\x20mistakes\x27\x20before\x20submitting\x20an\x20operation\x20to\x20learn\x20known\x20field-name/unit/workflow\x20pitfalls.']},{'name':'schema_query','summary':'Look\x20up\x20JSON\x20Schemas\x20for\x20MCP\x20tools\x20and\x20on-chain\x20operations\x20—\x20the\x20authoritative\x20reference.\x20Also\x20serves\x20sunk\x20knowledge:\x20tool\x20reference,\x20Guard\x20design\x20patterns,\x20safety\x20rules.','actions':['list','get','get_output','get_field','search','list_operations','get_guard_templates','get_tool_reference','get_guard_design_patterns','get_safety_rules'],'notes':['Always\x20check\x20schema\x20before\x20calling\x20an\x20unfamiliar\x20tool.','get_field\x20takes\x20a\x20dot-path\x20(field_path)\x20for\x20single-field\x20lookup.','get_tool_reference/get_guard_design_patterns/get_safety_rules\x20expose\x20the\x20knowledge\x20sunk\x20from\x20the\x20wowok-tools/guard/safety\x20skills\x20—\x20no\x20skills\x20installation\x20required.']},{'name':'bridge_operation','summary':'Cross-chain\x20bridge\x20between\x20WOW\x20and\x20EVM\x20(Ethereum\x20mainnet).\x20Mainnet\x20only.','actions':['cross_chain_wow_to_evm','cross_chain_evm_to_wow','withdraw','query_active_evm_account','query_supported_evm_chains','query_supported_tokens','query_transfer_list','query_transfer_status','manage_evm_rpc'],'notes':['Only\x20WOW\x20mainnet\x20provides\x20cross-chain\x20functionality.']},{'name':'config_operation','summary':'Runtime\x20service\x20toggles\x20—\x20enable/disable\x20Phase\x202\x20services\x20without\x20restart.','actions':['list','toggle','enable','disable','reset','info'],'notes':['GLM5:\x20harness\x20is\x20default\x20ON\x20with\x20tiered\x20enforcement\x20(off/lightweight/full).']},{'name':'evaluation_operation','summary':'Pluggable\x20business\x20evaluations\x20—\x20match\x20/\x20compose\x20/\x20game\x20(node\x20+\x20path)\x20/\x20evidence\x20review\x20/\x20discovery\x20/\x20market\x20/\x20arbitration\x20score\x20with\x20user\x20injection.','actions':['demand_match','service_match','capability_gap','compose_service','node_game','arb_game','path_reasoning','evidence_review','discover_services','discover_demands','market_metrics','market_operations','anti_cheat','match_discover','arbitration_score','account_events'],'notes':['Read-only;\x20the\x20role\x20decides\x20and\x20acts\x20via\x20onchain_operations.','path_reasoning\x20=\x20path-level\x20game\x20(full-route\x20enumeration\x20+\x20ranking);\x20node_game\x20=\x20single-node\x20best\x20move.','evidence_review\x20=\x20deterministic\x20off-chain\x20evidence\x20closure\x20gate\x20(auto_pass/auto_reject/manual_review).','discover_services\x20=\x20active\x20supply\x20discovery\x20(GraphQL\x20transport\x20required):\x20enumerate\x20all\x20shared\x20Services,\x20location-gate\x20by\x20sensitivity\x20(strict/near/logistics),\x20ranked\x20+\x20consent-gated\x20scope\x20expansion.\x20Passive\x20side\x20=\x20post\x20a\x20Demand\x20(DemandPresenter).','match_discover\x20=\x20one-shot\x20intent→service\x20orchestration\x20(enumerate\x20+\x20location\x20gate\x20+\x206-dimension\x20scoring);\x20discover_demands\x20=\x20supplier-side\x20demand\x20enumeration;\x20market_metrics/market_operations\x20=\x20market\x20measurement\x20(GraphQL\x20required).','arbitration_score\x20=\x20dual-perspective\x20arbitration\x20trust\x20(user-trust\x20+\x20merchant-fairness,\x20combined\x200-100);\x20anti_cheat\x20=\x20fake-review/wash-order\x20detection;\x20account_events\x20=\x20account\x20attention\x20feed\x20(read-only).']},{'name':'watch_operation','summary':'Identity-centric\x20on-chain\x20console\x20—\x20resolve\x20who\x20the\x20account\x20is\x20against\x20an\x20object,\x20expand\x20its\x20relations,\x20and\x20enumerate\x20actionable\x20operations.','actions':['focus','expand','actions'],'notes':['Read-only;\x20distinct\x20from\x20query_toolkit\x20/\x20onchain_table_data\x20(pure\x20data,\x20no\x20identity).','focus\x20=\x20identity\x20resolution\x20(manifest\x20on-chain\x20role\x20⊕\x20persona)\x20+\x20base\x20data;\x20neutral\x20→\x20objective\x20narration,\x20operative\x20role\x20→\x20game\x20reasoning.','expand\x20=\x20direct\x20relations\x20+\x20Service\x20transparent\x20sub-order\x20purchasing\x20graph\x20(frozen\x20forward\x20guards\x20→\x20purchased\x20sub-services\x20+\x20proofs).','actions\x20=\x20actionable\x20operations\x20with\x20executability\x20judgment\x20(order-holder\x20/\x20permission-index\x20/\x20named-operator\x20paths).']},{'name':'persona_operation','summary':'User\x20identity\x20setting\x20(persona)\x20—\x20preferences,\x20strategy,\x20rules,\x20spec;\x20long-term\x20+\x20current\x20layers\x20+\x20strategy→lever\x20mapping\x20+\x20region\x20hint.','actions':['get','list','set','analyze','apply','sync','remove','strategy','region_hint','distill'],'notes':['Read/write\x20local\x20state;\x20account\x20persona\x20overrides\x20system;\x20current\x20overrides\x20long-term.','strategy\x20resolves\x20merchant\x20strategy\x20statements\x20into\x20deterministic\x20infrastructure\x20levers\x20(discount/reward/buy_guard/machine_design).','region_hint\x20reads\x20the\x20local\x20delivery\x20address\x20as\x20a\x20matching\x20hint;\x20`propose`\x20returns\x20a\x20consent-gated\x20save\x20proposal\x20(never\x20auto-writes).','distill\x20turns\x20one\x20goal\x27s\x20memory\x20(outcome,\x20process\x20problems/feedback,\x20objects)\x20into\x20a\x20CURRENT-layer\x20proposal\x20—\x20never\x20auto-writes;\x20persist\x20via\x20set/apply\x20after\x20user\x20confirmation.\x20Industry\x20pack.json\x20files\x20are\x20read-only\x20knowledge\x20and\x20never\x20receive\x20user\x20data.']},{'name':'employee_operation','summary':'Merchant\x20employee\x20organizational\x20profile\x20(LOCAL)\x20+\x20reaction\x20KPI\x20+\x20liability\x20resolution\x20+\x20incentive\x20suggestion.','actions':['set','get','remove','assess_kpi','resolve_liability','suggest_incentive'],'notes':['LOCAL\x20ONLY\x20—\x20on-chain\x20authorization\x20lives\x20in\x20the\x20merchant\x27s\x20Permission\x20(namedOperator/entity).','assess_kpi:\x20node\x20reaction\x20speed\x20vs\x20budget\x20(explicit\x20>\x20stored\x20profile\x20>\x2048h\x20default).\x20Timestamps\x20explicit\x20OR\x20auto-derived\x20from\x20the\x20progress\x20object\x27s\x20monitored\x20ProgressEvents\x20via\x20`progress`;\x20explicit\x20values\x20override\x20derived.','resolve_liability:\x20internal\x20cost\x20split\x20(merchant/employee,\x20hybrid\x20threshold);\x20outward\x20liability\x20toward\x20the\x20customer\x20is\x20ALWAYS\x20the\x20merchant\x27s;\x20order\x20user\x20must\x20be\x20compensated\x20before\x20the\x20workflow\x20resumes.','suggest_incentive:\x20KPIs\x20+\x20WIP\x20acceptance\x20+\x20liability\x20→\x20Reward\x20suggestion\x20(reward_grant/compensation_offset/correction_notice/none).\x20Suggestion\x20ONLY\x20—\x20merchant\x20confirms\x20and\x20executes\x20the\x20on-chain\x20ops\x20separately.']},{'name':'keeper_operation','summary':'Who-benefits-who-pushes\x20keeper:\x20scans\x20the\x20monitor\x20scope\x20for\x20actionable\x20state\x20(unclaimed\x20payments,\x20advanceable\x20workflow\x20nodes,\x20unsettled\x20escrow\x20pools),\x20routes\x20tasks\x20to\x20beneficiaries;\x20manual\x20dismiss/execute\x20+\x20standing\x20auto-execute\x20rules.','actions':['tasks','dismiss','execute','rules','rule_set','rule_remove','config','config_set','scan','status'],'notes':['The\x20chain\x20has\x20NO\x20time-triggered\x20execution\x20—\x20the\x20keeper\x20scans\x20on\x20the\x20monitor\x20loop\x20cadence\x20and\x20surfaces\x20tasks\x20to\x20their\x20beneficiary.','execute\x20runs\x20the\x20on-chain\x20op\x20for\x20one\x20task\x20(user\x20decision);\x20rule_set\x20authorizes\x20auto-execution\x20per\x20detector\x20kind\x20(bounded\x20by\x20config\x20budget/cooldown).','Detectors\x20v1:\x20payment_unclaimed\x20(funds\x20sitting\x20claimable),\x20progress_actionable\x20(a\x20workflow\x20node\x20the\x20beneficiary\x20can\x20advance),\x20settlement_pending\x20(an\x20order\x20on\x20a\x20terminal\x20node\x20whose\x20Allocation\x20pool\x20still\x20holds\x20balance\x20and\x20has\x20emitted\x20no\x20Payment\x20—\x20the\x20escrow\x20is\x20frozen\x20until\x20SOMEONE\x20fires\x20the\x20matching\x20guard).','MANUAL\x20SETTLEMENT\x20(base\x20cognition):\x20a\x20completed/refunded\x20order\x20does\x20NOT\x20release\x20funds\x20by\x20itself.\x20The\x20pool\x20drains\x20only\x20when\x20an\x20account\x20executes\x20allocation_operation\x20alloc_by_guard\x20with\x20a\x20guard\x20that\x20satisfies\x20the\x20allocator.\x20The\x20chain\x20never\x20auto-settles\x20(allocation.move\x20has\x20no\x20frequency/expiry\x20trigger).\x20So\x20\x27completed\x20≠\x20paid\x20out\x27:\x20if\x20a\x20terminal\x20order\x27s\x20pool\x20still\x20has\x20balance,\x20the\x20settlement_pending\x20task\x20is\x20the\x20signal\x20—\x20the\x20merchant\x20(completion\x20terminal)\x20or\x20the\x20buyer\x20(refund\x20terminal)\x20must\x20trigger\x20the\x20guard,\x20then\x20recipients\x20claim\x20their\x20CoinWrappers\x20via\x20payment\x20receive.','settlement_pending\x20and\x20progress_actionable\x20are\x20reminder-only\x20(never\x20auto-executed):\x20triggering\x20a\x20guard\x20releases\x20funds\x20to\x20counterparties\x20and\x20the\x20guard\x20semantics\x20must\x20be\x20reviewed\x20by\x20the\x20beneficiary\x20before\x20spending\x20gas.\x20Only\x20payment_unclaimed\x20(claim-to-self)\x20may\x20carry\x20an\x20auto_execute\x20rule.']},{'name':'intent_radar','summary':'User\x20business\x20intent\x20×\x20chain\x20event\x20matching\x20—\x20persist\x20intents,\x20score\x20events\x20against\x20them.','actions':['save','list','remove','match'],'notes':['Read-only\x20w.r.t.\x20chain;\x20industry/keywords\x20resolved\x20once\x20at\x20save;\x20events\x20supplied\x20or\x20auto-pulled.']},{'name':'goal_operation','summary':'GoalEngine\x20(K3\x2024)\x20—\x20record\x20a\x20user\x20goal\x20and\x20drive\x20it\x20through\x20the\x20nine-station\x20lifecycle\x20(RECOGNIZE→…→COMPLETE)\x20with\x20monitor\x20auto-binding\x20and\x20plan-approval\x20confirm-gate\x20downgrade;\x20also\x20hosts\x20the\x20C1-C4\x20planning\x20pipeline\x20+\x20merchant\x20onboarding\x20wizard.','actions':['create','list','get','approve','advance','pause','complete','abandon','delete','analyze_intent','aggregate_risks','trace_substeps','merchant_guide'],'common_params':{'id':'Goal\x20id\x20(goal_…)\x20—\x20required\x20for\x20get/approve/advance/pause/complete/abandon/delete.','intent_text':'create:\x20raw\x20user\x20intent;\x20goal_type\x20auto-classified\x20(override\x20with\x20goal_type).','account':'create:\x20bind\x20a\x20local\x20account\x20(preflight;\x20goal\x20starts\x20at\x20\x27bound\x27).','stage':'advance:\x20forward-only\x20target\x20stage;\x20\x27paused\x27\x20holds\x20from\x20anywhere.','objects':'advance:\x20ACT-station\x20objects\x20[{type,\x20object}]\x20(deduped).','force':'complete:\x20skip\x20on-chain\x20completion\x20verification\x20(audited\x20as\x20outcome.forced).'},'follow_ups':['monitor_events\x20(goal\x20progress\x20surfaces\x20in\x20the\x20todo\x20stream)','onchain_operations\x20(execute\x20plan\x20steps\x20with\x20env.plan_approval)'],'notes':['Near-duplicate\x20create\x20ADOPTS\x20the\x20active\x20same-type\x20same-account\x20goal\x20(intent\x20Jaccard\x20≥\x200.6)\x20instead\x20of\x20forking.','approve\x20registers\x20a\x20plan\x20approval:\x20calls\x20carrying\x20env.plan_approval=<goal\x20id>\x20auto-pass\x20fail-open\x20ConfirmGate\x20levels\x20(standard/none);\x20fail-closed\x20levels\x20(irreversible/publish/amount)\x20always\x20still\x20ask.','Entering\x20\x27monitoring\x27\x20auto-binds\x20monitor\x20focus\x20(reason=\x27goal\x27,\x20goal_id-stamped)\x20for\x20the\x20goal\x27s\x20objects;\x20demand\x20goals\x20also\x20open\x20a\x20radar\x20intent.\x20complete/abandon\x20tear\x20down\x20ONLY\x20this\x20goal\x27s\x20bindings.','complete\x20verifies\x20the\x20goal-type\x20completion\x20conjunction\x20against\x20chain\x20state\x20(read-only);\x20force=true\x20bypasses\x20and\x20is\x20audited.','delete\x20removes\x20a\x20terminal\x20goal\x20entirely\x20(record\x20+\x20TaskProcess\x20dir);\x20force=true\x20extends\x20it\x20to\x20non-terminal\x20goals\x20(monitor\x20teardown\x20first).','C1-C4\x20planning\x20pipeline\x20(GLM5-31\x20§V3/V4):\x20analyze_intent\x20(intent\x20→\x20objects\x20+\x20puzzle\x20snapshots)\x20→\x20aggregate_risks\x20(puzzles\x20OR\x20intent\x20→\x20calibrated\x20risks\x20+\x20RISK_BLOCKED\x20status)\x20→\x20trace_substeps\x20(substep\x20records\x20→\x20DAG\x20coherence\x20+\x20D-10\x20verdict);\x20merchant_guide\x20=\x2010-step\x20onboarding\x20wizard\x20(stateless\x20guide_state,\x20never\x20executes\x20on-chain\x20—\x20materialize\x20via\x20onchain_operations).\x20All\x20four\x20are\x20pure\x20transformations.']},{'name':'monitor_events','summary':'Persistent\x20monitor\x20event\x20store\x20(shared\x20with\x20the\x20client\x20Monitor\x20page)\x20—\x20paginated\x20events\x20with\x20read\x20flags;\x20mark\x20read/unread.','actions':['query','mark_read','mark_all_read'],'notes':['Events\x20captured\x20by\x20the\x20resident\x20MonitorLoop\x20(client\x20sidecar,\x20or\x20stdio\x20MCP\x20server\x20with\x20MONITOR_LOOP=1)\x20across\x209\x20modules,\x20stored\x20APPEND-ONLY\x20in\x20SQLite\x20(survives\x20restarts)\x20with\x20per-event\x20read\x20flags.','query\x20=\x20paginated\x20newest-first\x20with\x20module/event_type/since/until\x20filters\x20+\x20module_counts/unread_by_module/total_unread;\x20relevant_only\x20(default\x20true)\x20restricts\x20to\x20scope-closure/focus/filter\x20hits\x20(de-noised\x20todo\x20stream);\x20with_reason\x20attaches\x20the\x20relevance\x20annotation\x20+\x20delivered\x20flag;\x20mark_read\x20=\x20idempotent\x20per-event\x20(\x27<eventSeq>:<txDigest>\x27);\x20mark_all_read\x20=\x20optionally\x20module-scoped.','Cross-process:\x20read\x20state\x20is\x20SHARED\x20with\x20the\x20client\x20app\x20(same\x20SQLite\x20store)\x20—\x20marking\x20read\x20here\x20clears\x20the\x20client\x20Monitor\x20unread\x20badge\x20and\x20vice\x20versa.']},{'name':'monitor_subscription','summary':'Monitor\x20subscription\x20config\x20—\x20scope-closure\x20rules,\x20focus\x20objects,\x20per-type\x20todo\x20switches,\x20conditional\x20filters;\x20scope\x20preview\x20+\x20filter\x20dry-run.','actions':['get','save','reset','scope_preview','test_filter'],'notes':['Single\x20configuration\x20entry\x20point\x20for\x20monitor\x20v4\x20(client\x20settings\x20panel\x20and\x20agents\x20share\x20it);\x20save/reset\x20merge\x20+\x20clamp\x20loop\x20params,\x20then\x20trigger\x20an\x20immediate\x20scope\x20re-resolve\x20and\x20schedule\x20a\x20backfill\x20when\x20the\x20closure\x20changed.','scope_preview\x20lists\x20the\x20resolved\x20closure\x20grouped\x20by\x20layer\x20(accounts/permissions/managed_objects/services/orders/order_children/focus)\x20with\x20pagination\x20—\x20inspect\x20before\x20tuning\x20rule\x20switches.','test_filter\x20dry-runs\x20a\x20filter\x20draft\x20over\x20the\x20most\x20recent\x20captured\x20events\x20(default\x20200,\x20max\x201000)\x20returning\x20matched/scanned\x20counts\x20+\x20up\x20to\x205\x20samples\x20—\x20preview\x20noise\x20BEFORE\x20saving.','Capture\x20is\x20unaffected\x20by\x20delivery\x20switches\x20EXCEPT\x20NewPaymentEvent\x20(captured\x20only\x20when\x20switched\x20ON).']},{'name':'industry_pack_operation','summary':'Industry\x20knowledge\x20pack\x20lifecycle\x20—\x20scaffold\x20(merged\x20v2\x20template),\x20scan/register,\x20layer\x20get,\x20diff,\x20reset-to-template,\x20plus\x20industry-dir\x20file\x20operations\x20and\x20the\x20industry\x20mode\x20registry\x20(GLM6/92\x20§E).','actions':['scaffold','list','scan','resolve','list_files','read_file','write_file','get','diff','reset','delete_file','create_file','create_dir','copy','move','rename','recommend_industry','list_modes','derive_user_mode','evolve_user_mode','register_user_mode','unregister_user_mode','register_custom_metric','register_custom_constraint','list_metrics_constraints'],'notes':['LOCAL\x20ONLY\x20—\x20filesystem\x20+\x20in-memory\x20registry;\x20never\x20mutates\x20chain\x20state.','Merged\x20v2\x20layout:\x20pack.json\x20(annotated\x20with\x20_schema/_doc\x20comment\x20fields\x20+\x20personae)\x20+\x20playbook.md;\x20legacy\x20split-file\x20layouts\x20still\x20read\x20for\x20backward\x20compatibility.','reset\x20restores\x20a\x20file\x20or\x20entire\x20pack\x20folder\x20to\x20its\x20pristine\x20annotated\x20template\x20—\x20user\x20edits\x20beyond\x20the\x20target\x20are\x20preserved.','Mode\x20registry\x20(GLM6/92\x20§E):\x20recommend_industry\x20(top-3\x20similar\x20industries\x20+\x20verified\x20reference\x20examples),\x20list_modes,\x20derive_user_mode\x20(customize\x20a\x20builtin),\x20evolve_user_mode,\x20register_user_mode\x20(fully\x20custom;\x20R-M1-11\x20enforced\x20on\x20machine_shape),\x20unregister_user_mode,\x20register_custom_metric\x20/\x20register_custom_constraint\x20(extend\x20evaluation\x20registries),\x20list_metrics_constraints.']},{'name':'benchmark_migration_operation','summary':'MD\x20industry-archetype\x20templates\x20(hot-loaded\x20from\x20.wowok/industry/<industry>/templates/,\x20'+BUILTIN_TEMPLATES['length']+'\x20built-ins\x20across\x20'+new Set(BUILTIN_TEMPLATES['map'](a=>a['industry']))['size']+'\x20industries)\x20+\x20pre-deploy\x20risk\x20scan\x20+\x20one-click\x20competitor\x20migration\x20(import\x20→\x20review\x20→\x20apply\x20via\x20the\x20merchant-guide\x20pipeline).','actions':['template_list','template_get','template_generate','template_scan','migration_import','migration_review','migration_apply'],'common_params':{'template_id':'Template\x20id\x20\x27<industry>/<variant>\x27\x20(required\x20for\x20template_get\x20/\x20template_generate\x20/\x20template_scan\x20/\x20migration_apply),\x20e.g.\x20\x27retail/scale-marketplace\x27.','industry':'Industry\x20filter\x20for\x20template_list;\x20industry\x20hint\x20for\x20migration_import.','description':'Business/competitor\x20description\x20(required\x20for\x20migration_import;\x20optional\x20intent\x20text\x20for\x20template_generate).','url':'Competitor\x20store/profile\x20URL\x20for\x20migration_import\x20(recorded\x20as\x20provenance\x20only).','fee_overrides':'Template\x20fee-parameter\x20overrides\x20for\x20template_generate.','log':'A\x20prior\x20MigrationLog\x20(required\x20for\x20migration_review).','network':'testnet\x20|\x20mainnet\x20for\x20migration_import\x20/\x20migration_apply\x20(default\x20testnet).'},'notes':['Deterministic\x20knowledge\x20lookups\x20+\x20planning;\x20never\x20mutates\x20chain\x20state\x20—\x20template_generate\x20/\x20migration_apply\x20emit\x20creation\x20plans\x20only\x20(materialize\x20via\x20onchain_operations).','Templates\x20are\x20zod-validated\x20MD\x20files\x20hot-loaded\x20from\x20.wowok/industry/<industry>/templates/\x20(the\x20client\x20industry-drawer\x20tree;\x20root\x20env-overridable\x20via\x20WOWOK_TEMPLATES_DIR);\x20the\x20built-in\x20archetypes\x20are\x20seeded\x20idempotently\x20and\x20user\x20edits\x20are\x20never\x20overwritten.','template_scan\x20runs\x20the\x20pre-deploy\x20risk\x20scan\x20(synthetic\x20draft\x20topology\x20through\x20the\x20same\x20rule\x20surface\x20as\x20on-chain\x20analyze\x20+\x20static\x20R1-R10\x20checks);\x20CRITICAL\x20findings\x20block\x20template_generate\x20/\x20migration_apply.','migration_import\x20returns\x20a\x20MigrationLog\x20with\x20mapped\x20/\x20unmapped\x20/\x20manual_review\x20entries,\x20WoWok\x20advantages,\x20customizable\x20business-module\x20ids,\x20a\x20merchant-vs-supplier\x20role\x20assessment\x20and\x20a\x20dry-run\x20risk\x20check.','migration_review\x20surfaces\x20counts\x20+\x20risk\x20status\x20for\x20user\x20confirmation\x20before\x20migration_apply.','mainnet\x20requires\x20explicit\x20user\x20confirmation;\x20the\x20default\x20network\x20is\x20testnet.']},{'name':'service_clone_operation','summary':'Clone\x20an\x20on-chain\x20Service\x20into\x20a\x20new\x20object:\x20read\x20the\x20source\x27s\x20full\x20configuration\x20(service\x20fields,\x20machine\x20graph,\x20guards,\x20permission,\x20allocators)\x20into\x20an\x20editable\x20plan,\x20then\x20rebuild\x20it\x20with\x20optional\x20overrides\x20(token\x20type,\x20network,\x20fees)\x20through\x20the\x20pre-publish\x20gate.','actions':['clone_plan','clone_apply'],'common_params':{'source_service':'Source\x20Service\x20name\x20or\x20address\x20(required\x20for\x20clone_plan).','plan':'A\x20prior\x20ClonePlan,\x20possibly\x20user-edited\x20(required\x20for\x20clone_apply).','overrides':'Optional\x20overrides:\x20token_type,\x20network,\x20name,\x20description,\x20location,\x20sales,\x20compensation_fund,\x20order_allocators,\x20guard_mode,\x20include_fund_step.'},'prerequisites':['query_toolkit\x20(locate\x20the\x20source\x20service)'],'follow_ups':['onchain_operations\x20(execute\x20the\x20emitted\x20payloads)'],'notes':['Deterministic\x20planning\x20only;\x20never\x20mutates\x20chain\x20state\x20—\x20clone_apply\x20emits\x20ordered\x20onchain_operations\x20payloads\x20for\x20the\x20caller\x20to\x20execute.','Guard\x20strategy:\x20guards\x20whose\x20table\x20references\x20the\x20source\x20service\x20address\x20are\x20rebuilt\x20(the\x20address\x20is\x20immutable\x20once\x20embedded);\x20others\x20are\x20reused\x20by\x20address.\x20guard_mode=\x27rebuild_all\x27\x20forces\x20a\x20full\x20rebuild.','Cross-network\x20clones\x20force\x20rebuild_all\x20guards,\x20create\x20a\x20fresh\x20Permission,\x20and\x20drop\x20arbitration/reward/repository/um\x20references\x20(addresses\x20are\x20network-bound).','clone_apply\x20runs\x20the\x20same\x20pre-publish\x20gate\x20as\x20onchain_operations\x20(machine\x20topology\x20audit,\x20allocator\x20guard\x20lint,\x20immutability\x20warnings)\x20before\x20emitting\x20payloads.']},{'name':'strategy_review_operation','summary':'Posture-weighted\x20operating\x20scorecard\x20for\x20one\x20(account,\x20industry):\x20collect\x20evidence\x20into\x20append-only\x20local\x20snapshots,\x20assemble\x20periodic\x20reviews\x20with\x20deterministic\x20pricing/posture\x20advice\x20and\x20current-layer-only\x20persona\x20proposals\x20(never\x20auto-applied).','actions':['collect','review','list_snapshots'],'notes':['Chain\x20reads\x20+\x20local\x20SQLite\x20KV\x20snapshots\x20only;\x20never\x20mutates\x20chain\x20state\x20and\x20never\x20writes\x20the\x20persona.','collect\x20gathers\x2013\x20catalog\x20metrics\x20from\x206\x20evidence\x20sources\x20(journey\x20funnel/order\x20flow/market\x20metrics/discovery\x20competitor\x20count/arbitration\x20trust/account\x20attention);\x20source\x20failures\x20degrade\x20metrics\x20to\x20unavailable/error,\x20never\x20zero-filled;\x20snapshot\x20append\x20failure\x20is\x20fail-soft\x20(stored:false).','review\x20does\x20NOT\x20persist:\x20fresh\x20collection\x20+\x20delta\x20against\x20latest\x20stored\x20snapshot;\x200–100\x20score\x20renormalized\x20over\x20available\x20anchored\x20metrics\x20under\x20volume/balanced/margin\x20weights;\x20cadence\x20from\x20the\x20industry\x20catalog\x20(weekly/two-week/monthly);\x20≤2\x20proposals,\x20each\x20target_layer=\x27current\x27\x20with\x20apply_via\x20persona_operation\x20apply\x20—\x20the\x20user\x20must\x20apply\x20explicitly.','Posture\x20resolution:\x20explicit\x20posture\x20arg\x20→\x20merchant\x20posture\x20in\x20the\x20effective\x20persona\x20→\x20balanced.']},{'name':'workspace_operation','summary':'Local\x20workspace\x20directory\x20(`.wowok/workspace`)\x20—\x20generated\x20review\x20files\x20(machine/guard/wts/wip\x20JSON)\x20and\x20user\x20documents:\x20list/read/search/glob/edit/write\x20+\x20file\x20operations.','actions':['resolve','list','read','write','delete','create_file','create_dir','copy','move','rename','search','glob','edit'],'notes':['LOCAL\x20ONLY\x20—\x20filesystem\x20operations\x20confined\x20to\x20the\x20workspace\x20root;\x20never\x20mutates\x20chain\x20state.','read\x20is\x20the\x20supported\x20way\x20to\x20load\x20a\x20generated\x20JSON\x20as\x20AI\x20context\x20before\x20editing/submitting;\x20optional\x20offset/limit\x20line\x20slicing\x20(1-based,\x20max\x202000\x20lines)\x20and\x20encoding=\x27base64\x27\x20for\x20raw\x20bytes\x20(≤10MB).','search:\x20regex\x20content\x20search\x20(pattern;\x20optional\x20path\x20scope,\x20glob\x20basename\x20filter,\x20ignore_case,\x20max_results\x20≤200,\x20context_lines\x20≤5);\x20skips\x20binary-looking\x20and\x20>5MB\x20files.','glob:\x20wildcard\x20listing\x20on\x20workspace-relative\x20paths\x20—\x20\x27**\x27\x20spans\x20directory\x20segments,\x20\x27*\x27\x20stays\x20within\x20one\x20segment,\x20\x27?\x27\x20=\x20one\x20char.','edit:\x20exact\x20string\x20replacement\x20(path\x20+\x20old_string\x20+\x20new_string);\x20errors\x20when\x20old_string\x20is\x20non-unique\x20unless\x20replace_all=true;\x20refuses\x20files\x20>2MB.']},{'name':'workflow_operation','summary':'Local-account\x20workflow\x20view\x20—\x20list\x20active\x20Progress\x20that\x20at\x20least\x20one\x20local\x20account\x20can\x20advance\x20(permission\x20+\x20guard\x20+\x20executable\x20accounts),\x20advance/hold/unhold\x20a\x20forward,\x20and\x20view\x20a\x20progress\x27s\x20on-chain\x20operation\x20history.','actions':['list','operate','history'],'notes':['list:\x20permission-aware\x20—\x20a\x20forward\x20is\x20executable\x20when\x20(a)\x20namedOperator=\x27\x27\x20and\x20account\x20is\x20order\x20holder,\x20(b)\x20namedOperator=name\x20and\x20account\x20is\x20in\x20progress.namedOperator[name],\x20or\x20(c)\x20permissionIndex\x20set\x20and\x20account\x20is\x20in\x20permission.admin/table.','operate:\x20delegates\x20to\x20the\x20on-chain\x20progress\x20operation\x20(guard-aware);\x20op\x20∈\x20next/hold/unhold/adminUnhold.','history:\x20incrementally\x20syncs\x20a\x20progress\x27s\x20ON-CHAIN\x20Progress.history\x20(append-only\x20u64\x20index)\x20into\x20the\x20local\x20SQLite\x20mirror\x20via\x20a\x20per-progress\x20cursor\x20(only\x20new\x20records\x20pulled),\x20returns\x20the\x20migration\x20timeline\x20newest-first\x20with\x20each\x20migration\x27s\x20session\x20snapshot\x20(forwards\x20/\x20operator\x20/\x20weight\x20/\x20time);\x20runs\x2090-day\x20retention\x20cleanup\x20by\x20default.']},{'name':'permission_operation','summary':'Local-account\x20Permission\x20overview\x20—\x20list\x20Permissions\x20related\x20to\x20local\x20accounts\x20(via\x20entity_permission\x20index)\x20with\x20owner/admin/entity\x20breakdown\x20+\x20related\x20objects\x20via\x20object-linker\x20indexes.','actions':['list'],'notes':['Read-only;\x20reverse-looks-up\x20local\x20accounts\x20via\x20entity_permission\x20@0xaad,\x20then\x20merges/dedups\x20permissions.','Related\x20objects\x20resolved\x20via\x20object-linker\x20reverse\x20indexes\x20(0xaae\x20core\x20/\x200xaaf\x20tx)\x20binding\x20edges,\x20grouped\x20by\x20type\x20via\x20first-byte\x20address\x20tag.','Latest\x20update\x20time\x20derived\x20from\x20the\x20Permission\x27s\x20previousTransaction.']},{'name':'ask_user','summary':'Structured\x20user\x20elicitation\x20—\x20ask\x20the\x20user\x20to\x20choose\x20between\x202-8\x20concrete\x20options\x20and\x20receive\x20a\x20validated\x20structured\x20answer\x20(MCP\x202.0\x20elicitation\x20/\x20desktop\x20option\x20card).','common_params':{'question':'The\x20single\x20decision\x20needed\x20from\x20the\x20user\x20(1-1000\x20chars).','options':'2-8\x20self-contained\x20{id,label,description?}\x20choices.','recommended_id':'id\x20of\x20the\x20professionally\x20recommended\x20option\x20(optional).','multi_select':'true\x20when\x20options\x20are\x20combinable\x20(boolean\x20toggle\x20per\x20option).','allow_freeform':'true\x20to\x20permit\x20an\x20additional\x20free-text\x20answer.','context':'Optional\x20short\x20explanation\x20of\x20why\x20the\x20decision\x20is\x20needed.'},'notes':['Use\x20when\x20a\x20business\x20decision\x20belongs\x20to\x20the\x20user\x20and\x20continuing\x20requires\x20it;\x20never\x20guess\x20or\x20silently\x20default\x20an\x20unanswered\x20choice.','Desktop\x20clients\x20render\x20an\x20option\x20card;\x20MCP\x202.0\x20transports\x20fulfil\x20via\x20elicitation/create;\x20unsupported\x20clients\x20should\x20fall\x20back\x20to\x20a\x20numbered\x20prose\x20question.','action\x20decline/cancel\x20means\x20STOP\x20and\x20ask\x20how\x20to\x20proceed\x20in\x20plain\x20text\x20—\x20do\x20not\x20execute\x20a\x20default\x20path.','Not\x20a\x20safety\x20confirmation\x20—\x20irreversible/publish/amount\x20gates\x20remain\x20handled\x20by\x20confirm_gate.']}];export function getToolReference(a){return TOOLS_REFERENCE['find'](b=>b['name']===a);}export function searchToolReference(a){const b=a['toLowerCase']();return TOOLS_REFERENCE['filter'](c=>{if(c['name']['toLowerCase']()['includes'](b))return!![];if(c['summary']['toLowerCase']()['includes'](b))return!![];if(c['actions']?.['some'](d=>d['toLowerCase']()['includes'](b)))return!![];return![];});}export function getToolSequence(a){const b=getToolReference(a);if(!b)return undefined;return{'prerequisites':b['prerequisites']??[],'tool':b['name'],'follow_ups':b['follow_ups']??[]};}
1
+ import{BUILTIN_TEMPLATES}from'./builtin-templates.js';export const TOOLS_REFERENCE=[{'name':'onchain_operations','summary':'On-chain\x20object\x20creation,\x20modification,\x20and\x20publish\x20for\x20all\x2016\x20Wowok\x20object\x20types.','actions':['service','machine','guard','permission','reward','arb','progress','treasury','demand','repository','contact','order','allocation','personal','payment','proof','gen_passport','gen_proof'],'common_params':{'operation_type':'Object\x20type\x20to\x20create/modify\x20(string\x20enum).','data':'Operation\x20payload\x20—\x20shape\x20varies\x20by\x20operation_type.','object':'Object\x20name\x20or\x20address\x20(for\x20modify-by-id).','namedNew':'New\x20object\x20spec\x20(name,\x20description,\x20tags)\x20for\x20create.','env':'Execution\x20environment\x20(account,\x20network,\x20gas_budget).'},'prerequisites':['account_operation\x20(for\x20account\x20setup)'],'follow_ups':['query_toolkit\x20(verify\x20result)','local_mark_operation\x20(tag\x20object)'],'notes':['publish=true\x20is\x20irreversible\x20—\x20use\x20confirm_gate.','Service/Machine\x20require\x20publish\x20after\x20create\x20before\x20they\x20are\x20visible\x20on-chain.','Use\x20schema_query\x20with\x20action=\x27list_operations\x27\x20to\x20see\x20all\x20operation\x20schemas.','NETWORK:\x20by\x20default\x20omit\x20env.network\x20—\x20the\x20operation\x20runs\x20on\x20the\x20user\x27s\x20CURRENT\x20network\x20(the\x20app\x27s\x20active\x20selection);\x20the\x20confirmation\x20card\x20echoes\x20the\x20actual\x20network.\x20Never\x20guess\x20or\x20invent\x20a\x20network\x20on\x20your\x20own\x20initiative.','NETWORK\x20SWITCH\x20(explicit\x20user\x20intent\x20only):\x20when\x20the\x20user\x27s\x20request\x20clearly\x20targets\x20a\x20DIFFERENT\x20network\x20(e.g.\x20\x22create\x20this\x20permission\x20on\x20testnet\x22\x20while\x20the\x20app\x20is\x20on\x20mainnet),\x20set\x20env.network\x20to\x20that\x20network\x20in\x20THIS\x20call\x20—\x20the\x20client\x20pops\x20a\x20mandatory\x20network-switch\x20confirmation\x20card;\x20only\x20after\x20the\x20user\x20approves\x20does\x20the\x20call\x20(and\x20the\x20whole\x20app)\x20run\x20on\x20the\x20new\x20network.\x20If\x20the\x20user\x20declines,\x20do\x20NOT\x20retry\x20on\x20that\x20network\x20—\x20continue\x20on\x20the\x20current\x20one.\x20Read-only\x20queries\x20(query_toolkit\x20context_network)\x20never\x20need\x20this\x20—\x20they\x20select\x20a\x20network\x20per\x20call\x20without\x20switching.']},{'name':'account_operation','summary':'Local\x20wallet\x20management\x20—\x20generate,\x20suspend,\x20resume,\x20faucet,\x20sign\x20data.','actions':['gen','resume','suspend','faucet','operate','sign','list','info'],'common_params':{'name':'Account\x20name\x20(local\x20identifier).','network':'mainnet\x20|\x20testnet\x20(determines\x20RPC).'},'prerequisites':[],'follow_ups':['onchain_operations\x20(use\x20account\x20for\x20signing)'],'notes':['100%\x20LOCAL\x20—\x20keys\x20never\x20leave\x20the\x20device.','faucet\x20only\x20works\x20on\x20testnet.']},{'name':'local_mark_operation','summary':'Local\x20address\x20book\x20—\x20map\x20human-readable\x20names\x20to\x20blockchain\x20addresses\x20with\x20tags.','actions':['add','remove','update','list','query'],'common_params':{'name':'Local\x20name.','address':'Blockchain\x20address.','tags':'Tag\x20array.'},'notes':['100%\x20LOCAL\x20—\x20never\x20on-chain.','Names\x20are\x20accepted\x20by\x20most\x20on-chain\x20query/panorama\x20tools\x20in\x20place\x20of\x20raw\x20addresses.']},{'name':'local_info_operation','summary':'Local\x20private\x20data\x20management\x20—\x20delivery\x20addresses,\x20phone\x20numbers,\x20contacts.','actions':['add','remove','update','list'],'notes':['100%\x20LOCAL\x20—\x20sensitive\x20data,\x20never\x20on-chain.']},{'name':'local_history_operation','summary':'Local\x20Explorer\x20visit\x20history\x20—\x20recently\x20viewed\x20objects,\x20newest\x20first.','actions':['list\x20(default)','add\x20(upsert\x20by\x20key)','remove\x20(by\x20keys)','clear'],'common_params':{'add':'Record\x20visits:\x20{op:\x27add\x27,\x20data:[{key,\x20address,\x20object_type?,\x20network,\x20time}]}.','remove':'Delete\x20entries:\x20{op:\x27remove\x27,\x20keys:[...]}.','clear':'Erase\x20all\x20history:\x20{op:\x27clear\x27}.'},'notes':['100%\x20LOCAL\x20—\x20visit\x20records\x20never\x20leave\x20the\x20device;\x20display\x20names\x20are\x20never\x20stored\x20(resolved\x20live\x20at\x20render).','Omit\x20every\x20operation\x20field\x20to\x20list\x20history\x20(newest\x20first,\x20auto-pruned\x20to\x20last\x2030\x20days\x20/\x20300\x20entries).','detail\x20visits\x20keep\x20the\x20object\x20type\x20tag;\x20each\x20entry\x20stores\x20the\x20stable\x20object\x20key\x20+\x20canonical\x200x\x20address\x20+\x20network\x20+\x20timestamp.']},{'name':'local_cache_operation','summary':'Device-local\x20SDK\x20read\x20cache\x20—\x20report\x20diagnostics,\x20clear\x20a\x20prefix\x20or\x20everything,\x20re-detect\x20chain\x20identity\x20after\x20a\x20node\x20reset.','actions':['status\x20(read-only)','clear_prefix','clear','refresh_chain_scope'],'common_params':{'status':'Report\x20diagnostics\x20(active\x20chain\x20identity,\x20memory\x20entries,\x20persisted\x20rows):\x20{status:{op:\x27status\x27}}.','clear_prefix':'Drop\x20one\x20cache\x20family:\x20{clear_prefix:{op:\x27clear_prefix\x27,\x20prefix:\x27objectv2\x27}}.','clear':'Drop\x20the\x20whole\x20read\x20cache:\x20{clear:{op:\x27clear\x27}}.','refresh_chain_scope':'Force\x20chain-identity\x20re-detection:\x20{refresh_chain_scope:{op:\x27refresh_chain_scope\x27,\x20network?}}.'},'notes':['100%\x20LOCAL\x20—\x20never\x20on-chain;\x20does\x20NOT\x20touch\x20accounts,\x20marks,\x20info\x20or\x20history\x20(separate\x20stores,\x20separate\x20tools).','USE\x20AFTER\x20A\x20NODE\x20RESET\x20/\x20RESTART,\x20or\x20on\x20\x27object\x200x…\x20version\x200x…\x20is\x20unavailable\x27:\x20the\x20SDK\x20namespaces\x20its\x20cache\x20by\x20chain\x20identity\x20(genesis\x20checkpoint\x20digest),\x20so\x20a\x20reset\x20normally\x20self-heals;\x20refresh_chain_scope\x20forces\x20it\x20when\x20the\x20node\x20was\x20unreachable\x20at\x20startup.','A\x20chain_identity\x20of\x20null\x20in\x20`status`\x20means\x20the\x20cache\x20is\x20NOT\x20reset-safe\x20—\x20run\x20refresh_chain_scope.','Only\x20`status`\x20is\x20read-only;\x20the\x20other\x20sub-ops\x20discard\x20cached\x20reads\x20and\x20re-read\x20from\x20the\x20node\x20next\x20call.']},{'name':'wip_file','summary':'Witness\x20Immutable\x20Promise\x20file\x20operations\x20—\x20generate,\x20verify,\x20sign,\x20convert,\x20and\x20storage\x20(upload/list/delete\x20on\x20the\x20free\x20official\x20store\x20or\x20a\x20custom\x20service).','actions':['generate','verify','sign','wip2html','upload','storage_list','storage_delete'],'notes':['WIP\x20hash\x20must\x20be\x20non-empty\x20—\x20compute\x20actual\x20hash\x20before\x20calling.','Storage\x20decision:\x20storage=\x27store\x27\x20(default)\x20=\x20official\x20FREE\x20store\x20wip.store.wowok.net,\x2010\x20files\x20per\x20account,\x20files\x20retained\x206\x20months\x20(free\x20best-effort\x20service\x20—\x20force\x20majeure\x20excepted;\x20expired\x20files\x20are\x20deleted\x20ONLY\x20by\x20manual\x20admin\x20purge,\x20never\x20automatically);\x20storage=\x27custom\x27\x20+\x20customBaseUrl\x20=\x20your\x20own\x20or\x20a\x20third-party\x20wip\x20storage\x20service\x20(recommended:\x20no\x20store\x20quota,\x20full\x20control).','Network\x20independence:\x20WIP\x20files\x20are\x20off-chain\x20—\x20one\x20upload\x20serves\x20BOTH\x20testnet\x20and\x20mainnet,\x20and\x20storage_list/storage_delete\x20never\x20touch\x20the\x20chain.','Large\x20WIP\x20files\x20(multi-MB,\x20image-heavy)\x20are\x20network-sensitive:\x20compress\x20images\x20before\x20generate,\x20retry\x20transient\x20upload\x20failures,\x20and\x20verify\x20the\x20returned\x20public\x20URL\x20afterwards\x20with\x20type=\x27verify\x27.']},{'name':'messenger_operation','summary':'Encrypted\x20messenger\x20—\x20watch/send\x20messages,\x20WTS,\x20friendslist,\x20blacklist,\x20guardlist.','actions':['watch_conversations','send_message','send_file','send_required_info','watch_messages','save_attachment','generate_wts','verify_wts','sign_wts','wts2html','proof_message','blacklist','friendslist','guardlist','settings','mark_messages_as_viewed','mark_conversation_as_viewed','pull_messages'],'notes':['Requires\x20messenger-enabled\x20account.','30s\x20timeout\x20—\x20network\x20operations.','Attachment\x20messages\x20return\x20byte-free\x20descriptors\x20(msg.attachment;\x20plaintext\x20is\x20undefined).\x20Use\x20save_attachment\x20{messageId}\x20to\x20persist\x20the\x20file\x20(e.g.\x20before\x20verify_wts);\x20bytes\x20are\x20never\x20embedded\x20in\x20message\x20outputs.','send_required_info\x20assembles\x20selected\x20LocalInfo\x20fields\x20into\x20one\x20E2E\x20message\x20(\x27field:\x20value\x27\x20lines)\x20—\x20the\x20dedicated\x20path\x20for\x20delivering\x20customer_required\x20info.','pull_messages\x20supports\x20allAccounts/accounts\x20for\x20one\x20bounded-concurrency\x20fan-out\x20across\x20accounts.']},{'name':'guard2file','summary':'Export\x20a\x20Guard\x20object\x27s\x20definition\x20to\x20local\x20JSON/Markdown\x20for\x20editing.','notes':['Read-only\x20—\x20use\x20query_toolkit\x20for\x20on-chain\x20queries.']},{'name':'machineNode2file','summary':'Export\x20a\x20Machine\x20object\x27s\x20node\x20definition\x20to\x20local\x20JSON/Markdown\x20for\x20editing.','notes':['Read-only\x20—\x20use\x20query_toolkit\x20for\x20on-chain\x20queries.']},{'name':'query_toolkit','summary':'Query\x20toolkit\x20covering\x20local\x20device\x20data,\x20on-chain\x20blockchain\x20data,\x20and\x20one-call\x20business-intelligence\x20panoramas/review\x20packs.','actions':['local_mark_list','account_list','local_info_list','local_names','token_list','account_balance','onchain_personal_profile','onchain_objects','onchain_received','onchain_transaction','onchain_block','onchain_object_history','onchain_address_activity','address_profile','address_profiles','migration_preflight','token_value_convert','onchain_last_updated','service_panorama','machine_panorama','object_panorama','review_pack','assemble_context','reverse_map','participation_radar','onchain_topology'],'notes':['Read-only\x20—\x20safe\x20to\x20call\x20without\x20confirmation.','local_names\x20resolves\x20a\x20batch\x20of\x20addresses\x20to\x20account/local_mark\x20names\x20(canonical\x20name\x20source\x20for\x20display);\x20address_profile(s)\x20is\x20the\x20one-stop\x20\x27who/what\x20is\x20this\x20address\x27\x20query\x20(classification\x20+\x20reputation\x20+\x20memberships\x20+\x20reverse\x20bindings;\x20batch\x20up\x20to\x2050);\x20migration_preflight\x20detects\x20existing\x20builds\x20on\x20another\x20network\x20and\x20returns\x20the\x20testnet→mainnet\x20migration\x20checklist.','BI\x20query\x20types\x20(one-call\x20panoramas):\x20service_panorama\x20(full\x20Service\x20context:\x20workflow\x20graph\x20+\x20guards\x20+\x20trust\x20+\x20supply\x20chain\x20+\x20BusinessReport\x20+\x20recent\x20orders),\x20machine_panorama\x20(head\x20+\x20fields\x20+\x20workflow\x20graph\x20+\x20Progress\x20list),\x20object_panorama\x20(Progress/Demand/Order/Arb/Repository/Proof\x20detail\x20page\x20—\x20a\x20Proof\x20returns\x20its\x20frozen\x20Merkle\x20root\x20and,\x20with\x20wts_file_path,\x20cross-checks\x20a\x20.wts\x20packet\x20against\x20that\x20anchor),\x20review_pack\x20(typed\x20ReviewPack\x20for\x20the\x20client\x27s\x20ReviewPackRenderer),\x20assemble_context\x20(semantic\x20context\x20from\x20on-chain\x20objects),\x20reverse_map\x20(deterministic\x20L4→L1\x20business\x20report\x20—\x20merchant\x20profile\x20/\x20user\x20risk\x20/\x20game\x20theory),\x20participation_radar\x20(in-flight\x20order\x20participation\x20analysis\x20for\x20ONE\x20account).','onchain_topology\x20=\x20graph\x20evaluation\x20of\x20ONE\x20object\x20(trust\x20+\x20risk\x20+\x20completeness\x20+\x20coverage\x20+\x20unverified\x20over\x20its\x20workflow/guard/fund\x20topology)\x20—\x20the\x20unified\x20read-side\x20trust/risk\x20surface;\x20use\x20when\x20the\x20user\x20asks\x20\x27is\x20this\x20service\x20trustworthy?\x27\x20or\x20\x27should\x20I\x20buy?\x27.','REVIEW\x20SIGNAL\x20GLOSSARY\x20(three\x20layers,\x20never\x20mix):\x20(1)\x20Order\x20review\x20=\x20Repository\x20\x27review\x27\x20key\x20rows,\x20written\x20under\x20the\x20reviewed-edge\x20guard\x20so\x20only\x20completed-order\x20buyers\x20qualify\x20—\x20the\x20ONLY\x20face\x20market\x20exposure\x20consumes.\x20(2)\x20Account-level\x20vote\x20=\x20registrar\x20like/dislike/favor\x20on\x20an\x20Entity\x20(entity_linker\x20votes[])\x20—\x20an\x20account-level\x20signal,\x20NOT\x20the\x20order\x20review\x20channel;\x20show\x20only\x20as\x20auxiliary\x20display\x20with\x20the\x20voter-credibility\x20projection\x20(AC5\x20fresh-account\x20bursts\x20/\x20AC6\x20mutual\x20rings\x20/\x20AC7\x20flooded\x20targets).\x20(3)\x20Demand-side\x20feedback\x20=\x20DemandPresenter\x20acceptance_score\x20(0-100,\x20null\x20=\x20unrated)\x20—\x20the\x20demander\x27s\x20own\x20judgment\x20of\x20presenters,\x20consumed\x20via\x20O4\x20due-diligence\x20projection;\x20sparse\x20by\x20nature,\x20never\x20weighted\x20by\x20the\x20platform.']},{'name':'onchain_table_data','summary':'Dynamic\x20table\x20data\x20queries\x20—\x20paginated\x20table\x20queries\x20and\x20specific\x20table\x20item\x20lookups.','actions':['onchain_table','onchain_table_item_repository_data','onchain_table_item_permission_perm','onchain_table_item_entity_registrar','onchain_table_item_entity_linker','onchain_table_item_entity_contact','onchain_table_item_object_linker_core','onchain_table_item_object_linker_tx','onchain_table_item_reward_record','onchain_table_item_demand_presenter','onchain_table_item_treasury_history','onchain_table_item_machine_node','onchain_table_item_progress_history','onchain_table_item_address_mark','onchain_table_item_entity_order','onchain_orders_of_user','onchain_orders_of_users','onchain_affiliations_of_object','onchain_table_item_generic'],'notes':['Read-only\x20—\x20safe\x20for\x20exploration.','object_linker\x20core\x20(0xaae)\x20=\x20default\x20reverse\x20lookup\x20(bounded\x20core\x20objects);\x20object_linker\x20tx\x20(0xaaf)\x20=\x20operational\x20reverse\x20lookup\x20(orders/progress,\x20lossy\x20FIFO).','entity_order\x20(0xaa8)\x20=\x20global\x20entity->orders\x20reverse\x20index;\x20onchain_orders_of_user\x20resolves\x20each\x20order\x20to\x20its\x20full\x20on-chain\x20Order\x20object\x20with\x20role\x20attributes\x20(is_owner/is_agent).']},{'name':'onchain_events','summary':'Watch\x20on-chain\x20events\x20by\x20type\x20—\x20arbitration,\x20order,\x20progress,\x20demand,\x20entity.','notes':['Read-only\x20—\x20use\x20cursor\x20for\x20pagination.']},{'name':'wowok_buildin_info','summary':'Protocol\x20info\x20—\x20constants,\x20built-in\x20permissions,\x20common\x20mistakes,\x20guard\x20instructions,\x20network,\x20value\x20types,\x20bridge\x20tokens.','actions':['constants','built-in\x20permissions','common\x20mistakes','guard\x20instructions','current\x20network','value\x20types','mainnet\x20bridge\x20tokens'],'notes':['Read-only\x20—\x20authoritative\x20protocol\x20reference.','Use\x20\x27common\x20mistakes\x27\x20before\x20submitting\x20an\x20operation\x20to\x20learn\x20known\x20field-name/unit/workflow\x20pitfalls.']},{'name':'schema_query','summary':'Look\x20up\x20JSON\x20Schemas\x20for\x20MCP\x20tools\x20and\x20on-chain\x20operations\x20—\x20the\x20authoritative\x20reference.\x20Also\x20serves\x20sunk\x20knowledge:\x20tool\x20reference,\x20Guard\x20design\x20patterns,\x20safety\x20rules.','actions':['list','get','get_output','get_field','search','list_operations','get_guard_templates','get_tool_reference','get_guard_design_patterns','get_safety_rules'],'notes':['Always\x20check\x20schema\x20before\x20calling\x20an\x20unfamiliar\x20tool.','get_field\x20takes\x20a\x20dot-path\x20(field_path)\x20for\x20single-field\x20lookup.','get_tool_reference/get_guard_design_patterns/get_safety_rules\x20expose\x20the\x20knowledge\x20sunk\x20from\x20the\x20wowok-tools/guard/safety\x20skills\x20—\x20no\x20skills\x20installation\x20required.']},{'name':'bridge_operation','summary':'Cross-chain\x20bridge\x20between\x20WOW\x20and\x20EVM\x20(Ethereum\x20mainnet).\x20Mainnet\x20only.','actions':['cross_chain_wow_to_evm','cross_chain_evm_to_wow','withdraw','query_active_evm_account','query_supported_evm_chains','query_supported_tokens','query_transfer_list','query_transfer_status','manage_evm_rpc'],'notes':['Only\x20WOW\x20mainnet\x20provides\x20cross-chain\x20functionality.']},{'name':'config_operation','summary':'Runtime\x20service\x20toggles\x20—\x20enable/disable\x20Phase\x202\x20services\x20without\x20restart.','actions':['list','toggle','enable','disable','reset','info'],'notes':['GLM5:\x20harness\x20is\x20default\x20ON\x20with\x20tiered\x20enforcement\x20(off/lightweight/full).']},{'name':'evaluation_operation','summary':'Pluggable\x20business\x20evaluations\x20—\x20match\x20/\x20compose\x20/\x20game\x20(node\x20+\x20path)\x20/\x20evidence\x20review\x20/\x20discovery\x20/\x20market\x20/\x20arbitration\x20score\x20with\x20user\x20injection.','actions':['demand_match','service_match','capability_gap','compose_service','node_game','arb_game','path_reasoning','evidence_review','discover_services','discover_demands','market_metrics','market_operations','anti_cheat','match_discover','arbitration_score','account_events'],'notes':['Read-only;\x20the\x20role\x20decides\x20and\x20acts\x20via\x20onchain_operations.','path_reasoning\x20=\x20path-level\x20game\x20(full-route\x20enumeration\x20+\x20ranking);\x20node_game\x20=\x20single-node\x20best\x20move.','evidence_review\x20=\x20deterministic\x20off-chain\x20evidence\x20closure\x20gate\x20(auto_pass/auto_reject/manual_review).','discover_services\x20=\x20active\x20supply\x20discovery\x20(GraphQL\x20transport\x20required):\x20enumerate\x20all\x20shared\x20Services,\x20location-gate\x20by\x20sensitivity\x20(strict/near/logistics),\x20ranked\x20+\x20consent-gated\x20scope\x20expansion.\x20Passive\x20side\x20=\x20post\x20a\x20Demand\x20(DemandPresenter).','match_discover\x20=\x20one-shot\x20intent→service\x20orchestration\x20(enumerate\x20+\x20location\x20gate\x20+\x206-dimension\x20scoring);\x20discover_demands\x20=\x20supplier-side\x20demand\x20enumeration;\x20market_metrics/market_operations\x20=\x20market\x20measurement\x20(GraphQL\x20required).','arbitration_score\x20=\x20dual-perspective\x20arbitration\x20trust\x20(user-trust\x20+\x20merchant-fairness,\x20combined\x200-100);\x20anti_cheat\x20=\x20fake-review/wash-order\x20detection;\x20account_events\x20=\x20account\x20attention\x20feed\x20(read-only).']},{'name':'watch_operation','summary':'Identity-centric\x20on-chain\x20console\x20—\x20resolve\x20who\x20the\x20account\x20is\x20against\x20an\x20object,\x20expand\x20its\x20relations,\x20and\x20enumerate\x20actionable\x20operations.','actions':['focus','expand','actions'],'notes':['Read-only;\x20distinct\x20from\x20query_toolkit\x20/\x20onchain_table_data\x20(pure\x20data,\x20no\x20identity).','focus\x20=\x20identity\x20resolution\x20(manifest\x20on-chain\x20role\x20⊕\x20persona)\x20+\x20base\x20data;\x20neutral\x20→\x20objective\x20narration,\x20operative\x20role\x20→\x20game\x20reasoning.','expand\x20=\x20direct\x20relations\x20+\x20Service\x20transparent\x20sub-order\x20purchasing\x20graph\x20(frozen\x20forward\x20guards\x20→\x20purchased\x20sub-services\x20+\x20proofs).','actions\x20=\x20actionable\x20operations\x20with\x20executability\x20judgment\x20(order-holder\x20/\x20permission-index\x20/\x20named-operator\x20paths).']},{'name':'persona_operation','summary':'User\x20identity\x20setting\x20(persona)\x20—\x20preferences,\x20strategy,\x20rules,\x20spec;\x20long-term\x20+\x20current\x20layers\x20+\x20strategy→lever\x20mapping\x20+\x20region\x20hint.','actions':['get','list','set','analyze','apply','sync','remove','strategy','region_hint','distill'],'notes':['Read/write\x20local\x20state;\x20account\x20persona\x20overrides\x20system;\x20current\x20overrides\x20long-term.','strategy\x20resolves\x20merchant\x20strategy\x20statements\x20into\x20deterministic\x20infrastructure\x20levers\x20(discount/reward/buy_guard/machine_design).','region_hint\x20reads\x20the\x20local\x20delivery\x20address\x20as\x20a\x20matching\x20hint;\x20`propose`\x20returns\x20a\x20consent-gated\x20save\x20proposal\x20(never\x20auto-writes).','distill\x20turns\x20one\x20goal\x27s\x20memory\x20(outcome,\x20process\x20problems/feedback,\x20objects)\x20into\x20a\x20CURRENT-layer\x20proposal\x20—\x20never\x20auto-writes;\x20persist\x20via\x20set/apply\x20after\x20user\x20confirmation.\x20Industry\x20pack.json\x20files\x20are\x20read-only\x20knowledge\x20and\x20never\x20receive\x20user\x20data.']},{'name':'employee_operation','summary':'Merchant\x20employee\x20organizational\x20profile\x20(LOCAL)\x20+\x20reaction\x20KPI\x20+\x20liability\x20resolution\x20+\x20incentive\x20suggestion.','actions':['set','get','remove','assess_kpi','resolve_liability','suggest_incentive'],'notes':['LOCAL\x20ONLY\x20—\x20on-chain\x20authorization\x20lives\x20in\x20the\x20merchant\x27s\x20Permission\x20(namedOperator/entity).','assess_kpi:\x20node\x20reaction\x20speed\x20vs\x20budget\x20(explicit\x20>\x20stored\x20profile\x20>\x2048h\x20default).\x20Timestamps\x20explicit\x20OR\x20auto-derived\x20from\x20the\x20progress\x20object\x27s\x20monitored\x20ProgressEvents\x20via\x20`progress`;\x20explicit\x20values\x20override\x20derived.','resolve_liability:\x20internal\x20cost\x20split\x20(merchant/employee,\x20hybrid\x20threshold);\x20outward\x20liability\x20toward\x20the\x20customer\x20is\x20ALWAYS\x20the\x20merchant\x27s;\x20order\x20user\x20must\x20be\x20compensated\x20before\x20the\x20workflow\x20resumes.','suggest_incentive:\x20KPIs\x20+\x20WIP\x20acceptance\x20+\x20liability\x20→\x20Reward\x20suggestion\x20(reward_grant/compensation_offset/correction_notice/none).\x20Suggestion\x20ONLY\x20—\x20merchant\x20confirms\x20and\x20executes\x20the\x20on-chain\x20ops\x20separately.']},{'name':'keeper_operation','summary':'Who-benefits-who-pushes\x20keeper:\x20scans\x20the\x20monitor\x20scope\x20for\x20actionable\x20state\x20(unclaimed\x20payments,\x20advanceable\x20workflow\x20nodes,\x20unsettled\x20escrow\x20pools),\x20routes\x20tasks\x20to\x20beneficiaries;\x20manual\x20dismiss/execute\x20+\x20standing\x20auto-execute\x20rules.','actions':['tasks','dismiss','execute','rules','rule_set','rule_remove','config','config_set','scan','status'],'notes':['The\x20chain\x20has\x20NO\x20time-triggered\x20execution\x20—\x20the\x20keeper\x20scans\x20on\x20the\x20monitor\x20loop\x20cadence\x20and\x20surfaces\x20tasks\x20to\x20their\x20beneficiary.','execute\x20runs\x20the\x20on-chain\x20op\x20for\x20one\x20task\x20(user\x20decision);\x20rule_set\x20authorizes\x20auto-execution\x20per\x20detector\x20kind\x20(bounded\x20by\x20config\x20budget/cooldown).','Detectors\x20v1:\x20payment_unclaimed\x20(funds\x20sitting\x20claimable),\x20progress_actionable\x20(a\x20workflow\x20node\x20the\x20beneficiary\x20can\x20advance),\x20settlement_pending\x20(an\x20order\x20on\x20a\x20terminal\x20node\x20whose\x20Allocation\x20pool\x20still\x20holds\x20balance\x20and\x20has\x20emitted\x20no\x20Payment\x20—\x20the\x20escrow\x20is\x20frozen\x20until\x20SOMEONE\x20fires\x20the\x20matching\x20guard).','MANUAL\x20SETTLEMENT\x20(base\x20cognition):\x20a\x20completed/refunded\x20order\x20does\x20NOT\x20release\x20funds\x20by\x20itself.\x20The\x20pool\x20drains\x20only\x20when\x20an\x20account\x20executes\x20allocation_operation\x20alloc_by_guard\x20with\x20a\x20guard\x20that\x20satisfies\x20the\x20allocator.\x20The\x20chain\x20never\x20auto-settles\x20(allocation.move\x20has\x20no\x20frequency/expiry\x20trigger).\x20So\x20\x27completed\x20≠\x20paid\x20out\x27:\x20if\x20a\x20terminal\x20order\x27s\x20pool\x20still\x20has\x20balance,\x20the\x20settlement_pending\x20task\x20is\x20the\x20signal\x20—\x20the\x20merchant\x20(completion\x20terminal)\x20or\x20the\x20buyer\x20(refund\x20terminal)\x20must\x20trigger\x20the\x20guard,\x20then\x20recipients\x20claim\x20their\x20CoinWrappers\x20via\x20payment\x20receive.','settlement_pending\x20and\x20progress_actionable\x20are\x20reminder-only\x20(never\x20auto-executed):\x20triggering\x20a\x20guard\x20releases\x20funds\x20to\x20counterparties\x20and\x20the\x20guard\x20semantics\x20must\x20be\x20reviewed\x20by\x20the\x20beneficiary\x20before\x20spending\x20gas.\x20Only\x20payment_unclaimed\x20(claim-to-self)\x20may\x20carry\x20an\x20auto_execute\x20rule.']},{'name':'intent_radar','summary':'User\x20business\x20intent\x20×\x20chain\x20event\x20matching\x20—\x20persist\x20intents,\x20score\x20events\x20against\x20them.','actions':['save','list','remove','match'],'notes':['Read-only\x20w.r.t.\x20chain;\x20industry/keywords\x20resolved\x20once\x20at\x20save;\x20events\x20supplied\x20or\x20auto-pulled.']},{'name':'goal_operation','summary':'GoalEngine\x20(K3\x2024)\x20—\x20record\x20a\x20user\x20goal\x20and\x20drive\x20it\x20through\x20the\x20nine-station\x20lifecycle\x20(RECOGNIZE→…→COMPLETE)\x20with\x20monitor\x20auto-binding\x20and\x20plan-approval\x20confirm-gate\x20downgrade;\x20also\x20hosts\x20the\x20C1-C4\x20planning\x20pipeline\x20+\x20merchant\x20onboarding\x20wizard.','actions':['create','list','get','approve','advance','pause','complete','abandon','delete','analyze_intent','aggregate_risks','trace_substeps','merchant_guide'],'common_params':{'id':'Goal\x20id\x20(goal_…)\x20—\x20required\x20for\x20get/approve/advance/pause/complete/abandon/delete.','intent_text':'create:\x20raw\x20user\x20intent;\x20goal_type\x20auto-classified\x20(override\x20with\x20goal_type).','account':'create:\x20bind\x20a\x20local\x20account\x20(preflight;\x20goal\x20starts\x20at\x20\x27bound\x27).','stage':'advance:\x20forward-only\x20target\x20stage;\x20\x27paused\x27\x20holds\x20from\x20anywhere.','objects':'advance:\x20ACT-station\x20objects\x20[{type,\x20object}]\x20(deduped).','force':'complete:\x20skip\x20on-chain\x20completion\x20verification\x20(audited\x20as\x20outcome.forced).'},'follow_ups':['monitor_events\x20(goal\x20progress\x20surfaces\x20in\x20the\x20todo\x20stream)','onchain_operations\x20(execute\x20plan\x20steps\x20with\x20env.plan_approval)'],'notes':['Near-duplicate\x20create\x20ADOPTS\x20the\x20active\x20same-type\x20same-account\x20goal\x20(intent\x20Jaccard\x20≥\x200.6)\x20instead\x20of\x20forking.','approve\x20registers\x20a\x20plan\x20approval:\x20calls\x20carrying\x20env.plan_approval=<goal\x20id>\x20auto-pass\x20fail-open\x20ConfirmGate\x20levels\x20(standard/none);\x20fail-closed\x20levels\x20(irreversible/publish/amount)\x20always\x20still\x20ask.','Entering\x20\x27monitoring\x27\x20auto-binds\x20monitor\x20focus\x20(reason=\x27goal\x27,\x20goal_id-stamped)\x20for\x20the\x20goal\x27s\x20objects;\x20demand\x20goals\x20also\x20open\x20a\x20radar\x20intent.\x20complete/abandon\x20tear\x20down\x20ONLY\x20this\x20goal\x27s\x20bindings.','complete\x20verifies\x20the\x20goal-type\x20completion\x20conjunction\x20against\x20chain\x20state\x20(read-only);\x20force=true\x20bypasses\x20and\x20is\x20audited.','delete\x20removes\x20a\x20terminal\x20goal\x20entirely\x20(record\x20+\x20TaskProcess\x20dir);\x20force=true\x20extends\x20it\x20to\x20non-terminal\x20goals\x20(monitor\x20teardown\x20first).','C1-C4\x20planning\x20pipeline\x20(GLM5-31\x20§V3/V4):\x20analyze_intent\x20(intent\x20→\x20objects\x20+\x20puzzle\x20snapshots)\x20→\x20aggregate_risks\x20(puzzles\x20OR\x20intent\x20→\x20calibrated\x20risks\x20+\x20RISK_BLOCKED\x20status)\x20→\x20trace_substeps\x20(substep\x20records\x20→\x20DAG\x20coherence\x20+\x20D-10\x20verdict);\x20merchant_guide\x20=\x2010-step\x20onboarding\x20wizard\x20(stateless\x20guide_state,\x20never\x20executes\x20on-chain\x20—\x20materialize\x20via\x20onchain_operations).\x20All\x20four\x20are\x20pure\x20transformations.']},{'name':'monitor_events','summary':'Persistent\x20monitor\x20event\x20store\x20(shared\x20with\x20the\x20client\x20Monitor\x20page)\x20—\x20paginated\x20events\x20with\x20read\x20flags;\x20mark\x20read/unread.','actions':['query','mark_read','mark_all_read'],'notes':['Events\x20captured\x20by\x20the\x20resident\x20MonitorLoop\x20(client\x20sidecar,\x20or\x20stdio\x20MCP\x20server\x20with\x20MONITOR_LOOP=1)\x20across\x209\x20modules,\x20stored\x20APPEND-ONLY\x20in\x20SQLite\x20(survives\x20restarts)\x20with\x20per-event\x20read\x20flags.','query\x20=\x20paginated\x20newest-first\x20with\x20module/event_type/since/until\x20filters\x20+\x20module_counts/unread_by_module/total_unread;\x20relevant_only\x20(default\x20true)\x20restricts\x20to\x20scope-closure/focus/filter\x20hits\x20(de-noised\x20todo\x20stream);\x20with_reason\x20attaches\x20the\x20relevance\x20annotation\x20+\x20delivered\x20flag;\x20mark_read\x20=\x20idempotent\x20per-event\x20(\x27<eventSeq>:<txDigest>\x27);\x20mark_all_read\x20=\x20optionally\x20module-scoped.','Cross-process:\x20read\x20state\x20is\x20SHARED\x20with\x20the\x20client\x20app\x20(same\x20SQLite\x20store)\x20—\x20marking\x20read\x20here\x20clears\x20the\x20client\x20Monitor\x20unread\x20badge\x20and\x20vice\x20versa.']},{'name':'monitor_subscription','summary':'Monitor\x20subscription\x20config\x20—\x20scope-closure\x20rules,\x20focus\x20objects,\x20per-type\x20todo\x20switches,\x20conditional\x20filters;\x20scope\x20preview\x20+\x20filter\x20dry-run.','actions':['get','save','reset','scope_preview','test_filter'],'notes':['Single\x20configuration\x20entry\x20point\x20for\x20monitor\x20v4\x20(client\x20settings\x20panel\x20and\x20agents\x20share\x20it);\x20save/reset\x20merge\x20+\x20clamp\x20loop\x20params,\x20then\x20trigger\x20an\x20immediate\x20scope\x20re-resolve\x20and\x20schedule\x20a\x20backfill\x20when\x20the\x20closure\x20changed.','scope_preview\x20lists\x20the\x20resolved\x20closure\x20grouped\x20by\x20layer\x20(accounts/permissions/managed_objects/services/orders/order_children/focus)\x20with\x20pagination\x20—\x20inspect\x20before\x20tuning\x20rule\x20switches.','test_filter\x20dry-runs\x20a\x20filter\x20draft\x20over\x20the\x20most\x20recent\x20captured\x20events\x20(default\x20200,\x20max\x201000)\x20returning\x20matched/scanned\x20counts\x20+\x20up\x20to\x205\x20samples\x20—\x20preview\x20noise\x20BEFORE\x20saving.','Capture\x20is\x20unaffected\x20by\x20delivery\x20switches\x20EXCEPT\x20NewPaymentEvent\x20(captured\x20only\x20when\x20switched\x20ON).']},{'name':'industry_pack_operation','summary':'Industry\x20knowledge\x20pack\x20lifecycle\x20—\x20scaffold\x20(merged\x20v2\x20template),\x20scan/register,\x20layer\x20get,\x20diff,\x20reset-to-template,\x20plus\x20industry-dir\x20file\x20operations\x20and\x20the\x20industry\x20mode\x20registry\x20(GLM6/92\x20§E).','actions':['scaffold','list','scan','resolve','list_files','read_file','write_file','get','diff','reset','delete_file','create_file','create_dir','copy','move','rename','recommend_industry','list_modes','derive_user_mode','evolve_user_mode','register_user_mode','unregister_user_mode','register_custom_metric','register_custom_constraint','list_metrics_constraints'],'notes':['LOCAL\x20ONLY\x20—\x20filesystem\x20+\x20in-memory\x20registry;\x20never\x20mutates\x20chain\x20state.','Merged\x20v2\x20layout:\x20pack.json\x20(annotated\x20with\x20_schema/_doc\x20comment\x20fields\x20+\x20personae)\x20+\x20playbook.md;\x20legacy\x20split-file\x20layouts\x20still\x20read\x20for\x20backward\x20compatibility.','reset\x20restores\x20a\x20file\x20or\x20entire\x20pack\x20folder\x20to\x20its\x20pristine\x20annotated\x20template\x20—\x20user\x20edits\x20beyond\x20the\x20target\x20are\x20preserved.','Mode\x20registry\x20(GLM6/92\x20§E):\x20recommend_industry\x20(top-3\x20similar\x20industries\x20+\x20verified\x20reference\x20examples),\x20list_modes,\x20derive_user_mode\x20(customize\x20a\x20builtin),\x20evolve_user_mode,\x20register_user_mode\x20(fully\x20custom;\x20R-M1-11\x20enforced\x20on\x20machine_shape),\x20unregister_user_mode,\x20register_custom_metric\x20/\x20register_custom_constraint\x20(extend\x20evaluation\x20registries),\x20list_metrics_constraints.']},{'name':'benchmark_migration_operation','summary':'MD\x20industry-archetype\x20templates\x20(hot-loaded\x20from\x20.wowok/industry/<industry>/templates/,\x20'+BUILTIN_TEMPLATES['length']+'\x20built-ins\x20across\x20'+new Set(BUILTIN_TEMPLATES['map'](a=>a['industry']))['size']+'\x20industries)\x20+\x20pre-deploy\x20risk\x20scan\x20+\x20one-click\x20competitor\x20migration\x20(import\x20→\x20review\x20→\x20apply\x20via\x20the\x20merchant-guide\x20pipeline).','actions':['template_list','template_get','template_generate','template_scan','migration_import','migration_review','migration_apply'],'common_params':{'template_id':'Template\x20id\x20\x27<industry>/<variant>\x27\x20(required\x20for\x20template_get\x20/\x20template_generate\x20/\x20template_scan\x20/\x20migration_apply),\x20e.g.\x20\x27retail/scale-marketplace\x27.','industry':'Industry\x20filter\x20for\x20template_list;\x20industry\x20hint\x20for\x20migration_import.','description':'Business/competitor\x20description\x20(required\x20for\x20migration_import;\x20optional\x20intent\x20text\x20for\x20template_generate).','url':'Competitor\x20store/profile\x20URL\x20for\x20migration_import\x20(recorded\x20as\x20provenance\x20only).','fee_overrides':'Template\x20fee-parameter\x20overrides\x20for\x20template_generate.','log':'A\x20prior\x20MigrationLog\x20(required\x20for\x20migration_review).','network':'testnet\x20|\x20mainnet\x20for\x20migration_import\x20/\x20migration_apply\x20(default\x20testnet).'},'notes':['Deterministic\x20knowledge\x20lookups\x20+\x20planning;\x20never\x20mutates\x20chain\x20state\x20—\x20template_generate\x20/\x20migration_apply\x20emit\x20creation\x20plans\x20only\x20(materialize\x20via\x20onchain_operations).','Templates\x20are\x20zod-validated\x20MD\x20files\x20hot-loaded\x20from\x20.wowok/industry/<industry>/templates/\x20(the\x20client\x20industry-drawer\x20tree;\x20root\x20env-overridable\x20via\x20WOWOK_TEMPLATES_DIR);\x20the\x20built-in\x20archetypes\x20are\x20seeded\x20idempotently\x20and\x20user\x20edits\x20are\x20never\x20overwritten.','template_scan\x20runs\x20the\x20pre-deploy\x20risk\x20scan\x20(synthetic\x20draft\x20topology\x20through\x20the\x20same\x20rule\x20surface\x20as\x20on-chain\x20analyze\x20+\x20static\x20R1-R10\x20checks);\x20CRITICAL\x20findings\x20block\x20template_generate\x20/\x20migration_apply.\x20Every\x20scan\x20face\x20also\x20carries\x20a\x20drift\x20field\x20(disk-vs-catalog\x20provenance:\x20state\x20current/modified/missing/untracked,\x20blocked\x20flag,\x20catalog_version)\x20—\x20template_list\x20rows\x20carry\x20the\x20same\x20disk_state\x20per\x20template.','migration_import\x20returns\x20a\x20MigrationLog\x20with\x20mapped\x20/\x20unmapped\x20/\x20manual_review\x20entries,\x20WoWok\x20advantages,\x20customizable\x20business-module\x20ids,\x20a\x20merchant-vs-supplier\x20role\x20assessment\x20and\x20a\x20dry-run\x20risk\x20check.','migration_review\x20surfaces\x20counts\x20+\x20risk\x20status\x20for\x20user\x20confirmation\x20before\x20migration_apply.','mainnet\x20requires\x20explicit\x20user\x20confirmation;\x20the\x20default\x20network\x20is\x20testnet.']},{'name':'service_clone_operation','summary':'Clone\x20an\x20on-chain\x20Service\x20into\x20a\x20new\x20object:\x20read\x20the\x20source\x27s\x20full\x20configuration\x20(service\x20fields,\x20machine\x20graph,\x20guards,\x20permission,\x20allocators)\x20into\x20an\x20editable\x20plan,\x20then\x20rebuild\x20it\x20with\x20optional\x20overrides\x20(token\x20type,\x20network,\x20fees)\x20through\x20the\x20pre-publish\x20gate.','actions':['clone_plan','clone_apply'],'common_params':{'source_service':'Source\x20Service\x20name\x20or\x20address\x20(required\x20for\x20clone_plan).','plan':'A\x20prior\x20ClonePlan,\x20possibly\x20user-edited\x20(required\x20for\x20clone_apply).','overrides':'Optional\x20overrides:\x20token_type,\x20network,\x20name,\x20description,\x20location,\x20sales,\x20compensation_fund,\x20order_allocators,\x20guard_mode,\x20include_fund_step.'},'prerequisites':['query_toolkit\x20(locate\x20the\x20source\x20service)'],'follow_ups':['onchain_operations\x20(execute\x20the\x20emitted\x20payloads)'],'notes':['Deterministic\x20planning\x20only;\x20never\x20mutates\x20chain\x20state\x20—\x20clone_apply\x20emits\x20ordered\x20onchain_operations\x20payloads\x20for\x20the\x20caller\x20to\x20execute.','Guard\x20strategy:\x20guards\x20whose\x20table\x20references\x20the\x20source\x20service\x20address\x20are\x20rebuilt\x20(the\x20address\x20is\x20immutable\x20once\x20embedded);\x20others\x20are\x20reused\x20by\x20address.\x20guard_mode=\x27rebuild_all\x27\x20forces\x20a\x20full\x20rebuild.','Cross-network\x20clones\x20force\x20rebuild_all\x20guards,\x20create\x20a\x20fresh\x20Permission,\x20and\x20drop\x20arbitration/reward/repository/um\x20references\x20(addresses\x20are\x20network-bound).','clone_apply\x20runs\x20the\x20same\x20pre-publish\x20gate\x20as\x20onchain_operations\x20(machine\x20topology\x20audit,\x20allocator\x20guard\x20lint,\x20immutability\x20warnings)\x20before\x20emitting\x20payloads.']},{'name':'strategy_review_operation','summary':'Posture-weighted\x20operating\x20scorecard\x20for\x20one\x20(account,\x20industry):\x20collect\x20evidence\x20into\x20append-only\x20local\x20snapshots,\x20assemble\x20periodic\x20reviews\x20with\x20deterministic\x20pricing/posture\x20advice\x20and\x20current-layer-only\x20persona\x20proposals\x20(never\x20auto-applied).','actions':['collect','review','list_snapshots'],'notes':['Chain\x20reads\x20+\x20local\x20SQLite\x20KV\x20snapshots\x20only;\x20never\x20mutates\x20chain\x20state\x20and\x20never\x20writes\x20the\x20persona.','collect\x20gathers\x2013\x20catalog\x20metrics\x20from\x206\x20evidence\x20sources\x20(journey\x20funnel/order\x20flow/market\x20metrics/discovery\x20competitor\x20count/arbitration\x20trust/account\x20attention);\x20source\x20failures\x20degrade\x20metrics\x20to\x20unavailable/error,\x20never\x20zero-filled;\x20snapshot\x20append\x20failure\x20is\x20fail-soft\x20(stored:false).','review\x20does\x20NOT\x20persist:\x20fresh\x20collection\x20+\x20delta\x20against\x20latest\x20stored\x20snapshot;\x200–100\x20score\x20renormalized\x20over\x20available\x20anchored\x20metrics\x20under\x20volume/balanced/margin\x20weights;\x20cadence\x20from\x20the\x20industry\x20catalog\x20(weekly/two-week/monthly);\x20≤2\x20proposals,\x20each\x20target_layer=\x27current\x27\x20with\x20apply_via\x20persona_operation\x20apply\x20—\x20the\x20user\x20must\x20apply\x20explicitly.','Posture\x20resolution:\x20explicit\x20posture\x20arg\x20→\x20merchant\x20posture\x20in\x20the\x20effective\x20persona\x20→\x20balanced.']},{'name':'workspace_operation','summary':'Local\x20workspace\x20directory\x20(`.wowok/workspace`)\x20—\x20generated\x20review\x20files\x20(machine/guard/wts/wip\x20JSON)\x20and\x20user\x20documents:\x20list/read/search/glob/edit/write\x20+\x20file\x20operations.','actions':['resolve','list','read','write','delete','create_file','create_dir','copy','move','rename','search','glob','edit'],'notes':['LOCAL\x20ONLY\x20—\x20filesystem\x20operations\x20confined\x20to\x20the\x20workspace\x20root;\x20never\x20mutates\x20chain\x20state.','read\x20is\x20the\x20supported\x20way\x20to\x20load\x20a\x20generated\x20JSON\x20as\x20AI\x20context\x20before\x20editing/submitting;\x20optional\x20offset/limit\x20line\x20slicing\x20(1-based,\x20max\x202000\x20lines)\x20and\x20encoding=\x27base64\x27\x20for\x20raw\x20bytes\x20(≤10MB).','search:\x20regex\x20content\x20search\x20(pattern;\x20optional\x20path\x20scope,\x20glob\x20basename\x20filter,\x20ignore_case,\x20max_results\x20≤200,\x20context_lines\x20≤5);\x20skips\x20binary-looking\x20and\x20>5MB\x20files.','glob:\x20wildcard\x20listing\x20on\x20workspace-relative\x20paths\x20—\x20\x27**\x27\x20spans\x20directory\x20segments,\x20\x27*\x27\x20stays\x20within\x20one\x20segment,\x20\x27?\x27\x20=\x20one\x20char.','edit:\x20exact\x20string\x20replacement\x20(path\x20+\x20old_string\x20+\x20new_string);\x20errors\x20when\x20old_string\x20is\x20non-unique\x20unless\x20replace_all=true;\x20refuses\x20files\x20>2MB.']},{'name':'workflow_operation','summary':'Local-account\x20workflow\x20view\x20—\x20list\x20active\x20Progress\x20that\x20at\x20least\x20one\x20local\x20account\x20can\x20advance\x20(permission\x20+\x20guard\x20+\x20executable\x20accounts),\x20advance/hold/unhold\x20a\x20forward,\x20and\x20view\x20a\x20progress\x27s\x20on-chain\x20operation\x20history.','actions':['list','operate','history'],'notes':['list:\x20permission-aware\x20—\x20a\x20forward\x20is\x20executable\x20when\x20(a)\x20namedOperator=\x27\x27\x20and\x20account\x20is\x20order\x20holder,\x20(b)\x20namedOperator=name\x20and\x20account\x20is\x20in\x20progress.namedOperator[name],\x20or\x20(c)\x20permissionIndex\x20set\x20and\x20account\x20is\x20in\x20permission.admin/table.','operate:\x20delegates\x20to\x20the\x20on-chain\x20progress\x20operation\x20(guard-aware);\x20op\x20∈\x20next/hold/unhold/adminUnhold.','history:\x20incrementally\x20syncs\x20a\x20progress\x27s\x20ON-CHAIN\x20Progress.history\x20(append-only\x20u64\x20index)\x20into\x20the\x20local\x20SQLite\x20mirror\x20via\x20a\x20per-progress\x20cursor\x20(only\x20new\x20records\x20pulled),\x20returns\x20the\x20migration\x20timeline\x20newest-first\x20with\x20each\x20migration\x27s\x20session\x20snapshot\x20(forwards\x20/\x20operator\x20/\x20weight\x20/\x20time);\x20runs\x2090-day\x20retention\x20cleanup\x20by\x20default.']},{'name':'permission_operation','summary':'Local-account\x20Permission\x20overview\x20—\x20list\x20Permissions\x20related\x20to\x20local\x20accounts\x20(via\x20entity_permission\x20index)\x20with\x20owner/admin/entity\x20breakdown\x20+\x20related\x20objects\x20via\x20object-linker\x20indexes.','actions':['list'],'notes':['Read-only;\x20reverse-looks-up\x20local\x20accounts\x20via\x20entity_permission\x20@0xaad,\x20then\x20merges/dedups\x20permissions.','Related\x20objects\x20resolved\x20via\x20object-linker\x20reverse\x20indexes\x20(0xaae\x20core\x20/\x200xaaf\x20tx)\x20binding\x20edges,\x20grouped\x20by\x20type\x20via\x20first-byte\x20address\x20tag.','Latest\x20update\x20time\x20derived\x20from\x20the\x20Permission\x27s\x20previousTransaction.']},{'name':'ask_user','summary':'Structured\x20user\x20elicitation\x20—\x20ask\x20the\x20user\x20to\x20choose\x20between\x202-8\x20concrete\x20options\x20and\x20receive\x20a\x20validated\x20structured\x20answer\x20(MCP\x202.0\x20elicitation\x20/\x20desktop\x20option\x20card).','common_params':{'question':'The\x20single\x20decision\x20needed\x20from\x20the\x20user\x20(1-1000\x20chars).','options':'2-8\x20self-contained\x20{id,label,description?}\x20choices.','recommended_id':'id\x20of\x20the\x20professionally\x20recommended\x20option\x20(optional).','multi_select':'true\x20when\x20options\x20are\x20combinable\x20(boolean\x20toggle\x20per\x20option).','allow_freeform':'true\x20to\x20permit\x20an\x20additional\x20free-text\x20answer.','context':'Optional\x20short\x20explanation\x20of\x20why\x20the\x20decision\x20is\x20needed.'},'notes':['Use\x20when\x20a\x20business\x20decision\x20belongs\x20to\x20the\x20user\x20and\x20continuing\x20requires\x20it;\x20never\x20guess\x20or\x20silently\x20default\x20an\x20unanswered\x20choice.','Desktop\x20clients\x20render\x20an\x20option\x20card;\x20MCP\x202.0\x20transports\x20fulfil\x20via\x20elicitation/create;\x20unsupported\x20clients\x20should\x20fall\x20back\x20to\x20a\x20numbered\x20prose\x20question.','action\x20decline/cancel\x20means\x20STOP\x20and\x20ask\x20how\x20to\x20proceed\x20in\x20plain\x20text\x20—\x20do\x20not\x20execute\x20a\x20default\x20path.','Not\x20a\x20safety\x20confirmation\x20—\x20irreversible/publish/amount\x20gates\x20remain\x20handled\x20by\x20confirm_gate.']}];export function getToolReference(a){return TOOLS_REFERENCE['find'](b=>b['name']===a);}export function searchToolReference(a){const b=a['toLowerCase']();return TOOLS_REFERENCE['filter'](c=>{if(c['name']['toLowerCase']()['includes'](b))return!![];if(c['summary']['toLowerCase']()['includes'](b))return!![];if(c['actions']?.['some'](d=>d['toLowerCase']()['includes'](b)))return!![];return![];});}export function getToolSequence(a){const b=getToolReference(a);if(!b)return undefined;return{'prerequisites':b['prerequisites']??[],'tool':b['name'],'follow_ups':b['follow_ups']??[]};}
@@ -1 +1 @@
1
- import{randomUUID}from'node:crypto';import{Config,SQLiteStorage}from'@wowok/wowok/w/local';import{query_events}from'@wowok/wowok';import{monitorEventStore}from'./EventStore.js';import{subscriptionStore}from'./SubscriptionStore.js';import{loadScopeSnapshot,resolveScope}from'./ScopeResolver.js';import{annotateBatch,backfillAnnotations}from'./EventRouter.js';import{bridgeMonitorProblems}from'./ProblemBridge.js';import{bridgeMonitorSuggestions}from'./SuggestionBridge.js';import{EVENT_MODULE_OF,MONITOR_CAPTURE_TYPES,PAYMENT_EVENT_TYPE,normalizeMonitorEvent}from'./normalize.js';import{LOOP_DEFAULTS}from'./types.js';import{goalStore}from'../goal/GoalStore.js';import{runKeeperScan as a281a,realKeeperScanDeps}from'../keeper/KeeperScan.js';import{addProblem,addSuggestion,listProblems,listSuggestions}from'../task/ProcessStore.js';const LEASE_PREFIX='mon_lease:v4:',SEED_PAGE=0x64,SEED_MAX=0x7d0,POLL_BATCH=0x32,MAX_BACKOFF_MS=0x493e0;function netKey(a){return(a||'default')['replace'](/[^a-zA-Z0-9_-]/g,'_');}function leaseKey(a){return''+LEASE_PREFIX+netKey(a);}function realDeps(){return{'store':monitorEventStore,'configStore':subscriptionStore,'storage':new SQLiteStorage(),'resolveScope':(a,b)=>resolveScope(a,b),'loadScope':a=>loadScopeSnapshot(a),'router':{'annotateBatch':annotateBatch,'backfillAnnotations':backfillAnnotations},'queryEvents':a=>query_events({'type':a['type'],'cursor':a['cursor'],'limit':a['limit'],'order':a['order'],'network':a['network']}),'defaultNetwork':()=>Config['Instance']()['network_get'](),'now':()=>Date['now'](),'pid':process['pid'],'bootId':randomUUID(),'logger':a=>console['error']('[monitor]\x20'+a),'openProblems':a=>bridgeMonitorProblems(a,{'getGoal':(b,c)=>goalStore['get'](b,c),'addProblem':addProblem,'listProblems':listProblems,'logger':b=>console['error']('[monitor]\x20'+b)}),'openSuggestions':a=>bridgeMonitorSuggestions(a,{'getGoal':(b,c)=>goalStore['get'](b,c),'addSuggestion':addSuggestion,'listSuggestions':listSuggestions,'logger':b=>console['error']('[monitor]\x20'+b)}),'runKeeperScan':(a,b)=>a281a(a,b,realKeeperScanDeps()),'setTimer':(a,b)=>setTimeout(a,b),'clearTimer':a=>clearTimeout(a)};}function newRuntime(a){return{'network':a,'started':![],'holdsLease':![],'leaseHolder':null,'timer':undefined,'ticking':![],'scope':undefined,'lastScopeRefreshAt':0x0,'pollIntervalMs':LOOP_DEFAULTS['poll_interval_ms'],'lastTickAt':0x0,'lastNewCount':0x0,'lastSummary':undefined,'consecutiveErrors':0x0,'backoffMs':0x0};}export class MonitorLoop{['deps'];['runtimes']=new Map();constructor(a){this['deps']={...realDeps(),...a??{}};}async['start'](a){let b=a&&a['length']>0x0?a:undefined;if(!b)b=[await this['deps']['defaultNetwork']()];for(const c of b){const d=netKey(c);if(this['runtimes']['has'](d)){const f=this['runtimes']['get'](d);if(f['started'])continue;f['started']=!![],this['schedule'](f,0x0);continue;}const e=newRuntime(c);e['started']=!![],this['runtimes']['set'](d,e);try{const g=await this['deps']['loadScope'](c);g&&(e['scope']=g,e['lastScopeRefreshAt']=Number(g['resolved_at'])||0x0);}catch{}this['schedule'](e,0x0);}return b;}async['stop'](a){const b=a?[netKey(a)]:[...this['runtimes']['keys']()];for(const c of b){const d=this['runtimes']['get'](c);if(!d)continue;d['started']=![];d['timer']!==undefined&&(this['deps']['clearTimer'](d['timer']),d['timer']=undefined);if(d['holdsLease']){d['holdsLease']=![];try{await this['deps']['storage']['del'](leaseKey(d['network']));}catch{}}this['runtimes']['delete'](c);}}['status'](a){const b=a?this['runtimes']['get'](netKey(a)):[...this['runtimes']['values']()][0x0];if(!b)return{'running':![],'lease_holder':null,'last_tick_at':0x0,'last_new_count':0x0,'scope_version':0x0,'backoff_ms':0x0};return{'running':b['started']&&b['holdsLease'],'lease_holder':b['leaseHolder']?b['leaseHolder']['pid']+':'+b['leaseHolder']['boot_id']:null,'last_tick_at':b['lastTickAt'],'last_new_count':b['lastNewCount'],'scope_version':b['scope']?.['version']??0x0,'backoff_ms':b['backoffMs'],...b['lastSummary']?{'last_tick':b['lastSummary']}:{}};}['kick'](a){const b=this['runtimes']['get'](netKey(a));if(!b||!b['started']||!b['holdsLease']||b['ticking'])return;if(this['deps']['now']()-b['lastTickAt']<b['pollIntervalMs'])return;void this['tick'](b['network']);}['invalidateScope'](a){const b=this['runtimes']['get'](netKey(a));if(!b)return;b['scope']=undefined,b['lastScopeRefreshAt']=0x0;}async['tick'](a){const b=netKey(a);let c=this['runtimes']['get'](b);!c&&(c=newRuntime(a),this['runtimes']['set'](b,c));if(c['ticking'])return undefined;c['ticking']=!![];const d=this['deps']['now']();try{const f=await this['deps']['configStore']['getConfig'](a),g=Number(f['loop']?.['poll_interval_ms'])||LOOP_DEFAULTS['poll_interval_ms'];c['pollIntervalMs']=g;const h=await this['acquireLease'](c,g);if(!h)return undefined;const {newCount:i,events:j}=await this['capture'](c,f),k=await this['getScope'](c,f);let l=0x0,m=[];if(i>0x0&&j['length']>0x0){const p=this['deps']['router']['annotateBatch'](j,k,f)['filter'](q=>q['rules']['length']>0x0||q['focus_hit']||q['matched_filters']['length']>0x0);p['length']>0x0&&(await this['deps']['store']['saveAnnotations'](a,p),l=p['length'],m=p);}if(m['length']>0x0&&this['deps']['openProblems'])try{await this['deps']['openProblems']({'network':a,'events':j,'annotations':m,'scope':k});}catch(q){this['deps']['logger']('monitor\x20loop:\x20problem\x20bridge\x20error\x20on\x20'+a+':\x20'+String(q?.['message']??q));}if(m['length']>0x0&&this['deps']['openSuggestions'])try{await this['deps']['openSuggestions']({'network':a,'events':j,'annotations':m,'scope':k});}catch(s){this['deps']['logger']('monitor\x20loop:\x20suggestion\x20bridge\x20error\x20on\x20'+a+':\x20'+String(s?.['message']??s));}if(this['deps']['runKeeperScan'])try{await this['deps']['runKeeperScan'](a,k);}catch(t){this['deps']['logger']('monitor\x20loop:\x20keeper\x20scan\x20error\x20on\x20'+a+':\x20'+String(t?.['message']??t));}const n=Number(f['loop']?.['scope_refresh_ms'])||LOOP_DEFAULTS['scope_refresh_ms'];if(this['deps']['now']()-c['lastScopeRefreshAt']>=n){c['lastScopeRefreshAt']=this['deps']['now']();const {snapshot:u,changed:v}=await this['deps']['resolveScope'](a,f);c['scope']=u;if(v){const w=Number(f['loop']?.['backfill_days']??LOOP_DEFAULTS['backfill_days']),x=await this['deps']['router']['backfillAnnotations'](a,this['deps']['store'],u,w,f);this['deps']['logger']('monitor\x20loop:\x20scope\x20v'+u['version']+'\x20on\x20'+a+'\x20changed\x20—\x20backfill\x20rescanned\x20'+x['rescanned']+',\x20updated\x20'+x['updated']);}}c['lastTickAt']=this['deps']['now'](),c['lastNewCount']=i,c['consecutiveErrors']=0x0,c['backoffMs']=0x0;const o={'captured':j['length'],'annotated':l,'duration_ms':this['deps']['now']()-d};return c['lastSummary']=o,o;}catch(y){const z=String(y?.['message']??y);return this['deps']['logger']('monitor\x20loop:\x20tick\x20error\x20on\x20'+a+':\x20'+z),c['consecutiveErrors']+=0x1,c['backoffMs']=Math['min'](c['pollIntervalMs']*0x2**c['consecutiveErrors'],MAX_BACKOFF_MS),undefined;}finally{c['ticking']=![],c['started']&&this['schedule'](c,c['backoffMs']>0x0?c['backoffMs']:c['pollIntervalMs']);}}['schedule'](a,b){if(a['timer']!==undefined)this['deps']['clearTimer'](a['timer']);const c=this['deps']['setTimer'](()=>{a['timer']=undefined,void this['tick'](a['network']);},Math['max'](0x0,b));c?.['unref']?.(),a['timer']=c;}async['acquireLease'](a,b){const c=leaseKey(a['network']),d=this['deps']['now']();let e;try{const i=await this['deps']['storage']['get'](c);e=i?JSON['parse'](i):undefined;}catch{e=undefined;}const f={'pid':this['deps']['pid'],'boot_id':this['deps']['bootId']},g=!!e&&e['boot_id']===f['boot_id']&&e['pid']===f['pid'],h=!e||d-Number(e['heartbeat_at']??0x0)>0x2*b;if(g||h)return await this['deps']['storage']['put'](c,JSON['stringify']({...f,'heartbeat_at':d})),a['holdsLease']=!![],a['leaseHolder']=f,!![];return a['holdsLease']=![],a['leaseHolder']={'pid':e['pid'],'boot_id':e['boot_id']},![];}async['getScope'](a,b){if(!a['scope'])try{const c=await this['deps']['loadScope'](a['network']);c&&(a['scope']=c,a['lastScopeRefreshAt']=Number(c['resolved_at'])||0x0);}catch{}if(!a['scope']){a['lastScopeRefreshAt']=this['deps']['now']();const {snapshot:d,changed:e}=await this['deps']['resolveScope'](a['network'],b);a['scope']=d;if(e){const f=Number(b['loop']?.['backfill_days']??LOOP_DEFAULTS['backfill_days']);await this['deps']['router']['backfillAnnotations'](a['network'],this['deps']['store'],d,f,b);}}return a['scope'];}async['capture'](a,b){const c=a['network'],d=await this['deps']['store']['getCursors'](c);let f=0x0;const g=[],h=[...MONITOR_CAPTURE_TYPES];if(b['events']?.[PAYMENT_EVENT_TYPE]===!![])h['push'](PAYMENT_EVENT_TYPE);for(const i of h){const j=EVENT_MODULE_OF[i];if(!j)continue;try{const k=d['cursors'][i];let l=null;if(!k){let m=null,n=0x0;while(n<SEED_MAX){const o=await this['deps']['queryEvents']({'type':i,'cursor':m,'limit':Math['min'](SEED_PAGE,SEED_MAX-n),'order':'descending','network':c}),p=(o?.['data']??[])['map'](q=>normalizeMonitorEvent(q));if(p['length']===0x0)break;if(l===null)l=p[0x0];n+=p['length'],f+=await this['deps']['store']['insert'](c,j,p),g['push'](...p);if(!o?.['hasNextPage']||!o?.['nextCursor'])break;m=o['nextCursor'];}}else{const q=await this['deps']['queryEvents']({'type':i,'cursor':k,'limit':POLL_BATCH,'order':'ascending','network':c}),r=(q?.['data']??[])['map'](s=>normalizeMonitorEvent(s));f+=await this['deps']['store']['insert'](c,j,r),g['push'](...r);if(r['length']>0x0)l=r[r['length']-0x1];}if(l?.['id']){const s=d['cursors'][i];(!s||BigInt(l['id']['eventSeq'])>BigInt(s['eventSeq']||'0'))&&(d['cursors'][i]={'eventSeq':String(l['id']['eventSeq']),'txDigest':String(l['id']['txDigest'])});}}catch(t){const u=String(t?.['message']??t);this['deps']['logger']('monitor\x20loop:\x20type\x20'+i+'\x20poll\x20error:\x20'+u),/referenced transaction/i['test'](u)&&(delete d['cursors'][i],this['deps']['logger']('monitor\x20loop:\x20type\x20'+i+'\x20cursor\x20invalid\x20—\x20dropped,\x20will\x20re-seed\x20next\x20cycle'));}}return await this['deps']['store']['saveCursors'](c,d['cursors'],this['deps']['now']()),{'newCount':f,'events':g};}}export const monitorLoop=new MonitorLoop();
1
+ import{randomUUID}from'node:crypto';import{Config,SQLiteStorage}from'@wowok/wowok/w/local';import{query_events}from'@wowok/wowok';import{monitorEventStore}from'./EventStore.js';import{subscriptionStore}from'./SubscriptionStore.js';import{loadScopeSnapshot,resolveScope}from'./ScopeResolver.js';import{annotateBatch,backfillAnnotations}from'./EventRouter.js';import{bridgeMonitorProblems}from'./ProblemBridge.js';import{bridgeMonitorSuggestions}from'./SuggestionBridge.js';import{EVENT_MODULE_OF,MONITOR_CAPTURE_TYPES,PAYMENT_EVENT_TYPE,normalizeMonitorEvent}from'./normalize.js';import{LOOP_DEFAULTS}from'./types.js';import{goalStore}from'../goal/GoalStore.js';import{runKeeperScan as a283a,realKeeperScanDeps}from'../keeper/KeeperScan.js';import{addProblem,addSuggestion,listProblems,listSuggestions}from'../task/ProcessStore.js';const LEASE_PREFIX='mon_lease:v4:',SEED_PAGE=0x64,SEED_MAX=0x7d0,POLL_BATCH=0x32,MAX_BACKOFF_MS=0x493e0;function netKey(a){return(a||'default')['replace'](/[^a-zA-Z0-9_-]/g,'_');}function leaseKey(a){return''+LEASE_PREFIX+netKey(a);}function realDeps(){return{'store':monitorEventStore,'configStore':subscriptionStore,'storage':new SQLiteStorage(),'resolveScope':(a,b)=>resolveScope(a,b),'loadScope':a=>loadScopeSnapshot(a),'router':{'annotateBatch':annotateBatch,'backfillAnnotations':backfillAnnotations},'queryEvents':a=>query_events({'type':a['type'],'cursor':a['cursor'],'limit':a['limit'],'order':a['order'],'network':a['network']}),'defaultNetwork':()=>Config['Instance']()['network_get'](),'now':()=>Date['now'](),'pid':process['pid'],'bootId':randomUUID(),'logger':a=>console['error']('[monitor]\x20'+a),'openProblems':a=>bridgeMonitorProblems(a,{'getGoal':(b,c)=>goalStore['get'](b,c),'addProblem':addProblem,'listProblems':listProblems,'logger':b=>console['error']('[monitor]\x20'+b)}),'openSuggestions':a=>bridgeMonitorSuggestions(a,{'getGoal':(b,c)=>goalStore['get'](b,c),'addSuggestion':addSuggestion,'listSuggestions':listSuggestions,'logger':b=>console['error']('[monitor]\x20'+b)}),'runKeeperScan':(a,b)=>a283a(a,b,realKeeperScanDeps()),'setTimer':(a,b)=>setTimeout(a,b),'clearTimer':a=>clearTimeout(a)};}function newRuntime(a){return{'network':a,'started':![],'holdsLease':![],'leaseHolder':null,'timer':undefined,'ticking':![],'scope':undefined,'lastScopeRefreshAt':0x0,'pollIntervalMs':LOOP_DEFAULTS['poll_interval_ms'],'lastTickAt':0x0,'lastNewCount':0x0,'lastSummary':undefined,'consecutiveErrors':0x0,'backoffMs':0x0};}export class MonitorLoop{['deps'];['runtimes']=new Map();constructor(a){this['deps']={...realDeps(),...a??{}};}async['start'](a){let b=a&&a['length']>0x0?a:undefined;if(!b)b=[await this['deps']['defaultNetwork']()];for(const c of b){const d=netKey(c);if(this['runtimes']['has'](d)){const f=this['runtimes']['get'](d);if(f['started'])continue;f['started']=!![],this['schedule'](f,0x0);continue;}const e=newRuntime(c);e['started']=!![],this['runtimes']['set'](d,e);try{const g=await this['deps']['loadScope'](c);g&&(e['scope']=g,e['lastScopeRefreshAt']=Number(g['resolved_at'])||0x0);}catch{}this['schedule'](e,0x0);}return b;}async['stop'](a){const b=a?[netKey(a)]:[...this['runtimes']['keys']()];for(const c of b){const d=this['runtimes']['get'](c);if(!d)continue;d['started']=![];d['timer']!==undefined&&(this['deps']['clearTimer'](d['timer']),d['timer']=undefined);if(d['holdsLease']){d['holdsLease']=![];try{await this['deps']['storage']['del'](leaseKey(d['network']));}catch{}}this['runtimes']['delete'](c);}}['status'](a){const b=a?this['runtimes']['get'](netKey(a)):[...this['runtimes']['values']()][0x0];if(!b)return{'running':![],'lease_holder':null,'last_tick_at':0x0,'last_new_count':0x0,'scope_version':0x0,'backoff_ms':0x0};return{'running':b['started']&&b['holdsLease'],'lease_holder':b['leaseHolder']?b['leaseHolder']['pid']+':'+b['leaseHolder']['boot_id']:null,'last_tick_at':b['lastTickAt'],'last_new_count':b['lastNewCount'],'scope_version':b['scope']?.['version']??0x0,'backoff_ms':b['backoffMs'],...b['lastSummary']?{'last_tick':b['lastSummary']}:{}};}['kick'](a){const b=this['runtimes']['get'](netKey(a));if(!b||!b['started']||!b['holdsLease']||b['ticking'])return;if(this['deps']['now']()-b['lastTickAt']<b['pollIntervalMs'])return;void this['tick'](b['network']);}['invalidateScope'](a){const b=this['runtimes']['get'](netKey(a));if(!b)return;b['scope']=undefined,b['lastScopeRefreshAt']=0x0;}async['tick'](a){const b=netKey(a);let c=this['runtimes']['get'](b);!c&&(c=newRuntime(a),this['runtimes']['set'](b,c));if(c['ticking'])return undefined;c['ticking']=!![];const d=this['deps']['now']();try{const f=await this['deps']['configStore']['getConfig'](a),g=Number(f['loop']?.['poll_interval_ms'])||LOOP_DEFAULTS['poll_interval_ms'];c['pollIntervalMs']=g;const h=await this['acquireLease'](c,g);if(!h)return undefined;const {newCount:i,events:j}=await this['capture'](c,f),k=await this['getScope'](c,f);let l=0x0,m=[];if(i>0x0&&j['length']>0x0){const p=this['deps']['router']['annotateBatch'](j,k,f)['filter'](q=>q['rules']['length']>0x0||q['focus_hit']||q['matched_filters']['length']>0x0);p['length']>0x0&&(await this['deps']['store']['saveAnnotations'](a,p),l=p['length'],m=p);}if(m['length']>0x0&&this['deps']['openProblems'])try{await this['deps']['openProblems']({'network':a,'events':j,'annotations':m,'scope':k});}catch(q){this['deps']['logger']('monitor\x20loop:\x20problem\x20bridge\x20error\x20on\x20'+a+':\x20'+String(q?.['message']??q));}if(m['length']>0x0&&this['deps']['openSuggestions'])try{await this['deps']['openSuggestions']({'network':a,'events':j,'annotations':m,'scope':k});}catch(s){this['deps']['logger']('monitor\x20loop:\x20suggestion\x20bridge\x20error\x20on\x20'+a+':\x20'+String(s?.['message']??s));}if(this['deps']['runKeeperScan'])try{await this['deps']['runKeeperScan'](a,k);}catch(t){this['deps']['logger']('monitor\x20loop:\x20keeper\x20scan\x20error\x20on\x20'+a+':\x20'+String(t?.['message']??t));}const n=Number(f['loop']?.['scope_refresh_ms'])||LOOP_DEFAULTS['scope_refresh_ms'];if(this['deps']['now']()-c['lastScopeRefreshAt']>=n){c['lastScopeRefreshAt']=this['deps']['now']();const {snapshot:u,changed:v}=await this['deps']['resolveScope'](a,f);c['scope']=u;if(v){const w=Number(f['loop']?.['backfill_days']??LOOP_DEFAULTS['backfill_days']),x=await this['deps']['router']['backfillAnnotations'](a,this['deps']['store'],u,w,f);this['deps']['logger']('monitor\x20loop:\x20scope\x20v'+u['version']+'\x20on\x20'+a+'\x20changed\x20—\x20backfill\x20rescanned\x20'+x['rescanned']+',\x20updated\x20'+x['updated']);}}c['lastTickAt']=this['deps']['now'](),c['lastNewCount']=i,c['consecutiveErrors']=0x0,c['backoffMs']=0x0;const o={'captured':j['length'],'annotated':l,'duration_ms':this['deps']['now']()-d};return c['lastSummary']=o,o;}catch(y){const z=String(y?.['message']??y);return this['deps']['logger']('monitor\x20loop:\x20tick\x20error\x20on\x20'+a+':\x20'+z),c['consecutiveErrors']+=0x1,c['backoffMs']=Math['min'](c['pollIntervalMs']*0x2**c['consecutiveErrors'],MAX_BACKOFF_MS),undefined;}finally{c['ticking']=![],c['started']&&this['schedule'](c,c['backoffMs']>0x0?c['backoffMs']:c['pollIntervalMs']);}}['schedule'](a,b){if(a['timer']!==undefined)this['deps']['clearTimer'](a['timer']);const c=this['deps']['setTimer'](()=>{a['timer']=undefined,void this['tick'](a['network']);},Math['max'](0x0,b));c?.['unref']?.(),a['timer']=c;}async['acquireLease'](a,b){const c=leaseKey(a['network']),d=this['deps']['now']();let e;try{const i=await this['deps']['storage']['get'](c);e=i?JSON['parse'](i):undefined;}catch{e=undefined;}const f={'pid':this['deps']['pid'],'boot_id':this['deps']['bootId']},g=!!e&&e['boot_id']===f['boot_id']&&e['pid']===f['pid'],h=!e||d-Number(e['heartbeat_at']??0x0)>0x2*b;if(g||h)return await this['deps']['storage']['put'](c,JSON['stringify']({...f,'heartbeat_at':d})),a['holdsLease']=!![],a['leaseHolder']=f,!![];return a['holdsLease']=![],a['leaseHolder']={'pid':e['pid'],'boot_id':e['boot_id']},![];}async['getScope'](a,b){if(!a['scope'])try{const c=await this['deps']['loadScope'](a['network']);c&&(a['scope']=c,a['lastScopeRefreshAt']=Number(c['resolved_at'])||0x0);}catch{}if(!a['scope']){a['lastScopeRefreshAt']=this['deps']['now']();const {snapshot:d,changed:e}=await this['deps']['resolveScope'](a['network'],b);a['scope']=d;if(e){const f=Number(b['loop']?.['backfill_days']??LOOP_DEFAULTS['backfill_days']);await this['deps']['router']['backfillAnnotations'](a['network'],this['deps']['store'],d,f,b);}}return a['scope'];}async['capture'](a,b){const c=a['network'],d=await this['deps']['store']['getCursors'](c);let f=0x0;const g=[],h=[...MONITOR_CAPTURE_TYPES];if(b['events']?.[PAYMENT_EVENT_TYPE]===!![])h['push'](PAYMENT_EVENT_TYPE);for(const i of h){const j=EVENT_MODULE_OF[i];if(!j)continue;try{const k=d['cursors'][i];let l=null;if(!k){let m=null,n=0x0;while(n<SEED_MAX){const o=await this['deps']['queryEvents']({'type':i,'cursor':m,'limit':Math['min'](SEED_PAGE,SEED_MAX-n),'order':'descending','network':c}),p=(o?.['data']??[])['map'](q=>normalizeMonitorEvent(q));if(p['length']===0x0)break;if(l===null)l=p[0x0];n+=p['length'],f+=await this['deps']['store']['insert'](c,j,p),g['push'](...p);if(!o?.['hasNextPage']||!o?.['nextCursor'])break;m=o['nextCursor'];}}else{const q=await this['deps']['queryEvents']({'type':i,'cursor':k,'limit':POLL_BATCH,'order':'ascending','network':c}),r=(q?.['data']??[])['map'](s=>normalizeMonitorEvent(s));f+=await this['deps']['store']['insert'](c,j,r),g['push'](...r);if(r['length']>0x0)l=r[r['length']-0x1];}if(l?.['id']){const s=d['cursors'][i];(!s||BigInt(l['id']['eventSeq'])>BigInt(s['eventSeq']||'0'))&&(d['cursors'][i]={'eventSeq':String(l['id']['eventSeq']),'txDigest':String(l['id']['txDigest'])});}}catch(t){const u=String(t?.['message']??t);this['deps']['logger']('monitor\x20loop:\x20type\x20'+i+'\x20poll\x20error:\x20'+u),/referenced transaction/i['test'](u)&&(delete d['cursors'][i],this['deps']['logger']('monitor\x20loop:\x20type\x20'+i+'\x20cursor\x20invalid\x20—\x20dropped,\x20will\x20re-seed\x20next\x20cycle'));}}return await this['deps']['store']['saveCursors'](c,d['cursors'],this['deps']['now']()),{'newCount':f,'events':g};}}export const monitorLoop=new MonitorLoop();
@@ -1,5 +1,5 @@
1
1
  import type { MonitorEventModule } from "./types.js";
2
- export declare const MONITOR_CAPTURE_TYPES: readonly ["NewOrderEvent", "ArbEvent", "VoteEvent", "FeedbackEvent", "DemandPresentEvent", "DemandFeedbackEvent", "DemandChangedEvent", "ProgressEvent", "AllocationEvent", "TreasuryEvent", "RewardClaimEvent", "RewardFundEvent", "ServiceEvent", "NewEntityEvent"];
2
+ export declare const MONITOR_CAPTURE_TYPES: readonly ["NewOrderEvent", "ArbEvent", "VoteEvent", "FeedbackEvent", "DemandPresentEvent", "DemandFeedbackEvent", "DemandChangedEvent", "ProgressEvent", "AllocationEvent", "TreasuryEvent", "RewardClaimEvent", "RewardFundEvent", "ServiceEvent", "NewEntityEvent", "PermissionChangedEvent", "RewardWithdrawEvent", "RepositoryDataOverwriteEvent"];
3
3
  export declare const PAYMENT_EVENT_TYPE = "NewPaymentEvent";
4
4
  export declare const MONITOR_KNOWN_TYPES: readonly string[];
5
5
  export declare const EVENT_MODULE_OF: Record<string, MonitorEventModule>;
@@ -1 +1 @@
1
- export const MONITOR_CAPTURE_TYPES=['NewOrderEvent','ArbEvent','VoteEvent','FeedbackEvent','DemandPresentEvent','DemandFeedbackEvent','DemandChangedEvent','ProgressEvent','AllocationEvent','TreasuryEvent','RewardClaimEvent','RewardFundEvent','ServiceEvent','NewEntityEvent'];export const PAYMENT_EVENT_TYPE='NewPaymentEvent';export const MONITOR_KNOWN_TYPES=[...MONITOR_CAPTURE_TYPES,PAYMENT_EVENT_TYPE];export const EVENT_MODULE_OF={'NewOrderEvent':'order','ArbEvent':'arb','VoteEvent':'arb','FeedbackEvent':'arb','DemandPresentEvent':'demand','DemandFeedbackEvent':'demand','DemandChangedEvent':'demand','ProgressEvent':'progress','AllocationEvent':'treasury','TreasuryEvent':'treasury','RewardClaimEvent':'reward','RewardFundEvent':'reward','ServiceEvent':'service','NewEntityEvent':'entity','NewPaymentEvent':'payment'};export function monitorEventShortType(a){if(!a||typeof a!=='string')return null;if(a['includes']('::order::NewOrderEvent'))return'NewOrderEvent';if(a['includes']('::demand::PresentEvent'))return'DemandPresentEvent';if(a['includes']('::demand::DemandChangedEvent'))return'DemandChangedEvent';if(a['includes']('::demand::DemandEvent'))return'DemandFeedbackEvent';if(a['includes']('::progress::ProgressEvent'))return'ProgressEvent';if(a['includes']('::arb::VoteEvent'))return'VoteEvent';if(a['includes']('::arb::FeedbackEvent'))return'FeedbackEvent';if(a['includes']('::arb::ArbEvent'))return'ArbEvent';if(a['includes']('::registrar::NewEntityEvent'))return'NewEntityEvent';if(a['includes']('::service::ServiceEvent'))return'ServiceEvent';if(a['includes']('::arbitration::ArbitrationEvent'))return'ArbitrationEvent';if(a['includes']('::allocation::AllocationEvent'))return'AllocationEvent';if(a['includes']('::treasury::TreasuryEvent'))return'TreasuryEvent';if(a['includes']('::reward::RewardClaimEvent'))return'RewardClaimEvent';if(a['includes']('::reward::RewardFundEvent'))return'RewardFundEvent';if(a['includes']('::payment::NewPaymentEvent'))return'NewPaymentEvent';return null;}export function normalizeMonitorEvent(a){if(!a||typeof a!=='object')return a;if(MONITOR_KNOWN_TYPES['includes'](a['type'])&&!a['parsedJson_raw'])return a;const b=MONITOR_KNOWN_TYPES['includes'](a['type'])?a['type']:monitorEventShortType(a['type_raw']??a['type']);if(!b)return a;const c=a['parsedJson_raw']??{},d=f=>f&&typeof f==='object'&&!Array['isArray'](f)&&'some'in f?f['some']:f,e={...a,'type':b};switch(b){case'NewOrderEvent':return{...e,'order':d(c['object']),'service':d(c['service'])??null,'progress':d(c['progress'])??null,'discount':d(c['discount'])??null,'allocation':d(c['allocation'])??null,'amount':d(c['amount'])??null};case'DemandPresentEvent':return{...e,'demand':d(c['object']),'service':d(c['service'])??null,'recommend':d(c['recommend'])??null};case'DemandFeedbackEvent':return{...e,'demand':d(c['object']),'service':d(c['service'])??null,'feedback':d(c['feedback'])??null,'acceptance_score':d(c['acceptance_score'])??null};case'ProgressEvent':return{...e,'progress':d(c['object']),'machine':d(c['machine'])??null,'task':d(c['task'])??null,'node':d(c['node'])??null,'forward':d(c['forward'])??null,'hold':d(c['hold'])??null};case'ArbEvent':return{...e,'arb':d(c['object']),'arbitration':d(c['arbitration'])??null,'order':d(c['order'])??null,'status':d(c['status'])??null};case'NewEntityEvent':return{...e,'resource':d(c['resource'])??null,'address':a['sender'],'referrer':d(c['referrer'])??null};case'ServiceEvent':return{...e,'object':d(c['object']),'location':d(c['location'])??null,'description':d(c['description'])??null};case'ArbitrationEvent':return{...e,'object':d(c['object']),'location':d(c['location'])??null,'description':d(c['description'])??null,'fee':d(c['fee'])??null,'voting_guard_count':d(c['voting_guard_count'])??null};case'DemandChangedEvent':return{...e,'object':d(c['object']),'location':d(c['location'])??null,'description':d(c['description'])??null,'rewards':d(c['rewards'])??[]};case'VoteEvent':return{...e,'object':d(c['object']),'voter':d(c['voter'])??null,'agrees':d(c['agrees'])??[],'weight':d(c['weight'])??null};case'FeedbackEvent':return{...e,'object':d(c['object']),'feedback':d(c['feedback'])??null};case'AllocationEvent':return{...e,'object':d(c['object']),'payment':d(c['payment'])??null,'guard':d(c['guard'])??null,'amount':d(c['amount'])??null};case'TreasuryEvent':return{...e,'object':d(c['object']),'op':d(c['op'])??null,'payment':d(c['payment'])??null,'amount':d(c['amount'])??null,'external_guard':d(c['external_guard'])??null,'store_from_id':d(c['store_from_id'])??null};case'RewardClaimEvent':return{...e,'object':d(c['object']),'guard':d(c['guard'])??null,'recipient':d(c['recipient'])??null,'amount':d(c['amount'])??null,'total':d(c['total'])??null,'balance_left':d(c['balance_left'])??null,'store_from_id':d(c['store_from_id'])??null};case'RewardFundEvent':return{...e,'object':d(c['object']),'amount':d(c['amount'])??null,'balance':d(c['balance'])??null,'from_payment':d(c['from_payment'])??null};case'NewPaymentEvent':return{...e,'object':d(c['object']),'info':c['info']?{...c['info'],'for_object':d(c['info']?.['for_object'])??null,'for_guard':d(c['info']?.['for_guard'])??null}:null,'record':Array['isArray'](c['record'])?c['record']:[],'amount':d(c['amount'])??null,'from_object':d(c['from_object'])??null};default:return e;}}export const EVENT_ADDRESS_FIELDS=['object','order','service','demand','progress','arb','arbitration','allocation','discount','machine','task','address','resource','payment','from_payment','from_object'];
1
+ export const MONITOR_CAPTURE_TYPES=['NewOrderEvent','ArbEvent','VoteEvent','FeedbackEvent','DemandPresentEvent','DemandFeedbackEvent','DemandChangedEvent','ProgressEvent','AllocationEvent','TreasuryEvent','RewardClaimEvent','RewardFundEvent','ServiceEvent','NewEntityEvent','PermissionChangedEvent','RewardWithdrawEvent','RepositoryDataOverwriteEvent'];export const PAYMENT_EVENT_TYPE='NewPaymentEvent';export const MONITOR_KNOWN_TYPES=[...MONITOR_CAPTURE_TYPES,PAYMENT_EVENT_TYPE];export const EVENT_MODULE_OF={'NewOrderEvent':'order','ArbEvent':'arb','VoteEvent':'arb','FeedbackEvent':'arb','DemandPresentEvent':'demand','DemandFeedbackEvent':'demand','DemandChangedEvent':'demand','ProgressEvent':'progress','AllocationEvent':'treasury','TreasuryEvent':'treasury','RewardClaimEvent':'reward','RewardFundEvent':'reward','ServiceEvent':'service','NewEntityEvent':'entity','NewPaymentEvent':'payment','PermissionChangedEvent':'permission','RewardWithdrawEvent':'reward','RepositoryDataOverwriteEvent':'repository'};export function monitorEventShortType(a){if(!a||typeof a!=='string')return null;if(a['includes']('::order::NewOrderEvent'))return'NewOrderEvent';if(a['includes']('::demand::PresentEvent'))return'DemandPresentEvent';if(a['includes']('::demand::DemandChangedEvent'))return'DemandChangedEvent';if(a['includes']('::demand::DemandEvent'))return'DemandFeedbackEvent';if(a['includes']('::progress::ProgressEvent'))return'ProgressEvent';if(a['includes']('::arb::VoteEvent'))return'VoteEvent';if(a['includes']('::arb::FeedbackEvent'))return'FeedbackEvent';if(a['includes']('::arb::ArbEvent'))return'ArbEvent';if(a['includes']('::registrar::NewEntityEvent'))return'NewEntityEvent';if(a['includes']('::service::ServiceEvent'))return'ServiceEvent';if(a['includes']('::arbitration::ArbitrationEvent'))return'ArbitrationEvent';if(a['includes']('::allocation::AllocationEvent'))return'AllocationEvent';if(a['includes']('::treasury::TreasuryEvent'))return'TreasuryEvent';if(a['includes']('::reward::RewardClaimEvent'))return'RewardClaimEvent';if(a['includes']('::reward::RewardFundEvent'))return'RewardFundEvent';if(a['includes']('::reward::RewardWithdrawEvent'))return'RewardWithdrawEvent';if(a['includes']('::payment::NewPaymentEvent'))return'NewPaymentEvent';if(a['includes']('::permission::PermissionChangedEvent'))return'PermissionChangedEvent';if(a['includes']('::repository::RepositoryDataOverwriteEvent'))return'RepositoryDataOverwriteEvent';return null;}export function normalizeMonitorEvent(a){if(!a||typeof a!=='object')return a;if(MONITOR_KNOWN_TYPES['includes'](a['type'])&&!a['parsedJson_raw'])return a;const b=MONITOR_KNOWN_TYPES['includes'](a['type'])?a['type']:monitorEventShortType(a['type_raw']??a['type']);if(!b)return a;const c=a['parsedJson_raw']??{},d=f=>f&&typeof f==='object'&&!Array['isArray'](f)&&'some'in f?f['some']:f,e={...a,'type':b};switch(b){case'NewOrderEvent':return{...e,'order':d(c['object']),'service':d(c['service'])??null,'progress':d(c['progress'])??null,'discount':d(c['discount'])??null,'allocation':d(c['allocation'])??null,'amount':d(c['amount'])??null};case'DemandPresentEvent':return{...e,'demand':d(c['object']),'service':d(c['service'])??null,'recommend':d(c['recommend'])??null};case'DemandFeedbackEvent':return{...e,'demand':d(c['object']),'service':d(c['service'])??null,'feedback':d(c['feedback'])??null,'acceptance_score':d(c['acceptance_score'])??null};case'ProgressEvent':return{...e,'progress':d(c['object']),'machine':d(c['machine'])??null,'task':d(c['task'])??null,'node':d(c['node'])??null,'forward':d(c['forward'])??null,'hold':d(c['hold'])??null};case'ArbEvent':return{...e,'arb':d(c['object']),'arbitration':d(c['arbitration'])??null,'order':d(c['order'])??null,'status':d(c['status'])??null};case'NewEntityEvent':return{...e,'resource':d(c['resource'])??null,'address':a['sender'],'referrer':d(c['referrer'])??null};case'PermissionChangedEvent':return{...e,'object':d(c['object']),'old':d(c['old'])??null,'new':d(c['new'])??null,'caller':d(c['caller'])??null};case'RewardWithdrawEvent':return{...e,'object':d(c['object']),'to':d(c['to'])??null,'payment':d(c['payment'])??null,'amount':d(c['amount'])??null,'balance_left':d(c['balance_left'])??null};case'RepositoryDataOverwriteEvent':return{...e,'object':d(c['object']),'id':d(c['id'])??null,'key':d(c['key'])??null};case'ServiceEvent':return{...e,'object':d(c['object']),'location':d(c['location'])??null,'description':d(c['description'])??null};case'ArbitrationEvent':return{...e,'object':d(c['object']),'location':d(c['location'])??null,'description':d(c['description'])??null,'fee':d(c['fee'])??null,'voting_guard_count':d(c['voting_guard_count'])??null};case'DemandChangedEvent':return{...e,'object':d(c['object']),'location':d(c['location'])??null,'description':d(c['description'])??null,'rewards':d(c['rewards'])??[]};case'VoteEvent':return{...e,'object':d(c['object']),'voter':d(c['voter'])??null,'agrees':d(c['agrees'])??[],'weight':d(c['weight'])??null};case'FeedbackEvent':return{...e,'object':d(c['object']),'feedback':d(c['feedback'])??null};case'AllocationEvent':return{...e,'object':d(c['object']),'payment':d(c['payment'])??null,'guard':d(c['guard'])??null,'amount':d(c['amount'])??null};case'TreasuryEvent':return{...e,'object':d(c['object']),'op':d(c['op'])??null,'payment':d(c['payment'])??null,'amount':d(c['amount'])??null,'external_guard':d(c['external_guard'])??null,'store_from_id':d(c['store_from_id'])??null};case'RewardClaimEvent':return{...e,'object':d(c['object']),'guard':d(c['guard'])??null,'recipient':d(c['recipient'])??null,'amount':d(c['amount'])??null,'total':d(c['total'])??null,'balance_left':d(c['balance_left'])??null,'store_from_id':d(c['store_from_id'])??null};case'RewardFundEvent':return{...e,'object':d(c['object']),'amount':d(c['amount'])??null,'balance':d(c['balance'])??null,'from_payment':d(c['from_payment'])??null};case'NewPaymentEvent':return{...e,'object':d(c['object']),'info':c['info']?{...c['info'],'for_object':d(c['info']?.['for_object'])??null,'for_guard':d(c['info']?.['for_guard'])??null}:null,'record':Array['isArray'](c['record'])?c['record']:[],'amount':d(c['amount'])??null,'from_object':d(c['from_object'])??null};default:return e;}}export const EVENT_ADDRESS_FIELDS=['object','order','service','demand','progress','arb','arbitration','allocation','discount','machine','task','address','resource','payment','from_payment','from_object','to','caller','registrar','voted','who'];
@@ -1,4 +1,4 @@
1
- export declare const MONITOR_EVENT_MODULES: readonly ["order", "arb", "demand", "progress", "treasury", "reward", "service", "entity", "payment"];
1
+ export declare const MONITOR_EVENT_MODULES: readonly ["order", "arb", "demand", "progress", "treasury", "reward", "service", "entity", "payment", "permission", "repository"];
2
2
  export type MonitorEventModule = (typeof MONITOR_EVENT_MODULES)[number];
3
3
  export interface RuleHit {
4
4
  rule: "managed_objects" | "merchant_orders" | "my_orders" | "order_children" | "focus";
@@ -1 +1 @@
1
- export const MONITOR_EVENT_MODULES=['order','arb','demand','progress','treasury','reward','service','entity','payment'];export const LOOP_DEFAULTS={'poll_interval_ms':0x3a98,'scope_refresh_ms':0x493e0,'backfill_days':0x7};export const LOOP_MIN={'poll_interval_ms':0x1388,'scope_refresh_ms':0xea60,'backfill_days':0x0};export const DEFAULT_EVENT_SWITCHES={'NewOrderEvent':!![],'ProgressEvent':!![],'ArbEvent':!![],'VoteEvent':!![],'TreasuryEvent':!![],'RewardFundEvent':!![],'RewardClaimEvent':!![],'AllocationEvent':!![],'FeedbackEvent':![],'NewPaymentEvent':![],'DemandChangedEvent':![],'DemandPresentEvent':![],'DemandFeedbackEvent':![],'ServiceEvent':![],'NewEntityEvent':![]};export function defaultSubscriptionConfig(){return{'version':0x2,'enabled':!![],'scope':{'accounts':'local-all','rules':{'managed_objects':!![],'merchant_orders':!![],'my_orders':!![],'order_children':!![],'favor_objects':!![]},'focus_objects':[]},'events':{...DEFAULT_EVENT_SWITCHES},'filters':[],'loop':{...LOOP_DEFAULTS}};}export function normalizeAddr(a){if(!a)return'';const b=a['startsWith']('0x')?a['slice'](0x2):a;return b['toLowerCase']();}
1
+ export const MONITOR_EVENT_MODULES=['order','arb','demand','progress','treasury','reward','service','entity','payment','permission','repository'];export const LOOP_DEFAULTS={'poll_interval_ms':0x3a98,'scope_refresh_ms':0x493e0,'backfill_days':0x7};export const LOOP_MIN={'poll_interval_ms':0x1388,'scope_refresh_ms':0xea60,'backfill_days':0x0};export const DEFAULT_EVENT_SWITCHES={'NewOrderEvent':!![],'ProgressEvent':!![],'ArbEvent':!![],'VoteEvent':!![],'TreasuryEvent':!![],'RewardFundEvent':!![],'RewardClaimEvent':!![],'AllocationEvent':!![],'RewardWithdrawEvent':!![],'PermissionChangedEvent':!![],'RepositoryDataOverwriteEvent':!![],'FeedbackEvent':![],'NewPaymentEvent':![],'DemandChangedEvent':![],'DemandPresentEvent':![],'DemandFeedbackEvent':![],'ServiceEvent':![],'NewEntityEvent':![]};export function defaultSubscriptionConfig(){return{'version':0x2,'enabled':!![],'scope':{'accounts':'local-all','rules':{'managed_objects':!![],'merchant_orders':!![],'my_orders':!![],'order_children':!![],'favor_objects':!![]},'focus_objects':[]},'events':{...DEFAULT_EVENT_SWITCHES},'filters':[],'loop':{...LOOP_DEFAULTS}};}export function normalizeAddr(a){if(!a)return'';const b=a['startsWith']('0x')?a['slice'](0x2):a;return b['toLowerCase']();}
@@ -1 +1 @@
1
- import{initServicePuzzleFromIntent,initMachinePuzzleFromIntent,initAllocationPuzzleFromIntent,initTreasuryPuzzleFromIntent,initArbitrationPuzzleFromIntent,initRewardPuzzleFromIntent,initProgressPuzzleFromIntent,initOrderPuzzleFromIntent,initPuzzleFromIntent as a318a,checkServicePuzzleCompleteness,checkMachinePuzzleCompleteness,checkAllocationPuzzleCompleteness,checkTreasuryPuzzleCompleteness,checkArbitrationPuzzleCompleteness,checkRewardPuzzleCompleteness,checkProgressPuzzleCompleteness,checkOrderPuzzleCompleteness,checkPuzzleCompleteness as a318b}from'../../knowledge/index.js';import{initPuzzleFromIntent as a318c,checkPuzzleCompleteness as a318d}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(a318c,{'primary_goal':c}),'check':c=>b(c,a318d)},'guard':{'init':c=>a(a318a,{'primary_goal':c}),'check':c=>b(c,a318b)}};}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 a320a,checkServicePuzzleCompleteness,checkMachinePuzzleCompleteness,checkAllocationPuzzleCompleteness,checkTreasuryPuzzleCompleteness,checkArbitrationPuzzleCompleteness,checkRewardPuzzleCompleteness,checkProgressPuzzleCompleteness,checkOrderPuzzleCompleteness,checkPuzzleCompleteness as a320b}from'../../knowledge/index.js';import{initPuzzleFromIntent as a320c,checkPuzzleCompleteness as a320d}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(a320c,{'primary_goal':c}),'check':c=>b(c,a320d)},'guard':{'init':c=>a(a320a,{'primary_goal':c}),'check':c=>b(c,a320b)}};}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.';}
@@ -20,6 +20,7 @@ export interface GameTheoryConstraint {
20
20
  mitigationSignals: string[][];
21
21
  mitigatingModules: BusinessModuleId[];
22
22
  recommendation: string;
23
+ appliesWhen?: (intent: BusinessIntent) => boolean;
23
24
  }
24
25
  export interface GameTheoryCheckResult {
25
26
  scenario: GameScenario;