@wowok/agent-mcp 2.7.3 → 2.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/dist/evaluation/builtins/arbitration-score.d.ts +1 -1
  2. package/dist/evaluation/builtins/arbitration-score.js +1 -1
  3. package/dist/index.js +1 -1
  4. package/dist/knowledge/arbitration-ledger.js +1 -1
  5. package/dist/knowledge/demand-confirm.js +1 -1
  6. package/dist/knowledge/demand-risk.js +1 -1
  7. package/dist/knowledge/demand-translation.js +1 -1
  8. package/dist/knowledge/guard-design-patterns.js +1 -1
  9. package/dist/knowledge/index.d.ts +2 -2
  10. package/dist/knowledge/index.js +1 -1
  11. package/dist/knowledge/onchain-constants.d.ts +2 -2
  12. package/dist/knowledge/onchain-constants.js +1 -1
  13. package/dist/knowledge/payment-risk.js +1 -1
  14. package/dist/knowledge/permission-context.d.ts +11 -0
  15. package/dist/knowledge/permission-context.js +1 -1
  16. package/dist/knowledge/personal-risk.js +1 -1
  17. package/dist/knowledge/progress-ledger.js +1 -1
  18. package/dist/knowledge/progress-risk.js +1 -1
  19. package/dist/knowledge/progress-templates.js +1 -1
  20. package/dist/knowledge/progress-translation.js +1 -1
  21. package/dist/knowledge/registrar-risk.js +1 -1
  22. package/dist/knowledge/registrar-translation.js +1 -1
  23. package/dist/knowledge/reward-ledger.js +1 -1
  24. package/dist/knowledge/reward-translation.js +1 -1
  25. package/dist/knowledge/tools-reference.js +1 -1
  26. package/dist/knowledge/treasury-context.d.ts +1 -1
  27. package/dist/knowledge/treasury-context.js +1 -1
  28. package/dist/knowledge/treasury-ledger.js +1 -1
  29. package/dist/knowledge/treasury-risk.js +1 -1
  30. package/dist/knowledge/util-confirm.js +1 -1
  31. package/dist/knowledge/util-risk.js +1 -1
  32. package/dist/knowledge/util-translation.d.ts +3 -2
  33. package/dist/knowledge/util-translation.js +1 -1
  34. package/dist/knowledge/workflow-guidance.d.ts +64 -0
  35. package/dist/knowledge/workflow-guidance.js +1 -1
  36. package/dist/project/evaluation.js +1 -1
  37. package/dist/project/graph-builder.d.ts +2 -2
  38. package/dist/project/graph-builder.js +1 -1
  39. package/dist/project/semantic-assembler.d.ts +2 -2
  40. package/dist/project/semantic-assembler.js +1 -1
  41. package/dist/schema/evaluation/index.d.ts +1 -1
  42. package/dist/schema/evaluation/index.js +1 -1
  43. package/dist/schema/index.d.ts +2 -0
  44. package/dist/schema/index.js +1 -1
  45. package/dist/schema/operations.d.ts +251 -2
  46. package/dist/schema/operations.js +1 -1
  47. package/dist/schema/permission/index.d.ts +121 -0
  48. package/dist/schema/permission/index.js +1 -0
  49. package/dist/schema/query/index.d.ts +223 -22
  50. package/dist/schema/query/index.js +1 -1
  51. package/dist/schema/schema-version.js +1 -1
  52. package/dist/schema/workflow/index.d.ts +161 -0
  53. package/dist/schema/workflow/index.js +1 -0
  54. package/dist/schema-query-impl/index.js +1 -1
  55. package/dist/schemas/evaluation_operation.schema.json +2 -2
  56. package/dist/schemas/index.json +13 -1
  57. package/dist/schemas/onchain_table_data.output.json +821 -5
  58. package/dist/schemas/onchain_table_data.schema.json +154 -1
  59. package/dist/schemas/permission_operation.output.json +173 -0
  60. package/dist/schemas/permission_operation.schema.json +39 -0
  61. package/dist/schemas/query_toolkit.output.json +15 -15
  62. package/dist/schemas/workflow_operation.output.json +164 -0
  63. package/dist/schemas/workflow_operation.schema.json +116 -0
  64. package/dist/tools/handlers/config.js +1 -1
  65. package/dist/tools/handlers/evaluation.js +1 -1
  66. package/dist/tools/handlers/onchain.js +1 -1
  67. package/dist/tools/handlers/permission.d.ts +2 -0
  68. package/dist/tools/handlers/permission.js +1 -0
  69. package/dist/tools/handlers/query.js +1 -1
  70. package/dist/tools/handlers/workflow.d.ts +2 -0
  71. package/dist/tools/handlers/workflow.js +1 -0
  72. package/dist/tools/handlers/workspace.d.ts +2 -0
  73. package/dist/tools/handlers/workspace.js +1 -1
  74. package/dist/tools/index.js +1 -1
  75. package/dist/tools/shared.js +1 -1
  76. package/package.json +2 -2
@@ -1 +1 @@
1
- import{isProgressBuiltinPermission,getBuiltinPermissionByIndex}from'./progress-ledger.js';export const PROGRESS_SEMANTIC_TO_SCHEMA_RULES=[{'id':'P-PR-01','pattern_name':'Advance\x20Progress\x20(next\x20/\x20order_next)','semantic_intent':'Push\x20Progress\x20forward\x20via\x20a\x20Forward\x20definition;\x20accumulate\x20weight,\x20possibly\x20complete\x20session','match_keywords':['next','advance','proceed','complete\x20forward'],'schema_fields':['object','operate(operation,\x20op=\x27next\x27)'],'example_json':{'object':'0xPROGRESS_ADDRESS','operate':{'operation':{'next_node_name':'shipped','forward':'ship'},'op':'next','message':'Order\x20shipped\x20via\x20FedEx,\x20tracking\x2012345'}},'reverse_explanation':'operate.op=\x27next\x27\x20→\x20calls\x20progress::next\x20or\x20order_next\x20(if\x20task\x20bound).\x20'+'Move\x20accumulates\x20forward.weight;\x20on\x20reaching\x20threshold,\x20session\x20→\x20history\x20and\x20current\x20=\x20next_node_name.\x20'+'⚠\x20ROUTING\x20RULE:\x20When\x20Forward.namedOperator=\x22\x22\x20(empty\x20string\x20=\x20OrderHolder),\x20the\x20caller\x20MUST\x20use\x20'+'order.progress\x20(not\x20progress.operate)\x20—\x20order_next\x20uses\x20order.has_op_permission\x20which\x20recognizes\x20'+'the\x20OrderHolder\x20short-circuit.\x20Direct\x20progress::next\x20will\x20abort\x20with\x20\x27Permission\x20denied\x27\x20(code\x205).\x20'+'For\x20non-empty\x20namedOperator\x20or\x20permissionIndex-only\x20forwards,\x20use\x20progress.operate\x20directly.'},{'id':'P-PR-02','pattern_name':'Hold\x20Progress\x20(block\x20forward)','semantic_intent':'Lock\x20a\x20Forward\x20so\x20no\x20one\x20else\x20can\x20advance\x20it\x20until\x20unhold','match_keywords':['hold','lock','block','pause\x20forward'],'schema_fields':['object','operate(operation,\x20op=\x27hold\x27,\x20message)'],'example_json':{'object':'0xPROGRESS_ADDRESS','operate':{'operation':{'next_node_name':'revision_required','forward':'request_revision'},'op':'hold','message':'Please\x20revise\x20section\x203'}},'reverse_explanation':'operate.op=\x27hold\x27\x20→\x20calls\x20progress::hold\x20or\x20order_hold.\x20session_hold\x20sets\x20Holder.who\x20=\x20sender;\x20'+'other\x20callers\x20will\x20hit\x20E_NOT_THE_HOLDER\x20if\x20they\x20try\x20to\x20advance.'},{'id':'P-PR-03','pattern_name':'Self-unhold\x20(release\x20own\x20hold)','semantic_intent':'Release\x20a\x20forward\x20that\x20I\x20previously\x20held','match_keywords':['unhold','release','self\x20release'],'schema_fields':['object','operate(operation,\x20op=\x27unhold\x27)'],'example_json':{'object':'0xPROGRESS_ADDRESS','operate':{'operation':{'next_node_name':'reviewing','forward':'resubmit'},'op':'unhold','message':'Revised\x20content\x20uploaded'}},'reverse_explanation':'operate.op=\x27unhold\x27\x20→\x20calls\x20progress::hold(bHold=false)\x20or\x20order_hold(bHold=false).\x20'+'Move\x27s\x20session_hold\x20releases\x20the\x20lock\x20(sender\x20==\x20Holder.who).\x20'+'After\x20release,\x20the\x20forward\x20can\x20be\x20re-locked\x20or\x20accomplished\x20by\x20eligible\x20callers.'},{'id':'P-PR-04','pattern_name':'Admin\x20force-unhold\x20(224\x20permission)','semantic_intent':'Force-release\x20a\x20held\x20forward\x20using\x20224\x20permission,\x20bypassing\x20holder\x20check','match_keywords':['adminUnhold','force\x20unhold','admin\x20release'],'schema_fields':['object','operate(operation,\x20op=\x27adminUnhold\x27)'],'example_json':{'object':'0xPROGRESS_ADDRESS','operate':{'operation':{'next_node_name':'arb_decided','forward':'decide'},'op':'adminUnhold','message':'Admin\x20override:\x20holder\x20unresponsive\x20for\x207\x20days'}},'reverse_explanation':'operate.op=\x27adminUnhold\x27\x20→\x20calls\x20progress::unhold.\x20Move\x20checks\x20sender_has_permission_idcheck(224);\x20'+'if\x20true,\x20force\x20release\x20(bForce=true).\x20If\x20false,\x20falls\x20back\x20to\x20holder-match\x20check.'},{'id':'P-PR-05','pattern_name':'Bind\x20task\x20(one-time,\x20immutable)','semantic_intent':'Associate\x20an\x20Order/Reward\x20address\x20with\x20this\x20Progress\x20(only\x20once\x20per\x20Progress)','match_keywords':['task_set','bind\x20task','set\x20task'],'schema_fields':['object','task'],'example_json':{'object':'0xPROGRESS_ADDRESS','task':'0xORDER_ADDRESS'},'reverse_explanation':'Calls\x20progress::task_set.\x20Move\x20asserts\x20option::is_none(&self.task);\x20if\x20already\x20set,\x20E_TASK_ALREADY_SET\x20aborts.\x20'+'There\x20is\x20NO\x20task_unset\x20—\x20once\x20bound,\x20the\x20Progress\x20is\x20permanently\x20tied\x20to\x20that\x20Order/Reward.'},{'id':'P-PR-06','pattern_name':'Manage\x20context\x20repositories','semantic_intent':'Add/remove/clear\x20Repository\x20objects\x20as\x20query\x20context\x20(≤\x2030\x20total)','match_keywords':['repository','context'],'schema_fields':['object','repository(op,\x20objects)'],'example_json':{'object':'0xPROGRESS_ADDRESS','repository':{'op':'add','objects':['0xREPO1','0xREPO2']}},'reverse_explanation':'op=add:\x20appends\x20(idempotent\x20via\x20vector::contains).\x20op=remove:\x20drops\x20listed\x20addresses.\x20'+'op=clear:\x20empties\x20the\x20list.\x20op=set:\x20clears\x20then\x20adds.\x20Count\x20must\x20stay\x20≤\x20MAX_CONTEXT_REPOSITORY_COUNT\x20(30).'},{'id':'P-PR-07','pattern_name':'Manage\x20named_operator\x20namespace','semantic_intent':'Add/set/remove\x20addresses\x20for\x20a\x20named\x20operator\x20role\x20(Forward\x20gate)','match_keywords':['named_operator','operator'],'schema_fields':['object','progress_namedOperator(op,\x20name,\x20operators)'],'example_json':{'object':'0xPROGRESS_ADDRESS','progress_namedOperator':{'op':'add','name':'logistics','operators':['0xADDR1','0xADDR2']}},'reverse_explanation':'op=add:\x20appends\x20(deduped).\x20op=set:\x20REPLACES\x20the\x20address\x20list.\x20op=remove:\x20drops\x20listed\x20addresses.\x20'+'Up\x20to\x2060\x20named_operator\x20names\x20per\x20Progress;\x20up\x20to\x2080\x20addresses\x20per\x20name.'},{'id':'P-PR-08','pattern_name':'Owner\x20receive\x20(terminal\x20node\x20unwrap)','semantic_intent':'Owner\x20receives\x20Receiving<K>\x20objects\x20or\x20CoinWrapper<T>\x20coins\x20at\x20a\x20terminal\x20node','match_keywords':['owner_receive','unwrap','withdraw'],'schema_fields':['(SDK\x20does\x20not\x20expose\x20this\x20in\x20CallProgress_Data\x20—\x20direct\x20move\x20call\x20required)'],'example_json':{'_note':'Not\x20exposed\x20in\x20CallProgress_Data;\x20direct\x20Move\x20call:','target':'progress::owner_receive<T>','arguments':['progress','machine','permission','received','payment']},'reverse_explanation':'Calls\x20progress::owner_receive\x20(225\x20permission).\x20Unwraps\x20CoinWrapper<T>\x20via\x20Payment.unwrap_with_check,\x20'+'forwards\x20coin/object\x20to\x20Permission\x20owner.\x20Typically\x20triggered\x20at\x20terminal\x20nodes\x20(return_approved,\x20completed,\x20enforced).'}];export const PROGRESS_SCHEMA_TO_SEMANTIC_RULES=[{'element_type':'field','type_name':'object','semantic_explanation':'Progress\x20object\x20address.\x20Always\x20required\x20for\x20operate\x20calls\x20(Progress\x20is\x20created\x20indirectly\x20via\x20service::buy).'},{'element_type':'field','type_name':'task','semantic_explanation':'Bind\x20a\x20task\x20(Order/Reward)\x20address.\x20ONE-TIME\x20only\x20—\x20E_TASK_ALREADY_SET\x20on\x20re-set.'},{'element_type':'field','type_name':'repository','semantic_explanation':'Context\x20Repository\x20list\x20management.\x20op=add/set/remove/clear.\x20Total\x20≤\x20MAX_CONTEXT_REPOSITORY_COUNT\x20(30).'},{'element_type':'field','type_name':'progress_namedOperator','semantic_explanation':'named_operator\x20namespace\x20management.\x20name=\x27\x27\x20is\x20the\x20OrderHolder\x20special\x20namespace.\x20≤\x2060\x20names,\x20≤\x2080\x20addresses\x20each.'},{'element_type':'field','type_name':'operate','semantic_explanation':'Forward\x20advancement\x20/\x20hold\x20/\x20unhold.\x20Contains\x20operation\x20(next_node_name\x20+\x20forward)\x20and\x20hold/adminUnhold/message\x20flags.'},{'element_type':'field','type_name':'operate.operation.next_node_name','semantic_explanation':'Target\x20node\x20name.\x20Must\x20exist\x20in\x20Machine\x20and\x20be\x20reachable\x20from\x20current\x20via\x20a\x20Forward\x20definition.'},{'element_type':'field','type_name':'operate.operation.forward','semantic_explanation':'Forward\x20name.\x20Must\x20be\x20one\x20of\x20the\x20forwards\x20defined\x20from\x20current\x20→\x20next_node_name\x20in\x20the\x20Machine.'},{'element_type':'field','type_name':'operate.op','semantic_explanation':'Operation\x20type:\x20\x27next\x27\x20=\x20advance\x20forward;\x20\x27hold\x27\x20=\x20lock\x20forward\x20(Holder.who\x20=\x20sender);\x20\x27unhold\x27\x20=\x20self-release\x20own\x20hold;\x20\x27adminUnhold\x27\x20=\x20force\x20release\x20via\x20224\x20permission\x20(bypasses\x20holder\x20check).'},{'element_type':'field','type_name':'operate.message','semantic_explanation':'Deliverable\x20message\x20(≤\x20MAX_LONG_NAME_LENGTH).\x20Stored\x20in\x20Holder.msg\x20/\x20delivered\x20on\x20accomplishment.'},{'element_type':'op','type_name':'next','semantic_explanation':'Plain\x20forward\x20advance.\x20Use\x20when\x20no\x20bound\x20Order,\x20OR\x20caller\x20is\x20named_operator\x20(not\x20OrderHolder).'},{'element_type':'op','type_name':'order_next','semantic_explanation':'Order-bound\x20forward\x20advance.\x20Caller\x20must\x20satisfy\x20order.has_op_permission\x20(order\x20owner/agent).'},{'element_type':'op','type_name':'hold','semantic_explanation':'Lock\x20forward.\x20Holder.who\x20=\x20sender;\x20subsequent\x20callers\x20hit\x20E_NOT_THE_HOLDER.'},{'element_type':'op','type_name':'order_hold','semantic_explanation':'Order-bound\x20hold.\x20Same\x20as\x20hold\x20but\x20uses\x20order.has_op_permission\x20for\x20OrderHolder\x20verification.'},{'element_type':'op','type_name':'unhold','semantic_explanation':'Self-release\x20(sender\x20==\x20Holder.who)\x20OR\x20admin\x20force-release\x20(224\x20permission).'},{'element_type':'op','type_name':'namedOperator_add','semantic_explanation':'Append\x20addresses\x20to\x20a\x20named_operator\x20(deduped;\x20fails\x20if\x20name\x20new\x20and\x20≥\x2060\x20names).'},{'element_type':'op','type_name':'namedOperator_set','semantic_explanation':'REPLACE\x20the\x20address\x20list\x20for\x20a\x20named_operator\x20name\x20(or\x20create\x20if\x20name\x20new).'},{'element_type':'op','type_name':'namedOperator_remove','semantic_explanation':'Drop\x20listed\x20addresses\x20from\x20a\x20named_operator\x20name\x20(no-op\x20if\x20name\x20doesn\x27t\x20exist).'},{'element_type':'phase','type_name':'creation','semantic_explanation':'Indirect:\x20service::buy\x20→\x20progress::new_imp\x20(bypasses\x20220\x20assertion\x20via\x20package-internal\x20entry).'},{'element_type':'phase','type_name':'task_binding','semantic_explanation':'One-time\x20task_set\x20(222).\x20E_TASK_ALREADY_SET\x20on\x20any\x20retry.'},{'element_type':'phase','type_name':'forward_advance','semantic_explanation':'Dynamic\x20permission:\x20IsNamedOperator\x20OR\x20Forward.permissionIndex\x20OR\x20Forward.guard\x20(Passport).\x20NOT\x20220-225.'},{'element_type':'phase','type_name':'completed','semantic_explanation':'session.weights\x20≥\x20threshold\x20→\x20push\x20to\x20history,\x20current\x20=\x20next_node.\x20Atomic.'}];export const PROGRESS_CONSTRAINT_RULES=[{'id':'MC-PR-01','category':'structural','rule':'Machine\x20must\x20be\x20published\x20before\x20Progress\x20creation\x20(machine::on_progress_new\x20asserts\x20published\x20state)','applies_to':['creation']},{'id':'MC-PR-02','category':'structural','rule':'Progress.machine\x20is\x20immutable\x20after\x20creation\x20(E_MACHINE_NOT_MATCH\x20on\x20every\x20op)','applies_to':['operate','task','repository','progress_namedOperator']},{'id':'MC-PR-03','category':'structural','rule':'named_operator\x20count\x20<\x20MAX_NAMED_OPERATOR_COUNT\x20(60);\x20E_MAX_NAMED_OPERATOR_COUNT\x20on\x20overflow','applies_to':['progress_namedOperator.op=add\x20(new\x20name)']},{'id':'MC-PR-04','category':'structural','rule':'named_operator\x20addresses\x20<\x20MAX_NAMED_OPERATOR_ADDRESS_COUNT\x20(80);\x20E_MAX_NAMED_OPERATOR_ADDRESS_COUNT\x20on\x20overflow','applies_to':['progress_namedOperator.operators']},{'id':'MC-PR-05','category':'structural','rule':'context_repository\x20count\x20<\x20MAX_CONTEXT_REPOSITORY_COUNT\x20(30);\x20E_MAX_CONTEXT_REPOSITORY_COUNT\x20on\x20overflow','applies_to':['repository.op=add','repository.op=set']},{'id':'MC-PR-06','category':'semantic','rule':'task_set\x20is\x20one-time:\x20E_TASK_ALREADY_SET\x20blocks\x20any\x20re-assignment','applies_to':['task']},{'id':'MC-PR-07','category':'semantic','rule':'operate.op\x20must\x20be\x20one\x20of:\x20next\x20|\x20hold\x20|\x20unhold\x20|\x20adminUnhold\x20(schema-enforced\x20enum)','applies_to':['operate.op']},{'id':'MC-PR-08','category':'semantic','rule':'operate.message\x20must\x20satisfy\x20common::LONG_NAME\x20(≤\x20MAX_LONG_NAME_LENGTH)','applies_to':['operate.message']},{'id':'MC-PR-09','category':'permission','rule':'Forward\x20advance\x20uses\x20DYNAMIC\x20permission:\x20namedOperator\x20OR\x20Forward.permissionIndex\x20OR\x20Forward.guard\x20—\x20NOT\x20220-225','applies_to':['operate\x20(next/hold/unhold)']},{'id':'MC-PR-10','category':'permission','rule':'220-225\x20builtin\x20indexes\x20are\x20MANAGEMENT-ONLY\x20(named_operator/task/repository/unhold/owner_receive)','applies_to':['progress_namedOperator','task','repository','operate.op=\x27adminUnhold\x27']},{'id':'MC-PR-11','category':'permission','rule':'adminUnhold\x20(224)\x20bypasses\x20holder\x20check\x20—\x20grant\x20only\x20to\x20dedicated\x20recovery\x20addresses','applies_to':['operate.op=\x27adminUnhold\x27']},{'id':'MC-PR-12','category':'lifecycle','rule':'Forward\x20already\x20accomplished\x20→\x20E_FORWARD_ALREADY_ACCOMPLISHED\x20on\x20re-hold\x20(idempotent\x20completion)','applies_to':['operate.op=\x27hold\x27']},{'id':'MC-PR-13','category':'lifecycle','rule':'unhold\x20by\x20non-holder\x20requires\x20224\x20permission;\x20else\x20E_NOT_THE_HOLDER','applies_to':['operate.op=\x27unhold\x27']},{'id':'MC-PR-14','category':'cross_object','rule':'order_next/order_hold\x20require\x20progress.task\x20==\x20order\x20address\x20(E_ORDER_NOT_MATCH)','applies_to':['operate\x20(order\x20variant)']},{'id':'MC-PR-15','category':'cross_object','rule':'context_repository_add\x20creates\x20Registrar\x20affiliation\x20—\x20remove\x20before\x20deleting\x20Repository','applies_to':['repository.op=add']},{'id':'MC-PR-16','category':'cross_object','rule':'Forward.guard\x20(Some)\x20requires\x20*_with_passport\x20variant;\x20plain\x20next()\x20aborts\x20E_NEED_PASSPORT','applies_to':['operate\x20(guarded\x20forward)']}];export const PROGRESS_TRANSLATION_VERSION='1.0.0';export function matchSemanticPattern(a){const b=a['toLowerCase']();return PROGRESS_SEMANTIC_TO_SCHEMA_RULES['filter'](c=>c['match_keywords']['some'](d=>b['includes'](d['toLowerCase']())));}export function explainProgressCallData(a){const b=[];!a['object']?b['push']('Operation:\x20CREATE\x20Progress\x20(indirect\x20—\x20service::buy\x20→\x20new_imp)'):b['push']('Operation:\x20OPERATE\x20Progress\x20at\x20'+a['object']);a['task']&&b['push']('-\x20⚠️\x20task_set:\x20'+a['task']+'\x20(one-time,\x20immutable\x20—\x20E_TASK_ALREADY_SET\x20on\x20re-set)');if(a['repository']){const c=a['repository'],d=c['objects']?.['length']??0x0;b['push']('-\x20Repository\x20'+c['op']+':\x20'+d+'\x20object(s)');}if(a['progress_namedOperator']){const e=a['progress_namedOperator'],f=e['operators']?.['length']??0x0,g=e['name']===''?'(OrderHolder\x20namespace)':'\x22'+e['name']+'\x22';b['push']('-\x20namedOperator\x20'+e['op']+'\x20'+g+':\x20'+f+'\x20address(es)');}if(a['operate']){const h=a['operate'];b['push']('-\x20Operation:\x20'+h['operation']['forward']+'\x20→\x20'+h['operation']['next_node_name']);h['op']&&b['push']('\x20\x20op='+h['op']);if(h['op']==='hold')b['push']('\x20\x20⚠️\x20hold:\x20lock\x20this\x20forward\x20(Holder.who\x20=\x20sender)');else{if(h['op']==='adminUnhold')b['push']('\x20\x20⚠️\x20adminUnhold:\x20force\x20release\x20via\x20224\x20permission\x20(bypasses\x20holder\x20check)');else h['op']==='unhold'?b['push']('\x20\x20ℹ️\x20unhold:\x20self-release\x20own\x20hold\x20(sender\x20must\x20==\x20Holder.who)'):b['push']('\x20\x20Submit\x20result\x20(advance\x20forward,\x20accumulate\x20weight\x20toward\x20threshold)');}h['message']&&b['push']('\x20\x20Message:\x20\x22'+h['message']+'\x22');}return b['join']('\x0a');}export function explainField(a){return PROGRESS_SCHEMA_TO_SEMANTIC_RULES['find'](b=>b['element_type']==='field'&&b['type_name']===a);}export function explainOp(a){return PROGRESS_SCHEMA_TO_SEMANTIC_RULES['find'](b=>b['element_type']==='op'&&b['type_name']===a);}export function getConstraintsByCategory(a){return PROGRESS_CONSTRAINT_RULES['filter'](b=>b['category']===a);}export function explainPermissionIndex(a){if(isProgressBuiltinPermission(a)){const b=getBuiltinPermissionByIndex(a);return b['name']+'\x20('+a+')\x20—\x20'+b['description'];}return'Custom/dynamic\x20permission\x20index\x20('+a+')\x20—\x20resolved\x20via\x20Forward.permissionIndex\x20in\x20Machine';}
1
+ import{isProgressBuiltinPermission,getBuiltinPermissionByIndex}from'./progress-ledger.js';export const PROGRESS_SEMANTIC_TO_SCHEMA_RULES=[{'id':'P-PR-01','pattern_name':'Advance\x20Progress\x20(next\x20/\x20order_next)','semantic_intent':'Push\x20Progress\x20forward\x20via\x20a\x20Forward\x20definition;\x20accumulate\x20weight,\x20possibly\x20complete\x20session','match_keywords':['next','advance','proceed','complete\x20forward'],'schema_fields':['object','operate(operation,\x20op=\x27next\x27)'],'example_json':{'object':'0xPROGRESS_ADDRESS','operate':{'operation':{'next_node_name':'shipped','forward':'ship'},'op':'next','message':'Order\x20shipped\x20via\x20FedEx,\x20tracking\x2012345'}},'reverse_explanation':'operate.op=\x27next\x27\x20→\x20calls\x20progress::next\x20or\x20order_next\x20(if\x20task\x20bound).\x20'+'Move\x20accumulates\x20forward.weight;\x20on\x20reaching\x20threshold,\x20session\x20→\x20history\x20and\x20current\x20=\x20next_node_name.\x20'+'⚠\x20ROUTING\x20RULE:\x20When\x20Forward.namedOperator=\x22\x22\x20(empty\x20string\x20=\x20OrderHolder),\x20the\x20caller\x20MUST\x20use\x20'+'order.progress\x20(not\x20progress.operate)\x20—\x20order_next\x20uses\x20order.has_op_permission\x20which\x20recognizes\x20'+'the\x20OrderHolder\x20short-circuit.\x20Direct\x20progress::next\x20will\x20abort\x20with\x20\x27Permission\x20denied\x27\x20(code\x205).\x20'+'For\x20non-empty\x20namedOperator\x20or\x20permissionIndex-only\x20forwards,\x20use\x20progress.operate\x20directly.'},{'id':'P-PR-02','pattern_name':'Hold\x20Progress\x20(block\x20forward)','semantic_intent':'Lock\x20a\x20Forward\x20so\x20no\x20one\x20else\x20can\x20advance\x20it\x20until\x20unhold','match_keywords':['hold','lock','block','pause\x20forward'],'schema_fields':['object','operate(operation,\x20op=\x27hold\x27,\x20message)'],'example_json':{'object':'0xPROGRESS_ADDRESS','operate':{'operation':{'next_node_name':'revision_required','forward':'request_revision'},'op':'hold','message':'Please\x20revise\x20section\x203'}},'reverse_explanation':'operate.op=\x27hold\x27\x20→\x20calls\x20progress::hold\x20or\x20order_hold.\x20session_hold\x20sets\x20Holder.who\x20=\x20sender;\x20'+'other\x20callers\x20will\x20hit\x20E_NOT_THE_HOLDER\x20if\x20they\x20try\x20to\x20advance.'},{'id':'P-PR-03','pattern_name':'Self-unhold\x20(release\x20own\x20hold)','semantic_intent':'Release\x20a\x20forward\x20that\x20I\x20previously\x20held','match_keywords':['unhold','release','self\x20release'],'schema_fields':['object','operate(operation,\x20op=\x27unhold\x27)'],'example_json':{'object':'0xPROGRESS_ADDRESS','operate':{'operation':{'next_node_name':'reviewing','forward':'resubmit'},'op':'unhold','message':'Revised\x20content\x20uploaded'}},'reverse_explanation':'operate.op=\x27unhold\x27\x20→\x20calls\x20progress::hold(bHold=false)\x20or\x20order_hold(bHold=false).\x20'+'Move\x27s\x20session_hold\x20releases\x20the\x20lock\x20(sender\x20==\x20Holder.who).\x20'+'After\x20release,\x20the\x20forward\x20can\x20be\x20re-locked\x20or\x20accomplished\x20by\x20eligible\x20callers.'},{'id':'P-PR-04','pattern_name':'Admin\x20force-unhold\x20(224\x20permission)','semantic_intent':'Force-release\x20a\x20held\x20forward\x20using\x20224\x20permission,\x20bypassing\x20holder\x20check','match_keywords':['adminUnhold','force\x20unhold','admin\x20release'],'schema_fields':['object','operate(operation,\x20op=\x27adminUnhold\x27)'],'example_json':{'object':'0xPROGRESS_ADDRESS','operate':{'operation':{'next_node_name':'arb_decided','forward':'decide'},'op':'adminUnhold','message':'Admin\x20override:\x20holder\x20unresponsive\x20for\x207\x20days'}},'reverse_explanation':'operate.op=\x27adminUnhold\x27\x20→\x20calls\x20progress::unhold.\x20Move\x20checks\x20sender_has_permission_idcheck(224);\x20'+'if\x20true,\x20force\x20release\x20(bForce=true).\x20If\x20false,\x20falls\x20back\x20to\x20holder-match\x20check.'},{'id':'P-PR-05','pattern_name':'Bind\x20task\x20(one-time,\x20immutable)','semantic_intent':'Associate\x20an\x20Order/Reward\x20address\x20with\x20this\x20Progress\x20(only\x20once\x20per\x20Progress)','match_keywords':['task_set','bind\x20task','set\x20task'],'schema_fields':['object','task'],'example_json':{'object':'0xPROGRESS_ADDRESS','task':'0xORDER_ADDRESS'},'reverse_explanation':'Calls\x20progress::task_set.\x20Move\x20asserts\x20option::is_none(&self.task);\x20if\x20already\x20set,\x20E_TASK_ALREADY_SET\x20aborts.\x20'+'There\x20is\x20NO\x20task_unset\x20—\x20once\x20bound,\x20the\x20Progress\x20is\x20permanently\x20tied\x20to\x20that\x20Order/Reward.'},{'id':'P-PR-06','pattern_name':'Manage\x20context\x20repositories','semantic_intent':'Add/remove/clear\x20Repository\x20objects\x20as\x20query\x20context\x20(≤\x2030\x20total)','match_keywords':['repository','context'],'schema_fields':['object','repository(op,\x20objects)'],'example_json':{'object':'0xPROGRESS_ADDRESS','repository':{'op':'add','objects':['0xREPO1','0xREPO2']}},'reverse_explanation':'op=add:\x20appends\x20(idempotent\x20via\x20vector::contains).\x20op=remove:\x20drops\x20listed\x20addresses.\x20'+'op=clear:\x20empties\x20the\x20list.\x20op=set:\x20clears\x20then\x20adds.\x20Count\x20must\x20stay\x20≤\x20MAX_CONTEXT_REPOSITORY_COUNT\x20(30).'},{'id':'P-PR-07','pattern_name':'Manage\x20named_operator\x20namespace','semantic_intent':'Add/set/remove\x20addresses\x20for\x20a\x20named\x20operator\x20role\x20(Forward\x20gate)','match_keywords':['named_operator','operator'],'schema_fields':['object','progress_namedOperator(op,\x20name,\x20operators)'],'example_json':{'object':'0xPROGRESS_ADDRESS','progress_namedOperator':{'op':'add','name':'logistics','operators':['0xADDR1','0xADDR2']}},'reverse_explanation':'op=add:\x20appends\x20(deduped).\x20op=set:\x20REPLACES\x20the\x20address\x20list.\x20op=remove:\x20drops\x20listed\x20addresses.\x20'+'Up\x20to\x2060\x20named_operator\x20names\x20per\x20Progress;\x20up\x20to\x2080\x20addresses\x20per\x20name.'},{'id':'P-PR-08','pattern_name':'Owner\x20receive\x20(terminal\x20node\x20unwrap)','semantic_intent':'Owner\x20receives\x20Receiving<K>\x20objects\x20or\x20CoinWrapper<T>\x20coins\x20at\x20a\x20terminal\x20node','match_keywords':['owner_receive','unwrap','withdraw'],'schema_fields':['(SDK\x20does\x20not\x20expose\x20this\x20in\x20CallProgress_Data\x20—\x20direct\x20move\x20call\x20required)'],'example_json':{'_note':'Not\x20exposed\x20in\x20CallProgress_Data;\x20direct\x20Move\x20call:','target':'progress::owner_receive<T>','arguments':['progress','machine','permission','received','payment']},'reverse_explanation':'Calls\x20progress::owner_receive\x20(225\x20permission).\x20Unwraps\x20CoinWrapper<T>\x20via\x20Payment.unwrap_with_check,\x20'+'forwards\x20coin/object\x20to\x20Permission\x20owner.\x20Typically\x20triggered\x20at\x20terminal\x20nodes\x20(return_approved,\x20completed,\x20enforced).'}];export const PROGRESS_SCHEMA_TO_SEMANTIC_RULES=[{'element_type':'field','type_name':'object','semantic_explanation':'Progress\x20object\x20address.\x20Always\x20required\x20for\x20operate\x20calls\x20(Progress\x20is\x20created\x20indirectly\x20via\x20service::buy).'},{'element_type':'field','type_name':'task','semantic_explanation':'Bind\x20a\x20task\x20(Order/Reward)\x20address.\x20ONE-TIME\x20only\x20—\x20E_TASK_ALREADY_SET\x20on\x20re-set.'},{'element_type':'field','type_name':'repository','semantic_explanation':'Context\x20Repository\x20list\x20management.\x20op=add/set/remove/clear.\x20Total\x20≤\x20MAX_CONTEXT_REPOSITORY_COUNT\x20(30).'},{'element_type':'field','type_name':'progress_namedOperator','semantic_explanation':'named_operator\x20namespace\x20management.\x20name=\x27\x27\x20is\x20the\x20OrderHolder\x20special\x20namespace.\x20≤\x2060\x20names,\x20≤\x2080\x20addresses\x20each.'},{'element_type':'field','type_name':'operate','semantic_explanation':'Forward\x20advancement\x20/\x20hold\x20/\x20unhold.\x20Contains\x20operation\x20(next_node_name\x20+\x20forward)\x20and\x20hold/adminUnhold/message\x20flags.'},{'element_type':'field','type_name':'operate.operation.next_node_name','semantic_explanation':'Target\x20node\x20name.\x20Must\x20exist\x20in\x20Machine\x20and\x20be\x20reachable\x20from\x20current\x20via\x20a\x20Forward\x20definition.'},{'element_type':'field','type_name':'operate.operation.forward','semantic_explanation':'Forward\x20name.\x20Must\x20be\x20one\x20of\x20the\x20forwards\x20defined\x20from\x20current\x20→\x20next_node_name\x20in\x20the\x20Machine.'},{'element_type':'field','type_name':'operate.op','semantic_explanation':'Operation\x20type:\x20\x27next\x27\x20=\x20advance\x20forward;\x20\x27hold\x27\x20=\x20lock\x20forward\x20(Holder.who\x20=\x20sender);\x20\x27unhold\x27\x20=\x20self-release\x20own\x20hold;\x20\x27adminUnhold\x27\x20=\x20force\x20release\x20via\x20224\x20permission\x20(bypasses\x20holder\x20check).'},{'element_type':'field','type_name':'operate.message','semantic_explanation':'Deliverable\x20message\x20(≤\x20MAX_LONG_NAME_LENGTH).\x20Stored\x20in\x20Holder.msg\x20/\x20delivered\x20on\x20accomplishment.'},{'element_type':'op','type_name':'next','semantic_explanation':'Plain\x20forward\x20advance.\x20Use\x20when\x20no\x20bound\x20Order,\x20OR\x20caller\x20is\x20named_operator\x20(not\x20OrderHolder).'},{'element_type':'op','type_name':'order_next','semantic_explanation':'Order-bound\x20forward\x20advance.\x20Caller\x20must\x20satisfy\x20order.has_op_permission\x20(order\x20owner/agent).'},{'element_type':'op','type_name':'hold','semantic_explanation':'Lock\x20forward.\x20Holder.who\x20=\x20sender;\x20subsequent\x20callers\x20hit\x20E_NOT_THE_HOLDER.'},{'element_type':'op','type_name':'order_hold','semantic_explanation':'Order-bound\x20hold.\x20Same\x20as\x20hold\x20but\x20uses\x20order.has_op_permission\x20for\x20OrderHolder\x20verification.'},{'element_type':'op','type_name':'unhold','semantic_explanation':'Self-release\x20(sender\x20==\x20Holder.who)\x20OR\x20admin\x20force-release\x20(224\x20permission).'},{'element_type':'op','type_name':'namedOperator_add','semantic_explanation':'Append\x20addresses\x20to\x20a\x20named_operator\x20(deduped;\x20fails\x20if\x20name\x20new\x20and\x20≥\x2060\x20names).'},{'element_type':'op','type_name':'namedOperator_set','semantic_explanation':'REPLACE\x20the\x20address\x20list\x20for\x20a\x20named_operator\x20name\x20(or\x20create\x20if\x20name\x20new).'},{'element_type':'op','type_name':'namedOperator_remove','semantic_explanation':'Drop\x20listed\x20addresses\x20from\x20a\x20named_operator\x20name\x20(no-op\x20if\x20name\x20doesn\x27t\x20exist).'},{'element_type':'phase','type_name':'creation','semantic_explanation':'Indirect:\x20service::buy\x20→\x20progress::new_imp\x20(bypasses\x20220\x20assertion\x20via\x20package-internal\x20entry).'},{'element_type':'phase','type_name':'task_binding','semantic_explanation':'One-time\x20task_set\x20(222).\x20E_TASK_ALREADY_SET\x20on\x20any\x20retry.'},{'element_type':'phase','type_name':'forward_advance','semantic_explanation':'Dynamic\x20permission:\x20IsNamedOperator\x20OR\x20Forward.permissionIndex\x20OR\x20Forward.guard\x20(Passport).\x20NOT\x20220-225.'},{'element_type':'phase','type_name':'completed','semantic_explanation':'session.weights\x20≥\x20threshold\x20→\x20push\x20to\x20history,\x20current\x20=\x20next_node.\x20Atomic.'}];export const PROGRESS_CONSTRAINT_RULES=[{'id':'MC-PR-01','category':'structural','rule':'Machine\x20must\x20be\x20published\x20before\x20Progress\x20creation\x20(machine::on_progress_new\x20asserts\x20published\x20state)','applies_to':['creation']},{'id':'MC-PR-02','category':'structural','rule':'Progress.machine\x20is\x20immutable\x20after\x20creation\x20(E_MACHINE_NOT_MATCH\x20on\x20every\x20op)','applies_to':['operate','task','repository','progress_namedOperator']},{'id':'MC-PR-03','category':'structural','rule':'named_operator\x20count\x20<\x20MAX_NAMED_OPERATOR_COUNT\x20(60);\x20E_MAX_NAMED_OPERATOR_COUNT\x20on\x20overflow','applies_to':['progress_namedOperator.op=add\x20(new\x20name)']},{'id':'MC-PR-04','category':'structural','rule':'named_operator\x20addresses\x20<\x20MAX_NAMED_OPERATOR_ADDRESS_COUNT\x20(80);\x20E_MAX_NAMED_OPERATOR_ADDRESS_COUNT\x20on\x20overflow','applies_to':['progress_namedOperator.operators']},{'id':'MC-PR-05','category':'structural','rule':'context_repository\x20count\x20<\x20MAX_CONTEXT_REPOSITORY_COUNT\x20(30);\x20E_MAX_CONTEXT_REPOSITORY_COUNT\x20on\x20overflow','applies_to':['repository.op=add','repository.op=set']},{'id':'MC-PR-06','category':'semantic','rule':'task_set\x20is\x20one-time:\x20E_TASK_ALREADY_SET\x20blocks\x20any\x20re-assignment','applies_to':['task']},{'id':'MC-PR-07','category':'semantic','rule':'operate.op\x20must\x20be\x20one\x20of:\x20next\x20|\x20hold\x20|\x20unhold\x20|\x20adminUnhold\x20(schema-enforced\x20enum)','applies_to':['operate.op']},{'id':'MC-PR-08','category':'semantic','rule':'operate.message\x20must\x20satisfy\x20common::LONG_NAME\x20(≤\x20MAX_LONG_NAME_LENGTH)','applies_to':['operate.message']},{'id':'MC-PR-09','category':'permission','rule':'Forward\x20advance\x20uses\x20DYNAMIC\x20permission:\x20namedOperator\x20OR\x20Forward.permissionIndex\x20OR\x20Forward.guard\x20—\x20NOT\x20220-225','applies_to':['operate\x20(next/hold/unhold)']},{'id':'MC-PR-10','category':'permission','rule':'220-225\x20builtin\x20indexes\x20are\x20MANAGEMENT-ONLY\x20(named_operator/task/repository/unhold/owner_receive)','applies_to':['progress_namedOperator','task','repository','operate.op=\x27adminUnhold\x27']},{'id':'MC-PR-11','category':'permission','rule':'adminUnhold\x20(224)\x20bypasses\x20holder\x20check\x20—\x20grant\x20only\x20to\x20dedicated\x20recovery\x20addresses','applies_to':['operate.op=\x27adminUnhold\x27']},{'id':'MC-PR-12','category':'lifecycle','rule':'Forward\x20already\x20accomplished\x20→\x20E_FORWARD_ALREADY_ACCOMPLISHED\x20on\x20re-hold\x20(idempotent\x20completion)','applies_to':['operate.op=\x27hold\x27']},{'id':'MC-PR-13','category':'lifecycle','rule':'unhold\x20by\x20non-holder\x20requires\x20224\x20permission;\x20else\x20E_NOT_THE_HOLDER','applies_to':['operate.op=\x27unhold\x27']},{'id':'MC-PR-14','category':'cross_object','rule':'order_next/order_hold\x20require\x20progress.task\x20==\x20order\x20address\x20(E_ORDER_NOT_MATCH)','applies_to':['operate\x20(order\x20variant)']},{'id':'MC-PR-15','category':'cross_object','rule':'context_repository_add\x20creates\x20object-linker\x20tx\x20binding\x20—\x20remove\x20before\x20deleting\x20Repository','applies_to':['repository.op=add']},{'id':'MC-PR-16','category':'cross_object','rule':'Forward.guard\x20(Some)\x20requires\x20*_with_passport\x20variant;\x20plain\x20next()\x20aborts\x20E_NEED_PASSPORT','applies_to':['operate\x20(guarded\x20forward)']}];export const PROGRESS_TRANSLATION_VERSION='1.0.0';export function matchSemanticPattern(a){const b=a['toLowerCase']();return PROGRESS_SEMANTIC_TO_SCHEMA_RULES['filter'](c=>c['match_keywords']['some'](d=>b['includes'](d['toLowerCase']())));}export function explainProgressCallData(a){const b=[];!a['object']?b['push']('Operation:\x20CREATE\x20Progress\x20(indirect\x20—\x20service::buy\x20→\x20new_imp)'):b['push']('Operation:\x20OPERATE\x20Progress\x20at\x20'+a['object']);a['task']&&b['push']('-\x20⚠️\x20task_set:\x20'+a['task']+'\x20(one-time,\x20immutable\x20—\x20E_TASK_ALREADY_SET\x20on\x20re-set)');if(a['repository']){const c=a['repository'],d=c['objects']?.['length']??0x0;b['push']('-\x20Repository\x20'+c['op']+':\x20'+d+'\x20object(s)');}if(a['progress_namedOperator']){const e=a['progress_namedOperator'],f=e['operators']?.['length']??0x0,g=e['name']===''?'(OrderHolder\x20namespace)':'\x22'+e['name']+'\x22';b['push']('-\x20namedOperator\x20'+e['op']+'\x20'+g+':\x20'+f+'\x20address(es)');}if(a['operate']){const h=a['operate'];b['push']('-\x20Operation:\x20'+h['operation']['forward']+'\x20→\x20'+h['operation']['next_node_name']);h['op']&&b['push']('\x20\x20op='+h['op']);if(h['op']==='hold')b['push']('\x20\x20⚠️\x20hold:\x20lock\x20this\x20forward\x20(Holder.who\x20=\x20sender)');else{if(h['op']==='adminUnhold')b['push']('\x20\x20⚠️\x20adminUnhold:\x20force\x20release\x20via\x20224\x20permission\x20(bypasses\x20holder\x20check)');else h['op']==='unhold'?b['push']('\x20\x20ℹ️\x20unhold:\x20self-release\x20own\x20hold\x20(sender\x20must\x20==\x20Holder.who)'):b['push']('\x20\x20Submit\x20result\x20(advance\x20forward,\x20accumulate\x20weight\x20toward\x20threshold)');}h['message']&&b['push']('\x20\x20Message:\x20\x22'+h['message']+'\x22');}return b['join']('\x0a');}export function explainField(a){return PROGRESS_SCHEMA_TO_SEMANTIC_RULES['find'](b=>b['element_type']==='field'&&b['type_name']===a);}export function explainOp(a){return PROGRESS_SCHEMA_TO_SEMANTIC_RULES['find'](b=>b['element_type']==='op'&&b['type_name']===a);}export function getConstraintsByCategory(a){return PROGRESS_CONSTRAINT_RULES['filter'](b=>b['category']===a);}export function explainPermissionIndex(a){if(isProgressBuiltinPermission(a)){const b=getBuiltinPermissionByIndex(a);return b['name']+'\x20('+a+')\x20—\x20'+b['description'];}return'Custom/dynamic\x20permission\x20index\x20('+a+')\x20—\x20resolved\x20via\x20Forward.permissionIndex\x20in\x20Machine';}
@@ -1 +1 @@
1
- import{MAX_ADDRESS_COUNT,MAX_RECORD_COUNT_REGISTRAR,MAX_RECORD_LENGTH}from'@wowok/wowok';const BIT_NO_INFO=0x0,BIT_LIKE=0x2,BIT_DISLIKE=0x4,BIT_AFFILIATION=0x8,R_REG_01={'rule':{'id':'R-REG-01','level':'HIGH','category':'lifecycle','title':'Entity\x20and\x20Registrar\x20are\x20system\x20singletons\x20—\x20cannot\x20be\x20migrated\x20post-deploy','description':'Entity\x20and\x20Registrar\x20are\x20created\x20once\x20at\x20package\x20init\x20by\x20@0x0\x20(registrar.move:152-166)\x20'+'and\x20are\x20globally\x20unique.\x20They\x20cannot\x20be\x20re-created,\x20migrated,\x20or\x20re-initialized.\x20If\x20'+'the\x20singleton\x27s\x20storage\x20layout\x20needs\x20to\x20change\x20(e.g.\x20ParentTable\x20schema),\x20the\x20only\x20'+'option\x20is\x20a\x20new\x20package\x20version\x20with\x20a\x20migration\x20path.\x20There\x20is\x20no\x20in-place\x20migration\x20'+'API.\x20All\x2022\x20objects\x20depend\x20on\x20these\x20singletons\x20via\x20affiliation,\x20so\x20a\x20migration\x20would\x20'+'cascade\x20to\x20every\x20object.','affected_stakeholders':['system','user'],'scenario':'Operator\x20wants\x20to\x20migrate\x20Entity\x20to\x20a\x20new\x20schema;\x20no\x20migration\x20API\x20exists','mitigation':'Confirm\x20the\x20schema\x20before\x20deployment.\x20For\x20schema\x20evolution,\x20plan\x20a\x20new\x20package\x20'+'version\x20with\x20an\x20explicit\x20migration\x20script.\x20Never\x20assume\x20the\x20singleton\x20can\x20be\x20\x27reset\x27.','auto_fixable':![]},'check':a=>{if(!a['expects_singleton_migration'])return null;return{...R_REG_01['rule'],'evidence':'expects_singleton_migration=true\x20(no\x20migration\x20API)'};}},R_REG_02={'rule':{'id':'R-REG-02','level':'MEDIUM','category':'structural','title':'MAX_ADDRESS_COUNT='+MAX_ADDRESS_COUNT+'\x20may\x20be\x20insufficient\x20for\x20large\x20deployments','description':'The\x20Entity\x20and\x20Registrar\x20ParentTables\x20are\x20bounded\x20by\x20MAX_ADDRESS_COUNT='+MAX_ADDRESS_COUNT+'\x20'+'(registrar.move).\x20Exceeding\x20the\x20cap\x20aborts\x20address\x20registration.\x20For\x20mass-market\x20'+('applications,\x20'+MAX_ADDRESS_COUNT+'\x20entries\x20may\x20be\x20too\x20few;\x20the\x20limit\x20is\x20a\x20single\x20')+'Move\x20constant\x20that\x20requires\x20a\x20package\x20upgrade\x20to\x20change.','affected_stakeholders':['system','user'],'scenario':'Popular\x20service\x20reaches\x205200\x20registered\x20users;\x20new\x20registrations\x20abort','mitigation':'Monitor\x20address_count.\x20Plan\x20a\x20package\x20upgrade\x20that\x20raises\x20MAX_ADDRESS_COUNT\x20before\x20'+'hitting\x20the\x20cap.\x20For\x20shardable\x20workloads,\x20consider\x20multiple\x20Entity\x20tables\x20in\x20a\x20future\x20'+'package\x20version.','auto_fixable':![]},'check':a=>{if(a['address_count']===undefined)return null;if(a['address_count']<MAX_ADDRESS_COUNT)return null;return{...R_REG_02['rule'],'evidence':'address_count='+a['address_count']+',\x20limit='+MAX_ADDRESS_COUNT};}},R_REG_03={'rule':{'id':'R-REG-03','level':'MEDIUM','category':'semantic','title':'Vote.info\x20uses\x20u8\x20bitmask\x20—\x20bits\x204-7\x20reserved,\x20future\x20expansion\x20must\x20stay\x20compatible','description':'Vote.info\x20is\x20a\x20u8\x20bitmask:\x20BIT_NO_INFO='+BIT_NO_INFO+',\x20BIT_LIKE='+BIT_LIKE+',\x20'+('BIT_DISLIKE='+BIT_DISLIKE+',\x20BIT_AFFILIATION='+BIT_AFFILIATION+'.\x20Bits\x204-7\x20are\x20reserved.\x20')+'A\x20future\x20version\x20that\x20repurposes\x20bits\x204-7\x20would\x20conflict\x20with\x20any\x20off-chain\x20code\x20that\x20'+'reads\x20the\x20raw\x20byte.\x20The\x20reserved\x20bits\x20MUST\x20be\x20treated\x20as\x20zero\x20today;\x20non-zero\x20values\x20'+'in\x20bits\x204-7\x20indicate\x20a\x20forward-incompatible\x20voter.','affected_stakeholders':['voter','system'],'scenario':'Future\x20version\x20assigns\x20bit\x204\x20to\x20a\x20new\x20flag;\x20old\x20indexers\x20misread\x20the\x20byte','mitigation':'Off-chain\x20code\x20must\x20mask\x20to\x20bits\x200-3\x20today\x20and\x20ignore\x20bits\x204-7.\x20When\x20a\x20new\x20flag\x20is\x20'+'assigned,\x20ship\x20a\x20coordinated\x20Move\x20+\x20SDK\x20+\x20indexer\x20update.','auto_fixable':![]},'check':a=>{if(!a['uses_reserved_vote_bits'])return null;return{...R_REG_03['rule'],'evidence':'uses_reserved_vote_bits=true\x20(bits\x204-7\x20are\x20reserved)'};}},R_REG_05={'rule':{'id':'R-REG-05','level':'MEDIUM','category':'cross_object','title':'affiliation\x20/\x20disaffiliation\x20emit\x20no\x20events\x20—\x20indexers\x20must\x20poll\x20Registrar.table','description':'affiliation,\x20disaffiliation,\x20and\x20affiliation_change\x20(registrar.move)\x20mutate\x20the\x20'+'Registrar\x20dependency\x20graph\x20but\x20emit\x20no\x20events.\x20External\x20indexers\x20that\x20track\x20the\x20'+'object-dependency\x20graph\x20cannot\x20rely\x20on\x20an\x20event\x20stream;\x20they\x20must\x20poll\x20the\x20'+'ParentTable,\x20which\x20is\x20expensive\x20as\x20the\x20graph\x20grows.','affected_stakeholders':['system'],'scenario':'Indexer\x20expects\x20an\x20AffiliationEvent;\x20none\x20is\x20emitted,\x20dependency\x20graph\x20is\x20stale','mitigation':'Indexers\x20should\x20poll\x20Registrar.table\x20on\x20a\x20cadence\x20and\x20diff.\x20Future\x20versions\x20may\x20add\x20'+'AffiliationEvent;\x20until\x20then,\x20do\x20not\x20build\x20critical\x20UX\x20on\x20affiliation\x20event\x20streams.','auto_fixable':![]},'check':a=>{if(!a['expects_affiliation_event'])return null;return{...R_REG_05['rule'],'evidence':'expects_affiliation_event=true\x20(no\x20events)'};}},R_REG_04={'rule':{'id':'R-REG-04','level':'LOW','category':'lifecycle','title':'entity_register\x20is\x20idempotent\x20—\x20returns\x20existing\x20Resource,\x20not\x20a\x20fresh\x20one','description':'entity_register\x20(registrar.move:177-187)\x20checks\x20whether\x20the\x20sender\x20already\x20has\x20an\x20'+'Entity\x20record.\x20If\x20so,\x20it\x20returns\x20the\x20existing\x20Resource\x20address\x20without\x20creating\x20a\x20new\x20'+'one.\x20Callers\x20who\x20expect\x20a\x20fresh\x20Resource\x20on\x20each\x20call\x20(e.g.\x20after\x20a\x20forced\x20destroy)\x20'+'will\x20silently\x20receive\x20the\x20old\x20one.\x20Use\x20entity_register_with_resource_forced\x20to\x20'+'force-reallocate,\x20and\x20only\x20when\x20the\x20old\x20Resource\x20is\x20truly\x20gone.','affected_stakeholders':['user'],'scenario':'User\x20destroys\x20their\x20Resource\x20then\x20calls\x20entity_register;\x20gets\x20the\x20old\x20(now-invalid)\x20address','mitigation':'Document\x20the\x20idempotent\x20behavior.\x20After\x20a\x20forced\x20destroy,\x20callers\x20MUST\x20use\x20'+'entity_register_with_resource_forced.\x20SDK\x20should\x20detect\x20destroyed\x20Resource\x20and\x20route\x20'+'accordingly.','auto_fixable':![]},'check':a=>{if(!a['expects_fresh_resource_on_register'])return null;return{...R_REG_04['rule'],'evidence':'expects_fresh_resource_on_register=true\x20(idempotent)'};}},R_REG_06={'rule':{'id':'R-REG-06','level':'LOW','category':'semantic','title':'Record.typed_value\x20first\x20byte\x20is\x20a\x20ValueType\x20—\x20convention\x20enforced\x20only\x20by\x20docs','description':'Record.typed_value\x20is\x20a\x20vector<u8>\x20whose\x20first\x20byte\x20encodes\x20the\x20ValueType\x20(registrar.move:111).\x20'+'The\x20Move\x20layer\x20validates\x20that\x20the\x20vector\x20is\x20non-empty\x20and\x20within\x20MAX_RECORD_LENGTH='+(MAX_RECORD_LENGTH+',\x20but\x20it\x20does\x20not\x20validate\x20that\x20the\x20first\x20byte\x20is\x20a\x20known\x20ValueType.\x20')+'Off-chain\x20consumers\x20must\x20agree\x20on\x20the\x20ValueType\x20byte\x20layout;\x20a\x20misencoded\x20record\x20will\x20'+'deserialize\x20to\x20garbage\x20without\x20an\x20on-chain\x20abort.\x20Record\x20count\x20is\x20bounded\x20by\x20'+('MAX_RECORD_COUNT_REGISTRAR='+MAX_RECORD_COUNT_REGISTRAR+'.'),'affected_stakeholders':['user','system'],'scenario':'Caller\x20writes\x20a\x20record\x20with\x20first\x20byte\x200xFF;\x20no\x20on-chain\x20error,\x20but\x20consumers\x20cannot\x20decode','mitigation':'SDK\x20must\x20validate\x20the\x20first\x20byte\x20against\x20the\x20ValueType\x20enum\x20before\x20submitting.\x20'+'Document\x20the\x20ValueType\x20byte\x20layout\x20in\x20both\x20Move\x20and\x20SDK.\x20Add\x20a\x20sync\x20test\x20that\x20'+'asserts\x20the\x20ValueType\x20enum\x20matches\x20across\x20layers.','related_move_error':'ERecordTypeEmpty\x20(3)\x20—\x20only\x20catches\x20empty\x20typed_value','auto_fixable':![]},'check':a=>{if(!a['relies_on_typed_value_convention'])return null;return{...R_REG_06['rule'],'evidence':'relies_on_typed_value_convention=true\x20(docs-only\x20enforcement)'};}},R_REG_07={'rule':{'id':'R-REG-07','level':'MEDIUM','category':'cross_object','title':'entity_resource_transfer\x20detaches\x20Resource\x20from\x20the\x20source\x20address','description':'entity_resource_transfer(resource,\x20new_address,\x20ctx)\x20moves\x20the\x20Resource\x20backing\x20a\x20'+'user\x27s\x20identity\x20mark\x20to\x20a\x20new\x20address.\x20After\x20transfer,\x20the\x20source\x20address\x20has\x20no\x20'+'Resource\x20—\x20any\x20downstream\x20service\x20that\x20keyed\x20identity\x20on\x20the\x20source\x20address\x20loses\x20'+'the\x20binding.\x20There\x20is\x20no\x20automatic\x20forwarding\x20stub\x20left\x20behind.','affected_stakeholders':['user','system'],'scenario':'User\x20transfers\x20Resource\x20to\x20a\x20new\x20wallet;\x20old-wallet-based\x20services\x20break','mitigation':'Surface\x20a\x20\x27transfer\x20will\x20detach\x20the\x20Resource\x20from\x20this\x20address\x27\x20warning.\x20Consumers\x20'+'should\x20track\x20users\x20by\x20Resource\x20address,\x20not\x20by\x20user\x20address.\x20Provide\x20a\x20migration\x20'+'window\x20where\x20both\x20addresses\x20are\x20valid.','auto_fixable':![]},'check':a=>{if(!a['is_resource_transfer'])return null;return{...R_REG_07['rule'],'evidence':'is_resource_transfer=true\x20(source\x20loses\x20Resource)'};}},R_REG_08={'rule':{'id':'R-REG-08','level':'LOW','category':'semantic','title':'Vote.time\x20updates\x20on\x20every\x20toggle\x20—\x20including\x20like→no-like','description':'Vote.time\x20(registrar.move)\x20is\x20set\x20to\x20clock.timestamp_ms()\x20on\x20every\x20like/dislike\x20'+'operation,\x20including\x20toggles\x20that\x20remove\x20a\x20like\x20(like→no-like).\x20Consumers\x20who\x20'+'interpret\x20Vote.time\x20as\x20\x27last\x20liked\x20at\x27\x20will\x20be\x20confused\x20when\x20it\x20advances\x20on\x20an\x20'+'un-like.\x20The\x20field\x20semantically\x20means\x20\x27last\x20vote\x20op\x20time\x27,\x20not\x20\x27last\x20positive\x20vote\x27.','affected_stakeholders':['voter','system'],'scenario':'User\x20un-likes;\x20Vote.time\x20advances;\x20indexer\x20reads\x20it\x20as\x20\x27recently\x20liked\x27','mitigation':'Document\x20Vote.time\x20as\x20\x27last\x20vote\x20operation\x20time\x27.\x20For\x20\x27last\x20liked\x20at\x27\x20semantics,\x20'+'track\x20the\x20previous\x20Vote.info\x20state\x20and\x20only\x20record\x20time\x20when\x20BIT_LIKE\x20transitions\x20to\x20set.','auto_fixable':![]},'check':a=>{if(!a['expects_vote_time_only_on_like'])return null;return{...R_REG_08['rule'],'evidence':'expects_vote_time_only_on_like=true\x20(updates\x20on\x20toggle)'};}};export const REGISTRAR_RISK_RULES=[R_REG_01,R_REG_02,R_REG_03,R_REG_04,R_REG_05,R_REG_06,R_REG_07,R_REG_08];export const REGISTRAR_RISK_VERSION='1.0.0';export function checkRegistrarRisks(a){const b=[];for(const c of REGISTRAR_RISK_RULES){const d=c['check'](a);if(d)b['push'](d);}return b;}export function getRegistrarRiskById(a){return REGISTRAR_RISK_RULES['find'](b=>b['rule']['id']===a)?.['rule'];}
1
+ import{MAX_ADDRESS_COUNT,MAX_RECORD_COUNT_REGISTRAR,MAX_RECORD_LENGTH}from'@wowok/wowok';const BIT_NO_INFO=0x0,BIT_LIKE=0x2,BIT_DISLIKE=0x4,BIT_AFFILIATION=0x8,R_REG_01={'rule':{'id':'R-REG-01','level':'HIGH','category':'lifecycle','title':'Entity\x20and\x20Registrar\x20are\x20system\x20singletons\x20—\x20cannot\x20be\x20migrated\x20post-deploy','description':'Entity\x20and\x20Registrar\x20are\x20created\x20once\x20at\x20package\x20init\x20by\x20@0x0\x20(registrar.move:152-166)\x20'+'and\x20are\x20globally\x20unique.\x20They\x20cannot\x20be\x20re-created,\x20migrated,\x20or\x20re-initialized.\x20If\x20'+'the\x20singleton\x27s\x20storage\x20layout\x20needs\x20to\x20change\x20(e.g.\x20ParentTable\x20schema),\x20the\x20only\x20'+'option\x20is\x20a\x20new\x20package\x20version\x20with\x20a\x20migration\x20path.\x20There\x20is\x20no\x20in-place\x20migration\x20'+'API.\x20All\x2022\x20objects\x20depend\x20on\x20these\x20singletons\x20via\x20object-linker\x20bindings,\x20so\x20a\x20migration\x20would\x20'+'cascade\x20to\x20every\x20object.','affected_stakeholders':['system','user'],'scenario':'Operator\x20wants\x20to\x20migrate\x20Entity\x20to\x20a\x20new\x20schema;\x20no\x20migration\x20API\x20exists','mitigation':'Confirm\x20the\x20schema\x20before\x20deployment.\x20For\x20schema\x20evolution,\x20plan\x20a\x20new\x20package\x20'+'version\x20with\x20an\x20explicit\x20migration\x20script.\x20Never\x20assume\x20the\x20singleton\x20can\x20be\x20\x27reset\x27.','auto_fixable':![]},'check':a=>{if(!a['expects_singleton_migration'])return null;return{...R_REG_01['rule'],'evidence':'expects_singleton_migration=true\x20(no\x20migration\x20API)'};}},R_REG_02={'rule':{'id':'R-REG-02','level':'MEDIUM','category':'structural','title':'MAX_ADDRESS_COUNT='+MAX_ADDRESS_COUNT+'\x20may\x20be\x20insufficient\x20for\x20large\x20deployments','description':'The\x20Entity\x20and\x20Registrar\x20ParentTables\x20are\x20bounded\x20by\x20MAX_ADDRESS_COUNT='+MAX_ADDRESS_COUNT+'\x20'+'(registrar.move).\x20Exceeding\x20the\x20cap\x20aborts\x20address\x20registration.\x20For\x20mass-market\x20'+('applications,\x20'+MAX_ADDRESS_COUNT+'\x20entries\x20may\x20be\x20too\x20few;\x20the\x20limit\x20is\x20a\x20single\x20')+'Move\x20constant\x20that\x20requires\x20a\x20package\x20upgrade\x20to\x20change.','affected_stakeholders':['system','user'],'scenario':'Popular\x20service\x20reaches\x205200\x20registered\x20users;\x20new\x20registrations\x20abort','mitigation':'Monitor\x20address_count.\x20Plan\x20a\x20package\x20upgrade\x20that\x20raises\x20MAX_ADDRESS_COUNT\x20before\x20'+'hitting\x20the\x20cap.\x20For\x20shardable\x20workloads,\x20consider\x20multiple\x20Entity\x20tables\x20in\x20a\x20future\x20'+'package\x20version.','auto_fixable':![]},'check':a=>{if(a['address_count']===undefined)return null;if(a['address_count']<MAX_ADDRESS_COUNT)return null;return{...R_REG_02['rule'],'evidence':'address_count='+a['address_count']+',\x20limit='+MAX_ADDRESS_COUNT};}},R_REG_03={'rule':{'id':'R-REG-03','level':'MEDIUM','category':'semantic','title':'Vote.info\x20uses\x20u8\x20bitmask\x20—\x20bits\x204-7\x20reserved,\x20future\x20expansion\x20must\x20stay\x20compatible','description':'Vote.info\x20is\x20a\x20u8\x20bitmask:\x20BIT_NO_INFO='+BIT_NO_INFO+',\x20BIT_LIKE='+BIT_LIKE+',\x20'+('BIT_DISLIKE='+BIT_DISLIKE+',\x20BIT_AFFILIATION='+BIT_AFFILIATION+'.\x20Bits\x204-7\x20are\x20reserved.\x20')+'A\x20future\x20version\x20that\x20repurposes\x20bits\x204-7\x20would\x20conflict\x20with\x20any\x20off-chain\x20code\x20that\x20'+'reads\x20the\x20raw\x20byte.\x20The\x20reserved\x20bits\x20MUST\x20be\x20treated\x20as\x20zero\x20today;\x20non-zero\x20values\x20'+'in\x20bits\x204-7\x20indicate\x20a\x20forward-incompatible\x20voter.','affected_stakeholders':['voter','system'],'scenario':'Future\x20version\x20assigns\x20bit\x204\x20to\x20a\x20new\x20flag;\x20old\x20indexers\x20misread\x20the\x20byte','mitigation':'Off-chain\x20code\x20must\x20mask\x20to\x20bits\x200-3\x20today\x20and\x20ignore\x20bits\x204-7.\x20When\x20a\x20new\x20flag\x20is\x20'+'assigned,\x20ship\x20a\x20coordinated\x20Move\x20+\x20SDK\x20+\x20indexer\x20update.','auto_fixable':![]},'check':a=>{if(!a['uses_reserved_vote_bits'])return null;return{...R_REG_03['rule'],'evidence':'uses_reserved_vote_bits=true\x20(bits\x204-7\x20are\x20reserved)'};}},R_REG_05={'rule':{'id':'R-REG-05','level':'MEDIUM','category':'cross_object','title':'object-linker\x20affiliation\x20/\x20disaffiliation\x20emit\x20no\x20events\x20—\x20indexers\x20must\x20poll\x20object_linker\x20tables','description':'object_linker::affiliation_core/tx,\x20disaffiliation,\x20and\x20affiliation_change\x20(object_linker.move)\x20mutate\x20the\x20'+'binding\x20graph\x20but\x20emit\x20no\x20events.\x20External\x20indexers\x20that\x20track\x20the\x20'+'object-dependency\x20graph\x20cannot\x20rely\x20on\x20an\x20event\x20stream;\x20they\x20must\x20poll\x20the\x20'+'ParentTable,\x20which\x20is\x20expensive\x20as\x20the\x20graph\x20grows.','affected_stakeholders':['system'],'scenario':'Indexer\x20expects\x20an\x20AffiliationEvent;\x20none\x20is\x20emitted,\x20dependency\x20graph\x20is\x20stale','mitigation':'Indexers\x20should\x20poll\x20object_linker\x20tables\x20on\x20a\x20cadence\x20and\x20diff.\x20Future\x20versions\x20may\x20add\x20'+'AffiliationEvent;\x20until\x20then,\x20do\x20not\x20build\x20critical\x20UX\x20on\x20affiliation\x20event\x20streams.','auto_fixable':![]},'check':a=>{if(!a['expects_affiliation_event'])return null;return{...R_REG_05['rule'],'evidence':'expects_affiliation_event=true\x20(no\x20events)'};}},R_REG_04={'rule':{'id':'R-REG-04','level':'LOW','category':'lifecycle','title':'entity_register\x20is\x20idempotent\x20—\x20returns\x20existing\x20Resource,\x20not\x20a\x20fresh\x20one','description':'entity_register\x20(registrar.move:177-187)\x20checks\x20whether\x20the\x20sender\x20already\x20has\x20an\x20'+'Entity\x20record.\x20If\x20so,\x20it\x20returns\x20the\x20existing\x20Resource\x20address\x20without\x20creating\x20a\x20new\x20'+'one.\x20Callers\x20who\x20expect\x20a\x20fresh\x20Resource\x20on\x20each\x20call\x20(e.g.\x20after\x20a\x20forced\x20destroy)\x20'+'will\x20silently\x20receive\x20the\x20old\x20one.\x20Use\x20entity_register_with_resource_forced\x20to\x20'+'force-reallocate,\x20and\x20only\x20when\x20the\x20old\x20Resource\x20is\x20truly\x20gone.','affected_stakeholders':['user'],'scenario':'User\x20destroys\x20their\x20Resource\x20then\x20calls\x20entity_register;\x20gets\x20the\x20old\x20(now-invalid)\x20address','mitigation':'Document\x20the\x20idempotent\x20behavior.\x20After\x20a\x20forced\x20destroy,\x20callers\x20MUST\x20use\x20'+'entity_register_with_resource_forced.\x20SDK\x20should\x20detect\x20destroyed\x20Resource\x20and\x20route\x20'+'accordingly.','auto_fixable':![]},'check':a=>{if(!a['expects_fresh_resource_on_register'])return null;return{...R_REG_04['rule'],'evidence':'expects_fresh_resource_on_register=true\x20(idempotent)'};}},R_REG_06={'rule':{'id':'R-REG-06','level':'LOW','category':'semantic','title':'Record.typed_value\x20first\x20byte\x20is\x20a\x20ValueType\x20—\x20convention\x20enforced\x20only\x20by\x20docs','description':'Record.typed_value\x20is\x20a\x20vector<u8>\x20whose\x20first\x20byte\x20encodes\x20the\x20ValueType\x20(registrar.move:111).\x20'+'The\x20Move\x20layer\x20validates\x20that\x20the\x20vector\x20is\x20non-empty\x20and\x20within\x20MAX_RECORD_LENGTH='+(MAX_RECORD_LENGTH+',\x20but\x20it\x20does\x20not\x20validate\x20that\x20the\x20first\x20byte\x20is\x20a\x20known\x20ValueType.\x20')+'Off-chain\x20consumers\x20must\x20agree\x20on\x20the\x20ValueType\x20byte\x20layout;\x20a\x20misencoded\x20record\x20will\x20'+'deserialize\x20to\x20garbage\x20without\x20an\x20on-chain\x20abort.\x20Record\x20count\x20is\x20bounded\x20by\x20'+('MAX_RECORD_COUNT_REGISTRAR='+MAX_RECORD_COUNT_REGISTRAR+'.'),'affected_stakeholders':['user','system'],'scenario':'Caller\x20writes\x20a\x20record\x20with\x20first\x20byte\x200xFF;\x20no\x20on-chain\x20error,\x20but\x20consumers\x20cannot\x20decode','mitigation':'SDK\x20must\x20validate\x20the\x20first\x20byte\x20against\x20the\x20ValueType\x20enum\x20before\x20submitting.\x20'+'Document\x20the\x20ValueType\x20byte\x20layout\x20in\x20both\x20Move\x20and\x20SDK.\x20Add\x20a\x20sync\x20test\x20that\x20'+'asserts\x20the\x20ValueType\x20enum\x20matches\x20across\x20layers.','related_move_error':'ERecordTypeEmpty\x20(3)\x20—\x20only\x20catches\x20empty\x20typed_value','auto_fixable':![]},'check':a=>{if(!a['relies_on_typed_value_convention'])return null;return{...R_REG_06['rule'],'evidence':'relies_on_typed_value_convention=true\x20(docs-only\x20enforcement)'};}},R_REG_07={'rule':{'id':'R-REG-07','level':'MEDIUM','category':'cross_object','title':'entity_resource_transfer\x20detaches\x20Resource\x20from\x20the\x20source\x20address','description':'entity_resource_transfer(resource,\x20new_address,\x20ctx)\x20moves\x20the\x20Resource\x20backing\x20a\x20'+'user\x27s\x20identity\x20mark\x20to\x20a\x20new\x20address.\x20After\x20transfer,\x20the\x20source\x20address\x20has\x20no\x20'+'Resource\x20—\x20any\x20downstream\x20service\x20that\x20keyed\x20identity\x20on\x20the\x20source\x20address\x20loses\x20'+'the\x20binding.\x20There\x20is\x20no\x20automatic\x20forwarding\x20stub\x20left\x20behind.','affected_stakeholders':['user','system'],'scenario':'User\x20transfers\x20Resource\x20to\x20a\x20new\x20wallet;\x20old-wallet-based\x20services\x20break','mitigation':'Surface\x20a\x20\x27transfer\x20will\x20detach\x20the\x20Resource\x20from\x20this\x20address\x27\x20warning.\x20Consumers\x20'+'should\x20track\x20users\x20by\x20Resource\x20address,\x20not\x20by\x20user\x20address.\x20Provide\x20a\x20migration\x20'+'window\x20where\x20both\x20addresses\x20are\x20valid.','auto_fixable':![]},'check':a=>{if(!a['is_resource_transfer'])return null;return{...R_REG_07['rule'],'evidence':'is_resource_transfer=true\x20(source\x20loses\x20Resource)'};}},R_REG_08={'rule':{'id':'R-REG-08','level':'LOW','category':'semantic','title':'Vote.time\x20updates\x20on\x20every\x20toggle\x20—\x20including\x20like→no-like','description':'Vote.time\x20(registrar.move)\x20is\x20set\x20to\x20clock.timestamp_ms()\x20on\x20every\x20like/dislike\x20'+'operation,\x20including\x20toggles\x20that\x20remove\x20a\x20like\x20(like→no-like).\x20Consumers\x20who\x20'+'interpret\x20Vote.time\x20as\x20\x27last\x20liked\x20at\x27\x20will\x20be\x20confused\x20when\x20it\x20advances\x20on\x20an\x20'+'un-like.\x20The\x20field\x20semantically\x20means\x20\x27last\x20vote\x20op\x20time\x27,\x20not\x20\x27last\x20positive\x20vote\x27.','affected_stakeholders':['voter','system'],'scenario':'User\x20un-likes;\x20Vote.time\x20advances;\x20indexer\x20reads\x20it\x20as\x20\x27recently\x20liked\x27','mitigation':'Document\x20Vote.time\x20as\x20\x27last\x20vote\x20operation\x20time\x27.\x20For\x20\x27last\x20liked\x20at\x27\x20semantics,\x20'+'track\x20the\x20previous\x20Vote.info\x20state\x20and\x20only\x20record\x20time\x20when\x20BIT_LIKE\x20transitions\x20to\x20set.','auto_fixable':![]},'check':a=>{if(!a['expects_vote_time_only_on_like'])return null;return{...R_REG_08['rule'],'evidence':'expects_vote_time_only_on_like=true\x20(updates\x20on\x20toggle)'};}};export const REGISTRAR_RISK_RULES=[R_REG_01,R_REG_02,R_REG_03,R_REG_04,R_REG_05,R_REG_06,R_REG_07,R_REG_08];export const REGISTRAR_RISK_VERSION='1.0.0';export function checkRegistrarRisks(a){const b=[];for(const c of REGISTRAR_RISK_RULES){const d=c['check'](a);if(d)b['push'](d);}return b;}export function getRegistrarRiskById(a){return REGISTRAR_RISK_RULES['find'](b=>b['rule']['id']===a)?.['rule'];}
@@ -1 +1 @@
1
- import{MAX_ADDRESS_COUNT,MAX_RECORD_LENGTH}from'@wowok/wowok';export const REGISTRAR_TRANSLATION_VERSION='1.0.0';export const SEMANTIC_TO_REGISTRAR_SCHEMA_RULES=[{'id':'P-REGISTRAR-01','pattern_name':'Register\x20entity','semantic_intent':'Register\x20a\x20user\x20Entity\x20record\x20+\x20Resource\x20mark\x20(idempotent).','match_keywords':['register\x20entity','register\x20user','affiliate'],'required_fields':[],'optional_fields':['referrer'],'example':{'referrer':'0x...'}},{'id':'P-REGISTRAR-02','pattern_name':'Vote\x20(like/dislike/affiliation)','semantic_intent':'Cast\x20a\x20like/dislike/affiliation\x20vote\x20via\x20the\x20Vote.info\x20bitmask.','match_keywords':['like','dislike','affiliate','vote'],'required_fields':['who'],'optional_fields':['info'],'example':{'who':'0x...','info':0x2}}];export const REGISTRAR_FIELD_TRANSLATIONS=[{'field_name':'table','value_type':'ParentTable<address,\x20Votes\x20|\x20AddressInfo>','semantic':'Registrar:\x20who\x20→\x20Votes;\x20Entity:\x20who\x20→\x20AddressInfo.','format_example':'{0x...:\x20Votes}','validation_rules':['bounded\x20by\x20MAX_ADDRESS_COUNT\x20('+MAX_ADDRESS_COUNT+')']},{'field_name':'typed_value','value_type':'vector<u8>','semantic':'Record\x20value;\x20first\x20byte\x20encodes\x20ValueType.','format_example':'0x01...','validation_rules':['ERecordTypeEmpty\x20(3)\x20when\x20empty','≤\x20MAX_RECORD_LENGTH\x20('+MAX_RECORD_LENGTH+')']},{'field_name':'info','value_type':'u8','semantic':'Vote\x20bitmask:\x20LIKE=0x02,\x20DISLIKE=0x04,\x20AFFILIATION=0x08;\x20bits\x204-7\x20reserved.','format_example':'0x02\x20(like)','validation_rules':['mask\x20to\x20bits\x200-3\x20today']},{'field_name':'referrer','value_type':'Option<address>','semantic':'Self-attested\x20referrer\x20(unverified).','format_example':'0x...referrer...','validation_rules':['treat\x20as\x20hint,\x20not\x20trust\x20signal']}];export const REGISTRAR_CONSTRAINT_RULES=[{'id':'REGISTRAR_C_01','name':'record\x20type','description':'typed_value\x20non-empty;\x20first\x20byte\x20is\x20ValueType.','related_field':'typed_value'},{'id':'REGISTRAR_C_02','name':'record\x20length','description':'typed_value\x20≤\x20MAX_RECORD_LENGTH\x20('+MAX_RECORD_LENGTH+').','related_field':'typed_value'},{'id':'REGISTRAR_C_03','name':'address\x20cap','description':'Entity/Registrar\x20tables\x20bounded\x20by\x20MAX_ADDRESS_COUNT\x20('+MAX_ADDRESS_COUNT+').','related_field':'table'},{'id':'REGISTRAR_C_04','name':'vote\x20bitmask','description':'bits\x204-7\x20reserved;\x20mask\x20to\x200-3.','related_field':'info'}];export function explainRegistrar(a){const b=[],c=[];if(a['info']!==undefined){if((a['info']&0x2)===0x2)c['push']('like');if((a['info']&0x4)===0x4)c['push']('dislike');if((a['info']&0x8)===0x8)c['push']('affiliation');if((a['info']&0xf0)!==0x0)b['push']('reserved\x20bits\x204-7\x20set\x20(forward-incompatible)');}return a['record_length']!==undefined&&a['record_length']>MAX_RECORD_LENGTH&&b['push']('record\x20length\x20'+a['record_length']+'\x20>\x20'+MAX_RECORD_LENGTH),{'summary':'Registrar\x20record.\x20Vote\x20flags:\x20'+(c['join'](',')||'none')+'.','vote_flags':c['join'](',')||'none','warnings':b};}
1
+ import{MAX_ADDRESS_COUNT,MAX_RECORD_LENGTH}from'@wowok/wowok';export const REGISTRAR_TRANSLATION_VERSION='1.0.0';export const SEMANTIC_TO_REGISTRAR_SCHEMA_RULES=[{'id':'P-REGISTRAR-01','pattern_name':'Register\x20entity','semantic_intent':'Register\x20a\x20user\x20Entity\x20record\x20+\x20Resource\x20mark\x20(idempotent).','match_keywords':['register\x20entity','register\x20user','affiliate'],'required_fields':[],'optional_fields':['referrer'],'example':{'referrer':'0x...'}},{'id':'P-REGISTRAR-02','pattern_name':'Vote\x20(like/dislike/favor)','semantic_intent':'Cast\x20a\x20like/dislike/favor\x20vote\x20via\x20the\x20Vote.info\x20bitmask.','match_keywords':['like','dislike','favor','vote'],'required_fields':['who'],'optional_fields':['info'],'example':{'who':'0x...','info':0x2}}];export const REGISTRAR_FIELD_TRANSLATIONS=[{'field_name':'table','value_type':'ParentTable<address,\x20Votes\x20|\x20AddressInfo>','semantic':'Registrar:\x20who\x20→\x20Votes;\x20Entity:\x20who\x20→\x20AddressInfo.','format_example':'{0x...:\x20Votes}','validation_rules':['bounded\x20by\x20MAX_ADDRESS_COUNT\x20('+MAX_ADDRESS_COUNT+')']},{'field_name':'typed_value','value_type':'vector<u8>','semantic':'Record\x20value;\x20first\x20byte\x20encodes\x20ValueType.','format_example':'0x01...','validation_rules':['ERecordTypeEmpty\x20(3)\x20when\x20empty','≤\x20MAX_RECORD_LENGTH\x20('+MAX_RECORD_LENGTH+')']},{'field_name':'info','value_type':'u8','semantic':'Vote\x20bitmask:\x20LIKE=0x02,\x20DISLIKE=0x04,\x20FAVOR=0x08;\x20bits\x204-7\x20reserved.','format_example':'0x02\x20(like)','validation_rules':['mask\x20to\x20bits\x200-3\x20today']},{'field_name':'referrer','value_type':'Option<address>','semantic':'Self-attested\x20referrer\x20(unverified).','format_example':'0x...referrer...','validation_rules':['treat\x20as\x20hint,\x20not\x20trust\x20signal']}];export const REGISTRAR_CONSTRAINT_RULES=[{'id':'REGISTRAR_C_01','name':'record\x20type','description':'typed_value\x20non-empty;\x20first\x20byte\x20is\x20ValueType.','related_field':'typed_value'},{'id':'REGISTRAR_C_02','name':'record\x20length','description':'typed_value\x20≤\x20MAX_RECORD_LENGTH\x20('+MAX_RECORD_LENGTH+').','related_field':'typed_value'},{'id':'REGISTRAR_C_03','name':'address\x20cap','description':'Entity/Registrar\x20tables\x20bounded\x20by\x20MAX_ADDRESS_COUNT\x20('+MAX_ADDRESS_COUNT+').','related_field':'table'},{'id':'REGISTRAR_C_04','name':'vote\x20bitmask','description':'bits\x204-7\x20reserved;\x20mask\x20to\x200-3.','related_field':'info'}];export function explainRegistrar(a){const b=[],c=[];if(a['info']!==undefined){if((a['info']&0x2)===0x2)c['push']('like');if((a['info']&0x4)===0x4)c['push']('dislike');if((a['info']&0x8)===0x8)c['push']('favor');if((a['info']&0xf0)!==0x0)b['push']('reserved\x20bits\x204-7\x20set\x20(forward-incompatible)');}return a['record_length']!==undefined&&a['record_length']>MAX_RECORD_LENGTH&&b['push']('record\x20length\x20'+a['record_length']+'\x20>\x20'+MAX_RECORD_LENGTH),{'summary':'Registrar\x20record.\x20Vote\x20flags:\x20'+(c['join'](',')||'none')+'.','vote_flags':c['join'](',')||'none','warnings':b};}
@@ -1 +1 @@
1
- import{MAX_GUARD_COUNT_REWARD,MAX_RECORD_COUNT_REWARD}from'./onchain-constants.js';export{MAX_GUARD_COUNT_REWARD,MAX_RECORD_COUNT_REWARD};export const REWARD_NEW={'index':0x96,'name':'REWARD_NEW','description':'Create\x20new\x20Reward<T>\x20(asserted\x20by\x20reward::new\x20/\x20new_with_passport)','governed_operations':['reward::new','reward::new_with_passport'],'sdk_exposed':!![]};export const REWARD_DESCRIPTION={'index':0x97,'name':'REWARD_DESCRIPTION','description':'Update\x20description\x20(asserted\x20by\x20reward::description_set\x20/\x20_with_passport)','governed_operations':['reward::description_set','reward::description_set_with_passport'],'sdk_exposed':!![]};export const REWARD_GUARD={'index':0x98,'name':'REWARD_GUARD','description':'Add\x20/\x20remove\x20expired\x20guards\x20(≤\x20MAX_GUARD_COUNT_REWARD=200)','governed_operations':['reward::guard_add','reward::guard_add_with_passport','reward::guard_remove_expired','reward::guard_remove_expired_with_passport'],'sdk_exposed':!![]};export const REWARD_COIN_ADD={'index':0x99,'name':'REWARD_COIN_ADD','description':'Deposit\x20Coin<T>\x20directly\x20into\x20Reward\x20balance\x20(joins\x20Balance<T>)','governed_operations':['reward::coin_add','reward::coin_add_with_passport'],'sdk_exposed':!![]};export const REWARD_RECEIVE={'index':0x9a,'name':'REWARD_RECEIVE','description':'Receive\x20CoinWrapper<T>\x20via\x20Payment.unwrap_with_check\x20(joins\x20Balance<T>)','governed_operations':['reward::receive','reward::receive_with_passport'],'sdk_exposed':!![]};export const REWARD_GUARD_EXPIRATION_TIME_ADD={'index':0x9b,'name':'REWARD_GUARD_EXPIRATION_TIME_ADD','description':'Set\x20/\x20cancel\x20guard_not_added_expiration_time\x20(time-lock\x20on\x20new\x20guard\x20additions)','governed_operations':['reward::guard_expiration_time_add','reward::guard_expiration_time_add_with_passport'],'sdk_exposed':!![]};export const REWARD_OWNER_RECEIVE={'index':0x9c,'name':'REWARD_OWNER_RECEIVE','description':'Owner\x20receives\x20Receiving<K>\x20/\x20CoinWrapper<K>\x20at\x20terminal\x20state\x20(unwrap\x20→\x20owner)','governed_operations':['reward::owner_receive','reward::owner_receive_with_passport','reward::owner_receive_object','reward::owner_receive_object_with_passport'],'sdk_exposed':!![]};export const REWARD_UM={'index':0x9d,'name':'REWARD_UM','description':'Bind\x20/\x20unbind\x20Contact\x20(UM)\x20for\x20off-chain\x20coordination','governed_operations':['reward::um_set','reward::um_set_with_passport','reward::um_none','reward::um_none_with_passport'],'sdk_exposed':!![]};export const REWARD_PERMISSIONS=[REWARD_NEW,REWARD_DESCRIPTION,REWARD_GUARD,REWARD_COIN_ADD,REWARD_RECEIVE,REWARD_GUARD_EXPIRATION_TIME_ADD,REWARD_OWNER_RECEIVE,REWARD_UM];export const REWARD_FIELDS=[{'name':'id','move_type':'UID','mutability':'immutable','set_at_creation':!![],'constraint':'Object\x20UID;\x20assigned\x20in\x20new_imp\x20via\x20object::new(ctx).\x20Never\x20changes.'},{'name':'description','move_type':'String','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x97,'constraint':'Must\x20satisfy\x20common::DESCRIPTION.\x20Updated\x20via\x20description_set\x20(151).'},{'name':'guards','move_type':'vector<RewardGuard>','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x98,'constraint':'vector::length\x20<\x20MAX_GUARD_COUNT\x20(200);\x20E_GUARD_COUNT_EXCEEDED\x20on\x20overflow.','related_errors':['E_GUARD_COUNT_EXCEEDED']},{'name':'balance','move_type':'Balance<T>','mutability':'runtime','set_at_creation':!![],'constraint':'Zero\x20at\x20creation\x20(balance::zero());\x20grows\x20via\x20coin_add/receive;\x20shrinks\x20via\x20claim\x20(split)\x20and\x20never\x20via\x20direct\x20withdraw.','related_errors':['E_INSUFFICIENT_BALANCE']},{'name':'guard_not_added_expiration_time','move_type':'Option<u64>','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x9b,'constraint':'Option<timestamp_ms>.\x20When\x20Some(t):\x20guard_add\x20requires\x20clock\x20>\x20t\x20(E_GUARD_LOCKED_TIME).\x20When\x20None\x20or\x20t\x20<\x20now:\x20guards\x20can\x20be\x20added.','related_errors':['E_GUARD_LOCKED_TIME','E_GUARD_LOCKED_TIME_NOT_INCREASING','E_GUARD_LOCKED_TIME_INVALID']},{'name':'record','move_type':'ParentTable<address,\x20RecipientRecord>','mutability':'runtime','set_at_creation':!![],'constraint':'Per-recipient\x20claim\x20history.\x20Each\x20RecipientRecord.amount\x20vector\x20has\x20length\x20<\x20MAX_RECORD_COUNT\x20(5200);\x20E_RECORD_COUNT_EXCEEDED\x20on\x20overflow.','related_errors':['E_RECORD_COUNT_EXCEEDED']},{'name':'um','move_type':'Option<address>','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x9d,'constraint':'Option<Contact\x20address>.\x20um_set\x20creates\x20Registrar\x20affiliation;\x20um_none\x20disaffiliates.'},{'name':'permission','move_type':'address','mutability':'admin_mutable','set_at_creation':!![],'constraint':'Permission\x20object\x20address.\x20Updated\x20via\x20permission_set\x20(asserts\x20old.owner\x20==\x20sender).\x20Creates\x20Registrar\x20affiliation_change.'}];export const REWARD_GUARD_CONSTRUCTORS=[{'constructor':'guard_u8_u8','recipient_type':'GuardIdentifier','amount_type':'GuardU64Identifier','params':{'recipient_param':'u8','amount_param':'u8','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['is_identifier_address(guard,\x20recipient)\x20—\x20E_RECIPIENT_IDENTIFIER_NOT_ADDRESS\x20(4)','get_submission_value_type(guard,\x20amount)\x20must\x20be\x20Some(TYPE_U64)\x20—\x20E_AMOUNT_NOT_U64\x20(5)','if\x20store_from_id\x20is\x20Some:\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Dynamic\x20recipient\x20+\x20dynamic\x20amount\x20—\x20both\x20extracted\x20from\x20Passport\x20at\x20claim\x20time\x20(e.g.\x20referral\x20rewards\x20where\x20referrer\x20and\x20amount\x20vary\x20per\x20claim).'},{'constructor':'guard_u8_u64','recipient_type':'GuardIdentifier','amount_type':'Fixed','params':{'recipient_param':'u8','amount_param':'u64','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['is_identifier_address(guard,\x20recipient)\x20—\x20E_RECIPIENT_IDENTIFIER_NOT_ADDRESS\x20(4)','if\x20store_from_id\x20is\x20Some:\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Dynamic\x20recipient\x20+\x20fixed\x20amount\x20—\x20e.g.\x20first-order\x20reward\x20where\x20any\x20new\x20customer\x20claims\x20a\x20fixed\x201\x20WOW.'},{'constructor':'guard_entity_u8','recipient_type':'Entity','amount_type':'GuardU64Identifier','params':{'recipient_param':'address','amount_param':'u8','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['get_submission_value_type(guard,\x20amount)\x20must\x20be\x20Some(TYPE_U64)\x20—\x20E_AMOUNT_NOT_U64\x20(5)','if\x20store_from_id\x20is\x20Some:\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Fixed\x20recipient\x20+\x20dynamic\x20amount\x20—\x20e.g.\x20tiered\x20loyalty\x20reward\x20where\x20amount\x20depends\x20on\x20Passport\x20submission\x20(tier\x20level).'},{'constructor':'guard_entity_u64','recipient_type':'Entity','amount_type':'Fixed','params':{'recipient_param':'address','amount_param':'u64','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['if\x20store_from_id\x20is\x20Some:\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Fully\x20fixed\x20recipient\x20+\x20amount\x20—\x20simplest\x20configuration\x20(e.g.\x20specific\x20partner\x20bounty).'},{'constructor':'guard_signer_u8','recipient_type':'Signer','amount_type':'GuardU64Identifier','params':{'amount_param':'u8','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['get_submission_value_type(guard,\x20amount)\x20must\x20be\x20Some(TYPE_U64)\x20—\x20E_AMOUNT_NOT_U64\x20(5)','if\x20store_from_id\x20is\x20Some:\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Caller\x20is\x20recipient\x20+\x20dynamic\x20amount\x20—\x20e.g.\x20self-service\x20claim\x20where\x20amount\x20depends\x20on\x20Passport\x20submission\x20(e.g.\x20cashback\x20rate).'},{'constructor':'guard_signer_u64','recipient_type':'Signer','amount_type':'Fixed','params':{'amount_param':'u64','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['if\x20store_from_id\x20is\x20Some:\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Caller\x20is\x20recipient\x20+\x20fixed\x20amount\x20—\x20e.g.\x20flash\x20sale\x20where\x20any\x20eligible\x20caller\x20claims\x20a\x20fixed\x20reward.'}];export const REWARD_ERROR_CODES=[{'code':0x1,'name':'E_GUARD_LOCKED_TIME_NOT_INCREASING','description':'guard_expiration_time_add:\x20new\x20time\x20<\x20current\x20clock\x20(must\x20be\x20≥\x20now)','trigger_operation':'guard_expiration_time_add'},{'code':0x2,'name':'E_GUARD_EXPIRED','description':'guard_add\x20on\x20guard\x20with\x20expiration_time\x20<\x20now,\x20OR\x20claim\x20on\x20guard\x20with\x20expiration_time\x20<\x20now','trigger_operation':'guard_add\x20/\x20claim'},{'code':0x3,'name':'E_GUARD_COUNT_EXCEEDED','description':'guard_add\x20would\x20exceed\x20MAX_GUARD_COUNT=200\x20(only\x20on\x20NEW\x20guard,\x20not\x20on\x20update\x20of\x20existing)','trigger_operation':'guard_add'},{'code':0x4,'name':'E_RECIPIENT_IDENTIFIER_NOT_ADDRESS','description':'RewardGuard\x20constructor:\x20recipient\x20identifier\x20type\x20is\x20not\x20address\x20(GuardIdentifier\x20variant\x20only)','trigger_operation':'reward_guard\x20(constructor)'},{'code':0x5,'name':'E_AMOUNT_NOT_U64','description':'RewardGuard\x20constructor:\x20amount\x20identifier\x20type\x20is\x20not\x20u64\x20(GuardU64Identifier\x20variant\x20only)','trigger_operation':'reward_guard\x20(constructor)'},{'code':0x6,'name':'E_INSUFFICIENT_BALANCE','description':'claim:\x20balance\x20<\x20amount\x20(cannot\x20split\x20more\x20than\x20held)','trigger_operation':'claim'},{'code':0x7,'name':'E_GUARD_NOT_FOUND','description':'claim:\x20no\x20guard\x20in\x20self.guards\x20matches\x20the\x20supplied\x20guard\x20address','trigger_operation':'claim'},{'code':0x8,'name':'E_RECORD_COUNT_EXCEEDED','description':'claim:\x20recipient\x20already\x20has\x20MAX_RECORD_COUNT=5200\x20entries\x20(E_RECORD_COUNT_EXCEEDED)','trigger_operation':'claim'},{'code':0xa,'name':'E_GUARD_LOCKED_TIME','description':'guard_add\x20while\x20guard_not_added_expiration_time\x20is\x20Some\x20and\x20clock\x20≤\x20expiration_time','trigger_operation':'guard_add'},{'code':0xb,'name':'E_GUARD_LOCKED_TIME_INVALID','description':'guard_expiration_time_add:\x20new\x20Some(t)\x20where\x20t\x20≤\x20now\x20(must\x20be\x20future)','trigger_operation':'guard_expiration_time_add'},{'code':0xc,'name':'E_STORE_FROM_ID_NOT_COMPATIBLE','description':'RewardGuard\x20constructor:\x20store_from_id\x20identifier\x20type\x20is\x20not\x20number\x20or\x20address','trigger_operation':'reward_guard\x20(constructor)'}];export const REWARD_SCENES=[{'id':'reward_first_order','name':'First-order\x20reward','industry':['universal','ecommerce','service','freelance'],'scenario':'New\x20customers\x20receive\x20a\x20fixed\x20reward\x20after\x20their\x20first\x20order.\x20Guard\x20verifies\x20order\x20ownership\x20+\x20first-time\x20status;\x20'+'Recipient=Signer\x20(caller\x20is\x20the\x20new\x20customer);\x20Amount=Fixed\x20(e.g.\x201\x20WOW).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin\x20(e.g.\x200x2::wow::WOW\x20or\x20a\x20custom\x20token)','typical_guard_count':0x1,'recipient_types_used':['Signer'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD],'common_patterns':['guard_signer_u64\x20—\x20caller\x20claims\x20a\x20fixed\x20amount\x20(e.g.\x201\x20WOW)','Guard\x20verifies:\x20order_address.holder\x20==\x20signer\x20AND\x20order\x20is\x20the\x20first\x20order\x20(Repository\x20query)','expiration_time\x20bounds\x20the\x20campaign\x20window\x20(e.g.\x2030\x20days)','coin_add\x20deposits\x20the\x20campaign\x20budget\x20upfront\x20(e.g.\x20100\x20WOW\x20for\x20100\x20claims)'],'recommended_templates':['first_order']},{'id':'reward_referral','name':'Referral\x20viral\x20reward','industry':['universal','ecommerce','service','content'],'scenario':'Both\x20referrer\x20and\x20referee\x20receive\x20a\x20reward\x20when\x20the\x20referee\x20completes\x20a\x20first\x20order.\x20Two\x20guards:\x20one\x20for\x20referrer\x20(Entity),\x20one\x20for\x20referee\x20(Signer).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x2,'recipient_types_used':['Entity','Signer'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':!![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD],'common_patterns':['guard_entity_u64\x20for\x20referrer\x20(recipient\x20=\x20referrer\x20address,\x20fixed\x20amount)','guard_signer_u64\x20for\x20referee\x20(caller\x20is\x20recipient,\x20fixed\x20amount)','Guard\x20verifies:\x20referrer\x20marked\x20in\x20Repository\x20AND\x20referee\x27s\x20order\x20completed','store_from_id\x20may\x20record\x20the\x20order\x20address\x20for\x20audit\x20trail'],'recommended_templates':['referral']},{'id':'reward_loyalty','name':'Loyalty\x20tiered\x20reward','industry':['universal','ecommerce','subscription','content'],'scenario':'Customers\x20unlock\x20higher\x20rewards\x20after\x20reaching\x20cumulative\x20spending\x20tiers.\x20Recipient=Signer;\x20Amount=GuardU64Identifier\x20(tier-dependent\x20amount\x20extracted\x20from\x20Passport).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x1,'recipient_types_used':['Signer'],'amount_types_used':['GuardU64Identifier'],'uses_expiration_time':![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD],'common_patterns':['guard_signer_u8\x20—\x20amount\x20is\x20dynamic,\x20extracted\x20from\x20Passport\x20submission\x20(tier\x20level\x20→\x20reward\x20amount)','Guard\x20verifies:\x20cumulative\x20spend\x20≥\x20tier\x20threshold\x20(Repository\x20query)','No\x20expiration_time\x20—\x20loyalty\x20is\x20perpetual\x20(until\x20deactivated\x20via\x20guard_remove_expired)','Guard\x20submission\x20value\x20type\x20MUST\x20be\x20u64\x20(E_AMOUNT_NOT_U64\x20otherwise)'],'recommended_templates':['loyalty']},{'id':'reward_flash_sale','name':'Limited-time\x20flash\x20sale\x20reward','industry':['universal','ecommerce','retail'],'scenario':'Time-bounded\x20reward\x20for\x20the\x20first\x20N\x20callers.\x20Recipient=Signer;\x20Amount=Fixed.\x20Guard\x20verifies\x20time\x20window\x20+\x20claim\x20count.','phases':['creation','guard_addition','funds_replenish','claim','guard_lock_mgmt'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x1,'recipient_types_used':['Signer'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD,REWARD_GUARD_EXPIRATION_TIME_ADD],'common_patterns':['guard_signer_u64\x20—\x20fixed\x20amount\x20per\x20claim\x20(e.g.\x202\x20WOW)','expiration_time\x20bounds\x20the\x20flash\x20sale\x20window\x20(e.g.\x2048\x20hours)','guard_expiration_time_add\x20(155)\x20may\x20lock\x20further\x20guard\x20additions\x20during\x20the\x20sale','Budget\x20=\x20max_claims\x20×\x20amount;\x20coin_add\x20deposits\x20this\x20upfront'],'recommended_templates':['flash_sale']},{'id':'reward_bulk_discount','name':'Bulk\x20discount\x20/\x20cashback\x20reward','industry':['universal','ecommerce','wholesale','service'],'scenario':'Customer\x20receives\x20cashback\x20proportional\x20to\x20order\x20size.\x20Recipient=Signer\x20or\x20Entity\x20(order\x20holder);\x20Amount=GuardU64Identifier\x20(cashback\x20rate\x20from\x20Passport).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20payment\x20coin\x20type\x20(must\x20match\x20order\x20payment\x20for\x20clean\x20cashback)','typical_guard_count':0x1,'recipient_types_used':['Signer','Entity'],'amount_types_used':['GuardU64Identifier'],'uses_expiration_time':![],'uses_store_from_id':!![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD,REWARD_RECEIVE],'common_patterns':['guard_signer_u8\x20—\x20caller\x20claims\x20dynamic\x20amount\x20(cashback\x20=\x20order_amount\x20×\x20rate)','store_from_id\x20records\x20the\x20order\x20address\x20for\x20cross-reference\x20(audit\x20trail)','receive\x20(154)\x20may\x20be\x20used\x20to\x20accept\x20CoinWrapper<T>\x20refunds\x20that\x20replenish\x20the\x20balance','Guard\x20verifies:\x20order.completed\x20AND\x20order.service\x20==\x20this\x20Service'],'recommended_templates':['cashback']},{'id':'reward_milestone','name':'Service\x20milestone\x20reward','industry':['universal','ecommerce','content','subscription'],'scenario':'When\x20a\x20Service\x20reaches\x20a\x20milestone\x20(e.g.\x20100\x20orders),\x20early\x20supporters\x20receive\x20extra\x20rewards.\x20Recipient=Entity\x20(early\x20customer);\x20Amount=Fixed.','phases':['creation','guard_addition','funds_replenish','claim','guard_lock_mgmt'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x32,'recipient_types_used':['Entity'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD,REWARD_GUARD_EXPIRATION_TIME_ADD],'common_patterns':['guard_entity_u64\x20for\x20each\x20early\x20customer\x20(recipient\x20=\x20customer\x20address,\x20fixed\x20amount)','Multiple\x20guards\x20(up\x20to\x2050\x20for\x2050\x20early\x20supporters)\x20—\x20well\x20within\x20MAX_GUARD_COUNT=200','Guard\x20verifies:\x20Service\x20order_count\x20>=\x20milestone\x20AND\x20claimer\x20is\x20in\x20early-customer\x20list','guard_expiration_time_add\x20(155)\x20may\x20lock\x20the\x20guard\x20list\x20after\x20milestone\x20setup'],'recommended_templates':['milestone']}];export const REWARD_LEDGER_VERSION='1.0.0';export function getScenesByPhase(a){return REWARD_SCENES['filter'](b=>b['phases']['includes'](a));}export function findSceneById(a){return REWARD_SCENES['find'](b=>b['id']===a);}export function getScenesByIndustry(a){return REWARD_SCENES['filter'](b=>b['industry']['includes'](a)||b['industry']['includes']('universal'));}export function getBuiltinPermissionByIndex(a){return REWARD_PERMISSIONS['find'](b=>b['index']===a);}export function isRewardBuiltinPermission(a){return getBuiltinPermissionByIndex(a)!==undefined;}export function getAllBuiltinPermissions(){return[...REWARD_PERMISSIONS];}export function getRewardScenesCount(){return REWARD_SCENES['length'];}export function getGuardConstructorSpec(a){return REWARD_GUARD_CONSTRUCTORS['find'](b=>b['constructor']===a);}export function resolveGuardConstructor(a,b){const c={'GuardIdentifier|GuardU64Identifier':'guard_u8_u8','GuardIdentifier|Fixed':'guard_u8_u64','Entity|GuardU64Identifier':'guard_entity_u8','Entity|Fixed':'guard_entity_u64','Signer|GuardU64Identifier':'guard_signer_u8','Signer|Fixed':'guard_signer_u64'};return c[a+'|'+b];}export function getRewardErrorByCode(a){return REWARD_ERROR_CODES['find'](b=>b['code']===a);}export function getRewardErrorByName(a){return REWARD_ERROR_CODES['find'](b=>b['name']===a);}export function validateGuardCount(a){if(a>=MAX_GUARD_COUNT_REWARD)return{'ok':![],'violation':'Guard\x20count\x20'+a+'\x20would\x20exceed\x20MAX_GUARD_COUNT_REWARD\x20'+MAX_GUARD_COUNT_REWARD};return{'ok':!![]};}export function validateRecordCount(a){if(a>=MAX_RECORD_COUNT_REWARD)return{'ok':![],'violation':'Record\x20count\x20'+a+'\x20would\x20exceed\x20MAX_RECORD_COUNT_REWARD\x20'+MAX_RECORD_COUNT_REWARD+'\x20—\x20recipient\x20can\x20no\x20longer\x20claim'};return{'ok':!![]};}export function inferSceneFromIntent(a){const b=a['toLowerCase'](),c=[['flash\x20sale','reward_flash_sale'],['flash_sale','reward_flash_sale'],['limited-time','reward_flash_sale'],['limited\x20time','reward_flash_sale'],['referral','reward_referral'],['viral','reward_referral'],['refer\x20a\x20friend','reward_referral'],['invite','reward_referral'],['loyalty','reward_loyalty'],['tiered','reward_loyalty'],['tier','reward_loyalty'],['repeat','reward_loyalty'],['cashback','reward_bulk_discount'],['bulk\x20discount','reward_bulk_discount'],['bulk_discount','reward_bulk_discount'],['wholesale','reward_bulk_discount'],['milestone','reward_milestone'],['early\x20supporter','reward_milestone'],['early\x20customer','reward_milestone'],['first\x20order','reward_first_order'],['first_order','reward_first_order'],['new\x20customer','reward_first_order'],['first-time','reward_first_order']];for(const [d,e]of c){if(b['includes'](d)){const f=findSceneById(e);if(f)return f;}}return undefined;}export const REWARD_CROSS_OBJECT_REFS=[{'object':'Permission','phase':'universal','relationship':'Reward.permission\x20(address;\x20borrowed\x20for\x20all\x20150-157\x20assertions)'},{'object':'Permission','phase':'permission_update','relationship':'permission_set:\x20asserts\x20old.owner\x20==\x20sender;\x20creates\x20Registrar\x20affiliation_change'},{'object':'Guard','phase':'guard_addition','relationship':'RewardGuard.guard\x20=\x20guard.id_address\x20(each\x20guard\x20registered\x20via\x20Registrar\x20affiliation)'},{'object':'Guard','phase':'claim','relationship':'claim:\x20iterates\x20self.guards\x20looking\x20for\x20guard.id_address\x20match;\x20E_GUARD_NOT_FOUND\x20if\x20no\x20match'},{'object':'Guard','phase':'claim','relationship':'claim:\x20passport::result_for_guard(passport,\x20guard_id)\x20verifies\x20submission\x20data'},{'object':'Passport','phase':'claim','relationship':'claim:\x20passport::submission_get\x20extracts\x20recipient\x20(address)\x20and/or\x20amount\x20(u64)\x20per\x20RewardGuard\x20variant'},{'object':'Passport','phase':'claim','relationship':'claim:\x20if\x20store_from_id\x20is\x20Some,\x20extracts\x20store-from\x20address\x20from\x20Passport\x20submission'},{'object':'Payment','phase':'funds_replenish','relationship':'receive\x20(154):\x20Payment.unwrap_with_check\x20extracts\x20Coin<T>\x20from\x20CoinWrapper<T>\x20and\x20joins\x20balance'},{'object':'Payment','phase':'owner_receive','relationship':'owner_receive\x20(156):\x20Payment.unwrap_with_check\x20forwards\x20CoinWrapper<K>\x20to\x20Permission\x20owner'},{'object':'Repository','phase':'claim','relationship':'Guard\x20may\x20query\x20Repository\x20(e.g.\x20order\x20history\x20for\x20first-order\x20/\x20loyalty\x20verification)'},{'object':'Service','phase':'claim','relationship':'Guard\x20may\x20verify\x20order.service\x20==\x20this\x20Service\x20(cashback\x20/\x20first-order\x20scenarios)'},{'object':'Demand','phase':'guard_addition','relationship':'Guard\x20may\x20be\x20shared\x20with\x20Demand\x20(recommendation\x20filtering);\x20same\x20Guard\x20object\x20address\x20space'},{'object':'Allocation','phase':'owner_receive','relationship':'Terminal\x20Allocation\x20alloc\x20may\x20route\x20funds\x20back\x20to\x20Reward\x20(replenishment\x20loop)'},{'object':'Contact','phase':'um_mgmt','relationship':'um_set\x20(157):\x20binds\x20Contact\x20(UM)\x20for\x20off-chain\x20coordination;\x20creates\x20Registrar\x20affiliation'},{'object':'Coin','phase':'universal','relationship':'Reward<phantom\x20T>:\x20T\x20is\x20the\x20coin\x20type;\x20balance:\x20Balance<T>;\x20coin_add\x20expects\x20Coin<T>'}];
1
+ import{MAX_GUARD_COUNT_REWARD,MAX_RECORD_COUNT_REWARD}from'./onchain-constants.js';export{MAX_GUARD_COUNT_REWARD,MAX_RECORD_COUNT_REWARD};export const REWARD_NEW={'index':0x96,'name':'REWARD_NEW','description':'Create\x20new\x20Reward<T>\x20(asserted\x20by\x20reward::new\x20/\x20new_with_passport)','governed_operations':['reward::new','reward::new_with_passport'],'sdk_exposed':!![]};export const REWARD_DESCRIPTION={'index':0x97,'name':'REWARD_DESCRIPTION','description':'Update\x20description\x20(asserted\x20by\x20reward::description_set\x20/\x20_with_passport)','governed_operations':['reward::description_set','reward::description_set_with_passport'],'sdk_exposed':!![]};export const REWARD_GUARD={'index':0x98,'name':'REWARD_GUARD','description':'Add\x20/\x20remove\x20expired\x20guards\x20(≤\x20MAX_GUARD_COUNT_REWARD=200)','governed_operations':['reward::guard_add','reward::guard_add_with_passport','reward::guard_remove_expired','reward::guard_remove_expired_with_passport'],'sdk_exposed':!![]};export const REWARD_COIN_ADD={'index':0x99,'name':'REWARD_COIN_ADD','description':'Deposit\x20Coin<T>\x20directly\x20into\x20Reward\x20balance\x20(joins\x20Balance<T>)','governed_operations':['reward::coin_add','reward::coin_add_with_passport'],'sdk_exposed':!![]};export const REWARD_RECEIVE={'index':0x9a,'name':'REWARD_RECEIVE','description':'Receive\x20CoinWrapper<T>\x20via\x20Payment.unwrap_with_check\x20(joins\x20Balance<T>)','governed_operations':['reward::receive','reward::receive_with_passport'],'sdk_exposed':!![]};export const REWARD_GUARD_EXPIRATION_TIME_ADD={'index':0x9b,'name':'REWARD_GUARD_EXPIRATION_TIME_ADD','description':'Set\x20/\x20cancel\x20guard_not_added_expiration_time\x20(time-lock\x20on\x20new\x20guard\x20additions)','governed_operations':['reward::guard_expiration_time_add','reward::guard_expiration_time_add_with_passport'],'sdk_exposed':!![]};export const REWARD_OWNER_RECEIVE={'index':0x9c,'name':'REWARD_OWNER_RECEIVE','description':'Owner\x20receives\x20Receiving<K>\x20/\x20CoinWrapper<K>\x20at\x20terminal\x20state\x20(unwrap\x20→\x20owner)','governed_operations':['reward::owner_receive','reward::owner_receive_with_passport','reward::owner_receive_object','reward::owner_receive_object_with_passport'],'sdk_exposed':!![]};export const REWARD_UM={'index':0x9d,'name':'REWARD_UM','description':'Bind\x20/\x20unbind\x20Contact\x20(UM)\x20for\x20off-chain\x20coordination','governed_operations':['reward::um_set','reward::um_set_with_passport','reward::um_none','reward::um_none_with_passport'],'sdk_exposed':!![]};export const REWARD_PERMISSIONS=[REWARD_NEW,REWARD_DESCRIPTION,REWARD_GUARD,REWARD_COIN_ADD,REWARD_RECEIVE,REWARD_GUARD_EXPIRATION_TIME_ADD,REWARD_OWNER_RECEIVE,REWARD_UM];export const REWARD_FIELDS=[{'name':'id','move_type':'UID','mutability':'immutable','set_at_creation':!![],'constraint':'Object\x20UID;\x20assigned\x20in\x20new_imp\x20via\x20object::new(ctx).\x20Never\x20changes.'},{'name':'description','move_type':'String','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x97,'constraint':'Must\x20satisfy\x20common::DESCRIPTION.\x20Updated\x20via\x20description_set\x20(151).'},{'name':'guards','move_type':'vector<RewardGuard>','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x98,'constraint':'vector::length\x20<\x20MAX_GUARD_COUNT\x20(200);\x20E_GUARD_COUNT_EXCEEDED\x20on\x20overflow.','related_errors':['E_GUARD_COUNT_EXCEEDED']},{'name':'balance','move_type':'Balance<T>','mutability':'runtime','set_at_creation':!![],'constraint':'Zero\x20at\x20creation\x20(balance::zero());\x20grows\x20via\x20coin_add/receive;\x20shrinks\x20via\x20claim\x20(split)\x20and\x20never\x20via\x20direct\x20withdraw.','related_errors':['E_INSUFFICIENT_BALANCE']},{'name':'guard_not_added_expiration_time','move_type':'Option<u64>','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x9b,'constraint':'Option<timestamp_ms>.\x20When\x20Some(t):\x20guard_add\x20requires\x20clock\x20>\x20t\x20(E_GUARD_LOCKED_TIME).\x20When\x20None\x20or\x20t\x20<\x20now:\x20guards\x20can\x20be\x20added.','related_errors':['E_GUARD_LOCKED_TIME','E_GUARD_LOCKED_TIME_NOT_INCREASING','E_GUARD_LOCKED_TIME_INVALID']},{'name':'record','move_type':'ParentTable<address,\x20RecipientRecord>','mutability':'runtime','set_at_creation':!![],'constraint':'Per-recipient\x20claim\x20history.\x20Each\x20RecipientRecord.amount\x20vector\x20has\x20length\x20<\x20MAX_RECORD_COUNT\x20(5200);\x20E_RECORD_COUNT_EXCEEDED\x20on\x20overflow.','related_errors':['E_RECORD_COUNT_EXCEEDED']},{'name':'um','move_type':'Option<address>','mutability':'admin_mutable','set_at_creation':!![],'permission_index':0x9d,'constraint':'Option<Contact\x20address>.\x20um_set\x20creates\x20object-linker\x20core\x20binding;\x20um_none\x20disaffiliates.'},{'name':'permission','move_type':'address','mutability':'admin_mutable','set_at_creation':!![],'constraint':'Permission\x20object\x20address.\x20Updated\x20via\x20permission_set\x20(asserts\x20old.owner\x20==\x20sender).\x20Creates\x20object_linker::affiliation_change_core.'}];export const REWARD_GUARD_CONSTRUCTORS=[{'constructor':'guard_u8_u8','recipient_type':'GuardIdentifier','amount_type':'GuardU64Identifier','params':{'recipient_param':'u8','amount_param':'u8','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['is_identifier_address(guard,\x20recipient)\x20—\x20E_RECIPIENT_IDENTIFIER_NOT_ADDRESS\x20(4)','get_submission_value_type(guard,\x20amount)\x20must\x20be\x20Some(TYPE_U64)\x20—\x20E_AMOUNT_NOT_U64\x20(5)','if\x20store_from_id\x20is\x20Some:\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Dynamic\x20recipient\x20+\x20dynamic\x20amount\x20—\x20both\x20extracted\x20from\x20Passport\x20at\x20claim\x20time\x20(e.g.\x20referral\x20rewards\x20where\x20referrer\x20and\x20amount\x20vary\x20per\x20claim).'},{'constructor':'guard_u8_u64','recipient_type':'GuardIdentifier','amount_type':'Fixed','params':{'recipient_param':'u8','amount_param':'u64','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['is_identifier_address(guard,\x20recipient)\x20—\x20E_RECIPIENT_IDENTIFIER_NOT_ADDRESS\x20(4)','if\x20store_from_id\x20is\x20Some:\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Dynamic\x20recipient\x20+\x20fixed\x20amount\x20—\x20e.g.\x20first-order\x20reward\x20where\x20any\x20new\x20customer\x20claims\x20a\x20fixed\x201\x20WOW.'},{'constructor':'guard_entity_u8','recipient_type':'Entity','amount_type':'GuardU64Identifier','params':{'recipient_param':'address','amount_param':'u8','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['get_submission_value_type(guard,\x20amount)\x20must\x20be\x20Some(TYPE_U64)\x20—\x20E_AMOUNT_NOT_U64\x20(5)','if\x20store_from_id\x20is\x20Some:\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Fixed\x20recipient\x20+\x20dynamic\x20amount\x20—\x20e.g.\x20tiered\x20loyalty\x20reward\x20where\x20amount\x20depends\x20on\x20Passport\x20submission\x20(tier\x20level).'},{'constructor':'guard_entity_u64','recipient_type':'Entity','amount_type':'Fixed','params':{'recipient_param':'address','amount_param':'u64','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['if\x20store_from_id\x20is\x20Some:\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Fully\x20fixed\x20recipient\x20+\x20amount\x20—\x20simplest\x20configuration\x20(e.g.\x20specific\x20partner\x20bounty).'},{'constructor':'guard_signer_u8','recipient_type':'Signer','amount_type':'GuardU64Identifier','params':{'amount_param':'u8','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['get_submission_value_type(guard,\x20amount)\x20must\x20be\x20Some(TYPE_U64)\x20—\x20E_AMOUNT_NOT_U64\x20(5)','if\x20store_from_id\x20is\x20Some:\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Caller\x20is\x20recipient\x20+\x20dynamic\x20amount\x20—\x20e.g.\x20self-service\x20claim\x20where\x20amount\x20depends\x20on\x20Passport\x20submission\x20(e.g.\x20cashback\x20rate).'},{'constructor':'guard_signer_u64','recipient_type':'Signer','amount_type':'Fixed','params':{'amount_param':'u64','expiration_time':'Option<u64>','store_from_id':'Option<u8>'},'construction_checks':['if\x20store_from_id\x20is\x20Some:\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE\x20(12)'],'typical_use':'Caller\x20is\x20recipient\x20+\x20fixed\x20amount\x20—\x20e.g.\x20flash\x20sale\x20where\x20any\x20eligible\x20caller\x20claims\x20a\x20fixed\x20reward.'}];export const REWARD_ERROR_CODES=[{'code':0x1,'name':'E_GUARD_LOCKED_TIME_NOT_INCREASING','description':'guard_expiration_time_add:\x20new\x20time\x20<\x20current\x20clock\x20(must\x20be\x20≥\x20now)','trigger_operation':'guard_expiration_time_add'},{'code':0x2,'name':'E_GUARD_EXPIRED','description':'guard_add\x20on\x20guard\x20with\x20expiration_time\x20<\x20now,\x20OR\x20claim\x20on\x20guard\x20with\x20expiration_time\x20<\x20now','trigger_operation':'guard_add\x20/\x20claim'},{'code':0x3,'name':'E_GUARD_COUNT_EXCEEDED','description':'guard_add\x20would\x20exceed\x20MAX_GUARD_COUNT=200\x20(only\x20on\x20NEW\x20guard,\x20not\x20on\x20update\x20of\x20existing)','trigger_operation':'guard_add'},{'code':0x4,'name':'E_RECIPIENT_IDENTIFIER_NOT_ADDRESS','description':'RewardGuard\x20constructor:\x20recipient\x20identifier\x20type\x20is\x20not\x20address\x20(GuardIdentifier\x20variant\x20only)','trigger_operation':'reward_guard\x20(constructor)'},{'code':0x5,'name':'E_AMOUNT_NOT_U64','description':'RewardGuard\x20constructor:\x20amount\x20identifier\x20type\x20is\x20not\x20u64\x20(GuardU64Identifier\x20variant\x20only)','trigger_operation':'reward_guard\x20(constructor)'},{'code':0x6,'name':'E_INSUFFICIENT_BALANCE','description':'claim:\x20balance\x20<\x20amount\x20(cannot\x20split\x20more\x20than\x20held)','trigger_operation':'claim'},{'code':0x7,'name':'E_GUARD_NOT_FOUND','description':'claim:\x20no\x20guard\x20in\x20self.guards\x20matches\x20the\x20supplied\x20guard\x20address','trigger_operation':'claim'},{'code':0x8,'name':'E_RECORD_COUNT_EXCEEDED','description':'claim:\x20recipient\x20already\x20has\x20MAX_RECORD_COUNT=5200\x20entries\x20(E_RECORD_COUNT_EXCEEDED)','trigger_operation':'claim'},{'code':0xa,'name':'E_GUARD_LOCKED_TIME','description':'guard_add\x20while\x20guard_not_added_expiration_time\x20is\x20Some\x20and\x20clock\x20≤\x20expiration_time','trigger_operation':'guard_add'},{'code':0xb,'name':'E_GUARD_LOCKED_TIME_INVALID','description':'guard_expiration_time_add:\x20new\x20Some(t)\x20where\x20t\x20≤\x20now\x20(must\x20be\x20future)','trigger_operation':'guard_expiration_time_add'},{'code':0xc,'name':'E_STORE_FROM_ID_NOT_COMPATIBLE','description':'RewardGuard\x20constructor:\x20store_from_id\x20identifier\x20type\x20is\x20not\x20number\x20or\x20address','trigger_operation':'reward_guard\x20(constructor)'}];export const REWARD_SCENES=[{'id':'reward_first_order','name':'First-order\x20reward','industry':['universal','ecommerce','service','freelance'],'scenario':'New\x20customers\x20receive\x20a\x20fixed\x20reward\x20after\x20their\x20first\x20order.\x20Guard\x20verifies\x20order\x20ownership\x20+\x20first-time\x20status;\x20'+'Recipient=Signer\x20(caller\x20is\x20the\x20new\x20customer);\x20Amount=Fixed\x20(e.g.\x201\x20WOW).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin\x20(e.g.\x200x2::wow::WOW\x20or\x20a\x20custom\x20token)','typical_guard_count':0x1,'recipient_types_used':['Signer'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD],'common_patterns':['guard_signer_u64\x20—\x20caller\x20claims\x20a\x20fixed\x20amount\x20(e.g.\x201\x20WOW)','Guard\x20verifies:\x20order_address.holder\x20==\x20signer\x20AND\x20order\x20is\x20the\x20first\x20order\x20(Repository\x20query)','expiration_time\x20bounds\x20the\x20campaign\x20window\x20(e.g.\x2030\x20days)','coin_add\x20deposits\x20the\x20campaign\x20budget\x20upfront\x20(e.g.\x20100\x20WOW\x20for\x20100\x20claims)'],'recommended_templates':['first_order']},{'id':'reward_referral','name':'Referral\x20viral\x20reward','industry':['universal','ecommerce','service','content'],'scenario':'Both\x20referrer\x20and\x20referee\x20receive\x20a\x20reward\x20when\x20the\x20referee\x20completes\x20a\x20first\x20order.\x20Two\x20guards:\x20one\x20for\x20referrer\x20(Entity),\x20one\x20for\x20referee\x20(Signer).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x2,'recipient_types_used':['Entity','Signer'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':!![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD],'common_patterns':['guard_entity_u64\x20for\x20referrer\x20(recipient\x20=\x20referrer\x20address,\x20fixed\x20amount)','guard_signer_u64\x20for\x20referee\x20(caller\x20is\x20recipient,\x20fixed\x20amount)','Guard\x20verifies:\x20referrer\x20marked\x20in\x20Repository\x20AND\x20referee\x27s\x20order\x20completed','store_from_id\x20may\x20record\x20the\x20order\x20address\x20for\x20audit\x20trail'],'recommended_templates':['referral']},{'id':'reward_loyalty','name':'Loyalty\x20tiered\x20reward','industry':['universal','ecommerce','subscription','content'],'scenario':'Customers\x20unlock\x20higher\x20rewards\x20after\x20reaching\x20cumulative\x20spending\x20tiers.\x20Recipient=Signer;\x20Amount=GuardU64Identifier\x20(tier-dependent\x20amount\x20extracted\x20from\x20Passport).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x1,'recipient_types_used':['Signer'],'amount_types_used':['GuardU64Identifier'],'uses_expiration_time':![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD],'common_patterns':['guard_signer_u8\x20—\x20amount\x20is\x20dynamic,\x20extracted\x20from\x20Passport\x20submission\x20(tier\x20level\x20→\x20reward\x20amount)','Guard\x20verifies:\x20cumulative\x20spend\x20≥\x20tier\x20threshold\x20(Repository\x20query)','No\x20expiration_time\x20—\x20loyalty\x20is\x20perpetual\x20(until\x20deactivated\x20via\x20guard_remove_expired)','Guard\x20submission\x20value\x20type\x20MUST\x20be\x20u64\x20(E_AMOUNT_NOT_U64\x20otherwise)'],'recommended_templates':['loyalty']},{'id':'reward_flash_sale','name':'Limited-time\x20flash\x20sale\x20reward','industry':['universal','ecommerce','retail'],'scenario':'Time-bounded\x20reward\x20for\x20the\x20first\x20N\x20callers.\x20Recipient=Signer;\x20Amount=Fixed.\x20Guard\x20verifies\x20time\x20window\x20+\x20claim\x20count.','phases':['creation','guard_addition','funds_replenish','claim','guard_lock_mgmt'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x1,'recipient_types_used':['Signer'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD,REWARD_GUARD_EXPIRATION_TIME_ADD],'common_patterns':['guard_signer_u64\x20—\x20fixed\x20amount\x20per\x20claim\x20(e.g.\x202\x20WOW)','expiration_time\x20bounds\x20the\x20flash\x20sale\x20window\x20(e.g.\x2048\x20hours)','guard_expiration_time_add\x20(155)\x20may\x20lock\x20further\x20guard\x20additions\x20during\x20the\x20sale','Budget\x20=\x20max_claims\x20×\x20amount;\x20coin_add\x20deposits\x20this\x20upfront'],'recommended_templates':['flash_sale']},{'id':'reward_bulk_discount','name':'Bulk\x20discount\x20/\x20cashback\x20reward','industry':['universal','ecommerce','wholesale','service'],'scenario':'Customer\x20receives\x20cashback\x20proportional\x20to\x20order\x20size.\x20Recipient=Signer\x20or\x20Entity\x20(order\x20holder);\x20Amount=GuardU64Identifier\x20(cashback\x20rate\x20from\x20Passport).','phases':['creation','guard_addition','funds_replenish','claim'],'coin_type_note':'T\x20=\x20payment\x20coin\x20type\x20(must\x20match\x20order\x20payment\x20for\x20clean\x20cashback)','typical_guard_count':0x1,'recipient_types_used':['Signer','Entity'],'amount_types_used':['GuardU64Identifier'],'uses_expiration_time':![],'uses_store_from_id':!![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD,REWARD_RECEIVE],'common_patterns':['guard_signer_u8\x20—\x20caller\x20claims\x20dynamic\x20amount\x20(cashback\x20=\x20order_amount\x20×\x20rate)','store_from_id\x20records\x20the\x20order\x20address\x20for\x20cross-reference\x20(audit\x20trail)','receive\x20(154)\x20may\x20be\x20used\x20to\x20accept\x20CoinWrapper<T>\x20refunds\x20that\x20replenish\x20the\x20balance','Guard\x20verifies:\x20order.completed\x20AND\x20order.service\x20==\x20this\x20Service'],'recommended_templates':['cashback']},{'id':'reward_milestone','name':'Service\x20milestone\x20reward','industry':['universal','ecommerce','content','subscription'],'scenario':'When\x20a\x20Service\x20reaches\x20a\x20milestone\x20(e.g.\x20100\x20orders),\x20early\x20supporters\x20receive\x20extra\x20rewards.\x20Recipient=Entity\x20(early\x20customer);\x20Amount=Fixed.','phases':['creation','guard_addition','funds_replenish','claim','guard_lock_mgmt'],'coin_type_note':'T\x20=\x20project\x20reward\x20coin','typical_guard_count':0x32,'recipient_types_used':['Entity'],'amount_types_used':['Fixed'],'uses_expiration_time':!![],'uses_store_from_id':![],'builtin_indexes_consumed':[REWARD_NEW,REWARD_GUARD,REWARD_COIN_ADD,REWARD_GUARD_EXPIRATION_TIME_ADD],'common_patterns':['guard_entity_u64\x20for\x20each\x20early\x20customer\x20(recipient\x20=\x20customer\x20address,\x20fixed\x20amount)','Multiple\x20guards\x20(up\x20to\x2050\x20for\x2050\x20early\x20supporters)\x20—\x20well\x20within\x20MAX_GUARD_COUNT=200','Guard\x20verifies:\x20Service\x20order_count\x20>=\x20milestone\x20AND\x20claimer\x20is\x20in\x20early-customer\x20list','guard_expiration_time_add\x20(155)\x20may\x20lock\x20the\x20guard\x20list\x20after\x20milestone\x20setup'],'recommended_templates':['milestone']}];export const REWARD_LEDGER_VERSION='1.0.0';export function getScenesByPhase(a){return REWARD_SCENES['filter'](b=>b['phases']['includes'](a));}export function findSceneById(a){return REWARD_SCENES['find'](b=>b['id']===a);}export function getScenesByIndustry(a){return REWARD_SCENES['filter'](b=>b['industry']['includes'](a)||b['industry']['includes']('universal'));}export function getBuiltinPermissionByIndex(a){return REWARD_PERMISSIONS['find'](b=>b['index']===a);}export function isRewardBuiltinPermission(a){return getBuiltinPermissionByIndex(a)!==undefined;}export function getAllBuiltinPermissions(){return[...REWARD_PERMISSIONS];}export function getRewardScenesCount(){return REWARD_SCENES['length'];}export function getGuardConstructorSpec(a){return REWARD_GUARD_CONSTRUCTORS['find'](b=>b['constructor']===a);}export function resolveGuardConstructor(a,b){const c={'GuardIdentifier|GuardU64Identifier':'guard_u8_u8','GuardIdentifier|Fixed':'guard_u8_u64','Entity|GuardU64Identifier':'guard_entity_u8','Entity|Fixed':'guard_entity_u64','Signer|GuardU64Identifier':'guard_signer_u8','Signer|Fixed':'guard_signer_u64'};return c[a+'|'+b];}export function getRewardErrorByCode(a){return REWARD_ERROR_CODES['find'](b=>b['code']===a);}export function getRewardErrorByName(a){return REWARD_ERROR_CODES['find'](b=>b['name']===a);}export function validateGuardCount(a){if(a>=MAX_GUARD_COUNT_REWARD)return{'ok':![],'violation':'Guard\x20count\x20'+a+'\x20would\x20exceed\x20MAX_GUARD_COUNT_REWARD\x20'+MAX_GUARD_COUNT_REWARD};return{'ok':!![]};}export function validateRecordCount(a){if(a>=MAX_RECORD_COUNT_REWARD)return{'ok':![],'violation':'Record\x20count\x20'+a+'\x20would\x20exceed\x20MAX_RECORD_COUNT_REWARD\x20'+MAX_RECORD_COUNT_REWARD+'\x20—\x20recipient\x20can\x20no\x20longer\x20claim'};return{'ok':!![]};}export function inferSceneFromIntent(a){const b=a['toLowerCase'](),c=[['flash\x20sale','reward_flash_sale'],['flash_sale','reward_flash_sale'],['limited-time','reward_flash_sale'],['limited\x20time','reward_flash_sale'],['referral','reward_referral'],['viral','reward_referral'],['refer\x20a\x20friend','reward_referral'],['invite','reward_referral'],['loyalty','reward_loyalty'],['tiered','reward_loyalty'],['tier','reward_loyalty'],['repeat','reward_loyalty'],['cashback','reward_bulk_discount'],['bulk\x20discount','reward_bulk_discount'],['bulk_discount','reward_bulk_discount'],['wholesale','reward_bulk_discount'],['milestone','reward_milestone'],['early\x20supporter','reward_milestone'],['early\x20customer','reward_milestone'],['first\x20order','reward_first_order'],['first_order','reward_first_order'],['new\x20customer','reward_first_order'],['first-time','reward_first_order']];for(const [d,e]of c){if(b['includes'](d)){const f=findSceneById(e);if(f)return f;}}return undefined;}export const REWARD_CROSS_OBJECT_REFS=[{'object':'Permission','phase':'universal','relationship':'Reward.permission\x20(address;\x20borrowed\x20for\x20all\x20150-157\x20assertions)'},{'object':'Permission','phase':'permission_update','relationship':'permission_set:\x20asserts\x20old.owner\x20==\x20sender;\x20creates\x20object_linker::affiliation_change_core'},{'object':'Guard','phase':'guard_addition','relationship':'RewardGuard.guard\x20=\x20guard.id_address\x20(each\x20guard\x20registered\x20via\x20object-linker\x20core\x20binding)'},{'object':'Guard','phase':'claim','relationship':'claim:\x20iterates\x20self.guards\x20looking\x20for\x20guard.id_address\x20match;\x20E_GUARD_NOT_FOUND\x20if\x20no\x20match'},{'object':'Guard','phase':'claim','relationship':'claim:\x20passport::result_for_guard(passport,\x20guard_id)\x20verifies\x20submission\x20data'},{'object':'Passport','phase':'claim','relationship':'claim:\x20passport::submission_get\x20extracts\x20recipient\x20(address)\x20and/or\x20amount\x20(u64)\x20per\x20RewardGuard\x20variant'},{'object':'Passport','phase':'claim','relationship':'claim:\x20if\x20store_from_id\x20is\x20Some,\x20extracts\x20store-from\x20address\x20from\x20Passport\x20submission'},{'object':'Payment','phase':'funds_replenish','relationship':'receive\x20(154):\x20Payment.unwrap_with_check\x20extracts\x20Coin<T>\x20from\x20CoinWrapper<T>\x20and\x20joins\x20balance'},{'object':'Payment','phase':'owner_receive','relationship':'owner_receive\x20(156):\x20Payment.unwrap_with_check\x20forwards\x20CoinWrapper<K>\x20to\x20Permission\x20owner'},{'object':'Repository','phase':'claim','relationship':'Guard\x20may\x20query\x20Repository\x20(e.g.\x20order\x20history\x20for\x20first-order\x20/\x20loyalty\x20verification)'},{'object':'Service','phase':'claim','relationship':'Guard\x20may\x20verify\x20order.service\x20==\x20this\x20Service\x20(cashback\x20/\x20first-order\x20scenarios)'},{'object':'Demand','phase':'guard_addition','relationship':'Guard\x20may\x20be\x20shared\x20with\x20Demand\x20(recommendation\x20filtering);\x20same\x20Guard\x20object\x20address\x20space'},{'object':'Allocation','phase':'owner_receive','relationship':'Terminal\x20Allocation\x20alloc\x20may\x20route\x20funds\x20back\x20to\x20Reward\x20(replenishment\x20loop)'},{'object':'Contact','phase':'um_mgmt','relationship':'um_set\x20(157):\x20binds\x20Contact\x20(UM)\x20for\x20off-chain\x20coordination;\x20creates\x20object-linker\x20core\x20binding'},{'object':'Coin','phase':'universal','relationship':'Reward<phantom\x20T>:\x20T\x20is\x20the\x20coin\x20type;\x20balance:\x20Balance<T>;\x20coin_add\x20expects\x20Coin<T>'}];
@@ -1 +1 @@
1
- import{isRewardBuiltinPermission,getBuiltinPermissionByIndex,resolveGuardConstructor}from'./reward-ledger.js';export const REWARD_SEMANTIC_TO_SCHEMA_RULES=[{'id':'P-RW-01','pattern_name':'Create\x20new\x20Reward','semantic_intent':'Initialize\x20a\x20new\x20Reward<T>\x20object\x20with\x20description,\x20Permission,\x20and\x20coin\x20type\x20T','match_keywords':['create\x20reward','new\x20reward'],'schema_fields':['object\x20(typed,\x20with\x20permission\x20+\x20type_parameter)','description'],'example_json':{'object':{'permission':'0xPERMISSION_ADDRESS','type_parameter':'0x2::wow::WOW'},'description':'First-order\x20cashback\x20reward'},'reverse_explanation':'object\x20with\x20type_parameter\x20triggers\x20reward::new\x20(150).\x20SDK\x20creates\x20Permission\x20if\x20not\x20provided,\x20'+'then\x20constructs\x20Reward<T>\x20via\x20new_imp.\x20After\x20create,\x20share_object\x20is\x20called\x20automatically.'},{'id':'P-RW-02','pattern_name':'Add\x20RewardGuard\x20(eligible\x20recipient\x20+\x20amount\x20rule)','semantic_intent':'Register\x20a\x20Guard\x20that\x20defines\x20who\x20can\x20claim\x20and\x20how\x20much\x20they\x20receive','match_keywords':['guard_add','add\x20guard','eligibility'],'schema_fields':['object','guard_add[]'],'example_json':{'object':'0xREWARD_ADDRESS','guard_add':[{'guard':'0xGUARD_ADDRESS','recipient':{'Signer':'signer'},'amount':{'type':'Fixed','value':0x3b9aca00},'expiration_time':0x1941f297c00,'store_from_id':null}]},'reverse_explanation':'guard_add\x20with\x20one\x20entry\x20triggers\x20reward::guard_add\x20(152).\x20SDK\x20reward_guard()\x20picks\x20one\x20of\x206\x20Move\x20constructors\x20'+'based\x20on\x20recipient\x20variant\x20(GuardIdentifier/Entity/Signer)\x20×\x20amount.type\x20(GuardU64Identifier/Fixed).\x20'+'Move:\x20if\x20guard\x20already\x20in\x20self.guards,\x20UPDATE\x20in\x20place;\x20else\x20push_back\x20(E_GUARD_COUNT_EXCEEDED\x20if\x20>\x20200).'},{'id':'P-RW-03','pattern_name':'Claim\x20reward\x20(passport-driven)','semantic_intent':'Claim\x20rewards\x20as\x20an\x20eligible\x20recipient,\x20verified\x20via\x20Guard\x20+\x20Passport','match_keywords':['claim','receive\x20reward'],'schema_fields':['object','claim\x20(guard\x20address)'],'example_json':{'object':'0xREWARD_ADDRESS','claim':'0xGUARD_ADDRESS'},'reverse_explanation':'claim\x20field\x20set\x20to\x20a\x20guard\x20address\x20triggers\x20reward::claim\x20(NO\x20permission\x20check).\x20'+'Move:\x20iterates\x20self.guards\x20looking\x20for\x20matching\x20guard.id_address;\x20passport::result_for_guard\x20verifies\x20submission;\x20'+'recipient/amount\x20resolved\x20from\x20Passport\x20submissions\x20OR\x20fixed\x20values;\x20'+'balance::split\x20transfers\x20coin\x20to\x20recipient;\x20record\x20appended\x20to\x20RecipientRecord.amount\x20vector.'},{'id':'P-RW-04','pattern_name':'Deposit\x20funds\x20(coin_add)','semantic_intent':'Deposit\x20Coin<T>\x20into\x20the\x20Reward\x20balance\x20to\x20fund\x20claims','match_keywords':['coin_add','deposit','deposit\x20funds'],'schema_fields':['object','coin_add'],'example_json':{'object':'0xREWARD_ADDRESS','coin_add':{'amount':'10000000000','coin_type':'0x2::wow::WOW'}},'reverse_explanation':'coin_add\x20triggers\x20reward::coin_add\x20(153).\x20Move:\x20coin::into_balance(coin)\x20→\x20balance::join(self.balance).\x20'+'Coin<T>\x20type\x20must\x20match\x20Reward<T>\x20exactly\x20(phantom\x20T).\x20No\x20upper\x20limit\x20on\x20balance.'},{'id':'P-RW-05','pattern_name':'Receive\x20CoinWrapper\x20via\x20Payment','semantic_intent':'Receive\x20a\x20CoinWrapper<T>\x20envelope\x20via\x20Payment.unwrap_with_check','match_keywords':['receive','payment','unwrap'],'schema_fields':['object','receive\x20(payment\x20+\x20received)'],'example_json':{'object':'0xREWARD_ADDRESS','receive':{'received':[{'id':'0xRECEIVED_OBJ','payment':'0xPAYMENT_OBJ'}],'token_type':'0x2::wow::WOW'}},'reverse_explanation':'receive\x20with\x20Receiving<CoinWrapper<T>>\x20+\x20Payment<T>\x20triggers\x20reward::receive\x20(154).\x20'+'Move:\x20payment::unwrap_with_check\x20extracts\x20Coin<T>\x20from\x20CoinWrapper<T>,\x20then\x20balance::join.\x20'+'token_type\x20must\x20match\x20Reward<T>.'},{'id':'P-RW-06','pattern_name':'Owner\x20receive\x20(terminal\x20disbursement)','semantic_intent':'Owner\x20unwraps\x20Receiving<K>\x20/\x20CoinWrapper<K>\x20envelopes\x20sent\x20to\x20the\x20Reward','match_keywords':['owner_receive','unwrap\x20to\x20owner'],'schema_fields':['object','owner_receive'],'example_json':{'object':'0xREWARD_ADDRESS','owner_receive':{'received':[{'id':'0xRECEIVED_OBJ','payment':'0xPAYMENT_OBJ'}],'token_type':'0x2::wow::WOW'}},'reverse_explanation':'owner_receive\x20triggers\x20reward::owner_receive\x20(156).\x20Move:\x20payment::unwrap_with_check\x20extracts\x20Coin<K>,\x20'+'then\x20permission::owner_receive_inner\x20forwards\x20to\x20Permission\x20owner\x20(NOT\x20Reward\x20creator).\x20'+'Does\x20NOT\x20drain\x20self.balance\x20—\x20only\x20unwraps\x20Receiving<K>\x20envelopes.'},{'id':'P-RW-07','pattern_name':'Set\x20UM\x20(Contact\x20binding)','semantic_intent':'Bind\x20or\x20unbind\x20a\x20Contact\x20(UM)\x20object\x20for\x20off-chain\x20coordination','match_keywords':['um_set','um_none','contact','UM'],'schema_fields':['object','um\x20(string\x20|\x20null)'],'example_json':{'object':'0xREWARD_ADDRESS','um':'0xCONTACT_ADDRESS'},'reverse_explanation':'um=<address>\x20triggers\x20reward::um_set\x20(157)\x20—\x20creates\x20Registrar\x20affiliation.\x20'+'um=null\x20triggers\x20reward::um_none\x20(157)\x20—\x20disaffiliates\x20and\x20clears\x20self.um.'},{'id':'P-RW-08','pattern_name':'Set\x20permission\x20(owner-only)','semantic_intent':'Replace\x20the\x20Permission\x20object\x20(owner-only\x20operation)','match_keywords':['permission_set','change\x20permission'],'schema_fields':['(SDK\x20does\x20not\x20expose\x20this\x20in\x20CallReward_Data\x20—\x20direct\x20Move\x20call\x20required)'],'example_json':{'_note':'Not\x20exposed\x20in\x20CallReward_Data;\x20direct\x20Move\x20call:','target':'reward::permission_set<T>','arguments':['reward','old_permission','new_permission','registrar','clock']},'reverse_explanation':'Calls\x20reward::permission_set.\x20Move\x20asserts\x20old.owner\x20==\x20sender\x20(tx_context::sender).\x20'+'Updates\x20self.permission\x20=\x20new.id_address;\x20creates\x20Registrar\x20affiliation_change.'}];export const REWARD_SCHEMA_TO_SEMANTIC_RULES=[{'element_type':'field','type_name':'object','semantic_explanation':'Reward\x20object\x20address.\x20For\x20create:\x20typed\x20object\x20with\x20permission\x20+\x20type_parameter.\x20For\x20operate:\x20existing\x20Reward\x20address.'},{'element_type':'field','type_name':'claim','semantic_explanation':'Guard\x20address\x20to\x20claim\x20against.\x20NO\x20permission\x20check\x20—\x20eligibility\x20determined\x20by\x20Guard\x20+\x20Passport\x20alone.'},{'element_type':'field','type_name':'description','semantic_explanation':'Reward\x20description\x20(must\x20satisfy\x20common::DESCRIPTION).\x20Updated\x20via\x20description_set\x20(151).'},{'element_type':'field','type_name':'coin_add','semantic_explanation':'Deposit\x20Coin<T>\x20into\x20balance.\x20coin_type\x20must\x20match\x20Reward<T>\x20(153\x20permission).'},{'element_type':'field','type_name':'receive','semantic_explanation':'Receive\x20CoinWrapper<T>\x20via\x20Payment.unwrap_with_check.\x20token_type\x20must\x20match\x20Reward<T>\x20(154\x20permission).'},{'element_type':'field','type_name':'guard_add','semantic_explanation':'Array\x20of\x20RewardGuard\x20configs.\x20Each\x20entry\x20has\x20guard,\x20recipient\x20(GuardIdentifier/Entity/Signer),\x20amount\x20(Fixed/GuardU64Identifier),\x20expiration_time,\x20store_from_id.\x20(152\x20permission)'},{'element_type':'field','type_name':'guard_remove_expired','semantic_explanation':'Boolean.\x20If\x20true,\x20removes\x20all\x20guards\x20with\x20expiration_time\x20<\x20now.\x20(152\x20permission)'},{'element_type':'field','type_name':'guard_expiration_time','semantic_explanation':'Set/cancel\x20guard_not_added_expiration_time.\x20number\x20=\x20set\x20lock;\x20null\x20=\x20cancel.\x20(155\x20permission)'},{'element_type':'field','type_name':'owner_receive','semantic_explanation':'Receive\x20Receiving<K>\x20/\x20CoinWrapper<K>\x20envelopes\x20and\x20forward\x20to\x20Permission\x20owner.\x20(156\x20permission)'},{'element_type':'field','type_name':'um','semantic_explanation':'Bind/unbind\x20Contact\x20(UM).\x20string\x20=\x20um_set;\x20null\x20=\x20um_none.\x20(157\x20permission)'},{'element_type':'op','type_name':'new','semantic_explanation':'Create\x20Reward<T>\x20(150\x20permission).\x20Indirect\x20via\x20SDK\x20newReward()\x20→\x20reward::new\x20or\x20new_with_passport.'},{'element_type':'op','type_name':'create','semantic_explanation':'Share\x20Reward\x20object\x20and\x20return\x20its\x20address.\x20Called\x20automatically\x20after\x20new.'},{'element_type':'op','type_name':'claim','semantic_explanation':'Claim\x20rewards\x20(NO\x20permission).\x20Passport-driven:\x20Guard\x20verification\x20+\x20recipient/amount\x20resolution\x20from\x20submissions.'},{'element_type':'op','type_name':'guard_add','semantic_explanation':'Add\x20or\x20update\x20a\x20RewardGuard\x20(152).\x20Existing\x20guard\x20(same\x20address)\x20is\x20updated\x20in\x20place;\x20new\x20guard\x20pushes\x20(E_GUARD_COUNT_EXCEEDED\x20if\x20>\x20200).'},{'element_type':'op','type_name':'guard_remove_expired','semantic_explanation':'Remove\x20all\x20guards\x20with\x20expiration_time\x20<\x20now\x20(152).\x20Also\x20disaffiliates\x20from\x20Registrar.'},{'element_type':'op','type_name':'coin_add','semantic_explanation':'Deposit\x20Coin<T>\x20into\x20balance\x20(153).\x20balance::join(self.balance,\x20coin::into_balance(coin)).'},{'element_type':'op','type_name':'receive','semantic_explanation':'Receive\x20CoinWrapper<T>\x20via\x20Payment\x20(154).\x20unwrap_with_check\x20→\x20balance::join.'},{'element_type':'op','type_name':'guard_expiration_time_add','semantic_explanation':'Set/cancel\x20guard_not_added_expiration_time\x20(155).\x20New\x20time\x20must\x20be\x20>\x20now\x20(E_GUARD_LOCKED_TIME_INVALID).'},{'element_type':'op','type_name':'owner_receive','semantic_explanation':'Owner\x20unwrap\x20Receiving<K>/CoinWrapper<K>\x20(156).\x20Forwards\x20to\x20Permission\x20owner\x20via\x20owner_receive_inner.'},{'element_type':'op','type_name':'um_set','semantic_explanation':'Bind\x20Contact\x20as\x20UM\x20(157).\x20Creates\x20Registrar\x20affiliation.'},{'element_type':'op','type_name':'um_none','semantic_explanation':'Unbind\x20UM\x20(157).\x20Disaffiliates\x20from\x20Registrar\x20and\x20sets\x20self.um\x20=\x20none.'},{'element_type':'op','type_name':'description_set','semantic_explanation':'Update\x20description\x20(151).\x20Must\x20satisfy\x20common::DESCRIPTION.'},{'element_type':'op','type_name':'permission_set','semantic_explanation':'Replace\x20Permission\x20(owner-only).\x20Asserts\x20old.owner\x20==\x20sender;\x20creates\x20Registrar\x20affiliation_change.'},{'element_type':'phase','type_name':'creation','semantic_explanation':'new\x20(150)\x20→\x20create\x20→\x20share.\x20Permission\x20object\x20may\x20be\x20created\x20in\x20same\x20tx\x20if\x20not\x20provided.'},{'element_type':'phase','type_name':'guard_addition','semantic_explanation':'guard_add\x20(152)\x20+\x20guard_remove_expired\x20(152).\x20Guards\x20are\x20added/updated/removed\x20based\x20on\x20expiration.'},{'element_type':'phase','type_name':'claim','semantic_explanation':'claim()\x20—\x20passport-driven,\x20no\x20permission.\x20Iterates\x20guards,\x20verifies\x20Passport,\x20splits\x20balance\x20to\x20recipient.'},{'element_type':'phase','type_name':'funds_replenish','semantic_explanation':'coin_add\x20(153)\x20OR\x20receive\x20(154).\x20Both\x20join\x20into\x20self.balance.'},{'element_type':'phase','type_name':'owner_receive','semantic_explanation':'owner_receive\x20/\x20owner_receive_object\x20(156).\x20Unwrap\x20Receiving\x20envelopes\x20→\x20Permission\x20owner.'},{'element_type':'constructor','type_name':'guard_u8_u8','semantic_explanation':'RewardGuard\x20constructor:\x20GuardIdentifier\x20recipient\x20+\x20GuardU64Identifier\x20amount.\x20Both\x20resolved\x20from\x20Passport\x20at\x20claim\x20time.\x20Asserts\x20is_identifier_address\x20+\x20value_type=u64.'},{'element_type':'constructor','type_name':'guard_u8_u64','semantic_explanation':'RewardGuard\x20constructor:\x20GuardIdentifier\x20recipient\x20+\x20Fixed\x20amount.\x20Recipient\x20from\x20Passport;\x20amount\x20fixed.\x20Asserts\x20is_identifier_address.'},{'element_type':'constructor','type_name':'guard_entity_u8','semantic_explanation':'RewardGuard\x20constructor:\x20Entity\x20recipient\x20+\x20GuardU64Identifier\x20amount.\x20Recipient\x20fixed;\x20amount\x20from\x20Passport.\x20Asserts\x20value_type=u64.'},{'element_type':'constructor','type_name':'guard_entity_u64','semantic_explanation':'RewardGuard\x20constructor:\x20Entity\x20recipient\x20+\x20Fixed\x20amount.\x20Both\x20fixed.\x20Simplest\x20configuration.'},{'element_type':'constructor','type_name':'guard_signer_u8','semantic_explanation':'RewardGuard\x20constructor:\x20Signer\x20recipient\x20+\x20GuardU64Identifier\x20amount.\x20Caller\x20is\x20recipient;\x20amount\x20from\x20Passport.\x20Asserts\x20value_type=u64.'},{'element_type':'constructor','type_name':'guard_signer_u64','semantic_explanation':'RewardGuard\x20constructor:\x20Signer\x20recipient\x20+\x20Fixed\x20amount.\x20Caller\x20is\x20recipient;\x20amount\x20fixed.\x20Common\x20for\x20first-order/flash\x20sale.'}];export const REWARD_CONSTRAINT_RULES=[{'id':'MC-RW-01','category':'structural','rule':'guard\x20count\x20<\x20MAX_GUARD_COUNT_REWARD\x20(200);\x20E_GUARD_COUNT_EXCEEDED\x20on\x20overflow\x20(only\x20on\x20NEW\x20guard,\x20not\x20update)','applies_to':['guard_add']},{'id':'MC-RW-02','category':'structural','rule':'per-recipient\x20record\x20count\x20<\x20MAX_RECORD_COUNT_REWARD\x20(5200);\x20E_RECORD_COUNT_EXCEEDED\x20on\x20claim','applies_to':['claim']},{'id':'MC-RW-03','category':'structural','rule':'guard_add\x20batch\x20size\x20≤\x20MAX_GUARD_COUNT_REWARD\x20(200);\x20SDK\x20rejects\x20larger\x20batches\x20in\x20operate()','applies_to':['guard_add\x20(batch)']},{'id':'MC-RW-04','category':'semantic','rule':'guard_add:\x20Recipient\x20×\x20Amount\x20must\x20match\x20one\x20of\x206\x20valid\x20constructors\x20(guard_u8_u8\x20/\x20u8_u64\x20/\x20entity_u8\x20/\x20entity_u64\x20/\x20signer_u8\x20/\x20signer_u64)','applies_to':['guard_add']},{'id':'MC-RW-05','category':'semantic','rule':'RewardGuard\x20constructor:\x20GuardIdentifier\x20recipient\x20requires\x20is_identifier_address(guard,\x20id)\x20—\x20E_RECIPIENT_IDENTIFIER_NOT_ADDRESS','applies_to':['reward_guard\x20(constructor)']},{'id':'MC-RW-06','category':'semantic','rule':'RewardGuard\x20constructor:\x20GuardU64Identifier\x20amount\x20requires\x20get_submission_value_type(guard,\x20id)\x20==\x20TYPE_U64\x20—\x20E_AMOUNT_NOT_U64','applies_to':['reward_guard\x20(constructor)']},{'id':'MC-RW-07','category':'semantic','rule':'RewardGuard\x20constructor:\x20store_from_id\x20(if\x20Some)\x20requires\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE','applies_to':['reward_guard\x20(constructor)']},{'id':'MC-RW-08','category':'permission','rule':'claim\x20is\x20PERMISSION-FREE\x20—\x20anyone\x20with\x20valid\x20Passport\x20+\x20Guard\x20can\x20claim\x20(no\x20150-157\x20assertion)','applies_to':['claim']},{'id':'MC-RW-09','category':'permission','rule':'150-157\x20builtin\x20indexes\x20are\x20MANAGEMENT-ONLY\x20(new/description/guard/coin_add/receive/guard_exp/owner_receive/um)','applies_to':['all\x20management\x20ops']},{'id':'MC-RW-10','category':'permission','rule':'owner_receive\x20(156)\x20forwards\x20to\x20Permission\x20owner\x20(NOT\x20Reward\x20creator)\x20—\x20grant\x20156\x20only\x20to\x20dedicated\x20addresses','applies_to':['owner_receive']},{'id':'MC-RW-11','category':'lifecycle','rule':'guard_add:\x20clock\x20>\x20guard_not_added_expiration_time\x20(if\x20Some)\x20—\x20E_GUARD_LOCKED_TIME','applies_to':['guard_add']},{'id':'MC-RW-12','category':'lifecycle','rule':'guard_add\x20/\x20claim:\x20clock\x20≤\x20guard.expiration_time\x20(if\x20Some)\x20—\x20E_GUARD_EXPIRED','applies_to':['guard_add','claim']},{'id':'MC-RW-13','category':'lifecycle','rule':'guard_expiration_time_add:\x20new\x20Some(t)\x20requires\x20t\x20>\x20now\x20—\x20E_GUARD_LOCKED_TIME_INVALID','applies_to':['guard_expiration_time_add']},{'id':'MC-RW-14','category':'lifecycle','rule':'claim:\x20balance\x20≥\x20amount\x20—\x20E_INSUFFICIENT_BALANCE\x20(balance::split\x20aborts)','applies_to':['claim']},{'id':'MC-RW-15','category':'cross_object','rule':'claim:\x20supplied\x20guard\x20must\x20be\x20in\x20self.guards\x20—\x20E_GUARD_NOT_FOUND\x20(iterates\x20by\x20id_address\x20match)','applies_to':['claim']},{'id':'MC-RW-16','category':'cross_object','rule':'coin_add:\x20Coin<T>\x20type\x20must\x20match\x20Reward<T>\x20phantom\x20T\x20(SDK\x20W_ERROR\x20in\x20operate\x20if\x20mismatch)','applies_to':['coin_add']}];export const REWARD_TRANSLATION_VERSION='1.0.0';export function matchSemanticPattern(a){const b=a['toLowerCase']();return REWARD_SEMANTIC_TO_SCHEMA_RULES['filter'](c=>c['match_keywords']['some'](d=>b['includes'](d['toLowerCase']())));}export function explainRewardCallData(a){const b=[];!a['object']?b['push']('Operation:\x20CREATE\x20Reward\x20(new\x20+\x20create\x20+\x20share)'):b['push']('Operation:\x20OPERATE\x20Reward\x20at\x20'+a['object']);a['claim']&&b['push']('-\x20claim:\x20guard='+a['claim']+'\x20(passport-driven,\x20NO\x20permission\x20check)');a['description']!=null&&b['push']('-\x20description_set:\x20\x22'+a['description']+'\x22\x20(151\x20permission)');a['coin_add']&&b['push']('-\x20coin_add:\x20'+a['coin_add']['amount']+'\x20of\x20'+a['coin_add']['coin_type']+'\x20(153\x20permission)');a['receive']&&b['push']('-\x20receive:\x20token_type='+a['receive']['token_type']+'\x20(154\x20permission,\x20requires\x20Payment)');if(a['guard_add']){b['push']('-\x20guard_add:\x20'+a['guard_add']['length']+'\x20guard(s)\x20(152\x20permission)');for(let c=0x0;c<a['guard_add']['length'];c++){const d=a['guard_add'][c],e=Object['keys'](d['recipient'])[0x0]??'(unknown)',f=inferConstructorName(e,d['amount']['type']);b['push']('\x20\x20['+c+']\x20constructor='+f+',\x20guard='+d['guard']),b['push']('\x20\x20\x20\x20\x20\x20recipient='+e+',\x20amount='+d['amount']['type']+'('+d['amount']['value']+')'),d['expiration_time']!=null&&b['push']('\x20\x20\x20\x20\x20\x20expiration_time='+d['expiration_time']),d['store_from_id']!=null&&b['push']('\x20\x20\x20\x20\x20\x20store_from_id='+d['store_from_id']);}}a['guard_remove_expired']&&b['push']('-\x20guard_remove_expired:\x20true\x20(152\x20permission)');if(a['guard_expiration_time']!==undefined){const h=a['guard_expiration_time'];h===null?b['push']('-\x20guard_expiration_time_add:\x20null\x20(cancel\x20lock,\x20155\x20permission)'):b['push']('-\x20guard_expiration_time_add:\x20'+h+'\x20(155\x20permission,\x20must\x20be\x20>\x20now)');}return a['owner_receive']!=null&&b['push']('-\x20⚠️\x20owner_receive\x20(156\x20permission):\x20unwrap\x20to\x20Permission\x20owner'),a['um']!==undefined&&(a['um']?b['push']('-\x20um_set:\x20'+a['um']+'\x20(157\x20permission,\x20creates\x20Registrar\x20affiliation)'):b['push']('-\x20um_none:\x20(157\x20permission,\x20disaffiliates\x20and\x20clears\x20um)')),b['join']('\x0a');}function inferConstructorName(a,b){const c={'GuardIdentifier':'GuardIdentifier','Entity':'Entity','Signer':'Signer'},d=c[a];if(!d)return'(invalid)';const e=String(b)['toUpperCase'](),f=e==='FIXED'?'Fixed':'GuardU64Identifier';return resolveGuardConstructor(d,f)??'(invalid)';}export function explainField(a){return REWARD_SCHEMA_TO_SEMANTIC_RULES['find'](b=>b['element_type']==='field'&&b['type_name']===a);}export function explainOp(a){return REWARD_SCHEMA_TO_SEMANTIC_RULES['find'](b=>b['element_type']==='op'&&b['type_name']===a);}export function explainConstructor(a){return REWARD_SCHEMA_TO_SEMANTIC_RULES['find'](b=>b['element_type']==='constructor'&&b['type_name']===a);}export function getConstraintsByCategory(a){return REWARD_CONSTRAINT_RULES['filter'](b=>b['category']===a);}export function explainPermissionIndex(a){if(isRewardBuiltinPermission(a)){const b=getBuiltinPermissionByIndex(a);return b['name']+'\x20('+a+')\x20—\x20'+b['description'];}return'Custom\x20permission\x20index\x20('+a+')\x20—\x20not\x20a\x20Reward\x20builtin\x20(150-157)';}
1
+ import{isRewardBuiltinPermission,getBuiltinPermissionByIndex,resolveGuardConstructor}from'./reward-ledger.js';export const REWARD_SEMANTIC_TO_SCHEMA_RULES=[{'id':'P-RW-01','pattern_name':'Create\x20new\x20Reward','semantic_intent':'Initialize\x20a\x20new\x20Reward<T>\x20object\x20with\x20description,\x20Permission,\x20and\x20coin\x20type\x20T','match_keywords':['create\x20reward','new\x20reward'],'schema_fields':['object\x20(typed,\x20with\x20permission\x20+\x20type_parameter)','description'],'example_json':{'object':{'permission':'0xPERMISSION_ADDRESS','type_parameter':'0x2::wow::WOW'},'description':'First-order\x20cashback\x20reward'},'reverse_explanation':'object\x20with\x20type_parameter\x20triggers\x20reward::new\x20(150).\x20SDK\x20creates\x20Permission\x20if\x20not\x20provided,\x20'+'then\x20constructs\x20Reward<T>\x20via\x20new_imp.\x20After\x20create,\x20share_object\x20is\x20called\x20automatically.'},{'id':'P-RW-02','pattern_name':'Add\x20RewardGuard\x20(eligible\x20recipient\x20+\x20amount\x20rule)','semantic_intent':'Register\x20a\x20Guard\x20that\x20defines\x20who\x20can\x20claim\x20and\x20how\x20much\x20they\x20receive','match_keywords':['guard_add','add\x20guard','eligibility'],'schema_fields':['object','guard_add[]'],'example_json':{'object':'0xREWARD_ADDRESS','guard_add':[{'guard':'0xGUARD_ADDRESS','recipient':{'Signer':'signer'},'amount':{'type':'Fixed','value':0x3b9aca00},'expiration_time':0x1941f297c00,'store_from_id':null}]},'reverse_explanation':'guard_add\x20with\x20one\x20entry\x20triggers\x20reward::guard_add\x20(152).\x20SDK\x20reward_guard()\x20picks\x20one\x20of\x206\x20Move\x20constructors\x20'+'based\x20on\x20recipient\x20variant\x20(GuardIdentifier/Entity/Signer)\x20×\x20amount.type\x20(GuardU64Identifier/Fixed).\x20'+'Move:\x20if\x20guard\x20already\x20in\x20self.guards,\x20UPDATE\x20in\x20place;\x20else\x20push_back\x20(E_GUARD_COUNT_EXCEEDED\x20if\x20>\x20200).'},{'id':'P-RW-03','pattern_name':'Claim\x20reward\x20(passport-driven)','semantic_intent':'Claim\x20rewards\x20as\x20an\x20eligible\x20recipient,\x20verified\x20via\x20Guard\x20+\x20Passport','match_keywords':['claim','receive\x20reward'],'schema_fields':['object','claim\x20(guard\x20address)'],'example_json':{'object':'0xREWARD_ADDRESS','claim':'0xGUARD_ADDRESS'},'reverse_explanation':'claim\x20field\x20set\x20to\x20a\x20guard\x20address\x20triggers\x20reward::claim\x20(NO\x20permission\x20check).\x20'+'Move:\x20iterates\x20self.guards\x20looking\x20for\x20matching\x20guard.id_address;\x20passport::result_for_guard\x20verifies\x20submission;\x20'+'recipient/amount\x20resolved\x20from\x20Passport\x20submissions\x20OR\x20fixed\x20values;\x20'+'balance::split\x20transfers\x20coin\x20to\x20recipient;\x20record\x20appended\x20to\x20RecipientRecord.amount\x20vector.'},{'id':'P-RW-04','pattern_name':'Deposit\x20funds\x20(coin_add)','semantic_intent':'Deposit\x20Coin<T>\x20into\x20the\x20Reward\x20balance\x20to\x20fund\x20claims','match_keywords':['coin_add','deposit','deposit\x20funds'],'schema_fields':['object','coin_add'],'example_json':{'object':'0xREWARD_ADDRESS','coin_add':{'amount':'10000000000','coin_type':'0x2::wow::WOW'}},'reverse_explanation':'coin_add\x20triggers\x20reward::coin_add\x20(153).\x20Move:\x20coin::into_balance(coin)\x20→\x20balance::join(self.balance).\x20'+'Coin<T>\x20type\x20must\x20match\x20Reward<T>\x20exactly\x20(phantom\x20T).\x20No\x20upper\x20limit\x20on\x20balance.'},{'id':'P-RW-05','pattern_name':'Receive\x20CoinWrapper\x20via\x20Payment','semantic_intent':'Receive\x20a\x20CoinWrapper<T>\x20envelope\x20via\x20Payment.unwrap_with_check','match_keywords':['receive','payment','unwrap'],'schema_fields':['object','receive\x20(payment\x20+\x20received)'],'example_json':{'object':'0xREWARD_ADDRESS','receive':{'received':[{'id':'0xRECEIVED_OBJ','payment':'0xPAYMENT_OBJ'}],'token_type':'0x2::wow::WOW'}},'reverse_explanation':'receive\x20with\x20Receiving<CoinWrapper<T>>\x20+\x20Payment<T>\x20triggers\x20reward::receive\x20(154).\x20'+'Move:\x20payment::unwrap_with_check\x20extracts\x20Coin<T>\x20from\x20CoinWrapper<T>,\x20then\x20balance::join.\x20'+'token_type\x20must\x20match\x20Reward<T>.'},{'id':'P-RW-06','pattern_name':'Owner\x20receive\x20(terminal\x20disbursement)','semantic_intent':'Owner\x20unwraps\x20Receiving<K>\x20/\x20CoinWrapper<K>\x20envelopes\x20sent\x20to\x20the\x20Reward','match_keywords':['owner_receive','unwrap\x20to\x20owner'],'schema_fields':['object','owner_receive'],'example_json':{'object':'0xREWARD_ADDRESS','owner_receive':{'received':[{'id':'0xRECEIVED_OBJ','payment':'0xPAYMENT_OBJ'}],'token_type':'0x2::wow::WOW'}},'reverse_explanation':'owner_receive\x20triggers\x20reward::owner_receive\x20(156).\x20Move:\x20payment::unwrap_with_check\x20extracts\x20Coin<K>,\x20'+'then\x20permission::owner_receive_inner\x20forwards\x20to\x20Permission\x20owner\x20(NOT\x20Reward\x20creator).\x20'+'Does\x20NOT\x20drain\x20self.balance\x20—\x20only\x20unwraps\x20Receiving<K>\x20envelopes.'},{'id':'P-RW-07','pattern_name':'Set\x20UM\x20(Contact\x20binding)','semantic_intent':'Bind\x20or\x20unbind\x20a\x20Contact\x20(UM)\x20object\x20for\x20off-chain\x20coordination','match_keywords':['um_set','um_none','contact','UM'],'schema_fields':['object','um\x20(string\x20|\x20null)'],'example_json':{'object':'0xREWARD_ADDRESS','um':'0xCONTACT_ADDRESS'},'reverse_explanation':'um=<address>\x20triggers\x20reward::um_set\x20(157)\x20—\x20creates\x20object-linker\x20core\x20binding.\x20'+'um=null\x20triggers\x20reward::um_none\x20(157)\x20—\x20disaffiliates\x20and\x20clears\x20self.um.'},{'id':'P-RW-08','pattern_name':'Set\x20permission\x20(owner-only)','semantic_intent':'Replace\x20the\x20Permission\x20object\x20(owner-only\x20operation)','match_keywords':['permission_set','change\x20permission'],'schema_fields':['(SDK\x20does\x20not\x20expose\x20this\x20in\x20CallReward_Data\x20—\x20direct\x20Move\x20call\x20required)'],'example_json':{'_note':'Not\x20exposed\x20in\x20CallReward_Data;\x20direct\x20Move\x20call:','target':'reward::permission_set<T>','arguments':['reward','old_permission','new_permission','registrar','clock']},'reverse_explanation':'Calls\x20reward::permission_set.\x20Move\x20asserts\x20old.owner\x20==\x20sender\x20(tx_context::sender).\x20'+'Updates\x20self.permission\x20=\x20new.id_address;\x20creates\x20object_linker::affiliation_change_core.'}];export const REWARD_SCHEMA_TO_SEMANTIC_RULES=[{'element_type':'field','type_name':'object','semantic_explanation':'Reward\x20object\x20address.\x20For\x20create:\x20typed\x20object\x20with\x20permission\x20+\x20type_parameter.\x20For\x20operate:\x20existing\x20Reward\x20address.'},{'element_type':'field','type_name':'claim','semantic_explanation':'Guard\x20address\x20to\x20claim\x20against.\x20NO\x20permission\x20check\x20—\x20eligibility\x20determined\x20by\x20Guard\x20+\x20Passport\x20alone.'},{'element_type':'field','type_name':'description','semantic_explanation':'Reward\x20description\x20(must\x20satisfy\x20common::DESCRIPTION).\x20Updated\x20via\x20description_set\x20(151).'},{'element_type':'field','type_name':'coin_add','semantic_explanation':'Deposit\x20Coin<T>\x20into\x20balance.\x20coin_type\x20must\x20match\x20Reward<T>\x20(153\x20permission).'},{'element_type':'field','type_name':'receive','semantic_explanation':'Receive\x20CoinWrapper<T>\x20via\x20Payment.unwrap_with_check.\x20token_type\x20must\x20match\x20Reward<T>\x20(154\x20permission).'},{'element_type':'field','type_name':'guard_add','semantic_explanation':'Array\x20of\x20RewardGuard\x20configs.\x20Each\x20entry\x20has\x20guard,\x20recipient\x20(GuardIdentifier/Entity/Signer),\x20amount\x20(Fixed/GuardU64Identifier),\x20expiration_time,\x20store_from_id.\x20(152\x20permission)'},{'element_type':'field','type_name':'guard_remove_expired','semantic_explanation':'Boolean.\x20If\x20true,\x20removes\x20all\x20guards\x20with\x20expiration_time\x20<\x20now.\x20(152\x20permission)'},{'element_type':'field','type_name':'guard_expiration_time','semantic_explanation':'Set/cancel\x20guard_not_added_expiration_time.\x20number\x20=\x20set\x20lock;\x20null\x20=\x20cancel.\x20(155\x20permission)'},{'element_type':'field','type_name':'owner_receive','semantic_explanation':'Receive\x20Receiving<K>\x20/\x20CoinWrapper<K>\x20envelopes\x20and\x20forward\x20to\x20Permission\x20owner.\x20(156\x20permission)'},{'element_type':'field','type_name':'um','semantic_explanation':'Bind/unbind\x20Contact\x20(UM).\x20string\x20=\x20um_set;\x20null\x20=\x20um_none.\x20(157\x20permission)'},{'element_type':'op','type_name':'new','semantic_explanation':'Create\x20Reward<T>\x20(150\x20permission).\x20Indirect\x20via\x20SDK\x20newReward()\x20→\x20reward::new\x20or\x20new_with_passport.'},{'element_type':'op','type_name':'create','semantic_explanation':'Share\x20Reward\x20object\x20and\x20return\x20its\x20address.\x20Called\x20automatically\x20after\x20new.'},{'element_type':'op','type_name':'claim','semantic_explanation':'Claim\x20rewards\x20(NO\x20permission).\x20Passport-driven:\x20Guard\x20verification\x20+\x20recipient/amount\x20resolution\x20from\x20submissions.'},{'element_type':'op','type_name':'guard_add','semantic_explanation':'Add\x20or\x20update\x20a\x20RewardGuard\x20(152).\x20Existing\x20guard\x20(same\x20address)\x20is\x20updated\x20in\x20place;\x20new\x20guard\x20pushes\x20(E_GUARD_COUNT_EXCEEDED\x20if\x20>\x20200).'},{'element_type':'op','type_name':'guard_remove_expired','semantic_explanation':'Remove\x20all\x20guards\x20with\x20expiration_time\x20<\x20now\x20(152).\x20Also\x20disaffiliates\x20from\x20object_linker\x20(core).'},{'element_type':'op','type_name':'coin_add','semantic_explanation':'Deposit\x20Coin<T>\x20into\x20balance\x20(153).\x20balance::join(self.balance,\x20coin::into_balance(coin)).'},{'element_type':'op','type_name':'receive','semantic_explanation':'Receive\x20CoinWrapper<T>\x20via\x20Payment\x20(154).\x20unwrap_with_check\x20→\x20balance::join.'},{'element_type':'op','type_name':'guard_expiration_time_add','semantic_explanation':'Set/cancel\x20guard_not_added_expiration_time\x20(155).\x20New\x20time\x20must\x20be\x20>\x20now\x20(E_GUARD_LOCKED_TIME_INVALID).'},{'element_type':'op','type_name':'owner_receive','semantic_explanation':'Owner\x20unwrap\x20Receiving<K>/CoinWrapper<K>\x20(156).\x20Forwards\x20to\x20Permission\x20owner\x20via\x20owner_receive_inner.'},{'element_type':'op','type_name':'um_set','semantic_explanation':'Bind\x20Contact\x20as\x20UM\x20(157).\x20Creates\x20object-linker\x20core\x20binding.'},{'element_type':'op','type_name':'um_none','semantic_explanation':'Unbind\x20UM\x20(157).\x20Disaffiliates\x20from\x20object_linker\x20(core)\x20and\x20sets\x20self.um\x20=\x20none.'},{'element_type':'op','type_name':'description_set','semantic_explanation':'Update\x20description\x20(151).\x20Must\x20satisfy\x20common::DESCRIPTION.'},{'element_type':'op','type_name':'permission_set','semantic_explanation':'Replace\x20Permission\x20(owner-only).\x20Asserts\x20old.owner\x20==\x20sender;\x20creates\x20object_linker::affiliation_change_core.'},{'element_type':'phase','type_name':'creation','semantic_explanation':'new\x20(150)\x20→\x20create\x20→\x20share.\x20Permission\x20object\x20may\x20be\x20created\x20in\x20same\x20tx\x20if\x20not\x20provided.'},{'element_type':'phase','type_name':'guard_addition','semantic_explanation':'guard_add\x20(152)\x20+\x20guard_remove_expired\x20(152).\x20Guards\x20are\x20added/updated/removed\x20based\x20on\x20expiration.'},{'element_type':'phase','type_name':'claim','semantic_explanation':'claim()\x20—\x20passport-driven,\x20no\x20permission.\x20Iterates\x20guards,\x20verifies\x20Passport,\x20splits\x20balance\x20to\x20recipient.'},{'element_type':'phase','type_name':'funds_replenish','semantic_explanation':'coin_add\x20(153)\x20OR\x20receive\x20(154).\x20Both\x20join\x20into\x20self.balance.'},{'element_type':'phase','type_name':'owner_receive','semantic_explanation':'owner_receive\x20/\x20owner_receive_object\x20(156).\x20Unwrap\x20Receiving\x20envelopes\x20→\x20Permission\x20owner.'},{'element_type':'constructor','type_name':'guard_u8_u8','semantic_explanation':'RewardGuard\x20constructor:\x20GuardIdentifier\x20recipient\x20+\x20GuardU64Identifier\x20amount.\x20Both\x20resolved\x20from\x20Passport\x20at\x20claim\x20time.\x20Asserts\x20is_identifier_address\x20+\x20value_type=u64.'},{'element_type':'constructor','type_name':'guard_u8_u64','semantic_explanation':'RewardGuard\x20constructor:\x20GuardIdentifier\x20recipient\x20+\x20Fixed\x20amount.\x20Recipient\x20from\x20Passport;\x20amount\x20fixed.\x20Asserts\x20is_identifier_address.'},{'element_type':'constructor','type_name':'guard_entity_u8','semantic_explanation':'RewardGuard\x20constructor:\x20Entity\x20recipient\x20+\x20GuardU64Identifier\x20amount.\x20Recipient\x20fixed;\x20amount\x20from\x20Passport.\x20Asserts\x20value_type=u64.'},{'element_type':'constructor','type_name':'guard_entity_u64','semantic_explanation':'RewardGuard\x20constructor:\x20Entity\x20recipient\x20+\x20Fixed\x20amount.\x20Both\x20fixed.\x20Simplest\x20configuration.'},{'element_type':'constructor','type_name':'guard_signer_u8','semantic_explanation':'RewardGuard\x20constructor:\x20Signer\x20recipient\x20+\x20GuardU64Identifier\x20amount.\x20Caller\x20is\x20recipient;\x20amount\x20from\x20Passport.\x20Asserts\x20value_type=u64.'},{'element_type':'constructor','type_name':'guard_signer_u64','semantic_explanation':'RewardGuard\x20constructor:\x20Signer\x20recipient\x20+\x20Fixed\x20amount.\x20Caller\x20is\x20recipient;\x20amount\x20fixed.\x20Common\x20for\x20first-order/flash\x20sale.'}];export const REWARD_CONSTRAINT_RULES=[{'id':'MC-RW-01','category':'structural','rule':'guard\x20count\x20<\x20MAX_GUARD_COUNT_REWARD\x20(200);\x20E_GUARD_COUNT_EXCEEDED\x20on\x20overflow\x20(only\x20on\x20NEW\x20guard,\x20not\x20update)','applies_to':['guard_add']},{'id':'MC-RW-02','category':'structural','rule':'per-recipient\x20record\x20count\x20<\x20MAX_RECORD_COUNT_REWARD\x20(5200);\x20E_RECORD_COUNT_EXCEEDED\x20on\x20claim','applies_to':['claim']},{'id':'MC-RW-03','category':'structural','rule':'guard_add\x20batch\x20size\x20≤\x20MAX_GUARD_COUNT_REWARD\x20(200);\x20SDK\x20rejects\x20larger\x20batches\x20in\x20operate()','applies_to':['guard_add\x20(batch)']},{'id':'MC-RW-04','category':'semantic','rule':'guard_add:\x20Recipient\x20×\x20Amount\x20must\x20match\x20one\x20of\x206\x20valid\x20constructors\x20(guard_u8_u8\x20/\x20u8_u64\x20/\x20entity_u8\x20/\x20entity_u64\x20/\x20signer_u8\x20/\x20signer_u64)','applies_to':['guard_add']},{'id':'MC-RW-05','category':'semantic','rule':'RewardGuard\x20constructor:\x20GuardIdentifier\x20recipient\x20requires\x20is_identifier_address(guard,\x20id)\x20—\x20E_RECIPIENT_IDENTIFIER_NOT_ADDRESS','applies_to':['reward_guard\x20(constructor)']},{'id':'MC-RW-06','category':'semantic','rule':'RewardGuard\x20constructor:\x20GuardU64Identifier\x20amount\x20requires\x20get_submission_value_type(guard,\x20id)\x20==\x20TYPE_U64\x20—\x20E_AMOUNT_NOT_U64','applies_to':['reward_guard\x20(constructor)']},{'id':'MC-RW-07','category':'semantic','rule':'RewardGuard\x20constructor:\x20store_from_id\x20(if\x20Some)\x20requires\x20is_identifier_address_compatible\x20—\x20E_STORE_FROM_ID_NOT_COMPATIBLE','applies_to':['reward_guard\x20(constructor)']},{'id':'MC-RW-08','category':'permission','rule':'claim\x20is\x20PERMISSION-FREE\x20—\x20anyone\x20with\x20valid\x20Passport\x20+\x20Guard\x20can\x20claim\x20(no\x20150-157\x20assertion)','applies_to':['claim']},{'id':'MC-RW-09','category':'permission','rule':'150-157\x20builtin\x20indexes\x20are\x20MANAGEMENT-ONLY\x20(new/description/guard/coin_add/receive/guard_exp/owner_receive/um)','applies_to':['all\x20management\x20ops']},{'id':'MC-RW-10','category':'permission','rule':'owner_receive\x20(156)\x20forwards\x20to\x20Permission\x20owner\x20(NOT\x20Reward\x20creator)\x20—\x20grant\x20156\x20only\x20to\x20dedicated\x20addresses','applies_to':['owner_receive']},{'id':'MC-RW-11','category':'lifecycle','rule':'guard_add:\x20clock\x20>\x20guard_not_added_expiration_time\x20(if\x20Some)\x20—\x20E_GUARD_LOCKED_TIME','applies_to':['guard_add']},{'id':'MC-RW-12','category':'lifecycle','rule':'guard_add\x20/\x20claim:\x20clock\x20≤\x20guard.expiration_time\x20(if\x20Some)\x20—\x20E_GUARD_EXPIRED','applies_to':['guard_add','claim']},{'id':'MC-RW-13','category':'lifecycle','rule':'guard_expiration_time_add:\x20new\x20Some(t)\x20requires\x20t\x20>\x20now\x20—\x20E_GUARD_LOCKED_TIME_INVALID','applies_to':['guard_expiration_time_add']},{'id':'MC-RW-14','category':'lifecycle','rule':'claim:\x20balance\x20≥\x20amount\x20—\x20E_INSUFFICIENT_BALANCE\x20(balance::split\x20aborts)','applies_to':['claim']},{'id':'MC-RW-15','category':'cross_object','rule':'claim:\x20supplied\x20guard\x20must\x20be\x20in\x20self.guards\x20—\x20E_GUARD_NOT_FOUND\x20(iterates\x20by\x20id_address\x20match)','applies_to':['claim']},{'id':'MC-RW-16','category':'cross_object','rule':'coin_add:\x20Coin<T>\x20type\x20must\x20match\x20Reward<T>\x20phantom\x20T\x20(SDK\x20W_ERROR\x20in\x20operate\x20if\x20mismatch)','applies_to':['coin_add']}];export const REWARD_TRANSLATION_VERSION='1.0.0';export function matchSemanticPattern(a){const b=a['toLowerCase']();return REWARD_SEMANTIC_TO_SCHEMA_RULES['filter'](c=>c['match_keywords']['some'](d=>b['includes'](d['toLowerCase']())));}export function explainRewardCallData(a){const b=[];!a['object']?b['push']('Operation:\x20CREATE\x20Reward\x20(new\x20+\x20create\x20+\x20share)'):b['push']('Operation:\x20OPERATE\x20Reward\x20at\x20'+a['object']);a['claim']&&b['push']('-\x20claim:\x20guard='+a['claim']+'\x20(passport-driven,\x20NO\x20permission\x20check)');a['description']!=null&&b['push']('-\x20description_set:\x20\x22'+a['description']+'\x22\x20(151\x20permission)');a['coin_add']&&b['push']('-\x20coin_add:\x20'+a['coin_add']['amount']+'\x20of\x20'+a['coin_add']['coin_type']+'\x20(153\x20permission)');a['receive']&&b['push']('-\x20receive:\x20token_type='+a['receive']['token_type']+'\x20(154\x20permission,\x20requires\x20Payment)');if(a['guard_add']){b['push']('-\x20guard_add:\x20'+a['guard_add']['length']+'\x20guard(s)\x20(152\x20permission)');for(let c=0x0;c<a['guard_add']['length'];c++){const d=a['guard_add'][c],e=Object['keys'](d['recipient'])[0x0]??'(unknown)',f=inferConstructorName(e,d['amount']['type']);b['push']('\x20\x20['+c+']\x20constructor='+f+',\x20guard='+d['guard']),b['push']('\x20\x20\x20\x20\x20\x20recipient='+e+',\x20amount='+d['amount']['type']+'('+d['amount']['value']+')'),d['expiration_time']!=null&&b['push']('\x20\x20\x20\x20\x20\x20expiration_time='+d['expiration_time']),d['store_from_id']!=null&&b['push']('\x20\x20\x20\x20\x20\x20store_from_id='+d['store_from_id']);}}a['guard_remove_expired']&&b['push']('-\x20guard_remove_expired:\x20true\x20(152\x20permission)');if(a['guard_expiration_time']!==undefined){const h=a['guard_expiration_time'];h===null?b['push']('-\x20guard_expiration_time_add:\x20null\x20(cancel\x20lock,\x20155\x20permission)'):b['push']('-\x20guard_expiration_time_add:\x20'+h+'\x20(155\x20permission,\x20must\x20be\x20>\x20now)');}return a['owner_receive']!=null&&b['push']('-\x20⚠️\x20owner_receive\x20(156\x20permission):\x20unwrap\x20to\x20Permission\x20owner'),a['um']!==undefined&&(a['um']?b['push']('-\x20um_set:\x20'+a['um']+'\x20(157\x20permission,\x20creates\x20object-linker\x20core\x20binding)'):b['push']('-\x20um_none:\x20(157\x20permission,\x20disaffiliates\x20and\x20clears\x20um)')),b['join']('\x0a');}function inferConstructorName(a,b){const c={'GuardIdentifier':'GuardIdentifier','Entity':'Entity','Signer':'Signer'},d=c[a];if(!d)return'(invalid)';const e=String(b)['toUpperCase'](),f=e==='FIXED'?'Fixed':'GuardU64Identifier';return resolveGuardConstructor(d,f)??'(invalid)';}export function explainField(a){return REWARD_SCHEMA_TO_SEMANTIC_RULES['find'](b=>b['element_type']==='field'&&b['type_name']===a);}export function explainOp(a){return REWARD_SCHEMA_TO_SEMANTIC_RULES['find'](b=>b['element_type']==='op'&&b['type_name']===a);}export function explainConstructor(a){return REWARD_SCHEMA_TO_SEMANTIC_RULES['find'](b=>b['element_type']==='constructor'&&b['type_name']===a);}export function getConstraintsByCategory(a){return REWARD_CONSTRAINT_RULES['filter'](b=>b['category']===a);}export function explainPermissionIndex(a){if(isRewardBuiltinPermission(a)){const b=getBuiltinPermissionByIndex(a);return b['name']+'\x20('+a+')\x20—\x20'+b['description'];}return'Custom\x20permission\x20index\x20('+a+')\x20—\x20not\x20a\x20Reward\x20builtin\x20(150-157)';}
@@ -1 +1 @@
1
- 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.']},{'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.','Used\x20by\x20project_service\x20for\x20project:\x20tag\x20auto-injection.']},{'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':'wip_file','summary':'Witness\x20Immutable\x20Promise\x20file\x20operations\x20—\x20generate,\x20verify,\x20sign,\x20convert.','actions':['generate','verify','sign','wip2html'],'notes':['WIP\x20hash\x20must\x20be\x20non-empty\x20—\x20compute\x20actual\x20hash\x20before\x20calling.']},{'name':'messenger_operation','summary':'Encrypted\x20messenger\x20—\x20watch/send\x20messages,\x20WTS,\x20friendslist,\x20blacklist,\x20guardlist.','actions':['watch_conversations','send_message','send_file','watch_messages','extract_zip','gen_wts','verify_wts','sign_wts','wts2html','proof_message','manage_blacklist','manage_friendslist','manage_guardlist','settings','mark_viewed','pull_messages'],'notes':['Requires\x20messenger-enabled\x20account.','30s\x20timeout\x20—\x20network\x20operations.']},{'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':'9-query-type\x20toolkit\x20covering\x20local\x20device\x20data\x20and\x20on-chain\x20blockchain\x20data.','actions':['local_mark_list','account_list','local_info_list','token_list','account_balance','local_names','onchain_personal_profile','onchain_objects','onchain_received'],'notes':['Read-only\x20—\x20safe\x20to\x20call\x20without\x20confirmation.']},{'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_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_generic'],'notes':['Read-only\x20—\x20safe\x20for\x20exploration.']},{'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','search_examples','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;\x20search_examples\x20finds\x20verified\x20example\x20files\x20by\x20keyword.','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':'project_operation','summary':'Project\x20entity\x20management\x20(SQLite)\x20+\x203-pathway\x20graph\x20construction\x20+\x20dual\x20rule-based/LLM-assisted\x20evaluation\x20engine\x20+\x20industry\x20mode\x20recommendation/registry\x20+\x20C1-C4\x20intent/risk/substep\x20pipeline.','actions':['list_projects','create_project','create_project_from_onchain','update_project','get_project_detail','add_object','remove_object','update_object','create_version','build_graph','get_graph','evaluate_project','save_evaluation','compare_projects','refresh_objects','get_object_diff','delete_project','get_machine_graph','get_guard_graph','assemble_context','reverse_map','generate_deployment_doc','pre_evaluate_check','verify_deployment','clone_project_to_network','migrate_network','migrate_to_mainnet','plan_object_edit','apply_object_edit','patch_machine_nodes','patch_guard_tree','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','analyze_intent','aggregate_risks','trace_substeps','merchant_guide','participation_radar'],'notes':['GLM6:\x20Projects\x20are\x20first-class\x20entities\x20with\x20SQLite\x20persistence,\x20rigid\x20project-object\x20relationships.','Evaluation:\x20risk/trust/completeness\x20are\x20rule-based\x20(computed\x20locally).\x20value/worth_buying\x20require\x20LLM\x20assistance\x20(returns\x20a\x20prompt).','Graph:\x203\x20pathways\x20—\x20internal\x20references\x20(configurable\x20depth),\x20Registrar\x20inbound\x20(O(1)),\x20potential\x20relationships.','E.7:\x20call\x20recommend_industry\x20BEFORE\x20create_project\x20when\x20the\x20user\x20describes\x20a\x20business\x20without\x20naming\x20an\x20industry\x20—\x20returns\x20top-3\x20industries\x20+\x20reference\x20examples.','E.2:\x20user\x20modes\x20—\x20derive_user_mode\x20customizes\x20a\x20builtin\x20mode;\x20register_user_mode\x20registers\x20fully\x20custom;\x20R-M1-11\x20enforced\x20on\x20machine_shape.','C1-C4\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;\x20optional\x20planned_objects/planned_operations\x20safety\x20checks)\x20→\x20trace_substeps\x20(substep\x20records\x20→\x20DAG\x20coherence\x20+\x20D-10\x20verdict).\x20All\x20three\x20are\x20pure\x20transformations\x20—\x20no\x20I/O,\x20no\x20confirmation\x20needed.']},{'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':'trust_score','summary':'Service\x20trust\x20&\x20risk\x20assessment\x20—\x205\x20trust\x20dimensions\x20+\x204\x20risk\x20dimensions.','notes':['Use\x20when\x20user\x20asks\x20\x27is\x20this\x20service\x20trustworthy?\x27\x20or\x20\x27should\x20I\x20buy?\x27.']},{'name':'query_task_status','summary':'Query\x20async\x20task\x20status\x20(build_graph\x20/\x20evaluate_project\x20with\x20async_mode).','notes':['Read-only;\x20tasks\x20are\x20ephemeral\x20(retained\x205\x20min\x20after\x20completion).']},{'name':'evaluation_operation','summary':'Pluggable\x20business\x20evaluations\x20—\x20risk\x20/\x20match\x20/\x20compose\x20/\x20game\x20(node\x20+\x20path)\x20/\x20evidence\x20review\x20/\x20discovery\x20/\x20market\x20/\x20arbitration\x20score\x20with\x20user\x20injection.','actions':['service_risk','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':'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'],'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).']},{'name':'employee_operation','summary':'Merchant\x20employee\x20organizational\x20profile\x20(LOCAL)\x20+\x20reaction\x20KPI\x20+\x20liability\x20resolution.','actions':['set','get','remove','assess_kpi','resolve_liability'],'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).','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.']},{'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':'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.','actions':['scaffold','list','scan','resolve','list_files','read_file','write_file','get','diff','reset','delete_file','create_file','create_dir','copy','move','rename'],'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.']},{'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/write\x20+\x20file\x20operations.','actions':['resolve','list','read','write','delete','create_file','create_dir','copy','move','rename'],'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.']}];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
+ 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.']},{'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.','Used\x20by\x20project_service\x20for\x20project:\x20tag\x20auto-injection.']},{'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':'wip_file','summary':'Witness\x20Immutable\x20Promise\x20file\x20operations\x20—\x20generate,\x20verify,\x20sign,\x20convert.','actions':['generate','verify','sign','wip2html'],'notes':['WIP\x20hash\x20must\x20be\x20non-empty\x20—\x20compute\x20actual\x20hash\x20before\x20calling.']},{'name':'messenger_operation','summary':'Encrypted\x20messenger\x20—\x20watch/send\x20messages,\x20WTS,\x20friendslist,\x20blacklist,\x20guardlist.','actions':['watch_conversations','send_message','send_file','watch_messages','extract_zip','gen_wts','verify_wts','sign_wts','wts2html','proof_message','manage_blacklist','manage_friendslist','manage_guardlist','settings','mark_viewed','pull_messages'],'notes':['Requires\x20messenger-enabled\x20account.','30s\x20timeout\x20—\x20network\x20operations.']},{'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':'9-query-type\x20toolkit\x20covering\x20local\x20device\x20data\x20and\x20on-chain\x20blockchain\x20data.','actions':['local_mark_list','account_list','local_info_list','token_list','account_balance','local_names','onchain_personal_profile','onchain_objects','onchain_received'],'notes':['Read-only\x20—\x20safe\x20to\x20call\x20without\x20confirmation.']},{'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_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).']},{'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','search_examples','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;\x20search_examples\x20finds\x20verified\x20example\x20files\x20by\x20keyword.','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':'project_operation','summary':'Project\x20entity\x20management\x20(SQLite)\x20+\x203-pathway\x20graph\x20construction\x20+\x20dual\x20rule-based/LLM-assisted\x20evaluation\x20engine\x20+\x20industry\x20mode\x20recommendation/registry\x20+\x20C1-C4\x20intent/risk/substep\x20pipeline.','actions':['list_projects','create_project','create_project_from_onchain','update_project','get_project_detail','add_object','remove_object','update_object','create_version','build_graph','get_graph','evaluate_project','save_evaluation','compare_projects','refresh_objects','get_object_diff','delete_project','get_machine_graph','get_guard_graph','assemble_context','reverse_map','generate_deployment_doc','pre_evaluate_check','verify_deployment','clone_project_to_network','migrate_network','migrate_to_mainnet','plan_object_edit','apply_object_edit','patch_machine_nodes','patch_guard_tree','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','analyze_intent','aggregate_risks','trace_substeps','merchant_guide','participation_radar'],'notes':['GLM6:\x20Projects\x20are\x20first-class\x20entities\x20with\x20SQLite\x20persistence,\x20rigid\x20project-object\x20relationships.','Evaluation:\x20risk/trust/completeness\x20are\x20rule-based\x20(computed\x20locally).\x20value/worth_buying\x20require\x20LLM\x20assistance\x20(returns\x20a\x20prompt).','Graph:\x203\x20pathways\x20—\x20internal\x20references\x20(configurable\x20depth),\x20Registrar\x20inbound\x20(O(1)),\x20potential\x20relationships.','E.7:\x20call\x20recommend_industry\x20BEFORE\x20create_project\x20when\x20the\x20user\x20describes\x20a\x20business\x20without\x20naming\x20an\x20industry\x20—\x20returns\x20top-3\x20industries\x20+\x20reference\x20examples.','E.2:\x20user\x20modes\x20—\x20derive_user_mode\x20customizes\x20a\x20builtin\x20mode;\x20register_user_mode\x20registers\x20fully\x20custom;\x20R-M1-11\x20enforced\x20on\x20machine_shape.','C1-C4\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;\x20optional\x20planned_objects/planned_operations\x20safety\x20checks)\x20→\x20trace_substeps\x20(substep\x20records\x20→\x20DAG\x20coherence\x20+\x20D-10\x20verdict).\x20All\x20three\x20are\x20pure\x20transformations\x20—\x20no\x20I/O,\x20no\x20confirmation\x20needed.']},{'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':'trust_score','summary':'Service\x20trust\x20&\x20risk\x20assessment\x20—\x205\x20trust\x20dimensions\x20+\x204\x20risk\x20dimensions.','notes':['Use\x20when\x20user\x20asks\x20\x27is\x20this\x20service\x20trustworthy?\x27\x20or\x20\x27should\x20I\x20buy?\x27.']},{'name':'query_task_status','summary':'Query\x20async\x20task\x20status\x20(build_graph\x20/\x20evaluate_project\x20with\x20async_mode).','notes':['Read-only;\x20tasks\x20are\x20ephemeral\x20(retained\x205\x20min\x20after\x20completion).']},{'name':'evaluation_operation','summary':'Pluggable\x20business\x20evaluations\x20—\x20risk\x20/\x20match\x20/\x20compose\x20/\x20game\x20(node\x20+\x20path)\x20/\x20evidence\x20review\x20/\x20discovery\x20/\x20market\x20/\x20arbitration\x20score\x20with\x20user\x20injection.','actions':['service_risk','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':'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'],'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).']},{'name':'employee_operation','summary':'Merchant\x20employee\x20organizational\x20profile\x20(LOCAL)\x20+\x20reaction\x20KPI\x20+\x20liability\x20resolution.','actions':['set','get','remove','assess_kpi','resolve_liability'],'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).','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.']},{'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':'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.','actions':['scaffold','list','scan','resolve','list_files','read_file','write_file','get','diff','reset','delete_file','create_file','create_dir','copy','move','rename'],'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.']},{'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/write\x20+\x20file\x20operations.','actions':['resolve','list','read','write','delete','create_file','create_dir','copy','move','rename'],'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.']},{'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),\x20then\x20advance/hold/unhold\x20a\x20forward.','actions':['list','operate'],'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.']},{'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.']}];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']??[]};}