@wowok/agent-mcp 3.0.5 → 3.0.6

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 (125) hide show
  1. package/README.md +25 -20
  2. package/dist/customer/account-events.js +1 -1
  3. package/dist/graph/onchain/dataplane.d.ts +2 -2
  4. package/dist/graph/onchain/edge-schema.js +1 -1
  5. package/dist/graph/onchain/expand.js +1 -1
  6. package/dist/graph/onchain/onchain.spec.js +1 -1
  7. package/dist/graph/onchain/sdk-batch.d.ts +7 -1
  8. package/dist/graph/onchain/sdk-batch.js +1 -1
  9. package/dist/graph/onchain/sdk-dataplane.d.ts +6 -3
  10. package/dist/graph/onchain/sdk-dataplane.js +1 -1
  11. package/dist/graph/onchain/types.d.ts +2 -2
  12. package/dist/knowledge/account-marks.js +1 -1
  13. package/dist/knowledge/allocation-risk.js +1 -1
  14. package/dist/knowledge/allocation-templates.js +1 -1
  15. package/dist/knowledge/goal-completion.d.ts +12 -0
  16. package/dist/knowledge/goal-completion.js +1 -1
  17. package/dist/knowledge/guard-risk.js +1 -1
  18. package/dist/knowledge/index.d.ts +4 -0
  19. package/dist/knowledge/index.js +1 -1
  20. package/dist/knowledge/migration-preflight.js +1 -1
  21. package/dist/knowledge/payment-tracker.d.ts +63 -0
  22. package/dist/knowledge/payment-tracker.js +1 -0
  23. package/dist/knowledge/recipient-constraint.d.ts +160 -0
  24. package/dist/knowledge/recipient-constraint.js +1 -0
  25. package/dist/knowledge/safety-rules.d.ts +1 -1
  26. package/dist/knowledge/safety-rules.js +1 -1
  27. package/dist/knowledge/template-registry.js +1 -1
  28. package/dist/knowledge/tools-reference.js +1 -1
  29. package/dist/knowledge/workflow-guidance.js +1 -1
  30. package/dist/knowledge/workspace-lists.d.ts +4 -0
  31. package/dist/knowledge/workspace-lists.js +1 -1
  32. package/dist/monitor/MonitorLoop.js +1 -1
  33. package/dist/participation/arbitrator-interest.d.ts +2 -0
  34. package/dist/participation/arbitrator-interest.js +1 -1
  35. package/dist/participation/collaborator-interest.d.ts +2 -0
  36. package/dist/participation/collaborator-interest.js +1 -1
  37. package/dist/participation/customer-interest.d.ts +2 -0
  38. package/dist/participation/customer-interest.js +1 -1
  39. package/dist/participation/merchant-interest.d.ts +2 -0
  40. package/dist/participation/merchant-interest.js +1 -1
  41. package/dist/participation/supplier-interest.d.ts +2 -0
  42. package/dist/participation/supplier-interest.js +1 -1
  43. package/dist/playbooks/service-build/business-puzzle.js +1 -1
  44. package/dist/playbooks/service-build/context-assembly.js +1 -1
  45. package/dist/playbooks/service-build/merchant-guide.d.ts +7 -0
  46. package/dist/playbooks/service-build/merchant-guide.js +1 -1
  47. package/dist/playbooks/service-build/participation-radar.js +1 -1
  48. package/dist/playbooks/service-build/pipeline-actions.d.ts +2 -2
  49. package/dist/playbooks/service-build/pipeline-actions.js +1 -1
  50. package/dist/playbooks/service-build/relationship-profile.js +1 -1
  51. package/dist/playbooks/service-build/risk-aggregator.js +1 -1
  52. package/dist/playbooks/service-build/topology-query.js +1 -1
  53. package/dist/relationship/derivation.js +1 -1
  54. package/dist/safety/confirm-gate.js +1 -1
  55. package/dist/schema/call/allocation.js +1 -1
  56. package/dist/schema/call/base.js +1 -1
  57. package/dist/schema/call/semantic.js +1 -1
  58. package/dist/schema/call/service.js +1 -1
  59. package/dist/schema/common/index.js +1 -1
  60. package/dist/schema/evaluation/index.d.ts +4 -4
  61. package/dist/schema/evaluation/index.js +1 -1
  62. package/dist/schema/goal/index.d.ts +21 -21
  63. package/dist/schema/goal/planning.d.ts +6 -6
  64. package/dist/schema/industry-pack/index.d.ts +6 -6
  65. package/dist/schema/industry-pack/modes.d.ts +6 -6
  66. package/dist/schema/intent-radar/index.d.ts +16 -16
  67. package/dist/schema/local/index.js +1 -1
  68. package/dist/schema/messenger/index.d.ts +110 -8
  69. package/dist/schema/messenger/index.js +1 -1
  70. package/dist/schema/operations.d.ts +35 -27
  71. package/dist/schema/operations.js +1 -1
  72. package/dist/schema/persona/index.d.ts +155 -155
  73. package/dist/schema/query/bi.d.ts +26 -26
  74. package/dist/schema/query/bi.js +1 -1
  75. package/dist/schema/query/index.d.ts +5 -2
  76. package/dist/schema/query/index.js +1 -1
  77. package/dist/schema/schema-query/index.d.ts +1 -1
  78. package/dist/schema/schema-version.js +1 -1
  79. package/dist/schema/strategy-review/index.d.ts +1 -1
  80. package/dist/schema-query-impl/index.js +1 -1
  81. package/dist/schemas/bridge_operation.schema.json +10 -10
  82. package/dist/schemas/evaluation_operation.schema.json +7 -7
  83. package/dist/schemas/guard2file.schema.json +2 -2
  84. package/dist/schemas/index.json +1 -1
  85. package/dist/schemas/machineNode2file.schema.json +2 -2
  86. package/dist/schemas/messenger_operation.output.json +266 -38
  87. package/dist/schemas/messenger_operation.schema.json +27 -3
  88. package/dist/schemas/onchain_events.schema.json +1 -1
  89. package/dist/schemas/onchain_operations.schema.json +51 -51
  90. package/dist/schemas/onchain_operations_allocation.schema.json +5 -5
  91. package/dist/schemas/onchain_operations_arbitration.schema.json +2 -2
  92. package/dist/schemas/onchain_operations_contact.schema.json +2 -2
  93. package/dist/schemas/onchain_operations_demand.schema.json +2 -2
  94. package/dist/schemas/onchain_operations_gen_passport.schema.json +2 -2
  95. package/dist/schemas/onchain_operations_gen_proof.schema.json +2 -2
  96. package/dist/schemas/onchain_operations_guard.schema.json +2 -2
  97. package/dist/schemas/onchain_operations_machine.schema.json +8 -8
  98. package/dist/schemas/onchain_operations_order.schema.json +2 -2
  99. package/dist/schemas/onchain_operations_payment.schema.json +3 -3
  100. package/dist/schemas/onchain_operations_permission.schema.json +2 -2
  101. package/dist/schemas/onchain_operations_personal.schema.json +2 -2
  102. package/dist/schemas/onchain_operations_progress.schema.json +2 -2
  103. package/dist/schemas/onchain_operations_proof.schema.json +2 -2
  104. package/dist/schemas/onchain_operations_repository.schema.json +2 -2
  105. package/dist/schemas/onchain_operations_reward.schema.json +2 -2
  106. package/dist/schemas/onchain_operations_service.schema.json +5 -5
  107. package/dist/schemas/onchain_operations_treasury.schema.json +4 -4
  108. package/dist/schemas/onchain_table_data.output.json +14 -14
  109. package/dist/schemas/query_toolkit.output.json +35 -8
  110. package/dist/schemas/query_toolkit.schema.json +39 -11
  111. package/dist/strategy/collectors.js +1 -1
  112. package/dist/tools/handlers/config.js +1 -1
  113. package/dist/tools/handlers/evaluation.js +1 -1
  114. package/dist/tools/handlers/messenger.js +1 -1
  115. package/dist/tools/handlers/onchain.js +1 -1
  116. package/dist/tools/handlers/permission.js +1 -1
  117. package/dist/tools/handlers/query.js +1 -1
  118. package/dist/tools/handlers/strategy-review.js +1 -1
  119. package/dist/tools/handlers/workflow.js +1 -1
  120. package/dist/tools/registry/onchain.js +1 -1
  121. package/dist/tools/registry/query.js +1 -1
  122. package/dist/tools/rules-hook.d.ts +2 -0
  123. package/dist/tools/rules-hook.js +1 -1
  124. package/dist/tools/shared.js +1 -1
  125. package/package.json +2 -2
@@ -863,7 +863,7 @@
863
863
  }
864
864
  },
865
865
  "order_allocators": {
866
- "description": "Order fund allocator. Max 100 allocators (MAX_ALLOCATOR_COUNT). Each allocator has a guard (first matching guard wins) and a sharing list. Set to null to clear. ⚠️ PERMANENTLY IMMUTABLE after publish: order_allocators can ONLY be set BEFORE publish=true (Move service.move:503: assert!(!self.bPublished, E_ALREADY_PUBLISHED)). After publish, the ONLY way to change allocation rules is to create a NEW Service object. There is NO pause+lock exception for order_allocators (unlike arbitrations/rewards which have time-lock removal). PRE-PUBLISH CHECKLIST: verify all guard names resolve, all sharing amounts are correct, threshold is set, and recipient types (Entity/Signer/GuardIdentifier) are intended before calling publish=true. GuardIdentifier sharing mode: {who: {GuardIdentifier: <u8>}, sharing: <rate>, mode: 'Rate'} — resolves recipient from Guard table submission at allocation time (e.g., refund to customer). MULTI-CALL ALLOCATION: Allocation.alloc() can be called MULTIPLE times (no consumed flag in contract). Use Amount mode (not Surplus) for recurring allocations — Surplus calls balance::withdraw_all which drains the balance. For monthly payment scenarios, create multiple Allocators with time-based Guards + Amount mode sharing items.",
866
+ "description": "Order fund allocator. Max 100 allocators (MAX_ALLOCATOR_COUNT). Each allocator has a guard (first matching guard wins) and a sharing list. Set to null to clear. ⚠️ PERMANENTLY IMMUTABLE after publish: order_allocators can ONLY be set BEFORE publish=true (Move service.move:503: assert!(!self.bPublished, E_ALREADY_PUBLISHED)). After publish, the ONLY way to change allocation rules is to create a NEW Service object. There is NO pause+lock exception for order_allocators (unlike arbitrations/rewards which have time-lock removal). PRE-PUBLISH CHECKLIST: verify all guard names resolve, all sharing amounts are correct, threshold is set, and recipient types (Entity/Signer/GuardIdentifier) are intended before calling publish=true. GuardIdentifier sharing mode: {who: {GuardIdentifier: <u8>}, sharing: <rate>, mode: 'Rate'} — resolves recipient from the Guard table submission at allocation time. Canonical order pattern: the recipient slot is the single submitted Order (constrained by the Guard — service binding, qualifying node, signer==order.owner); funds land at that order object and are receivable only by its owner (object receipt = owner receipt). Safety is determined by constraint sufficiency — run the recipient constraint audit before publish. Fixed recipients should use {who:{Entity:...}}; unbound Signer recipients are a CRITICAL theft risk. MULTI-CALL ALLOCATION: Allocation.alloc() can be called MULTIPLE times (no consumed flag in contract). Use Amount mode (not Surplus) for recurring allocations — Surplus calls balance::withdraw_all which drains the balance. For monthly payment scenarios, create multiple Allocators with time-based Guards + Amount mode sharing items.",
867
867
  "anyOf": [
868
868
  {
869
869
  "type": "object",
@@ -992,7 +992,7 @@
992
992
  "additionalProperties": false,
993
993
  "description": "Fund allocation item — one recipient's share of the Allocation balance. The `sharing` value's meaning depends on `mode` (see AllocationModeSchema). Multiple items in the same Allocator are evaluated together: Amount items first, Rate items second, Surplus last."
994
994
  },
995
- "description": "Fund allocation item list. Each item specifies a recipient (who), a value (sharing), and a mode. Items can mix modes (Amount + Rate + Surplus) within the same Allocator. ALLOCATION ORDER: Amount items first (cached as fix) → Rate items (proportional to balance - fix) → Surplus item (remaining). CONSTRAINTS: max ONE Surplus item per Allocator; Rate sum must == 10000 (no Surplus) or <= 10000 (with Surplus); Amount sum must >= threshold (no Rate and no Surplus) and <= max (if max set)."
995
+ "description": "Fund allocation item list. Each item specifies a recipient (who), a value (sharing), and a mode. Items can mix modes (Amount + Rate + Surplus) within the same Allocator. RECIPIENT SEMANTICS: the Guard constrains what each submission slot may be; a recipient's safety follows from the sufficiency of those constraints (run the recipient constraint audit). Canonical order pattern: recipient = the single submitted Order — funds land at that object and are receivable only by its owner. ALLOCATION ORDER: Amount items first (cached as fix) → Rate items (proportional to balance - fix) → Surplus item (remaining). CONSTRAINTS: max ONE Surplus item per Allocator; Rate sum must == 10000 (no Surplus) or <= 10000 (with Surplus); Amount sum must >= threshold (no Rate and no Surplus) and <= max (if max set)."
996
996
  },
997
997
  "fix": {
998
998
  "description": "OUTPUT-ONLY (query result). Cached sum of all Amount-mode `sharing` values in this Allocator. Computed by the contract during `allocator_add` — DO NOT set this field at creation. Used internally to compute `total_rates = balance - fix` for Rate allocation.",
@@ -1122,7 +1122,7 @@
1122
1122
  "type": "object",
1123
1123
  "properties": {
1124
1124
  "for_object": {
1125
- "description": "Payment for a specific object ID",
1125
+ "description": "Object this distribution belongs to (e.g. the order for a per-order allocation, recorded at creation). Auditors can query it to see the distribution's business context.",
1126
1126
  "anyOf": [
1127
1127
  {
1128
1128
  "type": "string"
@@ -1425,13 +1425,13 @@
1425
1425
  "type": "boolean"
1426
1426
  },
1427
1427
  "network": {
1428
+ "description": "Omit in client/chat contexts — the runtime stamps the user's CURRENT network (the client's UI selection). Standalone MCP/CLI: omit to use the current network; set ONLY when the user explicitly names a different network (a mismatch pauses for user confirmation). Never guess or hardcode a network.",
1428
1429
  "type": "string",
1429
1430
  "enum": [
1430
1431
  "localnet",
1431
1432
  "testnet",
1432
1433
  "mainnet"
1433
- ],
1434
- "description": "Network entrypoint: Specifies which network the operation occurs on. FIX-010 cross-network note: LocalMark names are scoped per network (testnet marks are invisible on mainnet and vice versa). When migrating from testnet to mainnet, recreate all objects on mainnet and re-register LocalMark names with the SAME names to keep name-based references working across networks. Recreate all objects on the target network via onchain_operations with env.network=target_network, then re-register the LocalMark names."
1434
+ ]
1435
1435
  },
1436
1436
  "referrer": {
1437
1437
  "description": "Referrer ID. If the user is using the network for the first time, the referrer ID will be recorded (also applied when the SDK auto-registers the sender in the global Entity table).",
@@ -2443,7 +2443,7 @@
2443
2443
  "description": "Forward weight — the contribution this forward makes toward its Pair's threshold. ⚠️ SINGLE-OPERATOR LOCK: a forward contributes its weight AT MOST ONCE. It is locked by the first operator that accomplishes it (progress.move session_accomplish_imp); a second operator re-executing the same accomplished forward aborts E_NOT_THE_HOLDER. Therefore multi-operator cooperation (threshold > 1) needs one DISTINCT forward per contributing operator (e.g. threshold 2 → begin_a + begin_b, each weight 1) — never reuse one forward."
2444
2444
  },
2445
2445
  "guard": {
2446
- "description": "Guard reference for this forward. Accepts TWO formats:\n• STRING (preferred): \"my_guard_name\" — the Guard's name or address as a plain string.\n• OBJECT (only when retained_submission is needed): {guard: \"my_guard_name\", retained_submission: [1,2,3]}.\nFOLLOW THE SCHEMA FIELD STRUCTURE: A Guard reference is fundamentally a STRING (the Guard object's name or address). Provide a string when you only need to reference a Guard — do NOT wrap a bare string in an object structure. The OBJECT form {guard: \"...\", retained_submission: [...]} exists ONLY to carry additional `retained_submission` data alongside the string reference; inside the object, the `guard` field is STILL a string. In short: string-in for a string reference, object-in only when you need to pass extra data.\nCOGNITIVE PRINCIPLE: Guard validation ALWAYS occurs BEFORE the forward operation. A Guard that queries state of the SAME Progress object this forward operates on (e.g. progress.current) will see the PRE-transition value (source node), NOT the target node. If the Guard checks progress.current == target_node, it will ALWAYS FAIL. Querying a DIFFERENT Progress object (cross-machine) is safe and reasonable — that progress is not modified by this forward. For target-node verification after transition, bind the Guard to the Allocator instead (allocation.alloc runs AFTER the state transition completes).\n⚠️ T1 LOSSY POINT (B-3): WoWok has NO on-chain cron. A business phrase like 'after N days, auto-X' is NOT an automatic trigger — it decomposes into (1) a time_guard that checks elapsed time, and (2) an OFF-CHAIN keeper that must submit the forward when the guard passes. Configuring a time_guard WITHOUT a keeper means nothing ever fires.",
2446
+ "description": "Guard reference for this forward. Accepts TWO formats:\n• STRING (preferred): \"my_guard_name\" — the Guard's name or address as a plain string.\n• OBJECT (only when retained_submission is needed): {guard: \"my_guard_name\", retained_submission: [1,2,3]}.\nFOLLOW THE SCHEMA FIELD STRUCTURE: A Guard reference is fundamentally a STRING (the Guard object's name or address). Provide a string when you only need to reference a Guard — do NOT wrap a bare string in an object structure. The OBJECT form {guard: \"...\", retained_submission: [...]} exists ONLY to carry additional `retained_submission` data alongside the string reference; inside the object, the `guard` field is STILL a string. In short: string-in for a string reference, object-in only when you need to pass extra data.\nCOGNITIVE PRINCIPLE: Guard validation ALWAYS occurs BEFORE the forward operation. A Guard that queries state of the SAME Progress object this forward operates on (e.g. progress.current) will see the PRE-transition value (source node), NOT the target node. If the Guard checks progress.current == target_node, it will ALWAYS FAIL. Querying a DIFFERENT Progress object (cross-machine) is safe and reasonable — that progress is not modified by this forward. For target-node verification after transition, bind the Guard to the Allocator instead (allocation.alloc runs AFTER the state transition completes).\n⚠️ T1 LOSSY POINT (B-3): WoWok has NO on-chain cron. A business phrase like 'after N days, auto-X' is NOT an automatic trigger — it decomposes into (1) a time_guard that checks elapsed time, and (2) an OFF-CHAIN keeper that must submit the forward when the guard passes. Configuring a time_guard WITHOUT a keeper means nothing ever fires.\nRETAINED_SUBMISSION: a non-empty retained_submission does NOT relax Guard verification — the forward's Guard is always validated first. The list only selects which of the caller's already-verified submissions are persisted into the Progress history (see the guard field above).",
2447
2447
  "anyOf": [
2448
2448
  {
2449
2449
  "anyOf": [
@@ -2455,7 +2455,7 @@
2455
2455
  "description": "Guard object name or address (string). Example: 'my_attendance_guard' or '0x1234...'"
2456
2456
  },
2457
2457
  "retained_submission": {
2458
- "description": "Data submitted by user during Guard object verification",
2458
+ "description": "Guard table identifiers whose verified values are persisted into the Progress history when the forward is accomplished. The Guard is ALWAYS fully verified first (regardless of this list): the forward cannot complete unless the Passport carries a passing result for it. After verification, exactly the caller's submissions for the listed identifiers are copied into history (passport::submissions_get) as Guard-verified facts; empty array (default) records nothing. Use it for audit and downstream queries, never as a way to relax Guard conditions.",
2459
2459
  "anyOf": [
2460
2460
  {
2461
2461
  "type": "array",
@@ -2619,7 +2619,7 @@
2619
2619
  "description": "Forward weight — the contribution this forward makes toward its Pair's threshold. ⚠️ SINGLE-OPERATOR LOCK: a forward contributes its weight AT MOST ONCE. It is locked by the first operator that accomplishes it (progress.move session_accomplish_imp); a second operator re-executing the same accomplished forward aborts E_NOT_THE_HOLDER. Therefore multi-operator cooperation (threshold > 1) needs one DISTINCT forward per contributing operator (e.g. threshold 2 → begin_a + begin_b, each weight 1) — never reuse one forward."
2620
2620
  },
2621
2621
  "guard": {
2622
- "description": "Guard reference for this forward. Accepts TWO formats:\n• STRING (preferred): \"my_guard_name\" — the Guard's name or address as a plain string.\n• OBJECT (only when retained_submission is needed): {guard: \"my_guard_name\", retained_submission: [1,2,3]}.\nFOLLOW THE SCHEMA FIELD STRUCTURE: A Guard reference is fundamentally a STRING (the Guard object's name or address). Provide a string when you only need to reference a Guard — do NOT wrap a bare string in an object structure. The OBJECT form {guard: \"...\", retained_submission: [...]} exists ONLY to carry additional `retained_submission` data alongside the string reference; inside the object, the `guard` field is STILL a string. In short: string-in for a string reference, object-in only when you need to pass extra data.\nCOGNITIVE PRINCIPLE: Guard validation ALWAYS occurs BEFORE the forward operation. A Guard that queries state of the SAME Progress object this forward operates on (e.g. progress.current) will see the PRE-transition value (source node), NOT the target node. If the Guard checks progress.current == target_node, it will ALWAYS FAIL. Querying a DIFFERENT Progress object (cross-machine) is safe and reasonable — that progress is not modified by this forward. For target-node verification after transition, bind the Guard to the Allocator instead (allocation.alloc runs AFTER the state transition completes).\n⚠️ T1 LOSSY POINT (B-3): WoWok has NO on-chain cron. A business phrase like 'after N days, auto-X' is NOT an automatic trigger — it decomposes into (1) a time_guard that checks elapsed time, and (2) an OFF-CHAIN keeper that must submit the forward when the guard passes. Configuring a time_guard WITHOUT a keeper means nothing ever fires.",
2622
+ "description": "Guard reference for this forward. Accepts TWO formats:\n• STRING (preferred): \"my_guard_name\" — the Guard's name or address as a plain string.\n• OBJECT (only when retained_submission is needed): {guard: \"my_guard_name\", retained_submission: [1,2,3]}.\nFOLLOW THE SCHEMA FIELD STRUCTURE: A Guard reference is fundamentally a STRING (the Guard object's name or address). Provide a string when you only need to reference a Guard — do NOT wrap a bare string in an object structure. The OBJECT form {guard: \"...\", retained_submission: [...]} exists ONLY to carry additional `retained_submission` data alongside the string reference; inside the object, the `guard` field is STILL a string. In short: string-in for a string reference, object-in only when you need to pass extra data.\nCOGNITIVE PRINCIPLE: Guard validation ALWAYS occurs BEFORE the forward operation. A Guard that queries state of the SAME Progress object this forward operates on (e.g. progress.current) will see the PRE-transition value (source node), NOT the target node. If the Guard checks progress.current == target_node, it will ALWAYS FAIL. Querying a DIFFERENT Progress object (cross-machine) is safe and reasonable — that progress is not modified by this forward. For target-node verification after transition, bind the Guard to the Allocator instead (allocation.alloc runs AFTER the state transition completes).\n⚠️ T1 LOSSY POINT (B-3): WoWok has NO on-chain cron. A business phrase like 'after N days, auto-X' is NOT an automatic trigger — it decomposes into (1) a time_guard that checks elapsed time, and (2) an OFF-CHAIN keeper that must submit the forward when the guard passes. Configuring a time_guard WITHOUT a keeper means nothing ever fires.\nRETAINED_SUBMISSION: a non-empty retained_submission does NOT relax Guard verification — the forward's Guard is always validated first. The list only selects which of the caller's already-verified submissions are persisted into the Progress history (see the guard field above).",
2623
2623
  "anyOf": [
2624
2624
  {
2625
2625
  "anyOf": [
@@ -2631,7 +2631,7 @@
2631
2631
  "description": "Guard object name or address (string). Example: 'my_attendance_guard' or '0x1234...'"
2632
2632
  },
2633
2633
  "retained_submission": {
2634
- "description": "Data submitted by user during Guard object verification",
2634
+ "description": "Guard table identifiers whose verified values are persisted into the Progress history when the forward is accomplished. The Guard is ALWAYS fully verified first (regardless of this list): the forward cannot complete unless the Passport carries a passing result for it. After verification, exactly the caller's submissions for the listed identifiers are copied into history (passport::submissions_get) as Guard-verified facts; empty array (default) records nothing. Use it for audit and downstream queries, never as a way to relax Guard conditions.",
2635
2635
  "anyOf": [
2636
2636
  {
2637
2637
  "type": "array",
@@ -2902,7 +2902,7 @@
2902
2902
  "description": "Forward weight — the contribution this forward makes toward its Pair's threshold. ⚠️ SINGLE-OPERATOR LOCK: a forward contributes its weight AT MOST ONCE. It is locked by the first operator that accomplishes it (progress.move session_accomplish_imp); a second operator re-executing the same accomplished forward aborts E_NOT_THE_HOLDER. Therefore multi-operator cooperation (threshold > 1) needs one DISTINCT forward per contributing operator (e.g. threshold 2 → begin_a + begin_b, each weight 1) — never reuse one forward."
2903
2903
  },
2904
2904
  "guard": {
2905
- "description": "Guard reference for this forward. Accepts TWO formats:\n• STRING (preferred): \"my_guard_name\" — the Guard's name or address as a plain string.\n• OBJECT (only when retained_submission is needed): {guard: \"my_guard_name\", retained_submission: [1,2,3]}.\nFOLLOW THE SCHEMA FIELD STRUCTURE: A Guard reference is fundamentally a STRING (the Guard object's name or address). Provide a string when you only need to reference a Guard — do NOT wrap a bare string in an object structure. The OBJECT form {guard: \"...\", retained_submission: [...]} exists ONLY to carry additional `retained_submission` data alongside the string reference; inside the object, the `guard` field is STILL a string. In short: string-in for a string reference, object-in only when you need to pass extra data.\nCOGNITIVE PRINCIPLE: Guard validation ALWAYS occurs BEFORE the forward operation. A Guard that queries state of the SAME Progress object this forward operates on (e.g. progress.current) will see the PRE-transition value (source node), NOT the target node. If the Guard checks progress.current == target_node, it will ALWAYS FAIL. Querying a DIFFERENT Progress object (cross-machine) is safe and reasonable — that progress is not modified by this forward. For target-node verification after transition, bind the Guard to the Allocator instead (allocation.alloc runs AFTER the state transition completes).\n⚠️ T1 LOSSY POINT (B-3): WoWok has NO on-chain cron. A business phrase like 'after N days, auto-X' is NOT an automatic trigger — it decomposes into (1) a time_guard that checks elapsed time, and (2) an OFF-CHAIN keeper that must submit the forward when the guard passes. Configuring a time_guard WITHOUT a keeper means nothing ever fires.",
2905
+ "description": "Guard reference for this forward. Accepts TWO formats:\n• STRING (preferred): \"my_guard_name\" — the Guard's name or address as a plain string.\n• OBJECT (only when retained_submission is needed): {guard: \"my_guard_name\", retained_submission: [1,2,3]}.\nFOLLOW THE SCHEMA FIELD STRUCTURE: A Guard reference is fundamentally a STRING (the Guard object's name or address). Provide a string when you only need to reference a Guard — do NOT wrap a bare string in an object structure. The OBJECT form {guard: \"...\", retained_submission: [...]} exists ONLY to carry additional `retained_submission` data alongside the string reference; inside the object, the `guard` field is STILL a string. In short: string-in for a string reference, object-in only when you need to pass extra data.\nCOGNITIVE PRINCIPLE: Guard validation ALWAYS occurs BEFORE the forward operation. A Guard that queries state of the SAME Progress object this forward operates on (e.g. progress.current) will see the PRE-transition value (source node), NOT the target node. If the Guard checks progress.current == target_node, it will ALWAYS FAIL. Querying a DIFFERENT Progress object (cross-machine) is safe and reasonable — that progress is not modified by this forward. For target-node verification after transition, bind the Guard to the Allocator instead (allocation.alloc runs AFTER the state transition completes).\n⚠️ T1 LOSSY POINT (B-3): WoWok has NO on-chain cron. A business phrase like 'after N days, auto-X' is NOT an automatic trigger — it decomposes into (1) a time_guard that checks elapsed time, and (2) an OFF-CHAIN keeper that must submit the forward when the guard passes. Configuring a time_guard WITHOUT a keeper means nothing ever fires.\nRETAINED_SUBMISSION: a non-empty retained_submission does NOT relax Guard verification — the forward's Guard is always validated first. The list only selects which of the caller's already-verified submissions are persisted into the Progress history (see the guard field above).",
2906
2906
  "anyOf": [
2907
2907
  {
2908
2908
  "anyOf": [
@@ -2914,7 +2914,7 @@
2914
2914
  "description": "Guard object name or address (string). Example: 'my_attendance_guard' or '0x1234...'"
2915
2915
  },
2916
2916
  "retained_submission": {
2917
- "description": "Data submitted by user during Guard object verification",
2917
+ "description": "Guard table identifiers whose verified values are persisted into the Progress history when the forward is accomplished. The Guard is ALWAYS fully verified first (regardless of this list): the forward cannot complete unless the Passport carries a passing result for it. After verification, exactly the caller's submissions for the listed identifiers are copied into history (passport::submissions_get) as Guard-verified facts; empty array (default) records nothing. Use it for audit and downstream queries, never as a way to relax Guard conditions.",
2918
2918
  "anyOf": [
2919
2919
  {
2920
2920
  "type": "array",
@@ -3220,13 +3220,13 @@
3220
3220
  "type": "boolean"
3221
3221
  },
3222
3222
  "network": {
3223
+ "description": "Omit in client/chat contexts — the runtime stamps the user's CURRENT network (the client's UI selection). Standalone MCP/CLI: omit to use the current network; set ONLY when the user explicitly names a different network (a mismatch pauses for user confirmation). Never guess or hardcode a network.",
3223
3224
  "type": "string",
3224
3225
  "enum": [
3225
3226
  "localnet",
3226
3227
  "testnet",
3227
3228
  "mainnet"
3228
- ],
3229
- "description": "Network entrypoint: Specifies which network the operation occurs on. FIX-010 cross-network note: LocalMark names are scoped per network (testnet marks are invisible on mainnet and vice versa). When migrating from testnet to mainnet, recreate all objects on mainnet and re-register LocalMark names with the SAME names to keep name-based references working across networks. Recreate all objects on the target network via onchain_operations with env.network=target_network, then re-register the LocalMark names."
3229
+ ]
3230
3230
  },
3231
3231
  "referrer": {
3232
3232
  "description": "Referrer ID. If the user is using the network for the first time, the referrer ID will be recorded (also applied when the SDK auto-registers the sender in the global Entity table).",
@@ -4155,13 +4155,13 @@
4155
4155
  "type": "boolean"
4156
4156
  },
4157
4157
  "network": {
4158
+ "description": "Omit in client/chat contexts — the runtime stamps the user's CURRENT network (the client's UI selection). Standalone MCP/CLI: omit to use the current network; set ONLY when the user explicitly names a different network (a mismatch pauses for user confirmation). Never guess or hardcode a network.",
4158
4159
  "type": "string",
4159
4160
  "enum": [
4160
4161
  "localnet",
4161
4162
  "testnet",
4162
4163
  "mainnet"
4163
- ],
4164
- "description": "Network entrypoint: Specifies which network the operation occurs on. FIX-010 cross-network note: LocalMark names are scoped per network (testnet marks are invisible on mainnet and vice versa). When migrating from testnet to mainnet, recreate all objects on mainnet and re-register LocalMark names with the SAME names to keep name-based references working across networks. Recreate all objects on the target network via onchain_operations with env.network=target_network, then re-register the LocalMark names."
4164
+ ]
4165
4165
  },
4166
4166
  "referrer": {
4167
4167
  "description": "Referrer ID. If the user is using the network for the first time, the referrer ID will be recorded (also applied when the SDK auto-registers the sender in the global Entity table).",
@@ -5717,13 +5717,13 @@
5717
5717
  "type": "boolean"
5718
5718
  },
5719
5719
  "network": {
5720
+ "description": "Omit in client/chat contexts — the runtime stamps the user's CURRENT network (the client's UI selection). Standalone MCP/CLI: omit to use the current network; set ONLY when the user explicitly names a different network (a mismatch pauses for user confirmation). Never guess or hardcode a network.",
5720
5721
  "type": "string",
5721
5722
  "enum": [
5722
5723
  "localnet",
5723
5724
  "testnet",
5724
5725
  "mainnet"
5725
- ],
5726
- "description": "Network entrypoint: Specifies which network the operation occurs on. FIX-010 cross-network note: LocalMark names are scoped per network (testnet marks are invisible on mainnet and vice versa). When migrating from testnet to mainnet, recreate all objects on mainnet and re-register LocalMark names with the SAME names to keep name-based references working across networks. Recreate all objects on the target network via onchain_operations with env.network=target_network, then re-register the LocalMark names."
5726
+ ]
5727
5727
  },
5728
5728
  "referrer": {
5729
5729
  "description": "Referrer ID. If the user is using the network for the first time, the referrer ID will be recorded (also applied when the SDK auto-registers the sender in the global Entity table).",
@@ -7036,13 +7036,13 @@
7036
7036
  "type": "boolean"
7037
7037
  },
7038
7038
  "network": {
7039
+ "description": "Omit in client/chat contexts — the runtime stamps the user's CURRENT network (the client's UI selection). Standalone MCP/CLI: omit to use the current network; set ONLY when the user explicitly names a different network (a mismatch pauses for user confirmation). Never guess or hardcode a network.",
7039
7040
  "type": "string",
7040
7041
  "enum": [
7041
7042
  "localnet",
7042
7043
  "testnet",
7043
7044
  "mainnet"
7044
- ],
7045
- "description": "Network entrypoint: Specifies which network the operation occurs on. FIX-010 cross-network note: LocalMark names are scoped per network (testnet marks are invisible on mainnet and vice versa). When migrating from testnet to mainnet, recreate all objects on mainnet and re-register LocalMark names with the SAME names to keep name-based references working across networks. Recreate all objects on the target network via onchain_operations with env.network=target_network, then re-register the LocalMark names."
7045
+ ]
7046
7046
  },
7047
7047
  "referrer": {
7048
7048
  "description": "Referrer ID. If the user is using the network for the first time, the referrer ID will be recorded (also applied when the SDK auto-registers the sender in the global Entity table).",
@@ -7990,13 +7990,13 @@
7990
7990
  "type": "boolean"
7991
7991
  },
7992
7992
  "network": {
7993
+ "description": "Omit in client/chat contexts — the runtime stamps the user's CURRENT network (the client's UI selection). Standalone MCP/CLI: omit to use the current network; set ONLY when the user explicitly names a different network (a mismatch pauses for user confirmation). Never guess or hardcode a network.",
7993
7994
  "type": "string",
7994
7995
  "enum": [
7995
7996
  "localnet",
7996
7997
  "testnet",
7997
7998
  "mainnet"
7998
- ],
7999
- "description": "Network entrypoint: Specifies which network the operation occurs on. FIX-010 cross-network note: LocalMark names are scoped per network (testnet marks are invisible on mainnet and vice versa). When migrating from testnet to mainnet, recreate all objects on mainnet and re-register LocalMark names with the SAME names to keep name-based references working across networks. Recreate all objects on the target network via onchain_operations with env.network=target_network, then re-register the LocalMark names."
7999
+ ]
8000
8000
  },
8001
8001
  "referrer": {
8002
8002
  "description": "Referrer ID. If the user is using the network for the first time, the referrer ID will be recorded (also applied when the SDK auto-registers the sender in the global Entity table).",
@@ -8813,7 +8813,7 @@
8813
8813
  "type": "object",
8814
8814
  "properties": {
8815
8815
  "for_object": {
8816
- "description": "Payment for a specific object ID",
8816
+ "description": "Object this distribution belongs to (e.g. the order for a per-order allocation, recorded at creation). Auditors can query it to see the distribution's business context.",
8817
8817
  "anyOf": [
8818
8818
  {
8819
8819
  "type": "string"
@@ -8952,7 +8952,7 @@
8952
8952
  "type": "object",
8953
8953
  "properties": {
8954
8954
  "for_object": {
8955
- "description": "Payment for a specific object ID",
8955
+ "description": "Object this distribution belongs to (e.g. the order for a per-order allocation, recorded at creation). Auditors can query it to see the distribution's business context.",
8956
8956
  "anyOf": [
8957
8957
  {
8958
8958
  "type": "string"
@@ -9485,13 +9485,13 @@
9485
9485
  "type": "boolean"
9486
9486
  },
9487
9487
  "network": {
9488
+ "description": "Omit in client/chat contexts — the runtime stamps the user's CURRENT network (the client's UI selection). Standalone MCP/CLI: omit to use the current network; set ONLY when the user explicitly names a different network (a mismatch pauses for user confirmation). Never guess or hardcode a network.",
9488
9489
  "type": "string",
9489
9490
  "enum": [
9490
9491
  "localnet",
9491
9492
  "testnet",
9492
9493
  "mainnet"
9493
- ],
9494
- "description": "Network entrypoint: Specifies which network the operation occurs on. FIX-010 cross-network note: LocalMark names are scoped per network (testnet marks are invisible on mainnet and vice versa). When migrating from testnet to mainnet, recreate all objects on mainnet and re-register LocalMark names with the SAME names to keep name-based references working across networks. Recreate all objects on the target network via onchain_operations with env.network=target_network, then re-register the LocalMark names."
9494
+ ]
9495
9495
  },
9496
9496
  "referrer": {
9497
9497
  "description": "Referrer ID. If the user is using the network for the first time, the referrer ID will be recorded (also applied when the SDK auto-registers the sender in the global Entity table).",
@@ -10624,13 +10624,13 @@
10624
10624
  "type": "boolean"
10625
10625
  },
10626
10626
  "network": {
10627
+ "description": "Omit in client/chat contexts — the runtime stamps the user's CURRENT network (the client's UI selection). Standalone MCP/CLI: omit to use the current network; set ONLY when the user explicitly names a different network (a mismatch pauses for user confirmation). Never guess or hardcode a network.",
10627
10628
  "type": "string",
10628
10629
  "enum": [
10629
10630
  "localnet",
10630
10631
  "testnet",
10631
10632
  "mainnet"
10632
- ],
10633
- "description": "Network entrypoint: Specifies which network the operation occurs on. FIX-010 cross-network note: LocalMark names are scoped per network (testnet marks are invisible on mainnet and vice versa). When migrating from testnet to mainnet, recreate all objects on mainnet and re-register LocalMark names with the SAME names to keep name-based references working across networks. Recreate all objects on the target network via onchain_operations with env.network=target_network, then re-register the LocalMark names."
10633
+ ]
10634
10634
  },
10635
10635
  "referrer": {
10636
10636
  "description": "Referrer ID. If the user is using the network for the first time, the referrer ID will be recorded (also applied when the SDK auto-registers the sender in the global Entity table).",
@@ -11390,7 +11390,7 @@
11390
11390
  "additionalProperties": false,
11391
11391
  "description": "Fund allocation item — one recipient's share of the Allocation balance. The `sharing` value's meaning depends on `mode` (see AllocationModeSchema). Multiple items in the same Allocator are evaluated together: Amount items first, Rate items second, Surplus last."
11392
11392
  },
11393
- "description": "Fund allocation item list. Each item specifies a recipient (who), a value (sharing), and a mode. Items can mix modes (Amount + Rate + Surplus) within the same Allocator. ALLOCATION ORDER: Amount items first (cached as fix) → Rate items (proportional to balance - fix) → Surplus item (remaining). CONSTRAINTS: max ONE Surplus item per Allocator; Rate sum must == 10000 (no Surplus) or <= 10000 (with Surplus); Amount sum must >= threshold (no Rate and no Surplus) and <= max (if max set)."
11393
+ "description": "Fund allocation item list. Each item specifies a recipient (who), a value (sharing), and a mode. Items can mix modes (Amount + Rate + Surplus) within the same Allocator. RECIPIENT SEMANTICS: the Guard constrains what each submission slot may be; a recipient's safety follows from the sufficiency of those constraints (run the recipient constraint audit). Canonical order pattern: recipient = the single submitted Order — funds land at that object and are receivable only by its owner. ALLOCATION ORDER: Amount items first (cached as fix) → Rate items (proportional to balance - fix) → Surplus item (remaining). CONSTRAINTS: max ONE Surplus item per Allocator; Rate sum must == 10000 (no Surplus) or <= 10000 (with Surplus); Amount sum must >= threshold (no Rate and no Surplus) and <= max (if max set)."
11394
11394
  },
11395
11395
  "fix": {
11396
11396
  "description": "OUTPUT-ONLY (query result). Cached sum of all Amount-mode `sharing` values in this Allocator. Computed by the contract during `allocator_add` — DO NOT set this field at creation. Used internally to compute `total_rates = balance - fix` for Rate allocation.",
@@ -11484,7 +11484,7 @@
11484
11484
  "type": "object",
11485
11485
  "properties": {
11486
11486
  "for_object": {
11487
- "description": "Payment for a specific object ID",
11487
+ "description": "Object this distribution belongs to (e.g. the order for a per-order allocation, recorded at creation). Auditors can query it to see the distribution's business context.",
11488
11488
  "anyOf": [
11489
11489
  {
11490
11490
  "type": "string"
@@ -11629,7 +11629,7 @@
11629
11629
  ]
11630
11630
  },
11631
11631
  "alloc_by_guard": {
11632
- "description": "Verify the specified Guard and execute the corresponding fund allocation. POST-ALLOCATION CLAIM (required step): each recipient receives a CoinWrapper object (NOT spendable coins). Recipient address resolution (allocation.move): Entity recipients receive it at the Entity's address; Signer recipients receive it at the transaction sender's address; GuardIdentifier n recipients receive it at the ADDRESS SUBMITTED for identifier n in this call's submission (resolved via passport::submission_get) — conventionally the Order OBJECT address (escrow pattern), in which case the order owner claims it via operation_type='order' {object:'<order_id>', receive:'recently'}. Claim paths by holder: EOA wallet → operation_type='payment' RECEIVE mode {object:'<coinwrapper_id>', receive:true} (type_parameter optional, auto-derived from the CoinWrapper type); Order object → order receive; Treasury object → treasury receive. Find pending CoinWrappers via query_toolkit query_type='onchain_received'. Verify the distribution via the immutable Payment object created by this call (allocation.payment array).",
11632
+ "description": "Verify the specified Guard and execute the corresponding fund distribution. GENERIC SEMANTICS: an Allocation distributes whatever balance it holds — order funds, payroll, dividends, bounties. It defines no scenario-specific rule: eligibility (including issuer identity for standalone use, e.g. an org admin) and differentiation inputs are expressed as Guard constraints, all public and auditable. RECIPIENT RESOLUTION (allocation.move Recipient enum): Entity → fixed address; Signer → transaction sender; GuardIdentifier n → the address submitted for identifier n (passport::submission_get). ORDER PATTERN (canonical): the Guard table needs ONE submitted Order, constrained by the Guard (e.g. order.service == host service, progress at a qualifying node, signer == order.owner); that order submission IS the recipient slot. Whoever calls alloc, funds necessarily land at an Order OBJECT; delivered CoinWrappers are owned by the order and can be extracted only via order::owner_receive (&mut Order input, Sui ownership) — the coins then go to the order's current owner. Object receipt = owner receipt. POST-DISTRIBUTION CLAIM (required step): each recipient gets a CoinWrapper (not spendable coins) — EOA wallet → operation_type='payment' RECEIVE mode {object:'<coinwrapper_id>', receive:true}; Order object → operation_type='order' {object:'<order_id>', receive:'recently'}; Treasury object → treasury receive. Find pending CoinWrappers via query_toolkit query_type='onchain_received'; verify via the immutable Payment object (allocation.payment array). RISK: safety follows from the sufficiency of the Guard constraints, not the recipient form — analyze the recipient constraint audit before publish; structural residuals (unavoidable): permissionless alloc allows forced settlement timing, the submitted order is not bound to the settled allocation, and allocators/guards are immutable after publish.",
11633
11633
  "type": "string"
11634
11634
  }
11635
11635
  },
@@ -11662,13 +11662,13 @@
11662
11662
  "type": "boolean"
11663
11663
  },
11664
11664
  "network": {
11665
+ "description": "Omit in client/chat contexts — the runtime stamps the user's CURRENT network (the client's UI selection). Standalone MCP/CLI: omit to use the current network; set ONLY when the user explicitly names a different network (a mismatch pauses for user confirmation). Never guess or hardcode a network.",
11665
11666
  "type": "string",
11666
11667
  "enum": [
11667
11668
  "localnet",
11668
11669
  "testnet",
11669
11670
  "mainnet"
11670
- ],
11671
- "description": "Network entrypoint: Specifies which network the operation occurs on. FIX-010 cross-network note: LocalMark names are scoped per network (testnet marks are invisible on mainnet and vice versa). When migrating from testnet to mainnet, recreate all objects on mainnet and re-register LocalMark names with the SAME names to keep name-based references working across networks. Recreate all objects on the target network via onchain_operations with env.network=target_network, then re-register the LocalMark names."
11671
+ ]
11672
11672
  },
11673
11673
  "referrer": {
11674
11674
  "description": "Referrer ID. If the user is using the network for the first time, the referrer ID will be recorded (also applied when the SDK auto-registers the sender in the global Entity table).",
@@ -13059,13 +13059,13 @@
13059
13059
  "type": "boolean"
13060
13060
  },
13061
13061
  "network": {
13062
+ "description": "Omit in client/chat contexts — the runtime stamps the user's CURRENT network (the client's UI selection). Standalone MCP/CLI: omit to use the current network; set ONLY when the user explicitly names a different network (a mismatch pauses for user confirmation). Never guess or hardcode a network.",
13062
13063
  "type": "string",
13063
13064
  "enum": [
13064
13065
  "localnet",
13065
13066
  "testnet",
13066
13067
  "mainnet"
13067
- ],
13068
- "description": "Network entrypoint: Specifies which network the operation occurs on. FIX-010 cross-network note: LocalMark names are scoped per network (testnet marks are invisible on mainnet and vice versa). When migrating from testnet to mainnet, recreate all objects on mainnet and re-register LocalMark names with the SAME names to keep name-based references working across networks. Recreate all objects on the target network via onchain_operations with env.network=target_network, then re-register the LocalMark names."
13068
+ ]
13069
13069
  },
13070
13070
  "referrer": {
13071
13071
  "description": "Referrer ID. If the user is using the network for the first time, the referrer ID will be recorded (also applied when the SDK auto-registers the sender in the global Entity table).",
@@ -15515,13 +15515,13 @@
15515
15515
  "type": "boolean"
15516
15516
  },
15517
15517
  "network": {
15518
+ "description": "Omit in client/chat contexts — the runtime stamps the user's CURRENT network (the client's UI selection). Standalone MCP/CLI: omit to use the current network; set ONLY when the user explicitly names a different network (a mismatch pauses for user confirmation). Never guess or hardcode a network.",
15518
15519
  "type": "string",
15519
15520
  "enum": [
15520
15521
  "localnet",
15521
15522
  "testnet",
15522
15523
  "mainnet"
15523
- ],
15524
- "description": "Network entrypoint: Specifies which network the operation occurs on. FIX-010 cross-network note: LocalMark names are scoped per network (testnet marks are invisible on mainnet and vice versa). When migrating from testnet to mainnet, recreate all objects on mainnet and re-register LocalMark names with the SAME names to keep name-based references working across networks. Recreate all objects on the target network via onchain_operations with env.network=target_network, then re-register the LocalMark names."
15524
+ ]
15525
15525
  },
15526
15526
  "referrer": {
15527
15527
  "description": "Referrer ID. If the user is using the network for the first time, the referrer ID will be recorded (also applied when the SDK auto-registers the sender in the global Entity table).",
@@ -16398,13 +16398,13 @@
16398
16398
  "type": "boolean"
16399
16399
  },
16400
16400
  "network": {
16401
+ "description": "Omit in client/chat contexts — the runtime stamps the user's CURRENT network (the client's UI selection). Standalone MCP/CLI: omit to use the current network; set ONLY when the user explicitly names a different network (a mismatch pauses for user confirmation). Never guess or hardcode a network.",
16401
16402
  "type": "string",
16402
16403
  "enum": [
16403
16404
  "localnet",
16404
16405
  "testnet",
16405
16406
  "mainnet"
16406
- ],
16407
- "description": "Network entrypoint: Specifies which network the operation occurs on. FIX-010 cross-network note: LocalMark names are scoped per network (testnet marks are invisible on mainnet and vice versa). When migrating from testnet to mainnet, recreate all objects on mainnet and re-register LocalMark names with the SAME names to keep name-based references working across networks. Recreate all objects on the target network via onchain_operations with env.network=target_network, then re-register the LocalMark names."
16407
+ ]
16408
16408
  },
16409
16409
  "referrer": {
16410
16410
  "description": "Referrer ID. If the user is using the network for the first time, the referrer ID will be recorded (also applied when the SDK auto-registers the sender in the global Entity table).",
@@ -16586,7 +16586,7 @@
16586
16586
  "type": "object",
16587
16587
  "properties": {
16588
16588
  "for_object": {
16589
- "description": "Payment for a specific object ID",
16589
+ "description": "Object this distribution belongs to (e.g. the order for a per-order allocation, recorded at creation). Auditors can query it to see the distribution's business context.",
16590
16590
  "anyOf": [
16591
16591
  {
16592
16592
  "type": "string"
@@ -16685,13 +16685,13 @@
16685
16685
  "type": "boolean"
16686
16686
  },
16687
16687
  "network": {
16688
+ "description": "Omit in client/chat contexts — the runtime stamps the user's CURRENT network (the client's UI selection). Standalone MCP/CLI: omit to use the current network; set ONLY when the user explicitly names a different network (a mismatch pauses for user confirmation). Never guess or hardcode a network.",
16688
16689
  "type": "string",
16689
16690
  "enum": [
16690
16691
  "localnet",
16691
16692
  "testnet",
16692
16693
  "mainnet"
16693
- ],
16694
- "description": "Network entrypoint: Specifies which network the operation occurs on. FIX-010 cross-network note: LocalMark names are scoped per network (testnet marks are invisible on mainnet and vice versa). When migrating from testnet to mainnet, recreate all objects on mainnet and re-register LocalMark names with the SAME names to keep name-based references working across networks. Recreate all objects on the target network via onchain_operations with env.network=target_network, then re-register the LocalMark names."
16694
+ ]
16695
16695
  },
16696
16696
  "referrer": {
16697
16697
  "description": "Referrer ID. If the user is using the network for the first time, the referrer ID will be recorded (also applied when the SDK auto-registers the sender in the global Entity table).",
@@ -17265,13 +17265,13 @@
17265
17265
  "type": "boolean"
17266
17266
  },
17267
17267
  "network": {
17268
+ "description": "Omit in client/chat contexts — the runtime stamps the user's CURRENT network (the client's UI selection). Standalone MCP/CLI: omit to use the current network; set ONLY when the user explicitly names a different network (a mismatch pauses for user confirmation). Never guess or hardcode a network.",
17268
17269
  "type": "string",
17269
17270
  "enum": [
17270
17271
  "localnet",
17271
17272
  "testnet",
17272
17273
  "mainnet"
17273
- ],
17274
- "description": "Network entrypoint: Specifies which network the operation occurs on. FIX-010 cross-network note: LocalMark names are scoped per network (testnet marks are invisible on mainnet and vice versa). When migrating from testnet to mainnet, recreate all objects on mainnet and re-register LocalMark names with the SAME names to keep name-based references working across networks. Recreate all objects on the target network via onchain_operations with env.network=target_network, then re-register the LocalMark names."
17274
+ ]
17275
17275
  },
17276
17276
  "referrer": {
17277
17277
  "description": "Referrer ID. If the user is using the network for the first time, the referrer ID will be recorded (also applied when the SDK auto-registers the sender in the global Entity table).",
@@ -18184,13 +18184,13 @@
18184
18184
  "type": "boolean"
18185
18185
  },
18186
18186
  "network": {
18187
+ "description": "Omit in client/chat contexts — the runtime stamps the user's CURRENT network (the client's UI selection). Standalone MCP/CLI: omit to use the current network; set ONLY when the user explicitly names a different network (a mismatch pauses for user confirmation). Never guess or hardcode a network.",
18187
18188
  "type": "string",
18188
18189
  "enum": [
18189
18190
  "localnet",
18190
18191
  "testnet",
18191
18192
  "mainnet"
18192
- ],
18193
- "description": "Network entrypoint: Specifies which network the operation occurs on. FIX-010 cross-network note: LocalMark names are scoped per network (testnet marks are invisible on mainnet and vice versa). When migrating from testnet to mainnet, recreate all objects on mainnet and re-register LocalMark names with the SAME names to keep name-based references working across networks. Recreate all objects on the target network via onchain_operations with env.network=target_network, then re-register the LocalMark names."
18193
+ ]
18194
18194
  },
18195
18195
  "referrer": {
18196
18196
  "description": "Referrer ID. If the user is using the network for the first time, the referrer ID will be recorded (also applied when the SDK auto-registers the sender in the global Entity table).",
@@ -19342,13 +19342,13 @@
19342
19342
  "type": "boolean"
19343
19343
  },
19344
19344
  "network": {
19345
+ "description": "Omit in client/chat contexts — the runtime stamps the user's CURRENT network (the client's UI selection). Standalone MCP/CLI: omit to use the current network; set ONLY when the user explicitly names a different network (a mismatch pauses for user confirmation). Never guess or hardcode a network.",
19345
19346
  "type": "string",
19346
19347
  "enum": [
19347
19348
  "localnet",
19348
19349
  "testnet",
19349
19350
  "mainnet"
19350
- ],
19351
- "description": "Network entrypoint: Specifies which network the operation occurs on. FIX-010 cross-network note: LocalMark names are scoped per network (testnet marks are invisible on mainnet and vice versa). When migrating from testnet to mainnet, recreate all objects on mainnet and re-register LocalMark names with the SAME names to keep name-based references working across networks. Recreate all objects on the target network via onchain_operations with env.network=target_network, then re-register the LocalMark names."
19351
+ ]
19352
19352
  },
19353
19353
  "referrer": {
19354
19354
  "description": "Referrer ID. If the user is using the network for the first time, the referrer ID will be recorded (also applied when the SDK auto-registers the sender in the global Entity table).",
@@ -19539,13 +19539,13 @@
19539
19539
  "type": "boolean"
19540
19540
  },
19541
19541
  "network": {
19542
+ "description": "Omit in client/chat contexts — the runtime stamps the user's CURRENT network (the client's UI selection). Standalone MCP/CLI: omit to use the current network; set ONLY when the user explicitly names a different network (a mismatch pauses for user confirmation). Never guess or hardcode a network.",
19542
19543
  "type": "string",
19543
19544
  "enum": [
19544
19545
  "localnet",
19545
19546
  "testnet",
19546
19547
  "mainnet"
19547
- ],
19548
- "description": "Network entrypoint: Specifies which network the operation occurs on. FIX-010 cross-network note: LocalMark names are scoped per network (testnet marks are invisible on mainnet and vice versa). When migrating from testnet to mainnet, recreate all objects on mainnet and re-register LocalMark names with the SAME names to keep name-based references working across networks. Recreate all objects on the target network via onchain_operations with env.network=target_network, then re-register the LocalMark names."
19548
+ ]
19549
19549
  },
19550
19550
  "referrer": {
19551
19551
  "description": "Referrer ID. If the user is using the network for the first time, the referrer ID will be recorded (also applied when the SDK auto-registers the sender in the global Entity table).",
@@ -20216,13 +20216,13 @@
20216
20216
  "type": "boolean"
20217
20217
  },
20218
20218
  "network": {
20219
+ "description": "Omit in client/chat contexts — the runtime stamps the user's CURRENT network (the client's UI selection). Standalone MCP/CLI: omit to use the current network; set ONLY when the user explicitly names a different network (a mismatch pauses for user confirmation). Never guess or hardcode a network.",
20219
20220
  "type": "string",
20220
20221
  "enum": [
20221
20222
  "localnet",
20222
20223
  "testnet",
20223
20224
  "mainnet"
20224
- ],
20225
- "description": "Network entrypoint: Specifies which network the operation occurs on. FIX-010 cross-network note: LocalMark names are scoped per network (testnet marks are invisible on mainnet and vice versa). When migrating from testnet to mainnet, recreate all objects on mainnet and re-register LocalMark names with the SAME names to keep name-based references working across networks. Recreate all objects on the target network via onchain_operations with env.network=target_network, then re-register the LocalMark names."
20225
+ ]
20226
20226
  },
20227
20227
  "referrer": {
20228
20228
  "description": "Referrer ID. If the user is using the network for the first time, the referrer ID will be recorded (also applied when the SDK auto-registers the sender in the global Entity table).",
@@ -175,7 +175,7 @@
175
175
  "additionalProperties": false,
176
176
  "description": "Fund allocation item — one recipient's share of the Allocation balance. The `sharing` value's meaning depends on `mode` (see AllocationModeSchema). Multiple items in the same Allocator are evaluated together: Amount items first, Rate items second, Surplus last."
177
177
  },
178
- "description": "Fund allocation item list. Each item specifies a recipient (who), a value (sharing), and a mode. Items can mix modes (Amount + Rate + Surplus) within the same Allocator. ALLOCATION ORDER: Amount items first (cached as fix) → Rate items (proportional to balance - fix) → Surplus item (remaining). CONSTRAINTS: max ONE Surplus item per Allocator; Rate sum must == 10000 (no Surplus) or <= 10000 (with Surplus); Amount sum must >= threshold (no Rate and no Surplus) and <= max (if max set)."
178
+ "description": "Fund allocation item list. Each item specifies a recipient (who), a value (sharing), and a mode. Items can mix modes (Amount + Rate + Surplus) within the same Allocator. RECIPIENT SEMANTICS: the Guard constrains what each submission slot may be; a recipient's safety follows from the sufficiency of those constraints (run the recipient constraint audit). Canonical order pattern: recipient = the single submitted Order — funds land at that object and are receivable only by its owner. ALLOCATION ORDER: Amount items first (cached as fix) → Rate items (proportional to balance - fix) → Surplus item (remaining). CONSTRAINTS: max ONE Surplus item per Allocator; Rate sum must == 10000 (no Surplus) or <= 10000 (with Surplus); Amount sum must >= threshold (no Rate and no Surplus) and <= max (if max set)."
179
179
  },
180
180
  "fix": {
181
181
  "description": "OUTPUT-ONLY (query result). Cached sum of all Amount-mode `sharing` values in this Allocator. Computed by the contract during `allocator_add` — DO NOT set this field at creation. Used internally to compute `total_rates = balance - fix` for Rate allocation.",
@@ -269,7 +269,7 @@
269
269
  "type": "object",
270
270
  "properties": {
271
271
  "for_object": {
272
- "description": "Payment for a specific object ID",
272
+ "description": "Object this distribution belongs to (e.g. the order for a per-order allocation, recorded at creation). Auditors can query it to see the distribution's business context.",
273
273
  "anyOf": [
274
274
  {
275
275
  "type": "string"
@@ -414,7 +414,7 @@
414
414
  ]
415
415
  },
416
416
  "alloc_by_guard": {
417
- "description": "Verify the specified Guard and execute the corresponding fund allocation. POST-ALLOCATION CLAIM (required step): each recipient receives a CoinWrapper object (NOT spendable coins). Recipient address resolution (allocation.move): Entity recipients receive it at the Entity's address; Signer recipients receive it at the transaction sender's address; GuardIdentifier n recipients receive it at the ADDRESS SUBMITTED for identifier n in this call's submission (resolved via passport::submission_get) — conventionally the Order OBJECT address (escrow pattern), in which case the order owner claims it via operation_type='order' {object:'<order_id>', receive:'recently'}. Claim paths by holder: EOA wallet → operation_type='payment' RECEIVE mode {object:'<coinwrapper_id>', receive:true} (type_parameter optional, auto-derived from the CoinWrapper type); Order object → order receive; Treasury object → treasury receive. Find pending CoinWrappers via query_toolkit query_type='onchain_received'. Verify the distribution via the immutable Payment object created by this call (allocation.payment array).",
417
+ "description": "Verify the specified Guard and execute the corresponding fund distribution. GENERIC SEMANTICS: an Allocation distributes whatever balance it holds — order funds, payroll, dividends, bounties. It defines no scenario-specific rule: eligibility (including issuer identity for standalone use, e.g. an org admin) and differentiation inputs are expressed as Guard constraints, all public and auditable. RECIPIENT RESOLUTION (allocation.move Recipient enum): Entity → fixed address; Signer → transaction sender; GuardIdentifier n → the address submitted for identifier n (passport::submission_get). ORDER PATTERN (canonical): the Guard table needs ONE submitted Order, constrained by the Guard (e.g. order.service == host service, progress at a qualifying node, signer == order.owner); that order submission IS the recipient slot. Whoever calls alloc, funds necessarily land at an Order OBJECT; delivered CoinWrappers are owned by the order and can be extracted only via order::owner_receive (&mut Order input, Sui ownership) — the coins then go to the order's current owner. Object receipt = owner receipt. POST-DISTRIBUTION CLAIM (required step): each recipient gets a CoinWrapper (not spendable coins) — EOA wallet → operation_type='payment' RECEIVE mode {object:'<coinwrapper_id>', receive:true}; Order object → operation_type='order' {object:'<order_id>', receive:'recently'}; Treasury object → treasury receive. Find pending CoinWrappers via query_toolkit query_type='onchain_received'; verify via the immutable Payment object (allocation.payment array). RISK: safety follows from the sufficiency of the Guard constraints, not the recipient form — analyze the recipient constraint audit before publish; structural residuals (unavoidable): permissionless alloc allows forced settlement timing, the submitted order is not bound to the settled allocation, and allocators/guards are immutable after publish.",
418
418
  "type": "string"
419
419
  }
420
420
  },
@@ -447,13 +447,13 @@
447
447
  "type": "boolean"
448
448
  },
449
449
  "network": {
450
+ "description": "Omit in client/chat contexts — the runtime stamps the user's CURRENT network (the client's UI selection). Standalone MCP/CLI: omit to use the current network; set ONLY when the user explicitly names a different network (a mismatch pauses for user confirmation). Never guess or hardcode a network.",
450
451
  "type": "string",
451
452
  "enum": [
452
453
  "localnet",
453
454
  "testnet",
454
455
  "mainnet"
455
- ],
456
- "description": "Network entrypoint: Specifies which network the operation occurs on. FIX-010 cross-network note: LocalMark names are scoped per network (testnet marks are invisible on mainnet and vice versa). When migrating from testnet to mainnet, recreate all objects on mainnet and re-register LocalMark names with the SAME names to keep name-based references working across networks. Recreate all objects on the target network via onchain_operations with env.network=target_network, then re-register the LocalMark names."
456
+ ]
457
457
  },
458
458
  "referrer": {
459
459
  "description": "Referrer ID. If the user is using the network for the first time, the referrer ID will be recorded (also applied when the SDK auto-registers the sender in the global Entity table).",
@@ -728,13 +728,13 @@
728
728
  "type": "boolean"
729
729
  },
730
730
  "network": {
731
+ "description": "Omit in client/chat contexts — the runtime stamps the user's CURRENT network (the client's UI selection). Standalone MCP/CLI: omit to use the current network; set ONLY when the user explicitly names a different network (a mismatch pauses for user confirmation). Never guess or hardcode a network.",
731
732
  "type": "string",
732
733
  "enum": [
733
734
  "localnet",
734
735
  "testnet",
735
736
  "mainnet"
736
- ],
737
- "description": "Network entrypoint: Specifies which network the operation occurs on. FIX-010 cross-network note: LocalMark names are scoped per network (testnet marks are invisible on mainnet and vice versa). When migrating from testnet to mainnet, recreate all objects on mainnet and re-register LocalMark names with the SAME names to keep name-based references working across networks. Recreate all objects on the target network via onchain_operations with env.network=target_network, then re-register the LocalMark names."
737
+ ]
738
738
  },
739
739
  "referrer": {
740
740
  "description": "Referrer ID. If the user is using the network for the first time, the referrer ID will be recorded (also applied when the SDK auto-registers the sender in the global Entity table).",
@@ -363,13 +363,13 @@
363
363
  "type": "boolean"
364
364
  },
365
365
  "network": {
366
+ "description": "Omit in client/chat contexts — the runtime stamps the user's CURRENT network (the client's UI selection). Standalone MCP/CLI: omit to use the current network; set ONLY when the user explicitly names a different network (a mismatch pauses for user confirmation). Never guess or hardcode a network.",
366
367
  "type": "string",
367
368
  "enum": [
368
369
  "localnet",
369
370
  "testnet",
370
371
  "mainnet"
371
- ],
372
- "description": "Network entrypoint: Specifies which network the operation occurs on. FIX-010 cross-network note: LocalMark names are scoped per network (testnet marks are invisible on mainnet and vice versa). When migrating from testnet to mainnet, recreate all objects on mainnet and re-register LocalMark names with the SAME names to keep name-based references working across networks. Recreate all objects on the target network via onchain_operations with env.network=target_network, then re-register the LocalMark names."
372
+ ]
373
373
  },
374
374
  "referrer": {
375
375
  "description": "Referrer ID. If the user is using the network for the first time, the referrer ID will be recorded (also applied when the SDK auto-registers the sender in the global Entity table).",
@@ -513,13 +513,13 @@
513
513
  "type": "boolean"
514
514
  },
515
515
  "network": {
516
+ "description": "Omit in client/chat contexts — the runtime stamps the user's CURRENT network (the client's UI selection). Standalone MCP/CLI: omit to use the current network; set ONLY when the user explicitly names a different network (a mismatch pauses for user confirmation). Never guess or hardcode a network.",
516
517
  "type": "string",
517
518
  "enum": [
518
519
  "localnet",
519
520
  "testnet",
520
521
  "mainnet"
521
- ],
522
- "description": "Network entrypoint: Specifies which network the operation occurs on. FIX-010 cross-network note: LocalMark names are scoped per network (testnet marks are invisible on mainnet and vice versa). When migrating from testnet to mainnet, recreate all objects on mainnet and re-register LocalMark names with the SAME names to keep name-based references working across networks. Recreate all objects on the target network via onchain_operations with env.network=target_network, then re-register the LocalMark names."
522
+ ]
523
523
  },
524
524
  "referrer": {
525
525
  "description": "Referrer ID. If the user is using the network for the first time, the referrer ID will be recorded (also applied when the SDK auto-registers the sender in the global Entity table).",
@@ -567,13 +567,13 @@
567
567
  "type": "boolean"
568
568
  },
569
569
  "network": {
570
+ "description": "Omit in client/chat contexts — the runtime stamps the user's CURRENT network (the client's UI selection). Standalone MCP/CLI: omit to use the current network; set ONLY when the user explicitly names a different network (a mismatch pauses for user confirmation). Never guess or hardcode a network.",
570
571
  "type": "string",
571
572
  "enum": [
572
573
  "localnet",
573
574
  "testnet",
574
575
  "mainnet"
575
- ],
576
- "description": "Network entrypoint: Specifies which network the operation occurs on. FIX-010 cross-network note: LocalMark names are scoped per network (testnet marks are invisible on mainnet and vice versa). When migrating from testnet to mainnet, recreate all objects on mainnet and re-register LocalMark names with the SAME names to keep name-based references working across networks. Recreate all objects on the target network via onchain_operations with env.network=target_network, then re-register the LocalMark names."
576
+ ]
577
577
  },
578
578
  "referrer": {
579
579
  "description": "Referrer ID. If the user is using the network for the first time, the referrer ID will be recorded (also applied when the SDK auto-registers the sender in the global Entity table).",