@wowok/agent-mcp 2.6.0 → 2.6.3

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 (186) hide show
  1. package/README.md +5 -3
  2. package/dist/customer/info-puzzle.d.ts +1 -1
  3. package/dist/customer/info-puzzle.js +4 -2
  4. package/dist/customer/risk-assessment.js +26 -4
  5. package/dist/customer/types.d.ts +2 -0
  6. package/dist/examples/guard-template-balance-check.json +38 -0
  7. package/dist/examples/guard-template-time-lock.json +39 -0
  8. package/dist/examples/machine-template-7node-rental.json +114 -0
  9. package/dist/examples/rental-ziroom-machine-create.json +137 -0
  10. package/dist/examples/rental-ziroom-permission-create.json +35 -0
  11. package/dist/examples/rental-ziroom-service-create.json +80 -0
  12. package/dist/examples/retail-myshop-service-create.json +88 -0
  13. package/dist/extensions/capability-manifest.d.ts +125 -0
  14. package/dist/extensions/capability-manifest.js +594 -0
  15. package/dist/extensions/constraint-registry.d.ts +24 -0
  16. package/dist/extensions/constraint-registry.js +196 -0
  17. package/dist/extensions/index.d.ts +12 -0
  18. package/dist/extensions/index.js +6 -0
  19. package/dist/extensions/metric-registry.d.ts +26 -0
  20. package/dist/extensions/metric-registry.js +257 -0
  21. package/dist/extensions/mode-evaluator.d.ts +15 -0
  22. package/dist/extensions/mode-evaluator.js +170 -0
  23. package/dist/extensions/modes.d.ts +2 -0
  24. package/dist/extensions/modes.js +493 -0
  25. package/dist/extensions/registry.d.ts +50 -0
  26. package/dist/extensions/registry.js +662 -0
  27. package/dist/extensions/types.d.ts +219 -0
  28. package/dist/extensions/types.js +1 -0
  29. package/dist/index.js +50 -0
  30. package/dist/knowledge/deployment-scanner.d.ts +3 -0
  31. package/dist/knowledge/deployment-scanner.js +64 -3
  32. package/dist/knowledge/fund-layer.d.ts +72 -0
  33. package/dist/knowledge/fund-layer.js +420 -0
  34. package/dist/knowledge/guard-render.d.ts +57 -0
  35. package/dist/knowledge/guard-render.js +700 -0
  36. package/dist/knowledge/guard-risk.d.ts +13 -0
  37. package/dist/knowledge/guard-risk.js +57 -0
  38. package/dist/knowledge/guard-submission-prompt.d.ts +31 -0
  39. package/dist/knowledge/guard-submission-prompt.js +171 -0
  40. package/dist/knowledge/guard-templates.js +278 -0
  41. package/dist/knowledge/machine-ledger.js +1 -1
  42. package/dist/knowledge/machine-render.d.ts +41 -0
  43. package/dist/knowledge/machine-render.js +565 -0
  44. package/dist/knowledge/machine-templates.js +24 -5
  45. package/dist/knowledge/reward-confirm.js +2 -2
  46. package/dist/knowledge/reward-puzzle.js +1 -1
  47. package/dist/knowledge/reward-risk.js +9 -9
  48. package/dist/knowledge/reward-templates.js +2 -2
  49. package/dist/knowledge/service-confirm.d.ts +15 -6
  50. package/dist/knowledge/service-confirm.js +119 -11
  51. package/dist/knowledge/service-context.js +1 -1
  52. package/dist/knowledge/service-ledger.js +1 -1
  53. package/dist/knowledge/service-risk.d.ts +1 -1
  54. package/dist/knowledge/service-risk.js +3 -3
  55. package/dist/knowledge/service-templates.js +2 -2
  56. package/dist/knowledge/service-translation.d.ts +1 -1
  57. package/dist/knowledge/service-translation.js +7 -7
  58. package/dist/knowledge/tool-constraints.js +6 -2
  59. package/dist/project/deployment-bridge.d.ts +1 -1
  60. package/dist/project/deployment-bridge.js +31 -7
  61. package/dist/project/deployment-doc.d.ts +3 -0
  62. package/dist/project/deployment-doc.js +76 -14
  63. package/dist/project/edit-planner.d.ts +123 -0
  64. package/dist/project/edit-planner.js +1371 -0
  65. package/dist/project/evaluation.d.ts +2 -0
  66. package/dist/project/evaluation.js +873 -88
  67. package/dist/project/graph-builder.d.ts +4 -1
  68. package/dist/project/graph-builder.js +132 -62
  69. package/dist/project/graph.d.ts +1 -0
  70. package/dist/project/handlers.d.ts +317 -6
  71. package/dist/project/handlers.js +1171 -19
  72. package/dist/project/stage-gate.d.ts +4 -0
  73. package/dist/project/stage-gate.js +64 -5
  74. package/dist/project/task-tracker.d.ts +26 -0
  75. package/dist/project/task-tracker.js +78 -0
  76. package/dist/safety/preview.js +16 -0
  77. package/dist/schema/call/allocation.d.ts +16 -16
  78. package/dist/schema/call/allocation.js +2 -2
  79. package/dist/schema/call/arbitration.js +19 -6
  80. package/dist/schema/call/base.d.ts +21 -13
  81. package/dist/schema/call/base.js +27 -6
  82. package/dist/schema/call/bridge.d.ts +5 -5
  83. package/dist/schema/call/bridge.js +3 -1
  84. package/dist/schema/call/contact.js +2 -2
  85. package/dist/schema/call/demand.d.ts +23 -31
  86. package/dist/schema/call/demand.js +2 -2
  87. package/dist/schema/call/guard.js +2 -2
  88. package/dist/schema/call/machine.d.ts +1976 -752
  89. package/dist/schema/call/machine.js +50 -4
  90. package/dist/schema/call/order.d.ts +149 -228
  91. package/dist/schema/call/order.js +4 -3
  92. package/dist/schema/call/payment.d.ts +183 -3
  93. package/dist/schema/call/payment.js +21 -3
  94. package/dist/schema/call/permission.js +2 -2
  95. package/dist/schema/call/personal.d.ts +241 -52
  96. package/dist/schema/call/progress.d.ts +53 -61
  97. package/dist/schema/call/progress.js +18 -4
  98. package/dist/schema/call/repository.d.ts +23 -31
  99. package/dist/schema/call/repository.js +2 -2
  100. package/dist/schema/call/reward.js +3 -3
  101. package/dist/schema/call/semantic.d.ts +1 -1
  102. package/dist/schema/call/semantic.js +37 -2
  103. package/dist/schema/call/service.d.ts +275 -127
  104. package/dist/schema/call/service.js +89 -13
  105. package/dist/schema/call/treasury.js +3 -3
  106. package/dist/schema/common/index.d.ts +13 -2
  107. package/dist/schema/common/index.js +80 -15
  108. package/dist/schema/local/index.d.ts +32 -35
  109. package/dist/schema/local/index.js +28 -6
  110. package/dist/schema/messenger/index.d.ts +274 -46
  111. package/dist/schema/operations.d.ts +1264 -544
  112. package/dist/schema/operations.js +65 -7
  113. package/dist/schema/project/index.d.ts +2846 -167
  114. package/dist/schema/project/index.js +570 -16
  115. package/dist/schema/query/index.d.ts +922 -349
  116. package/dist/schema/query/index.js +205 -42
  117. package/dist/schema/schema-query/index.d.ts +65 -3
  118. package/dist/schema/schema-query/index.js +38 -5
  119. package/dist/schema/utils/node-parser.js +20 -4
  120. package/dist/schema/utils/object-type-utils.d.ts +12 -0
  121. package/dist/schema/utils/object-type-utils.js +35 -0
  122. package/dist/schema/utils/permission-machine-check.d.ts +49 -0
  123. package/dist/schema/utils/permission-machine-check.js +121 -0
  124. package/dist/schema/utils/skills-recommendation.d.ts +2 -0
  125. package/dist/schema/utils/skills-recommendation.js +76 -0
  126. package/dist/schema-query/index.d.ts +20 -1
  127. package/dist/schema-query/index.js +306 -4
  128. package/dist/schemas/account_operation.output.json +7 -1
  129. package/dist/schemas/account_operation.schema.json +3 -3
  130. package/dist/schemas/bridge_operation.output.json +6 -0
  131. package/dist/schemas/bridge_operation.schema.json +1 -1
  132. package/dist/schemas/guard-templates.json +379 -0
  133. package/dist/schemas/guard2file.schema.json +1 -1
  134. package/dist/schemas/index.json +1 -1
  135. package/dist/schemas/local_info_operation.output.json +6 -0
  136. package/dist/schemas/local_mark_operation.output.json +7 -1
  137. package/dist/schemas/local_mark_operation.schema.json +1 -1
  138. package/dist/schemas/machineNode2file.schema.json +1 -1
  139. package/dist/schemas/messenger_operation.schema.json +4 -4
  140. package/dist/schemas/onchain_events.output.json +1 -1
  141. package/dist/schemas/onchain_operations.output.json +2820 -0
  142. package/dist/schemas/onchain_operations.schema.json +444 -330
  143. package/dist/schemas/onchain_operations_allocation.schema.json +37 -28
  144. package/dist/schemas/onchain_operations_arbitration.schema.json +16 -14
  145. package/dist/schemas/onchain_operations_contact.schema.json +10 -10
  146. package/dist/schemas/onchain_operations_demand.schema.json +10 -10
  147. package/dist/schemas/onchain_operations_gen_passport.schema.json +16 -16
  148. package/dist/schemas/onchain_operations_gen_proof.schema.json +2 -2
  149. package/dist/schemas/onchain_operations_guard.schema.json +2 -2
  150. package/dist/schemas/onchain_operations_machine.schema.json +43 -35
  151. package/dist/schemas/onchain_operations_order.schema.json +72 -78
  152. package/dist/schemas/onchain_operations_payment.schema.json +141 -111
  153. package/dist/schemas/onchain_operations_permission.schema.json +3 -3
  154. package/dist/schemas/onchain_operations_personal.schema.json +7 -7
  155. package/dist/schemas/onchain_operations_progress.schema.json +9 -9
  156. package/dist/schemas/onchain_operations_proof.schema.json +8 -8
  157. package/dist/schemas/onchain_operations_repository.schema.json +10 -10
  158. package/dist/schemas/onchain_operations_reward.schema.json +14 -14
  159. package/dist/schemas/onchain_operations_service.schema.json +119 -48
  160. package/dist/schemas/onchain_operations_treasury.schema.json +11 -11
  161. package/dist/schemas/onchain_table_data.output.json +33 -25
  162. package/dist/schemas/onchain_table_data.schema.json +22 -21
  163. package/dist/schemas/project_operation.output.json +2194 -23
  164. package/dist/schemas/project_operation.schema.json +84 -6
  165. package/dist/schemas/query_toolkit.output.json +108 -80
  166. package/dist/schemas/query_toolkit.schema.json +12 -12
  167. package/dist/schemas/schema_query.output.json +70 -3
  168. package/dist/schemas/schema_query.schema.json +18 -3
  169. package/dist/schemas/wowok_buildin_info.output.json +81 -8
  170. package/dist/schemas/wowok_buildin_info.schema.json +46 -2
  171. package/dist/tools/handlers/local.js +20 -5
  172. package/dist/tools/handlers/onchain.js +594 -6
  173. package/dist/tools/handlers/project.js +76 -4
  174. package/dist/tools/handlers/query.js +27 -0
  175. package/dist/tools/handlers/schema-query.js +43 -1
  176. package/dist/tools/handlers/task-status.d.ts +170 -0
  177. package/dist/tools/handlers/task-status.js +55 -0
  178. package/dist/tools/handlers/wip.js +47 -1
  179. package/dist/tools/index.d.ts +8 -0
  180. package/dist/tools/index.js +387 -12
  181. package/dist/tools/retry.d.ts +8 -0
  182. package/dist/tools/retry.js +85 -0
  183. package/dist/tools/wip-deploy-assist.d.ts +28 -0
  184. package/dist/tools/wip-deploy-assist.js +278 -0
  185. package/package.json +2 -2
  186. package/dist/schemas/guard-node-examples.md +0 -199
@@ -76,7 +76,7 @@
76
76
  },
77
77
  "b_submission": {
78
78
  "type": "boolean",
79
- "description": "Whether user submission is required for this data"
79
+ "description": "Whether this table item's value is submitted dynamically at Guard trigger time (alloc_by_guard call). \n\ntrue = value is submitted by the caller when triggering the Guard. Use for runtime-context-dependent values like order address, user address. The 'value' field is ignored when b_submission=true; the caller must provide it via submissions[]. \n\nfalse = value is static, set at Guard creation time. Use for values known when the Guard is created: expected node names, expected merchant address, expected service address. The 'value' field must be populated and will be stored on-chain permanently. \n\nRule of thumb: if the value is the SAME for all future Guard triggers, use false. If the value DIFFERS per trigger (e.g., which order to release funds for), use true."
80
80
  },
81
81
  "value_type": {
82
82
  "anyOf": [
@@ -366,7 +366,7 @@
366
366
  "description": "vecvecu8"
367
367
  }
368
368
  ],
369
- "description": "Type of the value"
369
+ "description": "Type of the value stored in `value`. One of: Bool(0), Address(1), String(2), U8(3), U16(4), U32(5), U64(6), U128(7), U256(8), VecBool(9), VecAddress(10), VecString(11), VecU8(12), VecU16(13), VecU32(14), VecU64(15), VecU128(16), VecU256(17), VecVecU8(18). When value_type=Address (1), the `value` field accepts a hex address string, a LocalMark name, or an AccountOrMark_Address object — see `value` field description for details."
370
370
  },
371
371
  "value": {
372
372
  "anyOf": [
@@ -459,12 +459,12 @@
459
459
  }
460
460
  }
461
461
  ],
462
- "description": "The actual value data"
462
+ "description": "The actual value data. Format depends on `value_type`:\n• Bool: true/false (boolean)\n• Address (CRITICAL — string 'Address' is NOT a placeholder): a hex address (e.g. '0x1234...'), a LocalMark name (e.g. 'my-service' — resolved to address at evaluation time), an AccountOrMark_Address object (e.g. {name_or_address:'my-service'}), or system shorthand ('0xaaa' = EntityLinker, '0xaab' = EntityRegistrar). The literal string 'Address' itself is INVALID — it would be treated as a non-existent LocalMark name and fail. Example: value='0x2::wow::WOW<address>' or value='my-permission'.\n• String: any string\n• U8/U16/U32/U64/U128/U256: number or numeric string (e.g. 42 or '42')\n• Vec* types: arrays of the corresponding element type\nREQUIRED when b_submission=false. OPTIONAL when b_submission=true (value is supplied at evaluation time by user submission)."
463
463
  },
464
464
  "name": {
465
465
  "type": "string",
466
466
  "default": "",
467
- "description": "Name or description of this data"
467
+ "description": "Data name identifier. MAX 64 BCS characters (Chinese chars count as 3-4 BCS bytes each). Use short identifiers like 'order_id', 'delivery_node'. Put longer descriptions in the Guard's 'description' field, NOT here."
468
468
  },
469
469
  "object_type": {
470
470
  "type": "string",
@@ -502,7 +502,7 @@
502
502
  "TableItem_AddressMark",
503
503
  "TableItem_EntityRegistrar"
504
504
  ],
505
- "description": "Object type when value_type is Address and represents a specific object"
505
+ "description": "OUTPUT-ONLY (query side): Object type when value_type is Address and represents a specific object. Auto-derived by the system — DO NOT set this field at Guard creation."
506
506
  }
507
507
  },
508
508
  "required": [
@@ -511,7 +511,7 @@
511
511
  "value_type"
512
512
  ],
513
513
  "additionalProperties": false,
514
- "description": "Guard table item"
514
+ "description": "Guard table item (QUERY/OUTPUT form — includes auto-derived object_type field)"
515
515
  },
516
516
  "description": "User-submitted data matching the Guard's required fields. Relation: structure must match the Guard table's column definitions. Example: [{field:'delivery_proof', value:'Qm...'}]"
517
517
  }
@@ -523,7 +523,7 @@
523
523
  "additionalProperties": false,
524
524
  "description": "One Guard's submission data: the Guard to verify plus the user-provided data that satisfies its requirements."
525
525
  },
526
- "description": "User-submitted data for each Guard. Relation: one entry per Guard in the guard array; fill submission fields and resubmit via call_with_submission."
526
+ "description": "User-submitted data for each Guard. Relation: one entry per Guard in the guard array; fill submission fields and resubmit via call_with_submission. PLACEMENT: this `submission` field is at the SAME level as `data` and `env` in the operation input — NOT inside `data.data`. Example structure: {tool:'onchain_operations', data:{operation_type:'order', data:{object:'my_order', progress:{...}}}, submission:{type:'submission', guard:[...], submission:[...]}}"
527
527
  }
528
528
  },
529
529
  "required": [
@@ -560,7 +560,7 @@
560
560
  "testnet",
561
561
  "mainnet"
562
562
  ],
563
- "description": "Network entrypoint: Specifies which network the operation occurs on"
563
+ "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. Use project_operation action='clone_project_to_network' to clone the project blueprint to the target network, then re-run onchain_operations with env.network=target_network to deploy."
564
564
  },
565
565
  "referrer": {
566
566
  "$ref": "#/definitions/data/properties/guard/anyOf/0",
@@ -675,7 +675,7 @@
675
675
  },
676
676
  "b_submission": {
677
677
  "type": "boolean",
678
- "description": "Whether user submission is required for this data"
678
+ "description": "Whether this table item's value is submitted dynamically at Guard trigger time (alloc_by_guard call). \n\ntrue = value is submitted by the caller when triggering the Guard. Use for runtime-context-dependent values like order address, user address. The 'value' field is ignored when b_submission=true; the caller must provide it via submissions[]. \n\nfalse = value is static, set at Guard creation time. Use for values known when the Guard is created: expected node names, expected merchant address, expected service address. The 'value' field must be populated and will be stored on-chain permanently. \n\nRule of thumb: if the value is the SAME for all future Guard triggers, use false. If the value DIFFERS per trigger (e.g., which order to release funds for), use true."
679
679
  },
680
680
  "value_type": {
681
681
  "anyOf": [
@@ -965,7 +965,7 @@
965
965
  "description": "vecvecu8"
966
966
  }
967
967
  ],
968
- "description": "Type of the value"
968
+ "description": "Type of the value stored in `value`. One of: Bool(0), Address(1), String(2), U8(3), U16(4), U32(5), U64(6), U128(7), U256(8), VecBool(9), VecAddress(10), VecString(11), VecU8(12), VecU16(13), VecU32(14), VecU64(15), VecU128(16), VecU256(17), VecVecU8(18). When value_type=Address (1), the `value` field accepts a hex address string, a LocalMark name, or an AccountOrMark_Address object — see `value` field description for details."
969
969
  },
970
970
  "value": {
971
971
  "anyOf": [
@@ -1058,12 +1058,12 @@
1058
1058
  }
1059
1059
  }
1060
1060
  ],
1061
- "description": "The actual value data"
1061
+ "description": "The actual value data. Format depends on `value_type`:\n• Bool: true/false (boolean)\n• Address (CRITICAL — string 'Address' is NOT a placeholder): a hex address (e.g. '0x1234...'), a LocalMark name (e.g. 'my-service' — resolved to address at evaluation time), an AccountOrMark_Address object (e.g. {name_or_address:'my-service'}), or system shorthand ('0xaaa' = EntityLinker, '0xaab' = EntityRegistrar). The literal string 'Address' itself is INVALID — it would be treated as a non-existent LocalMark name and fail. Example: value='0x2::wow::WOW<address>' or value='my-permission'.\n• String: any string\n• U8/U16/U32/U64/U128/U256: number or numeric string (e.g. 42 or '42')\n• Vec* types: arrays of the corresponding element type\nREQUIRED when b_submission=false. OPTIONAL when b_submission=true (value is supplied at evaluation time by user submission)."
1062
1062
  },
1063
1063
  "name": {
1064
1064
  "type": "string",
1065
1065
  "default": "",
1066
- "description": "Name or description of this data"
1066
+ "description": "Data name identifier. MAX 64 BCS characters (Chinese chars count as 3-4 BCS bytes each). Use short identifiers like 'order_id', 'delivery_node'. Put longer descriptions in the Guard's 'description' field, NOT here."
1067
1067
  },
1068
1068
  "object_type": {
1069
1069
  "type": "string",
@@ -1101,7 +1101,7 @@
1101
1101
  "TableItem_AddressMark",
1102
1102
  "TableItem_EntityRegistrar"
1103
1103
  ],
1104
- "description": "Object type when value_type is Address and represents a specific object"
1104
+ "description": "OUTPUT-ONLY (query side): Object type when value_type is Address and represents a specific object. Auto-derived by the system — DO NOT set this field at Guard creation."
1105
1105
  }
1106
1106
  },
1107
1107
  "required": [
@@ -1110,7 +1110,7 @@
1110
1110
  "value_type"
1111
1111
  ],
1112
1112
  "additionalProperties": false,
1113
- "description": "Guard table item"
1113
+ "description": "Guard table item (QUERY/OUTPUT form — includes auto-derived object_type field)"
1114
1114
  },
1115
1115
  "description": "User-submitted data matching the Guard's required fields. Relation: structure must match the Guard table's column definitions. Example: [{field:'delivery_proof', value:'Qm...'}]"
1116
1116
  }
@@ -1122,7 +1122,7 @@
1122
1122
  "additionalProperties": false,
1123
1123
  "description": "One Guard's submission data: the Guard to verify plus the user-provided data that satisfies its requirements."
1124
1124
  },
1125
- "description": "User-submitted data for each Guard. Relation: one entry per Guard in the guard array; fill submission fields and resubmit via call_with_submission."
1125
+ "description": "User-submitted data for each Guard. Relation: one entry per Guard in the guard array; fill submission fields and resubmit via call_with_submission. PLACEMENT: this `submission` field is at the SAME level as `data` and `env` in the operation input — NOT inside `data.data`. Example structure: {tool:'onchain_operations', data:{operation_type:'order', data:{object:'my_order', progress:{...}}}, submission:{type:'submission', guard:[...], submission:[...]}}"
1126
1126
  }
1127
1127
  },
1128
1128
  "required": [
@@ -1159,7 +1159,7 @@
1159
1159
  "testnet",
1160
1160
  "mainnet"
1161
1161
  ],
1162
- "description": "Network entrypoint: Specifies which network the operation occurs on"
1162
+ "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. Use project_operation action='clone_project_to_network' to clone the project blueprint to the target network, then re-run onchain_operations with env.network=target_network to deploy."
1163
1163
  },
1164
1164
  "referrer": {
1165
1165
  "$ref": "#/definitions/data/properties/guard/anyOf/0",
@@ -93,7 +93,7 @@
93
93
  "testnet",
94
94
  "mainnet"
95
95
  ],
96
- "description": "Network entrypoint: Specifies which network the operation occurs on"
96
+ "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. Use project_operation action='clone_project_to_network' to clone the project blueprint to the target network, then re-run onchain_operations with env.network=target_network to deploy."
97
97
  },
98
98
  "referrer": {
99
99
  "$ref": "#/definitions/data/properties/env/properties/account",
@@ -229,7 +229,7 @@
229
229
  "testnet",
230
230
  "mainnet"
231
231
  ],
232
- "description": "Network entrypoint: Specifies which network the operation occurs on"
232
+ "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. Use project_operation action='clone_project_to_network' to clone the project blueprint to the target network, then re-run onchain_operations with env.network=target_network to deploy."
233
233
  },
234
234
  "referrer": {
235
235
  "$ref": "#/definitions/data/properties/env/properties/account",
@@ -10,7 +10,7 @@
10
10
  },
11
11
  "data": {
12
12
  "type": "object",
13
- "description": "On-chain Guard creation. IMPORTANT: All defined data (include all submitted data) must be defined in the 'table' field. USAGE: Set 'namedNew' field with {name, tags?, onChain?} to name the new Guard. The Guard is immutable once created. Define the validation logic in 'root' field. When root.type='file', the file can contain all Guard fields, and any fields defined in the schema will OVERRIDE the file content.",
13
+ "description": "On-chain Guard creation. IMPORTANT: All defined data (include all submitted data) must be defined in the 'table' field. USAGE: Set 'namedNew' field with {name, tags?, onChain?} to name the new Guard (you may also use 'object' as an alias for 'namedNew' — the MCP preprocess will convert it automatically). The Guard is immutable once created. Define the validation logic in 'root' field. When root.type='file', the file can contain all Guard fields, and any fields defined in the schema will OVERRIDE the file content.",
14
14
  "properties": {
15
15
  "namedNew": {
16
16
  "$ref": "#/definitions/guard_namedNew",
@@ -109,7 +109,7 @@
109
109
  "testnet",
110
110
  "mainnet"
111
111
  ],
112
- "description": "Network entrypoint: Specifies which network the operation occurs on"
112
+ "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. Use project_operation action='clone_project_to_network' to clone the project blueprint to the target network, then re-run onchain_operations with env.network=target_network to deploy."
113
113
  },
114
114
  "referrer": {
115
115
  "$ref": "#/definitions/env/properties/account",
@@ -288,7 +288,7 @@
288
288
  "properties": {
289
289
  "prev_node": {
290
290
  "type": "string",
291
- "description": "Previous node name"
291
+ "description": "Previous node name. Empty string '' means initial entry node (the first node in the workflow)."
292
292
  },
293
293
  "threshold": {
294
294
  "type": [
@@ -348,38 +348,46 @@
348
348
  "guard": {
349
349
  "anyOf": [
350
350
  {
351
- "type": "object",
352
- "properties": {
353
- "guard": {
354
- "type": "string",
355
- "description": "Guard object ID"
356
- },
357
- "retained_submission": {
358
- "anyOf": [
359
- {
360
- "type": "array",
361
- "items": {
362
- "$ref": "#/definitions/data/properties/node/anyOf/0/anyOf/0/properties/nodes/items/properties/pairs/items/properties/threshold"
363
- }
351
+ "anyOf": [
352
+ {
353
+ "type": "object",
354
+ "properties": {
355
+ "guard": {
356
+ "type": "string",
357
+ "description": "Guard object name or address (string). Example: 'my_attendance_guard' or '0x1234...'"
364
358
  },
365
- {
366
- "type": "null"
359
+ "retained_submission": {
360
+ "anyOf": [
361
+ {
362
+ "type": "array",
363
+ "items": {
364
+ "$ref": "#/definitions/data/properties/node/anyOf/0/anyOf/0/properties/nodes/items/properties/pairs/items/properties/threshold"
365
+ }
366
+ },
367
+ {
368
+ "type": "null"
369
+ }
370
+ ],
371
+ "description": "Data submitted by user during Guard object verification"
367
372
  }
373
+ },
374
+ "required": [
375
+ "guard"
368
376
  ],
369
- "description": "Data submitted by user during Guard object verification"
377
+ "additionalProperties": false,
378
+ "description": "OBJECT form: {guard: '<guard_name_or_address>', retained_submission?: number[]}. Use this form when you need to pass retained_submission data alongside the Guard reference."
379
+ },
380
+ {
381
+ "type": "string",
382
+ "description": "STRING form (shorthand): the Guard object's name or address as a plain string. Auto-wrapped to {guard: <string>} at runtime. Use this when you only need to reference a Guard without retained_submission."
370
383
  }
371
- },
372
- "required": [
373
- "guard"
374
- ],
375
- "additionalProperties": false,
376
- "description": "Record of Guard object in MachineForwardGuard object"
384
+ ]
377
385
  },
378
386
  {
379
387
  "type": "null"
380
388
  }
381
389
  ],
382
- "description": "Guard object ID, if defined, Guard verification must also pass to complete Forward (e.g., completed promised supply chain sub-order)."
390
+ "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)."
383
391
  }
384
392
  },
385
393
  "required": [
@@ -389,7 +397,7 @@
389
397
  "additionalProperties": false,
390
398
  "description": "Forward in Machine object"
391
399
  },
392
- "description": "Forward list"
400
+ "description": "Forward list — operations to ENTER THIS NODE from prev_node. SEMANTIC CLARIFICATION: forwards describe INCOMING transitions (how to ARRIVE at this node), NOT outgoing transitions. Think of each forward as an 'entry door' to this node. Example: pair {prev_node:'A', forwards:[{name:'Go'}]} means 'use Go to advance FROM A TO THIS NODE'. For initial node (prev_node=''), forwards are operations to enter this node from the start state. DIAGRAM: A --[Go]--> B means the pair belongs to node B (destination), with prev_node='A'. WARNING: forwards belong to the DESTINATION node's pair, NOT the source node. Placing a forward on the wrong pair will cause Progress to get stuck."
393
401
  }
394
402
  },
395
403
  "required": [
@@ -738,7 +746,7 @@
738
746
  "number",
739
747
  "string"
740
748
  ],
741
- "description": "Balance type"
749
+ "description": "A coin/balance amount. Accepts three formats: (1) DISPLAY FORMAT with token symbol: \"2.5WOW\", \"10USDC\", \"0.05SUI\" — auto-converted to smallest units via the Fund Processing Layer (token precision resolved from official registry → cache → on-chain). The symbol MUST match the token's type_parameter. (2) SMALLEST UNIT (numeric string): \"10000000000\" — used as-is, no conversion. (3) SMALLEST UNIT (number): 10000000000 — used as-is (loses precision above 2^53). PRECISION RULE: for values exceeding 2^53, ALWAYS use format (1) or (2) — JS numbers lose precision. Default token: WOW (9 decimals, 1 WOW = 10^9 MIST). For custom tokens: use display format with the token's symbol, or pass smallest units directly. MONEY CONFIRMATION: all monetary fields trigger user confirmation via the Fund Processing Layer. If multiple tokens share a symbol (ambiguity), specify the full type string in type_parameter. Examples: \"2.5WOW\" (display → 2500000000), 10000000000 (number, smallest unit), \"50000000000\" (string, smallest unit). Used for: Service.sale.price, Service.compensation_fund_add balance, Treasury.deposit, Arbitration.fee, Reward.amount, stock quantities."
742
750
  },
743
751
  "token_type": {
744
752
  "type": "string",
@@ -785,7 +793,7 @@
785
793
  "const": "recently"
786
794
  }
787
795
  ],
788
- "description": "Unwrap CoinWrapper objects and other objects received by this object and send them to the owner of its Permission object."
796
+ "description": "Unwrap CoinWrapper objects and other objects received by this Machine object and send them to the owner of its Permission object.\n\nACCEPTED FORMATS (F-06 unified receive operation block):\n• 'recently' (string literal) — auto-query and receive ALL recently received objects.\n Use this for the common case: \"withdraw everything the object has received.\"\n Example: receive: 'recently'\n• ReceivedNormal[] (array) — explicit list of received objects to unwrap.\n Use this when you want to receive specific objects only (not all).\n Example: receive: [{id: '0xobj1', type: '0x2::coin::Coin<0x2::sui::SUI>'}]\n• ReceivedBalance ({token_type, balance, received: [{id, balance, payment}]}) —\n receive a balance record from a specific Payment/payer.\n Use this for precise balance targeting (advanced — usually after querying\n the object's received history via query_received).\n Example: receive: {token_type: '0x2::sui::SUI', balance: 1000000, received: [{id: '0xrec1', balance: 1000000, payment: '0xpay1'}]}\nANTI-PATTERN: do NOT wrap in {result: ...} — pass the value directly."
789
797
  },
790
798
  "um": {
791
799
  "anyOf": [
@@ -831,7 +839,7 @@
831
839
  "testnet",
832
840
  "mainnet"
833
841
  ],
834
- "description": "Network entrypoint: Specifies which network the operation occurs on"
842
+ "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. Use project_operation action='clone_project_to_network' to clone the project blueprint to the target network, then re-run onchain_operations with env.network=target_network to deploy."
835
843
  },
836
844
  "referrer": {
837
845
  "$ref": "#/definitions/env/properties/account",
@@ -921,7 +929,7 @@
921
929
  },
922
930
  "b_submission": {
923
931
  "type": "boolean",
924
- "description": "Whether user submission is required for this data"
932
+ "description": "Whether this table item's value is submitted dynamically at Guard trigger time (alloc_by_guard call). \n\ntrue = value is submitted by the caller when triggering the Guard. Use for runtime-context-dependent values like order address, user address. The 'value' field is ignored when b_submission=true; the caller must provide it via submissions[]. \n\nfalse = value is static, set at Guard creation time. Use for values known when the Guard is created: expected node names, expected merchant address, expected service address. The 'value' field must be populated and will be stored on-chain permanently. \n\nRule of thumb: if the value is the SAME for all future Guard triggers, use false. If the value DIFFERS per trigger (e.g., which order to release funds for), use true."
925
933
  },
926
934
  "value_type": {
927
935
  "anyOf": [
@@ -1211,7 +1219,7 @@
1211
1219
  "description": "vecvecu8"
1212
1220
  }
1213
1221
  ],
1214
- "description": "Type of the value"
1222
+ "description": "Type of the value stored in `value`. One of: Bool(0), Address(1), String(2), U8(3), U16(4), U32(5), U64(6), U128(7), U256(8), VecBool(9), VecAddress(10), VecString(11), VecU8(12), VecU16(13), VecU32(14), VecU64(15), VecU128(16), VecU256(17), VecVecU8(18). When value_type=Address (1), the `value` field accepts a hex address string, a LocalMark name, or an AccountOrMark_Address object — see `value` field description for details."
1215
1223
  },
1216
1224
  "value": {
1217
1225
  "anyOf": [
@@ -1304,12 +1312,12 @@
1304
1312
  }
1305
1313
  }
1306
1314
  ],
1307
- "description": "The actual value data"
1315
+ "description": "The actual value data. Format depends on `value_type`:\n• Bool: true/false (boolean)\n• Address (CRITICAL — string 'Address' is NOT a placeholder): a hex address (e.g. '0x1234...'), a LocalMark name (e.g. 'my-service' — resolved to address at evaluation time), an AccountOrMark_Address object (e.g. {name_or_address:'my-service'}), or system shorthand ('0xaaa' = EntityLinker, '0xaab' = EntityRegistrar). The literal string 'Address' itself is INVALID — it would be treated as a non-existent LocalMark name and fail. Example: value='0x2::wow::WOW<address>' or value='my-permission'.\n• String: any string\n• U8/U16/U32/U64/U128/U256: number or numeric string (e.g. 42 or '42')\n• Vec* types: arrays of the corresponding element type\nREQUIRED when b_submission=false. OPTIONAL when b_submission=true (value is supplied at evaluation time by user submission)."
1308
1316
  },
1309
1317
  "name": {
1310
1318
  "type": "string",
1311
1319
  "default": "",
1312
- "description": "Name or description of this data"
1320
+ "description": "Data name identifier. MAX 64 BCS characters (Chinese chars count as 3-4 BCS bytes each). Use short identifiers like 'order_id', 'delivery_node'. Put longer descriptions in the Guard's 'description' field, NOT here."
1313
1321
  },
1314
1322
  "object_type": {
1315
1323
  "type": "string",
@@ -1347,7 +1355,7 @@
1347
1355
  "TableItem_AddressMark",
1348
1356
  "TableItem_EntityRegistrar"
1349
1357
  ],
1350
- "description": "Object type when value_type is Address and represents a specific object"
1358
+ "description": "OUTPUT-ONLY (query side): Object type when value_type is Address and represents a specific object. Auto-derived by the system — DO NOT set this field at Guard creation."
1351
1359
  }
1352
1360
  },
1353
1361
  "required": [
@@ -1356,7 +1364,7 @@
1356
1364
  "value_type"
1357
1365
  ],
1358
1366
  "additionalProperties": false,
1359
- "description": "Guard table item"
1367
+ "description": "Guard table item (QUERY/OUTPUT form — includes auto-derived object_type field)"
1360
1368
  },
1361
1369
  "description": "User-submitted data matching the Guard's required fields. Relation: structure must match the Guard table's column definitions. Example: [{field:'delivery_proof', value:'Qm...'}]"
1362
1370
  }
@@ -1368,7 +1376,7 @@
1368
1376
  "additionalProperties": false,
1369
1377
  "description": "One Guard's submission data: the Guard to verify plus the user-provided data that satisfies its requirements."
1370
1378
  },
1371
- "description": "User-submitted data for each Guard. Relation: one entry per Guard in the guard array; fill submission fields and resubmit via call_with_submission."
1379
+ "description": "User-submitted data for each Guard. Relation: one entry per Guard in the guard array; fill submission fields and resubmit via call_with_submission. PLACEMENT: this `submission` field is at the SAME level as `data` and `env` in the operation input — NOT inside `data.data`. Example structure: {tool:'onchain_operations', data:{operation_type:'order', data:{object:'my_order', progress:{...}}}, submission:{type:'submission', guard:[...], submission:[...]}}"
1372
1380
  }
1373
1381
  },
1374
1382
  "required": [
@@ -106,7 +106,7 @@
106
106
  "unhold",
107
107
  "adminUnhold"
108
108
  ],
109
- "description": "Operation type on the forward: 'next' = advance the forward (accomplish); 'hold' = set hold to block the forward; 'unhold' = self-unhold, release own hold (no 224 permission needed); 'adminUnhold' = force-release hold via 224 permission (PROGRESS_UNHOLD)."
109
+ "description": "Operation type on the forward (CANONICAL form — prefer this): 'next' = advance the forward (accomplish); 'hold' = set hold to block the forward; 'unhold' = self-unhold, release own hold (no 224 permission needed); 'adminUnhold' = force-release hold via 224 permission (PROGRESS_UNHOLD). LEGACY ALIAS: `hold: boolean` is auto-converted to `op` — `hold:true`→`op:'hold'`, `hold:false`→`op:'next'`. New code should use `op` directly."
110
110
  },
111
111
  "message": {
112
112
  "type": "string",
@@ -184,96 +184,90 @@
184
184
  "description": "Specify the adjudicated Arb object to obtain order compensation."
185
185
  },
186
186
  "receive": {
187
- "type": "object",
188
- "properties": {
189
- "result": {
190
- "anyOf": [
191
- {
192
- "type": "object",
193
- "properties": {
194
- "balance": {
195
- "type": [
196
- "number",
197
- "string"
198
- ],
199
- "description": "Balance type"
200
- },
201
- "token_type": {
202
- "type": "string",
203
- "description": "Asset type of Coin objects. Supports CoinWrapper<...> format for order receive operations."
204
- },
205
- "received": {
206
- "type": "array",
207
- "items": {
208
- "type": "object",
209
- "properties": {
210
- "id": {
211
- "type": "string",
212
- "description": "Received CoinWrapper object ID"
213
- },
214
- "balance": {
215
- "$ref": "#/definitions/data/properties/receive/properties/result/anyOf/0/properties/balance"
216
- },
217
- "payment": {
218
- "type": "string",
219
- "description": "Payment object ID"
220
- }
221
- },
222
- "required": [
223
- "id",
224
- "balance",
225
- "payment"
226
- ],
227
- "additionalProperties": false,
228
- "description": "Received CoinWrapper object record"
229
- },
230
- "description": "Received records of Coin objects"
231
- }
187
+ "anyOf": [
188
+ {
189
+ "type": "array",
190
+ "items": {
191
+ "type": "object",
192
+ "properties": {
193
+ "id": {
194
+ "type": "string",
195
+ "minLength": 1,
196
+ "description": "Received object ID"
232
197
  },
233
- "required": [
234
- "balance",
235
- "token_type",
236
- "received"
198
+ "type": {
199
+ "type": "string",
200
+ "minLength": 1,
201
+ "description": "Object type"
202
+ },
203
+ "content_raw": {
204
+ "description": "Raw content data"
205
+ }
206
+ },
207
+ "required": [
208
+ "id",
209
+ "type"
210
+ ],
211
+ "additionalProperties": false,
212
+ "description": "Received normal object record"
213
+ }
214
+ },
215
+ {
216
+ "type": "object",
217
+ "properties": {
218
+ "balance": {
219
+ "type": [
220
+ "number",
221
+ "string"
237
222
  ],
238
- "additionalProperties": false,
239
- "description": "Received record of Coin objects"
223
+ "description": "A coin/balance amount. Accepts three formats: (1) DISPLAY FORMAT with token symbol: \"2.5WOW\", \"10USDC\", \"0.05SUI\" — auto-converted to smallest units via the Fund Processing Layer (token precision resolved from official registry → cache → on-chain). The symbol MUST match the token's type_parameter. (2) SMALLEST UNIT (numeric string): \"10000000000\" — used as-is, no conversion. (3) SMALLEST UNIT (number): 10000000000 — used as-is (loses precision above 2^53). PRECISION RULE: for values exceeding 2^53, ALWAYS use format (1) or (2) — JS numbers lose precision. Default token: WOW (9 decimals, 1 WOW = 10^9 MIST). For custom tokens: use display format with the token's symbol, or pass smallest units directly. MONEY CONFIRMATION: all monetary fields trigger user confirmation via the Fund Processing Layer. If multiple tokens share a symbol (ambiguity), specify the full type string in type_parameter. Examples: \"2.5WOW\" (display → 2500000000), 10000000000 (number, smallest unit), \"50000000000\" (string, smallest unit). Used for: Service.sale.price, Service.compensation_fund_add balance, Treasury.deposit, Arbitration.fee, Reward.amount, stock quantities."
224
+ },
225
+ "token_type": {
226
+ "type": "string",
227
+ "description": "Asset type of Coin objects. Supports CoinWrapper<...> format for order receive operations."
240
228
  },
241
- {
229
+ "received": {
242
230
  "type": "array",
243
231
  "items": {
244
232
  "type": "object",
245
233
  "properties": {
246
234
  "id": {
247
235
  "type": "string",
248
- "minLength": 1,
249
- "description": "Received object ID"
236
+ "description": "Received CoinWrapper object ID"
250
237
  },
251
- "type": {
252
- "type": "string",
253
- "minLength": 1,
254
- "description": "Object type"
238
+ "balance": {
239
+ "$ref": "#/definitions/data/properties/receive/anyOf/1/properties/balance"
255
240
  },
256
- "content_raw": {
257
- "description": "Raw content data"
241
+ "payment": {
242
+ "type": "string",
243
+ "description": "Payment object ID"
258
244
  }
259
245
  },
260
246
  "required": [
261
247
  "id",
262
- "type"
248
+ "balance",
249
+ "payment"
263
250
  ],
264
251
  "additionalProperties": false,
265
- "description": "Received normal object record"
266
- }
252
+ "description": "Received CoinWrapper object record"
253
+ },
254
+ "description": "Received records of Coin objects"
267
255
  }
256
+ },
257
+ "required": [
258
+ "balance",
259
+ "token_type",
260
+ "received"
268
261
  ],
269
- "description": "Received CoinWrapper object record or received other objects array"
262
+ "additionalProperties": false,
263
+ "description": "Received record of Coin objects"
264
+ },
265
+ {
266
+ "type": "string",
267
+ "const": "recently"
270
268
  }
271
- },
272
- "required": [
273
- "result"
274
269
  ],
275
- "additionalProperties": false,
276
- "description": "Unwrap CoinWrapper objects or other objects received by the order and transfer them to the order owner"
270
+ "description": "Unwrap CoinWrapper objects or other objects received by the order and transfer them to the order owner. Consistent with `owner_receive` on other objects (arbitration/contact/demand/machine/permission/repository/reward/service/treasury).\n\nACCEPTED FORMATS (F-06 unified receive operation block):\n• 'recently' (string literal) — auto-query and receive ALL recently received objects.\n Use this for the common case: \"withdraw everything the object has received.\"\n Example: receive: 'recently'\n• ReceivedNormal[] (array) — explicit list of received objects to unwrap.\n Use this when you want to receive specific objects only (not all).\n Example: receive: [{id: '0xobj1', type: '0x2::coin::Coin<0x2::sui::SUI>'}]\n• ReceivedBalance ({token_type, balance, received: [{id, balance, payment}]}) —\n receive a balance record from a specific Payment/payer.\n Use this for precise balance targeting (advanced — usually after querying\n the object's received history via query_received).\n Example: receive: {token_type: '0x2::sui::SUI', balance: 1000000, received: [{id: '0xrec1', balance: 1000000, payment: '0xpay1'}]}\nANTI-PATTERN: do NOT wrap in {result: ...} — pass the value directly."
277
271
  },
278
272
  "transfer_to": {
279
273
  "$ref": "#/definitions/data/properties/agent/properties/entities/items",
@@ -312,7 +306,7 @@
312
306
  "testnet",
313
307
  "mainnet"
314
308
  ],
315
- "description": "Network entrypoint: Specifies which network the operation occurs on"
309
+ "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. Use project_operation action='clone_project_to_network' to clone the project blueprint to the target network, then re-run onchain_operations with env.network=target_network to deploy."
316
310
  },
317
311
  "referrer": {
318
312
  "$ref": "#/definitions/env/properties/account",
@@ -402,7 +396,7 @@
402
396
  },
403
397
  "b_submission": {
404
398
  "type": "boolean",
405
- "description": "Whether user submission is required for this data"
399
+ "description": "Whether this table item's value is submitted dynamically at Guard trigger time (alloc_by_guard call). \n\ntrue = value is submitted by the caller when triggering the Guard. Use for runtime-context-dependent values like order address, user address. The 'value' field is ignored when b_submission=true; the caller must provide it via submissions[]. \n\nfalse = value is static, set at Guard creation time. Use for values known when the Guard is created: expected node names, expected merchant address, expected service address. The 'value' field must be populated and will be stored on-chain permanently. \n\nRule of thumb: if the value is the SAME for all future Guard triggers, use false. If the value DIFFERS per trigger (e.g., which order to release funds for), use true."
406
400
  },
407
401
  "value_type": {
408
402
  "anyOf": [
@@ -692,7 +686,7 @@
692
686
  "description": "vecvecu8"
693
687
  }
694
688
  ],
695
- "description": "Type of the value"
689
+ "description": "Type of the value stored in `value`. One of: Bool(0), Address(1), String(2), U8(3), U16(4), U32(5), U64(6), U128(7), U256(8), VecBool(9), VecAddress(10), VecString(11), VecU8(12), VecU16(13), VecU32(14), VecU64(15), VecU128(16), VecU256(17), VecVecU8(18). When value_type=Address (1), the `value` field accepts a hex address string, a LocalMark name, or an AccountOrMark_Address object — see `value` field description for details."
696
690
  },
697
691
  "value": {
698
692
  "anyOf": [
@@ -785,12 +779,12 @@
785
779
  }
786
780
  }
787
781
  ],
788
- "description": "The actual value data"
782
+ "description": "The actual value data. Format depends on `value_type`:\n• Bool: true/false (boolean)\n• Address (CRITICAL — string 'Address' is NOT a placeholder): a hex address (e.g. '0x1234...'), a LocalMark name (e.g. 'my-service' — resolved to address at evaluation time), an AccountOrMark_Address object (e.g. {name_or_address:'my-service'}), or system shorthand ('0xaaa' = EntityLinker, '0xaab' = EntityRegistrar). The literal string 'Address' itself is INVALID — it would be treated as a non-existent LocalMark name and fail. Example: value='0x2::wow::WOW<address>' or value='my-permission'.\n• String: any string\n• U8/U16/U32/U64/U128/U256: number or numeric string (e.g. 42 or '42')\n• Vec* types: arrays of the corresponding element type\nREQUIRED when b_submission=false. OPTIONAL when b_submission=true (value is supplied at evaluation time by user submission)."
789
783
  },
790
784
  "name": {
791
785
  "type": "string",
792
786
  "default": "",
793
- "description": "Name or description of this data"
787
+ "description": "Data name identifier. MAX 64 BCS characters (Chinese chars count as 3-4 BCS bytes each). Use short identifiers like 'order_id', 'delivery_node'. Put longer descriptions in the Guard's 'description' field, NOT here."
794
788
  },
795
789
  "object_type": {
796
790
  "type": "string",
@@ -828,7 +822,7 @@
828
822
  "TableItem_AddressMark",
829
823
  "TableItem_EntityRegistrar"
830
824
  ],
831
- "description": "Object type when value_type is Address and represents a specific object"
825
+ "description": "OUTPUT-ONLY (query side): Object type when value_type is Address and represents a specific object. Auto-derived by the system — DO NOT set this field at Guard creation."
832
826
  }
833
827
  },
834
828
  "required": [
@@ -837,7 +831,7 @@
837
831
  "value_type"
838
832
  ],
839
833
  "additionalProperties": false,
840
- "description": "Guard table item"
834
+ "description": "Guard table item (QUERY/OUTPUT form — includes auto-derived object_type field)"
841
835
  },
842
836
  "description": "User-submitted data matching the Guard's required fields. Relation: structure must match the Guard table's column definitions. Example: [{field:'delivery_proof', value:'Qm...'}]"
843
837
  }
@@ -849,7 +843,7 @@
849
843
  "additionalProperties": false,
850
844
  "description": "One Guard's submission data: the Guard to verify plus the user-provided data that satisfies its requirements."
851
845
  },
852
- "description": "User-submitted data for each Guard. Relation: one entry per Guard in the guard array; fill submission fields and resubmit via call_with_submission."
846
+ "description": "User-submitted data for each Guard. Relation: one entry per Guard in the guard array; fill submission fields and resubmit via call_with_submission. PLACEMENT: this `submission` field is at the SAME level as `data` and `env` in the operation input — NOT inside `data.data`. Example structure: {tool:'onchain_operations', data:{operation_type:'order', data:{object:'my_order', progress:{...}}}, submission:{type:'submission', guard:[...], submission:[...]}}"
853
847
  }
854
848
  },
855
849
  "required": [